[*] Binary protection state of libgobject-2.0.so.0.5600.4

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


[*] Function strcpy tear down of libgobject-2.0.so.0.5600.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/lib/libgobject-2.0.so.0.5600.4 @ 0x2579c */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.0002579c ()                                      | void fcn_0002579c (int32_t arg1, void * arg2) {
                                                                 |     int32_t var_0h;
                                                                 |     int32_t var_ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x0002579c push {r0, r1, r2, r4, r5, r6, r7, r8, sb, lr}     |     
    0x000257a0 ldr r3, [r0, 0x14]                                |     r3 = *((r0 + 0x14));
    0x000257a4 cmp r1, 0                                         |     
    0x000257a8 clz r3, r3                                        |     r3 &= r3;
    0x000257ac lsr r3, r3, 5                                     |     r3 >>= 5;
                                                                 |     if (r1 != 0) {
    0x000257b0 moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x000257b4 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000257b8 beq 0x259cc                                       |         goto label_1;
                                                                 |     }
    0x000257bc cmp r2, 0                                         |     
    0x000257c0 mov r6, r0                                        |     r6 = r0;
    0x000257c4 mov r8, r2                                        |     r8 = r2;
    0x000257c8 mov r4, r1                                        |     r4 = r1;
                                                                 |     if (r2 == 0) {
    0x000257cc bne 0x257f8                                       |         
    0x000257d0 ldr r0, [r0, 0x2c]                                |         r0 = *((r0 + 0x2c));
    0x000257d4 bl 0x24a84                                        |         r0 = fcn_00024a84 (r0);
    0x000257d8 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x000257dc ldrne r3, [r0, 0x14]                              |             r3 = *((r0 + 0x14));
                                                                 |         }
                                                                 |         if (r0 == 0) {
    0x000257e0 movne r5, r2                                      |             r5 = r2;
                                                                 |         }
                                                                 |         if (r0 == 0) {
    0x000257e4 ldrne r7, [r3]                                    |             r7 = *(r3);
                                                                 |         }
                                                                 |         if (r0 != 0) {
    0x000257e8 bne 0x2582c                                       |             goto label_2;
                                                                 |         }
    0x000257ec ldr r8, [pc, 0x328]                               |         
    0x000257f0 add r8, pc, r8                                    |         r8 = pc + r8;
    0x000257f4 add r8, r8, 0x5c                                  |         r8 = 0x25b74;
                                                                 |     }
    0x000257f8 ldr r0, [r8, 0x10]                                |     r0 = *((r8 + 0x10));
    0x000257fc cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00025800 moveq r5, 0x20                                    |         r5 = 0x20;
                                                                 |     }
                                                                 |     if (r0 != 0) {
    0x00025804 beq 0x25810                                       |         
    0x00025808 bl 0x9598                                         |         r0 = strlen (r0);
    0x0002580c add r5, r0, 0x20                                  |         r5 = r0 + 0x20;
                                                                 |     }
    0x00025810 ldr r0, [r8, 0x18]                                |     r0 = *((r8 + 0x18));
    0x00025814 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00025818 beq 0x25824                                       |         
    0x0002581c bl 0x9598                                         |         r0 = strlen (r0);
    0x00025820 add r5, r5, r0                                    |         r5 += r0;
                                                                 |     }
    0x00025824 add r5, r5, 2                                     |     r5 += 2;
    0x00025828 mov r7, 0                                         |     r7 = 0;
                                                                 | label_2:
    0x0002582c ldrb r3, [r6, 0xe]                                |     r3 = *((r6 + 0xe));
    0x00025830 tst r3, 4                                         |     
                                                                 |     if ((r3 & 4) == 0) {
    0x00025834 beq 0x259fc                                       |         goto label_3;
                                                                 |     }
    0x00025838 ldr r0, [r6, 0x2c]                                |     r0 = *((r6 + 0x2c));
    0x0002583c bl 0x24a84                                        |     r0 = fcn_00024a84 (r0);
    0x00025840 mov sb, r0                                        |     sb = r0;
    0x00025844 add r0, r5, 0x30                                  |     r0 = r5 + 0x30;
    0x00025848 bl 0x9130                                         |     g_malloc0 ();
    0x0002584c ldrh r3, [r4]                                     |     r3 = *(r4);
    0x00025850 ldrh r2, [r4, 0x18]                               |     r2 = *((r4 + 0x18));
    0x00025854 cmp r5, 0                                         |     
    0x00025858 strh r3, [r0, 4]                                  |     *((r0 + 4)) = r3;
    0x0002585c ldr r3, [r4, 4]                                   |     r3 = *((r4 + 4));
                                                                 |     if (r5 == 0) {
    0x00025860 addne r7, r0, 0x30                                |         r7 = r0 + 0x30;
                                                                 |     }
    0x00025864 str r3, [r0, 0xc]                                 |     *((r0 + 0xc)) = r3;
    0x00025868 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x0002586c strh r2, [r0, 0x24]                               |     *((r0 + 0x24)) = r2;
    0x00025870 str r3, [r0, 0x10]                                |     *((r0 + 0x10)) = r3;
    0x00025874 ldr r3, [r4, 0xc]                                 |     r3 = *((r4 + 0xc));
    0x00025878 str r3, [r0, 0x14]                                |     *((r0 + 0x14)) = r3;
    0x0002587c ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x00025880 str r3, [r0, 0x18]                                |     *((r0 + 0x18)) = r3;
    0x00025884 ldr r3, [r4, 0x14]                                |     r3 = *((r4 + 0x14));
    0x00025888 str r3, [r0, 0x1c]                                |     *((r0 + 0x1c)) = r3;
    0x0002588c mov r3, 0                                         |     r3 = 0;
    0x00025890 cmp sb, r3                                        |     
    0x00025894 strh r3, [r0, 6]                                  |     *((r0 + 6)) = r3;
    0x00025898 str r3, [r0, 0x20]                                |     *((r0 + 0x20)) = r3;
    0x0002589c str r3, [r0, 8]                                   |     *((r0 + 8)) = r3;
    0x000258a0 strh r3, [r0, 0x26]                               |     *((r0 + 0x26)) = r3;
                                                                 |     if (sb == r3) {
    0x000258a4 ldrne r3, [sb, 0x14]                              |         r3 = *((sb + 0x14));
                                                                 |     }
    0x000258a8 ldrhne r3, [r3, 6]                                |     __asm ("ldrhne r3, [r3, 6]");
    0x000258ac strhne r3, [r0, 6]                                |     __asm ("strhne r3, [r0, 6]");
    0x000258b0 ldrh r3, [r4, 0x1a]                               |     r3 = *((r4 + 0x1a));
    0x000258b4 cmp r3, 0x400                                     |     
                                                                 |     if (r3 < 0x400) {
    0x000258b8 movhs r3, 0x400                                   |         r3 = 0x400;
                                                                 |     }
    0x000258bc strh r3, [r0, 0x28]                               |     *((r0 + 0x28)) = r3;
    0x000258c0 ldr r3, [r4, 0x1c]                                |     r3 = *((r4 + 0x1c));
    0x000258c4 str r3, [r0, 0x2c]                                |     *((r0 + 0x2c)) = r3;
                                                                 |     do {
                                                                 | label_0:
    0x000258c8 cmp r5, 0                                         |         
    0x000258cc str r0, [r6, 0x14]                                |         *((r6 + 0x14)) = r0;
                                                                 |         if (r5 != 0) {
    0x000258d0 beq 0x2593c                                       |             
    0x000258d4 mov lr, r8                                        |             lr = r8;
    0x000258d8 ldm lr!, {r0, r1, r2, r3}                         |             r0 = *(lr!);
                                                                 |             r1 = *((lr! + 4));
                                                                 |             r2 = *((lr! + 8));
                                                                 |             r3 = *((lr! + 12));
    0x000258dc mov ip, r7                                        |             
    0x000258e0 stm ip!, {r0, r1, r2, r3}                         |             *(ip!) = r0;
                                                                 |             *((ip! + 4)) = r1;
                                                                 |             *((ip! + 8)) = r2;
                                                                 |             *((ip! + 12)) = r3;
    0x000258e4 ldm lr, {r0, r1, r2, r3}                          |             r0 = *(lr);
                                                                 |             r1 = *((lr + 4));
                                                                 |             r2 = *((lr + 8));
                                                                 |             r3 = *((lr + 12));
    0x000258e8 add r4, r7, 0x20                                  |             r4 = r7 + 0x20;
    0x000258ec stm ip, {r0, r1, r2, r3}                          |             *(ip) = r0;
                                                                 |             *((ip + 4)) = r1;
                                                                 |             *((ip + 8)) = r2;
                                                                 |             *((ip + 12)) = r3;
    0x000258f0 mov r3, 0                                         |             r3 = 0;
    0x000258f4 strb r3, [r7, 0x20]                               |             *((r7 + 0x20)) = r3;
    0x000258f8 str r4, [r7, 0x10]                                |             *((r7 + 0x10)) = r4;
    0x000258fc ldr r1, [r8, 0x10]                                |             r1 = *((r8 + 0x10));
    0x00025900 cmp r1, r3                                        |             
                                                                 |             if (r1 != r3) {
    0x00025904 beq 0x2591c                                       |                 
    0x00025908 mov r0, r4                                        |                 r0 = r4;
    0x0002590c bl 0x9154                                         |                 strcat (r0, r1);
    0x00025910 ldr r0, [r8, 0x10]                                |                 r0 = *((r8 + 0x10));
    0x00025914 bl 0x9598                                         |                 r0 = strlen (r0);
    0x00025918 add r4, r4, r0                                    |                 r4 += r0;
                                                                 |             }
    0x0002591c mov r3, 0                                         |             r3 = 0;
    0x00025920 add r0, r4, 1                                     |             r0 = r4 + 1;
    0x00025924 strb r3, [r4, 1]                                  |             *((r4 + 1)) = r3;
    0x00025928 str r0, [r7, 0x18]                                |             *((r7 + 0x18)) = r0;
    0x0002592c ldr r1, [r8, 0x18]                                |             r1 = *((r8 + 0x18));
    0x00025930 cmp r1, r3                                        |             
                                                                 |             if (r1 == r3) {
    0x00025934 beq 0x2593c                                       |                 goto label_4;
                                                                 |             }
    0x00025938 bl 0x9154                                         |             strcat (r0, r1);
                                                                 |         }
                                                                 | label_4:
    0x0002593c ldr r3, [r6, 0x14]                                |         r3 = *((r6 + 0x14));
    0x00025940 str r7, [r3]                                      |         *(r3) = r7;
    0x00025944 ldr r3, [r6, 0x14]                                |         r3 = *((r6 + 0x14));
    0x00025948 ldr r3, [r3]                                      |         r3 = *(r3);
    0x0002594c ldr r3, [r3]                                      |         r3 = *(r3);
    0x00025950 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00025954 moveq r2, r3                                      |             r2 = r3;
                                                                 |         }
                                                                 |         if (r3 != 0) {
    0x00025958 beq 0x2597c                                       |             
    0x0002595c ldr r3, [pc, 0x1bc]                               |             r3 = *(0x25b1c);
    0x00025960 mov r0, r6                                        |             r0 = r6;
    0x00025964 add r3, pc, r3                                    |             r3 = pc + r3;
    0x00025968 ldr r1, [r3, 0x404]                               |             r1 = *(0x25f20);
    0x0002596c bl 0x24ae4                                        |             fcn_00024ae4 (r0, r1);
    0x00025970 tst r0, 0x30                                      |             
                                                                 |             if ((r0 & 0x30) != 0) {
    0x00025974 moveq r2, 1                                       |                 r2 = 1;
                                                                 |             }
                                                                 |             if ((r0 & 0x30) != 0) {
    0x00025978 movne r2, 0                                       |                 r2 = 0;
                                                                 |                 goto label_5;
                                                                 |             }
                                                                 |         }
                                                                 | label_5:
    0x0002597c ldrb r3, [r6, 0xe]                                |         r3 = *((r6 + 0xe));
    0x00025980 bic r3, r3, 8                                     |         r3 = BIT_MASK (r3, 8);
    0x00025984 orr r3, r3, r2, lsl 3                             |         r3 |= (r2 << 3);
    0x00025988 strb r3, [r6, 0xe]                                |         *((r6 + 0xe)) = r3;
    0x0002598c ldr r3, [r6, 0x14]                                |         r3 = *((r6 + 0x14));
    0x00025990 ldr r3, [r3]                                      |         r3 = *(r3);
    0x00025994 cmp r3, 0                                         |         
                                                                 |         if (r3 != 0) {
    0x00025998 bne 0x25b04                                       |             goto label_6;
                                                                 |         }
    0x0002599c ldr r3, [pc, 0x180]                               |         r3 = *(0x25b20);
    0x000259a0 ldr r1, [pc, 0x180]                               |         r1 = *(0x25b24);
    0x000259a4 add r3, pc, r3                                    |         r3 = pc + r3;
    0x000259a8 str r3, [sp]                                      |         *(sp) = r3;
    0x000259ac ldr r3, [pc, 0x178]                               |         
    0x000259b0 ldr r0, [pc, 0x178]                               |         r0 = *(0x25b2c);
    0x000259b4 add r3, pc, r3                                    |         r3 = pc + r3;
    0x000259b8 add r3, r3, 0x7c                                  |         r3 = 0x25ba4;
    0x000259bc ldr r2, [pc, 0x170]                               |         r2 = *(0x25b30);
    0x000259c0 add r1, pc, r1                                    |         r1 = pc + r1;
    0x000259c4 add r0, pc, r0                                    |         r0 = pc + r0;
    0x000259c8 b 0x259f8                                         |         goto label_7;
                                                                 | label_1:
    0x000259cc ldr r3, [pc, 0x164]                               |         r3 = *(0x25b34);
    0x000259d0 ldr r1, [pc, 0x164]                               |         r1 = *(0x25b38);
    0x000259d4 add r3, pc, r3                                    |         r3 = pc + r3;
    0x000259d8 str r3, [sp]                                      |         *(sp) = r3;
    0x000259dc ldr r3, [pc, 0x15c]                               |         
    0x000259e0 ldr r0, [pc, 0x15c]                               |         r0 = *(0x25b40);
    0x000259e4 ldr r2, [pc, 0x15c]                               |         r2 = *(0x25b44);
    0x000259e8 add r3, pc, r3                                    |         r3 = pc + r3;
    0x000259ec add r3, r3, 0x7c                                  |         r3 = 0x25bb8;
    0x000259f0 add r1, pc, r1                                    |         r1 = pc + r1;
    0x000259f4 add r0, pc, r0                                    |         r0 = pc + r0;
                                                                 | label_7:
    0x000259f8 bl 0x93f4                                         |         g_assertion_message_expr ();
                                                                 | label_3:
    0x000259fc tst r3, 2                                         |         
                                                                 |         if ((r3 & 2) == 0) {
    0x00025a00 beq 0x25a74                                       |             goto label_8;
                                                                 |         }
    0x00025a04 ldr r0, [r6, 0x2c]                                |         r0 = *((r6 + 0x2c));
    0x00025a08 bl 0x24a84                                        |         r0 = fcn_00024a84 (r0);
    0x00025a0c mov sb, r0                                        |         sb = r0;
    0x00025a10 add r0, r5, 0x24                                  |         r0 = r5 + 0x24;
    0x00025a14 bl 0x9130                                         |         g_malloc0 ();
    0x00025a18 ldrh r3, [r4]                                     |         r3 = *(r4);
    0x00025a1c cmp r5, 0                                         |         
    0x00025a20 strh r3, [r0, 4]                                  |         *((r0 + 4)) = r3;
    0x00025a24 ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
                                                                 |         if (r5 == 0) {
    0x00025a28 addne r7, r0, 0x24                                |             r7 = r0 + 0x24;
                                                                 |         }
    0x00025a2c str r3, [r0, 0xc]                                 |         *((r0 + 0xc)) = r3;
    0x00025a30 ldr r3, [r4, 8]                                   |         r3 = *((r4 + 8));
    0x00025a34 str r3, [r0, 0x10]                                |         *((r0 + 0x10)) = r3;
    0x00025a38 ldr r3, [r4, 0xc]                                 |         r3 = *((r4 + 0xc));
    0x00025a3c str r3, [r0, 0x14]                                |         *((r0 + 0x14)) = r3;
    0x00025a40 ldr r3, [r4, 0x10]                                |         r3 = *((r4 + 0x10));
    0x00025a44 str r3, [r0, 0x18]                                |         *((r0 + 0x18)) = r3;
    0x00025a48 ldr r3, [r4, 0x14]                                |         r3 = *((r4 + 0x14));
    0x00025a4c str r3, [r0, 0x1c]                                |         *((r0 + 0x1c)) = r3;
    0x00025a50 mov r3, 0                                         |         r3 = 0;
    0x00025a54 cmp sb, r3                                        |         
    0x00025a58 strh r3, [r0, 6]                                  |         *((r0 + 6)) = r3;
    0x00025a5c str r3, [r0, 0x20]                                |         *((r0 + 0x20)) = r3;
                                                                 |         if (sb == r3) {
    0x00025a60 ldrne r2, [sb, 0x14]                              |             r2 = *((sb + 0x14));
                                                                 |         }
    0x00025a64 ldrhne r2, [r2, 6]                                |         __asm ("ldrhne r2, [r2, 6]");
    0x00025a68 str r3, [r0, 8]                                   |         *((r0 + 8)) = r3;
    0x00025a6c strhne r2, [r0, 6]                                |         __asm ("strhne r2, [r0, 6]");
    0x00025a70 b 0x258c8                                         |         
                                                                 |     } while (1);
                                                                 | label_8:
    0x00025a74 ldrb r3, [r6, 0xc]                                |     r3 = *((r6 + 0xc));
    0x00025a78 add r3, r3, 0xa                                   |     r3 += 0xa;
    0x00025a7c ldr r3, [r6, r3, lsl 2]                           |     offset_0 = r3 << 2;
                                                                 |     r3 = *((r6 + offset_0));
    0x00025a80 cmp r3, 8                                         |     
                                                                 |     if (r3 == 8) {
    0x00025a84 bne 0x25ad4                                       |         
    0x00025a88 add r0, r5, 0x20                                  |         r0 = r5 + 0x20;
    0x00025a8c bl 0x9130                                         |         g_malloc0 ();
    0x00025a90 ldrh r3, [r4]                                     |         r3 = *(r4);
    0x00025a94 cmp r5, 0                                         |         
    0x00025a98 strh r3, [r0, 4]                                  |         *((r0 + 4)) = r3;
    0x00025a9c ldr r3, [r4, 4]                                   |         r3 = *((r4 + 4));
                                                                 |         if (r5 == 0) {
    0x00025aa0 addne r7, r0, 0x20                                |             r7 = r0 + 0x20;
                                                                 |         }
    0x00025aa4 str r3, [r0, 8]                                   |         *((r0 + 8)) = r3;
    0x00025aa8 ldr r3, [r4, 8]                                   |         r3 = *((r4 + 8));
    0x00025aac str r3, [r0, 0xc]                                 |         *((r0 + 0xc)) = r3;
    0x00025ab0 ldr r3, [r4, 0xc]                                 |         r3 = *((r4 + 0xc));
    0x00025ab4 str r3, [r0, 0x10]                                |         *((r0 + 0x10)) = r3;
    0x00025ab8 ldr r3, [r4, 0x10]                                |         r3 = *((r4 + 0x10));
    0x00025abc str r3, [r0, 0x14]                                |         *((r0 + 0x14)) = r3;
    0x00025ac0 ldr r3, [r4, 0x14]                                |         r3 = *((r4 + 0x14));
    0x00025ac4 str r3, [r0, 0x18]                                |         *((r0 + 0x18)) = r3;
    0x00025ac8 mov r3, 0                                         |         r3 = 0;
    0x00025acc str r3, [r0, 0x1c]                                |         *((r0 + 0x1c)) = r3;
    0x00025ad0 b 0x258c8                                         |         goto label_0;
                                                                 |     }
    0x00025ad4 cmp r3, 0x48                                      |     
                                                                 |     if (r3 == 0x48) {
    0x00025ad8 bne 0x25af0                                       |         
    0x00025adc add r0, r5, 0xc                                   |         r0 = r5 + 0xc;
    0x00025ae0 bl 0x9130                                         |         g_malloc0 ();
    0x00025ae4 cmp r5, 0                                         |         
                                                                 |         if (r5 == 0) {
    0x00025ae8 addne r7, r0, 0xc                                 |             r7 = r0 + 0xc;
                                                                 |         }
    0x00025aec b 0x258c8                                         |         goto label_0;
                                                                 |     }
    0x00025af0 add r0, r5, 4                                     |     r0 = r5 + 4;
    0x00025af4 bl 0x9130                                         |     g_malloc0 ();
    0x00025af8 cmp r5, 0                                         |     
                                                                 |     if (r5 == 0) {
    0x00025afc addne r7, r0, 4                                   |         r7 = r0 + 4;
                                                                 |     }
    0x00025b00 b 0x258c8                                         |     goto label_0;
                                                                 | label_6:
    0x00025b04 bl 0x329a8                                        |     fcn_000329a8 ();
    0x00025b08 mov r3, 1                                         |     r3 = 1;
    0x00025b0c str r3, [r6]                                      |     *(r6) = r3;
    0x00025b10 bl 0x329a8                                        |     fcn_000329a8 ();
    0x00025b14 add sp, sp, 0xc                                   |     
    0x00025b18 pop {r4, r5, r6, r7, r8, sb, 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/lib/libgobject-2.0.so.0.5600.4 @ 0x15dfc */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) sym.g_object_get_valist ()                       | void g_object_get_valist (int32_t arg1, int32_t arg2) {
                                                             |     int32_t var_0h;
                                                             |     void * s;
                                                             |     void * var_20h;
                                                             |     int32_t var_0h_2;
                                                             |     int32_t var_64h;
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
    0x00015dfc push {r4, r5, r6, r7, r8, sb, sl, fp, lr}     |     
    0x00015e00 mov r4, r1                                    |     r4 = r1;
    0x00015e04 sub sp, sp, 0x64                              |     
    0x00015e08 mov r1, 0x50                                  |     r1 = 0x50;
    0x00015e0c mov r7, r0                                    |     r7 = r0;
    0x00015e10 mov fp, r2                                    |     
    0x00015e14 bl 0x2a3d0                                    |     r0 = g_type_check_instance_is_fundamentally_a ();
    0x00015e18 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00015e1c beq 0x15f30                                   |         goto label_2;
                                                             |     }
    0x00015e20 mov r0, r7                                    |     r0 = r7;
    0x00015e24 bl 0x13be8                                    |     g_object_ref ();
    0x00015e28 ldr sb, [pc, 0x1fc]                           |     sb = *(0x16028);
    0x00015e2c add r6, sp, 8                                 |     r6 += s;
    0x00015e30 add sb, pc, sb                                |     sb = pc + sb;
                                                             | label_1:
    0x00015e34 cmp r4, 0                                     |     
                                                             |     if (r4 == 0) {
    0x00015e38 beq 0x15f24                                   |         goto label_3;
                                                             |     }
    0x00015e3c mov r2, 0x18                                  |     r2 = 0x18;
    0x00015e40 mov r1, 0                                     |     r1 = 0;
    0x00015e44 mov r0, r6                                    |     r0 = r6;
    0x00015e48 bl 0x9118                                     |     memset (r0, r1, r2);
    0x00015e4c ldr r2, [r7]                                  |     r2 = *(r7);
    0x00015e50 mov r3, 1                                     |     r3 = 1;
    0x00015e54 ldr r2, [r2]                                  |     r2 = *(r2);
    0x00015e58 mov r1, r4                                    |     r1 = r4;
    0x00015e5c ldr r0, [sb, 0x20]                            |     r0 = *((sb + 0x20));
    0x00015e60 bl 0x1a0cc                                    |     g_param_spec_pool_lookup ();
    0x00015e64 mov r2, r4                                    |     r2 = r4;
    0x00015e68 mov r1, r0                                    |     r1 = r0;
    0x00015e6c mov r5, r0                                    |     r5 = r0;
    0x00015e70 mov r0, r7                                    |     r0 = r7;
    0x00015e74 bl 0x131ac                                    |     r0 = fcn_000131ac (r0, r1);
    0x00015e78 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00015e7c beq 0x15f24                                   |         goto label_3;
                                                             |     }
    0x00015e80 ldr r1, [r5, 0xc]                             |     r1 = *((r5 + 0xc));
    0x00015e84 mov r0, r6                                    |     r0 = r6;
    0x00015e88 bl 0x2c85c                                    |     g_value_init ();
    0x00015e8c mov r1, r5                                    |     r1 = r5;
    0x00015e90 mov r2, r6                                    |     r2 = r6;
    0x00015e94 mov r0, r7                                    |     r0 = r7;
    0x00015e98 bl 0x13ab4                                    |     fcn_00013ab4 (r0, r1);
    0x00015e9c ldr r0, [sp, 8]                               |     r0 = s;
    0x00015ea0 bl 0x2a7f8                                    |     g_type_value_table_peek ();
    0x00015ea4 add r5, sp, 0x20                              |     r5 += var_20h;
    0x00015ea8 mov r1, 0                                     |     r1 = 0;
    0x00015eac mov r2, 0x40                                  |     r2 = 0x40;
    0x00015eb0 mov r4, fp                                    |     r4 = fp;
    0x00015eb4 ldr sl, [r0, 0x18]                            |     sl = *((r0 + 0x18));
    0x00015eb8 mov r8, r0                                    |     r8 = r0;
    0x00015ebc mov r0, r5                                    |     r0 = r5;
    0x00015ec0 bl 0x9118                                     |     memset (r0, r1, r2);
    0x00015ec4 mov r1, 0                                     |     r1 = 0;
                                                             |     do {
    0x00015ec8 ldrb r3, [sl, r1]                             |         r3 = *((sl + r1));
    0x00015ecc cmp r3, 0                                     |         
                                                             |         if (r3 == 0) {
    0x00015ed0 bne 0x15f58                                   |             
    0x00015ed4 mov r2, r5                                    |             r2 = r5;
    0x00015ed8 ldr r8, [r8, 0x1c]                            |             r8 = *((r8 + 0x1c));
    0x00015edc mov r0, r6                                    |             r0 = r6;
    0x00015ee0 blx r8                                        |             uint32_t (*r8)(uint32_t, uint32_t) (r0, r2);
    0x00015ee4 subs r5, r0, 0                                |             r5 -= s;
                                                             |             if (r5 == s) {
    0x00015ee8 beq 0x16018                                   |                 goto label_4;
                                                             |             }
    0x00015eec ldr r3, [pc, 0x13c]                           |             
    0x00015ef0 ldr r2, [pc, 0x13c]                           |             r2 = *(0x16030);
    0x00015ef4 ldr r0, [pc, 0x13c]                           |             r0 = *(0x16034);
    0x00015ef8 add r3, pc, r3                                |             r3 = pc + r3;
    0x00015efc add r3, r3, 0x330                             |             r3 = 0x1635c;
    0x00015f00 add r2, pc, r2                                |             r2 = pc + r2;
    0x00015f04 mov r1, 0x10                                  |             r1 = 0x10;
    0x00015f08 add r0, pc, r0                                |             r0 = pc + r0;
    0x00015f0c str r5, [sp]                                  |             *(sp) = r5;
    0x00015f10 bl 0x9544                                     |             g_log ();
    0x00015f14 mov r0, r5                                    |             r0 = r5;
    0x00015f18 bl 0x937c                                     |             g_free ();
    0x00015f1c mov r0, r6                                    |             r0 = r6;
    0x00015f20 bl 0x2ca38                                    |             g_value_unset ();
                                                             | label_3:
    0x00015f24 mov r0, r7                                    |             r0 = r7;
    0x00015f28 bl 0x13e58                                    |             g_object_unref ();
    0x00015f2c b 0x15f50                                     |             goto label_5;
                                                             | label_2:
    0x00015f30 ldr r1, [pc, 0x104]                           |             
    0x00015f34 ldr r2, [pc, 0x104]                           |             r2 = *(0x1603c);
    0x00015f38 ldr r0, [pc, 0x104]                           |             r0 = *(0x16040);
    0x00015f3c add r1, pc, r1                                |             r1 = pc + r1;
    0x00015f40 add r2, pc, r2                                |             r2 = pc + r2;
    0x00015f44 add r1, r1, 0x330                             |             r1 = 0x16368;
    0x00015f48 add r0, pc, r0                                |             r0 = pc + r0;
    0x00015f4c bl 0x92ec                                     |             g_return_if_fail_warning ();
                                                             | label_5:
    0x00015f50 add sp, sp, 0x64                              |             
    0x00015f54 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc}      |             
                                                             |         }
    0x00015f58 sub r3, r3, 0x64                              |         r3 -= 0x64;
    0x00015f5c cmp r3, 0xd                                   |         
                                                             |         if (r3 > 0xd) {
                                                             |             /* switch table (14 cases) at 0x15f68 */
    0x00015f60 addls pc, pc, r3, lsl 2                       |             pc += (r3 << 2);
                                                             |         }
    0x00015f64 b 0x15fec                                     |         goto label_6;
    0x00015f68 b 0x15fc0                                     |         goto label_7;
    0x00015f6c b 0x15fec                                     |         goto label_6;
    0x00015f70 b 0x15fec                                     |         goto label_6;
    0x00015f74 b 0x15fec                                     |         goto label_6;
    0x00015f78 b 0x15fec                                     |         goto label_6;
    0x00015f7c b 0x15fdc                                     |         goto label_8;
    0x00015f80 b 0x15fec                                     |         goto label_6;
    0x00015f84 b 0x15fec                                     |         goto label_6;
    0x00015f88 b 0x15fdc                                     |         goto label_8;
    0x00015f8c b 0x15fec                                     |         goto label_6;
    0x00015f90 b 0x15fec                                     |         goto label_6;
    0x00015f94 b 0x15fec                                     |         goto label_6;
    0x00015f98 b 0x15fdc                                     |         goto label_8;
    0x00015f9c b 0x15fa0                                     |         
    0x00015fa0 add r4, r4, 7                                 |         r4 += 7;
    0x00015fa4 bic r3, r4, 7                                 |         r3 = BIT_MASK (r4, 7);
    0x00015fa8 add r4, r3, 8                                 |         r4 = r3 + 8;
    0x00015fac ldrd r2, r3, [r3]                             |         __asm ("ldrd r2, r3, [r3]");
    0x00015fb0 lsl r0, r1, 3                                 |         r0 = r1 << 3;
    0x00015fb4 strd r2, r3, [r5, r0]                         |         __asm ("strd r2, r3, [r5, r0]");
                                                             | label_0:
    0x00015fb8 add r1, r1, 1                                 |         r1++;
    0x00015fbc b 0x15ec8                                     |         
                                                             |     } while (1);
                                                             | label_7:
    0x00015fc0 add r4, r4, 7                                 |     r4 += 7;
    0x00015fc4 bic r3, r4, 7                                 |     r3 = BIT_MASK (r4, 7);
    0x00015fc8 add r4, r3, 8                                 |     r4 = r3 + 8;
    0x00015fcc ldrd r2, r3, [r3]                             |     __asm ("ldrd r2, r3, [r3]");
    0x00015fd0 lsl r0, r1, 3                                 |     r0 = r1 << 3;
    0x00015fd4 strd r2, r3, [r5, r0]                         |     __asm ("strd r2, r3, [r5, r0]");
    0x00015fd8 b 0x15fb8                                     |     goto label_0;
                                                             | label_8:
    0x00015fdc ldr r3, [r4]                                  |     r3 = *(r4);
    0x00015fe0 add r4, r4, 4                                 |     r4 += 4;
    0x00015fe4 str r3, [r5, r1, lsl 3]                       |     offset_0 = r1 << 3;
                                                             |     *((r5 + offset_0)) = r3;
    0x00015fe8 b 0x15fb8                                     |     goto label_0;
                                                             | label_6:
    0x00015fec mov r3, 0                                     |     r3 = 0;
    0x00015ff0 str r3, [sp]                                  |     *(sp) = r3;
    0x00015ff4 ldr r3, [pc, 0x4c]                            |     
    0x00015ff8 ldr r1, [pc, 0x4c]                            |     r1 = *(0x16048);
    0x00015ffc ldr r0, [pc, 0x4c]                            |     r0 = *(0x1604c);
    0x00016000 add r3, pc, r3                                |     r3 = pc + r3;
    0x00016004 add r3, r3, 0x330                             |     r3 = 0x16374;
    0x00016008 ldr r2, [pc, 0x44]                            |     r2 = *(0x16050);
    0x0001600c add r1, pc, r1                                |     r1 = pc + r1;
    0x00016010 add r0, pc, r0                                |     r0 = pc + r0;
    0x00016014 bl 0x93f4                                     |     g_assertion_message_expr ();
                                                             | label_4:
    0x00016018 mov r0, r6                                    |     r0 = r6;
    0x0001601c bl 0x2ca38                                    |     g_value_unset ();
    0x00016020 add fp, r4, 4                                 |     
    0x00016024 ldr r4, [r4]                                  |     r4 = *(r4);
    0x00016028 b 0x15e34                                     |     goto label_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/lib/libgobject-2.0.so.0.5600.4 @ 0x1a580 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) sym.g_param_type_register_static ()          | void g_param_type_register_static (int32_t arg1, int32_t arg2) {
                                                         |     int32_t var_4h;
                                                         |     void * s;
                                                         |     int32_t var_10h;
                                                         |     int32_t var_18h;
                                                         |     int32_t var_1ch;
                                                         |     int32_t var_1eh;
                                                         |     int32_t var_20h;
                                                         |     int32_t var_28h;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
    0x0001a580 push {r4, r5, r6, lr}                     |     
    0x0001a584 sub sp, sp, 0x28                          |     
    0x0001a588 mov r6, r0                                |     r6 = r0;
    0x0001a58c mov r4, r1                                |     r4 = r1;
    0x0001a590 mov r2, 0x22                              |     r2 = 0x22;
    0x0001a594 mov r1, 0                                 |     r1 = 0;
    0x0001a598 add r0, sp, 6                             |     r0 += s;
    0x0001a59c bl 0x9118                                 |     memset (r0, r1, r2);
    0x0001a5a0 mov r3, 0x28                              |     r3 = 0x28;
    0x0001a5a4 strh r3, [sp, 4]                          |     var_4h = r3;
    0x0001a5a8 ldr r3, [pc, 0x190]                       |     r3 = *(0x1a73c);
    0x0001a5ac cmp r6, 0                                 |     
    0x0001a5b0 add r3, pc, r3                            |     r3 = pc + r3;
    0x0001a5b4 str r3, [sp, 0x10]                        |     var_10h = r3;
    0x0001a5b8 mov r3, 0x10                              |     r3 = 0x10;
    0x0001a5bc strh r3, [sp, 0x1e]                       |     var_1eh = r3;
                                                         |     if (r6 != 0) {
    0x0001a5c0 beq 0x1a5f0                               |         
    0x0001a5c4 cmp r4, 0                                 |         
                                                         |         if (r4 != 0) {
    0x0001a5c8 bne 0x1a624                               |             goto label_1;
                                                         |         }
    0x0001a5cc ldr r1, [pc, 0x170]                       |         
    0x0001a5d0 ldr r2, [pc, 0x170]                       |         r2 = *(0x1a744);
    0x0001a5d4 ldr r0, [pc, 0x170]                       |         r0 = *(0x1a748);
    0x0001a5d8 add r1, pc, r1                            |         r1 = pc + r1;
    0x0001a5dc add r1, r1, 0x20c                         |         r1 = 0x1a94c;
    0x0001a5e0 add r2, pc, r2                            |         r2 = pc + r2;
    0x0001a5e4 add r1, r1, 3                             |         r1 += 3;
    0x0001a5e8 add r0, pc, r0                            |         r0 = pc + r0;
    0x0001a5ec b 0x1a610                                 |         
                                                         |     } else {
    0x0001a5f0 ldr r1, [pc, 0x158]                       |         
    0x0001a5f4 ldr r2, [pc, 0x158]                       |         r2 = *(0x1a750);
    0x0001a5f8 ldr r0, [pc, 0x158]                       |         r0 = *(0x1a754);
    0x0001a5fc add r1, pc, r1                            |         r1 = pc + r1;
    0x0001a600 add r1, r1, 0x20c                         |         r1 = 0x1a958;
    0x0001a604 add r2, pc, r2                            |         r2 = pc + r2;
    0x0001a608 add r1, r1, 3                             |         r1 += 3;
    0x0001a60c add r0, pc, r0                            |         r0 = pc + r0;
                                                         |     }
                                                         |     do {
    0x0001a610 bl 0x92ec                                 |         g_return_if_fail_warning ();
    0x0001a614 mov r5, 0                                 |         r5 = 0;
                                                         | label_0:
    0x0001a618 mov r0, r5                                |         r0 = r5;
    0x0001a61c add sp, sp, 0x28                          |         
    0x0001a620 pop {r4, r5, r6, pc}                      |         
                                                         | label_1:
    0x0001a624 mov r0, r6                                |         r0 = r6;
    0x0001a628 bl 0x285dc                                |         r0 = g_type_from_name ();
    0x0001a62c subs r5, r0, 0                            |         r5 = r0 - 0;
                                                         |         if (r5 == r0) {
    0x0001a630 beq 0x1a658                               |             goto label_2;
                                                         |         }
    0x0001a634 ldr r1, [pc, 0x120]                       |         
    0x0001a638 ldr r2, [pc, 0x120]                       |         r2 = *(0x1a75c);
    0x0001a63c ldr r0, [pc, 0x120]                       |         r0 = *(0x1a760);
    0x0001a640 add r1, pc, r1                            |         r1 = pc + r1;
    0x0001a644 add r1, r1, 0x20c                         |         r1 = 0x1a964;
    0x0001a648 add r2, pc, r2                            |         r2 = pc + r2;
    0x0001a64c add r1, r1, 3                             |         r1 += 3;
    0x0001a650 add r0, pc, r0                            |         r0 = pc + r0;
    0x0001a654 b 0x1a610                                 |         
                                                         |     } while (1);
                                                         | label_2:
    0x0001a658 ldrh r3, [r4]                             |     r3 = *(r4);
    0x0001a65c cmp r3, 0x27                              |     
                                                         |     if (r3 > 0x27) {
    0x0001a660 bhi 0x1a68c                               |         goto label_3;
                                                         |     }
    0x0001a664 ldr r1, [pc, 0xfc]                        |     
    0x0001a668 ldr r2, [pc, 0xfc]                        |     r2 = *(0x1a768);
    0x0001a66c ldr r0, [pc, 0xfc]                        |     r0 = *(0x1a76c);
    0x0001a670 add r1, pc, r1                            |     r1 = pc + r1;
    0x0001a674 add r1, r1, 0x20c                         |     r1 = 0x1a970;
    0x0001a678 add r2, pc, r2                            |     r2 = pc + r2;
    0x0001a67c add r1, r1, 3                             |     r1 += 3;
    0x0001a680 add r0, pc, r0                            |     r0 = pc + r0;
                                                         |     do {
    0x0001a684 bl 0x92ec                                 |         g_return_if_fail_warning ();
    0x0001a688 b 0x1a618                                 |         goto label_0;
                                                         | label_3:
    0x0001a68c ldr r0, [r4, 8]                           |         r0 = *((r4 + 8));
    0x0001a690 bl 0x28540                                |         r0 = g_type_name ();
    0x0001a694 cmp r0, 0                                 |         
                                                         |         if (r0 != 0) {
    0x0001a698 bne 0x1a6c0                               |             goto label_4;
                                                         |         }
    0x0001a69c ldr r1, [pc, 0xd0]                        |         
    0x0001a6a0 ldr r2, [pc, 0xd0]                        |         r2 = *(0x1a774);
    0x0001a6a4 ldr r0, [pc, 0xd0]                        |         r0 = *(0x1a778);
    0x0001a6a8 add r1, pc, r1                            |         r1 = pc + r1;
    0x0001a6ac add r1, r1, 0x20c                         |         r1 = 0x1a97c;
    0x0001a6b0 add r2, pc, r2                            |         r2 = pc + r2;
    0x0001a6b4 add r1, r1, 3                             |         r1 += 3;
    0x0001a6b8 add r0, pc, r0                            |         r0 = pc + r0;
    0x0001a6bc b 0x1a684                                 |         
                                                         |     } while (1);
                                                         | label_4:
    0x0001a6c0 ldrh r3, [r4]                             |     r3 = *(r4);
    0x0001a6c4 mov r0, 0x14                              |     r0 = 0x14;
    0x0001a6c8 strh r3, [sp, 0x1c]                       |     var_1ch = r3;
    0x0001a6cc ldrh r3, [r4, 2]                          |     r3 = *((r4 + 2));
    0x0001a6d0 strh r3, [sp, 0x1e]                       |     var_1eh = r3;
    0x0001a6d4 ldr r3, [r4, 4]                           |     r3 = *((r4 + 4));
    0x0001a6d8 str r3, [sp, 0x20]                        |     var_20h = r3;
    0x0001a6dc bl 0x90ac                                 |     g_malloc ();
    0x0001a6e0 ldr r3, [r4, 8]                           |     r3 = *((r4 + 8));
    0x0001a6e4 str r3, [r0]                              |     *(r0) = r3;
    0x0001a6e8 ldr r3, [r4, 0xc]                         |     r3 = *((r4 + 0xc));
    0x0001a6ec str r3, [r0, 4]                           |     *((r0 + 4)) = r3;
    0x0001a6f0 ldr r3, [r4, 0x10]                        |     r3 = *((r4 + 0x10));
    0x0001a6f4 cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x0001a6f8 ldreq r3, [pc, 0x80]                      |         r3 = *(0x0001a780);
                                                         |     }
                                                         |     if (r3 != 0) {
    0x0001a6fc addeq r3, pc, r3                          |         r3 = pc + r3;
                                                         |     }
    0x0001a700 str r3, [r0, 8]                           |     *((r0 + 8)) = r3;
    0x0001a704 ldr r3, [r4, 0x14]                        |     r3 = *((r4 + 0x14));
    0x0001a708 str r3, [r0, 0xc]                         |     *((r0 + 0xc)) = r3;
    0x0001a70c ldr r3, [r4, 0x18]                        |     r3 = *((r4 + 0x18));
    0x0001a710 cmp r3, 0                                 |     
                                                         |     if (r3 != 0) {
    0x0001a714 ldreq r3, [pc, 0x68]                      |         r3 = *(0x0001a784);
                                                         |     }
                                                         |     if (r3 != 0) {
    0x0001a718 addeq r3, pc, r3                          |         r3 = pc + r3;
                                                         |     }
    0x0001a71c str r3, [r0, 0x10]                        |     *((r0 + 0x10)) = r3;
    0x0001a720 str r0, [sp, 0x18]                        |     var_18h = r0;
    0x0001a724 mov r3, 0                                 |     r3 = 0;
    0x0001a728 add r2, sp, 4                             |     r2 += var_4h;
    0x0001a72c mov r1, r6                                |     r1 = r6;
    0x0001a730 mov r0, 0x4c                              |     r0 = 0x4c;
    0x0001a734 bl 0x28a60                                |     r0 = g_type_register_static ();
    0x0001a738 mov r5, r0                                |     r5 = r0;
    0x0001a73c b 0x1a618                                 |     goto label_0;
                                                         | }
    ; 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/lib/libgobject-2.0.so.0.5600.4 @ 0x21bcc */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) sym.g_signal_chain_from_overridden_handler ()        | void g_signal_chain_from_overridden_handler () {
                                                                 |     int32_t var_4h;
                                                                 |     int32_t var_8h;
                                                                 |     int32_t var_b8h;
                                                                 |     int32_t var_b4h;
                                                                 |     int32_t var_b0h;
                                                                 |     int32_t var_ach;
                                                                 |     int32_t var_a8h;
                                                                 |     int32_t var_a4h;
                                                                 |     int32_t var_a0h;
                                                                 |     int32_t var_9ch;
                                                                 |     int32_t var_98h;
                                                                 |     int32_t var_94h;
                                                                 |     int32_t var_90h;
                                                                 |     int32_t var_8ch;
                                                                 |     int32_t var_88h;
                                                                 |     int32_t var_80h;
                                                                 |     void * var_7ch;
                                                                 |     void * var_64h;
                                                                 |     int32_t var_0h;
                                                                 |     int32_t var_sp_4h;
                                                                 |     void * s;
                                                                 |     int32_t var_0h_2;
                                                                 |     int32_t var_20h_2;
                                                                 |     int32_t var_20h;
    0x00021bcc push {r0, r1, r2, r3}                             |     
    0x00021bd0 push {r4, r5, r6, r7, r8, sb, sl, fp, lr}         |     
    0x00021bd4 add fp, sp, 0x20                                  |     
    0x00021bd8 sub sp, sp, 0xa4                                  |     
    0x00021bdc ldr r0, [fp, 4]                                   |     r0 = var_4h;
    0x00021be0 bl 0x2a6dc                                        |     r0 = g_type_check_instance ();
    0x00021be4 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00021be8 beq 0x21c38                                       |         
    0x00021bec ldr r0, [pc, 0x680]                               |         
    0x00021bf0 add r0, pc, r0                                    |         r0 = pc + r0;
    0x00021bf4 add r0, r0, 0xc                                   |         r0 = 0x2227c;
    0x00021bf8 bl 0x9184                                         |         g_mutex_lock ();
    0x00021bfc ldr r0, [fp, 4]                                   |         r0 = var_4h;
    0x00021c00 bl 0x1d90c                                        |         r0 = fcn_0001d90c (r0);
    0x00021c04 subs r6, r0, 0                                    |         r6 = r0 - 0;
                                                                 |         if (r6 != r0) {
    0x00021c08 bne 0x21c68                                       |             goto label_10;
                                                                 |         }
    0x00021c0c ldr r3, [fp, 4]                                   |         r3 = var_4h;
    0x00021c10 ldr r2, [pc, 0x660]                               |         r2 = *(0x22274);
    0x00021c14 str r3, [sp]                                      |         *(sp) = r3;
    0x00021c18 ldr r0, [pc, 0x65c]                               |         r0 = *(0x22278);
    0x00021c1c ldr r3, [pc, 0x65c]                               |         r3 = *(0x2227c);
    0x00021c20 add r2, pc, r2                                    |         r2 = pc + r2;
    0x00021c24 add r3, pc, r3                                    |         r3 = pc + r3;
    0x00021c28 mov r1, 0x10                                      |         r1 = 0x10;
    0x00021c2c add r0, pc, r0                                    |         r0 = pc + r0;
    0x00021c30 bl 0x9544                                         |         g_log ();
    0x00021c34 b 0x21d4c                                         |         goto label_1;
                                                                 |     }
    0x00021c38 ldr r1, [pc, 0x644]                               |     
    0x00021c3c ldr r2, [pc, 0x644]                               |     r2 = *(0x22284);
    0x00021c40 ldr r0, [pc, 0x644]                               |     r0 = *(0x22288);
    0x00021c44 add r1, pc, r1                                    |     r1 = pc + r1;
    0x00021c48 add r2, pc, r2                                    |     r2 = pc + r2;
    0x00021c4c add r1, r1, 0x214                                 |     r1 = 0x22494;
    0x00021c50 add r0, pc, r0                                    |     r0 = pc + r0;
    0x00021c54 bl 0x92ec                                         |     g_return_if_fail_warning ();
                                                                 | label_0:
    0x00021c58 sub sp, fp, 0x20                                  |     
    0x00021c5c pop {r4, r5, r6, r7, r8, sb, sl, fp, lr}          |     
    0x00021c60 add sp, sp, 0x10                                  |     
    0x00021c64 bx lr                                             |     return;
                                                                 | label_10:
    0x00021c68 ldr r0, [r6, 8]                                   |     r0 = *((r6 + 8));
    0x00021c6c bl 0x1d824                                        |     r0 = fcn_0001d824 (r0);
    0x00021c70 subs r5, r0, 0                                    |     r5 = r0 - 0;
                                                                 |     if (r5 != r0) {
    0x00021c74 bne 0x21ca8                                       |         goto label_11;
                                                                 |     }
    0x00021c78 ldr r3, [pc, 0x610]                               |     r3 = *(0x2228c);
    0x00021c7c ldr r1, [pc, 0x610]                               |     r1 = *(0x22290);
    0x00021c80 add r3, pc, r3                                    |     r3 = pc + r3;
    0x00021c84 str r3, [sp]                                      |     *(sp) = r3;
    0x00021c88 ldr r3, [pc, 0x608]                               |     
    0x00021c8c ldr r0, [pc, 0x608]                               |     r0 = *(0x22298);
    0x00021c90 ldr r2, [pc, 0x608]                               |     r2 = *(0x2229c);
    0x00021c94 add r3, pc, r3                                    |     r3 = pc + r3;
    0x00021c98 add r3, r3, 0x214                                 |     r3 = 0x224a8;
    0x00021c9c add r1, pc, r1                                    |     r1 = pc + r1;
    0x00021ca0 add r0, pc, r0                                    |     r0 = pc + r0;
                                                                 |     do {
                                                                 | label_5:
    0x00021ca4 bl 0x93f4                                         |         g_assertion_message_expr ();
                                                                 | label_11:
    0x00021ca8 ldr r1, [r6, 0x18]                                |         r1 = *((r6 + 0x18));
    0x00021cac cmp r1, 4                                         |         
                                                                 |         if (r1 == 4) {
    0x00021cb0 beq 0x21d60                                       |             goto label_12;
                                                                 |         }
    0x00021cb4 ldr r0, [r5, 0x18]                                |         r0 = *((r5 + 0x18));
    0x00021cb8 bl 0x1df38                                        |         r0 = fcn_0001df38 (r0, r1);
    0x00021cbc cmp r0, 0                                         |         
                                                                 |         if (r0 != 0) {
    0x00021cc0 bne 0x21cf4                                       |             goto label_13;
                                                                 |         }
    0x00021cc4 ldr r3, [pc, 0x5d8]                               |         r3 = *(0x222a0);
    0x00021cc8 ldr r1, [pc, 0x5d8]                               |         r1 = *(0x222a4);
    0x00021ccc add r3, pc, r3                                    |         r3 = pc + r3;
    0x00021cd0 str r3, [sp]                                      |         *(sp) = r3;
    0x00021cd4 ldr r3, [pc, 0x5d0]                               |         
    0x00021cd8 ldr r0, [pc, 0x5d0]                               |         r0 = *(0x222ac);
    0x00021cdc add r3, pc, r3                                    |         r3 = pc + r3;
    0x00021ce0 add r3, r3, 0x214                                 |         r3 = 0x224bc;
    0x00021ce4 mov r2, 0x870                                     |         r2 = 0x870;
    0x00021ce8 add r1, pc, r1                                    |         r1 = pc + r1;
    0x00021cec add r0, pc, r0                                    |         r0 = pc + r0;
    0x00021cf0 b 0x21ca4                                         |         
                                                                 |     } while (1);
                                                                 | label_13:
    0x00021cf4 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x00021cf8 lsr r3, r3, 0xa                                   |     r3 >>= 0xa;
    0x00021cfc and r3, r3, 0xff                                  |     r3 &= 0xff;
    0x00021d00 str r3, [fp, -0x9c]                               |     var_9ch = r3;
    0x00021d04 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00021d08 mov r0, r3                                        |     r0 = r3;
    0x00021d0c str r3, [fp, -0x90]                               |     var_90h = r3;
    0x00021d10 bl 0x28d58                                        |     r0 = g_type_parent ();
    0x00021d14 mov r1, r0                                        |     r1 = r0;
    0x00021d18 ldr r0, [r5, 0x18]                                |     r0 = *((r5 + 0x18));
    0x00021d1c bl 0x1df38                                        |     r0 = fcn_0001df38 (r0, r1);
    0x00021d20 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00021d24 beq 0x21d4c                                       |         goto label_1;
                                                                 |     }
    0x00021d28 ldr r3, [r0]                                      |     r3 = *(r0);
    0x00021d2c ldr r2, [fp, -0x90]                               |     r2 = var_90h;
    0x00021d30 str r3, [fp, -0xa0]                               |     var_a0h = r3;
    0x00021d34 cmp r3, r2                                        |     
                                                                 |     if (r3 == r2) {
    0x00021d38 beq 0x21d4c                                       |         goto label_1;
                                                                 |     }
    0x00021d3c ldr r3, [r0, 4]                                   |     r3 = *((r0 + 4));
    0x00021d40 cmp r3, 0                                         |     
    0x00021d44 str r3, [fp, -0x94]                               |     var_94h = r3;
                                                                 |     if (r3 != 0) {
    0x00021d48 bne 0x21d94                                       |         goto label_14;
                                                                 |     }
                                                                 |     do {
                                                                 | label_1:
    0x00021d4c ldr r0, [pc, 0x560]                               |         
    0x00021d50 add r0, pc, r0                                    |         r0 = pc + r0;
    0x00021d54 add r0, r0, 0xc                                   |         r0 = 0x222bc;
    0x00021d58 bl 0x9208                                         |         g_mutex_unlock ();
    0x00021d5c b 0x21c58                                         |         goto label_0;
                                                                 | label_12:
    0x00021d60 ldr r3, [fp, 4]                                   |         r3 = var_4h;
    0x00021d64 ldr r2, [pc, 0x54c]                               |         r2 = *(0x222b4);
    0x00021d68 str r3, [sp, 4]                                   |         var_sp_4h = r3;
    0x00021d6c ldr r3, [r5]                                      |         r3 = *(r5);
    0x00021d70 ldr r0, [pc, 0x544]                               |         r0 = *(0x222b8);
    0x00021d74 str r3, [sp]                                      |         *(sp) = r3;
    0x00021d78 ldr r3, [pc, 0x540]                               |         r3 = *(0x222bc);
    0x00021d7c add r2, pc, r2                                    |         r2 = pc + r2;
    0x00021d80 add r3, pc, r3                                    |         r3 = pc + r3;
    0x00021d84 mov r1, 0x10                                      |         r1 = 0x10;
    0x00021d88 add r0, pc, r0                                    |         r0 = pc + r0;
    0x00021d8c bl 0x9544                                         |         g_log ();
    0x00021d90 b 0x21d4c                                         |         
                                                                 |     } while (1);
                                                                 | label_14:
    0x00021d94 add r3, fp, 8                                     |     r3 += var_8h;
    0x00021d98 str r3, [fp, -0x80]                               |     var_80h = r3;
    0x00021d9c ldr r3, [r5, 0x14]                                |     r3 = *((r5 + 0x14));
    0x00021da0 mov r2, 0x18                                      |     r2 = 0x18;
    0x00021da4 str r3, [fp, -0x98]                               |     var_98h = r3;
    0x00021da8 ldr r3, [fp, -0x9c]                               |     r3 = var_9ch;
    0x00021dac mov r1, sp                                        |     r1 = sp;
    0x00021db0 add r3, r3, 1                                     |     r3++;
    0x00021db4 str r3, [fp, -0x8c]                               |     var_8ch = r3;
    0x00021db8 mul r3, r2, r3                                    |     r3 = r2 * r3;
    0x00021dbc mov r2, r3                                        |     r2 = r3;
    0x00021dc0 add r3, r3, 0xe                                   |     r3 += 0xe;
    0x00021dc4 lsr r3, r3, 3                                     |     r3 >>= 3;
    0x00021dc8 sub r3, r1, r3, lsl 3                             |     r3 = r1 - (r3 << 3);
    0x00021dcc mov sp, r3                                        |     
    0x00021dd0 add r4, sp, 8                                     |     r4 += s;
    0x00021dd4 mov r1, 0                                         |     r1 = 0;
    0x00021dd8 mov r0, r4                                        |     r0 = r4;
    0x00021ddc bl 0x9118                                         |     memset (r0, r1, r2);
    0x00021de0 add r3, r4, 0x18                                  |     r3 += var_0h;
    0x00021de4 str r3, [fp, -0xac]                               |     var_ach = r3;
    0x00021de8 mov r3, 0                                         |     r3 = 0;
    0x00021dec str r3, [fp, -0x88]                               |     var_88h = r3;
    0x00021df0 ldr r3, [pc, 0x4cc]                               |     
    0x00021df4 mov r8, r4                                        |     r8 = r4;
    0x00021df8 add r3, pc, r3                                    |     r3 = pc + r3;
    0x00021dfc add r3, r3, 0xc                                   |     r3 = 0x222cc;
    0x00021e00 str r3, [fp, -0xb4]                               |     var_b4h = r3;
    0x00021e04 ldr r3, [pc, 0x4bc]                               |     r3 = *(0x222c4);
    0x00021e08 add r3, pc, r3                                    |     r3 = pc + r3;
    0x00021e0c str r3, [fp, -0xb8]                               |     var_b8h = r3;
                                                                 | label_6:
    0x00021e10 ldr r3, [r5, 0xc]                                 |     r3 = *((r5 + 0xc));
    0x00021e14 ldr r2, [fp, -0x88]                               |     r2 = var_88h;
    0x00021e18 lsr r3, r3, 0xa                                   |     r3 >>= 0xa;
    0x00021e1c and r3, r3, 0xff                                  |     r3 &= 0xff;
    0x00021e20 cmp r3, r2                                        |     
                                                                 |     if (r3 <= r2) {
    0x00021e24 bhi 0x21ed0                                       |         
    0x00021e28 ldr r7, [pc, 0x49c]                               |         
    0x00021e2c mov r5, 0                                         |         r5 = 0;
    0x00021e30 add r7, pc, r7                                    |         r7 = pc + r7;
    0x00021e34 add r7, r7, 0xc                                   |         r7 = 0x222d4;
    0x00021e38 mov r0, r7                                        |         r0 = r7;
    0x00021e3c bl 0x9208                                         |         g_mutex_unlock ();
    0x00021e40 ldr r1, [fp, 4]                                   |         r1 = var_4h;
    0x00021e44 mov r0, r4                                        |         r0 = r4;
    0x00021e48 str r5, [r4]                                      |         *(r4) = r5;
    0x00021e4c bl 0x2cbc0                                        |         g_value_init_from_instance ();
    0x00021e50 mov r0, r7                                        |         r0 = r7;
    0x00021e54 bl 0x9184                                         |         g_mutex_lock ();
    0x00021e58 ldr r3, [fp, -0xa0]                               |         r3 = var_a0h;
    0x00021e5c mov r0, r7                                        |         r0 = r7;
    0x00021e60 str r3, [r6, 0x18]                                |         *((r6 + 0x18)) = r3;
    0x00021e64 bl 0x9208                                         |         g_mutex_unlock ();
    0x00021e68 ldr r3, [fp, -0x98]                               |         r3 = var_98h;
    0x00021e6c add r8, r6, 8                                     |         r8 = r6 + 8;
    0x00021e70 cmp r3, 4                                         |         
                                                                 |         if (r3 != 4) {
    0x00021e74 bne 0x220a8                                       |             goto label_15;
                                                                 |         }
    0x00021e78 str r8, [sp]                                      |         *(sp) = r8;
    0x00021e7c mov r3, r4                                        |         r3 = r4;
    0x00021e80 ldr r2, [fp, -0x8c]                               |         r2 = var_8ch;
    0x00021e84 mov r1, r5                                        |         r1 = r5;
    0x00021e88 ldr r0, [fp, -0x94]                               |         r0 = var_94h;
    0x00021e8c bl 0xee2c                                         |         g_closure_invoke ();
                                                                 | label_7:
    0x00021e90 ldr r2, [fp, -0x9c]                               |         r2 = var_9ch;
    0x00021e94 mov r3, 0x18                                      |         r3 = 0x18;
    0x00021e98 smlabb r3, r3, r2, r3                             |         __asm ("smlabb r3, r3, r2, r3");
    0x00021e9c ldr r7, [fp, -0xac]                               |         r7 = var_ach;
    0x00021ea0 add r5, r4, r3                                    |         r5 = r4 + r3;
                                                                 | label_9:
    0x00021ea4 cmp r7, r5                                        |         
                                                                 |         if (r7 != r5) {
    0x00021ea8 bne 0x22264                                       |             goto label_16;
                                                                 |         }
    0x00021eac mov r0, r4                                        |         r0 = r4;
    0x00021eb0 bl 0x2ca38                                        |         g_value_unset ();
    0x00021eb4 ldr r0, [pc, 0x414]                               |         
    0x00021eb8 add r0, pc, r0                                    |         r0 = pc + r0;
    0x00021ebc add r0, r0, 0xc                                   |         r0 = 0x222d8;
    0x00021ec0 bl 0x9184                                         |         g_mutex_lock ();
    0x00021ec4 ldr r3, [fp, -0x90]                               |         r3 = var_90h;
    0x00021ec8 str r3, [r6, 0x18]                                |         *((r6 + 0x18)) = r3;
    0x00021ecc b 0x21d4c                                         |         goto label_1;
                                                                 |     }
    0x00021ed0 ldr r2, [fp, -0x88]                               |     r2 = var_88h;
    0x00021ed4 ldr r3, [r5, 0x10]                                |     r3 = *((r5 + 0x10));
    0x00021ed8 ldr r0, [fp, -0xb4]                               |     r0 = var_b4h;
    0x00021edc ldr sl, [r3, r2, lsl 2]                           |     offset_0 = r2 << 2;
                                                                 |     sl = *((r3 + offset_0));
    0x00021ee0 bic r3, sl, 1                                     |     r3 = BIT_MASK (sl, 1);
    0x00021ee4 mov r7, r3                                        |     r7 = r3;
    0x00021ee8 bl 0x9208                                         |     g_mutex_unlock ();
    0x00021eec add r3, r8, 0x18                                  |     r3 += var_0h;
    0x00021ef0 tst sl, 1                                         |     
    0x00021ef4 str r3, [fp, -0xa4]                               |     var_a4h = r3;
    0x00021ef8 mov r0, r7                                        |     r0 = r7;
                                                                 |     if ((sl & 1) != 0) {
    0x00021efc moveq r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if ((sl & 1) == 0) {
    0x00021f00 movne r3, 0x8000000                               |         r3 = 0x8000000;
                                                                 |     }
    0x00021f04 str r3, [fp, -0xa8]                               |     var_a8h = r3;
    0x00021f08 bl 0x2a7f8                                        |     g_type_value_table_peek ();
    0x00021f0c mov r2, 0x40                                      |     r2 = 0x40;
    0x00021f10 mov r1, 0                                         |     r1 = 0;
    0x00021f14 ldr r3, [r0, 0x10]                                |     r3 = *((r0 + 0x10));
    0x00021f18 mov sl, r0                                        |     sl = r0;
    0x00021f1c str r3, [fp, -0xb0]                               |     var_b0h = r3;
    0x00021f20 sub r3, fp, 0x64                                  |     r3 -= var_64h;
    0x00021f24 mov r0, r3                                        |     r0 = r3;
    0x00021f28 bl 0x9118                                         |     memset (r0, r1, r2);
    0x00021f2c ldr r2, [fp, -0x80]                               |     r2 = var_80h;
    0x00021f30 mov ip, 0                                         |     
    0x00021f34 mov r1, ip                                        |     r1 = ip;
    0x00021f38 str r7, [r8, 0x18]                                |     var_0h = r7;
    0x00021f3c mov r3, r0                                        |     r3 = r0;
                                                                 | label_3:
    0x00021f40 ldr r0, [fp, -0xb0]                               |     r0 = var_b0h;
    0x00021f44 ldrb r0, [r0, r1]                                 |     r0 = *((r0 + r1));
    0x00021f48 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x00021f4c bne 0x21fc4                                       |         goto label_17;
                                                                 |     }
    0x00021f50 cmp ip, 0                                         |     
                                                                 |     if (ip == 0) {
    0x00021f54 strne r2, [fp, -0x80]                             |         var_80h = r2;
                                                                 |     }
    0x00021f58 ldr r8, [sl, 0x14]                                |     r8 = *((sl + 0x14));
    0x00021f5c ldr r3, [fp, -0xa8]                               |     r3 = var_a8h;
    0x00021f60 sub r2, fp, 0x64                                  |     r2 -= var_64h;
    0x00021f64 ldr r0, [fp, -0xa4]                               |     r0 = var_a4h;
    0x00021f68 blx r8                                            |     r0 = uint32_t (*r8)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x00021f6c subs r8, r0, 0                                    |     r8 = r0 - 0;
                                                                 |     if (r8 == r0) {
    0x00021f70 beq 0x22088                                       |         goto label_18;
                                                                 |     }
    0x00021f74 ldr r3, [pc, 0x358]                               |     r3 = *(0x222d0);
    0x00021f78 ldr r2, [pc, 0x358]                               |     r2 = *(0x222d4);
    0x00021f7c ldr r0, [pc, 0x358]                               |     r0 = *(0x222d8);
    0x00021f80 add r3, pc, r3                                    |     r3 = pc + r3;
    0x00021f84 add r2, pc, r2                                    |     r2 = pc + r2;
    0x00021f88 mov r1, 0x10                                      |     r1 = 0x10;
    0x00021f8c add r0, pc, r0                                    |     r0 = pc + r0;
    0x00021f90 str r8, [sp]                                      |     *(sp) = r8;
    0x00021f94 bl 0x9544                                         |     g_log ();
    0x00021f98 mov r0, r8                                        |     r0 = r8;
    0x00021f9c bl 0x937c                                         |     g_free ();
    0x00021fa0 ldr r7, [fp, -0x88]                               |     r7 = var_88h;
    0x00021fa4 mov r3, 0x18                                      |     r3 = 0x18;
    0x00021fa8 mla r7, r3, r7, r4                                |     __asm ("mla r7, r3, r7, r4");
                                                                 | label_2:
    0x00021fac cmp r7, r4                                        |     
                                                                 |     if (r7 == r4) {
    0x00021fb0 beq 0x21c58                                       |         goto label_0;
                                                                 |     }
    0x00021fb4 mov r0, r7                                        |     r0 = r7;
    0x00021fb8 bl 0x2ca38                                        |     g_value_unset ();
    0x00021fbc sub r7, r7, 0x18                                  |     r7 -= 0x18;
    0x00021fc0 b 0x21fac                                         |     goto label_2;
                                                                 | label_17:
    0x00021fc4 sub r0, r0, 0x64                                  |     r0 -= 0x64;
    0x00021fc8 cmp r0, 0xd                                       |     
                                                                 |     if (r0 > 0xd) {
                                                                 |         /* switch table (14 cases) at 0x21fd4 */
    0x00021fcc addls pc, pc, r0, lsl 2                           |         pc += (r0 << 2);
                                                                 |     }
    0x00021fd0 b 0x2205c                                         |     goto label_19;
    0x00021fd4 b 0x22030                                         |     goto label_20;
    0x00021fd8 b 0x2205c                                         |     goto label_19;
    0x00021fdc b 0x2205c                                         |     goto label_19;
    0x00021fe0 b 0x2205c                                         |     goto label_19;
    0x00021fe4 b 0x2205c                                         |     goto label_19;
    0x00021fe8 b 0x2204c                                         |     goto label_21;
    0x00021fec b 0x2205c                                         |     goto label_19;
    0x00021ff0 b 0x2205c                                         |     goto label_19;
    0x00021ff4 b 0x2204c                                         |     goto label_21;
    0x00021ff8 b 0x2205c                                         |     goto label_19;
    0x00021ffc b 0x2205c                                         |     goto label_19;
    0x00022000 b 0x2205c                                         |     goto label_19;
    0x00022004 b 0x2204c                                         |     goto label_21;
    0x00022008 b 0x2200c                                         |     
    0x0002200c add r2, r2, 7                                     |     r2 += 7;
    0x00022010 bic ip, r2, 7                                     |     ip = BIT_MASK (r2, 7);
    0x00022014 ldrd r8, sb, [ip]                                 |     __asm ("ldrd r8, sb, [ip]");
    0x00022018 lsl r0, r1, 3                                     |     r0 = r1 << 3;
    0x0002201c add r2, ip, 8                                     |     r2 = ip + 8;
    0x00022020 strd r8, sb, [r3, r0]                             |     __asm ("strd r8, sb, [r3, r0]");
                                                                 |     do {
                                                                 | label_4:
    0x00022024 add r1, r1, 1                                     |         r1++;
    0x00022028 mov ip, 1                                         |         
    0x0002202c b 0x21f40                                         |         goto label_3;
                                                                 | label_20:
    0x00022030 add r2, r2, 7                                     |         r2 += 7;
    0x00022034 bic ip, r2, 7                                     |         ip = BIT_MASK (r2, 7);
    0x00022038 ldrd r8, sb, [ip]                                 |         __asm ("ldrd r8, sb, [ip]");
    0x0002203c lsl r0, r1, 3                                     |         r0 = r1 << 3;
    0x00022040 add r2, ip, 8                                     |         r2 = ip + 8;
    0x00022044 strd r8, sb, [r3, r0]                             |         __asm ("strd r8, sb, [r3, r0]");
    0x00022048 b 0x22024                                         |         
                                                                 |     } while (1);
                                                                 | label_21:
    0x0002204c ldr r0, [r2]                                      |     r0 = *(r2);
    0x00022050 add r2, r2, 4                                     |     r2 += 4;
    0x00022054 str r0, [r3, r1, lsl 3]                           |     offset_1 = r1 << 3;
                                                                 |     *((r3 + offset_1)) = r0;
    0x00022058 b 0x22024                                         |     goto label_4;
                                                                 | label_19:
    0x0002205c mov r3, 0                                         |     r3 = 0;
    0x00022060 str r3, [sp]                                      |     *(sp) = r3;
    0x00022064 ldr r3, [pc, 0x274]                               |     
    0x00022068 ldr r1, [pc, 0x274]                               |     r1 = *(0x222e0);
    0x0002206c ldr r0, [pc, 0x274]                               |     r0 = *(0x222e4);
    0x00022070 add r3, pc, r3                                    |     r3 = pc + r3;
    0x00022074 add r3, r3, 0x214                                 |     r3 = 0x224f0;
    0x00022078 ldr r2, [pc, 0x26c]                               |     r2 = *(0x222e8);
    0x0002207c add r1, pc, r1                                    |     r1 = pc + r1;
    0x00022080 add r0, pc, r0                                    |     r0 = pc + r0;
    0x00022084 b 0x21ca4                                         |     goto label_5;
                                                                 | label_18:
    0x00022088 ldr r3, [fp, -0xb8]                               |     r3 = var_b8h;
    0x0002208c add r0, r3, 0xc                                   |     r0 = r3 + 0xc;
    0x00022090 bl 0x9184                                         |     g_mutex_lock ();
    0x00022094 ldr r3, [fp, -0x88]                               |     r3 = var_88h;
    0x00022098 ldr r8, [fp, -0xa4]                               |     r8 = var_a4h;
    0x0002209c add r3, r3, 1                                     |     r3++;
    0x000220a0 str r3, [fp, -0x88]                               |     var_88h = r3;
    0x000220a4 b 0x21e10                                         |     goto label_6;
                                                                 | label_15:
    0x000220a8 sub r7, fp, 0x7c                                  |     r7 -= var_7ch;
    0x000220ac mov r2, 0x18                                      |     r2 = 0x18;
    0x000220b0 mov r1, r5                                        |     r1 = r5;
    0x000220b4 mov r0, r7                                        |     r0 = r7;
    0x000220b8 bl 0x9118                                         |     memset (r0, r1, r2);
    0x000220bc ldr r3, [fp, -0x98]                               |     r3 = var_98h;
    0x000220c0 mov r0, r7                                        |     r0 = r7;
    0x000220c4 bic r1, r3, 1                                     |     r1 = BIT_MASK (r3, 1);
    0x000220c8 bl 0x2c85c                                        |     g_value_init ();
    0x000220cc str r8, [sp]                                      |     *(sp) = r8;
    0x000220d0 ldr r2, [fp, -0x8c]                               |     r2 = var_8ch;
    0x000220d4 mov r1, r7                                        |     r1 = r7;
    0x000220d8 mov r3, r4                                        |     r3 = r4;
    0x000220dc ldr r0, [fp, -0x94]                               |     r0 = var_94h;
    0x000220e0 bl 0xee2c                                         |     g_closure_invoke ();
    0x000220e4 ldr r3, [fp, -0x98]                               |     r3 = var_98h;
    0x000220e8 ldr r0, [fp, -0x7c]                               |     r0 = var_7ch;
    0x000220ec tst r3, 1                                         |     
                                                                 |     if ((r3 & 1) != 0) {
    0x000220f0 moveq sl, 0                                       |         sl = 0;
                                                                 |     }
                                                                 |     if ((r3 & 1) == 0) {
    0x000220f4 movne sl, 0x8000000                               |         sl = 0x8000000;
                                                                 |     }
    0x000220f8 bl 0x2a7f8                                        |     g_type_value_table_peek ();
    0x000220fc mov r2, 0x40                                      |     r2 = 0x40;
    0x00022100 mov r1, r5                                        |     r1 = r5;
    0x00022104 ldr r3, [r0, 0x18]                                |     r3 = *((r0 + 0x18));
    0x00022108 str r0, [fp, -0x8c]                               |     var_8ch = r0;
    0x0002210c str r3, [fp, -0x94]                               |     var_94h = r3;
    0x00022110 sub r3, fp, 0x64                                  |     r3 -= var_64h;
    0x00022114 mov r0, r3                                        |     r0 = r3;
    0x00022118 str r3, [fp, -0x88]                               |     var_88h = r3;
    0x0002211c bl 0x9118                                         |     memset (r0, r1, r2);
    0x00022120 ldr r2, [fp, -0x80]                               |     r2 = var_80h;
    0x00022124 ldr r0, [fp, -0x88]                               |     r0 = var_88h;
    0x00022128 ldr r3, [fp, -0x94]                               |     r3 = var_94h;
    0x0002212c mov r1, r5                                        |     r1 = r5;
                                                                 |     do {
    0x00022130 ldrb ip, [r3, r1]                                 |         ip = *((r3 + r1));
    0x00022134 cmp ip, 0                                         |         
                                                                 |         if (ip == 0) {
    0x00022138 bne 0x22170                                       |             
    0x0002213c ldr r3, [fp, -0x8c]                               |             r3 = var_8ch;
    0x00022140 cmp r5, 0                                         |             
                                                                 |             if (r5 == 0) {
    0x00022144 strne r2, [fp, -0x80]                             |                 var_80h = r2;
                                                                 |             }
    0x00022148 ldr r5, [r3, 0x1c]                                |             r5 = *((r3 + 0x1c));
    0x0002214c ldr r2, [fp, -0x88]                               |             r2 = var_88h;
    0x00022150 mov r3, sl                                        |             r3 = sl;
    0x00022154 mov r0, r7                                        |             r0 = r7;
    0x00022158 blx r5                                            |             uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x0002215c subs r5, r0, 0                                    |             r5 -= var_7ch;
                                                                 |             if (r5 != var_7ch) {
    0x00022160 bne 0x22234                                       |                 goto label_22;
                                                                 |             }
    0x00022164 mov r0, r7                                        |             r0 = r7;
    0x00022168 bl 0x2ca38                                        |             g_value_unset ();
    0x0002216c b 0x21e90                                         |             goto label_7;
                                                                 |         }
    0x00022170 sub ip, ip, 0x64                                  |         
    0x00022174 cmp ip, 0xd                                       |         
                                                                 |         if (ip > 0xd) {
                                                                 |             /* switch table (14 cases) at 0x22180 */
    0x00022178 addls pc, pc, ip, lsl 2                           |             pc += (ip << 2);
                                                                 |         }
    0x0002217c b 0x22208                                         |         goto label_23;
    0x00022180 b 0x221dc                                         |         goto label_24;
    0x00022184 b 0x22208                                         |         goto label_23;
    0x00022188 b 0x22208                                         |         goto label_23;
    0x0002218c b 0x22208                                         |         goto label_23;
    0x00022190 b 0x22208                                         |         goto label_23;
    0x00022194 b 0x221f8                                         |         goto label_25;
    0x00022198 b 0x22208                                         |         goto label_23;
    0x0002219c b 0x22208                                         |         goto label_23;
    0x000221a0 b 0x221f8                                         |         goto label_25;
    0x000221a4 b 0x22208                                         |         goto label_23;
    0x000221a8 b 0x22208                                         |         goto label_23;
    0x000221ac b 0x22208                                         |         goto label_23;
    0x000221b0 b 0x221f8                                         |         goto label_25;
    0x000221b4 b 0x221b8                                         |         
    0x000221b8 add r2, r2, 7                                     |         r2 += 7;
    0x000221bc bic lr, r2, 7                                     |         lr = BIT_MASK (r2, 7);
    0x000221c0 ldrd r8, sb, [lr]                                 |         __asm ("ldrd r8, sb, [lr]");
    0x000221c4 lsl ip, r1, 3                                     |         
    0x000221c8 add r2, lr, 8                                     |         r2 = lr + 8;
    0x000221cc strd r8, sb, [r0, ip]                             |         __asm ("strd r8, sb, [r0, ip]");
                                                                 | label_8:
    0x000221d0 add r1, r1, 1                                     |         r1++;
    0x000221d4 mov r5, 1                                         |         r5 = 1;
    0x000221d8 b 0x22130                                         |         
                                                                 |     } while (1);
                                                                 | label_24:
    0x000221dc add r2, r2, 7                                     |     r2 += 7;
    0x000221e0 bic lr, r2, 7                                     |     lr = BIT_MASK (r2, 7);
    0x000221e4 ldrd r8, sb, [lr]                                 |     __asm ("ldrd r8, sb, [lr]");
    0x000221e8 lsl ip, r1, 3                                     |     
    0x000221ec add r2, lr, 8                                     |     r2 = lr + 8;
    0x000221f0 strd r8, sb, [r0, ip]                             |     __asm ("strd r8, sb, [r0, ip]");
    0x000221f4 b 0x221d0                                         |     goto label_8;
                                                                 | label_25:
    0x000221f8 ldr ip, [r2]                                      |     ip = *(r2);
    0x000221fc add r2, r2, 4                                     |     r2 += 4;
    0x00022200 str ip, [r0, r1, lsl 3]                           |     offset_2 = r1 << 3;
                                                                 |     *((r0 + offset_2)) = ip;
    0x00022204 b 0x221d0                                         |     goto label_8;
                                                                 | label_23:
    0x00022208 mov r3, 0                                         |     r3 = 0;
    0x0002220c str r3, [sp]                                      |     *(sp) = r3;
    0x00022210 ldr r3, [pc, 0xd8]                                |     
    0x00022214 ldr r1, [pc, 0xd8]                                |     r1 = *(0x222f0);
    0x00022218 ldr r0, [pc, 0xd8]                                |     r0 = *(0x222f4);
    0x0002221c add r3, pc, r3                                    |     r3 = pc + r3;
    0x00022220 add r3, r3, 0x214                                 |     r3 = 0x22500;
    0x00022224 ldr r2, [pc, 0xd0]                                |     r2 = *(0x222f8);
    0x00022228 add r1, pc, r1                                    |     r1 = pc + r1;
    0x0002222c add r0, pc, r0                                    |     r0 = pc + r0;
    0x00022230 b 0x21ca4                                         |     goto label_5;
                                                                 | label_22:
    0x00022234 ldr r3, [pc, 0xc4]                                |     r3 = *(0x222fc);
    0x00022238 ldr r2, [pc, 0xc4]                                |     r2 = *(0x22300);
    0x0002223c ldr r0, [pc, 0xc4]                                |     r0 = *(0x22304);
    0x00022240 str r5, [sp]                                      |     *(sp) = r5;
    0x00022244 add r3, pc, r3                                    |     r3 = pc + r3;
    0x00022248 add r2, pc, r2                                    |     r2 = pc + r2;
    0x0002224c mov r1, 0x10                                      |     r1 = 0x10;
    0x00022250 add r0, pc, r0                                    |     r0 = pc + r0;
    0x00022254 bl 0x9544                                         |     g_log ();
    0x00022258 mov r0, r5                                        |     r0 = r5;
    0x0002225c bl 0x937c                                         |     g_free ();
    0x00022260 b 0x21e90                                         |     goto label_7;
                                                                 | label_16:
    0x00022264 mov r0, r7                                        |     r0 = r7;
    0x00022268 bl 0x2ca38                                        |     g_value_unset ();
    0x0002226c add r7, r7, 0x18                                  |     r7 += 0x18;
    0x00022270 b 0x21ea4                                         |     goto label_9;
                                                                 | }
    ; 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/lib/libgobject-2.0.so.0.5600.4 @ 0x231d8 */
                                                                         | #include <stdint.h>
                                                                         |  
    ; (fcn) sym.g_signal_has_handler_pending ()                          | void g_signal_has_handler_pending (int32_t arg1, int32_t arg2) {
                                                                         |     int32_t var_0h;
                                                                         |     int32_t var_4h;
                                                                         |     int32_t var_8h;
                                                                         |     int32_t var_ch;
                                                                         |     int32_t var_10h;
                                                                         |     r0 = arg1;
                                                                         |     r1 = arg2;
    0x000231d8 push {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, lr}     |     
    0x000231dc mov r7, r0                                                |     r7 = r0;
    0x000231e0 mov r5, r1                                                |     r5 = r1;
    0x000231e4 mov sl, r2                                                |     sl = r2;
    0x000231e8 mov sb, r3                                                |     sb = r3;
    0x000231ec bl 0x2a6dc                                                |     r0 = g_type_check_instance ();
    0x000231f0 subs r4, r0, 0                                            |     r4 = r0 - 0;
                                                                         |     if (r4 != r0) {
    0x000231f4 beq 0x2322c                                               |         
    0x000231f8 cmp r5, 0                                                 |         
                                                                         |         if (r5 != 0) {
    0x000231fc bne 0x2325c                                               |             goto label_2;
                                                                         |         }
    0x00023200 ldr r1, [pc, 0x138]                                       |         
    0x00023204 ldr r2, [pc, 0x138]                                       |         r2 = *(0x23340);
    0x00023208 ldr r0, [pc, 0x138]                                       |         r0 = *(0x23344);
    0x0002320c add r1, pc, r1                                            |         r1 = pc + r1;
    0x00023210 add r1, r1, 0x358                                         |         r1 = 0x23694;
    0x00023214 add r2, pc, r2                                            |         r2 = pc + r2;
    0x00023218 add r1, r1, 3                                             |         r1 += 3;
    0x0002321c add r0, pc, r0                                            |         r0 = pc + r0;
    0x00023220 bl 0x92ec                                                 |         g_return_if_fail_warning ();
    0x00023224 mov r4, r5                                                |         r4 = r5;
    0x00023228 b 0x23250                                                 |         
                                                                         |     } else {
    0x0002322c ldr r1, [pc, 0x118]                                       |         
    0x00023230 ldr r2, [pc, 0x118]                                       |         r2 = *(0x2334c);
    0x00023234 ldr r0, [pc, 0x118]                                       |         r0 = *(0x23350);
    0x00023238 add r1, pc, r1                                            |         r1 = pc + r1;
    0x0002323c add r1, r1, 0x358                                         |         r1 = 0x236a0;
    0x00023240 add r2, pc, r2                                            |         r2 = pc + r2;
    0x00023244 add r1, r1, 3                                             |         r1 += 3;
    0x00023248 add r0, pc, r0                                            |         r0 = pc + r0;
    0x0002324c bl 0x92ec                                                 |         g_return_if_fail_warning ();
                                                                         |     }
                                                                         |     do {
    0x00023250 mov r0, r4                                                |         r0 = r4;
    0x00023254 add sp, sp, 0x10                                          |         
    0x00023258 pop {r4, r5, r6, r7, r8, sb, sl, pc}                      |         
                                                                         | label_2:
    0x0002325c ldr r6, [pc, 0xf4]                                        |         
    0x00023260 add r6, pc, r6                                            |         r6 = pc + r6;
    0x00023264 add r6, r6, 0xc                                           |         r6 = 0x23360;
    0x00023268 mov r0, r6                                                |         r0 = r6;
    0x0002326c bl 0x9184                                                 |         g_mutex_lock ();
    0x00023270 mov r0, r5                                                |         r0 = r5;
    0x00023274 bl 0x1d824                                                |         fcn_0001d824 (r0);
    0x00023278 cmp sl, 0                                                 |         
    0x0002327c mov r8, r0                                                |         r8 = r0;
                                                                         |         if (sl == 0) {
    0x00023280 beq 0x232c4                                               |             goto label_3;
                                                                         |         }
    0x00023284 ldrh r4, [r0, 0xc]                                        |         r4 = *((r0 + 0xc));
    0x00023288 lsr r4, r4, 1                                             |         r4 >>= 1;
    0x0002328c ands r4, r4, 0x10                                         |         r4 &= 0x10;
                                                                         |         if (r4 != r4) {
    0x00023290 bne 0x232c4                                               |             goto label_3;
                                                                         |         }
    0x00023294 ldr r3, [pc, 0xc0]                                        |         r3 = *(0x23358);
    0x00023298 ldr r2, [pc, 0xc0]                                        |         r2 = *(0x2335c);
    0x0002329c ldr r0, [pc, 0xc0]                                        |         r0 = *(0x23360);
    0x000232a0 stm sp, {r5, sl}                                          |         *(sp) = r5;
                                                                         |         *((sp + 4)) = sl;
    0x000232a4 add r0, pc, r0                                            |         r0 = pc + r0;
    0x000232a8 add r3, pc, r3                                            |         r3 = pc + r3;
    0x000232ac add r2, pc, r2                                            |         r2 = pc + r2;
    0x000232b0 mov r1, 0x10                                              |         r1 = 0x10;
    0x000232b4 bl 0x9544                                                 |         g_log ();
    0x000232b8 mov r0, r6                                                |         r0 = r6;
                                                                         | label_0:
    0x000232bc bl 0x9208                                                 |         g_mutex_unlock ();
    0x000232c0 b 0x23250                                                 |         
                                                                         |     } while (1);
                                                                         | label_3:
    0x000232c4 cmp sb, 0                                                 |     
    0x000232c8 mov r3, 0                                                 |     r3 = 0;
    0x000232cc mov r4, 1                                                 |     r4 = 1;
    0x000232d0 str r3, [sp, 8]                                           |     var_8h = r3;
    0x000232d4 str r3, [sp, 4]                                           |     var_4h = r3;
    0x000232d8 str r3, [sp]                                              |     *(sp) = r3;
                                                                         |     if (sb == 0) {
    0x000232dc movne r1, 3                                               |         r1 = 3;
                                                                         |     }
                                                                         |     if (sb != 0) {
    0x000232e0 moveq r1, 0x23                                            |         r1 = 0x23;
                                                                         |     }
    0x000232e4 str r4, [sp, 0xc]                                         |     var_ch = r4;
    0x000232e8 mov r3, sl                                                |     r3 = sl;
    0x000232ec mov r2, r5                                                |     r2 = r5;
    0x000232f0 mov r0, r7                                                |     r0 = r7;
    0x000232f4 bl 0x1ec74                                                |     r0 = fcn_0001ec74 (r0, r1, r2, r3, r4, r5);
    0x000232f8 cmp r0, 0                                                 |     
                                                                         |     if (r0 == 0) {
    0x000232fc beq 0x23318                                               |         goto label_4;
                                                                         |     }
    0x00023300 mov r1, r7                                                |     r1 = r7;
    0x00023304 bl 0x1eb50                                                |     fcn_0001eb50 (r0, r1);
                                                                         |     do {
                                                                         | label_1:
    0x00023308 ldr r0, [pc, 0x58]                                        |         
    0x0002330c add r0, pc, r0                                            |         r0 = pc + r0;
    0x00023310 add r0, r0, 0xc                                           |         r0 = 0x23370;
    0x00023314 b 0x232bc                                                 |         goto label_0;
                                                                         | label_4:
    0x00023318 ldr r3, [r7]                                              |         r3 = *(r7);
    0x0002331c ldr r0, [r8, 0x18]                                        |         r0 = *((r8 + 0x18));
    0x00023320 ldr r1, [r3]                                              |         r1 = *(r3);
    0x00023324 bl 0x1df38                                                |         r0 = fcn_0001df38 (r0, r1);
    0x00023328 subs r4, r0, 0                                            |         r4 = r0 - 0;
    0x0002332c beq 0x23308                                               |         
                                                                         |     } while (r4 == r0);
    0x00023330 ldr r4, [r4]                                              |     r4 = *(r4);
    0x00023334 adds r4, r4, 0                                            |     r4 += 0;
                                                                         |     if (r4 == r4) {
    0x00023338 movne r4, 1                                               |         r4 = 1;
                                                                         |     }
    0x0002333c b 0x23308                                                 |     goto label_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/lib/libgobject-2.0.so.0.5600.4 @ 0x216b0 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) sym.g_signal_override_class_closure ()       | void g_signal_override_class_closure (int32_t arg1, int32_t arg2) {
                                                         |     int32_t var_ch;
                                                         |     r0 = arg1;
                                                         |     r1 = arg2;
    0x000216b0 push {r0, r1, r2, r4, r5, r6, r7, lr}     |     
    0x000216b4 subs r5, r0, 0                            |     r5 = r0 - 0;
                                                         |     if (r5 != r0) {
    0x000216b8 beq 0x216e8                               |         
    0x000216bc cmp r2, 0                                 |         
                                                         |         if (r2 != 0) {
    0x000216c0 bne 0x21714                               |             goto label_1;
                                                         |         }
    0x000216c4 ldr r1, [pc, 0x124]                       |         
    0x000216c8 ldr r2, [pc, 0x124]                       |         r2 = *(0x217f0);
    0x000216cc ldr r0, [pc, 0x124]                       |         r0 = *(0x217f4);
    0x000216d0 add r1, pc, r1                            |         r1 = pc + r1;
    0x000216d4 add r1, r1, 0x1b4                         |         r1 = 0x219a0;
    0x000216d8 add r2, pc, r2                            |         r2 = pc + r2;
    0x000216dc add r1, r1, 1                             |         r1++;
    0x000216e0 add r0, pc, r0                            |         r0 = pc + r0;
    0x000216e4 b 0x21708                                 |         
                                                         |     } else {
    0x000216e8 ldr r1, [pc, 0x10c]                       |         
    0x000216ec ldr r2, [pc, 0x10c]                       |         r2 = *(0x217fc);
    0x000216f0 ldr r0, [pc, 0x10c]                       |         r0 = *(0x21800);
    0x000216f4 add r1, pc, r1                            |         r1 = pc + r1;
    0x000216f8 add r1, r1, 0x1b4                         |         r1 = 0x219ac;
    0x000216fc add r2, pc, r2                            |         r2 = pc + r2;
    0x00021700 add r1, r1, 1                             |         r1++;
    0x00021704 add r0, pc, r0                            |         r0 = pc + r0;
                                                         |     }
    0x00021708 add sp, sp, 0xc                           |     
    0x0002170c pop {r4, r5, r6, r7, lr}                  |     
    0x00021710 b 0x92ec                                  |     void (*0x92ec)() ();
                                                         | label_1:
    0x00021714 ldr r0, [pc, 0xec]                        |     
    0x00021718 mov r4, r1                                |     r4 = r1;
    0x0002171c add r0, pc, r0                            |     r0 = pc + r0;
    0x00021720 add r0, r0, 0xc                           |     r0 = 0x21810;
    0x00021724 mov r6, r2                                |     r6 = r2;
    0x00021728 bl 0x9184                                 |     g_mutex_lock ();
    0x0002172c mov r0, r5                                |     r0 = r5;
    0x00021730 bl 0x1d824                                |     r0 = fcn_0001d824 (r0);
    0x00021734 mov r7, r0                                |     r7 = r0;
    0x00021738 bl 0x1de8c                                |     fcn_0001de8c (r0);
    0x0002173c ldr r1, [r7, 4]                           |     r1 = *((r7 + 4));
    0x00021740 mov r0, r4                                |     r0 = r4;
    0x00021744 bl 0x28dd8                                |     r0 = g_type_is_a ();
    0x00021748 cmp r0, 0                                 |     
                                                         |     if (r0 != 0) {
    0x0002174c bne 0x21794                               |         goto label_2;
                                                         |     }
    0x00021750 mov r0, r4                                |     r0 = r4;
    0x00021754 bl 0x1de50                                |     fcn_0001de50 (r0);
    0x00021758 ldr r3, [pc, 0xac]                        |     r3 = *(0x21808);
    0x0002175c ldr r2, [pc, 0xac]                        |     r2 = *(0x2180c);
    0x00021760 add r3, pc, r3                            |     r3 = pc + r3;
    0x00021764 add r2, pc, r2                            |     r2 = pc + r2;
    0x00021768 mov r1, 0x10                              |     r1 = 0x10;
    0x0002176c stm sp, {r0, r5}                          |     *(sp) = r0;
                                                         |     *((sp + 4)) = r5;
    0x00021770 ldr r0, [pc, 0x9c]                        |     r0 = *(0x21810);
    0x00021774 add r0, pc, r0                            |     r0 = pc + r0;
                                                         |     do {
    0x00021778 bl 0x9544                                 |         g_log ();
                                                         | label_0:
    0x0002177c ldr r0, [pc, 0x94]                        |         
    0x00021780 add r0, pc, r0                            |         r0 = pc + r0;
    0x00021784 add r0, r0, 0xc                           |         r0 = 0x21820;
    0x00021788 add sp, sp, 0xc                           |         
    0x0002178c pop {r4, r5, r6, r7, lr}                  |         
    0x00021790 b 0x9208                                  |         void (*0x9208)() ();
                                                         | label_2:
    0x00021794 mov r1, r4                                |         r1 = r4;
    0x00021798 ldr r0, [r7, 0x18]                        |         r0 = *((r7 + 0x18));
    0x0002179c bl 0x1df38                                |         r0 = fcn_0001df38 (r0, r1);
    0x000217a0 cmp r0, 0                                 |         
                                                         |         if (r0 == 0) {
    0x000217a4 beq 0x217dc                               |             goto label_3;
                                                         |         }
    0x000217a8 ldr r0, [r0]                              |         r0 = *(r0);
    0x000217ac cmp r0, r4                                |         
                                                         |         if (r0 != r4) {
    0x000217b0 bne 0x217dc                               |             goto label_3;
                                                         |         }
    0x000217b4 bl 0x1de50                                |         fcn_0001de50 (r0);
    0x000217b8 ldr r3, [pc, 0x5c]                        |         r3 = *(0x21818);
    0x000217bc ldr r2, [pc, 0x5c]                        |         r2 = *(0x2181c);
    0x000217c0 add r3, pc, r3                            |         r3 = pc + r3;
    0x000217c4 add r2, pc, r2                            |         r2 = pc + r2;
    0x000217c8 mov r1, 0x10                              |         r1 = 0x10;
    0x000217cc stm sp, {r0, r5}                          |         *(sp) = r0;
                                                         |         *((sp + 4)) = r5;
    0x000217d0 ldr r0, [pc, 0x4c]                        |         r0 = *(0x21820);
    0x000217d4 add r0, pc, r0                            |         r0 = pc + r0;
    0x000217d8 b 0x21778                                 |         
                                                         |     } while (1);
                                                         | label_3:
    0x000217dc mov r2, r6                                |     r2 = r6;
    0x000217e0 mov r1, r4                                |     r1 = r4;
    0x000217e4 mov r0, r7                                |     r0 = r7;
    0x000217e8 bl 0x1e2b8                                |     fcn_0001e2b8 (r0, r1);
    0x000217ec b 0x2177c                                 |     goto label_0;
                                                         | }
    ; 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/lib/libgobject-2.0.so.0.5600.4 @ 0x2b9c0 */
                                                     | #include <stdint.h>
                                                     |  
    ; (fcn) sym.g_type_module_use ()                 | void g_type_module_use (int32_t arg1) {
                                                     |     int32_t var_0h;
                                                     |     int32_t var_8h;
                                                     |     r0 = arg1;
    0x0002b9c0 push {r0, r1, r4, r5, r6, lr}         |     
    0x0002b9c4 mov r4, r0                            |     r4 = r0;
    0x0002b9c8 bl 0x2b7a0                            |     g_type_module_get_type ();
    0x0002b9cc cmp r4, 0                             |     
                                                     |     if (r4 != 0) {
    0x0002b9d0 beq 0x2ba00                           |         
    0x0002b9d4 ldr r5, [r4]                          |         r5 = *(r4);
    0x0002b9d8 mov r1, r0                            |         r1 = r0;
    0x0002b9dc cmp r5, 0                             |         
                                                     |         if (r5 != 0) {
    0x0002b9e0 beq 0x2b9f0                           |             
    0x0002b9e4 ldr r3, [r5]                          |             r3 = *(r5);
    0x0002b9e8 cmp r3, r0                            |             
                                                     |             if (r3 == r0) {
    0x0002b9ec beq 0x2ba30                           |                 goto label_4;
                                                     |             }
                                                     |         }
    0x0002b9f0 mov r0, r4                            |         r0 = r4;
    0x0002b9f4 bl 0x29f44                            |         r0 = g_type_check_instance_is_a ();
    0x0002b9f8 cmp r0, 0                             |         
                                                     |         if (r0 != 0) {
    0x0002b9fc bne 0x2ba30                           |             goto label_4;
                                                     |         }
                                                     |     }
    0x0002ba00 ldr r1, [pc, 0xc4]                    |     
    0x0002ba04 ldr r2, [pc, 0xc4]                    |     r2 = *(0x2bacc);
    0x0002ba08 ldr r0, [pc, 0xc4]                    |     r0 = *(0x2bad0);
    0x0002ba0c add r1, pc, r1                        |     r1 = pc + r1;
    0x0002ba10 add r2, pc, r2                        |     r2 = pc + r2;
    0x0002ba14 add r1, r1, 0x2b                      |     r1 = 0x2baf3;
    0x0002ba18 add r0, pc, r0                        |     r0 = pc + r0;
    0x0002ba1c bl 0x92ec                             |     g_return_if_fail_warning ();
    0x0002ba20 mov r5, 0                             |     r5 = 0;
                                                     |     do {
                                                     | label_0:
    0x0002ba24 mov r0, r5                            |         r0 = r5;
    0x0002ba28 add sp, sp, 8                         |         
    0x0002ba2c pop {r4, r5, r6, pc}                  |         
                                                     | label_4:
    0x0002ba30 ldr r3, [r4, 0xc]                     |         r3 = *((r4 + 0xc));
    0x0002ba34 add r3, r3, 1                         |         r3++;
    0x0002ba38 cmp r3, 1                             |         
    0x0002ba3c str r3, [r4, 0xc]                     |         *((r4 + 0xc)) = r3;
                                                     |         if (r3 == 1) {
    0x0002ba40 beq 0x2ba4c                           |             goto label_5;
                                                     |         }
                                                     | label_1:
    0x0002ba44 mov r5, 1                             |         r5 = 1;
    0x0002ba48 b 0x2ba24                             |         
                                                     |     } while (1);
                                                     | label_5:
    0x0002ba4c ldr r3, [r5, 0x44]                    |     r3 = *((r5 + 0x44));
    0x0002ba50 mov r0, r4                            |     r0 = r4;
    0x0002ba54 blx r3                                |     r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
    0x0002ba58 subs r5, r0, 0                        |     r5 = r0 - 0;
                                                     |     if (r5 == r0) {
    0x0002ba5c ldrne r3, [r4, 0x10]                  |         r3 = *((r4 + 0x10));
                                                     |     }
                                                     |     if (r5 == r0) {
    0x0002ba60 bne 0x2ba78                           |         
                                                     | label_3:
    0x0002ba64 ldr r3, [r4, 0xc]                     |         r3 = *((r4 + 0xc));
    0x0002ba68 sub r3, r3, 1                         |         r3--;
    0x0002ba6c str r3, [r4, 0xc]                     |         *((r4 + 0xc)) = r3;
    0x0002ba70 b 0x2ba24                             |         goto label_0;
                                                     | label_2:
    0x0002ba74 ldr r3, [r3, 4]                       |         r3 = *((r3 + 4));
                                                     |     }
    0x0002ba78 cmp r3, 0                             |     
                                                     |     if (r3 == 0) {
    0x0002ba7c beq 0x2ba44                           |         goto label_1;
                                                     |     }
    0x0002ba80 ldr r2, [r3]                          |     r2 = *(r3);
    0x0002ba84 ldr r5, [r2]                          |     r5 = *(r2);
    0x0002ba88 cmp r5, 0                             |     
                                                     |     if (r5 != 0) {
    0x0002ba8c bne 0x2ba74                           |         goto label_2;
                                                     |     }
    0x0002ba90 ldr r6, [r4, 0x18]                    |     r6 = *((r4 + 0x18));
    0x0002ba94 cmp r6, 0                             |     
                                                     |     if (r6 != 0) {
    0x0002ba98 ldreq r6, [pc, 0x38]                  |         r6 = *((pc + 0x38));
                                                     |     }
                                                     |     if (r6 != 0) {
    0x0002ba9c addeq r6, pc, r6                      |         r6 = pc + r6;
                                                     |     }
    0x0002baa0 ldr r0, [r2, 4]                       |     r0 = *((r2 + 4));
    0x0002baa4 bl 0x28540                            |     g_type_name ();
    0x0002baa8 ldr r2, [pc, 0x2c]                    |     r2 = *(0x2bad8);
    0x0002baac mov r3, r6                            |     r3 = r6;
    0x0002bab0 add r2, pc, r2                        |     r2 = pc + r2;
    0x0002bab4 mov r1, 0x10                          |     r1 = 0x10;
    0x0002bab8 str r0, [sp]                          |     *(sp) = r0;
    0x0002babc ldr r0, [pc, 0x1c]                    |     r0 = *(0x2badc);
    0x0002bac0 add r0, pc, r0                        |     r0 = pc + r0;
    0x0002bac4 bl 0x9544                             |     g_log ();
    0x0002bac8 b 0x2ba64                             |     goto label_3;
                                                     | }

[*] Function strcpy used 1 times libgobject-2.0.so.0.5600.4