/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x140111c08 FUN_140111c08 * Pseudocode, not original source. */ int FUN_140111c08(longlong *param_1,int param_2) { uint *puVar1; char cVar2; uint uVar3; undefined8 uVar4; char *pcVar5; byte bVar6; ushort uVar7; uint uVar8; uint uVar9; ulonglong uVar10; longlong lVar11; uint uVar12; ulonglong uVar13; uint uVar14; int iVar15; uint *puVar16; ulonglong uVar17; undefined2 uVar18; undefined1 *puVar19; uint uVar20; ulonglong uVar21; int iVar22; uint uVar23; uint uVar24; uint uVar25; int local_res8; uint local_res18; uint local_res20; undefined2 local_68; undefined1 local_66; undefined1 local_65; undefined4 local_64; uint local_60; uint *local_58; undefined1 *local_50; if ((((param_1 == (longlong *)0x0) || (puVar1 = (uint *)param_1[5], puVar1 == (uint *)0x0)) || (param_1[2] == 0)) || ((*param_1 == 0 && ((int)param_1[1] != 0)))) { return -2; } uVar25 = *puVar1; uVar23 = puVar1[0x10]; uVar14 = puVar1[0x11]; local_res8 = 0; if (uVar25 == 0xb) { uVar25 = 0xc; } *puVar1 = uVar25; local_res20 = *(uint *)(param_1 + 3); uVar17 = (ulonglong)local_res20; local_58 = (uint *)*param_1; uVar25 = *(uint *)(param_1 + 1); local_50 = (undefined1 *)param_1[2]; uVar13 = uVar17; local_60 = uVar25; LAB_140111c8e: uVar21 = 0; uVar10 = 0x10; puVar16 = local_58; LAB_140111c93: local_res18 = (uint)uVar13; puVar19 = local_50; LAB_140111c9b: uVar12 = 7; LAB_140111ca0: do { uVar8 = (uint)uVar10; uVar3 = *puVar1; uVar20 = (uint)uVar21; uVar24 = (uint)uVar13; uVar9 = local_64; if ((int)uVar3 < 0xf) { if (uVar3 == 0xe) { LAB_14011237c: uVar3 = puVar1[0x12]; if (uVar3 != 0) { if (uVar25 < uVar3) { uVar3 = uVar25; } if (uVar24 < uVar3) { uVar3 = uVar24; } uVar12 = uVar25; if (uVar3 != 0) { memcpy(puVar19,local_58,(ulonglong)uVar3); local_58 = (uint *)((longlong)local_58 + (ulonglong)uVar3); uVar25 = uVar25 - uVar3; local_res18 = local_res18 - uVar3; local_50 = local_50 + uVar3; puVar1[0x12] = puVar1[0x12] - uVar3; goto LAB_1401123d2; } goto LAB_1401120f6; } *puVar1 = 0xb; puVar16 = local_58; goto LAB_140111ca0; } if ((int)uVar3 <= (int)uVar12) { if (uVar3 == uVar12) goto LAB_140112076; if (uVar3 == 0) { uVar3 = uVar23; if (puVar1[2] != uVar20) goto LAB_140112182; *puVar1 = 0xc; goto LAB_140111c9b; } if (uVar3 == 1) goto LAB_140111d2b; if (uVar3 == 2) goto LAB_140111dcb; if (uVar3 == 3) goto LAB_140111e51; if (uVar3 == 4) goto LAB_140111eaf; if (uVar3 == 5) goto LAB_140111ecf; if (uVar3 != 6) { return -2; } goto LAB_140111fdd; } if (uVar3 == 8) goto LAB_1401122da; if (uVar3 == 9) { for (; uVar14 < 0x20; uVar14 = uVar14 + 8) { uVar12 = uVar25; if (uVar25 == 0) goto LAB_1401120f6; uVar12 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); uVar25 = uVar25 - 1; uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f)); local_58 = puVar16; } uVar23 = (uVar23 >> 8 & 0xff00) + ((uVar23 & 0xff00) + uVar23 * 0x10000) * 0x100 + (uVar23 >> 0x18); puVar1[6] = uVar23; *(uint *)((longlong)param_1 + 0x4c) = uVar23; *puVar1 = 10; uVar23 = uVar20; uVar14 = uVar20; LAB_14011243e: if (puVar1[3] == uVar20) { param_1[2] = (longlong)puVar19; *(uint *)(param_1 + 3) = uVar24; *param_1 = (longlong)puVar16; *(uint *)(param_1 + 1) = uVar25; puVar1[0x10] = uVar23; puVar1[0x11] = uVar14; return 2; } uVar12 = FUN_1401161bc(0,(byte *)0x0,0); uVar17 = (ulonglong)local_res20; uVar13 = (ulonglong)local_res18; uVar21 = 0; puVar1[6] = uVar12; *(uint *)((longlong)param_1 + 0x4c) = uVar12; *puVar1 = 0xb; uVar10 = 0x10; puVar19 = local_50; LAB_140112474: uVar12 = uVar25; uVar9 = local_64; if (param_2 == 5) goto LAB_1401120f6; } else { if (uVar3 == 10) goto LAB_14011243e; if (uVar3 == 0xb) goto LAB_140112474; if (uVar3 != 0xc) { if (uVar3 != 0xd) { return -2; } uVar23 = uVar23 >> (sbyte)(uVar14 & 7); for (uVar14 = uVar14 - (uVar14 & 7); uVar14 < 0x20; uVar14 = uVar14 + 8) { uVar12 = uVar25; if (uVar25 == 0) goto LAB_1401120f6; uVar12 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); uVar25 = uVar25 - 1; uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f)); local_58 = puVar16; } if ((uVar23 & 0xffff) == ~uVar23 >> 0x10) { puVar1[0x12] = uVar23 & 0xffff; *puVar1 = 0xe; uVar12 = 7; uVar23 = uVar20; uVar14 = uVar20; goto LAB_14011237c; } pcVar5 = "invalid stored block lengths"; goto LAB_1401122a0; } } if (puVar1[1] != (uint)uVar21) { uVar12 = 7; *puVar1 = 0x18; uVar23 = uVar23 >> (sbyte)(uVar14 & 7); uVar14 = uVar14 - (uVar14 & 7); goto LAB_140111ca0; } goto LAB_1401124be; } if (0x16 < (int)uVar3) { uVar12 = uVar25; if (uVar3 == 0x17) { if (uVar24 == 0) goto LAB_1401120f6; *puVar19 = (char)puVar1[0x12]; local_50 = puVar19 + 1; uVar13 = (ulonglong)(uVar24 - 1); *puVar1 = 0x12; goto LAB_140111c93; } if (uVar3 == 0x18) { uVar12 = uVar23; uVar3 = uVar14; if (puVar1[2] != uVar20) goto LAB_140112f90; goto LAB_140113028; } if (uVar3 == 0x19) goto LAB_14011302e; if (uVar3 == 0x1a) goto LAB_1401130d4; if (uVar3 != 0x1b) { if (uVar3 == 0x1c) { return -4; } return -2; } local_res8 = -3; goto LAB_1401120f6; } if (uVar3 == 0x16) goto LAB_140112e98; if (uVar3 != 0xf) { if (uVar3 == 0x10) goto LAB_14011268f; if (uVar3 == 0x11) goto LAB_140112780; uVar12 = (uint)uVar17; if (uVar3 == 0x12) goto LAB_140112aa1; if (uVar3 == 0x13) goto LAB_140112c76; if (uVar3 == 0x14) goto LAB_140112cc4; if (uVar3 != 0x15) { return -2; } goto LAB_140112e30; } for (; uVar14 < 0xe; uVar14 = uVar14 + 8) { uVar12 = uVar25; if (uVar25 == 0) goto LAB_1401120f6; uVar12 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); uVar25 = uVar25 - 1; uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f)); local_58 = puVar16; } uVar14 = uVar14 - 0xe; uVar24 = uVar23 >> 10; uVar12 = (uVar23 & 0x1f) + 0x101; uVar3 = (uVar23 >> 5 & 0x1f) + 1; uVar23 = uVar23 >> 0xe; puVar1[0x1d] = uVar12; puVar1[0x1e] = uVar3; puVar1[0x1c] = (uVar24 & 0xf) + 4; if ((0x11e < uVar12) || (0x1e < uVar3)) { pcVar5 = "too many length or distance symbols"; goto LAB_140112236; } puVar1[0x1f] = uVar20; *puVar1 = 0x10; LAB_14011268f: while (uVar3 = uVar23, puVar1[0x1f] < puVar1[0x1c]) { for (; uVar14 < 3; uVar14 = uVar14 + 8) { uVar23 = uVar3; uVar12 = uVar25; if (uVar25 == 0) goto LAB_1401120f6; uVar23 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); bVar6 = (byte)uVar14; uVar25 = uVar25 - 1; uVar3 = uVar3 + ((uint)(byte)uVar23 << (bVar6 & 0x1f)); local_58 = puVar16; } uVar23 = uVar3 >> 3; *(ushort *) ((longlong)puVar1 + (ulonglong)*(ushort *)(&DAT_140155f20 + (ulonglong)puVar1[0x1f] * 2) * 2 + 0x88) = (ushort)uVar3 & 7; puVar1[0x1f] = puVar1[0x1f] + 1; uVar14 = uVar14 - 3; } while (puVar1[0x1f] < 0x13) { *(short *)((longlong)puVar1 + (ulonglong)*(ushort *)(&DAT_140155f20 + (ulonglong)puVar1[0x1f] * 2) * 2 + 0x88) = (short)uVar21; puVar1[0x1f] = puVar1[0x1f] + 1; } puVar1[0x1a] = 7; *(uint **)(puVar1 + 0x20) = puVar1 + 0x152; *(uint **)(puVar1 + 0x16) = puVar1 + 0x152; uVar4 = FUN_140115d54(0,(ushort *)(puVar1 + 0x22),0x13,(longlong *)(puVar1 + 0x20),puVar1 + 0x1a ,(undefined *)(puVar1 + 0xc2)); uVar21 = 0; local_res8 = (int)uVar4; uVar10 = 0x10; puVar19 = local_50; if (local_res8 != 0) { uVar17 = (ulonglong)local_res20; uVar13 = (ulonglong)local_res18; param_1[4] = (longlong)"invalid code lengths set"; *puVar1 = 0x1b; goto LAB_140111c9b; } puVar1[0x1f] = 0; *puVar1 = 0x11; LAB_140112780: if (puVar1[0x1f] < puVar1[0x1e] + puVar1[0x1d]) { do { for (; uVar9 = *(uint *)(*(longlong *)(puVar1 + 0x16) + (ulonglong)((1 << ((byte)puVar1[0x1a] & 0x1f)) - 1U & uVar23) * 4), uVar14 < (uVar9 >> 8 & 0xff); uVar14 = uVar14 + 8) { uVar12 = uVar25; if (uVar25 == 0) goto LAB_1401120f6; uVar12 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); uVar25 = uVar25 - 1; uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f)); local_58 = puVar16; } uVar7 = (ushort)(uVar9 >> 0x10); local_64._1_1_ = (byte)(uVar9 >> 8); local_64 = uVar9; if (uVar7 < (ushort)uVar10) { if (uVar14 < (uVar9 >> 8 & 0xff)) { do { uVar12 = 0; if (uVar25 == 0) goto LAB_1401120f6; uVar12 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); bVar6 = (byte)uVar14; uVar14 = uVar14 + 8; uVar25 = uVar25 - 1; uVar23 = uVar23 + ((uint)(byte)uVar12 << (bVar6 & 0x1f)); local_58 = puVar16; } while (uVar14 < local_64._1_1_); } uVar23 = uVar23 >> (local_64._1_1_ & 0x1f); uVar14 = uVar14 - local_64._1_1_; *(ushort *)((longlong)puVar1 + (ulonglong)puVar1[0x1f] * 2 + 0x88) = uVar7; puVar1[0x1f] = puVar1[0x1f] + 1; } else { if (uVar7 == (ushort)uVar10) { for (; uVar14 < local_64._1_1_ + 2; uVar14 = uVar14 + 8) { uVar12 = uVar25; if (uVar25 == 0) goto LAB_1401120f6; uVar12 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); uVar25 = uVar25 - 1; uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f)); local_58 = puVar16; } uVar14 = uVar14 - local_64._1_1_; uVar23 = uVar23 >> (local_64._1_1_ & 0x1f); if (puVar1[0x1f] == 0) { param_1[4] = (longlong)"invalid bit length repeat"; *puVar1 = 0x1b; goto LAB_1401121d1; } uVar18 = *(undefined2 *)((longlong)puVar1 + (ulonglong)(puVar1[0x1f] - 1) * 2 + 0x88); iVar22 = (uVar23 & 3) + 3; uVar14 = uVar14 - 2; uVar23 = uVar23 >> 2; } else { if (uVar7 == 0x11) { for (; uVar14 < local_64._1_1_ + 3; uVar14 = uVar14 + 8) { uVar12 = uVar25; if (uVar25 == 0) goto LAB_1401120f6; uVar12 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); uVar25 = uVar25 - 1; uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f)); local_58 = puVar16; } iVar15 = -3; uVar23 = uVar23 >> (local_64._1_1_ & 0x1f); iVar22 = (uVar23 & 7) + 3; uVar23 = uVar23 >> 3; } else { for (; uVar14 < local_64._1_1_ + 7; uVar14 = uVar14 + 8) { uVar12 = uVar25; if (uVar25 == 0) goto LAB_1401120f6; uVar12 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); uVar25 = uVar25 - 1; uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f)); local_58 = puVar16; } iVar15 = -7; uVar23 = uVar23 >> (local_64._1_1_ & 0x1f); iVar22 = (uVar23 & 0x7f) + 0xb; uVar23 = uVar23 >> 7; } uVar18 = (undefined2)uVar21; uVar14 = uVar14 + (iVar15 - (uint)local_64._1_1_); } if (puVar1[0x1e] + puVar1[0x1d] < iVar22 + puVar1[0x1f]) { param_1[4] = (longlong)"invalid bit length repeat"; *puVar1 = 0x1b; break; } for (; iVar22 != 0; iVar22 = iVar22 + -1) { *(undefined2 *)((longlong)puVar1 + (ulonglong)puVar1[0x1f] * 2 + 0x88) = uVar18; puVar1[0x1f] = puVar1[0x1f] + 1; } uVar10 = 0x10; } } while (puVar1[0x1f] < puVar1[0x1e] + puVar1[0x1d]); } uVar17 = (ulonglong)local_res20; uVar13 = (ulonglong)local_res18; uVar10 = 0x10; uVar12 = 7; } while (*puVar1 == 0x1b); *(uint **)(puVar1 + 0x20) = puVar1 + 0x152; *(uint **)(puVar1 + 0x16) = puVar1 + 0x152; puVar1[0x1a] = 9; uVar4 = FUN_140115d54(1,(ushort *)(puVar1 + 0x22),puVar1[0x1d],(longlong *)(puVar1 + 0x20), puVar1 + 0x1a,(undefined *)(puVar1 + 0xc2)); local_res8 = (int)uVar4; if (local_res8 != 0) { param_1[4] = (longlong)"invalid literal/lengths set"; *puVar1 = 0x1b; puVar16 = local_58; goto LAB_1401121cd; } *(undefined8 *)(puVar1 + 0x18) = *(undefined8 *)(puVar1 + 0x20); puVar1[0x1b] = 6; uVar4 = FUN_140115d54(2,(ushort *)((longlong)puVar1 + (ulonglong)puVar1[0x1d] * 2 + 0x88), puVar1[0x1e],(longlong *)(puVar1 + 0x20),puVar1 + 0x1b, (undefined *)(puVar1 + 0xc2)); uVar17 = (ulonglong)local_res20; uVar13 = (ulonglong)local_res18; uVar21 = 0; local_res8 = (int)uVar4; puVar19 = local_50; puVar16 = local_58; if (local_res8 != 0) { pcVar5 = "invalid distances set"; goto LAB_140112236; } *puVar1 = 0x12; uVar24 = local_res18; uVar12 = local_res20; LAB_140112aa1: if ((5 < uVar25) && (0x101 < uVar24)) { param_1[2] = (longlong)puVar19; *(uint *)(param_1 + 3) = uVar24; *param_1 = (longlong)puVar16; *(uint *)(param_1 + 1) = uVar25; puVar1[0x10] = uVar23; puVar1[0x11] = uVar14; FUN_1401158f4(param_1,uVar12); local_58 = (uint *)*param_1; local_50 = (undefined1 *)param_1[2]; local_res18 = *(uint *)(param_1 + 3); uVar25 = *(uint *)(param_1 + 1); uVar23 = puVar1[0x10]; uVar14 = puVar1[0x11]; LAB_1401123d2: uVar13 = (ulonglong)local_res18; uVar17 = (ulonglong)local_res20; goto LAB_140111c8e; } uVar9 = *(uint *)(*(longlong *)(puVar1 + 0x16) + (ulonglong)((1 << ((byte)puVar1[0x1a] & 0x1f)) - 1U & uVar23) * 4); for (; uVar14 < (uVar9 >> 8 & 0xff); uVar14 = uVar14 + 8) { uVar12 = uVar25; uVar9 = local_64; if (uVar25 == 0) goto LAB_1401120f6; uVar12 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); uVar25 = uVar25 - 1; uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f)); uVar9 = *(uint *)(*(longlong *)(puVar1 + 0x16) + (ulonglong)((1 << ((byte)puVar1[0x1a] & 0x1f)) - 1U & uVar23) * 4); local_58 = puVar16; } cVar2 = (char)uVar9; uVar12 = uVar9; if ((cVar2 != '\0') && ((uVar9 & 0xf0) == 0)) { bVar6 = (byte)(uVar9 >> 8); uVar12 = *(uint *)(*(longlong *)(puVar1 + 0x16) + (ulonglong) ((((1 << (cVar2 + bVar6 & 0x1f)) - 1U & uVar23) >> (bVar6 & 0x1f)) + (uVar9 >> 0x10)) * 4); uVar3 = (uVar12 >> 8 & 0xff) + (uVar9 >> 8 & 0xff); for (; uVar14 < uVar3; uVar14 = uVar14 + 8) { uVar12 = uVar25; if (uVar25 == 0) goto LAB_1401120f6; uVar23 = uVar23 + ((uint)(byte)*puVar16 << ((byte)uVar14 & 0x1f)); puVar16 = (uint *)((longlong)puVar16 + 1); uVar25 = uVar25 - 1; uVar12 = *(uint *)(*(longlong *)(puVar1 + 0x16) + (ulonglong) ((((1 << (cVar2 + bVar6 & 0x1f)) - 1U & uVar23) >> (bVar6 & 0x1f)) + (uVar9 >> 0x10)) * 4); uVar3 = (uVar12 >> 8 & 0xff) + (uint)bVar6; local_58 = puVar16; } uVar23 = uVar23 >> (bVar6 & 0x1f); uVar14 = uVar14 - bVar6; local_64 = uVar9; } uVar23 = uVar23 >> ((byte)(uVar12 >> 8) & 0x1f); uVar14 = uVar14 - (uVar12 >> 8 & 0xff); puVar1[0x12] = uVar12 >> 0x10; if ((char)uVar12 == '\0') { *puVar1 = 0x17; goto LAB_1401121cd; } if ((uVar12 & 0x20) != 0) { *puVar1 = 0xb; goto LAB_1401121cd; } if ((uVar12 & 0x40) != 0) { param_1[4] = (longlong)"invalid literal/length code"; *puVar1 = 0x1b; goto LAB_1401121cd; } *puVar1 = 0x13; puVar1[0x14] = uVar12 & 0xf; LAB_140112c76: uVar3 = puVar1[0x14]; if (uVar3 != 0) { if (uVar14 < uVar3) { do { uVar12 = 0; uVar9 = local_64; if (uVar25 == 0) goto LAB_1401120f6; uVar12 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); bVar6 = (byte)uVar14; uVar14 = uVar14 + 8; uVar25 = uVar25 - 1; uVar23 = uVar23 + ((uint)(byte)uVar12 << (bVar6 & 0x1f)); local_58 = puVar16; } while (uVar14 < puVar1[0x14]); } uVar12 = (1 << ((byte)uVar3 & 0x1f)) - 1U & uVar23; uVar23 = uVar23 >> ((byte)uVar3 & 0x1f); puVar1[0x12] = puVar1[0x12] + uVar12; uVar14 = uVar14 - uVar3; } *puVar1 = 0x14; LAB_140112cc4: uVar9 = *(uint *)(*(longlong *)(puVar1 + 0x18) + (ulonglong)((1 << ((byte)puVar1[0x1b] & 0x1f)) - 1U & uVar23) * 4); for (; uVar14 < (uVar9 >> 8 & 0xff); uVar14 = uVar14 + 8) { uVar12 = uVar25; uVar9 = local_64; if (uVar25 == 0) goto LAB_1401120f6; uVar12 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); uVar25 = uVar25 - 1; uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f)); uVar9 = *(uint *)(*(longlong *)(puVar1 + 0x18) + (ulonglong)((1 << ((byte)puVar1[0x1b] & 0x1f)) - 1U & uVar23) * 4); local_58 = puVar16; } uVar12 = uVar9; if ((uVar9 & 0xf0) == 0) { bVar6 = (byte)(uVar9 >> 8); uVar12 = *(uint *)(*(longlong *)(puVar1 + 0x18) + (ulonglong) ((((1 << ((char)uVar9 + bVar6 & 0x1f)) - 1U & uVar23) >> (bVar6 & 0x1f)) + (uVar9 >> 0x10)) * 4); uVar3 = (uVar12 >> 8 & 0xff) + (uVar9 >> 8 & 0xff); for (; uVar14 < uVar3; uVar14 = uVar14 + 8) { uVar12 = uVar25; if (uVar25 == 0) goto LAB_1401120f6; uVar23 = uVar23 + ((uint)(byte)*puVar16 << ((byte)uVar14 & 0x1f)); puVar16 = (uint *)((longlong)puVar16 + 1); uVar25 = uVar25 - 1; uVar12 = *(uint *)(*(longlong *)(puVar1 + 0x18) + (ulonglong) ((((1 << ((char)uVar9 + bVar6 & 0x1f)) - 1U & uVar23) >> (bVar6 & 0x1f)) + (uVar9 >> 0x10)) * 4); uVar3 = (uVar12 >> 8 & 0xff) + (uint)bVar6; local_58 = puVar16; } uVar23 = uVar23 >> (bVar6 & 0x1f); uVar14 = uVar14 - bVar6; local_64 = uVar9; } uVar17 = (ulonglong)local_res20; uVar13 = (ulonglong)local_res18; uVar23 = uVar23 >> ((byte)(uVar12 >> 8) & 0x1f); uVar14 = uVar14 - (uVar12 >> 8 & 0xff); if ((uVar12 & 0x40) != 0) { param_1[4] = (longlong)"invalid distance code"; *puVar1 = 0x1b; goto LAB_1401125a8; } *puVar1 = 0x15; puVar1[0x13] = uVar12 >> 0x10; uVar21 = 0; puVar1[0x14] = uVar12 & 0xf; puVar19 = local_50; LAB_140112e30: uVar24 = (uint)uVar13; uVar3 = puVar1[0x14]; if (uVar3 != 0) { if (uVar14 < uVar3) { do { uVar12 = 0; uVar9 = local_64; if (uVar25 == 0) goto LAB_1401120f6; uVar12 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); bVar6 = (byte)uVar14; uVar14 = uVar14 + 8; uVar25 = uVar25 - 1; uVar23 = uVar23 + ((uint)(byte)uVar12 << (bVar6 & 0x1f)); local_58 = puVar16; } while (uVar14 < puVar1[0x14]); } uVar12 = (1 << ((byte)uVar3 & 0x1f)) - 1U & uVar23; uVar23 = uVar23 >> ((byte)uVar3 & 0x1f); puVar1[0x13] = puVar1[0x13] + uVar12; uVar14 = uVar14 - uVar3; } if ((puVar1[0xc] - uVar24) + (int)uVar17 < puVar1[0x13]) { pcVar5 = "invalid distance too far back"; goto LAB_140112236; } *puVar1 = 0x16; LAB_140112e98: uVar12 = uVar25; uVar9 = local_64; if (uVar24 == 0) goto LAB_1401120f6; uVar3 = puVar1[0x13]; uVar12 = (int)uVar17 - uVar24; if (uVar12 < uVar3) { uVar3 = uVar3 - uVar12; uVar9 = puVar1[0xd]; if (uVar9 < uVar3) { uVar3 = uVar3 - uVar9; uVar9 = puVar1[0xb] - uVar3; } else { uVar9 = uVar9 - uVar3; } uVar12 = puVar1[0x12]; lVar11 = (ulonglong)uVar9 + *(longlong *)(puVar1 + 0xe); if (uVar3 <= uVar12) goto LAB_140112ee8; } else { lVar11 = (longlong)puVar19 - (ulonglong)uVar3; uVar12 = puVar1[0x12]; } uVar3 = uVar12; uVar12 = uVar3; LAB_140112ee8: if (uVar24 < uVar3) { uVar3 = uVar24; } local_res18 = uVar24 - uVar3; uVar13 = (ulonglong)local_res18; lVar11 = lVar11 - (longlong)puVar19; puVar1[0x12] = uVar12 - uVar3; do { uVar12 = uVar3; *puVar19 = puVar19[lVar11]; puVar19 = puVar19 + 1; uVar3 = uVar12 - 1; } while (uVar12 - 1 != 0); uVar10 = (ulonglong)(uVar12 + 0xf); uVar12 = uVar12 + 6; local_50 = puVar19; if (puVar1[0x12] == (uint)uVar21) { *puVar1 = 0x12; } goto LAB_140111ca0; LAB_140112f90: if (0x1f < uVar14) goto code_r0x000140112f95; uVar12 = uVar25; if (uVar25 == 0) goto LAB_1401120f6; uVar12 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); uVar25 = uVar25 - 1; uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f)); uVar14 = uVar14 + 8; local_58 = puVar16; goto LAB_140112f90; code_r0x000140112f95: uVar24 = (uint)uVar17 - uVar24; *(int *)((longlong)param_1 + 0x1c) = *(int *)((longlong)param_1 + 0x1c) + uVar24; puVar1[7] = puVar1[7] + uVar24; if (uVar24 != 0) { if (puVar1[4] == uVar20) { uVar12 = FUN_1401161bc(puVar1[6],puVar19 + -(ulonglong)uVar24,uVar24); } else { uVar12 = FUN_140116d48(puVar1[6],(uint *)(puVar19 + -(ulonglong)uVar24),uVar24); } uVar13 = (ulonglong)local_res18; uVar21 = 0; puVar1[6] = uVar12; uVar10 = 0x10; *(uint *)((longlong)param_1 + 0x4c) = uVar12; puVar19 = local_50; } local_res20 = (uint)uVar13; uVar17 = uVar13 & 0xffffffff; uVar12 = (uint)uVar21; uVar9 = ((uVar23 & 0xff00) + uVar23 * 0x10000) * 0x100 + (uVar23 >> 8 & 0xff00) + (uVar23 >> 0x18) ; if (puVar1[4] != uVar12) { uVar9 = uVar23; } uVar3 = uVar12; if (uVar9 == puVar1[6]) { LAB_140113028: uVar14 = uVar3; uVar23 = uVar12; *puVar1 = 0x19; LAB_14011302e: uVar24 = (uint)uVar21; uVar12 = uVar23; uVar3 = uVar14; if ((puVar1[2] != uVar24) && (puVar1[4] != uVar24)) { for (; uVar14 < 0x20; uVar14 = uVar14 + 8) { uVar12 = uVar25; uVar9 = local_64; if (uVar25 == 0) goto LAB_1401120f6; uVar12 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); uVar25 = uVar25 - 1; uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f)); local_58 = puVar16; } uVar12 = uVar24; uVar3 = uVar24; if (uVar23 != puVar1[7]) { pcVar5 = "incorrect length check"; goto LAB_1401122a0; } } uVar14 = uVar3; uVar23 = uVar12; *puVar1 = 0x1a; LAB_1401130d4: local_res8 = 1; uVar12 = uVar25; uVar9 = local_64; LAB_1401120f6: local_64 = uVar9; *(uint *)(param_1 + 1) = uVar12; param_1[2] = (longlong)local_50; *(uint *)(param_1 + 3) = local_res18; *param_1 = (longlong)local_58; puVar1[0x10] = uVar23; iVar22 = 0; puVar1[0x11] = uVar14; if (((puVar1[0xb] != 0) || (((int)*puVar1 < 0x18 && (local_res20 != *(uint *)(param_1 + 3))))) && (uVar4 = FUN_140111af8((longlong)param_1,local_res20), (int)uVar4 != 0)) { *puVar1 = 0x1c; return -4; } local_res20 = local_res20 - (int)param_1[3]; iVar15 = local_60 - (int)param_1[1]; *(int *)((longlong)param_1 + 0x1c) = *(int *)((longlong)param_1 + 0x1c) + local_res20; *(int *)((longlong)param_1 + 0xc) = *(int *)((longlong)param_1 + 0xc) + iVar15; puVar1[7] = puVar1[7] + local_res20; if ((puVar1[2] != 0) && (local_res20 != 0)) { if (puVar1[4] == 0) { uVar25 = FUN_1401161bc(puVar1[6],(byte *)(param_1[2] - (ulonglong)local_res20),local_res20); } else { uVar25 = FUN_140116d48(puVar1[6],(uint *)(param_1[2] - (ulonglong)local_res20),local_res20); } puVar1[6] = uVar25; *(uint *)((longlong)param_1 + 0x4c) = uVar25; } if (*puVar1 == 0xb) { iVar22 = 0x80; } *(uint *)(param_1 + 9) = (-(uint)(puVar1[1] != 0) & 0x40) + iVar22 + puVar1[0x11]; if (((iVar15 != 0) || (local_res20 != 0)) && (param_2 != 4)) { return local_res8; } if (local_res8 == 0) { return -5; } return local_res8; } pcVar5 = "incorrect data check"; goto LAB_1401122a0; LAB_140112182: uVar23 = uVar3; if (uVar8 <= uVar14) goto code_r0x000140112186; uVar12 = uVar25; if (uVar25 == 0) goto LAB_1401120f6; uVar23 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); uVar25 = uVar25 - 1; uVar3 = uVar3 + ((uint)(byte)uVar23 << ((byte)uVar14 & 0x1f)); uVar14 = uVar14 + 8; local_58 = puVar16; goto LAB_140112182; code_r0x000140112186: if (((puVar1[2] & 2) != 0) && (uVar3 == 0x8b1f)) { uVar23 = FUN_140116d48(0,(uint *)0x0,0); puVar1[6] = uVar23; local_68 = 0x8b1f; uVar23 = FUN_140116d48(puVar1[6],(uint *)&local_68,2); *puVar1 = 1; puVar1[6] = uVar23; LAB_1401121c4: uVar23 = 0; uVar14 = uVar23; LAB_1401121cd: uVar21 = 0; puVar19 = local_50; LAB_1401121d1: uVar17 = (ulonglong)local_res20; uVar13 = (ulonglong)local_res18; LAB_1401121d9: uVar10 = 0x10; goto LAB_140111c9b; } puVar1[4] = uVar20; if (*(longlong *)(puVar1 + 8) != 0) { *(undefined4 *)(*(longlong *)(puVar1 + 8) + 0x40) = 0xffffffff; } if ((puVar1[2] & 1) != 0) { uVar12 = (uVar3 & 0xff) * 0x100 + (uVar3 >> 8); if (uVar12 == (uVar12 / 0x1f) * 0x1f) { if (((byte)uVar3 & 0xf) == 8) { uVar23 = uVar3 >> 4; uVar14 = uVar14 - 4; uVar12 = (uVar23 & 0xf) + 8; if (uVar12 <= puVar1[10]) { puVar1[5] = 1 << (sbyte)uVar12; uVar23 = FUN_1401161bc(0,(byte *)0x0,0); puVar1[6] = uVar23; *(uint *)((longlong)param_1 + 0x4c) = uVar23; *puVar1 = ~(uVar3 >> 0xc) & 2 | 9; goto LAB_1401121c4; } pcVar5 = "invalid window size"; } else { pcVar5 = "unknown compression method"; } LAB_140112236: param_1[4] = (longlong)pcVar5; *puVar1 = 0x1b; goto LAB_1401121d9; } uVar10 = 0x10; } pcVar5 = "incorrect header check"; goto LAB_1401122a0; LAB_140111d2b: if (uVar8 <= uVar14) goto code_r0x000140111d2f; uVar12 = uVar25; if (uVar25 == 0) goto LAB_1401120f6; uVar12 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); uVar25 = uVar25 - 1; uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f)); uVar14 = uVar14 + 8; local_58 = puVar16; goto LAB_140111d2b; code_r0x000140111d2f: puVar1[4] = uVar23; if ((char)uVar23 == '\b') { if ((uVar23 & 0xe000) == 0) { if (*(uint **)(puVar1 + 8) != (uint *)0x0) { **(uint **)(puVar1 + 8) = uVar23 >> 8 & 1; } if ((puVar1[4] & 0x200) != 0) { local_68 = (undefined2)uVar23; uVar23 = FUN_140116d48(puVar1[6],(uint *)&local_68,2); uVar21 = 0; puVar1[6] = uVar23; } uVar23 = (uint)uVar21; *puVar1 = 2; uVar14 = uVar23; LAB_140111dcb: do { if (0x1f < uVar14) goto code_r0x000140111dd0; uVar12 = uVar25; uVar9 = local_64; if (uVar25 == 0) goto LAB_1401120f6; uVar12 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); uVar25 = uVar25 - 1; uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f)); uVar14 = uVar14 + 8; local_58 = puVar16; } while( true ); } pcVar5 = "unknown header flags set"; } else { pcVar5 = "unknown compression method"; } LAB_1401122a0: param_1[4] = (longlong)pcVar5; *puVar1 = 0x1b; goto LAB_140111c9b; code_r0x000140111dd0: if (*(longlong *)(puVar1 + 8) != 0) { *(uint *)(*(longlong *)(puVar1 + 8) + 4) = uVar23; } if ((puVar1[4] & 0x200) != 0) { local_68 = (undefined2)uVar23; local_65 = (undefined1)(uVar23 >> 0x18); local_66 = (undefined1)(uVar23 >> 0x10); uVar23 = FUN_140116d48(puVar1[6],(uint *)&local_68,4); uVar21 = 0; puVar1[6] = uVar23; } uVar23 = (uint)uVar21; *puVar1 = 3; uVar10 = 0x10; uVar14 = uVar23; LAB_140111e51: do { uVar8 = (uint)uVar10; if (uVar8 <= uVar14) break; uVar12 = uVar25; uVar9 = local_64; if (uVar25 == 0) goto LAB_1401120f6; uVar12 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); uVar25 = uVar25 - 1; uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f)); uVar14 = uVar14 + 8; local_58 = puVar16; } while( true ); if (*(longlong *)(puVar1 + 8) != 0) { *(uint *)(*(longlong *)(puVar1 + 8) + 8) = uVar23 & 0xff; *(uint *)(*(longlong *)(puVar1 + 8) + 0xc) = uVar23 >> 8; } if ((puVar1[4] & 0x200) != 0) { local_68 = (undefined2)uVar23; uVar23 = FUN_140116d48(puVar1[6],(uint *)&local_68,2); uVar21 = 0; puVar1[6] = uVar23; uVar8 = 0x10; } uVar23 = (uint)uVar21; *puVar1 = 4; uVar14 = uVar23; LAB_140111eaf: if ((puVar1[4] & 0x400) == 0) { if (*(longlong *)(puVar1 + 8) != 0) { *(ulonglong *)(*(longlong *)(puVar1 + 8) + 0x10) = uVar21; } } else { for (; uVar14 < uVar8; uVar14 = uVar14 + 8) { uVar12 = uVar25; uVar9 = local_64; if (uVar25 == 0) goto LAB_1401120f6; uVar12 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); uVar25 = uVar25 - 1; uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f)); local_58 = puVar16; } puVar1[0x12] = uVar23; if (*(longlong *)(puVar1 + 8) != 0) { *(uint *)(*(longlong *)(puVar1 + 8) + 0x18) = uVar23; } if ((puVar1[4] & 0x200) != 0) { local_68 = (undefined2)uVar23; uVar23 = FUN_140116d48(puVar1[6],(uint *)&local_68,2); uVar21 = 0; puVar1[6] = uVar23; } uVar23 = (uint)uVar21; uVar14 = uVar23; } *puVar1 = 5; LAB_140111ecf: if ((puVar1[4] & 0x400) != 0) { uVar12 = puVar1[0x12]; if (uVar25 < puVar1[0x12]) { uVar12 = uVar25; } if (uVar12 != 0) { lVar11 = *(longlong *)(puVar1 + 8); if ((lVar11 != 0) && (*(longlong *)(lVar11 + 0x10) != 0)) { uVar9 = *(int *)(lVar11 + 0x18) - puVar1[0x12]; uVar3 = uVar12; if (*(uint *)(lVar11 + 0x1c) < uVar12 + uVar9) { uVar3 = *(uint *)(lVar11 + 0x1c) - uVar9; } memcpy((void *)((ulonglong)uVar9 + *(longlong *)(lVar11 + 0x10)),puVar16,(ulonglong)uVar3); } if ((puVar1[4] & 0x200) != 0) { uVar3 = FUN_140116d48(puVar1[6],puVar16,uVar12); puVar1[6] = uVar3; } puVar1[0x12] = puVar1[0x12] - uVar12; uVar25 = uVar25 - uVar12; puVar16 = (uint *)((longlong)puVar16 + (ulonglong)uVar12); uVar21 = 0; local_58 = puVar16; } uVar12 = uVar25; uVar9 = local_64; if (puVar1[0x12] != (uint)uVar21) goto LAB_1401120f6; } puVar1[0x12] = (uint)uVar21; *puVar1 = 6; LAB_140111fdd: if ((puVar1[4] & 0x800) == 0) { if (*(longlong *)(puVar1 + 8) != 0) { *(ulonglong *)(*(longlong *)(puVar1 + 8) + 0x20) = uVar21; } } else { uVar12 = uVar25; uVar9 = local_64; if (uVar25 == 0) goto LAB_1401120f6; uVar13 = uVar21 & 0xffffffff; do { lVar11 = *(longlong *)(puVar1 + 8); bVar6 = (byte)*puVar16; uVar12 = (int)uVar13 + 1; uVar13 = (ulonglong)uVar12; puVar16 = (uint *)((longlong)puVar16 + 1); if (((lVar11 != 0) && (*(longlong *)(lVar11 + 0x20) != 0)) && (puVar1[0x12] < *(uint *)(lVar11 + 0x28))) { *(byte *)((ulonglong)puVar1[0x12] + *(longlong *)(lVar11 + 0x20)) = bVar6; puVar1[0x12] = puVar1[0x12] + 1; } } while ((bVar6 != 0) && (uVar12 < uVar25)); if ((puVar1[4] & 0x200) != 0) { uVar3 = FUN_140116d48(puVar1[6],local_58,uVar12); uVar21 = 0; puVar1[6] = uVar3; } uVar25 = uVar25 - uVar12; puVar16 = (uint *)((longlong)local_58 + uVar13); uVar12 = uVar25; uVar9 = local_64; local_58 = puVar16; if (bVar6 != 0) goto LAB_1401120f6; } puVar1[0x12] = (uint)uVar21; *puVar1 = 7; LAB_140112076: if ((puVar1[4] & 0x1000) == 0) { if (*(longlong *)(puVar1 + 8) != 0) { *(ulonglong *)(*(longlong *)(puVar1 + 8) + 0x30) = uVar21; } } else { uVar12 = uVar25; uVar9 = local_64; if (uVar25 == 0) goto LAB_1401120f6; uVar13 = uVar21 & 0xffffffff; do { lVar11 = *(longlong *)(puVar1 + 8); bVar6 = (byte)*puVar16; uVar12 = (int)uVar13 + 1; uVar13 = (ulonglong)uVar12; puVar16 = (uint *)((longlong)puVar16 + 1); if (((lVar11 != 0) && (*(longlong *)(lVar11 + 0x30) != 0)) && (puVar1[0x12] < *(uint *)(lVar11 + 0x38))) { *(byte *)((ulonglong)puVar1[0x12] + *(longlong *)(lVar11 + 0x30)) = bVar6; puVar1[0x12] = puVar1[0x12] + 1; } } while ((bVar6 != 0) && (uVar12 < uVar25)); if ((puVar1[4] & 0x200) != 0) { uVar3 = FUN_140116d48(puVar1[6],local_58,uVar12); uVar21 = 0; puVar1[6] = uVar3; } uVar25 = uVar25 - uVar12; local_58 = (uint *)((longlong)local_58 + uVar13); uVar12 = uVar25; uVar9 = local_64; if (bVar6 != 0) goto LAB_1401120f6; } uVar17 = (ulonglong)local_res20; uVar13 = (ulonglong)local_res18; *puVar1 = 8; uVar10 = 0x10; puVar19 = local_50; puVar16 = local_58; LAB_1401122da: if ((puVar1[4] & 0x200) != 0) { for (; uVar14 < (uint)uVar10; uVar14 = uVar14 + 8) { uVar12 = uVar25; uVar9 = local_64; if (uVar25 == 0) goto LAB_1401120f6; uVar12 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); uVar25 = uVar25 - 1; uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f)); local_58 = puVar16; } if (uVar23 != (ushort)puVar1[6]) { pcVar5 = "header crc mismatch"; goto LAB_1401122a0; } uVar23 = (uint)uVar21; uVar14 = uVar23; } if (*(longlong *)(puVar1 + 8) != 0) { *(uint *)(*(longlong *)(puVar1 + 8) + 0x3c) = (int)puVar1[4] >> 9 & 1; *(undefined4 *)(*(longlong *)(puVar1 + 8) + 0x40) = 1; } uVar12 = FUN_140116d48(0,(uint *)0x0,0); puVar1[6] = uVar12; *(uint *)((longlong)param_1 + 0x4c) = uVar12; *puVar1 = 0xb; LAB_1401125a8: uVar13 = (ulonglong)local_res18; uVar17 = (ulonglong)local_res20; uVar21 = 0; puVar19 = local_50; goto LAB_1401121d9; LAB_1401124be: if (2 < uVar14) goto code_r0x0001401124c3; uVar12 = uVar25; uVar9 = local_64; if (uVar25 == 0) goto LAB_1401120f6; uVar12 = *puVar16; puVar16 = (uint *)((longlong)puVar16 + 1); uVar25 = uVar25 - 1; uVar23 = uVar23 + ((uint)(byte)uVar12 << ((byte)uVar14 & 0x1f)); uVar14 = uVar14 + 8; local_58 = puVar16; goto LAB_1401124be; code_r0x0001401124c3: puVar1[1] = uVar23 & 1; uVar12 = uVar23 >> 1 & 3; if (uVar12 == 0) { *puVar1 = 0xd; } else if (uVar12 == 1) { FUN_140111ac8((longlong)puVar1); *puVar1 = 0x12; } else if (uVar12 == 2) { *puVar1 = 0xf; } else if (uVar12 == 3) { param_1[4] = (longlong)"invalid block type"; *puVar1 = 0x1b; } uVar23 = uVar23 >> 3; uVar14 = uVar14 - 3; goto LAB_140111c9b; }