
int sha3_shake_done(hash_state *md,uchar *out,ulong outlen)

{
  ulong *puVar1;
  uchar uVar2;
  ushort uVar3;
  uchar *puVar4;
  char *pcVar5;
  char *pcVar6;
  uint uVar7;
  ulong uVar8;
  
  if (outlen == 0) {
    return 0;
  }
  if (md != (hash_state *)0x0) {
    if (out != (uchar *)0x0) {
      uVar3 = (md->sha3).byte_index;
      uVar7 = (uint)(md->sha3).capacity_words;
      if ((md->sha3).xof_flag == 0) {
        *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) =
             *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) ^ (md->chc).length ^
             0x1fL << (((byte)uVar3 & 7) << 3);
        puVar1 = (ulong *)((long)md + (long)(int)(0x18 - uVar7) * 8 + 8);
        *puVar1 = *puVar1 ^ 0x8000000000000000;
        keccakf((md->whirlpool).state);
        *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];
        pcVar5 = md->dummy + 0x10;
        do {
          pcVar6 = pcVar5 + 0x40;
          *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;
          *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);
          *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);
          *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);
          *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);
          *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);
          *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);
          *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);
          pcVar5 = pcVar6;
        } while (pcVar6 != md->dummy + 0xd0);
        (md->sha3).byte_index = 0;
        uVar3 = 0;
        (md->sha3).xof_flag = 1;
        uVar7 = (uint)(md->sha3).capacity_words;
      }
      puVar4 = out;
      while( true ) {
        uVar8 = (ulong)(uint)uVar3;
        if ((int)(uint)uVar3 < (int)((0x19 - uVar7) * 8)) {
          uVar3 = uVar3 + 1;
        }
        else {
          keccakf((md->whirlpool).state);
          *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];
          pcVar5 = md->dummy + 0x10;
          do {
            pcVar6 = pcVar5 + 0x40;
            *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;
            *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);
            *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);
            *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);
            *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);
            *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);
            *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);
            *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);
            pcVar5 = pcVar6;
          } while (md->dummy + 0xd0 != pcVar6);
          uVar8 = 0;
          uVar3 = 1;
        }
        uVar2 = md->dummy[uVar8 + 0xd0];
        (md->sha3).byte_index = uVar3;
        *puVar4 = uVar2;
        if (out + outlen == puVar4 + 1) break;
        uVar3 = (md->sha3).byte_index;
        uVar7 = (uint)(md->sha3).capacity_words;
        puVar4 = puVar4 + 1;
      }
      return 0;
    }
                    /* WARNING: Subroutine does not return */
    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);
  }
                    /* WARNING: Subroutine does not return */
  crypt_argchk("md != NULL","src/hashes/sha3.c",0x103);
}



undefined8 sha3_shake_done(ulong *param_1,undefined1 *param_2,long param_3)

{
  undefined1 uVar1;
  ushort uVar2;
  ushort uVar3;
  short sVar4;
  undefined1 *puVar5;
  ulong *puVar6;
  ulong *puVar7;
  ulong uVar8;
  
  if (param_3 == 0) {
    return 0;
  }
  if (param_1 != (ulong *)0x0) {
    if (param_2 != (undefined1 *)0x0) {
      uVar3 = (ushort)param_1[0x33];
      uVar2 = *(ushort *)((long)param_1 + 0x19c);
      if (*(short *)((long)param_1 + 0x19e) == 0) {
        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =
             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^
             0x1fL << (((byte)uVar3 & 7) << 3);
        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =
             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;
        FUN_001534a0(param_1 + 1);
        param_1[0x1a] = param_1[1];
        puVar6 = param_1 + 2;
        do {
          puVar7 = puVar6 + 8;
          puVar6[0x19] = *puVar6;
          puVar6[0x1a] = puVar6[1];
          puVar6[0x1b] = puVar6[2];
          puVar6[0x1c] = puVar6[3];
          puVar6[0x1d] = puVar6[4];
          puVar6[0x1e] = puVar6[5];
          puVar6[0x1f] = puVar6[6];
          puVar6[0x20] = puVar6[7];
          puVar6 = puVar7;
        } while (puVar7 != param_1 + 0x1a);
        *(undefined2 *)(param_1 + 0x33) = 0;
        uVar3 = 0;
        *(undefined2 *)((long)param_1 + 0x19e) = 1;
        uVar2 = *(ushort *)((long)param_1 + 0x19c);
      }
      puVar5 = param_2;
      while( true ) {
        uVar8 = (ulong)uVar3;
        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {
          sVar4 = uVar3 + 1;
        }
        else {
          FUN_001534a0(param_1 + 1);
          param_1[0x1a] = param_1[1];
          puVar6 = param_1 + 2;
          do {
            puVar7 = puVar6 + 8;
            puVar6[0x19] = *puVar6;
            puVar6[0x1a] = puVar6[1];
            puVar6[0x1b] = puVar6[2];
            puVar6[0x1c] = puVar6[3];
            puVar6[0x1d] = puVar6[4];
            puVar6[0x1e] = puVar6[5];
            puVar6[0x1f] = puVar6[6];
            puVar6[0x20] = puVar6[7];
            puVar6 = puVar7;
          } while (param_1 + 0x1a != puVar7);
          uVar8 = 0;
          sVar4 = 1;
        }
        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);
        *(short *)(param_1 + 0x33) = sVar4;
        *puVar5 = uVar1;
        if (param_2 + param_3 == puVar5 + 1) break;
        uVar3 = (ushort)param_1[0x33];
        uVar2 = *(ushort *)((long)param_1 + 0x19c);
        puVar5 = puVar5 + 1;
      }
      return 0;
    }
                    /* WARNING: Subroutine does not return */
    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);
  }
                    /* WARNING: Subroutine does not return */
  crypt_argchk("md != NULL","src/hashes/sha3.c",0x103);
}


TEST RDX,RDX
JZ 0x00154540
PUSH R14
PUSH R13
PUSH R12
MOV R12,RDX
PUSH RBP
MOV RBP,RSI
PUSH RBX
MOV RBX,RDI
TEST RDI,RDI
JZ 0x0015455b
TEST RSI,RSI
JZ 0x00154543
CMP word ptr [RDI + 0x19e],0x0
MOVZX ECX,word ptr [RDI + 0x198]
MOVZX R9D,word ptr [RDI + 0x19c]
JZ 0x00154460
ADD R12,RBP
MOV R13D,0x19
JMP 0x001543ab
ADD ECX,0x1
MOVZX ESI,byte ptr [RBX + R11*0x1 + 0xd0]
MOV word ptr [RBX + 0x198],CX
ADD RBP,0x1
MOV byte ptr [RBP + -0x1],SIL
CMP R12,RBP
JZ 0x00154450
MOVZX ECX,word ptr [RBX + 0x198]
MOVZX R9D,word ptr [RBX + 0x19c]
MOV R10D,R13D
MOVZX R11D,CX
SUB R10D,R9D
SHL R10D,0x3
CMP R11D,R10D
JL 0x00154378
LEA RDI,[RBX + 0x8]
CALL 0x001534a0
MOV R14,qword ptr [RBX + 0x8]
LEA R11,[RBX + 0xd0]
LEA RSI,[RBX + 0x10]
MOV qword ptr [RBX + 0xd0],R14
MOV R8,qword ptr [RSI]
MOV RDX,qword ptr [RSI + 0x8]
ADD RSI,0x40
MOV RAX,qword ptr [RSI + -0x30]
MOV RCX,qword ptr [RSI + -0x28]
MOV R9,qword ptr [RSI + -0x20]
MOV R10,qword ptr [RSI + -0x18]
MOV qword ptr [RSI + 0x88],R8
MOV RDI,qword ptr [RSI + -0x10]
MOV R14,qword ptr [RSI + -0x8]
MOV qword ptr [RSI + 0x90],RDX
MOV qword ptr [RSI + 0x98],RAX
MOV qword ptr [RSI + 0xa0],RCX
MOV qword ptr [RSI + 0xa8],R9
MOV qword ptr [RSI + 0xb0],R10
MOV qword ptr [RSI + 0xb8],RDI
MOV qword ptr [RSI + 0xc0],R14
CMP R11,RSI
JNZ 0x001543dd
XOR R11D,R11D
MOV ECX,0x1
JMP 0x0015437b
POP RBX
XOR EAX,EAX
POP RBP
POP R12
POP R13
POP R14
RET
MOVZX EAX,word ptr [RDI + 0x19a]
SHL ECX,0x3
MOV EDX,0x1f
SHL RDX,CL
LEA RSI,[RDI + RAX*0x8]
MOV EAX,0x18
MOV R8,qword ptr [RSI + 0x8]
XOR R8,qword ptr [RDI]
SUB EAX,R9D
XOR R8,RDX
CDQE
MOV qword ptr [RSI + 0x8],R8
BTC qword ptr [RDI + RAX*0x8 + 0x8],0x3f
LEA RDI,[RDI + 0x8]
CALL 0x001534a0
MOV R9,qword ptr [RBX + 0x8]
LEA RCX,[RBX + 0xd0]
LEA R10,[RBX + 0x10]
MOV qword ptr [RBX + 0xd0],R9
MOV R11,qword ptr [R10]
MOV R13,qword ptr [R10 + 0x8]
ADD R10,0x40
MOV R14,qword ptr [R10 + -0x30]
MOV RSI,qword ptr [R10 + -0x28]
MOV R8,qword ptr [R10 + -0x20]
MOV RDX,qword ptr [R10 + -0x18]
MOV qword ptr [R10 + 0x88],R11
MOV RAX,qword ptr [R10 + -0x10]
MOV RDI,qword ptr [R10 + -0x8]
MOV qword ptr [R10 + 0x90],R13
MOV qword ptr [R10 + 0x98],R14
MOV qword ptr [R10 + 0xa0],RSI
MOV qword ptr [R10 + 0xa8],R8
MOV qword ptr [R10 + 0xb0],RDX
MOV qword ptr [R10 + 0xb8],RAX
MOV qword ptr [R10 + 0xc0],RDI
CMP R10,RCX
JNZ 0x001544b4
XOR ECX,ECX
MOV R9D,0x1
MOV word ptr [RBX + 0x198],CX
XOR ECX,ECX
MOV word ptr [RBX + 0x19e],R9W
MOVZX R9D,word ptr [RBX + 0x19c]
JMP 0x00154369
XOR EAX,EAX
RET
MOV EDX,0x104
LEA RSI,[0x1aefa6]
LEA RDI,[0x1a87a1]
CALL 0x00114270
MOV EDX,0x103
LEA RSI,[0x1aefa6]
LEA RDI,[0x1ae595]
CALL 0x00114270
(translation_unit "undefined8 sha3_shake_done(ulong *param_1,undefined1 *param_2,long param_3)\n\n{\n  undefined1 uVar1;\n  ushort uVar2;\n  ushort uVar3;\n  short sVar4;\n  undefined1 *puVar5;\n  ulong *puVar6;\n  ulong *puVar7;\n  ulong uVar8;\n  \n  if (param_3 == 0) {\n    return 0;\n  }\n  if (param_1 != (ulong *)0x0) {\n    if (param_2 != (undefined1 *)0x0) {\n      uVar3 = (ushort)param_1[0x33];\n      uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }\n      puVar5 = param_2;\n      while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("md != NULL","src/hashes/sha3.c",0x103);\n}\n\n" (function_definition "undefined8 sha3_shake_done(ulong *param_1,undefined1 *param_2,long param_3)\n\n{\n  undefined1 uVar1;\n  ushort uVar2;\n  ushort uVar3;\n  short sVar4;\n  undefined1 *puVar5;\n  ulong *puVar6;\n  ulong *puVar7;\n  ulong uVar8;\n  \n  if (param_3 == 0) {\n    return 0;\n  }\n  if (param_1 != (ulong *)0x0) {\n    if (param_2 != (undefined1 *)0x0) {\n      uVar3 = (ushort)param_1[0x33];\n      uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }\n      puVar5 = param_2;\n      while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("md != NULL","src/hashes/sha3.c",0x103);\n}" type_identifier (function_declarator "sha3_shake_done(ulong *param_1,undefined1 *param_2,long param_3)" identifier (parameter_list "(ulong *param_1,undefined1 *param_2,long param_3)" ( (parameter_declaration "ulong *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined1 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  undefined1 uVar1;\n  ushort uVar2;\n  ushort uVar3;\n  short sVar4;\n  undefined1 *puVar5;\n  ulong *puVar6;\n  ulong *puVar7;\n  ulong uVar8;\n  \n  if (param_3 == 0) {\n    return 0;\n  }\n  if (param_1 != (ulong *)0x0) {\n    if (param_2 != (undefined1 *)0x0) {\n      uVar3 = (ushort)param_1[0x33];\n      uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }\n      puVar5 = param_2;\n      while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("md != NULL","src/hashes/sha3.c",0x103);\n}" { (declaration "undefined1 uVar1;" type_identifier identifier ;) (declaration "ushort uVar2;" type_identifier identifier ;) (declaration "ushort uVar3;" type_identifier identifier ;) (declaration "short sVar4;" (sized_type_specifier "short" short) identifier ;) (declaration "undefined1 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "ulong *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "ulong *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "ulong uVar8;" type_identifier identifier ;) (if_statement "if (param_3 == 0) {\n    return 0;\n  }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (param_1 != (ulong *)0x0) {\n    if (param_2 != (undefined1 *)0x0) {\n      uVar3 = (ushort)param_1[0x33];\n      uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }\n      puVar5 = param_2;\n      while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);\n  }" if (parenthesized_expression "(param_1 != (ulong *)0x0)" ( (binary_expression "param_1 != (ulong *)0x0" identifier != (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (param_2 != (undefined1 *)0x0) {\n      uVar3 = (ushort)param_1[0x33];\n      uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }\n      puVar5 = param_2;\n      while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);\n  }" { (if_statement "if (param_2 != (undefined1 *)0x0) {\n      uVar3 = (ushort)param_1[0x33];\n      uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }\n      puVar5 = param_2;\n      while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }\n      return 0;\n    }" if (parenthesized_expression "(param_2 != (undefined1 *)0x0)" ( (binary_expression "param_2 != (undefined1 *)0x0" identifier != (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      uVar3 = (ushort)param_1[0x33];\n      uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }\n      puVar5 = param_2;\n      while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }\n      return 0;\n    }" { (expression_statement "uVar3 = (ushort)param_1[0x33];" (assignment_expression "uVar3 = (ushort)param_1[0x33]" identifier = (cast_expression "(ushort)param_1[0x33]" ( (type_descriptor "ushort" type_identifier) ) (subscript_expression "param_1[0x33]" identifier [ number_literal ]))) ;) (expression_statement "uVar2 = *(ushort *)((long)param_1 + 0x19c);" (assignment_expression "uVar2 = *(ushort *)((long)param_1 + 0x19c)" identifier = (pointer_expression "*(ushort *)((long)param_1 + 0x19c)" * (cast_expression "(ushort *)((long)param_1 + 0x19c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x19c)" ( (binary_expression "(long)param_1 + 0x19c" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (if_statement "if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }" if (parenthesized_expression "(*(short *)((long)param_1 + 0x19e) == 0)" ( (binary_expression "*(short *)((long)param_1 + 0x19e) == 0" (pointer_expression "*(short *)((long)param_1 + 0x19e)" * (cast_expression "(short *)((long)param_1 + 0x19e)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x19e)" ( (binary_expression "(long)param_1 + 0x19e" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) == number_literal) )) (compound_statement "{\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }" { (expression_statement "param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);" (assignment_expression "param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3)" (subscript_expression "param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1]" identifier [ (binary_expression "(ulong)*(ushort *)((long)param_1 + 0x19a) + 1" (binary_expression "(ulong)*(ushort *)((long)param_1 + 0x19a)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(ushort *)((long)param_1 + 0x19a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x19a)" ( (binary_expression "(long)param_1 + 0x19a" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) + number_literal) ]) = (binary_expression "param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3)" (binary_expression "param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1" (subscript_expression "param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1]" identifier [ (binary_expression "(ulong)*(ushort *)((long)param_1 + 0x19a) + 1" (binary_expression "(ulong)*(ushort *)((long)param_1 + 0x19a)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(ushort *)((long)param_1 + 0x19a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x19a)" ( (binary_expression "(long)param_1 + 0x19a" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) + number_literal) ]) ^ (pointer_expression "*param_1" * identifier)) ^ (binary_expression "0x1fL << (((byte)uVar3 & 7) << 3)" number_literal << (parenthesized_expression "(((byte)uVar3 & 7) << 3)" ( (binary_expression "((byte)uVar3 & 7) << 3" (parenthesized_expression "((byte)uVar3 & 7)" ( (binary_expression "(byte)uVar3 & 7" (cast_expression "(byte)uVar3" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )) << number_literal) ))))) ;) (expression_statement "param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;" (assignment_expression "param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000" (subscript_expression "param_1[(long)(int)(0x18 - (uint)uVar2) + 1]" identifier [ (binary_expression "(long)(int)(0x18 - (uint)uVar2) + 1" (cast_expression "(long)(int)(0x18 - (uint)uVar2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)(0x18 - (uint)uVar2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x18 - (uint)uVar2)" ( (binary_expression "0x18 - (uint)uVar2" number_literal - (cast_expression "(uint)uVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) )))) + number_literal) ]) = (binary_expression "param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000" (subscript_expression "param_1[(long)(int)(0x18 - (uint)uVar2) + 1]" identifier [ (binary_expression "(long)(int)(0x18 - (uint)uVar2) + 1" (cast_expression "(long)(int)(0x18 - (uint)uVar2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)(0x18 - (uint)uVar2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x18 - (uint)uVar2)" ( (binary_expression "0x18 - (uint)uVar2" number_literal - (cast_expression "(uint)uVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) )))) + number_literal) ]) ^ number_literal)) ;) (expression_statement "FUN_001534a0(param_1 + 1);" (call_expression "FUN_001534a0(param_1 + 1)" identifier (argument_list "(param_1 + 1)" ( (binary_expression "param_1 + 1" identifier + number_literal) ))) ;) (expression_statement "param_1[0x1a] = param_1[1];" (assignment_expression "param_1[0x1a] = param_1[1]" (subscript_expression "param_1[0x1a]" identifier [ number_literal ]) = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (expression_statement "puVar6 = param_1 + 2;" (assignment_expression "puVar6 = param_1 + 2" identifier = (binary_expression "param_1 + 2" identifier + number_literal)) ;) (do_statement "do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);" do (compound_statement "{\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        }" { (expression_statement "puVar7 = puVar6 + 8;" (assignment_expression "puVar7 = puVar6 + 8" identifier = (binary_expression "puVar6 + 8" identifier + number_literal)) ;) (expression_statement "puVar6[0x19] = *puVar6;" (assignment_expression "puVar6[0x19] = *puVar6" (subscript_expression "puVar6[0x19]" identifier [ number_literal ]) = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "puVar6[0x1a] = puVar6[1];" (assignment_expression "puVar6[0x1a] = puVar6[1]" (subscript_expression "puVar6[0x1a]" identifier [ number_literal ]) = (subscript_expression "puVar6[1]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x1b] = puVar6[2];" (assignment_expression "puVar6[0x1b] = puVar6[2]" (subscript_expression "puVar6[0x1b]" identifier [ number_literal ]) = (subscript_expression "puVar6[2]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x1c] = puVar6[3];" (assignment_expression "puVar6[0x1c] = puVar6[3]" (subscript_expression "puVar6[0x1c]" identifier [ number_literal ]) = (subscript_expression "puVar6[3]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x1d] = puVar6[4];" (assignment_expression "puVar6[0x1d] = puVar6[4]" (subscript_expression "puVar6[0x1d]" identifier [ number_literal ]) = (subscript_expression "puVar6[4]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x1e] = puVar6[5];" (assignment_expression "puVar6[0x1e] = puVar6[5]" (subscript_expression "puVar6[0x1e]" identifier [ number_literal ]) = (subscript_expression "puVar6[5]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x1f] = puVar6[6];" (assignment_expression "puVar6[0x1f] = puVar6[6]" (subscript_expression "puVar6[0x1f]" identifier [ number_literal ]) = (subscript_expression "puVar6[6]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x20] = puVar6[7];" (assignment_expression "puVar6[0x20] = puVar6[7]" (subscript_expression "puVar6[0x20]" identifier [ number_literal ]) = (subscript_expression "puVar6[7]" identifier [ number_literal ])) ;) (expression_statement "puVar6 = puVar7;" (assignment_expression "puVar6 = puVar7" identifier = identifier) ;) }) while (parenthesized_expression "(puVar7 != param_1 + 0x1a)" ( (binary_expression "puVar7 != param_1 + 0x1a" identifier != (binary_expression "param_1 + 0x1a" identifier + number_literal)) )) ;) (expression_statement "*(undefined2 *)(param_1 + 0x33) = 0;" (assignment_expression "*(undefined2 *)(param_1 + 0x33) = 0" (pointer_expression "*(undefined2 *)(param_1 + 0x33)" * (cast_expression "(undefined2 *)(param_1 + 0x33)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x33)" ( (binary_expression "param_1 + 0x33" identifier + number_literal) )))) = number_literal) ;) (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (expression_statement "*(undefined2 *)((long)param_1 + 0x19e) = 1;" (assignment_expression "*(undefined2 *)((long)param_1 + 0x19e) = 1" (pointer_expression "*(undefined2 *)((long)param_1 + 0x19e)" * (cast_expression "(undefined2 *)((long)param_1 + 0x19e)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x19e)" ( (binary_expression "(long)param_1 + 0x19e" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "uVar2 = *(ushort *)((long)param_1 + 0x19c);" (assignment_expression "uVar2 = *(ushort *)((long)param_1 + 0x19c)" identifier = (pointer_expression "*(ushort *)((long)param_1 + 0x19c)" * (cast_expression "(ushort *)((long)param_1 + 0x19c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x19c)" ( (binary_expression "(long)param_1 + 0x19c" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) })) (expression_statement "puVar5 = param_2;" (assignment_expression "puVar5 = param_2" identifier = identifier) ;) (while_statement "while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }" { (expression_statement "uVar8 = (ulong)uVar3;" (assignment_expression "uVar8 = (ulong)uVar3" identifier = (cast_expression "(ulong)uVar3" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }" if (parenthesized_expression "((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8))" ( (binary_expression "(int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)" (cast_expression "(int)(uint)uVar3" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)uVar3" ( (type_descriptor "uint" type_identifier) ) identifier)) < (cast_expression "(int)((0x19 - (uint)uVar2) * 8)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((0x19 - (uint)uVar2) * 8)" ( (binary_expression "(0x19 - (uint)uVar2) * 8" (parenthesized_expression "(0x19 - (uint)uVar2)" ( (binary_expression "0x19 - (uint)uVar2" number_literal - (cast_expression "(uint)uVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) )) * number_literal) )))) )) (compound_statement "{\n          sVar4 = uVar3 + 1;\n        }" { (expression_statement "sVar4 = uVar3 + 1;" (assignment_expression "sVar4 = uVar3 + 1" identifier = (binary_expression "uVar3 + 1" identifier + number_literal)) ;) }) (else_clause "else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }" else (compound_statement "{\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }" { (expression_statement "FUN_001534a0(param_1 + 1);" (call_expression "FUN_001534a0(param_1 + 1)" identifier (argument_list "(param_1 + 1)" ( (binary_expression "param_1 + 1" identifier + number_literal) ))) ;) (expression_statement "param_1[0x1a] = param_1[1];" (assignment_expression "param_1[0x1a] = param_1[1]" (subscript_expression "param_1[0x1a]" identifier [ number_literal ]) = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (expression_statement "puVar6 = param_1 + 2;" (assignment_expression "puVar6 = param_1 + 2" identifier = (binary_expression "param_1 + 2" identifier + number_literal)) ;) (do_statement "do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);" do (compound_statement "{\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          }" { (expression_statement "puVar7 = puVar6 + 8;" (assignment_expression "puVar7 = puVar6 + 8" identifier = (binary_expression "puVar6 + 8" identifier + number_literal)) ;) (expression_statement "puVar6[0x19] = *puVar6;" (assignment_expression "puVar6[0x19] = *puVar6" (subscript_expression "puVar6[0x19]" identifier [ number_literal ]) = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "puVar6[0x1a] = puVar6[1];" (assignment_expression "puVar6[0x1a] = puVar6[1]" (subscript_expression "puVar6[0x1a]" identifier [ number_literal ]) = (subscript_expression "puVar6[1]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x1b] = puVar6[2];" (assignment_expression "puVar6[0x1b] = puVar6[2]" (subscript_expression "puVar6[0x1b]" identifier [ number_literal ]) = (subscript_expression "puVar6[2]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x1c] = puVar6[3];" (assignment_expression "puVar6[0x1c] = puVar6[3]" (subscript_expression "puVar6[0x1c]" identifier [ number_literal ]) = (subscript_expression "puVar6[3]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x1d] = puVar6[4];" (assignment_expression "puVar6[0x1d] = puVar6[4]" (subscript_expression "puVar6[0x1d]" identifier [ number_literal ]) = (subscript_expression "puVar6[4]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x1e] = puVar6[5];" (assignment_expression "puVar6[0x1e] = puVar6[5]" (subscript_expression "puVar6[0x1e]" identifier [ number_literal ]) = (subscript_expression "puVar6[5]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x1f] = puVar6[6];" (assignment_expression "puVar6[0x1f] = puVar6[6]" (subscript_expression "puVar6[0x1f]" identifier [ number_literal ]) = (subscript_expression "puVar6[6]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x20] = puVar6[7];" (assignment_expression "puVar6[0x20] = puVar6[7]" (subscript_expression "puVar6[0x20]" identifier [ number_literal ]) = (subscript_expression "puVar6[7]" identifier [ number_literal ])) ;) (expression_statement "puVar6 = puVar7;" (assignment_expression "puVar6 = puVar7" identifier = identifier) ;) }) while (parenthesized_expression "(param_1 + 0x1a != puVar7)" ( (binary_expression "param_1 + 0x1a != puVar7" (binary_expression "param_1 + 0x1a" identifier + number_literal) != identifier) )) ;) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (expression_statement "sVar4 = 1;" (assignment_expression "sVar4 = 1" identifier = number_literal) ;) }))) (expression_statement "uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);" (assignment_expression "uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0)" identifier = (pointer_expression "*(undefined1 *)((long)param_1 + uVar8 + 0xd0)" * (cast_expression "(undefined1 *)((long)param_1 + uVar8 + 0xd0)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + uVar8 + 0xd0)" ( (binary_expression "(long)param_1 + uVar8 + 0xd0" (binary_expression "(long)param_1 + uVar8" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) ))))) ;) (expression_statement "*(short *)(param_1 + 0x33) = sVar4;" (assignment_expression "*(short *)(param_1 + 0x33) = sVar4" (pointer_expression "*(short *)(param_1 + 0x33)" * (cast_expression "(short *)(param_1 + 0x33)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x33)" ( (binary_expression "param_1 + 0x33" identifier + number_literal) )))) = identifier) ;) (expression_statement "*puVar5 = uVar1;" (assignment_expression "*puVar5 = uVar1" (pointer_expression "*puVar5" * identifier) = identifier) ;) (if_statement "if (param_2 + param_3 == puVar5 + 1) break;" if (parenthesized_expression "(param_2 + param_3 == puVar5 + 1)" ( (binary_expression "param_2 + param_3 == puVar5 + 1" (binary_expression "param_2 + param_3" identifier + identifier) == (binary_expression "puVar5 + 1" identifier + number_literal)) )) (break_statement "break;" break ;)) (expression_statement "uVar3 = (ushort)param_1[0x33];" (assignment_expression "uVar3 = (ushort)param_1[0x33]" identifier = (cast_expression "(ushort)param_1[0x33]" ( (type_descriptor "ushort" type_identifier) ) (subscript_expression "param_1[0x33]" identifier [ number_literal ]))) ;) (expression_statement "uVar2 = *(ushort *)((long)param_1 + 0x19c);" (assignment_expression "uVar2 = *(ushort *)((long)param_1 + 0x19c)" identifier = (pointer_expression "*(ushort *)((long)param_1 + 0x19c)" * (cast_expression "(ushort *)((long)param_1 + 0x19c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x19c)" ( (binary_expression "(long)param_1 + 0x19c" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) })) (return_statement "return 0;" return number_literal ;) })) comment (expression_statement "crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);" (call_expression "crypt_argchk("out != NULL","src/hashes/sha3.c",0x104)" identifier (argument_list "("out != NULL","src/hashes/sha3.c",0x104)" ( (string_literal ""out != NULL"" " string_content ") , (string_literal ""src/hashes/sha3.c"" " string_content ") , number_literal ))) ;) })) comment (expression_statement "crypt_argchk("md != NULL","src/hashes/sha3.c",0x103);" (call_expression "crypt_argchk("md != NULL","src/hashes/sha3.c",0x103)" identifier (argument_list "("md != NULL","src/hashes/sha3.c",0x103)" ( (string_literal ""md != NULL"" " string_content ") , (string_literal ""src/hashes/sha3.c"" " string_content ") , number_literal ))) ;) })))
(translation_unit "int sha3_shake_done(hash_state *md,uchar *out,ulong outlen)\n\n{\n  ulong *puVar1;\n  uchar uVar2;\n  ushort uVar3;\n  uchar *puVar4;\n  char *pcVar5;\n  char *pcVar6;\n  uint uVar7;\n  ulong uVar8;\n  \n  if (outlen == 0) {\n    return 0;\n  }\n  if (md != (hash_state *)0x0) {\n    if (out != (uchar *)0x0) {\n      uVar3 = (md->sha3).byte_index;\n      uVar7 = (uint)(md->sha3).capacity_words;\n      if ((md->sha3).xof_flag == 0) {\n        *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) =\n             *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) ^ (md->chc).length ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        puVar1 = (ulong *)((long)md + (long)(int)(0x18 - uVar7) * 8 + 8);\n        *puVar1 = *puVar1 ^ 0x8000000000000000;\n        keccakf((md->whirlpool).state);\n        *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n        pcVar5 = md->dummy + 0x10;\n        do {\n          pcVar6 = pcVar5 + 0x40;\n          *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n          *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n          *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n          *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n          *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n          *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n          *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n          *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n          pcVar5 = pcVar6;\n        } while (pcVar6 != md->dummy + 0xd0);\n        (md->sha3).byte_index = 0;\n        uVar3 = 0;\n        (md->sha3).xof_flag = 1;\n        uVar7 = (uint)(md->sha3).capacity_words;\n      }\n      puVar4 = out;\n      while( true ) {\n        uVar8 = (ulong)(uint)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - uVar7) * 8)) {\n          uVar3 = uVar3 + 1;\n        }\n        else {\n          keccakf((md->whirlpool).state);\n          *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n          pcVar5 = md->dummy + 0x10;\n          do {\n            pcVar6 = pcVar5 + 0x40;\n            *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n            *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n            *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n            *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n            *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n            *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n            *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n            *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n            pcVar5 = pcVar6;\n          } while (md->dummy + 0xd0 != pcVar6);\n          uVar8 = 0;\n          uVar3 = 1;\n        }\n        uVar2 = md->dummy[uVar8 + 0xd0];\n        (md->sha3).byte_index = uVar3;\n        *puVar4 = uVar2;\n        if (out + outlen == puVar4 + 1) break;\n        uVar3 = (md->sha3).byte_index;\n        uVar7 = (uint)(md->sha3).capacity_words;\n        puVar4 = puVar4 + 1;\n      }\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("md != NULL","src/hashes/sha3.c",0x103);\n}\n\n" (function_definition "int sha3_shake_done(hash_state *md,uchar *out,ulong outlen)\n\n{\n  ulong *puVar1;\n  uchar uVar2;\n  ushort uVar3;\n  uchar *puVar4;\n  char *pcVar5;\n  char *pcVar6;\n  uint uVar7;\n  ulong uVar8;\n  \n  if (outlen == 0) {\n    return 0;\n  }\n  if (md != (hash_state *)0x0) {\n    if (out != (uchar *)0x0) {\n      uVar3 = (md->sha3).byte_index;\n      uVar7 = (uint)(md->sha3).capacity_words;\n      if ((md->sha3).xof_flag == 0) {\n        *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) =\n             *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) ^ (md->chc).length ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        puVar1 = (ulong *)((long)md + (long)(int)(0x18 - uVar7) * 8 + 8);\n        *puVar1 = *puVar1 ^ 0x8000000000000000;\n        keccakf((md->whirlpool).state);\n        *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n        pcVar5 = md->dummy + 0x10;\n        do {\n          pcVar6 = pcVar5 + 0x40;\n          *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n          *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n          *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n          *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n          *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n          *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n          *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n          *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n          pcVar5 = pcVar6;\n        } while (pcVar6 != md->dummy + 0xd0);\n        (md->sha3).byte_index = 0;\n        uVar3 = 0;\n        (md->sha3).xof_flag = 1;\n        uVar7 = (uint)(md->sha3).capacity_words;\n      }\n      puVar4 = out;\n      while( true ) {\n        uVar8 = (ulong)(uint)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - uVar7) * 8)) {\n          uVar3 = uVar3 + 1;\n        }\n        else {\n          keccakf((md->whirlpool).state);\n          *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n          pcVar5 = md->dummy + 0x10;\n          do {\n            pcVar6 = pcVar5 + 0x40;\n            *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n            *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n            *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n            *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n            *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n            *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n            *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n            *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n            pcVar5 = pcVar6;\n          } while (md->dummy + 0xd0 != pcVar6);\n          uVar8 = 0;\n          uVar3 = 1;\n        }\n        uVar2 = md->dummy[uVar8 + 0xd0];\n        (md->sha3).byte_index = uVar3;\n        *puVar4 = uVar2;\n        if (out + outlen == puVar4 + 1) break;\n        uVar3 = (md->sha3).byte_index;\n        uVar7 = (uint)(md->sha3).capacity_words;\n        puVar4 = puVar4 + 1;\n      }\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("md != NULL","src/hashes/sha3.c",0x103);\n}" primitive_type (function_declarator "sha3_shake_done(hash_state *md,uchar *out,ulong outlen)" identifier (parameter_list "(hash_state *md,uchar *out,ulong outlen)" ( (parameter_declaration "hash_state *md" type_identifier (pointer_declarator "*md" * identifier)) , (parameter_declaration "uchar *out" type_identifier (pointer_declarator "*out" * identifier)) , (parameter_declaration "ulong outlen" type_identifier identifier) ))) (compound_statement "{\n  ulong *puVar1;\n  uchar uVar2;\n  ushort uVar3;\n  uchar *puVar4;\n  char *pcVar5;\n  char *pcVar6;\n  uint uVar7;\n  ulong uVar8;\n  \n  if (outlen == 0) {\n    return 0;\n  }\n  if (md != (hash_state *)0x0) {\n    if (out != (uchar *)0x0) {\n      uVar3 = (md->sha3).byte_index;\n      uVar7 = (uint)(md->sha3).capacity_words;\n      if ((md->sha3).xof_flag == 0) {\n        *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) =\n             *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) ^ (md->chc).length ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        puVar1 = (ulong *)((long)md + (long)(int)(0x18 - uVar7) * 8 + 8);\n        *puVar1 = *puVar1 ^ 0x8000000000000000;\n        keccakf((md->whirlpool).state);\n        *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n        pcVar5 = md->dummy + 0x10;\n        do {\n          pcVar6 = pcVar5 + 0x40;\n          *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n          *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n          *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n          *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n          *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n          *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n          *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n          *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n          pcVar5 = pcVar6;\n        } while (pcVar6 != md->dummy + 0xd0);\n        (md->sha3).byte_index = 0;\n        uVar3 = 0;\n        (md->sha3).xof_flag = 1;\n        uVar7 = (uint)(md->sha3).capacity_words;\n      }\n      puVar4 = out;\n      while( true ) {\n        uVar8 = (ulong)(uint)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - uVar7) * 8)) {\n          uVar3 = uVar3 + 1;\n        }\n        else {\n          keccakf((md->whirlpool).state);\n          *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n          pcVar5 = md->dummy + 0x10;\n          do {\n            pcVar6 = pcVar5 + 0x40;\n            *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n            *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n            *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n            *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n            *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n            *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n            *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n            *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n            pcVar5 = pcVar6;\n          } while (md->dummy + 0xd0 != pcVar6);\n          uVar8 = 0;\n          uVar3 = 1;\n        }\n        uVar2 = md->dummy[uVar8 + 0xd0];\n        (md->sha3).byte_index = uVar3;\n        *puVar4 = uVar2;\n        if (out + outlen == puVar4 + 1) break;\n        uVar3 = (md->sha3).byte_index;\n        uVar7 = (uint)(md->sha3).capacity_words;\n        puVar4 = puVar4 + 1;\n      }\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);\n  }\n                    /* WARNING: Subroutine does not return */\n  crypt_argchk("md != NULL","src/hashes/sha3.c",0x103);\n}" { (declaration "ulong *puVar1;" type_identifier (pointer_declarator "*puVar1" * identifier) ;) (declaration "uchar uVar2;" type_identifier identifier ;) (declaration "ushort uVar3;" type_identifier identifier ;) (declaration "uchar *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "char *pcVar5;" primitive_type (pointer_declarator "*pcVar5" * identifier) ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "ulong uVar8;" type_identifier identifier ;) (if_statement "if (outlen == 0) {\n    return 0;\n  }" if (parenthesized_expression "(outlen == 0)" ( (binary_expression "outlen == 0" identifier == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (md != (hash_state *)0x0) {\n    if (out != (uchar *)0x0) {\n      uVar3 = (md->sha3).byte_index;\n      uVar7 = (uint)(md->sha3).capacity_words;\n      if ((md->sha3).xof_flag == 0) {\n        *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) =\n             *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) ^ (md->chc).length ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        puVar1 = (ulong *)((long)md + (long)(int)(0x18 - uVar7) * 8 + 8);\n        *puVar1 = *puVar1 ^ 0x8000000000000000;\n        keccakf((md->whirlpool).state);\n        *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n        pcVar5 = md->dummy + 0x10;\n        do {\n          pcVar6 = pcVar5 + 0x40;\n          *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n          *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n          *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n          *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n          *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n          *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n          *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n          *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n          pcVar5 = pcVar6;\n        } while (pcVar6 != md->dummy + 0xd0);\n        (md->sha3).byte_index = 0;\n        uVar3 = 0;\n        (md->sha3).xof_flag = 1;\n        uVar7 = (uint)(md->sha3).capacity_words;\n      }\n      puVar4 = out;\n      while( true ) {\n        uVar8 = (ulong)(uint)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - uVar7) * 8)) {\n          uVar3 = uVar3 + 1;\n        }\n        else {\n          keccakf((md->whirlpool).state);\n          *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n          pcVar5 = md->dummy + 0x10;\n          do {\n            pcVar6 = pcVar5 + 0x40;\n            *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n            *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n            *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n            *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n            *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n            *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n            *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n            *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n            pcVar5 = pcVar6;\n          } while (md->dummy + 0xd0 != pcVar6);\n          uVar8 = 0;\n          uVar3 = 1;\n        }\n        uVar2 = md->dummy[uVar8 + 0xd0];\n        (md->sha3).byte_index = uVar3;\n        *puVar4 = uVar2;\n        if (out + outlen == puVar4 + 1) break;\n        uVar3 = (md->sha3).byte_index;\n        uVar7 = (uint)(md->sha3).capacity_words;\n        puVar4 = puVar4 + 1;\n      }\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);\n  }" if (parenthesized_expression "(md != (hash_state *)0x0)" ( (binary_expression "md != (hash_state *)0x0" identifier != (cast_expression "(hash_state *)0x0" ( (type_descriptor "hash_state *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (out != (uchar *)0x0) {\n      uVar3 = (md->sha3).byte_index;\n      uVar7 = (uint)(md->sha3).capacity_words;\n      if ((md->sha3).xof_flag == 0) {\n        *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) =\n             *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) ^ (md->chc).length ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        puVar1 = (ulong *)((long)md + (long)(int)(0x18 - uVar7) * 8 + 8);\n        *puVar1 = *puVar1 ^ 0x8000000000000000;\n        keccakf((md->whirlpool).state);\n        *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n        pcVar5 = md->dummy + 0x10;\n        do {\n          pcVar6 = pcVar5 + 0x40;\n          *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n          *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n          *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n          *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n          *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n          *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n          *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n          *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n          pcVar5 = pcVar6;\n        } while (pcVar6 != md->dummy + 0xd0);\n        (md->sha3).byte_index = 0;\n        uVar3 = 0;\n        (md->sha3).xof_flag = 1;\n        uVar7 = (uint)(md->sha3).capacity_words;\n      }\n      puVar4 = out;\n      while( true ) {\n        uVar8 = (ulong)(uint)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - uVar7) * 8)) {\n          uVar3 = uVar3 + 1;\n        }\n        else {\n          keccakf((md->whirlpool).state);\n          *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n          pcVar5 = md->dummy + 0x10;\n          do {\n            pcVar6 = pcVar5 + 0x40;\n            *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n            *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n            *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n            *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n            *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n            *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n            *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n            *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n            pcVar5 = pcVar6;\n          } while (md->dummy + 0xd0 != pcVar6);\n          uVar8 = 0;\n          uVar3 = 1;\n        }\n        uVar2 = md->dummy[uVar8 + 0xd0];\n        (md->sha3).byte_index = uVar3;\n        *puVar4 = uVar2;\n        if (out + outlen == puVar4 + 1) break;\n        uVar3 = (md->sha3).byte_index;\n        uVar7 = (uint)(md->sha3).capacity_words;\n        puVar4 = puVar4 + 1;\n      }\n      return 0;\n    }\n                    /* WARNING: Subroutine does not return */\n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);\n  }" { (if_statement "if (out != (uchar *)0x0) {\n      uVar3 = (md->sha3).byte_index;\n      uVar7 = (uint)(md->sha3).capacity_words;\n      if ((md->sha3).xof_flag == 0) {\n        *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) =\n             *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) ^ (md->chc).length ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        puVar1 = (ulong *)((long)md + (long)(int)(0x18 - uVar7) * 8 + 8);\n        *puVar1 = *puVar1 ^ 0x8000000000000000;\n        keccakf((md->whirlpool).state);\n        *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n        pcVar5 = md->dummy + 0x10;\n        do {\n          pcVar6 = pcVar5 + 0x40;\n          *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n          *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n          *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n          *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n          *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n          *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n          *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n          *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n          pcVar5 = pcVar6;\n        } while (pcVar6 != md->dummy + 0xd0);\n        (md->sha3).byte_index = 0;\n        uVar3 = 0;\n        (md->sha3).xof_flag = 1;\n        uVar7 = (uint)(md->sha3).capacity_words;\n      }\n      puVar4 = out;\n      while( true ) {\n        uVar8 = (ulong)(uint)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - uVar7) * 8)) {\n          uVar3 = uVar3 + 1;\n        }\n        else {\n          keccakf((md->whirlpool).state);\n          *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n          pcVar5 = md->dummy + 0x10;\n          do {\n            pcVar6 = pcVar5 + 0x40;\n            *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n            *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n            *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n            *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n            *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n            *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n            *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n            *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n            pcVar5 = pcVar6;\n          } while (md->dummy + 0xd0 != pcVar6);\n          uVar8 = 0;\n          uVar3 = 1;\n        }\n        uVar2 = md->dummy[uVar8 + 0xd0];\n        (md->sha3).byte_index = uVar3;\n        *puVar4 = uVar2;\n        if (out + outlen == puVar4 + 1) break;\n        uVar3 = (md->sha3).byte_index;\n        uVar7 = (uint)(md->sha3).capacity_words;\n        puVar4 = puVar4 + 1;\n      }\n      return 0;\n    }" if (parenthesized_expression "(out != (uchar *)0x0)" ( (binary_expression "out != (uchar *)0x0" identifier != (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      uVar3 = (md->sha3).byte_index;\n      uVar7 = (uint)(md->sha3).capacity_words;\n      if ((md->sha3).xof_flag == 0) {\n        *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) =\n             *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) ^ (md->chc).length ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        puVar1 = (ulong *)((long)md + (long)(int)(0x18 - uVar7) * 8 + 8);\n        *puVar1 = *puVar1 ^ 0x8000000000000000;\n        keccakf((md->whirlpool).state);\n        *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n        pcVar5 = md->dummy + 0x10;\n        do {\n          pcVar6 = pcVar5 + 0x40;\n          *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n          *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n          *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n          *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n          *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n          *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n          *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n          *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n          pcVar5 = pcVar6;\n        } while (pcVar6 != md->dummy + 0xd0);\n        (md->sha3).byte_index = 0;\n        uVar3 = 0;\n        (md->sha3).xof_flag = 1;\n        uVar7 = (uint)(md->sha3).capacity_words;\n      }\n      puVar4 = out;\n      while( true ) {\n        uVar8 = (ulong)(uint)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - uVar7) * 8)) {\n          uVar3 = uVar3 + 1;\n        }\n        else {\n          keccakf((md->whirlpool).state);\n          *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n          pcVar5 = md->dummy + 0x10;\n          do {\n            pcVar6 = pcVar5 + 0x40;\n            *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n            *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n            *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n            *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n            *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n            *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n            *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n            *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n            pcVar5 = pcVar6;\n          } while (md->dummy + 0xd0 != pcVar6);\n          uVar8 = 0;\n          uVar3 = 1;\n        }\n        uVar2 = md->dummy[uVar8 + 0xd0];\n        (md->sha3).byte_index = uVar3;\n        *puVar4 = uVar2;\n        if (out + outlen == puVar4 + 1) break;\n        uVar3 = (md->sha3).byte_index;\n        uVar7 = (uint)(md->sha3).capacity_words;\n        puVar4 = puVar4 + 1;\n      }\n      return 0;\n    }" { (expression_statement "uVar3 = (md->sha3).byte_index;" (assignment_expression "uVar3 = (md->sha3).byte_index" identifier = (field_expression "(md->sha3).byte_index" (parenthesized_expression "(md->sha3)" ( (field_expression "md->sha3" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "uVar7 = (uint)(md->sha3).capacity_words;" (assignment_expression "uVar7 = (uint)(md->sha3).capacity_words" identifier = (field_expression "(uint)(md->sha3).capacity_words" (call_expression "(uint)(md->sha3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(md->sha3)" ( (field_expression "md->sha3" identifier -> field_identifier) ))) . field_identifier)) ;) (if_statement "if ((md->sha3).xof_flag == 0) {\n        *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) =\n             *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) ^ (md->chc).length ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        puVar1 = (ulong *)((long)md + (long)(int)(0x18 - uVar7) * 8 + 8);\n        *puVar1 = *puVar1 ^ 0x8000000000000000;\n        keccakf((md->whirlpool).state);\n        *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n        pcVar5 = md->dummy + 0x10;\n        do {\n          pcVar6 = pcVar5 + 0x40;\n          *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n          *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n          *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n          *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n          *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n          *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n          *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n          *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n          pcVar5 = pcVar6;\n        } while (pcVar6 != md->dummy + 0xd0);\n        (md->sha3).byte_index = 0;\n        uVar3 = 0;\n        (md->sha3).xof_flag = 1;\n        uVar7 = (uint)(md->sha3).capacity_words;\n      }" if (parenthesized_expression "((md->sha3).xof_flag == 0)" ( (binary_expression "(md->sha3).xof_flag == 0" (field_expression "(md->sha3).xof_flag" (parenthesized_expression "(md->sha3)" ( (field_expression "md->sha3" identifier -> field_identifier) )) . field_identifier) == number_literal) )) (compound_statement "{\n        *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) =\n             *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) ^ (md->chc).length ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        puVar1 = (ulong *)((long)md + (long)(int)(0x18 - uVar7) * 8 + 8);\n        *puVar1 = *puVar1 ^ 0x8000000000000000;\n        keccakf((md->whirlpool).state);\n        *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n        pcVar5 = md->dummy + 0x10;\n        do {\n          pcVar6 = pcVar5 + 0x40;\n          *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n          *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n          *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n          *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n          *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n          *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n          *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n          *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n          pcVar5 = pcVar6;\n        } while (pcVar6 != md->dummy + 0xd0);\n        (md->sha3).byte_index = 0;\n        uVar3 = 0;\n        (md->sha3).xof_flag = 1;\n        uVar7 = (uint)(md->sha3).capacity_words;\n      }" { (expression_statement "*(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) =\n             *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) ^ (md->chc).length ^\n             0x1fL << (((byte)uVar3 & 7) << 3);" (assignment_expression "*(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) =\n             *(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) ^ (md->chc).length ^\n             0x1fL << (((byte)uVar3 & 7) << 3)" (pointer_expression "*(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8)" * (cast_expression "(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)md + (ulong)(md->sha3).word_index * 8 + 8)" ( (binary_expression "(long)md + (ulong)(md->sha3).word_index * 8 + 8" (binary_expression "(long)md + (ulong)(md->sha3).word_index * 8" (cast_expression "(long)md" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "(ulong)(md->sha3).word_index * 8" (field_expression "(ulong)(md->sha3).word_index" (call_expression "(ulong)(md->sha3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(md->sha3)" ( (field_expression "md->sha3" identifier -> field_identifier) ))) . field_identifier) * number_literal)) + number_literal) )))) = (binary_expression "*(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) ^ (md->chc).length ^\n             0x1fL << (((byte)uVar3 & 7) << 3)" (binary_expression "*(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8) ^ (md->chc).length" (pointer_expression "*(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8)" * (cast_expression "(ulong *)((long)md + (ulong)(md->sha3).word_index * 8 + 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)md + (ulong)(md->sha3).word_index * 8 + 8)" ( (binary_expression "(long)md + (ulong)(md->sha3).word_index * 8 + 8" (binary_expression "(long)md + (ulong)(md->sha3).word_index * 8" (cast_expression "(long)md" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "(ulong)(md->sha3).word_index * 8" (field_expression "(ulong)(md->sha3).word_index" (call_expression "(ulong)(md->sha3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(md->sha3)" ( (field_expression "md->sha3" identifier -> field_identifier) ))) . field_identifier) * number_literal)) + number_literal) )))) ^ (field_expression "(md->chc).length" (parenthesized_expression "(md->chc)" ( (field_expression "md->chc" identifier -> field_identifier) )) . field_identifier)) ^ (binary_expression "0x1fL << (((byte)uVar3 & 7) << 3)" number_literal << (parenthesized_expression "(((byte)uVar3 & 7) << 3)" ( (binary_expression "((byte)uVar3 & 7) << 3" (parenthesized_expression "((byte)uVar3 & 7)" ( (binary_expression "(byte)uVar3 & 7" (cast_expression "(byte)uVar3" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )) << number_literal) ))))) ;) (expression_statement "puVar1 = (ulong *)((long)md + (long)(int)(0x18 - uVar7) * 8 + 8);" (assignment_expression "puVar1 = (ulong *)((long)md + (long)(int)(0x18 - uVar7) * 8 + 8)" identifier = (cast_expression "(ulong *)((long)md + (long)(int)(0x18 - uVar7) * 8 + 8)" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)md + (long)(int)(0x18 - uVar7) * 8 + 8)" ( (binary_expression "(long)md + (long)(int)(0x18 - uVar7) * 8 + 8" (binary_expression "(long)md + (long)(int)(0x18 - uVar7) * 8" (cast_expression "(long)md" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "(long)(int)(0x18 - uVar7) * 8" (cast_expression "(long)(int)(0x18 - uVar7)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)(0x18 - uVar7)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x18 - uVar7)" ( (binary_expression "0x18 - uVar7" number_literal - identifier) )))) * number_literal)) + number_literal) )))) ;) (expression_statement "*puVar1 = *puVar1 ^ 0x8000000000000000;" (assignment_expression "*puVar1 = *puVar1 ^ 0x8000000000000000" (pointer_expression "*puVar1" * identifier) = (binary_expression "*puVar1 ^ 0x8000000000000000" (pointer_expression "*puVar1" * identifier) ^ number_literal)) ;) (expression_statement "keccakf((md->whirlpool).state);" (call_expression "keccakf((md->whirlpool).state)" identifier (argument_list "((md->whirlpool).state)" ( (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) ))) ;) (expression_statement "*(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];" (assignment_expression "*(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0]" (pointer_expression "*(ulong64 *)(md->dummy + 0xd0)" * (cast_expression "(ulong64 *)(md->dummy + 0xd0)" ( (type_descriptor "ulong64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(md->dummy + 0xd0)" ( (binary_expression "md->dummy + 0xd0" (field_expression "md->dummy" identifier -> field_identifier) + number_literal) )))) = (subscript_expression "(md->whirlpool).state[0]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) ;) (expression_statement "pcVar5 = md->dummy + 0x10;" (assignment_expression "pcVar5 = md->dummy + 0x10" identifier = (binary_expression "md->dummy + 0x10" (field_expression "md->dummy" identifier -> field_identifier) + number_literal)) ;) (do_statement "do {\n          pcVar6 = pcVar5 + 0x40;\n          *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n          *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n          *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n          *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n          *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n          *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n          *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n          *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n          pcVar5 = pcVar6;\n        } while (pcVar6 != md->dummy + 0xd0);" do (compound_statement "{\n          pcVar6 = pcVar5 + 0x40;\n          *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n          *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n          *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n          *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n          *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n          *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n          *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n          *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n          pcVar5 = pcVar6;\n        }" { (expression_statement "pcVar6 = pcVar5 + 0x40;" (assignment_expression "pcVar6 = pcVar5 + 0x40" identifier = (binary_expression "pcVar5 + 0x40" identifier + number_literal)) ;) (expression_statement "*(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;" (assignment_expression "*(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5" (pointer_expression "*(undefined8 *)(pcVar5 + 200)" * (cast_expression "(undefined8 *)(pcVar5 + 200)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 200)" ( (binary_expression "pcVar5 + 200" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)pcVar5" * (cast_expression "(undefined8 *)pcVar5" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);" (assignment_expression "*(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8)" (pointer_expression "*(undefined8 *)(pcVar5 + 0xd0)" * (cast_expression "(undefined8 *)(pcVar5 + 0xd0)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0xd0)" ( (binary_expression "pcVar5 + 0xd0" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(pcVar5 + 8)" * (cast_expression "(undefined8 *)(pcVar5 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 8)" ( (binary_expression "pcVar5 + 8" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);" (assignment_expression "*(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10)" (pointer_expression "*(undefined8 *)(pcVar5 + 0xd8)" * (cast_expression "(undefined8 *)(pcVar5 + 0xd8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0xd8)" ( (binary_expression "pcVar5 + 0xd8" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(pcVar5 + 0x10)" * (cast_expression "(undefined8 *)(pcVar5 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0x10)" ( (binary_expression "pcVar5 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);" (assignment_expression "*(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18)" (pointer_expression "*(undefined8 *)(pcVar5 + 0xe0)" * (cast_expression "(undefined8 *)(pcVar5 + 0xe0)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0xe0)" ( (binary_expression "pcVar5 + 0xe0" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(pcVar5 + 0x18)" * (cast_expression "(undefined8 *)(pcVar5 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0x18)" ( (binary_expression "pcVar5 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);" (assignment_expression "*(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20)" (pointer_expression "*(undefined8 *)(pcVar5 + 0xe8)" * (cast_expression "(undefined8 *)(pcVar5 + 0xe8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0xe8)" ( (binary_expression "pcVar5 + 0xe8" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(pcVar5 + 0x20)" * (cast_expression "(undefined8 *)(pcVar5 + 0x20)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0x20)" ( (binary_expression "pcVar5 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);" (assignment_expression "*(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28)" (pointer_expression "*(undefined8 *)(pcVar5 + 0xf0)" * (cast_expression "(undefined8 *)(pcVar5 + 0xf0)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0xf0)" ( (binary_expression "pcVar5 + 0xf0" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(pcVar5 + 0x28)" * (cast_expression "(undefined8 *)(pcVar5 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0x28)" ( (binary_expression "pcVar5 + 0x28" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);" (assignment_expression "*(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30)" (pointer_expression "*(undefined8 *)(pcVar5 + 0xf8)" * (cast_expression "(undefined8 *)(pcVar5 + 0xf8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0xf8)" ( (binary_expression "pcVar5 + 0xf8" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(pcVar5 + 0x30)" * (cast_expression "(undefined8 *)(pcVar5 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0x30)" ( (binary_expression "pcVar5 + 0x30" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);" (assignment_expression "*(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38)" (pointer_expression "*(undefined8 *)(pcVar5 + 0x100)" * (cast_expression "(undefined8 *)(pcVar5 + 0x100)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0x100)" ( (binary_expression "pcVar5 + 0x100" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(pcVar5 + 0x38)" * (cast_expression "(undefined8 *)(pcVar5 + 0x38)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0x38)" ( (binary_expression "pcVar5 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "pcVar5 = pcVar6;" (assignment_expression "pcVar5 = pcVar6" identifier = identifier) ;) }) while (parenthesized_expression "(pcVar6 != md->dummy + 0xd0)" ( (binary_expression "pcVar6 != md->dummy + 0xd0" identifier != (binary_expression "md->dummy + 0xd0" (field_expression "md->dummy" identifier -> field_identifier) + number_literal)) )) ;) (expression_statement "(md->sha3).byte_index = 0;" (assignment_expression "(md->sha3).byte_index = 0" (field_expression "(md->sha3).byte_index" (parenthesized_expression "(md->sha3)" ( (field_expression "md->sha3" identifier -> field_identifier) )) . field_identifier) = number_literal) ;) (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (expression_statement "(md->sha3).xof_flag = 1;" (assignment_expression "(md->sha3).xof_flag = 1" (field_expression "(md->sha3).xof_flag" (parenthesized_expression "(md->sha3)" ( (field_expression "md->sha3" identifier -> field_identifier) )) . field_identifier) = number_literal) ;) (expression_statement "uVar7 = (uint)(md->sha3).capacity_words;" (assignment_expression "uVar7 = (uint)(md->sha3).capacity_words" identifier = (field_expression "(uint)(md->sha3).capacity_words" (call_expression "(uint)(md->sha3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(md->sha3)" ( (field_expression "md->sha3" identifier -> field_identifier) ))) . field_identifier)) ;) })) (expression_statement "puVar4 = out;" (assignment_expression "puVar4 = out" identifier = identifier) ;) (while_statement "while( true ) {\n        uVar8 = (ulong)(uint)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - uVar7) * 8)) {\n          uVar3 = uVar3 + 1;\n        }\n        else {\n          keccakf((md->whirlpool).state);\n          *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n          pcVar5 = md->dummy + 0x10;\n          do {\n            pcVar6 = pcVar5 + 0x40;\n            *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n            *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n            *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n            *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n            *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n            *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n            *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n            *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n            pcVar5 = pcVar6;\n          } while (md->dummy + 0xd0 != pcVar6);\n          uVar8 = 0;\n          uVar3 = 1;\n        }\n        uVar2 = md->dummy[uVar8 + 0xd0];\n        (md->sha3).byte_index = uVar3;\n        *puVar4 = uVar2;\n        if (out + outlen == puVar4 + 1) break;\n        uVar3 = (md->sha3).byte_index;\n        uVar7 = (uint)(md->sha3).capacity_words;\n        puVar4 = puVar4 + 1;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        uVar8 = (ulong)(uint)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - uVar7) * 8)) {\n          uVar3 = uVar3 + 1;\n        }\n        else {\n          keccakf((md->whirlpool).state);\n          *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n          pcVar5 = md->dummy + 0x10;\n          do {\n            pcVar6 = pcVar5 + 0x40;\n            *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n            *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n            *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n            *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n            *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n            *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n            *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n            *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n            pcVar5 = pcVar6;\n          } while (md->dummy + 0xd0 != pcVar6);\n          uVar8 = 0;\n          uVar3 = 1;\n        }\n        uVar2 = md->dummy[uVar8 + 0xd0];\n        (md->sha3).byte_index = uVar3;\n        *puVar4 = uVar2;\n        if (out + outlen == puVar4 + 1) break;\n        uVar3 = (md->sha3).byte_index;\n        uVar7 = (uint)(md->sha3).capacity_words;\n        puVar4 = puVar4 + 1;\n      }" { (expression_statement "uVar8 = (ulong)(uint)uVar3;" (assignment_expression "uVar8 = (ulong)(uint)uVar3" identifier = (cast_expression "(ulong)(uint)uVar3" ( (type_descriptor "ulong" type_identifier) ) (cast_expression "(uint)uVar3" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (if_statement "if ((int)(uint)uVar3 < (int)((0x19 - uVar7) * 8)) {\n          uVar3 = uVar3 + 1;\n        }\n        else {\n          keccakf((md->whirlpool).state);\n          *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n          pcVar5 = md->dummy + 0x10;\n          do {\n            pcVar6 = pcVar5 + 0x40;\n            *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n            *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n            *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n            *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n            *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n            *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n            *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n            *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n            pcVar5 = pcVar6;\n          } while (md->dummy + 0xd0 != pcVar6);\n          uVar8 = 0;\n          uVar3 = 1;\n        }" if (parenthesized_expression "((int)(uint)uVar3 < (int)((0x19 - uVar7) * 8))" ( (binary_expression "(int)(uint)uVar3 < (int)((0x19 - uVar7) * 8)" (cast_expression "(int)(uint)uVar3" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)uVar3" ( (type_descriptor "uint" type_identifier) ) identifier)) < (cast_expression "(int)((0x19 - uVar7) * 8)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((0x19 - uVar7) * 8)" ( (binary_expression "(0x19 - uVar7) * 8" (parenthesized_expression "(0x19 - uVar7)" ( (binary_expression "0x19 - uVar7" number_literal - identifier) )) * number_literal) )))) )) (compound_statement "{\n          uVar3 = uVar3 + 1;\n        }" { (expression_statement "uVar3 = uVar3 + 1;" (assignment_expression "uVar3 = uVar3 + 1" identifier = (binary_expression "uVar3 + 1" identifier + number_literal)) ;) }) (else_clause "else {\n          keccakf((md->whirlpool).state);\n          *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n          pcVar5 = md->dummy + 0x10;\n          do {\n            pcVar6 = pcVar5 + 0x40;\n            *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n            *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n            *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n            *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n            *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n            *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n            *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n            *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n            pcVar5 = pcVar6;\n          } while (md->dummy + 0xd0 != pcVar6);\n          uVar8 = 0;\n          uVar3 = 1;\n        }" else (compound_statement "{\n          keccakf((md->whirlpool).state);\n          *(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];\n          pcVar5 = md->dummy + 0x10;\n          do {\n            pcVar6 = pcVar5 + 0x40;\n            *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n            *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n            *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n            *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n            *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n            *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n            *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n            *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n            pcVar5 = pcVar6;\n          } while (md->dummy + 0xd0 != pcVar6);\n          uVar8 = 0;\n          uVar3 = 1;\n        }" { (expression_statement "keccakf((md->whirlpool).state);" (call_expression "keccakf((md->whirlpool).state)" identifier (argument_list "((md->whirlpool).state)" ( (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) ))) ;) (expression_statement "*(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0];" (assignment_expression "*(ulong64 *)(md->dummy + 0xd0) = (md->whirlpool).state[0]" (pointer_expression "*(ulong64 *)(md->dummy + 0xd0)" * (cast_expression "(ulong64 *)(md->dummy + 0xd0)" ( (type_descriptor "ulong64 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(md->dummy + 0xd0)" ( (binary_expression "md->dummy + 0xd0" (field_expression "md->dummy" identifier -> field_identifier) + number_literal) )))) = (subscript_expression "(md->whirlpool).state[0]" (field_expression "(md->whirlpool).state" (parenthesized_expression "(md->whirlpool)" ( (field_expression "md->whirlpool" identifier -> field_identifier) )) . field_identifier) [ number_literal ])) ;) (expression_statement "pcVar5 = md->dummy + 0x10;" (assignment_expression "pcVar5 = md->dummy + 0x10" identifier = (binary_expression "md->dummy + 0x10" (field_expression "md->dummy" identifier -> field_identifier) + number_literal)) ;) (do_statement "do {\n            pcVar6 = pcVar5 + 0x40;\n            *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n            *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n            *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n            *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n            *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n            *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n            *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n            *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n            pcVar5 = pcVar6;\n          } while (md->dummy + 0xd0 != pcVar6);" do (compound_statement "{\n            pcVar6 = pcVar5 + 0x40;\n            *(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;\n            *(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);\n            *(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);\n            *(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);\n            *(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);\n            *(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);\n            *(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);\n            *(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);\n            pcVar5 = pcVar6;\n          }" { (expression_statement "pcVar6 = pcVar5 + 0x40;" (assignment_expression "pcVar6 = pcVar5 + 0x40" identifier = (binary_expression "pcVar5 + 0x40" identifier + number_literal)) ;) (expression_statement "*(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5;" (assignment_expression "*(undefined8 *)(pcVar5 + 200) = *(undefined8 *)pcVar5" (pointer_expression "*(undefined8 *)(pcVar5 + 200)" * (cast_expression "(undefined8 *)(pcVar5 + 200)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 200)" ( (binary_expression "pcVar5 + 200" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)pcVar5" * (cast_expression "(undefined8 *)pcVar5" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier))) ;) (expression_statement "*(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8);" (assignment_expression "*(undefined8 *)(pcVar5 + 0xd0) = *(undefined8 *)(pcVar5 + 8)" (pointer_expression "*(undefined8 *)(pcVar5 + 0xd0)" * (cast_expression "(undefined8 *)(pcVar5 + 0xd0)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0xd0)" ( (binary_expression "pcVar5 + 0xd0" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(pcVar5 + 8)" * (cast_expression "(undefined8 *)(pcVar5 + 8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 8)" ( (binary_expression "pcVar5 + 8" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10);" (assignment_expression "*(undefined8 *)(pcVar5 + 0xd8) = *(undefined8 *)(pcVar5 + 0x10)" (pointer_expression "*(undefined8 *)(pcVar5 + 0xd8)" * (cast_expression "(undefined8 *)(pcVar5 + 0xd8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0xd8)" ( (binary_expression "pcVar5 + 0xd8" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(pcVar5 + 0x10)" * (cast_expression "(undefined8 *)(pcVar5 + 0x10)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0x10)" ( (binary_expression "pcVar5 + 0x10" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18);" (assignment_expression "*(undefined8 *)(pcVar5 + 0xe0) = *(undefined8 *)(pcVar5 + 0x18)" (pointer_expression "*(undefined8 *)(pcVar5 + 0xe0)" * (cast_expression "(undefined8 *)(pcVar5 + 0xe0)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0xe0)" ( (binary_expression "pcVar5 + 0xe0" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(pcVar5 + 0x18)" * (cast_expression "(undefined8 *)(pcVar5 + 0x18)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0x18)" ( (binary_expression "pcVar5 + 0x18" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20);" (assignment_expression "*(undefined8 *)(pcVar5 + 0xe8) = *(undefined8 *)(pcVar5 + 0x20)" (pointer_expression "*(undefined8 *)(pcVar5 + 0xe8)" * (cast_expression "(undefined8 *)(pcVar5 + 0xe8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0xe8)" ( (binary_expression "pcVar5 + 0xe8" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(pcVar5 + 0x20)" * (cast_expression "(undefined8 *)(pcVar5 + 0x20)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0x20)" ( (binary_expression "pcVar5 + 0x20" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28);" (assignment_expression "*(undefined8 *)(pcVar5 + 0xf0) = *(undefined8 *)(pcVar5 + 0x28)" (pointer_expression "*(undefined8 *)(pcVar5 + 0xf0)" * (cast_expression "(undefined8 *)(pcVar5 + 0xf0)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0xf0)" ( (binary_expression "pcVar5 + 0xf0" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(pcVar5 + 0x28)" * (cast_expression "(undefined8 *)(pcVar5 + 0x28)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0x28)" ( (binary_expression "pcVar5 + 0x28" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30);" (assignment_expression "*(undefined8 *)(pcVar5 + 0xf8) = *(undefined8 *)(pcVar5 + 0x30)" (pointer_expression "*(undefined8 *)(pcVar5 + 0xf8)" * (cast_expression "(undefined8 *)(pcVar5 + 0xf8)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0xf8)" ( (binary_expression "pcVar5 + 0xf8" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(pcVar5 + 0x30)" * (cast_expression "(undefined8 *)(pcVar5 + 0x30)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0x30)" ( (binary_expression "pcVar5 + 0x30" identifier + number_literal) ))))) ;) (expression_statement "*(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38);" (assignment_expression "*(undefined8 *)(pcVar5 + 0x100) = *(undefined8 *)(pcVar5 + 0x38)" (pointer_expression "*(undefined8 *)(pcVar5 + 0x100)" * (cast_expression "(undefined8 *)(pcVar5 + 0x100)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0x100)" ( (binary_expression "pcVar5 + 0x100" identifier + number_literal) )))) = (pointer_expression "*(undefined8 *)(pcVar5 + 0x38)" * (cast_expression "(undefined8 *)(pcVar5 + 0x38)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar5 + 0x38)" ( (binary_expression "pcVar5 + 0x38" identifier + number_literal) ))))) ;) (expression_statement "pcVar5 = pcVar6;" (assignment_expression "pcVar5 = pcVar6" identifier = identifier) ;) }) while (parenthesized_expression "(md->dummy + 0xd0 != pcVar6)" ( (binary_expression "md->dummy + 0xd0 != pcVar6" (binary_expression "md->dummy + 0xd0" (field_expression "md->dummy" identifier -> field_identifier) + number_literal) != identifier) )) ;) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (expression_statement "uVar3 = 1;" (assignment_expression "uVar3 = 1" identifier = number_literal) ;) }))) (expression_statement "uVar2 = md->dummy[uVar8 + 0xd0];" (assignment_expression "uVar2 = md->dummy[uVar8 + 0xd0]" identifier = (subscript_expression "md->dummy[uVar8 + 0xd0]" (field_expression "md->dummy" identifier -> field_identifier) [ (binary_expression "uVar8 + 0xd0" identifier + number_literal) ])) ;) (expression_statement "(md->sha3).byte_index = uVar3;" (assignment_expression "(md->sha3).byte_index = uVar3" (field_expression "(md->sha3).byte_index" (parenthesized_expression "(md->sha3)" ( (field_expression "md->sha3" identifier -> field_identifier) )) . field_identifier) = identifier) ;) (expression_statement "*puVar4 = uVar2;" (assignment_expression "*puVar4 = uVar2" (pointer_expression "*puVar4" * identifier) = identifier) ;) (if_statement "if (out + outlen == puVar4 + 1) break;" if (parenthesized_expression "(out + outlen == puVar4 + 1)" ( (binary_expression "out + outlen == puVar4 + 1" (binary_expression "out + outlen" identifier + identifier) == (binary_expression "puVar4 + 1" identifier + number_literal)) )) (break_statement "break;" break ;)) (expression_statement "uVar3 = (md->sha3).byte_index;" (assignment_expression "uVar3 = (md->sha3).byte_index" identifier = (field_expression "(md->sha3).byte_index" (parenthesized_expression "(md->sha3)" ( (field_expression "md->sha3" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "uVar7 = (uint)(md->sha3).capacity_words;" (assignment_expression "uVar7 = (uint)(md->sha3).capacity_words" identifier = (field_expression "(uint)(md->sha3).capacity_words" (call_expression "(uint)(md->sha3)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(md->sha3)" ( (field_expression "md->sha3" identifier -> field_identifier) ))) . field_identifier)) ;) (expression_statement "puVar4 = puVar4 + 1;" (assignment_expression "puVar4 = puVar4 + 1" identifier = (binary_expression "puVar4 + 1" identifier + number_literal)) ;) })) (return_statement "return 0;" return number_literal ;) })) comment (expression_statement "crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);" (call_expression "crypt_argchk("out != NULL","src/hashes/sha3.c",0x104)" identifier (argument_list "("out != NULL","src/hashes/sha3.c",0x104)" ( (string_literal ""out != NULL"" " string_content ") , (string_literal ""src/hashes/sha3.c"" " string_content ") , number_literal ))) ;) })) comment (expression_statement "crypt_argchk("md != NULL","src/hashes/sha3.c",0x103);" (call_expression "crypt_argchk("md != NULL","src/hashes/sha3.c",0x103)" identifier (argument_list "("md != NULL","src/hashes/sha3.c",0x103)" ( (string_literal ""md != NULL"" " string_content ") , (string_literal ""src/hashes/sha3.c"" " string_content ") , number_literal ))) ;) })))
(translation_unit "undefined8 sha3_shake_done(ulong *param_1,undefined1 *param_2,long param_3)\n\n{\n  undefined1 uVar1;\n  ushort uVar2;\n  ushort uVar3;\n  short sVar4;\n  undefined1 *puVar5;\n  ulong *puVar6;\n  ulong *puVar7;\n  ulong uVar8;\n  \n  if (param_3 == 0) {\n    return 0;\n  }\n  if (param_1 != (ulong *)0x0) {\n    if (param_2 != (undefined1 *)0x0) {\n      uVar3 = (ushort)param_1[0x33];\n      uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }\n      puVar5 = param_2;\n      while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }\n      return 0;\n    }\n                    \n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);\n  }\n                    \n  crypt_argchk("md != NULL","src/hashes/sha3.c",0x103);\n}\n\n" (function_definition "undefined8 sha3_shake_done(ulong *param_1,undefined1 *param_2,long param_3)\n\n{\n  undefined1 uVar1;\n  ushort uVar2;\n  ushort uVar3;\n  short sVar4;\n  undefined1 *puVar5;\n  ulong *puVar6;\n  ulong *puVar7;\n  ulong uVar8;\n  \n  if (param_3 == 0) {\n    return 0;\n  }\n  if (param_1 != (ulong *)0x0) {\n    if (param_2 != (undefined1 *)0x0) {\n      uVar3 = (ushort)param_1[0x33];\n      uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }\n      puVar5 = param_2;\n      while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }\n      return 0;\n    }\n                    \n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);\n  }\n                    \n  crypt_argchk("md != NULL","src/hashes/sha3.c",0x103);\n}" type_identifier (function_declarator "sha3_shake_done(ulong *param_1,undefined1 *param_2,long param_3)" identifier (parameter_list "(ulong *param_1,undefined1 *param_2,long param_3)" ( (parameter_declaration "ulong *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined1 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) ))) (compound_statement "{\n  undefined1 uVar1;\n  ushort uVar2;\n  ushort uVar3;\n  short sVar4;\n  undefined1 *puVar5;\n  ulong *puVar6;\n  ulong *puVar7;\n  ulong uVar8;\n  \n  if (param_3 == 0) {\n    return 0;\n  }\n  if (param_1 != (ulong *)0x0) {\n    if (param_2 != (undefined1 *)0x0) {\n      uVar3 = (ushort)param_1[0x33];\n      uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }\n      puVar5 = param_2;\n      while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }\n      return 0;\n    }\n                    \n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);\n  }\n                    \n  crypt_argchk("md != NULL","src/hashes/sha3.c",0x103);\n}" { (declaration "undefined1 uVar1;" type_identifier identifier ;) (declaration "ushort uVar2;" type_identifier identifier ;) (declaration "ushort uVar3;" type_identifier identifier ;) (declaration "short sVar4;" (sized_type_specifier "short" short) identifier ;) (declaration "undefined1 *puVar5;" type_identifier (pointer_declarator "*puVar5" * identifier) ;) (declaration "ulong *puVar6;" type_identifier (pointer_declarator "*puVar6" * identifier) ;) (declaration "ulong *puVar7;" type_identifier (pointer_declarator "*puVar7" * identifier) ;) (declaration "ulong uVar8;" type_identifier identifier ;) (if_statement "if (param_3 == 0) {\n    return 0;\n  }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (param_1 != (ulong *)0x0) {\n    if (param_2 != (undefined1 *)0x0) {\n      uVar3 = (ushort)param_1[0x33];\n      uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }\n      puVar5 = param_2;\n      while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }\n      return 0;\n    }\n                    \n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);\n  }" if (parenthesized_expression "(param_1 != (ulong *)0x0)" ( (binary_expression "param_1 != (ulong *)0x0" identifier != (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (param_2 != (undefined1 *)0x0) {\n      uVar3 = (ushort)param_1[0x33];\n      uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }\n      puVar5 = param_2;\n      while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }\n      return 0;\n    }\n                    \n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);\n  }" { (if_statement "if (param_2 != (undefined1 *)0x0) {\n      uVar3 = (ushort)param_1[0x33];\n      uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }\n      puVar5 = param_2;\n      while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }\n      return 0;\n    }" if (parenthesized_expression "(param_2 != (undefined1 *)0x0)" ( (binary_expression "param_2 != (undefined1 *)0x0" identifier != (cast_expression "(undefined1 *)0x0" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      uVar3 = (ushort)param_1[0x33];\n      uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }\n      puVar5 = param_2;\n      while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }\n      return 0;\n    }" { (expression_statement "uVar3 = (ushort)param_1[0x33];" (assignment_expression "uVar3 = (ushort)param_1[0x33]" identifier = (cast_expression "(ushort)param_1[0x33]" ( (type_descriptor "ushort" type_identifier) ) (subscript_expression "param_1[0x33]" identifier [ number_literal ]))) ;) (expression_statement "uVar2 = *(ushort *)((long)param_1 + 0x19c);" (assignment_expression "uVar2 = *(ushort *)((long)param_1 + 0x19c)" identifier = (pointer_expression "*(ushort *)((long)param_1 + 0x19c)" * (cast_expression "(ushort *)((long)param_1 + 0x19c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x19c)" ( (binary_expression "(long)param_1 + 0x19c" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (if_statement "if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }" if (parenthesized_expression "(*(short *)((long)param_1 + 0x19e) == 0)" ( (binary_expression "*(short *)((long)param_1 + 0x19e) == 0" (pointer_expression "*(short *)((long)param_1 + 0x19e)" * (cast_expression "(short *)((long)param_1 + 0x19e)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x19e)" ( (binary_expression "(long)param_1 + 0x19e" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) == number_literal) )) (compound_statement "{\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }" { (expression_statement "param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);" (assignment_expression "param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3)" (subscript_expression "param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1]" identifier [ (binary_expression "(ulong)*(ushort *)((long)param_1 + 0x19a) + 1" (binary_expression "(ulong)*(ushort *)((long)param_1 + 0x19a)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(ushort *)((long)param_1 + 0x19a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x19a)" ( (binary_expression "(long)param_1 + 0x19a" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) + number_literal) ]) = (binary_expression "param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3)" (binary_expression "param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1" (subscript_expression "param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1]" identifier [ (binary_expression "(ulong)*(ushort *)((long)param_1 + 0x19a) + 1" (binary_expression "(ulong)*(ushort *)((long)param_1 + 0x19a)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(ushort *)((long)param_1 + 0x19a)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x19a)" ( (binary_expression "(long)param_1 + 0x19a" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) + number_literal) ]) ^ (pointer_expression "*param_1" * identifier)) ^ (binary_expression "0x1fL << (((byte)uVar3 & 7) << 3)" number_literal << (parenthesized_expression "(((byte)uVar3 & 7) << 3)" ( (binary_expression "((byte)uVar3 & 7) << 3" (parenthesized_expression "((byte)uVar3 & 7)" ( (binary_expression "(byte)uVar3 & 7" (cast_expression "(byte)uVar3" ( (type_descriptor "byte" type_identifier) ) identifier) & number_literal) )) << number_literal) ))))) ;) (expression_statement "param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;" (assignment_expression "param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000" (subscript_expression "param_1[(long)(int)(0x18 - (uint)uVar2) + 1]" identifier [ (binary_expression "(long)(int)(0x18 - (uint)uVar2) + 1" (cast_expression "(long)(int)(0x18 - (uint)uVar2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)(0x18 - (uint)uVar2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x18 - (uint)uVar2)" ( (binary_expression "0x18 - (uint)uVar2" number_literal - (cast_expression "(uint)uVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) )))) + number_literal) ]) = (binary_expression "param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000" (subscript_expression "param_1[(long)(int)(0x18 - (uint)uVar2) + 1]" identifier [ (binary_expression "(long)(int)(0x18 - (uint)uVar2) + 1" (cast_expression "(long)(int)(0x18 - (uint)uVar2)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)(0x18 - (uint)uVar2)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(0x18 - (uint)uVar2)" ( (binary_expression "0x18 - (uint)uVar2" number_literal - (cast_expression "(uint)uVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) )))) + number_literal) ]) ^ number_literal)) ;) (expression_statement "FUN_001534a0(param_1 + 1);" (call_expression "FUN_001534a0(param_1 + 1)" identifier (argument_list "(param_1 + 1)" ( (binary_expression "param_1 + 1" identifier + number_literal) ))) ;) (expression_statement "param_1[0x1a] = param_1[1];" (assignment_expression "param_1[0x1a] = param_1[1]" (subscript_expression "param_1[0x1a]" identifier [ number_literal ]) = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (expression_statement "puVar6 = param_1 + 2;" (assignment_expression "puVar6 = param_1 + 2" identifier = (binary_expression "param_1 + 2" identifier + number_literal)) ;) (do_statement "do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);" do (compound_statement "{\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        }" { (expression_statement "puVar7 = puVar6 + 8;" (assignment_expression "puVar7 = puVar6 + 8" identifier = (binary_expression "puVar6 + 8" identifier + number_literal)) ;) (expression_statement "puVar6[0x19] = *puVar6;" (assignment_expression "puVar6[0x19] = *puVar6" (subscript_expression "puVar6[0x19]" identifier [ number_literal ]) = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "puVar6[0x1a] = puVar6[1];" (assignment_expression "puVar6[0x1a] = puVar6[1]" (subscript_expression "puVar6[0x1a]" identifier [ number_literal ]) = (subscript_expression "puVar6[1]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x1b] = puVar6[2];" (assignment_expression "puVar6[0x1b] = puVar6[2]" (subscript_expression "puVar6[0x1b]" identifier [ number_literal ]) = (subscript_expression "puVar6[2]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x1c] = puVar6[3];" (assignment_expression "puVar6[0x1c] = puVar6[3]" (subscript_expression "puVar6[0x1c]" identifier [ number_literal ]) = (subscript_expression "puVar6[3]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x1d] = puVar6[4];" (assignment_expression "puVar6[0x1d] = puVar6[4]" (subscript_expression "puVar6[0x1d]" identifier [ number_literal ]) = (subscript_expression "puVar6[4]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x1e] = puVar6[5];" (assignment_expression "puVar6[0x1e] = puVar6[5]" (subscript_expression "puVar6[0x1e]" identifier [ number_literal ]) = (subscript_expression "puVar6[5]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x1f] = puVar6[6];" (assignment_expression "puVar6[0x1f] = puVar6[6]" (subscript_expression "puVar6[0x1f]" identifier [ number_literal ]) = (subscript_expression "puVar6[6]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x20] = puVar6[7];" (assignment_expression "puVar6[0x20] = puVar6[7]" (subscript_expression "puVar6[0x20]" identifier [ number_literal ]) = (subscript_expression "puVar6[7]" identifier [ number_literal ])) ;) (expression_statement "puVar6 = puVar7;" (assignment_expression "puVar6 = puVar7" identifier = identifier) ;) }) while (parenthesized_expression "(puVar7 != param_1 + 0x1a)" ( (binary_expression "puVar7 != param_1 + 0x1a" identifier != (binary_expression "param_1 + 0x1a" identifier + number_literal)) )) ;) (expression_statement "*(undefined2 *)(param_1 + 0x33) = 0;" (assignment_expression "*(undefined2 *)(param_1 + 0x33) = 0" (pointer_expression "*(undefined2 *)(param_1 + 0x33)" * (cast_expression "(undefined2 *)(param_1 + 0x33)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x33)" ( (binary_expression "param_1 + 0x33" identifier + number_literal) )))) = number_literal) ;) (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" identifier = number_literal) ;) (expression_statement "*(undefined2 *)((long)param_1 + 0x19e) = 1;" (assignment_expression "*(undefined2 *)((long)param_1 + 0x19e) = 1" (pointer_expression "*(undefined2 *)((long)param_1 + 0x19e)" * (cast_expression "(undefined2 *)((long)param_1 + 0x19e)" ( (type_descriptor "undefined2 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x19e)" ( (binary_expression "(long)param_1 + 0x19e" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "uVar2 = *(ushort *)((long)param_1 + 0x19c);" (assignment_expression "uVar2 = *(ushort *)((long)param_1 + 0x19c)" identifier = (pointer_expression "*(ushort *)((long)param_1 + 0x19c)" * (cast_expression "(ushort *)((long)param_1 + 0x19c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x19c)" ( (binary_expression "(long)param_1 + 0x19c" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) })) (expression_statement "puVar5 = param_2;" (assignment_expression "puVar5 = param_2" identifier = identifier) ;) (while_statement "while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }" { (expression_statement "uVar8 = (ulong)uVar3;" (assignment_expression "uVar8 = (ulong)uVar3" identifier = (cast_expression "(ulong)uVar3" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (if_statement "if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }" if (parenthesized_expression "((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8))" ( (binary_expression "(int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)" (cast_expression "(int)(uint)uVar3" ( (type_descriptor "int" primitive_type) ) (cast_expression "(uint)uVar3" ( (type_descriptor "uint" type_identifier) ) identifier)) < (cast_expression "(int)((0x19 - (uint)uVar2) * 8)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((0x19 - (uint)uVar2) * 8)" ( (binary_expression "(0x19 - (uint)uVar2) * 8" (parenthesized_expression "(0x19 - (uint)uVar2)" ( (binary_expression "0x19 - (uint)uVar2" number_literal - (cast_expression "(uint)uVar2" ( (type_descriptor "uint" type_identifier) ) identifier)) )) * number_literal) )))) )) (compound_statement "{\n          sVar4 = uVar3 + 1;\n        }" { (expression_statement "sVar4 = uVar3 + 1;" (assignment_expression "sVar4 = uVar3 + 1" identifier = (binary_expression "uVar3 + 1" identifier + number_literal)) ;) }) (else_clause "else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }" else (compound_statement "{\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }" { (expression_statement "FUN_001534a0(param_1 + 1);" (call_expression "FUN_001534a0(param_1 + 1)" identifier (argument_list "(param_1 + 1)" ( (binary_expression "param_1 + 1" identifier + number_literal) ))) ;) (expression_statement "param_1[0x1a] = param_1[1];" (assignment_expression "param_1[0x1a] = param_1[1]" (subscript_expression "param_1[0x1a]" identifier [ number_literal ]) = (subscript_expression "param_1[1]" identifier [ number_literal ])) ;) (expression_statement "puVar6 = param_1 + 2;" (assignment_expression "puVar6 = param_1 + 2" identifier = (binary_expression "param_1 + 2" identifier + number_literal)) ;) (do_statement "do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);" do (compound_statement "{\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          }" { (expression_statement "puVar7 = puVar6 + 8;" (assignment_expression "puVar7 = puVar6 + 8" identifier = (binary_expression "puVar6 + 8" identifier + number_literal)) ;) (expression_statement "puVar6[0x19] = *puVar6;" (assignment_expression "puVar6[0x19] = *puVar6" (subscript_expression "puVar6[0x19]" identifier [ number_literal ]) = (pointer_expression "*puVar6" * identifier)) ;) (expression_statement "puVar6[0x1a] = puVar6[1];" (assignment_expression "puVar6[0x1a] = puVar6[1]" (subscript_expression "puVar6[0x1a]" identifier [ number_literal ]) = (subscript_expression "puVar6[1]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x1b] = puVar6[2];" (assignment_expression "puVar6[0x1b] = puVar6[2]" (subscript_expression "puVar6[0x1b]" identifier [ number_literal ]) = (subscript_expression "puVar6[2]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x1c] = puVar6[3];" (assignment_expression "puVar6[0x1c] = puVar6[3]" (subscript_expression "puVar6[0x1c]" identifier [ number_literal ]) = (subscript_expression "puVar6[3]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x1d] = puVar6[4];" (assignment_expression "puVar6[0x1d] = puVar6[4]" (subscript_expression "puVar6[0x1d]" identifier [ number_literal ]) = (subscript_expression "puVar6[4]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x1e] = puVar6[5];" (assignment_expression "puVar6[0x1e] = puVar6[5]" (subscript_expression "puVar6[0x1e]" identifier [ number_literal ]) = (subscript_expression "puVar6[5]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x1f] = puVar6[6];" (assignment_expression "puVar6[0x1f] = puVar6[6]" (subscript_expression "puVar6[0x1f]" identifier [ number_literal ]) = (subscript_expression "puVar6[6]" identifier [ number_literal ])) ;) (expression_statement "puVar6[0x20] = puVar6[7];" (assignment_expression "puVar6[0x20] = puVar6[7]" (subscript_expression "puVar6[0x20]" identifier [ number_literal ]) = (subscript_expression "puVar6[7]" identifier [ number_literal ])) ;) (expression_statement "puVar6 = puVar7;" (assignment_expression "puVar6 = puVar7" identifier = identifier) ;) }) while (parenthesized_expression "(param_1 + 0x1a != puVar7)" ( (binary_expression "param_1 + 0x1a != puVar7" (binary_expression "param_1 + 0x1a" identifier + number_literal) != identifier) )) ;) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" identifier = number_literal) ;) (expression_statement "sVar4 = 1;" (assignment_expression "sVar4 = 1" identifier = number_literal) ;) }))) (expression_statement "uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);" (assignment_expression "uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0)" identifier = (pointer_expression "*(undefined1 *)((long)param_1 + uVar8 + 0xd0)" * (cast_expression "(undefined1 *)((long)param_1 + uVar8 + 0xd0)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + uVar8 + 0xd0)" ( (binary_expression "(long)param_1 + uVar8 + 0xd0" (binary_expression "(long)param_1 + uVar8" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) + number_literal) ))))) ;) (expression_statement "*(short *)(param_1 + 0x33) = sVar4;" (assignment_expression "*(short *)(param_1 + 0x33) = sVar4" (pointer_expression "*(short *)(param_1 + 0x33)" * (cast_expression "(short *)(param_1 + 0x33)" ( (type_descriptor "short *" (sized_type_specifier "short" short) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x33)" ( (binary_expression "param_1 + 0x33" identifier + number_literal) )))) = identifier) ;) (expression_statement "*puVar5 = uVar1;" (assignment_expression "*puVar5 = uVar1" (pointer_expression "*puVar5" * identifier) = identifier) ;) (if_statement "if (param_2 + param_3 == puVar5 + 1) break;" if (parenthesized_expression "(param_2 + param_3 == puVar5 + 1)" ( (binary_expression "param_2 + param_3 == puVar5 + 1" (binary_expression "param_2 + param_3" identifier + identifier) == (binary_expression "puVar5 + 1" identifier + number_literal)) )) (break_statement "break;" break ;)) (expression_statement "uVar3 = (ushort)param_1[0x33];" (assignment_expression "uVar3 = (ushort)param_1[0x33]" identifier = (cast_expression "(ushort)param_1[0x33]" ( (type_descriptor "ushort" type_identifier) ) (subscript_expression "param_1[0x33]" identifier [ number_literal ]))) ;) (expression_statement "uVar2 = *(ushort *)((long)param_1 + 0x19c);" (assignment_expression "uVar2 = *(ushort *)((long)param_1 + 0x19c)" identifier = (pointer_expression "*(ushort *)((long)param_1 + 0x19c)" * (cast_expression "(ushort *)((long)param_1 + 0x19c)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_1 + 0x19c)" ( (binary_expression "(long)param_1 + 0x19c" (cast_expression "(long)param_1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ;) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" identifier = (binary_expression "puVar5 + 1" identifier + number_literal)) ;) })) (return_statement "return 0;" return number_literal ;) })) (expression_statement "crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);" (call_expression "crypt_argchk("out != NULL","src/hashes/sha3.c",0x104)" identifier (argument_list "("out != NULL","src/hashes/sha3.c",0x104)" ( (string_literal ""out != NULL"" " string_content ") , (string_literal ""src/hashes/sha3.c"" " string_content ") , number_literal ))) ;) })) (expression_statement "crypt_argchk("md != NULL","src/hashes/sha3.c",0x103);" (call_expression "crypt_argchk("md != NULL","src/hashes/sha3.c",0x103)" identifier (argument_list "("md != NULL","src/hashes/sha3.c",0x103)" ( (string_literal ""md != NULL"" " string_content ") , (string_literal ""src/hashes/sha3.c"" " string_content ") , number_literal ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier short) IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) == LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) + LIT) ]) = (binary_expression (binary_expression (subscript_expression IDENT [ (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) + LIT) ]) ^ (pointer_expression * IDENT)) ^ (binary_expression LIT << (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )) << LIT) ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression LIT - (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) + LIT) ]) = (binary_expression (subscript_expression IDENT [ (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression LIT - (cast_expression ( (type_descriptor TYPE) ) IDENT)) )))) + LIT) ]) ^ LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (binary_expression IDENT + LIT)) )) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) ))))) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) IDENT)) < (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT - (cast_expression ( (type_descriptor TYPE) ) IDENT)) )) * LIT) )))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) != IDENT) )) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }))) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier short) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT + IDENT) == (binary_expression IDENT + LIT)) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) })) (return_statement return LIT ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT ))) ;) })))
(function_definition "undefined8 sha3_shake_done(ulong *param_1,undefined1 *param_2,long param_3)\n\n{\n  undefined1 uVar1;\n  ushort uVar2;\n  ushort uVar3;\n  short sVar4;\n  undefined1 *puVar5;\n  ulong *puVar6;\n  ulong *puVar7;\n  ulong uVar8;\n  \n  if (param_3 == 0) {\n    return 0;\n  }\n  if (param_1 != (ulong *)0x0) {\n    if (param_2 != (undefined1 *)0x0) {\n      uVar3 = (ushort)param_1[0x33];\n      uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }\n      puVar5 = param_2;\n      while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }\n      return 0;\n    }\n                    \n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);\n  }\n                    \n  crypt_argchk("md != NULL","src/hashes/sha3.c",0x103);\n}" (type_identifier "undefined8") (function_declarator "sha3_shake_done(ulong *param_1,undefined1 *param_2,long param_3)" (identifier "sha3_shake_done") (parameter_list "(ulong *param_1,undefined1 *param_2,long param_3)" (( "(") (parameter_declaration "ulong *param_1" (type_identifier "ulong") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined1 *param_2" (type_identifier "undefined1") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) () ")"))) (compound_statement "{\n  undefined1 uVar1;\n  ushort uVar2;\n  ushort uVar3;\n  short sVar4;\n  undefined1 *puVar5;\n  ulong *puVar6;\n  ulong *puVar7;\n  ulong uVar8;\n  \n  if (param_3 == 0) {\n    return 0;\n  }\n  if (param_1 != (ulong *)0x0) {\n    if (param_2 != (undefined1 *)0x0) {\n      uVar3 = (ushort)param_1[0x33];\n      uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }\n      puVar5 = param_2;\n      while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }\n      return 0;\n    }\n                    \n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);\n  }\n                    \n  crypt_argchk("md != NULL","src/hashes/sha3.c",0x103);\n}" ({ "{") (declaration "undefined1 uVar1;" (type_identifier "undefined1") (identifier "uVar1") (; ";")) (declaration "ushort uVar2;" (type_identifier "ushort") (identifier "uVar2") (; ";")) (declaration "ushort uVar3;" (type_identifier "ushort") (identifier "uVar3") (; ";")) (declaration "short sVar4;" (sized_type_specifier "short" (short "short")) (identifier "sVar4") (; ";")) (declaration "undefined1 *puVar5;" (type_identifier "undefined1") (pointer_declarator "*puVar5" (* "*") (identifier "puVar5")) (; ";")) (declaration "ulong *puVar6;" (type_identifier "ulong") (pointer_declarator "*puVar6" (* "*") (identifier "puVar6")) (; ";")) (declaration "ulong *puVar7;" (type_identifier "ulong") (pointer_declarator "*puVar7" (* "*") (identifier "puVar7")) (; ";")) (declaration "ulong uVar8;" (type_identifier "ulong") (identifier "uVar8") (; ";")) (if_statement "if (param_3 == 0) {\n    return 0;\n  }" (if "if") (parenthesized_expression "(param_3 == 0)" (( "(") (binary_expression "param_3 == 0" (identifier "param_3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (param_1 != (ulong *)0x0) {\n    if (param_2 != (undefined1 *)0x0) {\n      uVar3 = (ushort)param_1[0x33];\n      uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }\n      puVar5 = param_2;\n      while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }\n      return 0;\n    }\n                    \n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);\n  }" (if "if") (parenthesized_expression "(param_1 != (ulong *)0x0)" (( "(") (binary_expression "param_1 != (ulong *)0x0" (identifier "param_1") (!= "!=") (cast_expression "(ulong *)0x0" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    if (param_2 != (undefined1 *)0x0) {\n      uVar3 = (ushort)param_1[0x33];\n      uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }\n      puVar5 = param_2;\n      while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }\n      return 0;\n    }\n                    \n    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);\n  }" ({ "{") (if_statement "if (param_2 != (undefined1 *)0x0) {\n      uVar3 = (ushort)param_1[0x33];\n      uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }\n      puVar5 = param_2;\n      while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }\n      return 0;\n    }" (if "if") (parenthesized_expression "(param_2 != (undefined1 *)0x0)" (( "(") (binary_expression "param_2 != (undefined1 *)0x0" (identifier "param_2") (!= "!=") (cast_expression "(undefined1 *)0x0" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      uVar3 = (ushort)param_1[0x33];\n      uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }\n      puVar5 = param_2;\n      while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }\n      return 0;\n    }" ({ "{") (expression_statement "uVar3 = (ushort)param_1[0x33];" (assignment_expression "uVar3 = (ushort)param_1[0x33]" (identifier "uVar3") (= "=") (cast_expression "(ushort)param_1[0x33]" (( "(") (type_descriptor "ushort" (type_identifier "ushort")) () ")") (subscript_expression "param_1[0x33]" (identifier "param_1") ([ "[") (number_literal "0x33") (] "]")))) (; ";")) (expression_statement "uVar2 = *(ushort *)((long)param_1 + 0x19c);" (assignment_expression "uVar2 = *(ushort *)((long)param_1 + 0x19c)" (identifier "uVar2") (= "=") (pointer_expression "*(ushort *)((long)param_1 + 0x19c)" (* "*") (cast_expression "(ushort *)((long)param_1 + 0x19c)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x19c)" (( "(") (binary_expression "(long)param_1 + 0x19c" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x19c")) () ")"))))) (; ";")) (if_statement "if (*(short *)((long)param_1 + 0x19e) == 0) {\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }" (if "if") (parenthesized_expression "(*(short *)((long)param_1 + 0x19e) == 0)" (( "(") (binary_expression "*(short *)((long)param_1 + 0x19e) == 0" (pointer_expression "*(short *)((long)param_1 + 0x19e)" (* "*") (cast_expression "(short *)((long)param_1 + 0x19e)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x19e)" (( "(") (binary_expression "(long)param_1 + 0x19e" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x19e")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);\n        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;\n        FUN_001534a0(param_1 + 1);\n        param_1[0x1a] = param_1[1];\n        puVar6 = param_1 + 2;\n        do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);\n        *(undefined2 *)(param_1 + 0x33) = 0;\n        uVar3 = 0;\n        *(undefined2 *)((long)param_1 + 0x19e) = 1;\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n      }" ({ "{") (expression_statement "param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3);" (assignment_expression "param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =\n             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3)" (subscript_expression "param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1]" (identifier "param_1") ([ "[") (binary_expression "(ulong)*(ushort *)((long)param_1 + 0x19a) + 1" (binary_expression "(ulong)*(ushort *)((long)param_1 + 0x19a)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (cast_expression "(ushort *)((long)param_1 + 0x19a)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x19a)" (( "(") (binary_expression "(long)param_1 + 0x19a" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x19a")) () ")")))) (+ "+") (number_literal "1")) (] "]")) (= "=") (binary_expression "param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^\n             0x1fL << (((byte)uVar3 & 7) << 3)" (binary_expression "param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1" (subscript_expression "param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1]" (identifier "param_1") ([ "[") (binary_expression "(ulong)*(ushort *)((long)param_1 + 0x19a) + 1" (binary_expression "(ulong)*(ushort *)((long)param_1 + 0x19a)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (cast_expression "(ushort *)((long)param_1 + 0x19a)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x19a)" (( "(") (binary_expression "(long)param_1 + 0x19a" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x19a")) () ")")))) (+ "+") (number_literal "1")) (] "]")) (^ "^") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (^ "^") (binary_expression "0x1fL << (((byte)uVar3 & 7) << 3)" (number_literal "0x1fL") (<< "<<") (parenthesized_expression "(((byte)uVar3 & 7) << 3)" (( "(") (binary_expression "((byte)uVar3 & 7) << 3" (parenthesized_expression "((byte)uVar3 & 7)" (( "(") (binary_expression "(byte)uVar3 & 7" (cast_expression "(byte)uVar3" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "uVar3")) (& "&") (number_literal "7")) () ")")) (<< "<<") (number_literal "3")) () ")"))))) (; ";")) (expression_statement "param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;" (assignment_expression "param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =\n             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000" (subscript_expression "param_1[(long)(int)(0x18 - (uint)uVar2) + 1]" (identifier "param_1") ([ "[") (binary_expression "(long)(int)(0x18 - (uint)uVar2) + 1" (cast_expression "(long)(int)(0x18 - (uint)uVar2)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (cast_expression "(int)(0x18 - (uint)uVar2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(0x18 - (uint)uVar2)" (( "(") (binary_expression "0x18 - (uint)uVar2" (number_literal "0x18") (- "-") (cast_expression "(uint)uVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar2"))) () ")")))) (+ "+") (number_literal "1")) (] "]")) (= "=") (binary_expression "param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000" (subscript_expression "param_1[(long)(int)(0x18 - (uint)uVar2) + 1]" (identifier "param_1") ([ "[") (binary_expression "(long)(int)(0x18 - (uint)uVar2) + 1" (cast_expression "(long)(int)(0x18 - (uint)uVar2)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (cast_expression "(int)(0x18 - (uint)uVar2)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(0x18 - (uint)uVar2)" (( "(") (binary_expression "0x18 - (uint)uVar2" (number_literal "0x18") (- "-") (cast_expression "(uint)uVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar2"))) () ")")))) (+ "+") (number_literal "1")) (] "]")) (^ "^") (number_literal "0x8000000000000000"))) (; ";")) (expression_statement "FUN_001534a0(param_1 + 1);" (call_expression "FUN_001534a0(param_1 + 1)" (identifier "FUN_001534a0") (argument_list "(param_1 + 1)" (( "(") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1")) () ")"))) (; ";")) (expression_statement "param_1[0x1a] = param_1[1];" (assignment_expression "param_1[0x1a] = param_1[1]" (subscript_expression "param_1[0x1a]" (identifier "param_1") ([ "[") (number_literal "0x1a") (] "]")) (= "=") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "puVar6 = param_1 + 2;" (assignment_expression "puVar6 = param_1 + 2" (identifier "puVar6") (= "=") (binary_expression "param_1 + 2" (identifier "param_1") (+ "+") (number_literal "2"))) (; ";")) (do_statement "do {\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        } while (puVar7 != param_1 + 0x1a);" (do "do") (compound_statement "{\n          puVar7 = puVar6 + 8;\n          puVar6[0x19] = *puVar6;\n          puVar6[0x1a] = puVar6[1];\n          puVar6[0x1b] = puVar6[2];\n          puVar6[0x1c] = puVar6[3];\n          puVar6[0x1d] = puVar6[4];\n          puVar6[0x1e] = puVar6[5];\n          puVar6[0x1f] = puVar6[6];\n          puVar6[0x20] = puVar6[7];\n          puVar6 = puVar7;\n        }" ({ "{") (expression_statement "puVar7 = puVar6 + 8;" (assignment_expression "puVar7 = puVar6 + 8" (identifier "puVar7") (= "=") (binary_expression "puVar6 + 8" (identifier "puVar6") (+ "+") (number_literal "8"))) (; ";")) (expression_statement "puVar6[0x19] = *puVar6;" (assignment_expression "puVar6[0x19] = *puVar6" (subscript_expression "puVar6[0x19]" (identifier "puVar6") ([ "[") (number_literal "0x19") (] "]")) (= "=") (pointer_expression "*puVar6" (* "*") (identifier "puVar6"))) (; ";")) (expression_statement "puVar6[0x1a] = puVar6[1];" (assignment_expression "puVar6[0x1a] = puVar6[1]" (subscript_expression "puVar6[0x1a]" (identifier "puVar6") ([ "[") (number_literal "0x1a") (] "]")) (= "=") (subscript_expression "puVar6[1]" (identifier "puVar6") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "puVar6[0x1b] = puVar6[2];" (assignment_expression "puVar6[0x1b] = puVar6[2]" (subscript_expression "puVar6[0x1b]" (identifier "puVar6") ([ "[") (number_literal "0x1b") (] "]")) (= "=") (subscript_expression "puVar6[2]" (identifier "puVar6") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "puVar6[0x1c] = puVar6[3];" (assignment_expression "puVar6[0x1c] = puVar6[3]" (subscript_expression "puVar6[0x1c]" (identifier "puVar6") ([ "[") (number_literal "0x1c") (] "]")) (= "=") (subscript_expression "puVar6[3]" (identifier "puVar6") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "puVar6[0x1d] = puVar6[4];" (assignment_expression "puVar6[0x1d] = puVar6[4]" (subscript_expression "puVar6[0x1d]" (identifier "puVar6") ([ "[") (number_literal "0x1d") (] "]")) (= "=") (subscript_expression "puVar6[4]" (identifier "puVar6") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "puVar6[0x1e] = puVar6[5];" (assignment_expression "puVar6[0x1e] = puVar6[5]" (subscript_expression "puVar6[0x1e]" (identifier "puVar6") ([ "[") (number_literal "0x1e") (] "]")) (= "=") (subscript_expression "puVar6[5]" (identifier "puVar6") ([ "[") (number_literal "5") (] "]"))) (; ";")) (expression_statement "puVar6[0x1f] = puVar6[6];" (assignment_expression "puVar6[0x1f] = puVar6[6]" (subscript_expression "puVar6[0x1f]" (identifier "puVar6") ([ "[") (number_literal "0x1f") (] "]")) (= "=") (subscript_expression "puVar6[6]" (identifier "puVar6") ([ "[") (number_literal "6") (] "]"))) (; ";")) (expression_statement "puVar6[0x20] = puVar6[7];" (assignment_expression "puVar6[0x20] = puVar6[7]" (subscript_expression "puVar6[0x20]" (identifier "puVar6") ([ "[") (number_literal "0x20") (] "]")) (= "=") (subscript_expression "puVar6[7]" (identifier "puVar6") ([ "[") (number_literal "7") (] "]"))) (; ";")) (expression_statement "puVar6 = puVar7;" (assignment_expression "puVar6 = puVar7" (identifier "puVar6") (= "=") (identifier "puVar7")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar7 != param_1 + 0x1a)" (( "(") (binary_expression "puVar7 != param_1 + 0x1a" (identifier "puVar7") (!= "!=") (binary_expression "param_1 + 0x1a" (identifier "param_1") (+ "+") (number_literal "0x1a"))) () ")")) (; ";")) (expression_statement "*(undefined2 *)(param_1 + 0x33) = 0;" (assignment_expression "*(undefined2 *)(param_1 + 0x33) = 0" (pointer_expression "*(undefined2 *)(param_1 + 0x33)" (* "*") (cast_expression "(undefined2 *)(param_1 + 0x33)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x33)" (( "(") (binary_expression "param_1 + 0x33" (identifier "param_1") (+ "+") (number_literal "0x33")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar3 = 0;" (assignment_expression "uVar3 = 0" (identifier "uVar3") (= "=") (number_literal "0")) (; ";")) (expression_statement "*(undefined2 *)((long)param_1 + 0x19e) = 1;" (assignment_expression "*(undefined2 *)((long)param_1 + 0x19e) = 1" (pointer_expression "*(undefined2 *)((long)param_1 + 0x19e)" (* "*") (cast_expression "(undefined2 *)((long)param_1 + 0x19e)" (( "(") (type_descriptor "undefined2 *" (type_identifier "undefined2") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x19e)" (( "(") (binary_expression "(long)param_1 + 0x19e" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x19e")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "uVar2 = *(ushort *)((long)param_1 + 0x19c);" (assignment_expression "uVar2 = *(ushort *)((long)param_1 + 0x19c)" (identifier "uVar2") (= "=") (pointer_expression "*(ushort *)((long)param_1 + 0x19c)" (* "*") (cast_expression "(ushort *)((long)param_1 + 0x19c)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x19c)" (( "(") (binary_expression "(long)param_1 + 0x19c" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x19c")) () ")"))))) (; ";")) (} "}"))) (expression_statement "puVar5 = param_2;" (assignment_expression "puVar5 = param_2" (identifier "puVar5") (= "=") (identifier "param_2")) (; ";")) (while_statement "while( true ) {\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n        uVar8 = (ulong)uVar3;\n        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }\n        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);\n        *(short *)(param_1 + 0x33) = sVar4;\n        *puVar5 = uVar1;\n        if (param_2 + param_3 == puVar5 + 1) break;\n        uVar3 = (ushort)param_1[0x33];\n        uVar2 = *(ushort *)((long)param_1 + 0x19c);\n        puVar5 = puVar5 + 1;\n      }" ({ "{") (expression_statement "uVar8 = (ulong)uVar3;" (assignment_expression "uVar8 = (ulong)uVar3" (identifier "uVar8") (= "=") (cast_expression "(ulong)uVar3" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar3"))) (; ";")) (if_statement "if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {\n          sVar4 = uVar3 + 1;\n        }\n        else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }" (if "if") (parenthesized_expression "((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8))" (( "(") (binary_expression "(int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)" (cast_expression "(int)(uint)uVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(uint)uVar3" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar3"))) (< "<") (cast_expression "(int)((0x19 - (uint)uVar2) * 8)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((0x19 - (uint)uVar2) * 8)" (( "(") (binary_expression "(0x19 - (uint)uVar2) * 8" (parenthesized_expression "(0x19 - (uint)uVar2)" (( "(") (binary_expression "0x19 - (uint)uVar2" (number_literal "0x19") (- "-") (cast_expression "(uint)uVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar2"))) () ")")) (* "*") (number_literal "8")) () ")")))) () ")")) (compound_statement "{\n          sVar4 = uVar3 + 1;\n        }" ({ "{") (expression_statement "sVar4 = uVar3 + 1;" (assignment_expression "sVar4 = uVar3 + 1" (identifier "sVar4") (= "=") (binary_expression "uVar3 + 1" (identifier "uVar3") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (else_clause "else {\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }" (else "else") (compound_statement "{\n          FUN_001534a0(param_1 + 1);\n          param_1[0x1a] = param_1[1];\n          puVar6 = param_1 + 2;\n          do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);\n          uVar8 = 0;\n          sVar4 = 1;\n        }" ({ "{") (expression_statement "FUN_001534a0(param_1 + 1);" (call_expression "FUN_001534a0(param_1 + 1)" (identifier "FUN_001534a0") (argument_list "(param_1 + 1)" (( "(") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1")) () ")"))) (; ";")) (expression_statement "param_1[0x1a] = param_1[1];" (assignment_expression "param_1[0x1a] = param_1[1]" (subscript_expression "param_1[0x1a]" (identifier "param_1") ([ "[") (number_literal "0x1a") (] "]")) (= "=") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "puVar6 = param_1 + 2;" (assignment_expression "puVar6 = param_1 + 2" (identifier "puVar6") (= "=") (binary_expression "param_1 + 2" (identifier "param_1") (+ "+") (number_literal "2"))) (; ";")) (do_statement "do {\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          } while (param_1 + 0x1a != puVar7);" (do "do") (compound_statement "{\n            puVar7 = puVar6 + 8;\n            puVar6[0x19] = *puVar6;\n            puVar6[0x1a] = puVar6[1];\n            puVar6[0x1b] = puVar6[2];\n            puVar6[0x1c] = puVar6[3];\n            puVar6[0x1d] = puVar6[4];\n            puVar6[0x1e] = puVar6[5];\n            puVar6[0x1f] = puVar6[6];\n            puVar6[0x20] = puVar6[7];\n            puVar6 = puVar7;\n          }" ({ "{") (expression_statement "puVar7 = puVar6 + 8;" (assignment_expression "puVar7 = puVar6 + 8" (identifier "puVar7") (= "=") (binary_expression "puVar6 + 8" (identifier "puVar6") (+ "+") (number_literal "8"))) (; ";")) (expression_statement "puVar6[0x19] = *puVar6;" (assignment_expression "puVar6[0x19] = *puVar6" (subscript_expression "puVar6[0x19]" (identifier "puVar6") ([ "[") (number_literal "0x19") (] "]")) (= "=") (pointer_expression "*puVar6" (* "*") (identifier "puVar6"))) (; ";")) (expression_statement "puVar6[0x1a] = puVar6[1];" (assignment_expression "puVar6[0x1a] = puVar6[1]" (subscript_expression "puVar6[0x1a]" (identifier "puVar6") ([ "[") (number_literal "0x1a") (] "]")) (= "=") (subscript_expression "puVar6[1]" (identifier "puVar6") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "puVar6[0x1b] = puVar6[2];" (assignment_expression "puVar6[0x1b] = puVar6[2]" (subscript_expression "puVar6[0x1b]" (identifier "puVar6") ([ "[") (number_literal "0x1b") (] "]")) (= "=") (subscript_expression "puVar6[2]" (identifier "puVar6") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "puVar6[0x1c] = puVar6[3];" (assignment_expression "puVar6[0x1c] = puVar6[3]" (subscript_expression "puVar6[0x1c]" (identifier "puVar6") ([ "[") (number_literal "0x1c") (] "]")) (= "=") (subscript_expression "puVar6[3]" (identifier "puVar6") ([ "[") (number_literal "3") (] "]"))) (; ";")) (expression_statement "puVar6[0x1d] = puVar6[4];" (assignment_expression "puVar6[0x1d] = puVar6[4]" (subscript_expression "puVar6[0x1d]" (identifier "puVar6") ([ "[") (number_literal "0x1d") (] "]")) (= "=") (subscript_expression "puVar6[4]" (identifier "puVar6") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "puVar6[0x1e] = puVar6[5];" (assignment_expression "puVar6[0x1e] = puVar6[5]" (subscript_expression "puVar6[0x1e]" (identifier "puVar6") ([ "[") (number_literal "0x1e") (] "]")) (= "=") (subscript_expression "puVar6[5]" (identifier "puVar6") ([ "[") (number_literal "5") (] "]"))) (; ";")) (expression_statement "puVar6[0x1f] = puVar6[6];" (assignment_expression "puVar6[0x1f] = puVar6[6]" (subscript_expression "puVar6[0x1f]" (identifier "puVar6") ([ "[") (number_literal "0x1f") (] "]")) (= "=") (subscript_expression "puVar6[6]" (identifier "puVar6") ([ "[") (number_literal "6") (] "]"))) (; ";")) (expression_statement "puVar6[0x20] = puVar6[7];" (assignment_expression "puVar6[0x20] = puVar6[7]" (subscript_expression "puVar6[0x20]" (identifier "puVar6") ([ "[") (number_literal "0x20") (] "]")) (= "=") (subscript_expression "puVar6[7]" (identifier "puVar6") ([ "[") (number_literal "7") (] "]"))) (; ";")) (expression_statement "puVar6 = puVar7;" (assignment_expression "puVar6 = puVar7" (identifier "puVar6") (= "=") (identifier "puVar7")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_1 + 0x1a != puVar7)" (( "(") (binary_expression "param_1 + 0x1a != puVar7" (binary_expression "param_1 + 0x1a" (identifier "param_1") (+ "+") (number_literal "0x1a")) (!= "!=") (identifier "puVar7")) () ")")) (; ";")) (expression_statement "uVar8 = 0;" (assignment_expression "uVar8 = 0" (identifier "uVar8") (= "=") (number_literal "0")) (; ";")) (expression_statement "sVar4 = 1;" (assignment_expression "sVar4 = 1" (identifier "sVar4") (= "=") (number_literal "1")) (; ";")) (} "}")))) (expression_statement "uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);" (assignment_expression "uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0)" (identifier "uVar1") (= "=") (pointer_expression "*(undefined1 *)((long)param_1 + uVar8 + 0xd0)" (* "*") (cast_expression "(undefined1 *)((long)param_1 + uVar8 + 0xd0)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + uVar8 + 0xd0)" (( "(") (binary_expression "(long)param_1 + uVar8 + 0xd0" (binary_expression "(long)param_1 + uVar8" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (identifier "uVar8")) (+ "+") (number_literal "0xd0")) () ")"))))) (; ";")) (expression_statement "*(short *)(param_1 + 0x33) = sVar4;" (assignment_expression "*(short *)(param_1 + 0x33) = sVar4" (pointer_expression "*(short *)(param_1 + 0x33)" (* "*") (cast_expression "(short *)(param_1 + 0x33)" (( "(") (type_descriptor "short *" (sized_type_specifier "short" (short "short")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x33)" (( "(") (binary_expression "param_1 + 0x33" (identifier "param_1") (+ "+") (number_literal "0x33")) () ")")))) (= "=") (identifier "sVar4")) (; ";")) (expression_statement "*puVar5 = uVar1;" (assignment_expression "*puVar5 = uVar1" (pointer_expression "*puVar5" (* "*") (identifier "puVar5")) (= "=") (identifier "uVar1")) (; ";")) (if_statement "if (param_2 + param_3 == puVar5 + 1) break;" (if "if") (parenthesized_expression "(param_2 + param_3 == puVar5 + 1)" (( "(") (binary_expression "param_2 + param_3 == puVar5 + 1" (binary_expression "param_2 + param_3" (identifier "param_2") (+ "+") (identifier "param_3")) (== "==") (binary_expression "puVar5 + 1" (identifier "puVar5") (+ "+") (number_literal "1"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar3 = (ushort)param_1[0x33];" (assignment_expression "uVar3 = (ushort)param_1[0x33]" (identifier "uVar3") (= "=") (cast_expression "(ushort)param_1[0x33]" (( "(") (type_descriptor "ushort" (type_identifier "ushort")) () ")") (subscript_expression "param_1[0x33]" (identifier "param_1") ([ "[") (number_literal "0x33") (] "]")))) (; ";")) (expression_statement "uVar2 = *(ushort *)((long)param_1 + 0x19c);" (assignment_expression "uVar2 = *(ushort *)((long)param_1 + 0x19c)" (identifier "uVar2") (= "=") (pointer_expression "*(ushort *)((long)param_1 + 0x19c)" (* "*") (cast_expression "(ushort *)((long)param_1 + 0x19c)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_1 + 0x19c)" (( "(") (binary_expression "(long)param_1 + 0x19c" (cast_expression "(long)param_1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_1")) (+ "+") (number_literal "0x19c")) () ")"))))) (; ";")) (expression_statement "puVar5 = puVar5 + 1;" (assignment_expression "puVar5 = puVar5 + 1" (identifier "puVar5") (= "=") (binary_expression "puVar5 + 1" (identifier "puVar5") (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);" (call_expression "crypt_argchk("out != NULL","src/hashes/sha3.c",0x104)" (identifier "crypt_argchk") (argument_list "("out != NULL","src/hashes/sha3.c",0x104)" (( "(") (string_literal ""out != NULL"" (" """) (string_content "out != NULL") (" """)) (, ",") (string_literal ""src/hashes/sha3.c"" (" """) (string_content "src/hashes/sha3.c") (" """)) (, ",") (number_literal "0x104") () ")"))) (; ";")) (} "}"))) (expression_statement "crypt_argchk("md != NULL","src/hashes/sha3.c",0x103);" (call_expression "crypt_argchk("md != NULL","src/hashes/sha3.c",0x103)" (identifier "crypt_argchk") (argument_list "("md != NULL","src/hashes/sha3.c",0x103)" (( "(") (string_literal ""md != NULL"" (" """) (string_content "md != NULL") (" """)) (, ",") (string_literal ""src/hashes/sha3.c"" (" """) (string_content "src/hashes/sha3.c") (" """)) (, ",") (number_literal "0x103") () ")"))) (; ";")) (} "}")))

int function_1(type_1 *var_2,type_2 *var_3,type_3 var_1)

{
  type_3 *puVar1;
  type_2 uVar2;
  type_4 var_8;
  type_2 *var_10;
  char *var_6;
  char *var_7;
  type_5 var_4;
  type_3 var_9;
  
  if (var_1 == 0) {
    return 0;
  }
  if (var_2 != (type_1 *)0x0) {
    if (var_3 != (type_2 *)0x0) {
      var_8 = (var_2->sha3).byte_index;
      var_4 = (type_5)(var_2->sha3).capacity_words;
      if ((var_2->sha3).xof_flag == 0) {
        *(type_3 *)((long)var_2 + (type_3)(var_2->sha3).word_index * 8 + 8) =
             *(type_3 *)((long)var_2 + (type_3)(var_2->sha3).word_index * 8 + 8) ^ (var_2->chc).length ^
             0x1fL << (((type_6)var_8 & 7) << 3);
        puVar1 = (type_3 *)((long)var_2 + (long)(int)(0x18 - var_4) * 8 + 8);
        *puVar1 = *puVar1 ^ 0x8000000000000000;
        var_5((var_2->whirlpool).state);
        *(type_7 *)(var_2->dummy + 0xd0) = (var_2->whirlpool).state[0];
        var_6 = var_2->dummy + 0x10;
        do {
          var_7 = var_6 + 0x40;
          *(type_8 *)(var_6 + 200) = *(type_8 *)var_6;
          *(type_8 *)(var_6 + 0xd0) = *(type_8 *)(var_6 + 8);
          *(type_8 *)(var_6 + 0xd8) = *(type_8 *)(var_6 + 0x10);
          *(type_8 *)(var_6 + 0xe0) = *(type_8 *)(var_6 + 0x18);
          *(type_8 *)(var_6 + 0xe8) = *(type_8 *)(var_6 + 0x20);
          *(type_8 *)(var_6 + 0xf0) = *(type_8 *)(var_6 + 0x28);
          *(type_8 *)(var_6 + 0xf8) = *(type_8 *)(var_6 + 0x30);
          *(type_8 *)(var_6 + 0x100) = *(type_8 *)(var_6 + 0x38);
          var_6 = var_7;
        } while (var_7 != var_2->dummy + 0xd0);
        (var_2->sha3).byte_index = 0;
        var_8 = 0;
        (var_2->sha3).xof_flag = 1;
        var_4 = (type_5)(var_2->sha3).capacity_words;
      }
      var_10 = var_3;
      while( true ) {
        var_9 = (type_3)(type_5)var_8;
        if ((int)(type_5)var_8 < (int)((0x19 - var_4) * 8)) {
          var_8 = var_8 + 1;
        }
        else {
          var_5((var_2->whirlpool).state);
          *(type_7 *)(var_2->dummy + 0xd0) = (var_2->whirlpool).state[0];
          var_6 = var_2->dummy + 0x10;
          do {
            var_7 = var_6 + 0x40;
            *(type_8 *)(var_6 + 200) = *(type_8 *)var_6;
            *(type_8 *)(var_6 + 0xd0) = *(type_8 *)(var_6 + 8);
            *(type_8 *)(var_6 + 0xd8) = *(type_8 *)(var_6 + 0x10);
            *(type_8 *)(var_6 + 0xe0) = *(type_8 *)(var_6 + 0x18);
            *(type_8 *)(var_6 + 0xe8) = *(type_8 *)(var_6 + 0x20);
            *(type_8 *)(var_6 + 0xf0) = *(type_8 *)(var_6 + 0x28);
            *(type_8 *)(var_6 + 0xf8) = *(type_8 *)(var_6 + 0x30);
            *(type_8 *)(var_6 + 0x100) = *(type_8 *)(var_6 + 0x38);
            var_6 = var_7;
          } while (var_2->dummy + 0xd0 != var_7);
          var_9 = 0;
          var_8 = 1;
        }
        uVar2 = var_2->dummy[var_9 + 0xd0];
        (var_2->sha3).byte_index = var_8;
        *var_10 = uVar2;
        if (var_3 + var_1 == var_10 + 1) break;
        var_8 = (var_2->sha3).byte_index;
        var_4 = (type_5)(var_2->sha3).capacity_words;
        var_10 = var_10 + 1;
      }
      return 0;
    }
                    /* WARNING: Subroutine does not return */
    var_11("out != NULL","src/hashes/sha3.c",0x104);
  }
                    /* WARNING: Subroutine does not return */
  var_11("md != NULL","src/hashes/sha3.c",0x103);
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (sized_type_specifier) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))) right: (number_literal))) right: (binary_expression left: (binary_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))) right: (number_literal))) right: (pointer_expression argument: (identifier))) right: (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal))))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))))) right: (number_literal))) right: (binary_expression left: (subscript_expression argument: (identifier) index: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))))) right: (number_literal))) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))) right: (number_literal)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (subscript_expression argument: (identifier) index: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (identifier)) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (identifier))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (binary_expression left: (identifier) right: (number_literal)))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (return_statement (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (string_literal (string_content)) (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (string_literal (string_content)) (number_literal)))))))

undefined8 MASKED(ulong *param_1,undefined1 *param_2,long param_3)

{
  undefined1 uVar1;
  ushort uVar2;
  ushort uVar3;
  short sVar4;
  undefined1 *puVar5;
  ulong *puVar6;
  ulong *puVar7;
  ulong uVar8;
  
  if (param_3 == 0) {
    return 0;
  }
  if (param_1 != (ulong *)0x0) {
    if (param_2 != (undefined1 *)0x0) {
      uVar3 = (ushort)param_1[0x33];
      uVar2 = *(ushort *)((long)param_1 + 0x19c);
      if (*(short *)((long)param_1 + 0x19e) == 0) {
        param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] =
             param_1[(ulong)*(ushort *)((long)param_1 + 0x19a) + 1] ^ *param_1 ^
             0x1fL << (((byte)uVar3 & 7) << 3);
        param_1[(long)(int)(0x18 - (uint)uVar2) + 1] =
             param_1[(long)(int)(0x18 - (uint)uVar2) + 1] ^ 0x8000000000000000;
        FUN_001534a0(param_1 + 1);
        param_1[0x1a] = param_1[1];
        puVar6 = param_1 + 2;
        do {
          puVar7 = puVar6 + 8;
          puVar6[0x19] = *puVar6;
          puVar6[0x1a] = puVar6[1];
          puVar6[0x1b] = puVar6[2];
          puVar6[0x1c] = puVar6[3];
          puVar6[0x1d] = puVar6[4];
          puVar6[0x1e] = puVar6[5];
          puVar6[0x1f] = puVar6[6];
          puVar6[0x20] = puVar6[7];
          puVar6 = puVar7;
        } while (puVar7 != param_1 + 0x1a);
        *(undefined2 *)(param_1 + 0x33) = 0;
        uVar3 = 0;
        *(undefined2 *)((long)param_1 + 0x19e) = 1;
        uVar2 = *(ushort *)((long)param_1 + 0x19c);
      }
      puVar5 = param_2;
      while( true ) {
        uVar8 = (ulong)uVar3;
        if ((int)(uint)uVar3 < (int)((0x19 - (uint)uVar2) * 8)) {
          sVar4 = uVar3 + 1;
        }
        else {
          FUN_001534a0(param_1 + 1);
          param_1[0x1a] = param_1[1];
          puVar6 = param_1 + 2;
          do {
            puVar7 = puVar6 + 8;
            puVar6[0x19] = *puVar6;
            puVar6[0x1a] = puVar6[1];
            puVar6[0x1b] = puVar6[2];
            puVar6[0x1c] = puVar6[3];
            puVar6[0x1d] = puVar6[4];
            puVar6[0x1e] = puVar6[5];
            puVar6[0x1f] = puVar6[6];
            puVar6[0x20] = puVar6[7];
            puVar6 = puVar7;
          } while (param_1 + 0x1a != puVar7);
          uVar8 = 0;
          sVar4 = 1;
        }
        uVar1 = *(undefined1 *)((long)param_1 + uVar8 + 0xd0);
        *(short *)(param_1 + 0x33) = sVar4;
        *puVar5 = uVar1;
        if (param_2 + param_3 == puVar5 + 1) break;
        uVar3 = (ushort)param_1[0x33];
        uVar2 = *(ushort *)((long)param_1 + 0x19c);
        puVar5 = puVar5 + 1;
      }
      return 0;
    }
                    /* WARNING: Subroutine does not return */
    crypt_argchk("out != NULL","src/hashes/sha3.c",0x104);
  }
                    /* WARNING: Subroutine does not return */
  crypt_argchk("md != NULL","src/hashes/sha3.c",0x103);
}

