
/* WARNING: Removing unreachable block (ram,0x0001aae8) */

undefined8 __umoddi3(uint param_1,uint param_2,uint param_3,uint param_4)

{
  ulonglong uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  
  if (param_3 == 0) {
    uVar8 = LZCOUNT(param_4);
    if (param_1 < param_4) {
      uVar2 = param_4 >> 0x10;
      if (uVar8 != 0) {
        uVar2 = param_2 >> (-uVar8 & 0x1f);
        param_4 = param_4 << (uVar8 & 0x1f);
        param_2 = param_2 << (uVar8 & 0x1f);
        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);
        uVar2 = param_4 >> 0x10;
      }
      if (uVar2 == 0) {
        trap(7);
      }
      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);
      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;
      if (uVar4 < uVar6) {
        uVar4 = uVar4 + param_4;
        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {
          uVar4 = uVar4 + param_4;
        }
      }
      if (uVar2 == 0) {
        trap(7);
      }
      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);
      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;
      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {
        uVar2 = uVar2 + param_4;
      }
      param_1 = 0;
      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);
    }
    else {
      if (param_4 == 0) {
        trap(7);
        param_4 = 1 / 0;
        uVar8 = LZCOUNT(param_4);
      }
      uVar2 = param_1 - param_4;
      if (uVar8 == 0) {
        uVar6 = param_4 >> 0x10;
        uVar4 = param_4 & 0xffff;
      }
      else {
        param_4 = param_4 << (uVar8 & 0x1f);
        uVar6 = param_4 >> 0x10;
        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);
        uVar4 = param_4 & 0xffff;
        if (uVar6 == 0) {
          trap(7);
        }
        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);
        param_2 = param_2 << (uVar8 & 0x1f);
        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);
        uVar7 = (uVar2 / uVar6) * uVar4;
        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;
        if (uVar2 < uVar7) {
          uVar2 = uVar2 + param_4;
          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {
            uVar2 = uVar2 + param_4;
          }
        }
        if (uVar6 == 0) {
          trap(7);
        }
        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;
        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;
        if (uVar2 < uVar5) {
          uVar2 = uVar2 + param_4;
          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {
            uVar2 = uVar2 + param_4;
          }
        }
        uVar2 = uVar2 - uVar5;
      }
      if (uVar6 == 0) {
        trap(7);
      }
      uVar3 = (uVar2 / uVar6) * uVar4;
      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;
      if (uVar2 < uVar3) {
        uVar2 = uVar2 + param_4;
        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {
          uVar2 = uVar2 + param_4;
        }
      }
      if (uVar6 == 0) {
        trap(7);
      }
      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;
      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;
      if (uVar2 < uVar4) {
        uVar2 = uVar2 + param_4;
        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {
          uVar2 = uVar2 + param_4;
        }
      }
      param_1 = 0;
      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);
    }
  }
  else if (param_3 <= param_1) {
    uVar8 = LZCOUNT(param_3);
    if (uVar8 != 0) {
      uVar6 = 0x20 - uVar8;
      uVar2 = param_1 >> (uVar6 & 0x1f);
      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);
      uVar4 = uVar3 >> 0x10;
      if (uVar4 == 0) {
        trap(7);
      }
      uVar10 = uVar2 / uVar4;
      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);
      param_4 = param_4 << (uVar8 & 0x1f);
      uVar7 = (uVar3 & 0xffff) * uVar10;
      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;
      param_2 = param_2 << (uVar8 & 0x1f);
      uVar2 = uVar10;
      if (uVar5 < uVar7) {
        uVar5 = uVar5 + uVar3;
        uVar2 = uVar10 - 1;
        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {
          uVar2 = uVar10 - 2;
          uVar5 = uVar5 + uVar3;
        }
      }
      if (uVar4 == 0) {
        trap(7);
      }
      uVar11 = (uVar5 - uVar7) / uVar4;
      uVar10 = (uVar3 & 0xffff) * uVar11;
      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;
      uVar4 = uVar11;
      if (uVar7 < uVar10) {
        uVar7 = uVar7 + uVar3;
        uVar4 = uVar11 - 1;
        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {
          uVar4 = uVar11 - 2;
          uVar7 = uVar7 + uVar3;
        }
      }
      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;
      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {
        param_4 = (uint)uVar1 - param_4;
        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);
      }
      uVar4 = param_2 - (int)uVar1;
      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);
      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));
    }
    if ((param_3 < param_1) || (param_4 <= param_2)) {
      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);
    }
  }
  return CONCAT44(param_1,param_2);
}



/* WARNING: Removing unreachable block (ram,0x0001aae8) */

undefined8 FUN_0001a700(uint param_1,uint param_2,uint param_3,uint param_4)

{
  ulonglong uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  
  if (param_3 == 0) {
    uVar8 = LZCOUNT(param_4);
    if (param_1 < param_4) {
      uVar2 = param_4 >> 0x10;
      if (uVar8 != 0) {
        uVar2 = param_2 >> (-uVar8 & 0x1f);
        param_4 = param_4 << (uVar8 & 0x1f);
        param_2 = param_2 << (uVar8 & 0x1f);
        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);
        uVar2 = param_4 >> 0x10;
      }
      if (uVar2 == 0) {
        trap(7);
      }
      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);
      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;
      if (uVar4 < uVar6) {
        uVar4 = uVar4 + param_4;
        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {
          uVar4 = uVar4 + param_4;
        }
      }
      if (uVar2 == 0) {
        trap(7);
      }
      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);
      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;
      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {
        uVar2 = uVar2 + param_4;
      }
      param_1 = 0;
      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);
    }
    else {
      if (param_4 == 0) {
        trap(7);
        param_4 = 1 / 0;
        uVar8 = LZCOUNT(param_4);
      }
      uVar2 = param_1 - param_4;
      if (uVar8 == 0) {
        uVar6 = param_4 >> 0x10;
        uVar4 = param_4 & 0xffff;
      }
      else {
        param_4 = param_4 << (uVar8 & 0x1f);
        uVar6 = param_4 >> 0x10;
        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);
        uVar4 = param_4 & 0xffff;
        if (uVar6 == 0) {
          trap(7);
        }
        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);
        param_2 = param_2 << (uVar8 & 0x1f);
        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);
        uVar7 = (uVar2 / uVar6) * uVar4;
        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;
        if (uVar2 < uVar7) {
          uVar2 = uVar2 + param_4;
          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {
            uVar2 = uVar2 + param_4;
          }
        }
        if (uVar6 == 0) {
          trap(7);
        }
        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;
        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;
        if (uVar2 < uVar5) {
          uVar2 = uVar2 + param_4;
          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {
            uVar2 = uVar2 + param_4;
          }
        }
        uVar2 = uVar2 - uVar5;
      }
      if (uVar6 == 0) {
        trap(7);
      }
      uVar3 = (uVar2 / uVar6) * uVar4;
      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;
      if (uVar2 < uVar3) {
        uVar2 = uVar2 + param_4;
        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {
          uVar2 = uVar2 + param_4;
        }
      }
      if (uVar6 == 0) {
        trap(7);
      }
      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;
      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;
      if (uVar2 < uVar4) {
        uVar2 = uVar2 + param_4;
        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {
          uVar2 = uVar2 + param_4;
        }
      }
      param_1 = 0;
      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);
    }
  }
  else if (param_3 <= param_1) {
    uVar8 = LZCOUNT(param_3);
    if (uVar8 != 0) {
      uVar6 = 0x20 - uVar8;
      uVar2 = param_1 >> (uVar6 & 0x1f);
      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);
      uVar4 = uVar3 >> 0x10;
      if (uVar4 == 0) {
        trap(7);
      }
      uVar10 = uVar2 / uVar4;
      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);
      param_4 = param_4 << (uVar8 & 0x1f);
      uVar7 = (uVar3 & 0xffff) * uVar10;
      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;
      param_2 = param_2 << (uVar8 & 0x1f);
      uVar2 = uVar10;
      if (uVar5 < uVar7) {
        uVar5 = uVar5 + uVar3;
        uVar2 = uVar10 - 1;
        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {
          uVar2 = uVar10 - 2;
          uVar5 = uVar5 + uVar3;
        }
      }
      if (uVar4 == 0) {
        trap(7);
      }
      uVar11 = (uVar5 - uVar7) / uVar4;
      uVar10 = (uVar3 & 0xffff) * uVar11;
      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;
      uVar4 = uVar11;
      if (uVar7 < uVar10) {
        uVar7 = uVar7 + uVar3;
        uVar4 = uVar11 - 1;
        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {
          uVar4 = uVar11 - 2;
          uVar7 = uVar7 + uVar3;
        }
      }
      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;
      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {
        param_4 = (uint)uVar1 - param_4;
        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);
      }
      uVar4 = param_2 - (int)uVar1;
      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);
      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));
    }
    if ((param_3 < param_1) || (param_4 <= param_2)) {
      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);
    }
  }
  return CONCAT44(param_1,param_2);
}


or t2,a1,zero
or v0,a0,zero
bne a2,zero,0x0001a8b8
_or t0,a0,zero
sltu v0,a0,a3
beq v0,zero,0x0001a7f0
_clz t1,a3
beq t1,zero,0x0001a740
_srl v0,a3,0x10
subu v0,zero,t1
sllv a2,a0,t1
srlv t0,a1,v0
sllv a3,a3,t1
sllv t2,a1,t1
or t0,t0,a2
srl v0,a3,0x10
andi a1,a3,0xffff
teq v0,zero
divu t0,v0
srl a0,t2,0x10
mflo t0
mfhi a2
mul t0,t0,a1
sll a2,a2,0x10
or a0,a2,a0
sltu v1,a0,t0
beq v1,zero,0x0001a78c
_nop
addu a0,a0,a3
sltu v1,a0,a3
bne v1,zero,0x0001a78c
_sltu v1,a0,t0
beq v1,zero,0x0001a78c
_nop
addu a0,a0,a3
subu a0,a0,t0
andi t2,t2,0xffff
teq v0,zero
divu a0,v0
mflo v1
mfhi a0
mul v1,v1,a1
sll a0,a0,0x10
or a0,a0,t2
sltu v0,a0,v1
beq v0,zero,0x0001a7dc
_nop
addu a0,a0,a3
sltu v0,a0,a3
bne v0,zero,0x0001a7dc
_nop
sltu v0,a0,v1
beq v0,zero,0x0001a7dc
_nop
addu a0,a0,a3
subu v1,a0,v1
or v0,zero,zero
srlv v1,v1,t1
jr ra
_nop
bne a3,zero,0x0001a808
_li v0,0x1
teq a3,zero
divu v0,a3
mflo a3
clz t1,a3
bne t1,zero,0x0001aa24
_subu t0,a0,a3
srl v1,a3,0x10
andi v0,a3,0xffff
teq v1,zero
divu t0,v1
srl a2,t2,0x10
mflo a0
mfhi t0
mul a1,a0,v0
sll t0,t0,0x10
or a2,t0,a2
sltu a0,a2,a1
beq a0,zero,0x0001a85c
_nop
addu a2,a2,a3
sltu a0,a2,a3
bne a0,zero,0x0001a85c
_sltu a0,a2,a1
bne a0,zero,0x0001ab18
_nop
subu a2,a2,a1
andi t2,t2,0xffff
teq v1,zero
divu a2,v1
mflo v1
mfhi a2
mul v1,v1,v0
sll v0,a2,0x10
or v0,v0,t2
sltu a0,v0,v1
beq a0,zero,0x0001a8a8
_nop
addu v0,v0,a3
sltu a0,v0,a3
bne a0,zero,0x0001a8a8
_sltu a0,v0,v1
beq a0,zero,0x0001a8a8
_nop
addu v0,v0,a3
subu v1,v0,v1
or v0,zero,zero
b 0x0001a7e8
_srlv v1,v1,t1
sltu t0,a0,a2
bne t0,zero,0x0001a7e8
_or v1,a1,zero
clz t4,a2
bne t4,zero,0x0001a8fc
_li t5,0x20
sltu t0,a2,a0
bne t0,zero,0x0001a8e4
_sltu t0,a1,a3
bne t0,zero,0x0001a7e8
_nop
subu v1,a1,a3
subu a0,a0,a2
sltu v0,a1,v1
subu v0,a0,v0
jr ra
_nop
sllv a2,a2,t4
subu t5,t5,t4
sllv t1,a0,t4
srlv t6,a3,t5
srlv a0,a0,t5
or t6,t6,a2
srl t0,t6,0x10
srlv t3,a1,t5
teq t0,zero
divu a0,t0
andi a2,t6,0xffff
or t3,t3,t1
srl t7,t3,0x10
sllv a3,a3,t4
mflo v0
mfhi a0
mul t1,a2,v0
sll t2,a0,0x10
or t2,t2,t7
sltu a0,t2,t1
beq a0,zero,0x0001a978
_sllv v1,a1,t4
addu t2,t2,t6
sltu a0,t2,t6
bne a0,zero,0x0001ab10
_addiu a1,v0,-0x1
sltu a0,t2,t1
beq a0,zero,0x0001ab10
_nop
addiu v0,v0,-0x2
addu t2,t2,t6
subu t1,t2,t1
andi t3,t3,0xffff
teq t0,zero
divu t1,t0
mflo t0
mfhi t1
mul a0,a2,t0
sll t1,t1,0x10
or t1,t1,t3
sltu a1,t1,a0
beq a1,zero,0x0001a9cc
_nop
addu t1,t1,t6
sltu a1,t1,t6
bne a1,zero,0x0001ab08
_addiu a2,t0,-0x1
sltu a1,t1,a0
beq a1,zero,0x0001ab08
_nop
addiu t0,t0,-0x2
addu t1,t1,t6
sll t2,v0,0x10
subu t1,t1,a0
or t0,t2,t0
multu t0,a3
mfhi t2
mflo t3
mflo a2
sltu v0,t1,t2
bne v0,zero,0x0001aaf4
_or a0,t2,zero
beq t1,t2,0x0001aae8
_nop
subu a2,v1,a2
subu t1,t1,a0
sltu a0,v1,a2
subu a0,t1,a0
srlv v1,a2,t4
sllv t5,a0,t5
srlv v0,a0,t4
or v1,t5,v1
jr ra
_nop
li t2,0x20
sllv a3,a3,t1
subu t2,t2,t1
srl v1,a3,0x10
srlv t3,a0,t2
andi v0,a3,0xffff
teq v1,zero
divu t3,v1
srlv t4,a1,t2
sllv a0,a0,t1
sllv t2,a1,t1
or a0,t4,a0
srl a1,a0,0x10
mflo t0
mfhi t3
mul t0,t0,v0
sll t3,t3,0x10
or a1,t3,a1
sltu a2,a1,t0
beq a2,zero,0x0001aa94
_nop
addu a1,a1,a3
sltu a2,a1,a3
bne a2,zero,0x0001aa94
_sltu a2,a1,t0
beq a2,zero,0x0001aa94
_nop
addu a1,a1,a3
subu t0,a1,t0
andi a1,a0,0xffff
teq v1,zero
divu t0,v1
mflo a0
mfhi t0
mul a0,a0,v0
sll t0,t0,0x10
or t0,t0,a1
sltu a1,t0,a0
beq a1,zero,0x0001aae0
_nop
addu t0,t0,a3
sltu a1,t0,a3
bne a1,zero,0x0001aae0
_sltu a1,t0,a0
beq a1,zero,0x0001aae0
_nop
addu t0,t0,a3
b 0x0001a818
_subu t0,t0,a0
sltu v0,v1,t3
beq v0,zero,0x0001a9fc
_nop
subu a2,t3,a3
subu t6,t2,t6
sltu a0,t3,a2
b 0x0001a9fc
_subu a0,t6,a0
b 0x0001a9cc
_or t0,a2,zero
b 0x0001a978
_or v0,a1,zero
b 0x0001a85c
_addu a2,a2,a3
(translation_unit "/* WARNING: Removing unreachable block (ram,0x0001aae8) */\n\nundefined8 FUN_0001a700(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  ulonglong uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 == 0) {\n    uVar8 = LZCOUNT(param_4);\n    if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }\n  }\n  else if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }\n  return CONCAT44(param_1,param_2);\n}\n\n" comment (function_definition "undefined8 FUN_0001a700(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  ulonglong uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 == 0) {\n    uVar8 = LZCOUNT(param_4);\n    if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }\n  }\n  else if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }\n  return CONCAT44(param_1,param_2);\n}" type_identifier (function_declarator "FUN_0001a700(uint param_1,uint param_2,uint param_3,uint param_4)" identifier (parameter_list "(uint param_1,uint param_2,uint param_3,uint param_4)" ( (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "uint param_4" type_identifier identifier) ))) (compound_statement "{\n  ulonglong uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 == 0) {\n    uVar8 = LZCOUNT(param_4);\n    if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }\n  }\n  else if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }\n  return CONCAT44(param_1,param_2);\n}" { (declaration "ulonglong uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (if_statement "if (param_3 == 0) {\n    uVar8 = LZCOUNT(param_4);\n    if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }\n  }\n  else if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar8 = LZCOUNT(param_4);\n    if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }\n  }" { (expression_statement "uVar8 = LZCOUNT(param_4);" (assignment_expression "uVar8 = LZCOUNT(param_4)" identifier = (call_expression "LZCOUNT(param_4)" identifier (argument_list "(param_4)" ( identifier )))) ;) (if_statement "if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }" if (parenthesized_expression "(param_1 < param_4)" ( (binary_expression "param_1 < param_4" identifier < identifier) )) (compound_statement "{\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }" { (expression_statement "uVar2 = param_4 >> 0x10;" (assignment_expression "uVar2 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) (if_statement "if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }" if (parenthesized_expression "(uVar8 != 0)" ( (binary_expression "uVar8 != 0" identifier != number_literal) )) (compound_statement "{\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }" { (expression_statement "uVar2 = param_2 >> (-uVar8 & 0x1f);" (assignment_expression "uVar2 = param_2 >> (-uVar8 & 0x1f)" identifier = (binary_expression "param_2 >> (-uVar8 & 0x1f)" identifier >> (parenthesized_expression "(-uVar8 & 0x1f)" ( (binary_expression "-uVar8 & 0x1f" (unary_expression "-uVar8" - identifier) & number_literal) )))) ;) (expression_statement "param_4 = param_4 << (uVar8 & 0x1f);" (assignment_expression "param_4 = param_4 << (uVar8 & 0x1f)" identifier = (binary_expression "param_4 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "param_2 = param_2 << (uVar8 & 0x1f);" (assignment_expression "param_2 = param_2 << (uVar8 & 0x1f)" identifier = (binary_expression "param_2 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "param_1 = uVar2 | param_1 << (uVar8 & 0x1f);" (assignment_expression "param_1 = uVar2 | param_1 << (uVar8 & 0x1f)" identifier = (binary_expression "uVar2 | param_1 << (uVar8 & 0x1f)" identifier | (binary_expression "param_1 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar2 = param_4 >> 0x10;" (assignment_expression "uVar2 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) })) (if_statement "if (uVar2 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);" (assignment_expression "uVar6 = (param_1 / uVar2) * (param_4 & 0xffff)" identifier = (binary_expression "(param_1 / uVar2) * (param_4 & 0xffff)" (parenthesized_expression "(param_1 / uVar2)" ( (binary_expression "param_1 / uVar2" identifier / identifier) )) * (parenthesized_expression "(param_4 & 0xffff)" ( (binary_expression "param_4 & 0xffff" identifier & number_literal) )))) ;) (expression_statement "uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;" (assignment_expression "uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10" identifier = (binary_expression "param_1 % uVar2 << 0x10 | param_2 >> 0x10" (binary_expression "param_1 % uVar2 << 0x10" (binary_expression "param_1 % uVar2" identifier % identifier) << number_literal) | (binary_expression "param_2 >> 0x10" identifier >> number_literal))) ;) (if_statement "if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }" if (parenthesized_expression "(uVar4 < uVar6)" ( (binary_expression "uVar4 < uVar6" identifier < identifier) )) (compound_statement "{\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }" { (expression_statement "uVar4 = uVar4 + param_4;" (assignment_expression "uVar4 = uVar4 + param_4" identifier = (binary_expression "uVar4 + param_4" identifier + identifier)) ;) (if_statement "if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }" if (parenthesized_expression "((param_4 <= uVar4) && (uVar4 < uVar6))" ( (binary_expression "(param_4 <= uVar4) && (uVar4 < uVar6)" (parenthesized_expression "(param_4 <= uVar4)" ( (binary_expression "param_4 <= uVar4" identifier <= identifier) )) && (parenthesized_expression "(uVar4 < uVar6)" ( (binary_expression "uVar4 < uVar6" identifier < identifier) ))) )) (compound_statement "{\n          uVar4 = uVar4 + param_4;\n        }" { (expression_statement "uVar4 = uVar4 + param_4;" (assignment_expression "uVar4 = uVar4 + param_4" identifier = (binary_expression "uVar4 + param_4" identifier + identifier)) ;) })) })) (if_statement "if (uVar2 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);" (assignment_expression "uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff)" identifier = (binary_expression "((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff)" (parenthesized_expression "((uVar4 - uVar6) / uVar2)" ( (binary_expression "(uVar4 - uVar6) / uVar2" (parenthesized_expression "(uVar4 - uVar6)" ( (binary_expression "uVar4 - uVar6" identifier - identifier) )) / identifier) )) * (parenthesized_expression "(param_4 & 0xffff)" ( (binary_expression "param_4 & 0xffff" identifier & number_literal) )))) ;) (expression_statement "uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;" (assignment_expression "uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff" identifier = (binary_expression "(uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff" (binary_expression "(uVar4 - uVar6) % uVar2 << 0x10" (binary_expression "(uVar4 - uVar6) % uVar2" (parenthesized_expression "(uVar4 - uVar6)" ( (binary_expression "uVar4 - uVar6" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "param_2 & 0xffff" identifier & number_literal))) ;) (if_statement "if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }" if (parenthesized_expression "(((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3))" ( (binary_expression "((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)" (parenthesized_expression "((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2))" ( (binary_expression "(uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)" (parenthesized_expression "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) )) && (parenthesized_expression "(uVar2 = uVar2 + param_4, param_4 <= uVar2)" ( (comma_expression "uVar2 = uVar2 + param_4, param_4 <= uVar2" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) , (binary_expression "param_4 <= uVar2" identifier <= identifier)) ))) )) && (parenthesized_expression "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) ))) )) (compound_statement "{\n        uVar2 = uVar2 + param_4;\n      }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) })) (expression_statement "param_1 = 0;" (assignment_expression "param_1 = 0" identifier = number_literal) ;) (expression_statement "param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);" (assignment_expression "param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f)" identifier = (binary_expression "uVar2 - uVar3 >> (uVar8 & 0x1f)" (binary_expression "uVar2 - uVar3" identifier - identifier) >> (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) }) (else_clause "else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }" else (compound_statement "{\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }" { (if_statement "if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) (expression_statement "param_4 = 1 / 0;" (assignment_expression "param_4 = 1 / 0" identifier = (binary_expression "1 / 0" number_literal / number_literal)) ;) (expression_statement "uVar8 = LZCOUNT(param_4);" (assignment_expression "uVar8 = LZCOUNT(param_4)" identifier = (call_expression "LZCOUNT(param_4)" identifier (argument_list "(param_4)" ( identifier )))) ;) })) (expression_statement "uVar2 = param_1 - param_4;" (assignment_expression "uVar2 = param_1 - param_4" identifier = (binary_expression "param_1 - param_4" identifier - identifier)) ;) (if_statement "if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }" if (parenthesized_expression "(uVar8 == 0)" ( (binary_expression "uVar8 == 0" identifier == number_literal) )) (compound_statement "{\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }" { (expression_statement "uVar6 = param_4 >> 0x10;" (assignment_expression "uVar6 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) (expression_statement "uVar4 = param_4 & 0xffff;" (assignment_expression "uVar4 = param_4 & 0xffff" identifier = (binary_expression "param_4 & 0xffff" identifier & number_literal)) ;) }) (else_clause "else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }" else (compound_statement "{\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }" { (expression_statement "param_4 = param_4 << (uVar8 & 0x1f);" (assignment_expression "param_4 = param_4 << (uVar8 & 0x1f)" identifier = (binary_expression "param_4 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar6 = param_4 >> 0x10;" (assignment_expression "uVar6 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) (expression_statement "uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);" (assignment_expression "uVar2 = param_1 >> (0x20 - uVar8 & 0x1f)" identifier = (binary_expression "param_1 >> (0x20 - uVar8 & 0x1f)" identifier >> (parenthesized_expression "(0x20 - uVar8 & 0x1f)" ( (binary_expression "0x20 - uVar8 & 0x1f" (binary_expression "0x20 - uVar8" number_literal - identifier) & number_literal) )))) ;) (expression_statement "uVar4 = param_4 & 0xffff;" (assignment_expression "uVar4 = param_4 & 0xffff" identifier = (binary_expression "param_4 & 0xffff" identifier & number_literal)) ;) (if_statement "if (uVar6 == 0) {\n          trap(7);\n        }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n          trap(7);\n        }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);" (assignment_expression "uVar3 = param_2 >> (0x20 - uVar8 & 0x1f)" identifier = (binary_expression "param_2 >> (0x20 - uVar8 & 0x1f)" identifier >> (parenthesized_expression "(0x20 - uVar8 & 0x1f)" ( (binary_expression "0x20 - uVar8 & 0x1f" (binary_expression "0x20 - uVar8" number_literal - identifier) & number_literal) )))) ;) (expression_statement "param_2 = param_2 << (uVar8 & 0x1f);" (assignment_expression "param_2 = param_2 << (uVar8 & 0x1f)" identifier = (binary_expression "param_2 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);" (assignment_expression "uVar3 = uVar3 | param_1 << (uVar8 & 0x1f)" identifier = (binary_expression "uVar3 | param_1 << (uVar8 & 0x1f)" identifier | (binary_expression "param_1 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar7 = (uVar2 / uVar6) * uVar4;" (assignment_expression "uVar7 = (uVar2 / uVar6) * uVar4" identifier = (binary_expression "(uVar2 / uVar6) * uVar4" (parenthesized_expression "(uVar2 / uVar6)" ( (binary_expression "uVar2 / uVar6" identifier / identifier) )) * identifier)) ;) (expression_statement "uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;" (assignment_expression "uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10" identifier = (binary_expression "uVar2 % uVar6 << 0x10 | uVar3 >> 0x10" (binary_expression "uVar2 % uVar6 << 0x10" (binary_expression "uVar2 % uVar6" identifier % identifier) << number_literal) | (binary_expression "uVar3 >> 0x10" identifier >> number_literal))) ;) (if_statement "if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }" if (parenthesized_expression "(uVar2 < uVar7)" ( (binary_expression "uVar2 < uVar7" identifier < identifier) )) (compound_statement "{\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) (if_statement "if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }" if (parenthesized_expression "((param_4 <= uVar2) && (uVar2 < uVar7))" ( (binary_expression "(param_4 <= uVar2) && (uVar2 < uVar7)" (parenthesized_expression "(param_4 <= uVar2)" ( (binary_expression "param_4 <= uVar2" identifier <= identifier) )) && (parenthesized_expression "(uVar2 < uVar7)" ( (binary_expression "uVar2 < uVar7" identifier < identifier) ))) )) (compound_statement "{\n            uVar2 = uVar2 + param_4;\n          }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) })) })) (if_statement "if (uVar6 == 0) {\n          trap(7);\n        }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n          trap(7);\n        }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;" (assignment_expression "uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4" identifier = (binary_expression "((uVar2 - uVar7) / uVar6) * uVar4" (parenthesized_expression "((uVar2 - uVar7) / uVar6)" ( (binary_expression "(uVar2 - uVar7) / uVar6" (parenthesized_expression "(uVar2 - uVar7)" ( (binary_expression "uVar2 - uVar7" identifier - identifier) )) / identifier) )) * identifier)) ;) (expression_statement "uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;" (assignment_expression "uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff" identifier = (binary_expression "(uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff" (binary_expression "(uVar2 - uVar7) % uVar6 << 0x10" (binary_expression "(uVar2 - uVar7) % uVar6" (parenthesized_expression "(uVar2 - uVar7)" ( (binary_expression "uVar2 - uVar7" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "uVar3 & 0xffff" identifier & number_literal))) ;) (if_statement "if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }" if (parenthesized_expression "(uVar2 < uVar5)" ( (binary_expression "uVar2 < uVar5" identifier < identifier) )) (compound_statement "{\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) (if_statement "if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }" if (parenthesized_expression "((param_4 <= uVar2) && (uVar2 < uVar5))" ( (binary_expression "(param_4 <= uVar2) && (uVar2 < uVar5)" (parenthesized_expression "(param_4 <= uVar2)" ( (binary_expression "param_4 <= uVar2" identifier <= identifier) )) && (parenthesized_expression "(uVar2 < uVar5)" ( (binary_expression "uVar2 < uVar5" identifier < identifier) ))) )) (compound_statement "{\n            uVar2 = uVar2 + param_4;\n          }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) })) })) (expression_statement "uVar2 = uVar2 - uVar5;" (assignment_expression "uVar2 = uVar2 - uVar5" identifier = (binary_expression "uVar2 - uVar5" identifier - identifier)) ;) }))) (if_statement "if (uVar6 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar3 = (uVar2 / uVar6) * uVar4;" (assignment_expression "uVar3 = (uVar2 / uVar6) * uVar4" identifier = (binary_expression "(uVar2 / uVar6) * uVar4" (parenthesized_expression "(uVar2 / uVar6)" ( (binary_expression "uVar2 / uVar6" identifier / identifier) )) * identifier)) ;) (expression_statement "uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;" (assignment_expression "uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10" identifier = (binary_expression "uVar2 % uVar6 << 0x10 | param_2 >> 0x10" (binary_expression "uVar2 % uVar6 << 0x10" (binary_expression "uVar2 % uVar6" identifier % identifier) << number_literal) | (binary_expression "param_2 >> 0x10" identifier >> number_literal))) ;) (if_statement "if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }" if (parenthesized_expression "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) )) (compound_statement "{\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) (if_statement "if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }" if (parenthesized_expression "((param_4 <= uVar2) && (uVar2 < uVar3))" ( (binary_expression "(param_4 <= uVar2) && (uVar2 < uVar3)" (parenthesized_expression "(param_4 <= uVar2)" ( (binary_expression "param_4 <= uVar2" identifier <= identifier) )) && (parenthesized_expression "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) ))) )) (compound_statement "{\n          uVar2 = uVar2 + param_4;\n        }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) })) })) (if_statement "if (uVar6 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;" (assignment_expression "uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4" identifier = (binary_expression "((uVar2 - uVar3) / uVar6) * uVar4" (parenthesized_expression "((uVar2 - uVar3) / uVar6)" ( (binary_expression "(uVar2 - uVar3) / uVar6" (parenthesized_expression "(uVar2 - uVar3)" ( (binary_expression "uVar2 - uVar3" identifier - identifier) )) / identifier) )) * identifier)) ;) (expression_statement "uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;" (assignment_expression "uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff" identifier = (binary_expression "(uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff" (binary_expression "(uVar2 - uVar3) % uVar6 << 0x10" (binary_expression "(uVar2 - uVar3) % uVar6" (parenthesized_expression "(uVar2 - uVar3)" ( (binary_expression "uVar2 - uVar3" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "param_2 & 0xffff" identifier & number_literal))) ;) (if_statement "if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }" if (parenthesized_expression "(uVar2 < uVar4)" ( (binary_expression "uVar2 < uVar4" identifier < identifier) )) (compound_statement "{\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) (if_statement "if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }" if (parenthesized_expression "((param_4 <= uVar2) && (uVar2 < uVar4))" ( (binary_expression "(param_4 <= uVar2) && (uVar2 < uVar4)" (parenthesized_expression "(param_4 <= uVar2)" ( (binary_expression "param_4 <= uVar2" identifier <= identifier) )) && (parenthesized_expression "(uVar2 < uVar4)" ( (binary_expression "uVar2 < uVar4" identifier < identifier) ))) )) (compound_statement "{\n          uVar2 = uVar2 + param_4;\n        }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) })) })) (expression_statement "param_1 = 0;" (assignment_expression "param_1 = 0" identifier = number_literal) ;) (expression_statement "param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);" (assignment_expression "param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f)" identifier = (binary_expression "uVar2 - uVar4 >> (uVar8 & 0x1f)" (binary_expression "uVar2 - uVar4" identifier - identifier) >> (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) }))) }) (else_clause "else if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }" else (if_statement "if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }" if (parenthesized_expression "(param_3 <= param_1)" ( (binary_expression "param_3 <= param_1" identifier <= identifier) )) (compound_statement "{\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }" { (expression_statement "uVar8 = LZCOUNT(param_3);" (assignment_expression "uVar8 = LZCOUNT(param_3)" identifier = (call_expression "LZCOUNT(param_3)" identifier (argument_list "(param_3)" ( identifier )))) ;) (if_statement "if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }" if (parenthesized_expression "(uVar8 != 0)" ( (binary_expression "uVar8 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }" { (expression_statement "uVar6 = 0x20 - uVar8;" (assignment_expression "uVar6 = 0x20 - uVar8" identifier = (binary_expression "0x20 - uVar8" number_literal - identifier)) ;) (expression_statement "uVar2 = param_1 >> (uVar6 & 0x1f);" (assignment_expression "uVar2 = param_1 >> (uVar6 & 0x1f)" identifier = (binary_expression "param_1 >> (uVar6 & 0x1f)" identifier >> (parenthesized_expression "(uVar6 & 0x1f)" ( (binary_expression "uVar6 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);" (assignment_expression "uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f)" identifier = (binary_expression "param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f)" (binary_expression "param_4 >> (uVar6 & 0x1f)" identifier >> (parenthesized_expression "(uVar6 & 0x1f)" ( (binary_expression "uVar6 & 0x1f" identifier & number_literal) ))) | (binary_expression "param_3 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar4 = uVar3 >> 0x10;" (assignment_expression "uVar4 = uVar3 >> 0x10" identifier = (binary_expression "uVar3 >> 0x10" identifier >> number_literal)) ;) (if_statement "if (uVar4 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar10 = uVar2 / uVar4;" (assignment_expression "uVar10 = uVar2 / uVar4" identifier = (binary_expression "uVar2 / uVar4" identifier / identifier)) ;) (expression_statement "uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);" (assignment_expression "uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f)" identifier = (binary_expression "param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f)" (binary_expression "param_2 >> (uVar6 & 0x1f)" identifier >> (parenthesized_expression "(uVar6 & 0x1f)" ( (binary_expression "uVar6 & 0x1f" identifier & number_literal) ))) | (binary_expression "param_1 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "param_4 = param_4 << (uVar8 & 0x1f);" (assignment_expression "param_4 = param_4 << (uVar8 & 0x1f)" identifier = (binary_expression "param_4 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar7 = (uVar3 & 0xffff) * uVar10;" (assignment_expression "uVar7 = (uVar3 & 0xffff) * uVar10" identifier = (binary_expression "(uVar3 & 0xffff) * uVar10" (parenthesized_expression "(uVar3 & 0xffff)" ( (binary_expression "uVar3 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;" (assignment_expression "uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10" identifier = (binary_expression "uVar2 % uVar4 << 0x10 | uVar9 >> 0x10" (binary_expression "uVar2 % uVar4 << 0x10" (binary_expression "uVar2 % uVar4" identifier % identifier) << number_literal) | (binary_expression "uVar9 >> 0x10" identifier >> number_literal))) ;) (expression_statement "param_2 = param_2 << (uVar8 & 0x1f);" (assignment_expression "param_2 = param_2 << (uVar8 & 0x1f)" identifier = (binary_expression "param_2 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar2 = uVar10;" (assignment_expression "uVar2 = uVar10" identifier = identifier) ;) (if_statement "if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }" if (parenthesized_expression "(uVar5 < uVar7)" ( (binary_expression "uVar5 < uVar7" identifier < identifier) )) (compound_statement "{\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }" { (expression_statement "uVar5 = uVar5 + uVar3;" (assignment_expression "uVar5 = uVar5 + uVar3" identifier = (binary_expression "uVar5 + uVar3" identifier + identifier)) ;) (expression_statement "uVar2 = uVar10 - 1;" (assignment_expression "uVar2 = uVar10 - 1" identifier = (binary_expression "uVar10 - 1" identifier - number_literal)) ;) (if_statement "if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }" if (parenthesized_expression "((uVar3 <= uVar5) && (uVar5 < uVar7))" ( (binary_expression "(uVar3 <= uVar5) && (uVar5 < uVar7)" (parenthesized_expression "(uVar3 <= uVar5)" ( (binary_expression "uVar3 <= uVar5" identifier <= identifier) )) && (parenthesized_expression "(uVar5 < uVar7)" ( (binary_expression "uVar5 < uVar7" identifier < identifier) ))) )) (compound_statement "{\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }" { (expression_statement "uVar2 = uVar10 - 2;" (assignment_expression "uVar2 = uVar10 - 2" identifier = (binary_expression "uVar10 - 2" identifier - number_literal)) ;) (expression_statement "uVar5 = uVar5 + uVar3;" (assignment_expression "uVar5 = uVar5 + uVar3" identifier = (binary_expression "uVar5 + uVar3" identifier + identifier)) ;) })) })) (if_statement "if (uVar4 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar11 = (uVar5 - uVar7) / uVar4;" (assignment_expression "uVar11 = (uVar5 - uVar7) / uVar4" identifier = (binary_expression "(uVar5 - uVar7) / uVar4" (parenthesized_expression "(uVar5 - uVar7)" ( (binary_expression "uVar5 - uVar7" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar10 = (uVar3 & 0xffff) * uVar11;" (assignment_expression "uVar10 = (uVar3 & 0xffff) * uVar11" identifier = (binary_expression "(uVar3 & 0xffff) * uVar11" (parenthesized_expression "(uVar3 & 0xffff)" ( (binary_expression "uVar3 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;" (assignment_expression "uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff" identifier = (binary_expression "(uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff" (binary_expression "(uVar5 - uVar7) % uVar4 << 0x10" (binary_expression "(uVar5 - uVar7) % uVar4" (parenthesized_expression "(uVar5 - uVar7)" ( (binary_expression "uVar5 - uVar7" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "uVar9 & 0xffff" identifier & number_literal))) ;) (expression_statement "uVar4 = uVar11;" (assignment_expression "uVar4 = uVar11" identifier = identifier) ;) (if_statement "if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }" if (parenthesized_expression "(uVar7 < uVar10)" ( (binary_expression "uVar7 < uVar10" identifier < identifier) )) (compound_statement "{\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }" { (expression_statement "uVar7 = uVar7 + uVar3;" (assignment_expression "uVar7 = uVar7 + uVar3" identifier = (binary_expression "uVar7 + uVar3" identifier + identifier)) ;) (expression_statement "uVar4 = uVar11 - 1;" (assignment_expression "uVar4 = uVar11 - 1" identifier = (binary_expression "uVar11 - 1" identifier - number_literal)) ;) (if_statement "if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }" if (parenthesized_expression "((uVar3 <= uVar7) && (uVar7 < uVar10))" ( (binary_expression "(uVar3 <= uVar7) && (uVar7 < uVar10)" (parenthesized_expression "(uVar3 <= uVar7)" ( (binary_expression "uVar3 <= uVar7" identifier <= identifier) )) && (parenthesized_expression "(uVar7 < uVar10)" ( (binary_expression "uVar7 < uVar10" identifier < identifier) ))) )) (compound_statement "{\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }" { (expression_statement "uVar4 = uVar11 - 2;" (assignment_expression "uVar4 = uVar11 - 2" identifier = (binary_expression "uVar11 - 2" identifier - number_literal)) ;) (expression_statement "uVar7 = uVar7 + uVar3;" (assignment_expression "uVar7 = uVar7 + uVar3" identifier = (binary_expression "uVar7 + uVar3" identifier + identifier)) ;) })) })) (expression_statement "uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;" (assignment_expression "uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4" (call_expression "(ulonglong)(uVar2 << 0x10 | uVar4)" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(uVar2 << 0x10 | uVar4)" ( (binary_expression "uVar2 << 0x10 | uVar4" (binary_expression "uVar2 << 0x10" identifier << number_literal) | identifier) ))) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (if_statement "if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }" if (parenthesized_expression "(CONCAT44(uVar7 - uVar10,param_2) < uVar1)" ( (binary_expression "CONCAT44(uVar7 - uVar10,param_2) < uVar1" (call_expression "CONCAT44(uVar7 - uVar10,param_2)" identifier (argument_list "(uVar7 - uVar10,param_2)" ( (binary_expression "uVar7 - uVar10" identifier - identifier) , identifier ))) < identifier) )) (compound_statement "{\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }" { (expression_statement "param_4 = (uint)uVar1 - param_4;" (assignment_expression "param_4 = (uint)uVar1 - param_4" identifier = (binary_expression "(uint)uVar1 - param_4" (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier) - identifier)) ;) (expression_statement "uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);" (assignment_expression "uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4)" identifier = (call_expression "CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4)" identifier (argument_list "(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4)" ( (binary_expression "((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4)" (parenthesized_expression "((int)(uVar1 >> 0x20) - uVar3)" ( (binary_expression "(int)(uVar1 >> 0x20) - uVar3" (cast_expression "(int)(uVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 >> 0x20)" ( (binary_expression "uVar1 >> 0x20" identifier >> number_literal) ))) - identifier) )) - (call_expression "(uint)((uint)uVar1 < param_4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((uint)uVar1 < param_4)" ( (binary_expression "(uint)uVar1 < param_4" (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier) < identifier) )))) , identifier )))) ;) })) (expression_statement "uVar4 = param_2 - (int)uVar1;" (assignment_expression "uVar4 = param_2 - (int)uVar1" identifier = (binary_expression "param_2 - (int)uVar1" identifier - (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);" (assignment_expression "uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4)" identifier = (binary_expression "((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4)" (parenthesized_expression "((uVar7 - uVar10) - (int)(uVar1 >> 0x20))" ( (binary_expression "(uVar7 - uVar10) - (int)(uVar1 >> 0x20)" (parenthesized_expression "(uVar7 - uVar10)" ( (binary_expression "uVar7 - uVar10" identifier - identifier) )) - (cast_expression "(int)(uVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 >> 0x20)" ( (binary_expression "uVar1 >> 0x20" identifier >> number_literal) )))) )) - (call_expression "(uint)(param_2 < uVar4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_2 < uVar4)" ( (binary_expression "param_2 < uVar4" identifier < identifier) ))))) ;) (return_statement "return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));" return (call_expression "CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f))" identifier (argument_list "(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f))" ( (binary_expression "uVar2 >> (uVar8 & 0x1f)" identifier >> (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) ))) , (binary_expression "uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f)" (binary_expression "uVar2 << (uVar6 & 0x1f)" identifier << (parenthesized_expression "(uVar6 & 0x1f)" ( (binary_expression "uVar6 & 0x1f" identifier & number_literal) ))) | (binary_expression "uVar4 >> (uVar8 & 0x1f)" identifier >> (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ))) ;) })) (if_statement "if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }" if (parenthesized_expression "((param_3 < param_1) || (param_4 <= param_2))" ( (binary_expression "(param_3 < param_1) || (param_4 <= param_2)" (parenthesized_expression "(param_3 < param_1)" ( (binary_expression "param_3 < param_1" identifier < identifier) )) || (parenthesized_expression "(param_4 <= param_2)" ( (binary_expression "param_4 <= param_2" identifier <= identifier) ))) )) (compound_statement "{\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }" { (return_statement "return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);" return (call_expression "CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4)" identifier (argument_list "((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4)" ( (binary_expression "(param_1 - param_3) - (uint)(param_2 < param_2 - param_4)" (parenthesized_expression "(param_1 - param_3)" ( (binary_expression "param_1 - param_3" identifier - identifier) )) - (call_expression "(uint)(param_2 < param_2 - param_4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_2 < param_2 - param_4)" ( (binary_expression "param_2 < param_2 - param_4" identifier < (binary_expression "param_2 - param_4" identifier - identifier)) )))) , (binary_expression "param_2 - param_4" identifier - identifier) ))) ;) })) })))) (return_statement "return CONCAT44(param_1,param_2);" return (call_expression "CONCAT44(param_1,param_2)" identifier (argument_list "(param_1,param_2)" ( identifier , identifier ))) ;) })))
(translation_unit "/* WARNING: Removing unreachable block (ram,0x0001aae8) */\n\nundefined8 __umoddi3(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  ulonglong uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 == 0) {\n    uVar8 = LZCOUNT(param_4);\n    if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }\n  }\n  else if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }\n  return CONCAT44(param_1,param_2);\n}\n\n" comment (function_definition "undefined8 __umoddi3(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  ulonglong uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 == 0) {\n    uVar8 = LZCOUNT(param_4);\n    if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }\n  }\n  else if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }\n  return CONCAT44(param_1,param_2);\n}" type_identifier (function_declarator "__umoddi3(uint param_1,uint param_2,uint param_3,uint param_4)" identifier (parameter_list "(uint param_1,uint param_2,uint param_3,uint param_4)" ( (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "uint param_4" type_identifier identifier) ))) (compound_statement "{\n  ulonglong uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 == 0) {\n    uVar8 = LZCOUNT(param_4);\n    if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }\n  }\n  else if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }\n  return CONCAT44(param_1,param_2);\n}" { (declaration "ulonglong uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (if_statement "if (param_3 == 0) {\n    uVar8 = LZCOUNT(param_4);\n    if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }\n  }\n  else if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar8 = LZCOUNT(param_4);\n    if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }\n  }" { (expression_statement "uVar8 = LZCOUNT(param_4);" (assignment_expression "uVar8 = LZCOUNT(param_4)" identifier = (call_expression "LZCOUNT(param_4)" identifier (argument_list "(param_4)" ( identifier )))) ;) (if_statement "if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }" if (parenthesized_expression "(param_1 < param_4)" ( (binary_expression "param_1 < param_4" identifier < identifier) )) (compound_statement "{\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }" { (expression_statement "uVar2 = param_4 >> 0x10;" (assignment_expression "uVar2 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) (if_statement "if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }" if (parenthesized_expression "(uVar8 != 0)" ( (binary_expression "uVar8 != 0" identifier != number_literal) )) (compound_statement "{\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }" { (expression_statement "uVar2 = param_2 >> (-uVar8 & 0x1f);" (assignment_expression "uVar2 = param_2 >> (-uVar8 & 0x1f)" identifier = (binary_expression "param_2 >> (-uVar8 & 0x1f)" identifier >> (parenthesized_expression "(-uVar8 & 0x1f)" ( (binary_expression "-uVar8 & 0x1f" (unary_expression "-uVar8" - identifier) & number_literal) )))) ;) (expression_statement "param_4 = param_4 << (uVar8 & 0x1f);" (assignment_expression "param_4 = param_4 << (uVar8 & 0x1f)" identifier = (binary_expression "param_4 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "param_2 = param_2 << (uVar8 & 0x1f);" (assignment_expression "param_2 = param_2 << (uVar8 & 0x1f)" identifier = (binary_expression "param_2 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "param_1 = uVar2 | param_1 << (uVar8 & 0x1f);" (assignment_expression "param_1 = uVar2 | param_1 << (uVar8 & 0x1f)" identifier = (binary_expression "uVar2 | param_1 << (uVar8 & 0x1f)" identifier | (binary_expression "param_1 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar2 = param_4 >> 0x10;" (assignment_expression "uVar2 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) })) (if_statement "if (uVar2 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);" (assignment_expression "uVar6 = (param_1 / uVar2) * (param_4 & 0xffff)" identifier = (binary_expression "(param_1 / uVar2) * (param_4 & 0xffff)" (parenthesized_expression "(param_1 / uVar2)" ( (binary_expression "param_1 / uVar2" identifier / identifier) )) * (parenthesized_expression "(param_4 & 0xffff)" ( (binary_expression "param_4 & 0xffff" identifier & number_literal) )))) ;) (expression_statement "uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;" (assignment_expression "uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10" identifier = (binary_expression "param_1 % uVar2 << 0x10 | param_2 >> 0x10" (binary_expression "param_1 % uVar2 << 0x10" (binary_expression "param_1 % uVar2" identifier % identifier) << number_literal) | (binary_expression "param_2 >> 0x10" identifier >> number_literal))) ;) (if_statement "if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }" if (parenthesized_expression "(uVar4 < uVar6)" ( (binary_expression "uVar4 < uVar6" identifier < identifier) )) (compound_statement "{\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }" { (expression_statement "uVar4 = uVar4 + param_4;" (assignment_expression "uVar4 = uVar4 + param_4" identifier = (binary_expression "uVar4 + param_4" identifier + identifier)) ;) (if_statement "if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }" if (parenthesized_expression "((param_4 <= uVar4) && (uVar4 < uVar6))" ( (binary_expression "(param_4 <= uVar4) && (uVar4 < uVar6)" (parenthesized_expression "(param_4 <= uVar4)" ( (binary_expression "param_4 <= uVar4" identifier <= identifier) )) && (parenthesized_expression "(uVar4 < uVar6)" ( (binary_expression "uVar4 < uVar6" identifier < identifier) ))) )) (compound_statement "{\n          uVar4 = uVar4 + param_4;\n        }" { (expression_statement "uVar4 = uVar4 + param_4;" (assignment_expression "uVar4 = uVar4 + param_4" identifier = (binary_expression "uVar4 + param_4" identifier + identifier)) ;) })) })) (if_statement "if (uVar2 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);" (assignment_expression "uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff)" identifier = (binary_expression "((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff)" (parenthesized_expression "((uVar4 - uVar6) / uVar2)" ( (binary_expression "(uVar4 - uVar6) / uVar2" (parenthesized_expression "(uVar4 - uVar6)" ( (binary_expression "uVar4 - uVar6" identifier - identifier) )) / identifier) )) * (parenthesized_expression "(param_4 & 0xffff)" ( (binary_expression "param_4 & 0xffff" identifier & number_literal) )))) ;) (expression_statement "uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;" (assignment_expression "uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff" identifier = (binary_expression "(uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff" (binary_expression "(uVar4 - uVar6) % uVar2 << 0x10" (binary_expression "(uVar4 - uVar6) % uVar2" (parenthesized_expression "(uVar4 - uVar6)" ( (binary_expression "uVar4 - uVar6" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "param_2 & 0xffff" identifier & number_literal))) ;) (if_statement "if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }" if (parenthesized_expression "(((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3))" ( (binary_expression "((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)" (parenthesized_expression "((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2))" ( (binary_expression "(uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)" (parenthesized_expression "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) )) && (parenthesized_expression "(uVar2 = uVar2 + param_4, param_4 <= uVar2)" ( (comma_expression "uVar2 = uVar2 + param_4, param_4 <= uVar2" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) , (binary_expression "param_4 <= uVar2" identifier <= identifier)) ))) )) && (parenthesized_expression "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) ))) )) (compound_statement "{\n        uVar2 = uVar2 + param_4;\n      }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) })) (expression_statement "param_1 = 0;" (assignment_expression "param_1 = 0" identifier = number_literal) ;) (expression_statement "param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);" (assignment_expression "param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f)" identifier = (binary_expression "uVar2 - uVar3 >> (uVar8 & 0x1f)" (binary_expression "uVar2 - uVar3" identifier - identifier) >> (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) }) (else_clause "else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }" else (compound_statement "{\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }" { (if_statement "if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) (expression_statement "param_4 = 1 / 0;" (assignment_expression "param_4 = 1 / 0" identifier = (binary_expression "1 / 0" number_literal / number_literal)) ;) (expression_statement "uVar8 = LZCOUNT(param_4);" (assignment_expression "uVar8 = LZCOUNT(param_4)" identifier = (call_expression "LZCOUNT(param_4)" identifier (argument_list "(param_4)" ( identifier )))) ;) })) (expression_statement "uVar2 = param_1 - param_4;" (assignment_expression "uVar2 = param_1 - param_4" identifier = (binary_expression "param_1 - param_4" identifier - identifier)) ;) (if_statement "if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }" if (parenthesized_expression "(uVar8 == 0)" ( (binary_expression "uVar8 == 0" identifier == number_literal) )) (compound_statement "{\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }" { (expression_statement "uVar6 = param_4 >> 0x10;" (assignment_expression "uVar6 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) (expression_statement "uVar4 = param_4 & 0xffff;" (assignment_expression "uVar4 = param_4 & 0xffff" identifier = (binary_expression "param_4 & 0xffff" identifier & number_literal)) ;) }) (else_clause "else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }" else (compound_statement "{\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }" { (expression_statement "param_4 = param_4 << (uVar8 & 0x1f);" (assignment_expression "param_4 = param_4 << (uVar8 & 0x1f)" identifier = (binary_expression "param_4 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar6 = param_4 >> 0x10;" (assignment_expression "uVar6 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) (expression_statement "uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);" (assignment_expression "uVar2 = param_1 >> (0x20 - uVar8 & 0x1f)" identifier = (binary_expression "param_1 >> (0x20 - uVar8 & 0x1f)" identifier >> (parenthesized_expression "(0x20 - uVar8 & 0x1f)" ( (binary_expression "0x20 - uVar8 & 0x1f" (binary_expression "0x20 - uVar8" number_literal - identifier) & number_literal) )))) ;) (expression_statement "uVar4 = param_4 & 0xffff;" (assignment_expression "uVar4 = param_4 & 0xffff" identifier = (binary_expression "param_4 & 0xffff" identifier & number_literal)) ;) (if_statement "if (uVar6 == 0) {\n          trap(7);\n        }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n          trap(7);\n        }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);" (assignment_expression "uVar3 = param_2 >> (0x20 - uVar8 & 0x1f)" identifier = (binary_expression "param_2 >> (0x20 - uVar8 & 0x1f)" identifier >> (parenthesized_expression "(0x20 - uVar8 & 0x1f)" ( (binary_expression "0x20 - uVar8 & 0x1f" (binary_expression "0x20 - uVar8" number_literal - identifier) & number_literal) )))) ;) (expression_statement "param_2 = param_2 << (uVar8 & 0x1f);" (assignment_expression "param_2 = param_2 << (uVar8 & 0x1f)" identifier = (binary_expression "param_2 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);" (assignment_expression "uVar3 = uVar3 | param_1 << (uVar8 & 0x1f)" identifier = (binary_expression "uVar3 | param_1 << (uVar8 & 0x1f)" identifier | (binary_expression "param_1 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar7 = (uVar2 / uVar6) * uVar4;" (assignment_expression "uVar7 = (uVar2 / uVar6) * uVar4" identifier = (binary_expression "(uVar2 / uVar6) * uVar4" (parenthesized_expression "(uVar2 / uVar6)" ( (binary_expression "uVar2 / uVar6" identifier / identifier) )) * identifier)) ;) (expression_statement "uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;" (assignment_expression "uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10" identifier = (binary_expression "uVar2 % uVar6 << 0x10 | uVar3 >> 0x10" (binary_expression "uVar2 % uVar6 << 0x10" (binary_expression "uVar2 % uVar6" identifier % identifier) << number_literal) | (binary_expression "uVar3 >> 0x10" identifier >> number_literal))) ;) (if_statement "if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }" if (parenthesized_expression "(uVar2 < uVar7)" ( (binary_expression "uVar2 < uVar7" identifier < identifier) )) (compound_statement "{\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) (if_statement "if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }" if (parenthesized_expression "((param_4 <= uVar2) && (uVar2 < uVar7))" ( (binary_expression "(param_4 <= uVar2) && (uVar2 < uVar7)" (parenthesized_expression "(param_4 <= uVar2)" ( (binary_expression "param_4 <= uVar2" identifier <= identifier) )) && (parenthesized_expression "(uVar2 < uVar7)" ( (binary_expression "uVar2 < uVar7" identifier < identifier) ))) )) (compound_statement "{\n            uVar2 = uVar2 + param_4;\n          }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) })) })) (if_statement "if (uVar6 == 0) {\n          trap(7);\n        }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n          trap(7);\n        }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;" (assignment_expression "uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4" identifier = (binary_expression "((uVar2 - uVar7) / uVar6) * uVar4" (parenthesized_expression "((uVar2 - uVar7) / uVar6)" ( (binary_expression "(uVar2 - uVar7) / uVar6" (parenthesized_expression "(uVar2 - uVar7)" ( (binary_expression "uVar2 - uVar7" identifier - identifier) )) / identifier) )) * identifier)) ;) (expression_statement "uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;" (assignment_expression "uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff" identifier = (binary_expression "(uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff" (binary_expression "(uVar2 - uVar7) % uVar6 << 0x10" (binary_expression "(uVar2 - uVar7) % uVar6" (parenthesized_expression "(uVar2 - uVar7)" ( (binary_expression "uVar2 - uVar7" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "uVar3 & 0xffff" identifier & number_literal))) ;) (if_statement "if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }" if (parenthesized_expression "(uVar2 < uVar5)" ( (binary_expression "uVar2 < uVar5" identifier < identifier) )) (compound_statement "{\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) (if_statement "if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }" if (parenthesized_expression "((param_4 <= uVar2) && (uVar2 < uVar5))" ( (binary_expression "(param_4 <= uVar2) && (uVar2 < uVar5)" (parenthesized_expression "(param_4 <= uVar2)" ( (binary_expression "param_4 <= uVar2" identifier <= identifier) )) && (parenthesized_expression "(uVar2 < uVar5)" ( (binary_expression "uVar2 < uVar5" identifier < identifier) ))) )) (compound_statement "{\n            uVar2 = uVar2 + param_4;\n          }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) })) })) (expression_statement "uVar2 = uVar2 - uVar5;" (assignment_expression "uVar2 = uVar2 - uVar5" identifier = (binary_expression "uVar2 - uVar5" identifier - identifier)) ;) }))) (if_statement "if (uVar6 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar3 = (uVar2 / uVar6) * uVar4;" (assignment_expression "uVar3 = (uVar2 / uVar6) * uVar4" identifier = (binary_expression "(uVar2 / uVar6) * uVar4" (parenthesized_expression "(uVar2 / uVar6)" ( (binary_expression "uVar2 / uVar6" identifier / identifier) )) * identifier)) ;) (expression_statement "uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;" (assignment_expression "uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10" identifier = (binary_expression "uVar2 % uVar6 << 0x10 | param_2 >> 0x10" (binary_expression "uVar2 % uVar6 << 0x10" (binary_expression "uVar2 % uVar6" identifier % identifier) << number_literal) | (binary_expression "param_2 >> 0x10" identifier >> number_literal))) ;) (if_statement "if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }" if (parenthesized_expression "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) )) (compound_statement "{\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) (if_statement "if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }" if (parenthesized_expression "((param_4 <= uVar2) && (uVar2 < uVar3))" ( (binary_expression "(param_4 <= uVar2) && (uVar2 < uVar3)" (parenthesized_expression "(param_4 <= uVar2)" ( (binary_expression "param_4 <= uVar2" identifier <= identifier) )) && (parenthesized_expression "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) ))) )) (compound_statement "{\n          uVar2 = uVar2 + param_4;\n        }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) })) })) (if_statement "if (uVar6 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;" (assignment_expression "uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4" identifier = (binary_expression "((uVar2 - uVar3) / uVar6) * uVar4" (parenthesized_expression "((uVar2 - uVar3) / uVar6)" ( (binary_expression "(uVar2 - uVar3) / uVar6" (parenthesized_expression "(uVar2 - uVar3)" ( (binary_expression "uVar2 - uVar3" identifier - identifier) )) / identifier) )) * identifier)) ;) (expression_statement "uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;" (assignment_expression "uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff" identifier = (binary_expression "(uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff" (binary_expression "(uVar2 - uVar3) % uVar6 << 0x10" (binary_expression "(uVar2 - uVar3) % uVar6" (parenthesized_expression "(uVar2 - uVar3)" ( (binary_expression "uVar2 - uVar3" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "param_2 & 0xffff" identifier & number_literal))) ;) (if_statement "if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }" if (parenthesized_expression "(uVar2 < uVar4)" ( (binary_expression "uVar2 < uVar4" identifier < identifier) )) (compound_statement "{\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) (if_statement "if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }" if (parenthesized_expression "((param_4 <= uVar2) && (uVar2 < uVar4))" ( (binary_expression "(param_4 <= uVar2) && (uVar2 < uVar4)" (parenthesized_expression "(param_4 <= uVar2)" ( (binary_expression "param_4 <= uVar2" identifier <= identifier) )) && (parenthesized_expression "(uVar2 < uVar4)" ( (binary_expression "uVar2 < uVar4" identifier < identifier) ))) )) (compound_statement "{\n          uVar2 = uVar2 + param_4;\n        }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) })) })) (expression_statement "param_1 = 0;" (assignment_expression "param_1 = 0" identifier = number_literal) ;) (expression_statement "param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);" (assignment_expression "param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f)" identifier = (binary_expression "uVar2 - uVar4 >> (uVar8 & 0x1f)" (binary_expression "uVar2 - uVar4" identifier - identifier) >> (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) }))) }) (else_clause "else if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }" else (if_statement "if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }" if (parenthesized_expression "(param_3 <= param_1)" ( (binary_expression "param_3 <= param_1" identifier <= identifier) )) (compound_statement "{\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }" { (expression_statement "uVar8 = LZCOUNT(param_3);" (assignment_expression "uVar8 = LZCOUNT(param_3)" identifier = (call_expression "LZCOUNT(param_3)" identifier (argument_list "(param_3)" ( identifier )))) ;) (if_statement "if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }" if (parenthesized_expression "(uVar8 != 0)" ( (binary_expression "uVar8 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }" { (expression_statement "uVar6 = 0x20 - uVar8;" (assignment_expression "uVar6 = 0x20 - uVar8" identifier = (binary_expression "0x20 - uVar8" number_literal - identifier)) ;) (expression_statement "uVar2 = param_1 >> (uVar6 & 0x1f);" (assignment_expression "uVar2 = param_1 >> (uVar6 & 0x1f)" identifier = (binary_expression "param_1 >> (uVar6 & 0x1f)" identifier >> (parenthesized_expression "(uVar6 & 0x1f)" ( (binary_expression "uVar6 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);" (assignment_expression "uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f)" identifier = (binary_expression "param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f)" (binary_expression "param_4 >> (uVar6 & 0x1f)" identifier >> (parenthesized_expression "(uVar6 & 0x1f)" ( (binary_expression "uVar6 & 0x1f" identifier & number_literal) ))) | (binary_expression "param_3 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar4 = uVar3 >> 0x10;" (assignment_expression "uVar4 = uVar3 >> 0x10" identifier = (binary_expression "uVar3 >> 0x10" identifier >> number_literal)) ;) (if_statement "if (uVar4 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar10 = uVar2 / uVar4;" (assignment_expression "uVar10 = uVar2 / uVar4" identifier = (binary_expression "uVar2 / uVar4" identifier / identifier)) ;) (expression_statement "uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);" (assignment_expression "uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f)" identifier = (binary_expression "param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f)" (binary_expression "param_2 >> (uVar6 & 0x1f)" identifier >> (parenthesized_expression "(uVar6 & 0x1f)" ( (binary_expression "uVar6 & 0x1f" identifier & number_literal) ))) | (binary_expression "param_1 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "param_4 = param_4 << (uVar8 & 0x1f);" (assignment_expression "param_4 = param_4 << (uVar8 & 0x1f)" identifier = (binary_expression "param_4 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar7 = (uVar3 & 0xffff) * uVar10;" (assignment_expression "uVar7 = (uVar3 & 0xffff) * uVar10" identifier = (binary_expression "(uVar3 & 0xffff) * uVar10" (parenthesized_expression "(uVar3 & 0xffff)" ( (binary_expression "uVar3 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;" (assignment_expression "uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10" identifier = (binary_expression "uVar2 % uVar4 << 0x10 | uVar9 >> 0x10" (binary_expression "uVar2 % uVar4 << 0x10" (binary_expression "uVar2 % uVar4" identifier % identifier) << number_literal) | (binary_expression "uVar9 >> 0x10" identifier >> number_literal))) ;) (expression_statement "param_2 = param_2 << (uVar8 & 0x1f);" (assignment_expression "param_2 = param_2 << (uVar8 & 0x1f)" identifier = (binary_expression "param_2 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar2 = uVar10;" (assignment_expression "uVar2 = uVar10" identifier = identifier) ;) (if_statement "if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }" if (parenthesized_expression "(uVar5 < uVar7)" ( (binary_expression "uVar5 < uVar7" identifier < identifier) )) (compound_statement "{\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }" { (expression_statement "uVar5 = uVar5 + uVar3;" (assignment_expression "uVar5 = uVar5 + uVar3" identifier = (binary_expression "uVar5 + uVar3" identifier + identifier)) ;) (expression_statement "uVar2 = uVar10 - 1;" (assignment_expression "uVar2 = uVar10 - 1" identifier = (binary_expression "uVar10 - 1" identifier - number_literal)) ;) (if_statement "if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }" if (parenthesized_expression "((uVar3 <= uVar5) && (uVar5 < uVar7))" ( (binary_expression "(uVar3 <= uVar5) && (uVar5 < uVar7)" (parenthesized_expression "(uVar3 <= uVar5)" ( (binary_expression "uVar3 <= uVar5" identifier <= identifier) )) && (parenthesized_expression "(uVar5 < uVar7)" ( (binary_expression "uVar5 < uVar7" identifier < identifier) ))) )) (compound_statement "{\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }" { (expression_statement "uVar2 = uVar10 - 2;" (assignment_expression "uVar2 = uVar10 - 2" identifier = (binary_expression "uVar10 - 2" identifier - number_literal)) ;) (expression_statement "uVar5 = uVar5 + uVar3;" (assignment_expression "uVar5 = uVar5 + uVar3" identifier = (binary_expression "uVar5 + uVar3" identifier + identifier)) ;) })) })) (if_statement "if (uVar4 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar11 = (uVar5 - uVar7) / uVar4;" (assignment_expression "uVar11 = (uVar5 - uVar7) / uVar4" identifier = (binary_expression "(uVar5 - uVar7) / uVar4" (parenthesized_expression "(uVar5 - uVar7)" ( (binary_expression "uVar5 - uVar7" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar10 = (uVar3 & 0xffff) * uVar11;" (assignment_expression "uVar10 = (uVar3 & 0xffff) * uVar11" identifier = (binary_expression "(uVar3 & 0xffff) * uVar11" (parenthesized_expression "(uVar3 & 0xffff)" ( (binary_expression "uVar3 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;" (assignment_expression "uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff" identifier = (binary_expression "(uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff" (binary_expression "(uVar5 - uVar7) % uVar4 << 0x10" (binary_expression "(uVar5 - uVar7) % uVar4" (parenthesized_expression "(uVar5 - uVar7)" ( (binary_expression "uVar5 - uVar7" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "uVar9 & 0xffff" identifier & number_literal))) ;) (expression_statement "uVar4 = uVar11;" (assignment_expression "uVar4 = uVar11" identifier = identifier) ;) (if_statement "if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }" if (parenthesized_expression "(uVar7 < uVar10)" ( (binary_expression "uVar7 < uVar10" identifier < identifier) )) (compound_statement "{\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }" { (expression_statement "uVar7 = uVar7 + uVar3;" (assignment_expression "uVar7 = uVar7 + uVar3" identifier = (binary_expression "uVar7 + uVar3" identifier + identifier)) ;) (expression_statement "uVar4 = uVar11 - 1;" (assignment_expression "uVar4 = uVar11 - 1" identifier = (binary_expression "uVar11 - 1" identifier - number_literal)) ;) (if_statement "if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }" if (parenthesized_expression "((uVar3 <= uVar7) && (uVar7 < uVar10))" ( (binary_expression "(uVar3 <= uVar7) && (uVar7 < uVar10)" (parenthesized_expression "(uVar3 <= uVar7)" ( (binary_expression "uVar3 <= uVar7" identifier <= identifier) )) && (parenthesized_expression "(uVar7 < uVar10)" ( (binary_expression "uVar7 < uVar10" identifier < identifier) ))) )) (compound_statement "{\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }" { (expression_statement "uVar4 = uVar11 - 2;" (assignment_expression "uVar4 = uVar11 - 2" identifier = (binary_expression "uVar11 - 2" identifier - number_literal)) ;) (expression_statement "uVar7 = uVar7 + uVar3;" (assignment_expression "uVar7 = uVar7 + uVar3" identifier = (binary_expression "uVar7 + uVar3" identifier + identifier)) ;) })) })) (expression_statement "uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;" (assignment_expression "uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4" (call_expression "(ulonglong)(uVar2 << 0x10 | uVar4)" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(uVar2 << 0x10 | uVar4)" ( (binary_expression "uVar2 << 0x10 | uVar4" (binary_expression "uVar2 << 0x10" identifier << number_literal) | identifier) ))) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (if_statement "if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }" if (parenthesized_expression "(CONCAT44(uVar7 - uVar10,param_2) < uVar1)" ( (binary_expression "CONCAT44(uVar7 - uVar10,param_2) < uVar1" (call_expression "CONCAT44(uVar7 - uVar10,param_2)" identifier (argument_list "(uVar7 - uVar10,param_2)" ( (binary_expression "uVar7 - uVar10" identifier - identifier) , identifier ))) < identifier) )) (compound_statement "{\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }" { (expression_statement "param_4 = (uint)uVar1 - param_4;" (assignment_expression "param_4 = (uint)uVar1 - param_4" identifier = (binary_expression "(uint)uVar1 - param_4" (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier) - identifier)) ;) (expression_statement "uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);" (assignment_expression "uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4)" identifier = (call_expression "CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4)" identifier (argument_list "(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4)" ( (binary_expression "((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4)" (parenthesized_expression "((int)(uVar1 >> 0x20) - uVar3)" ( (binary_expression "(int)(uVar1 >> 0x20) - uVar3" (cast_expression "(int)(uVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 >> 0x20)" ( (binary_expression "uVar1 >> 0x20" identifier >> number_literal) ))) - identifier) )) - (call_expression "(uint)((uint)uVar1 < param_4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((uint)uVar1 < param_4)" ( (binary_expression "(uint)uVar1 < param_4" (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier) < identifier) )))) , identifier )))) ;) })) (expression_statement "uVar4 = param_2 - (int)uVar1;" (assignment_expression "uVar4 = param_2 - (int)uVar1" identifier = (binary_expression "param_2 - (int)uVar1" identifier - (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);" (assignment_expression "uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4)" identifier = (binary_expression "((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4)" (parenthesized_expression "((uVar7 - uVar10) - (int)(uVar1 >> 0x20))" ( (binary_expression "(uVar7 - uVar10) - (int)(uVar1 >> 0x20)" (parenthesized_expression "(uVar7 - uVar10)" ( (binary_expression "uVar7 - uVar10" identifier - identifier) )) - (cast_expression "(int)(uVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 >> 0x20)" ( (binary_expression "uVar1 >> 0x20" identifier >> number_literal) )))) )) - (call_expression "(uint)(param_2 < uVar4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_2 < uVar4)" ( (binary_expression "param_2 < uVar4" identifier < identifier) ))))) ;) (return_statement "return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));" return (call_expression "CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f))" identifier (argument_list "(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f))" ( (binary_expression "uVar2 >> (uVar8 & 0x1f)" identifier >> (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) ))) , (binary_expression "uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f)" (binary_expression "uVar2 << (uVar6 & 0x1f)" identifier << (parenthesized_expression "(uVar6 & 0x1f)" ( (binary_expression "uVar6 & 0x1f" identifier & number_literal) ))) | (binary_expression "uVar4 >> (uVar8 & 0x1f)" identifier >> (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ))) ;) })) (if_statement "if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }" if (parenthesized_expression "((param_3 < param_1) || (param_4 <= param_2))" ( (binary_expression "(param_3 < param_1) || (param_4 <= param_2)" (parenthesized_expression "(param_3 < param_1)" ( (binary_expression "param_3 < param_1" identifier < identifier) )) || (parenthesized_expression "(param_4 <= param_2)" ( (binary_expression "param_4 <= param_2" identifier <= identifier) ))) )) (compound_statement "{\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }" { (return_statement "return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);" return (call_expression "CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4)" identifier (argument_list "((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4)" ( (binary_expression "(param_1 - param_3) - (uint)(param_2 < param_2 - param_4)" (parenthesized_expression "(param_1 - param_3)" ( (binary_expression "param_1 - param_3" identifier - identifier) )) - (call_expression "(uint)(param_2 < param_2 - param_4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_2 < param_2 - param_4)" ( (binary_expression "param_2 < param_2 - param_4" identifier < (binary_expression "param_2 - param_4" identifier - identifier)) )))) , (binary_expression "param_2 - param_4" identifier - identifier) ))) ;) })) })))) (return_statement "return CONCAT44(param_1,param_2);" return (call_expression "CONCAT44(param_1,param_2)" identifier (argument_list "(param_1,param_2)" ( identifier , identifier ))) ;) })))
(translation_unit "undefined8 FUN_0001a700(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  ulonglong uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 == 0) {\n    uVar8 = LZCOUNT(param_4);\n    if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }\n  }\n  else if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }\n  return CONCAT44(param_1,param_2);\n}\n\n" (function_definition "undefined8 FUN_0001a700(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  ulonglong uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 == 0) {\n    uVar8 = LZCOUNT(param_4);\n    if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }\n  }\n  else if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }\n  return CONCAT44(param_1,param_2);\n}" type_identifier (function_declarator "FUN_0001a700(uint param_1,uint param_2,uint param_3,uint param_4)" identifier (parameter_list "(uint param_1,uint param_2,uint param_3,uint param_4)" ( (parameter_declaration "uint param_1" type_identifier identifier) , (parameter_declaration "uint param_2" type_identifier identifier) , (parameter_declaration "uint param_3" type_identifier identifier) , (parameter_declaration "uint param_4" type_identifier identifier) ))) (compound_statement "{\n  ulonglong uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 == 0) {\n    uVar8 = LZCOUNT(param_4);\n    if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }\n  }\n  else if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }\n  return CONCAT44(param_1,param_2);\n}" { (declaration "ulonglong uVar1;" type_identifier identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "uint uVar4;" type_identifier identifier ;) (declaration "uint uVar5;" type_identifier identifier ;) (declaration "uint uVar6;" type_identifier identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "uint uVar10;" type_identifier identifier ;) (declaration "uint uVar11;" type_identifier identifier ;) (if_statement "if (param_3 == 0) {\n    uVar8 = LZCOUNT(param_4);\n    if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }\n  }\n  else if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }" if (parenthesized_expression "(param_3 == 0)" ( (binary_expression "param_3 == 0" identifier == number_literal) )) (compound_statement "{\n    uVar8 = LZCOUNT(param_4);\n    if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }\n  }" { (expression_statement "uVar8 = LZCOUNT(param_4);" (assignment_expression "uVar8 = LZCOUNT(param_4)" identifier = (call_expression "LZCOUNT(param_4)" identifier (argument_list "(param_4)" ( identifier )))) ;) (if_statement "if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }" if (parenthesized_expression "(param_1 < param_4)" ( (binary_expression "param_1 < param_4" identifier < identifier) )) (compound_statement "{\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }" { (expression_statement "uVar2 = param_4 >> 0x10;" (assignment_expression "uVar2 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) (if_statement "if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }" if (parenthesized_expression "(uVar8 != 0)" ( (binary_expression "uVar8 != 0" identifier != number_literal) )) (compound_statement "{\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }" { (expression_statement "uVar2 = param_2 >> (-uVar8 & 0x1f);" (assignment_expression "uVar2 = param_2 >> (-uVar8 & 0x1f)" identifier = (binary_expression "param_2 >> (-uVar8 & 0x1f)" identifier >> (parenthesized_expression "(-uVar8 & 0x1f)" ( (binary_expression "-uVar8 & 0x1f" (unary_expression "-uVar8" - identifier) & number_literal) )))) ;) (expression_statement "param_4 = param_4 << (uVar8 & 0x1f);" (assignment_expression "param_4 = param_4 << (uVar8 & 0x1f)" identifier = (binary_expression "param_4 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "param_2 = param_2 << (uVar8 & 0x1f);" (assignment_expression "param_2 = param_2 << (uVar8 & 0x1f)" identifier = (binary_expression "param_2 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "param_1 = uVar2 | param_1 << (uVar8 & 0x1f);" (assignment_expression "param_1 = uVar2 | param_1 << (uVar8 & 0x1f)" identifier = (binary_expression "uVar2 | param_1 << (uVar8 & 0x1f)" identifier | (binary_expression "param_1 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar2 = param_4 >> 0x10;" (assignment_expression "uVar2 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) })) (if_statement "if (uVar2 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);" (assignment_expression "uVar6 = (param_1 / uVar2) * (param_4 & 0xffff)" identifier = (binary_expression "(param_1 / uVar2) * (param_4 & 0xffff)" (parenthesized_expression "(param_1 / uVar2)" ( (binary_expression "param_1 / uVar2" identifier / identifier) )) * (parenthesized_expression "(param_4 & 0xffff)" ( (binary_expression "param_4 & 0xffff" identifier & number_literal) )))) ;) (expression_statement "uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;" (assignment_expression "uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10" identifier = (binary_expression "param_1 % uVar2 << 0x10 | param_2 >> 0x10" (binary_expression "param_1 % uVar2 << 0x10" (binary_expression "param_1 % uVar2" identifier % identifier) << number_literal) | (binary_expression "param_2 >> 0x10" identifier >> number_literal))) ;) (if_statement "if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }" if (parenthesized_expression "(uVar4 < uVar6)" ( (binary_expression "uVar4 < uVar6" identifier < identifier) )) (compound_statement "{\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }" { (expression_statement "uVar4 = uVar4 + param_4;" (assignment_expression "uVar4 = uVar4 + param_4" identifier = (binary_expression "uVar4 + param_4" identifier + identifier)) ;) (if_statement "if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }" if (parenthesized_expression "((param_4 <= uVar4) && (uVar4 < uVar6))" ( (binary_expression "(param_4 <= uVar4) && (uVar4 < uVar6)" (parenthesized_expression "(param_4 <= uVar4)" ( (binary_expression "param_4 <= uVar4" identifier <= identifier) )) && (parenthesized_expression "(uVar4 < uVar6)" ( (binary_expression "uVar4 < uVar6" identifier < identifier) ))) )) (compound_statement "{\n          uVar4 = uVar4 + param_4;\n        }" { (expression_statement "uVar4 = uVar4 + param_4;" (assignment_expression "uVar4 = uVar4 + param_4" identifier = (binary_expression "uVar4 + param_4" identifier + identifier)) ;) })) })) (if_statement "if (uVar2 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);" (assignment_expression "uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff)" identifier = (binary_expression "((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff)" (parenthesized_expression "((uVar4 - uVar6) / uVar2)" ( (binary_expression "(uVar4 - uVar6) / uVar2" (parenthesized_expression "(uVar4 - uVar6)" ( (binary_expression "uVar4 - uVar6" identifier - identifier) )) / identifier) )) * (parenthesized_expression "(param_4 & 0xffff)" ( (binary_expression "param_4 & 0xffff" identifier & number_literal) )))) ;) (expression_statement "uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;" (assignment_expression "uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff" identifier = (binary_expression "(uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff" (binary_expression "(uVar4 - uVar6) % uVar2 << 0x10" (binary_expression "(uVar4 - uVar6) % uVar2" (parenthesized_expression "(uVar4 - uVar6)" ( (binary_expression "uVar4 - uVar6" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "param_2 & 0xffff" identifier & number_literal))) ;) (if_statement "if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }" if (parenthesized_expression "(((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3))" ( (binary_expression "((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)" (parenthesized_expression "((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2))" ( (binary_expression "(uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)" (parenthesized_expression "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) )) && (parenthesized_expression "(uVar2 = uVar2 + param_4, param_4 <= uVar2)" ( (comma_expression "uVar2 = uVar2 + param_4, param_4 <= uVar2" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) , (binary_expression "param_4 <= uVar2" identifier <= identifier)) ))) )) && (parenthesized_expression "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) ))) )) (compound_statement "{\n        uVar2 = uVar2 + param_4;\n      }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) })) (expression_statement "param_1 = 0;" (assignment_expression "param_1 = 0" identifier = number_literal) ;) (expression_statement "param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);" (assignment_expression "param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f)" identifier = (binary_expression "uVar2 - uVar3 >> (uVar8 & 0x1f)" (binary_expression "uVar2 - uVar3" identifier - identifier) >> (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) }) (else_clause "else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }" else (compound_statement "{\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }" { (if_statement "if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }" if (parenthesized_expression "(param_4 == 0)" ( (binary_expression "param_4 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) (expression_statement "param_4 = 1 / 0;" (assignment_expression "param_4 = 1 / 0" identifier = (binary_expression "1 / 0" number_literal / number_literal)) ;) (expression_statement "uVar8 = LZCOUNT(param_4);" (assignment_expression "uVar8 = LZCOUNT(param_4)" identifier = (call_expression "LZCOUNT(param_4)" identifier (argument_list "(param_4)" ( identifier )))) ;) })) (expression_statement "uVar2 = param_1 - param_4;" (assignment_expression "uVar2 = param_1 - param_4" identifier = (binary_expression "param_1 - param_4" identifier - identifier)) ;) (if_statement "if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }" if (parenthesized_expression "(uVar8 == 0)" ( (binary_expression "uVar8 == 0" identifier == number_literal) )) (compound_statement "{\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }" { (expression_statement "uVar6 = param_4 >> 0x10;" (assignment_expression "uVar6 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) (expression_statement "uVar4 = param_4 & 0xffff;" (assignment_expression "uVar4 = param_4 & 0xffff" identifier = (binary_expression "param_4 & 0xffff" identifier & number_literal)) ;) }) (else_clause "else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }" else (compound_statement "{\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }" { (expression_statement "param_4 = param_4 << (uVar8 & 0x1f);" (assignment_expression "param_4 = param_4 << (uVar8 & 0x1f)" identifier = (binary_expression "param_4 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar6 = param_4 >> 0x10;" (assignment_expression "uVar6 = param_4 >> 0x10" identifier = (binary_expression "param_4 >> 0x10" identifier >> number_literal)) ;) (expression_statement "uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);" (assignment_expression "uVar2 = param_1 >> (0x20 - uVar8 & 0x1f)" identifier = (binary_expression "param_1 >> (0x20 - uVar8 & 0x1f)" identifier >> (parenthesized_expression "(0x20 - uVar8 & 0x1f)" ( (binary_expression "0x20 - uVar8 & 0x1f" (binary_expression "0x20 - uVar8" number_literal - identifier) & number_literal) )))) ;) (expression_statement "uVar4 = param_4 & 0xffff;" (assignment_expression "uVar4 = param_4 & 0xffff" identifier = (binary_expression "param_4 & 0xffff" identifier & number_literal)) ;) (if_statement "if (uVar6 == 0) {\n          trap(7);\n        }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n          trap(7);\n        }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);" (assignment_expression "uVar3 = param_2 >> (0x20 - uVar8 & 0x1f)" identifier = (binary_expression "param_2 >> (0x20 - uVar8 & 0x1f)" identifier >> (parenthesized_expression "(0x20 - uVar8 & 0x1f)" ( (binary_expression "0x20 - uVar8 & 0x1f" (binary_expression "0x20 - uVar8" number_literal - identifier) & number_literal) )))) ;) (expression_statement "param_2 = param_2 << (uVar8 & 0x1f);" (assignment_expression "param_2 = param_2 << (uVar8 & 0x1f)" identifier = (binary_expression "param_2 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);" (assignment_expression "uVar3 = uVar3 | param_1 << (uVar8 & 0x1f)" identifier = (binary_expression "uVar3 | param_1 << (uVar8 & 0x1f)" identifier | (binary_expression "param_1 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar7 = (uVar2 / uVar6) * uVar4;" (assignment_expression "uVar7 = (uVar2 / uVar6) * uVar4" identifier = (binary_expression "(uVar2 / uVar6) * uVar4" (parenthesized_expression "(uVar2 / uVar6)" ( (binary_expression "uVar2 / uVar6" identifier / identifier) )) * identifier)) ;) (expression_statement "uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;" (assignment_expression "uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10" identifier = (binary_expression "uVar2 % uVar6 << 0x10 | uVar3 >> 0x10" (binary_expression "uVar2 % uVar6 << 0x10" (binary_expression "uVar2 % uVar6" identifier % identifier) << number_literal) | (binary_expression "uVar3 >> 0x10" identifier >> number_literal))) ;) (if_statement "if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }" if (parenthesized_expression "(uVar2 < uVar7)" ( (binary_expression "uVar2 < uVar7" identifier < identifier) )) (compound_statement "{\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) (if_statement "if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }" if (parenthesized_expression "((param_4 <= uVar2) && (uVar2 < uVar7))" ( (binary_expression "(param_4 <= uVar2) && (uVar2 < uVar7)" (parenthesized_expression "(param_4 <= uVar2)" ( (binary_expression "param_4 <= uVar2" identifier <= identifier) )) && (parenthesized_expression "(uVar2 < uVar7)" ( (binary_expression "uVar2 < uVar7" identifier < identifier) ))) )) (compound_statement "{\n            uVar2 = uVar2 + param_4;\n          }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) })) })) (if_statement "if (uVar6 == 0) {\n          trap(7);\n        }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n          trap(7);\n        }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;" (assignment_expression "uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4" identifier = (binary_expression "((uVar2 - uVar7) / uVar6) * uVar4" (parenthesized_expression "((uVar2 - uVar7) / uVar6)" ( (binary_expression "(uVar2 - uVar7) / uVar6" (parenthesized_expression "(uVar2 - uVar7)" ( (binary_expression "uVar2 - uVar7" identifier - identifier) )) / identifier) )) * identifier)) ;) (expression_statement "uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;" (assignment_expression "uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff" identifier = (binary_expression "(uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff" (binary_expression "(uVar2 - uVar7) % uVar6 << 0x10" (binary_expression "(uVar2 - uVar7) % uVar6" (parenthesized_expression "(uVar2 - uVar7)" ( (binary_expression "uVar2 - uVar7" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "uVar3 & 0xffff" identifier & number_literal))) ;) (if_statement "if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }" if (parenthesized_expression "(uVar2 < uVar5)" ( (binary_expression "uVar2 < uVar5" identifier < identifier) )) (compound_statement "{\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) (if_statement "if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }" if (parenthesized_expression "((param_4 <= uVar2) && (uVar2 < uVar5))" ( (binary_expression "(param_4 <= uVar2) && (uVar2 < uVar5)" (parenthesized_expression "(param_4 <= uVar2)" ( (binary_expression "param_4 <= uVar2" identifier <= identifier) )) && (parenthesized_expression "(uVar2 < uVar5)" ( (binary_expression "uVar2 < uVar5" identifier < identifier) ))) )) (compound_statement "{\n            uVar2 = uVar2 + param_4;\n          }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) })) })) (expression_statement "uVar2 = uVar2 - uVar5;" (assignment_expression "uVar2 = uVar2 - uVar5" identifier = (binary_expression "uVar2 - uVar5" identifier - identifier)) ;) }))) (if_statement "if (uVar6 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar3 = (uVar2 / uVar6) * uVar4;" (assignment_expression "uVar3 = (uVar2 / uVar6) * uVar4" identifier = (binary_expression "(uVar2 / uVar6) * uVar4" (parenthesized_expression "(uVar2 / uVar6)" ( (binary_expression "uVar2 / uVar6" identifier / identifier) )) * identifier)) ;) (expression_statement "uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;" (assignment_expression "uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10" identifier = (binary_expression "uVar2 % uVar6 << 0x10 | param_2 >> 0x10" (binary_expression "uVar2 % uVar6 << 0x10" (binary_expression "uVar2 % uVar6" identifier % identifier) << number_literal) | (binary_expression "param_2 >> 0x10" identifier >> number_literal))) ;) (if_statement "if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }" if (parenthesized_expression "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) )) (compound_statement "{\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) (if_statement "if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }" if (parenthesized_expression "((param_4 <= uVar2) && (uVar2 < uVar3))" ( (binary_expression "(param_4 <= uVar2) && (uVar2 < uVar3)" (parenthesized_expression "(param_4 <= uVar2)" ( (binary_expression "param_4 <= uVar2" identifier <= identifier) )) && (parenthesized_expression "(uVar2 < uVar3)" ( (binary_expression "uVar2 < uVar3" identifier < identifier) ))) )) (compound_statement "{\n          uVar2 = uVar2 + param_4;\n        }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) })) })) (if_statement "if (uVar6 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar6 == 0)" ( (binary_expression "uVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;" (assignment_expression "uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4" identifier = (binary_expression "((uVar2 - uVar3) / uVar6) * uVar4" (parenthesized_expression "((uVar2 - uVar3) / uVar6)" ( (binary_expression "(uVar2 - uVar3) / uVar6" (parenthesized_expression "(uVar2 - uVar3)" ( (binary_expression "uVar2 - uVar3" identifier - identifier) )) / identifier) )) * identifier)) ;) (expression_statement "uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;" (assignment_expression "uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff" identifier = (binary_expression "(uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff" (binary_expression "(uVar2 - uVar3) % uVar6 << 0x10" (binary_expression "(uVar2 - uVar3) % uVar6" (parenthesized_expression "(uVar2 - uVar3)" ( (binary_expression "uVar2 - uVar3" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "param_2 & 0xffff" identifier & number_literal))) ;) (if_statement "if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }" if (parenthesized_expression "(uVar2 < uVar4)" ( (binary_expression "uVar2 < uVar4" identifier < identifier) )) (compound_statement "{\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) (if_statement "if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }" if (parenthesized_expression "((param_4 <= uVar2) && (uVar2 < uVar4))" ( (binary_expression "(param_4 <= uVar2) && (uVar2 < uVar4)" (parenthesized_expression "(param_4 <= uVar2)" ( (binary_expression "param_4 <= uVar2" identifier <= identifier) )) && (parenthesized_expression "(uVar2 < uVar4)" ( (binary_expression "uVar2 < uVar4" identifier < identifier) ))) )) (compound_statement "{\n          uVar2 = uVar2 + param_4;\n        }" { (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" identifier = (binary_expression "uVar2 + param_4" identifier + identifier)) ;) })) })) (expression_statement "param_1 = 0;" (assignment_expression "param_1 = 0" identifier = number_literal) ;) (expression_statement "param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);" (assignment_expression "param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f)" identifier = (binary_expression "uVar2 - uVar4 >> (uVar8 & 0x1f)" (binary_expression "uVar2 - uVar4" identifier - identifier) >> (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) }))) }) (else_clause "else if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }" else (if_statement "if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }" if (parenthesized_expression "(param_3 <= param_1)" ( (binary_expression "param_3 <= param_1" identifier <= identifier) )) (compound_statement "{\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }" { (expression_statement "uVar8 = LZCOUNT(param_3);" (assignment_expression "uVar8 = LZCOUNT(param_3)" identifier = (call_expression "LZCOUNT(param_3)" identifier (argument_list "(param_3)" ( identifier )))) ;) (if_statement "if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }" if (parenthesized_expression "(uVar8 != 0)" ( (binary_expression "uVar8 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }" { (expression_statement "uVar6 = 0x20 - uVar8;" (assignment_expression "uVar6 = 0x20 - uVar8" identifier = (binary_expression "0x20 - uVar8" number_literal - identifier)) ;) (expression_statement "uVar2 = param_1 >> (uVar6 & 0x1f);" (assignment_expression "uVar2 = param_1 >> (uVar6 & 0x1f)" identifier = (binary_expression "param_1 >> (uVar6 & 0x1f)" identifier >> (parenthesized_expression "(uVar6 & 0x1f)" ( (binary_expression "uVar6 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);" (assignment_expression "uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f)" identifier = (binary_expression "param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f)" (binary_expression "param_4 >> (uVar6 & 0x1f)" identifier >> (parenthesized_expression "(uVar6 & 0x1f)" ( (binary_expression "uVar6 & 0x1f" identifier & number_literal) ))) | (binary_expression "param_3 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "uVar4 = uVar3 >> 0x10;" (assignment_expression "uVar4 = uVar3 >> 0x10" identifier = (binary_expression "uVar3 >> 0x10" identifier >> number_literal)) ;) (if_statement "if (uVar4 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar10 = uVar2 / uVar4;" (assignment_expression "uVar10 = uVar2 / uVar4" identifier = (binary_expression "uVar2 / uVar4" identifier / identifier)) ;) (expression_statement "uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);" (assignment_expression "uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f)" identifier = (binary_expression "param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f)" (binary_expression "param_2 >> (uVar6 & 0x1f)" identifier >> (parenthesized_expression "(uVar6 & 0x1f)" ( (binary_expression "uVar6 & 0x1f" identifier & number_literal) ))) | (binary_expression "param_1 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) ))))) ;) (expression_statement "param_4 = param_4 << (uVar8 & 0x1f);" (assignment_expression "param_4 = param_4 << (uVar8 & 0x1f)" identifier = (binary_expression "param_4 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar7 = (uVar3 & 0xffff) * uVar10;" (assignment_expression "uVar7 = (uVar3 & 0xffff) * uVar10" identifier = (binary_expression "(uVar3 & 0xffff) * uVar10" (parenthesized_expression "(uVar3 & 0xffff)" ( (binary_expression "uVar3 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;" (assignment_expression "uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10" identifier = (binary_expression "uVar2 % uVar4 << 0x10 | uVar9 >> 0x10" (binary_expression "uVar2 % uVar4 << 0x10" (binary_expression "uVar2 % uVar4" identifier % identifier) << number_literal) | (binary_expression "uVar9 >> 0x10" identifier >> number_literal))) ;) (expression_statement "param_2 = param_2 << (uVar8 & 0x1f);" (assignment_expression "param_2 = param_2 << (uVar8 & 0x1f)" identifier = (binary_expression "param_2 << (uVar8 & 0x1f)" identifier << (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ;) (expression_statement "uVar2 = uVar10;" (assignment_expression "uVar2 = uVar10" identifier = identifier) ;) (if_statement "if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }" if (parenthesized_expression "(uVar5 < uVar7)" ( (binary_expression "uVar5 < uVar7" identifier < identifier) )) (compound_statement "{\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }" { (expression_statement "uVar5 = uVar5 + uVar3;" (assignment_expression "uVar5 = uVar5 + uVar3" identifier = (binary_expression "uVar5 + uVar3" identifier + identifier)) ;) (expression_statement "uVar2 = uVar10 - 1;" (assignment_expression "uVar2 = uVar10 - 1" identifier = (binary_expression "uVar10 - 1" identifier - number_literal)) ;) (if_statement "if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }" if (parenthesized_expression "((uVar3 <= uVar5) && (uVar5 < uVar7))" ( (binary_expression "(uVar3 <= uVar5) && (uVar5 < uVar7)" (parenthesized_expression "(uVar3 <= uVar5)" ( (binary_expression "uVar3 <= uVar5" identifier <= identifier) )) && (parenthesized_expression "(uVar5 < uVar7)" ( (binary_expression "uVar5 < uVar7" identifier < identifier) ))) )) (compound_statement "{\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }" { (expression_statement "uVar2 = uVar10 - 2;" (assignment_expression "uVar2 = uVar10 - 2" identifier = (binary_expression "uVar10 - 2" identifier - number_literal)) ;) (expression_statement "uVar5 = uVar5 + uVar3;" (assignment_expression "uVar5 = uVar5 + uVar3" identifier = (binary_expression "uVar5 + uVar3" identifier + identifier)) ;) })) })) (if_statement "if (uVar4 == 0) {\n        trap(7);\n      }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n        trap(7);\n      }" { (expression_statement "trap(7);" (call_expression "trap(7)" identifier (argument_list "(7)" ( number_literal ))) ;) })) (expression_statement "uVar11 = (uVar5 - uVar7) / uVar4;" (assignment_expression "uVar11 = (uVar5 - uVar7) / uVar4" identifier = (binary_expression "(uVar5 - uVar7) / uVar4" (parenthesized_expression "(uVar5 - uVar7)" ( (binary_expression "uVar5 - uVar7" identifier - identifier) )) / identifier)) ;) (expression_statement "uVar10 = (uVar3 & 0xffff) * uVar11;" (assignment_expression "uVar10 = (uVar3 & 0xffff) * uVar11" identifier = (binary_expression "(uVar3 & 0xffff) * uVar11" (parenthesized_expression "(uVar3 & 0xffff)" ( (binary_expression "uVar3 & 0xffff" identifier & number_literal) )) * identifier)) ;) (expression_statement "uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;" (assignment_expression "uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff" identifier = (binary_expression "(uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff" (binary_expression "(uVar5 - uVar7) % uVar4 << 0x10" (binary_expression "(uVar5 - uVar7) % uVar4" (parenthesized_expression "(uVar5 - uVar7)" ( (binary_expression "uVar5 - uVar7" identifier - identifier) )) % identifier) << number_literal) | (binary_expression "uVar9 & 0xffff" identifier & number_literal))) ;) (expression_statement "uVar4 = uVar11;" (assignment_expression "uVar4 = uVar11" identifier = identifier) ;) (if_statement "if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }" if (parenthesized_expression "(uVar7 < uVar10)" ( (binary_expression "uVar7 < uVar10" identifier < identifier) )) (compound_statement "{\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }" { (expression_statement "uVar7 = uVar7 + uVar3;" (assignment_expression "uVar7 = uVar7 + uVar3" identifier = (binary_expression "uVar7 + uVar3" identifier + identifier)) ;) (expression_statement "uVar4 = uVar11 - 1;" (assignment_expression "uVar4 = uVar11 - 1" identifier = (binary_expression "uVar11 - 1" identifier - number_literal)) ;) (if_statement "if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }" if (parenthesized_expression "((uVar3 <= uVar7) && (uVar7 < uVar10))" ( (binary_expression "(uVar3 <= uVar7) && (uVar7 < uVar10)" (parenthesized_expression "(uVar3 <= uVar7)" ( (binary_expression "uVar3 <= uVar7" identifier <= identifier) )) && (parenthesized_expression "(uVar7 < uVar10)" ( (binary_expression "uVar7 < uVar10" identifier < identifier) ))) )) (compound_statement "{\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }" { (expression_statement "uVar4 = uVar11 - 2;" (assignment_expression "uVar4 = uVar11 - 2" identifier = (binary_expression "uVar11 - 2" identifier - number_literal)) ;) (expression_statement "uVar7 = uVar7 + uVar3;" (assignment_expression "uVar7 = uVar7 + uVar3" identifier = (binary_expression "uVar7 + uVar3" identifier + identifier)) ;) })) })) (expression_statement "uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;" (assignment_expression "uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4" identifier = (binary_expression "(ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4" (call_expression "(ulonglong)(uVar2 << 0x10 | uVar4)" (parenthesized_expression "(ulonglong)" ( identifier )) (argument_list "(uVar2 << 0x10 | uVar4)" ( (binary_expression "uVar2 << 0x10 | uVar4" (binary_expression "uVar2 << 0x10" identifier << number_literal) | identifier) ))) * (cast_expression "(ulonglong)param_4" ( (type_descriptor "ulonglong" type_identifier) ) identifier))) ;) (if_statement "if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }" if (parenthesized_expression "(CONCAT44(uVar7 - uVar10,param_2) < uVar1)" ( (binary_expression "CONCAT44(uVar7 - uVar10,param_2) < uVar1" (call_expression "CONCAT44(uVar7 - uVar10,param_2)" identifier (argument_list "(uVar7 - uVar10,param_2)" ( (binary_expression "uVar7 - uVar10" identifier - identifier) , identifier ))) < identifier) )) (compound_statement "{\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }" { (expression_statement "param_4 = (uint)uVar1 - param_4;" (assignment_expression "param_4 = (uint)uVar1 - param_4" identifier = (binary_expression "(uint)uVar1 - param_4" (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier) - identifier)) ;) (expression_statement "uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);" (assignment_expression "uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4)" identifier = (call_expression "CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4)" identifier (argument_list "(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4)" ( (binary_expression "((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4)" (parenthesized_expression "((int)(uVar1 >> 0x20) - uVar3)" ( (binary_expression "(int)(uVar1 >> 0x20) - uVar3" (cast_expression "(int)(uVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 >> 0x20)" ( (binary_expression "uVar1 >> 0x20" identifier >> number_literal) ))) - identifier) )) - (call_expression "(uint)((uint)uVar1 < param_4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "((uint)uVar1 < param_4)" ( (binary_expression "(uint)uVar1 < param_4" (cast_expression "(uint)uVar1" ( (type_descriptor "uint" type_identifier) ) identifier) < identifier) )))) , identifier )))) ;) })) (expression_statement "uVar4 = param_2 - (int)uVar1;" (assignment_expression "uVar4 = param_2 - (int)uVar1" identifier = (binary_expression "param_2 - (int)uVar1" identifier - (cast_expression "(int)uVar1" ( (type_descriptor "int" primitive_type) ) identifier))) ;) (expression_statement "uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);" (assignment_expression "uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4)" identifier = (binary_expression "((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4)" (parenthesized_expression "((uVar7 - uVar10) - (int)(uVar1 >> 0x20))" ( (binary_expression "(uVar7 - uVar10) - (int)(uVar1 >> 0x20)" (parenthesized_expression "(uVar7 - uVar10)" ( (binary_expression "uVar7 - uVar10" identifier - identifier) )) - (cast_expression "(int)(uVar1 >> 0x20)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "(uVar1 >> 0x20)" ( (binary_expression "uVar1 >> 0x20" identifier >> number_literal) )))) )) - (call_expression "(uint)(param_2 < uVar4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_2 < uVar4)" ( (binary_expression "param_2 < uVar4" identifier < identifier) ))))) ;) (return_statement "return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));" return (call_expression "CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f))" identifier (argument_list "(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f))" ( (binary_expression "uVar2 >> (uVar8 & 0x1f)" identifier >> (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) ))) , (binary_expression "uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f)" (binary_expression "uVar2 << (uVar6 & 0x1f)" identifier << (parenthesized_expression "(uVar6 & 0x1f)" ( (binary_expression "uVar6 & 0x1f" identifier & number_literal) ))) | (binary_expression "uVar4 >> (uVar8 & 0x1f)" identifier >> (parenthesized_expression "(uVar8 & 0x1f)" ( (binary_expression "uVar8 & 0x1f" identifier & number_literal) )))) ))) ;) })) (if_statement "if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }" if (parenthesized_expression "((param_3 < param_1) || (param_4 <= param_2))" ( (binary_expression "(param_3 < param_1) || (param_4 <= param_2)" (parenthesized_expression "(param_3 < param_1)" ( (binary_expression "param_3 < param_1" identifier < identifier) )) || (parenthesized_expression "(param_4 <= param_2)" ( (binary_expression "param_4 <= param_2" identifier <= identifier) ))) )) (compound_statement "{\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }" { (return_statement "return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);" return (call_expression "CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4)" identifier (argument_list "((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4)" ( (binary_expression "(param_1 - param_3) - (uint)(param_2 < param_2 - param_4)" (parenthesized_expression "(param_1 - param_3)" ( (binary_expression "param_1 - param_3" identifier - identifier) )) - (call_expression "(uint)(param_2 < param_2 - param_4)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(param_2 < param_2 - param_4)" ( (binary_expression "param_2 < param_2 - param_4" identifier < (binary_expression "param_2 - param_4" identifier - identifier)) )))) , (binary_expression "param_2 - param_4" identifier - identifier) ))) ;) })) })))) (return_statement "return CONCAT44(param_1,param_2);" return (call_expression "CONCAT44(param_1,param_2)" identifier (argument_list "(param_1,param_2)" ( identifier , identifier ))) ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> (parenthesized_expression ( (binary_expression (unary_expression - IDENT) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT / IDENT) )) * (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression IDENT % IDENT) << LIT) | (binary_expression IDENT >> LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) / IDENT) )) * (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) % IDENT) << LIT) | (binary_expression IDENT & LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + IDENT)) , (binary_expression IDENT <= IDENT)) ))) )) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT - IDENT) >> (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression LIT / LIT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> (parenthesized_expression ( (binary_expression (binary_expression LIT - IDENT) & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT | (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT / IDENT) )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression IDENT % IDENT) << LIT) | (binary_expression IDENT >> LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) / IDENT) )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) % IDENT) << LIT) | (binary_expression IDENT & LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT / IDENT) )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression IDENT % IDENT) << LIT) | (binary_expression IDENT >> LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) / IDENT) )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) % IDENT) << LIT) | (binary_expression IDENT & LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT - IDENT) >> (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) }))) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression LIT - IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT >> LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT / IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression IDENT % IDENT) << LIT) | (binary_expression IDENT >> LIT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( LIT ))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) / IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) % IDENT) << LIT) | (binary_expression IDENT & LIT))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) && (parenthesized_expression ( (binary_expression IDENT < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) })) })) (expression_statement (assignment_expression IDENT = (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (binary_expression IDENT << LIT) | IDENT) ))) * (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression (call_expression IDENT (argument_list ( (binary_expression IDENT - IDENT) , IDENT ))) < IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) - IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT >> LIT) ))) - IDENT) )) - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < IDENT) )))) , IDENT )))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) - (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression IDENT >> LIT) )))) )) - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < IDENT) ))))) ;) (return_statement return (call_expression IDENT (argument_list ( (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) ))) , (binary_expression (binary_expression IDENT << (parenthesized_expression ( (binary_expression IDENT & LIT) ))) | (binary_expression IDENT >> (parenthesized_expression ( (binary_expression IDENT & LIT) )))) ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) || (parenthesized_expression ( (binary_expression IDENT <= IDENT) ))) )) (compound_statement { (return_statement return (call_expression IDENT (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression IDENT - IDENT) )) - (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT < (binary_expression IDENT - IDENT)) )))) , (binary_expression IDENT - IDENT) ))) ;) })) })))) (return_statement return (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })))
(function_definition "undefined8 FUN_0001a700(uint param_1,uint param_2,uint param_3,uint param_4)\n\n{\n  ulonglong uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 == 0) {\n    uVar8 = LZCOUNT(param_4);\n    if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }\n  }\n  else if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }\n  return CONCAT44(param_1,param_2);\n}" (type_identifier "undefined8") (function_declarator "FUN_0001a700(uint param_1,uint param_2,uint param_3,uint param_4)" (identifier "FUN_0001a700") (parameter_list "(uint param_1,uint param_2,uint param_3,uint param_4)" (( "(") (parameter_declaration "uint param_1" (type_identifier "uint") (identifier "param_1")) (, ",") (parameter_declaration "uint param_2" (type_identifier "uint") (identifier "param_2")) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) (, ",") (parameter_declaration "uint param_4" (type_identifier "uint") (identifier "param_4")) () ")"))) (compound_statement "{\n  ulonglong uVar1;\n  uint uVar2;\n  uint uVar3;\n  uint uVar4;\n  uint uVar5;\n  uint uVar6;\n  uint uVar7;\n  uint uVar8;\n  uint uVar9;\n  uint uVar10;\n  uint uVar11;\n  \n  if (param_3 == 0) {\n    uVar8 = LZCOUNT(param_4);\n    if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }\n  }\n  else if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }\n  return CONCAT44(param_1,param_2);\n}" ({ "{") (declaration "ulonglong uVar1;" (type_identifier "ulonglong") (identifier "uVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "uint uVar4;" (type_identifier "uint") (identifier "uVar4") (; ";")) (declaration "uint uVar5;" (type_identifier "uint") (identifier "uVar5") (; ";")) (declaration "uint uVar6;" (type_identifier "uint") (identifier "uVar6") (; ";")) (declaration "uint uVar7;" (type_identifier "uint") (identifier "uVar7") (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "uint uVar9;" (type_identifier "uint") (identifier "uVar9") (; ";")) (declaration "uint uVar10;" (type_identifier "uint") (identifier "uVar10") (; ";")) (declaration "uint uVar11;" (type_identifier "uint") (identifier "uVar11") (; ";")) (if_statement "if (param_3 == 0) {\n    uVar8 = LZCOUNT(param_4);\n    if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }\n  }\n  else if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }" (if "if") (parenthesized_expression "(param_3 == 0)" (( "(") (binary_expression "param_3 == 0" (identifier "param_3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    uVar8 = LZCOUNT(param_4);\n    if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }\n  }" ({ "{") (expression_statement "uVar8 = LZCOUNT(param_4);" (assignment_expression "uVar8 = LZCOUNT(param_4)" (identifier "uVar8") (= "=") (call_expression "LZCOUNT(param_4)" (identifier "LZCOUNT") (argument_list "(param_4)" (( "(") (identifier "param_4") () ")")))) (; ";")) (if_statement "if (param_1 < param_4) {\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }\n    else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }" (if "if") (parenthesized_expression "(param_1 < param_4)" (( "(") (binary_expression "param_1 < param_4" (identifier "param_1") (< "<") (identifier "param_4")) () ")")) (compound_statement "{\n      uVar2 = param_4 >> 0x10;\n      if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);\n      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;\n      if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }\n      if (uVar2 == 0) {\n        trap(7);\n      }\n      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);\n      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;\n      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);\n    }" ({ "{") (expression_statement "uVar2 = param_4 >> 0x10;" (assignment_expression "uVar2 = param_4 >> 0x10" (identifier "uVar2") (= "=") (binary_expression "param_4 >> 0x10" (identifier "param_4") (>> ">>") (number_literal "0x10"))) (; ";")) (if_statement "if (uVar8 != 0) {\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }" (if "if") (parenthesized_expression "(uVar8 != 0)" (( "(") (binary_expression "uVar8 != 0" (identifier "uVar8") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        uVar2 = param_2 >> (-uVar8 & 0x1f);\n        param_4 = param_4 << (uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);\n        uVar2 = param_4 >> 0x10;\n      }" ({ "{") (expression_statement "uVar2 = param_2 >> (-uVar8 & 0x1f);" (assignment_expression "uVar2 = param_2 >> (-uVar8 & 0x1f)" (identifier "uVar2") (= "=") (binary_expression "param_2 >> (-uVar8 & 0x1f)" (identifier "param_2") (>> ">>") (parenthesized_expression "(-uVar8 & 0x1f)" (( "(") (binary_expression "-uVar8 & 0x1f" (unary_expression "-uVar8" (- "-") (identifier "uVar8")) (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "param_4 = param_4 << (uVar8 & 0x1f);" (assignment_expression "param_4 = param_4 << (uVar8 & 0x1f)" (identifier "param_4") (= "=") (binary_expression "param_4 << (uVar8 & 0x1f)" (identifier "param_4") (<< "<<") (parenthesized_expression "(uVar8 & 0x1f)" (( "(") (binary_expression "uVar8 & 0x1f" (identifier "uVar8") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "param_2 = param_2 << (uVar8 & 0x1f);" (assignment_expression "param_2 = param_2 << (uVar8 & 0x1f)" (identifier "param_2") (= "=") (binary_expression "param_2 << (uVar8 & 0x1f)" (identifier "param_2") (<< "<<") (parenthesized_expression "(uVar8 & 0x1f)" (( "(") (binary_expression "uVar8 & 0x1f" (identifier "uVar8") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "param_1 = uVar2 | param_1 << (uVar8 & 0x1f);" (assignment_expression "param_1 = uVar2 | param_1 << (uVar8 & 0x1f)" (identifier "param_1") (= "=") (binary_expression "uVar2 | param_1 << (uVar8 & 0x1f)" (identifier "uVar2") (| "|") (binary_expression "param_1 << (uVar8 & 0x1f)" (identifier "param_1") (<< "<<") (parenthesized_expression "(uVar8 & 0x1f)" (( "(") (binary_expression "uVar8 & 0x1f" (identifier "uVar8") (& "&") (number_literal "0x1f")) () ")"))))) (; ";")) (expression_statement "uVar2 = param_4 >> 0x10;" (assignment_expression "uVar2 = param_4 >> 0x10" (identifier "uVar2") (= "=") (binary_expression "param_4 >> 0x10" (identifier "param_4") (>> ">>") (number_literal "0x10"))) (; ";")) (} "}"))) (if_statement "if (uVar2 == 0) {\n        trap(7);\n      }" (if "if") (parenthesized_expression "(uVar2 == 0)" (( "(") (binary_expression "uVar2 == 0" (identifier "uVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        trap(7);\n      }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);" (assignment_expression "uVar6 = (param_1 / uVar2) * (param_4 & 0xffff)" (identifier "uVar6") (= "=") (binary_expression "(param_1 / uVar2) * (param_4 & 0xffff)" (parenthesized_expression "(param_1 / uVar2)" (( "(") (binary_expression "param_1 / uVar2" (identifier "param_1") (/ "/") (identifier "uVar2")) () ")")) (* "*") (parenthesized_expression "(param_4 & 0xffff)" (( "(") (binary_expression "param_4 & 0xffff" (identifier "param_4") (& "&") (number_literal "0xffff")) () ")")))) (; ";")) (expression_statement "uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;" (assignment_expression "uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10" (identifier "uVar4") (= "=") (binary_expression "param_1 % uVar2 << 0x10 | param_2 >> 0x10" (binary_expression "param_1 % uVar2 << 0x10" (binary_expression "param_1 % uVar2" (identifier "param_1") (% "%") (identifier "uVar2")) (<< "<<") (number_literal "0x10")) (| "|") (binary_expression "param_2 >> 0x10" (identifier "param_2") (>> ">>") (number_literal "0x10")))) (; ";")) (if_statement "if (uVar4 < uVar6) {\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }" (if "if") (parenthesized_expression "(uVar4 < uVar6)" (( "(") (binary_expression "uVar4 < uVar6" (identifier "uVar4") (< "<") (identifier "uVar6")) () ")")) (compound_statement "{\n        uVar4 = uVar4 + param_4;\n        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }\n      }" ({ "{") (expression_statement "uVar4 = uVar4 + param_4;" (assignment_expression "uVar4 = uVar4 + param_4" (identifier "uVar4") (= "=") (binary_expression "uVar4 + param_4" (identifier "uVar4") (+ "+") (identifier "param_4"))) (; ";")) (if_statement "if ((param_4 <= uVar4) && (uVar4 < uVar6)) {\n          uVar4 = uVar4 + param_4;\n        }" (if "if") (parenthesized_expression "((param_4 <= uVar4) && (uVar4 < uVar6))" (( "(") (binary_expression "(param_4 <= uVar4) && (uVar4 < uVar6)" (parenthesized_expression "(param_4 <= uVar4)" (( "(") (binary_expression "param_4 <= uVar4" (identifier "param_4") (<= "<=") (identifier "uVar4")) () ")")) (&& "&&") (parenthesized_expression "(uVar4 < uVar6)" (( "(") (binary_expression "uVar4 < uVar6" (identifier "uVar4") (< "<") (identifier "uVar6")) () ")"))) () ")")) (compound_statement "{\n          uVar4 = uVar4 + param_4;\n        }" ({ "{") (expression_statement "uVar4 = uVar4 + param_4;" (assignment_expression "uVar4 = uVar4 + param_4" (identifier "uVar4") (= "=") (binary_expression "uVar4 + param_4" (identifier "uVar4") (+ "+") (identifier "param_4"))) (; ";")) (} "}"))) (} "}"))) (if_statement "if (uVar2 == 0) {\n        trap(7);\n      }" (if "if") (parenthesized_expression "(uVar2 == 0)" (( "(") (binary_expression "uVar2 == 0" (identifier "uVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        trap(7);\n      }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);" (assignment_expression "uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff)" (identifier "uVar3") (= "=") (binary_expression "((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff)" (parenthesized_expression "((uVar4 - uVar6) / uVar2)" (( "(") (binary_expression "(uVar4 - uVar6) / uVar2" (parenthesized_expression "(uVar4 - uVar6)" (( "(") (binary_expression "uVar4 - uVar6" (identifier "uVar4") (- "-") (identifier "uVar6")) () ")")) (/ "/") (identifier "uVar2")) () ")")) (* "*") (parenthesized_expression "(param_4 & 0xffff)" (( "(") (binary_expression "param_4 & 0xffff" (identifier "param_4") (& "&") (number_literal "0xffff")) () ")")))) (; ";")) (expression_statement "uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;" (assignment_expression "uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff" (identifier "uVar2") (= "=") (binary_expression "(uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff" (binary_expression "(uVar4 - uVar6) % uVar2 << 0x10" (binary_expression "(uVar4 - uVar6) % uVar2" (parenthesized_expression "(uVar4 - uVar6)" (( "(") (binary_expression "uVar4 - uVar6" (identifier "uVar4") (- "-") (identifier "uVar6")) () ")")) (% "%") (identifier "uVar2")) (<< "<<") (number_literal "0x10")) (| "|") (binary_expression "param_2 & 0xffff" (identifier "param_2") (& "&") (number_literal "0xffff")))) (; ";")) (if_statement "if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {\n        uVar2 = uVar2 + param_4;\n      }" (if "if") (parenthesized_expression "(((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3))" (( "(") (binary_expression "((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)" (parenthesized_expression "((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2))" (( "(") (binary_expression "(uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)" (parenthesized_expression "(uVar2 < uVar3)" (( "(") (binary_expression "uVar2 < uVar3" (identifier "uVar2") (< "<") (identifier "uVar3")) () ")")) (&& "&&") (parenthesized_expression "(uVar2 = uVar2 + param_4, param_4 <= uVar2)" (( "(") (comma_expression "uVar2 = uVar2 + param_4, param_4 <= uVar2" (assignment_expression "uVar2 = uVar2 + param_4" (identifier "uVar2") (= "=") (binary_expression "uVar2 + param_4" (identifier "uVar2") (+ "+") (identifier "param_4"))) (, ",") (binary_expression "param_4 <= uVar2" (identifier "param_4") (<= "<=") (identifier "uVar2"))) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(uVar2 < uVar3)" (( "(") (binary_expression "uVar2 < uVar3" (identifier "uVar2") (< "<") (identifier "uVar3")) () ")"))) () ")")) (compound_statement "{\n        uVar2 = uVar2 + param_4;\n      }" ({ "{") (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" (identifier "uVar2") (= "=") (binary_expression "uVar2 + param_4" (identifier "uVar2") (+ "+") (identifier "param_4"))) (; ";")) (} "}"))) (expression_statement "param_1 = 0;" (assignment_expression "param_1 = 0" (identifier "param_1") (= "=") (number_literal "0")) (; ";")) (expression_statement "param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);" (assignment_expression "param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f)" (identifier "param_2") (= "=") (binary_expression "uVar2 - uVar3 >> (uVar8 & 0x1f)" (binary_expression "uVar2 - uVar3" (identifier "uVar2") (- "-") (identifier "uVar3")) (>> ">>") (parenthesized_expression "(uVar8 & 0x1f)" (( "(") (binary_expression "uVar8 & 0x1f" (identifier "uVar8") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (} "}")) (else_clause "else {\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }" (else "else") (compound_statement "{\n      if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }\n      uVar2 = param_1 - param_4;\n      if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar3 = (uVar2 / uVar6) * uVar4;\n      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;\n      if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      if (uVar6 == 0) {\n        trap(7);\n      }\n      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;\n      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;\n      if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }\n      param_1 = 0;\n      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);\n    }" ({ "{") (if_statement "if (param_4 == 0) {\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }" (if "if") (parenthesized_expression "(param_4 == 0)" (( "(") (binary_expression "param_4 == 0" (identifier "param_4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        trap(7);\n        param_4 = 1 / 0;\n        uVar8 = LZCOUNT(param_4);\n      }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (expression_statement "param_4 = 1 / 0;" (assignment_expression "param_4 = 1 / 0" (identifier "param_4") (= "=") (binary_expression "1 / 0" (number_literal "1") (/ "/") (number_literal "0"))) (; ";")) (expression_statement "uVar8 = LZCOUNT(param_4);" (assignment_expression "uVar8 = LZCOUNT(param_4)" (identifier "uVar8") (= "=") (call_expression "LZCOUNT(param_4)" (identifier "LZCOUNT") (argument_list "(param_4)" (( "(") (identifier "param_4") () ")")))) (; ";")) (} "}"))) (expression_statement "uVar2 = param_1 - param_4;" (assignment_expression "uVar2 = param_1 - param_4" (identifier "uVar2") (= "=") (binary_expression "param_1 - param_4" (identifier "param_1") (- "-") (identifier "param_4"))) (; ";")) (if_statement "if (uVar8 == 0) {\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }\n      else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }" (if "if") (parenthesized_expression "(uVar8 == 0)" (( "(") (binary_expression "uVar8 == 0" (identifier "uVar8") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        uVar6 = param_4 >> 0x10;\n        uVar4 = param_4 & 0xffff;\n      }" ({ "{") (expression_statement "uVar6 = param_4 >> 0x10;" (assignment_expression "uVar6 = param_4 >> 0x10" (identifier "uVar6") (= "=") (binary_expression "param_4 >> 0x10" (identifier "param_4") (>> ">>") (number_literal "0x10"))) (; ";")) (expression_statement "uVar4 = param_4 & 0xffff;" (assignment_expression "uVar4 = param_4 & 0xffff" (identifier "uVar4") (= "=") (binary_expression "param_4 & 0xffff" (identifier "param_4") (& "&") (number_literal "0xffff"))) (; ";")) (} "}")) (else_clause "else {\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }" (else "else") (compound_statement "{\n        param_4 = param_4 << (uVar8 & 0x1f);\n        uVar6 = param_4 >> 0x10;\n        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);\n        uVar4 = param_4 & 0xffff;\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);\n        param_2 = param_2 << (uVar8 & 0x1f);\n        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);\n        uVar7 = (uVar2 / uVar6) * uVar4;\n        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;\n        if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        if (uVar6 == 0) {\n          trap(7);\n        }\n        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;\n        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;\n        if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }\n        uVar2 = uVar2 - uVar5;\n      }" ({ "{") (expression_statement "param_4 = param_4 << (uVar8 & 0x1f);" (assignment_expression "param_4 = param_4 << (uVar8 & 0x1f)" (identifier "param_4") (= "=") (binary_expression "param_4 << (uVar8 & 0x1f)" (identifier "param_4") (<< "<<") (parenthesized_expression "(uVar8 & 0x1f)" (( "(") (binary_expression "uVar8 & 0x1f" (identifier "uVar8") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar6 = param_4 >> 0x10;" (assignment_expression "uVar6 = param_4 >> 0x10" (identifier "uVar6") (= "=") (binary_expression "param_4 >> 0x10" (identifier "param_4") (>> ">>") (number_literal "0x10"))) (; ";")) (expression_statement "uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);" (assignment_expression "uVar2 = param_1 >> (0x20 - uVar8 & 0x1f)" (identifier "uVar2") (= "=") (binary_expression "param_1 >> (0x20 - uVar8 & 0x1f)" (identifier "param_1") (>> ">>") (parenthesized_expression "(0x20 - uVar8 & 0x1f)" (( "(") (binary_expression "0x20 - uVar8 & 0x1f" (binary_expression "0x20 - uVar8" (number_literal "0x20") (- "-") (identifier "uVar8")) (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar4 = param_4 & 0xffff;" (assignment_expression "uVar4 = param_4 & 0xffff" (identifier "uVar4") (= "=") (binary_expression "param_4 & 0xffff" (identifier "param_4") (& "&") (number_literal "0xffff"))) (; ";")) (if_statement "if (uVar6 == 0) {\n          trap(7);\n        }" (if "if") (parenthesized_expression "(uVar6 == 0)" (( "(") (binary_expression "uVar6 == 0" (identifier "uVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          trap(7);\n        }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);" (assignment_expression "uVar3 = param_2 >> (0x20 - uVar8 & 0x1f)" (identifier "uVar3") (= "=") (binary_expression "param_2 >> (0x20 - uVar8 & 0x1f)" (identifier "param_2") (>> ">>") (parenthesized_expression "(0x20 - uVar8 & 0x1f)" (( "(") (binary_expression "0x20 - uVar8 & 0x1f" (binary_expression "0x20 - uVar8" (number_literal "0x20") (- "-") (identifier "uVar8")) (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "param_2 = param_2 << (uVar8 & 0x1f);" (assignment_expression "param_2 = param_2 << (uVar8 & 0x1f)" (identifier "param_2") (= "=") (binary_expression "param_2 << (uVar8 & 0x1f)" (identifier "param_2") (<< "<<") (parenthesized_expression "(uVar8 & 0x1f)" (( "(") (binary_expression "uVar8 & 0x1f" (identifier "uVar8") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);" (assignment_expression "uVar3 = uVar3 | param_1 << (uVar8 & 0x1f)" (identifier "uVar3") (= "=") (binary_expression "uVar3 | param_1 << (uVar8 & 0x1f)" (identifier "uVar3") (| "|") (binary_expression "param_1 << (uVar8 & 0x1f)" (identifier "param_1") (<< "<<") (parenthesized_expression "(uVar8 & 0x1f)" (( "(") (binary_expression "uVar8 & 0x1f" (identifier "uVar8") (& "&") (number_literal "0x1f")) () ")"))))) (; ";")) (expression_statement "uVar7 = (uVar2 / uVar6) * uVar4;" (assignment_expression "uVar7 = (uVar2 / uVar6) * uVar4" (identifier "uVar7") (= "=") (binary_expression "(uVar2 / uVar6) * uVar4" (parenthesized_expression "(uVar2 / uVar6)" (( "(") (binary_expression "uVar2 / uVar6" (identifier "uVar2") (/ "/") (identifier "uVar6")) () ")")) (* "*") (identifier "uVar4"))) (; ";")) (expression_statement "uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;" (assignment_expression "uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10" (identifier "uVar2") (= "=") (binary_expression "uVar2 % uVar6 << 0x10 | uVar3 >> 0x10" (binary_expression "uVar2 % uVar6 << 0x10" (binary_expression "uVar2 % uVar6" (identifier "uVar2") (% "%") (identifier "uVar6")) (<< "<<") (number_literal "0x10")) (| "|") (binary_expression "uVar3 >> 0x10" (identifier "uVar3") (>> ">>") (number_literal "0x10")))) (; ";")) (if_statement "if (uVar2 < uVar7) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }" (if "if") (parenthesized_expression "(uVar2 < uVar7)" (( "(") (binary_expression "uVar2 < uVar7" (identifier "uVar2") (< "<") (identifier "uVar7")) () ")")) (compound_statement "{\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }" ({ "{") (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" (identifier "uVar2") (= "=") (binary_expression "uVar2 + param_4" (identifier "uVar2") (+ "+") (identifier "param_4"))) (; ";")) (if_statement "if ((param_4 <= uVar2) && (uVar2 < uVar7)) {\n            uVar2 = uVar2 + param_4;\n          }" (if "if") (parenthesized_expression "((param_4 <= uVar2) && (uVar2 < uVar7))" (( "(") (binary_expression "(param_4 <= uVar2) && (uVar2 < uVar7)" (parenthesized_expression "(param_4 <= uVar2)" (( "(") (binary_expression "param_4 <= uVar2" (identifier "param_4") (<= "<=") (identifier "uVar2")) () ")")) (&& "&&") (parenthesized_expression "(uVar2 < uVar7)" (( "(") (binary_expression "uVar2 < uVar7" (identifier "uVar2") (< "<") (identifier "uVar7")) () ")"))) () ")")) (compound_statement "{\n            uVar2 = uVar2 + param_4;\n          }" ({ "{") (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" (identifier "uVar2") (= "=") (binary_expression "uVar2 + param_4" (identifier "uVar2") (+ "+") (identifier "param_4"))) (; ";")) (} "}"))) (} "}"))) (if_statement "if (uVar6 == 0) {\n          trap(7);\n        }" (if "if") (parenthesized_expression "(uVar6 == 0)" (( "(") (binary_expression "uVar6 == 0" (identifier "uVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          trap(7);\n        }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;" (assignment_expression "uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4" (identifier "uVar5") (= "=") (binary_expression "((uVar2 - uVar7) / uVar6) * uVar4" (parenthesized_expression "((uVar2 - uVar7) / uVar6)" (( "(") (binary_expression "(uVar2 - uVar7) / uVar6" (parenthesized_expression "(uVar2 - uVar7)" (( "(") (binary_expression "uVar2 - uVar7" (identifier "uVar2") (- "-") (identifier "uVar7")) () ")")) (/ "/") (identifier "uVar6")) () ")")) (* "*") (identifier "uVar4"))) (; ";")) (expression_statement "uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;" (assignment_expression "uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff" (identifier "uVar2") (= "=") (binary_expression "(uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff" (binary_expression "(uVar2 - uVar7) % uVar6 << 0x10" (binary_expression "(uVar2 - uVar7) % uVar6" (parenthesized_expression "(uVar2 - uVar7)" (( "(") (binary_expression "uVar2 - uVar7" (identifier "uVar2") (- "-") (identifier "uVar7")) () ")")) (% "%") (identifier "uVar6")) (<< "<<") (number_literal "0x10")) (| "|") (binary_expression "uVar3 & 0xffff" (identifier "uVar3") (& "&") (number_literal "0xffff")))) (; ";")) (if_statement "if (uVar2 < uVar5) {\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }" (if "if") (parenthesized_expression "(uVar2 < uVar5)" (( "(") (binary_expression "uVar2 < uVar5" (identifier "uVar2") (< "<") (identifier "uVar5")) () ")")) (compound_statement "{\n          uVar2 = uVar2 + param_4;\n          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }\n        }" ({ "{") (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" (identifier "uVar2") (= "=") (binary_expression "uVar2 + param_4" (identifier "uVar2") (+ "+") (identifier "param_4"))) (; ";")) (if_statement "if ((param_4 <= uVar2) && (uVar2 < uVar5)) {\n            uVar2 = uVar2 + param_4;\n          }" (if "if") (parenthesized_expression "((param_4 <= uVar2) && (uVar2 < uVar5))" (( "(") (binary_expression "(param_4 <= uVar2) && (uVar2 < uVar5)" (parenthesized_expression "(param_4 <= uVar2)" (( "(") (binary_expression "param_4 <= uVar2" (identifier "param_4") (<= "<=") (identifier "uVar2")) () ")")) (&& "&&") (parenthesized_expression "(uVar2 < uVar5)" (( "(") (binary_expression "uVar2 < uVar5" (identifier "uVar2") (< "<") (identifier "uVar5")) () ")"))) () ")")) (compound_statement "{\n            uVar2 = uVar2 + param_4;\n          }" ({ "{") (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" (identifier "uVar2") (= "=") (binary_expression "uVar2 + param_4" (identifier "uVar2") (+ "+") (identifier "param_4"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "uVar2 = uVar2 - uVar5;" (assignment_expression "uVar2 = uVar2 - uVar5" (identifier "uVar2") (= "=") (binary_expression "uVar2 - uVar5" (identifier "uVar2") (- "-") (identifier "uVar5"))) (; ";")) (} "}")))) (if_statement "if (uVar6 == 0) {\n        trap(7);\n      }" (if "if") (parenthesized_expression "(uVar6 == 0)" (( "(") (binary_expression "uVar6 == 0" (identifier "uVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        trap(7);\n      }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar3 = (uVar2 / uVar6) * uVar4;" (assignment_expression "uVar3 = (uVar2 / uVar6) * uVar4" (identifier "uVar3") (= "=") (binary_expression "(uVar2 / uVar6) * uVar4" (parenthesized_expression "(uVar2 / uVar6)" (( "(") (binary_expression "uVar2 / uVar6" (identifier "uVar2") (/ "/") (identifier "uVar6")) () ")")) (* "*") (identifier "uVar4"))) (; ";")) (expression_statement "uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;" (assignment_expression "uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10" (identifier "uVar2") (= "=") (binary_expression "uVar2 % uVar6 << 0x10 | param_2 >> 0x10" (binary_expression "uVar2 % uVar6 << 0x10" (binary_expression "uVar2 % uVar6" (identifier "uVar2") (% "%") (identifier "uVar6")) (<< "<<") (number_literal "0x10")) (| "|") (binary_expression "param_2 >> 0x10" (identifier "param_2") (>> ">>") (number_literal "0x10")))) (; ";")) (if_statement "if (uVar2 < uVar3) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }" (if "if") (parenthesized_expression "(uVar2 < uVar3)" (( "(") (binary_expression "uVar2 < uVar3" (identifier "uVar2") (< "<") (identifier "uVar3")) () ")")) (compound_statement "{\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }" ({ "{") (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" (identifier "uVar2") (= "=") (binary_expression "uVar2 + param_4" (identifier "uVar2") (+ "+") (identifier "param_4"))) (; ";")) (if_statement "if ((param_4 <= uVar2) && (uVar2 < uVar3)) {\n          uVar2 = uVar2 + param_4;\n        }" (if "if") (parenthesized_expression "((param_4 <= uVar2) && (uVar2 < uVar3))" (( "(") (binary_expression "(param_4 <= uVar2) && (uVar2 < uVar3)" (parenthesized_expression "(param_4 <= uVar2)" (( "(") (binary_expression "param_4 <= uVar2" (identifier "param_4") (<= "<=") (identifier "uVar2")) () ")")) (&& "&&") (parenthesized_expression "(uVar2 < uVar3)" (( "(") (binary_expression "uVar2 < uVar3" (identifier "uVar2") (< "<") (identifier "uVar3")) () ")"))) () ")")) (compound_statement "{\n          uVar2 = uVar2 + param_4;\n        }" ({ "{") (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" (identifier "uVar2") (= "=") (binary_expression "uVar2 + param_4" (identifier "uVar2") (+ "+") (identifier "param_4"))) (; ";")) (} "}"))) (} "}"))) (if_statement "if (uVar6 == 0) {\n        trap(7);\n      }" (if "if") (parenthesized_expression "(uVar6 == 0)" (( "(") (binary_expression "uVar6 == 0" (identifier "uVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        trap(7);\n      }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;" (assignment_expression "uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4" (identifier "uVar4") (= "=") (binary_expression "((uVar2 - uVar3) / uVar6) * uVar4" (parenthesized_expression "((uVar2 - uVar3) / uVar6)" (( "(") (binary_expression "(uVar2 - uVar3) / uVar6" (parenthesized_expression "(uVar2 - uVar3)" (( "(") (binary_expression "uVar2 - uVar3" (identifier "uVar2") (- "-") (identifier "uVar3")) () ")")) (/ "/") (identifier "uVar6")) () ")")) (* "*") (identifier "uVar4"))) (; ";")) (expression_statement "uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;" (assignment_expression "uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff" (identifier "uVar2") (= "=") (binary_expression "(uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff" (binary_expression "(uVar2 - uVar3) % uVar6 << 0x10" (binary_expression "(uVar2 - uVar3) % uVar6" (parenthesized_expression "(uVar2 - uVar3)" (( "(") (binary_expression "uVar2 - uVar3" (identifier "uVar2") (- "-") (identifier "uVar3")) () ")")) (% "%") (identifier "uVar6")) (<< "<<") (number_literal "0x10")) (| "|") (binary_expression "param_2 & 0xffff" (identifier "param_2") (& "&") (number_literal "0xffff")))) (; ";")) (if_statement "if (uVar2 < uVar4) {\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }" (if "if") (parenthesized_expression "(uVar2 < uVar4)" (( "(") (binary_expression "uVar2 < uVar4" (identifier "uVar2") (< "<") (identifier "uVar4")) () ")")) (compound_statement "{\n        uVar2 = uVar2 + param_4;\n        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }\n      }" ({ "{") (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" (identifier "uVar2") (= "=") (binary_expression "uVar2 + param_4" (identifier "uVar2") (+ "+") (identifier "param_4"))) (; ";")) (if_statement "if ((param_4 <= uVar2) && (uVar2 < uVar4)) {\n          uVar2 = uVar2 + param_4;\n        }" (if "if") (parenthesized_expression "((param_4 <= uVar2) && (uVar2 < uVar4))" (( "(") (binary_expression "(param_4 <= uVar2) && (uVar2 < uVar4)" (parenthesized_expression "(param_4 <= uVar2)" (( "(") (binary_expression "param_4 <= uVar2" (identifier "param_4") (<= "<=") (identifier "uVar2")) () ")")) (&& "&&") (parenthesized_expression "(uVar2 < uVar4)" (( "(") (binary_expression "uVar2 < uVar4" (identifier "uVar2") (< "<") (identifier "uVar4")) () ")"))) () ")")) (compound_statement "{\n          uVar2 = uVar2 + param_4;\n        }" ({ "{") (expression_statement "uVar2 = uVar2 + param_4;" (assignment_expression "uVar2 = uVar2 + param_4" (identifier "uVar2") (= "=") (binary_expression "uVar2 + param_4" (identifier "uVar2") (+ "+") (identifier "param_4"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "param_1 = 0;" (assignment_expression "param_1 = 0" (identifier "param_1") (= "=") (number_literal "0")) (; ";")) (expression_statement "param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);" (assignment_expression "param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f)" (identifier "param_2") (= "=") (binary_expression "uVar2 - uVar4 >> (uVar8 & 0x1f)" (binary_expression "uVar2 - uVar4" (identifier "uVar2") (- "-") (identifier "uVar4")) (>> ">>") (parenthesized_expression "(uVar8 & 0x1f)" (( "(") (binary_expression "uVar8 & 0x1f" (identifier "uVar8") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (} "}")))) (} "}")) (else_clause "else if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }" (else "else") (if_statement "if (param_3 <= param_1) {\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }" (if "if") (parenthesized_expression "(param_3 <= param_1)" (( "(") (binary_expression "param_3 <= param_1" (identifier "param_3") (<= "<=") (identifier "param_1")) () ")")) (compound_statement "{\n    uVar8 = LZCOUNT(param_3);\n    if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }\n    if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }\n  }" ({ "{") (expression_statement "uVar8 = LZCOUNT(param_3);" (assignment_expression "uVar8 = LZCOUNT(param_3)" (identifier "uVar8") (= "=") (call_expression "LZCOUNT(param_3)" (identifier "LZCOUNT") (argument_list "(param_3)" (( "(") (identifier "param_3") () ")")))) (; ";")) (if_statement "if (uVar8 != 0) {\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }" (if "if") (parenthesized_expression "(uVar8 != 0)" (( "(") (binary_expression "uVar8 != 0" (identifier "uVar8") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      uVar6 = 0x20 - uVar8;\n      uVar2 = param_1 >> (uVar6 & 0x1f);\n      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);\n      uVar4 = uVar3 >> 0x10;\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar10 = uVar2 / uVar4;\n      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);\n      param_4 = param_4 << (uVar8 & 0x1f);\n      uVar7 = (uVar3 & 0xffff) * uVar10;\n      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;\n      param_2 = param_2 << (uVar8 & 0x1f);\n      uVar2 = uVar10;\n      if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }\n      if (uVar4 == 0) {\n        trap(7);\n      }\n      uVar11 = (uVar5 - uVar7) / uVar4;\n      uVar10 = (uVar3 & 0xffff) * uVar11;\n      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;\n      uVar4 = uVar11;\n      if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }\n      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;\n      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }\n      uVar4 = param_2 - (int)uVar1;\n      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);\n      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));\n    }" ({ "{") (expression_statement "uVar6 = 0x20 - uVar8;" (assignment_expression "uVar6 = 0x20 - uVar8" (identifier "uVar6") (= "=") (binary_expression "0x20 - uVar8" (number_literal "0x20") (- "-") (identifier "uVar8"))) (; ";")) (expression_statement "uVar2 = param_1 >> (uVar6 & 0x1f);" (assignment_expression "uVar2 = param_1 >> (uVar6 & 0x1f)" (identifier "uVar2") (= "=") (binary_expression "param_1 >> (uVar6 & 0x1f)" (identifier "param_1") (>> ">>") (parenthesized_expression "(uVar6 & 0x1f)" (( "(") (binary_expression "uVar6 & 0x1f" (identifier "uVar6") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);" (assignment_expression "uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f)" (identifier "uVar3") (= "=") (binary_expression "param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f)" (binary_expression "param_4 >> (uVar6 & 0x1f)" (identifier "param_4") (>> ">>") (parenthesized_expression "(uVar6 & 0x1f)" (( "(") (binary_expression "uVar6 & 0x1f" (identifier "uVar6") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (binary_expression "param_3 << (uVar8 & 0x1f)" (identifier "param_3") (<< "<<") (parenthesized_expression "(uVar8 & 0x1f)" (( "(") (binary_expression "uVar8 & 0x1f" (identifier "uVar8") (& "&") (number_literal "0x1f")) () ")"))))) (; ";")) (expression_statement "uVar4 = uVar3 >> 0x10;" (assignment_expression "uVar4 = uVar3 >> 0x10" (identifier "uVar4") (= "=") (binary_expression "uVar3 >> 0x10" (identifier "uVar3") (>> ">>") (number_literal "0x10"))) (; ";")) (if_statement "if (uVar4 == 0) {\n        trap(7);\n      }" (if "if") (parenthesized_expression "(uVar4 == 0)" (( "(") (binary_expression "uVar4 == 0" (identifier "uVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        trap(7);\n      }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar10 = uVar2 / uVar4;" (assignment_expression "uVar10 = uVar2 / uVar4" (identifier "uVar10") (= "=") (binary_expression "uVar2 / uVar4" (identifier "uVar2") (/ "/") (identifier "uVar4"))) (; ";")) (expression_statement "uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);" (assignment_expression "uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f)" (identifier "uVar9") (= "=") (binary_expression "param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f)" (binary_expression "param_2 >> (uVar6 & 0x1f)" (identifier "param_2") (>> ">>") (parenthesized_expression "(uVar6 & 0x1f)" (( "(") (binary_expression "uVar6 & 0x1f" (identifier "uVar6") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (binary_expression "param_1 << (uVar8 & 0x1f)" (identifier "param_1") (<< "<<") (parenthesized_expression "(uVar8 & 0x1f)" (( "(") (binary_expression "uVar8 & 0x1f" (identifier "uVar8") (& "&") (number_literal "0x1f")) () ")"))))) (; ";")) (expression_statement "param_4 = param_4 << (uVar8 & 0x1f);" (assignment_expression "param_4 = param_4 << (uVar8 & 0x1f)" (identifier "param_4") (= "=") (binary_expression "param_4 << (uVar8 & 0x1f)" (identifier "param_4") (<< "<<") (parenthesized_expression "(uVar8 & 0x1f)" (( "(") (binary_expression "uVar8 & 0x1f" (identifier "uVar8") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar7 = (uVar3 & 0xffff) * uVar10;" (assignment_expression "uVar7 = (uVar3 & 0xffff) * uVar10" (identifier "uVar7") (= "=") (binary_expression "(uVar3 & 0xffff) * uVar10" (parenthesized_expression "(uVar3 & 0xffff)" (( "(") (binary_expression "uVar3 & 0xffff" (identifier "uVar3") (& "&") (number_literal "0xffff")) () ")")) (* "*") (identifier "uVar10"))) (; ";")) (expression_statement "uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;" (assignment_expression "uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10" (identifier "uVar5") (= "=") (binary_expression "uVar2 % uVar4 << 0x10 | uVar9 >> 0x10" (binary_expression "uVar2 % uVar4 << 0x10" (binary_expression "uVar2 % uVar4" (identifier "uVar2") (% "%") (identifier "uVar4")) (<< "<<") (number_literal "0x10")) (| "|") (binary_expression "uVar9 >> 0x10" (identifier "uVar9") (>> ">>") (number_literal "0x10")))) (; ";")) (expression_statement "param_2 = param_2 << (uVar8 & 0x1f);" (assignment_expression "param_2 = param_2 << (uVar8 & 0x1f)" (identifier "param_2") (= "=") (binary_expression "param_2 << (uVar8 & 0x1f)" (identifier "param_2") (<< "<<") (parenthesized_expression "(uVar8 & 0x1f)" (( "(") (binary_expression "uVar8 & 0x1f" (identifier "uVar8") (& "&") (number_literal "0x1f")) () ")")))) (; ";")) (expression_statement "uVar2 = uVar10;" (assignment_expression "uVar2 = uVar10" (identifier "uVar2") (= "=") (identifier "uVar10")) (; ";")) (if_statement "if (uVar5 < uVar7) {\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }" (if "if") (parenthesized_expression "(uVar5 < uVar7)" (( "(") (binary_expression "uVar5 < uVar7" (identifier "uVar5") (< "<") (identifier "uVar7")) () ")")) (compound_statement "{\n        uVar5 = uVar5 + uVar3;\n        uVar2 = uVar10 - 1;\n        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }\n      }" ({ "{") (expression_statement "uVar5 = uVar5 + uVar3;" (assignment_expression "uVar5 = uVar5 + uVar3" (identifier "uVar5") (= "=") (binary_expression "uVar5 + uVar3" (identifier "uVar5") (+ "+") (identifier "uVar3"))) (; ";")) (expression_statement "uVar2 = uVar10 - 1;" (assignment_expression "uVar2 = uVar10 - 1" (identifier "uVar2") (= "=") (binary_expression "uVar10 - 1" (identifier "uVar10") (- "-") (number_literal "1"))) (; ";")) (if_statement "if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }" (if "if") (parenthesized_expression "((uVar3 <= uVar5) && (uVar5 < uVar7))" (( "(") (binary_expression "(uVar3 <= uVar5) && (uVar5 < uVar7)" (parenthesized_expression "(uVar3 <= uVar5)" (( "(") (binary_expression "uVar3 <= uVar5" (identifier "uVar3") (<= "<=") (identifier "uVar5")) () ")")) (&& "&&") (parenthesized_expression "(uVar5 < uVar7)" (( "(") (binary_expression "uVar5 < uVar7" (identifier "uVar5") (< "<") (identifier "uVar7")) () ")"))) () ")")) (compound_statement "{\n          uVar2 = uVar10 - 2;\n          uVar5 = uVar5 + uVar3;\n        }" ({ "{") (expression_statement "uVar2 = uVar10 - 2;" (assignment_expression "uVar2 = uVar10 - 2" (identifier "uVar2") (= "=") (binary_expression "uVar10 - 2" (identifier "uVar10") (- "-") (number_literal "2"))) (; ";")) (expression_statement "uVar5 = uVar5 + uVar3;" (assignment_expression "uVar5 = uVar5 + uVar3" (identifier "uVar5") (= "=") (binary_expression "uVar5 + uVar3" (identifier "uVar5") (+ "+") (identifier "uVar3"))) (; ";")) (} "}"))) (} "}"))) (if_statement "if (uVar4 == 0) {\n        trap(7);\n      }" (if "if") (parenthesized_expression "(uVar4 == 0)" (( "(") (binary_expression "uVar4 == 0" (identifier "uVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        trap(7);\n      }" ({ "{") (expression_statement "trap(7);" (call_expression "trap(7)" (identifier "trap") (argument_list "(7)" (( "(") (number_literal "7") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar11 = (uVar5 - uVar7) / uVar4;" (assignment_expression "uVar11 = (uVar5 - uVar7) / uVar4" (identifier "uVar11") (= "=") (binary_expression "(uVar5 - uVar7) / uVar4" (parenthesized_expression "(uVar5 - uVar7)" (( "(") (binary_expression "uVar5 - uVar7" (identifier "uVar5") (- "-") (identifier "uVar7")) () ")")) (/ "/") (identifier "uVar4"))) (; ";")) (expression_statement "uVar10 = (uVar3 & 0xffff) * uVar11;" (assignment_expression "uVar10 = (uVar3 & 0xffff) * uVar11" (identifier "uVar10") (= "=") (binary_expression "(uVar3 & 0xffff) * uVar11" (parenthesized_expression "(uVar3 & 0xffff)" (( "(") (binary_expression "uVar3 & 0xffff" (identifier "uVar3") (& "&") (number_literal "0xffff")) () ")")) (* "*") (identifier "uVar11"))) (; ";")) (expression_statement "uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;" (assignment_expression "uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff" (identifier "uVar7") (= "=") (binary_expression "(uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff" (binary_expression "(uVar5 - uVar7) % uVar4 << 0x10" (binary_expression "(uVar5 - uVar7) % uVar4" (parenthesized_expression "(uVar5 - uVar7)" (( "(") (binary_expression "uVar5 - uVar7" (identifier "uVar5") (- "-") (identifier "uVar7")) () ")")) (% "%") (identifier "uVar4")) (<< "<<") (number_literal "0x10")) (| "|") (binary_expression "uVar9 & 0xffff" (identifier "uVar9") (& "&") (number_literal "0xffff")))) (; ";")) (expression_statement "uVar4 = uVar11;" (assignment_expression "uVar4 = uVar11" (identifier "uVar4") (= "=") (identifier "uVar11")) (; ";")) (if_statement "if (uVar7 < uVar10) {\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }" (if "if") (parenthesized_expression "(uVar7 < uVar10)" (( "(") (binary_expression "uVar7 < uVar10" (identifier "uVar7") (< "<") (identifier "uVar10")) () ")")) (compound_statement "{\n        uVar7 = uVar7 + uVar3;\n        uVar4 = uVar11 - 1;\n        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }\n      }" ({ "{") (expression_statement "uVar7 = uVar7 + uVar3;" (assignment_expression "uVar7 = uVar7 + uVar3" (identifier "uVar7") (= "=") (binary_expression "uVar7 + uVar3" (identifier "uVar7") (+ "+") (identifier "uVar3"))) (; ";")) (expression_statement "uVar4 = uVar11 - 1;" (assignment_expression "uVar4 = uVar11 - 1" (identifier "uVar4") (= "=") (binary_expression "uVar11 - 1" (identifier "uVar11") (- "-") (number_literal "1"))) (; ";")) (if_statement "if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }" (if "if") (parenthesized_expression "((uVar3 <= uVar7) && (uVar7 < uVar10))" (( "(") (binary_expression "(uVar3 <= uVar7) && (uVar7 < uVar10)" (parenthesized_expression "(uVar3 <= uVar7)" (( "(") (binary_expression "uVar3 <= uVar7" (identifier "uVar3") (<= "<=") (identifier "uVar7")) () ")")) (&& "&&") (parenthesized_expression "(uVar7 < uVar10)" (( "(") (binary_expression "uVar7 < uVar10" (identifier "uVar7") (< "<") (identifier "uVar10")) () ")"))) () ")")) (compound_statement "{\n          uVar4 = uVar11 - 2;\n          uVar7 = uVar7 + uVar3;\n        }" ({ "{") (expression_statement "uVar4 = uVar11 - 2;" (assignment_expression "uVar4 = uVar11 - 2" (identifier "uVar4") (= "=") (binary_expression "uVar11 - 2" (identifier "uVar11") (- "-") (number_literal "2"))) (; ";")) (expression_statement "uVar7 = uVar7 + uVar3;" (assignment_expression "uVar7 = uVar7 + uVar3" (identifier "uVar7") (= "=") (binary_expression "uVar7 + uVar3" (identifier "uVar7") (+ "+") (identifier "uVar3"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;" (assignment_expression "uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4" (identifier "uVar1") (= "=") (binary_expression "(ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4" (call_expression "(ulonglong)(uVar2 << 0x10 | uVar4)" (parenthesized_expression "(ulonglong)" (( "(") (identifier "ulonglong") () ")")) (argument_list "(uVar2 << 0x10 | uVar4)" (( "(") (binary_expression "uVar2 << 0x10 | uVar4" (binary_expression "uVar2 << 0x10" (identifier "uVar2") (<< "<<") (number_literal "0x10")) (| "|") (identifier "uVar4")) () ")"))) (* "*") (cast_expression "(ulonglong)param_4" (( "(") (type_descriptor "ulonglong" (type_identifier "ulonglong")) () ")") (identifier "param_4")))) (; ";")) (if_statement "if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }" (if "if") (parenthesized_expression "(CONCAT44(uVar7 - uVar10,param_2) < uVar1)" (( "(") (binary_expression "CONCAT44(uVar7 - uVar10,param_2) < uVar1" (call_expression "CONCAT44(uVar7 - uVar10,param_2)" (identifier "CONCAT44") (argument_list "(uVar7 - uVar10,param_2)" (( "(") (binary_expression "uVar7 - uVar10" (identifier "uVar7") (- "-") (identifier "uVar10")) (, ",") (identifier "param_2") () ")"))) (< "<") (identifier "uVar1")) () ")")) (compound_statement "{\n        param_4 = (uint)uVar1 - param_4;\n        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);\n      }" ({ "{") (expression_statement "param_4 = (uint)uVar1 - param_4;" (assignment_expression "param_4 = (uint)uVar1 - param_4" (identifier "param_4") (= "=") (binary_expression "(uint)uVar1 - param_4" (cast_expression "(uint)uVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar1")) (- "-") (identifier "param_4"))) (; ";")) (expression_statement "uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);" (assignment_expression "uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4)" (identifier "uVar1") (= "=") (call_expression "CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4)" (identifier "CONCAT44") (argument_list "(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4)" (( "(") (binary_expression "((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4)" (parenthesized_expression "((int)(uVar1 >> 0x20) - uVar3)" (( "(") (binary_expression "(int)(uVar1 >> 0x20) - uVar3" (cast_expression "(int)(uVar1 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar1 >> 0x20)" (( "(") (binary_expression "uVar1 >> 0x20" (identifier "uVar1") (>> ">>") (number_literal "0x20")) () ")"))) (- "-") (identifier "uVar3")) () ")")) (- "-") (call_expression "(uint)((uint)uVar1 < param_4)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "((uint)uVar1 < param_4)" (( "(") (binary_expression "(uint)uVar1 < param_4" (cast_expression "(uint)uVar1" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "uVar1")) (< "<") (identifier "param_4")) () ")")))) (, ",") (identifier "param_4") () ")")))) (; ";")) (} "}"))) (expression_statement "uVar4 = param_2 - (int)uVar1;" (assignment_expression "uVar4 = param_2 - (int)uVar1" (identifier "uVar4") (= "=") (binary_expression "param_2 - (int)uVar1" (identifier "param_2") (- "-") (cast_expression "(int)uVar1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar1")))) (; ";")) (expression_statement "uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);" (assignment_expression "uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4)" (identifier "uVar2") (= "=") (binary_expression "((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4)" (parenthesized_expression "((uVar7 - uVar10) - (int)(uVar1 >> 0x20))" (( "(") (binary_expression "(uVar7 - uVar10) - (int)(uVar1 >> 0x20)" (parenthesized_expression "(uVar7 - uVar10)" (( "(") (binary_expression "uVar7 - uVar10" (identifier "uVar7") (- "-") (identifier "uVar10")) () ")")) (- "-") (cast_expression "(int)(uVar1 >> 0x20)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "(uVar1 >> 0x20)" (( "(") (binary_expression "uVar1 >> 0x20" (identifier "uVar1") (>> ">>") (number_literal "0x20")) () ")")))) () ")")) (- "-") (call_expression "(uint)(param_2 < uVar4)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(param_2 < uVar4)" (( "(") (binary_expression "param_2 < uVar4" (identifier "param_2") (< "<") (identifier "uVar4")) () ")"))))) (; ";")) (return_statement "return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));" (return "return") (call_expression "CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f))" (identifier "CONCAT44") (argument_list "(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f))" (( "(") (binary_expression "uVar2 >> (uVar8 & 0x1f)" (identifier "uVar2") (>> ">>") (parenthesized_expression "(uVar8 & 0x1f)" (( "(") (binary_expression "uVar8 & 0x1f" (identifier "uVar8") (& "&") (number_literal "0x1f")) () ")"))) (, ",") (binary_expression "uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f)" (binary_expression "uVar2 << (uVar6 & 0x1f)" (identifier "uVar2") (<< "<<") (parenthesized_expression "(uVar6 & 0x1f)" (( "(") (binary_expression "uVar6 & 0x1f" (identifier "uVar6") (& "&") (number_literal "0x1f")) () ")"))) (| "|") (binary_expression "uVar4 >> (uVar8 & 0x1f)" (identifier "uVar4") (>> ">>") (parenthesized_expression "(uVar8 & 0x1f)" (( "(") (binary_expression "uVar8 & 0x1f" (identifier "uVar8") (& "&") (number_literal "0x1f")) () ")")))) () ")"))) (; ";")) (} "}"))) (if_statement "if ((param_3 < param_1) || (param_4 <= param_2)) {\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }" (if "if") (parenthesized_expression "((param_3 < param_1) || (param_4 <= param_2))" (( "(") (binary_expression "(param_3 < param_1) || (param_4 <= param_2)" (parenthesized_expression "(param_3 < param_1)" (( "(") (binary_expression "param_3 < param_1" (identifier "param_3") (< "<") (identifier "param_1")) () ")")) (|| "||") (parenthesized_expression "(param_4 <= param_2)" (( "(") (binary_expression "param_4 <= param_2" (identifier "param_4") (<= "<=") (identifier "param_2")) () ")"))) () ")")) (compound_statement "{\n      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);\n    }" ({ "{") (return_statement "return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);" (return "return") (call_expression "CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4)" (identifier "CONCAT44") (argument_list "((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4)" (( "(") (binary_expression "(param_1 - param_3) - (uint)(param_2 < param_2 - param_4)" (parenthesized_expression "(param_1 - param_3)" (( "(") (binary_expression "param_1 - param_3" (identifier "param_1") (- "-") (identifier "param_3")) () ")")) (- "-") (call_expression "(uint)(param_2 < param_2 - param_4)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(param_2 < param_2 - param_4)" (( "(") (binary_expression "param_2 < param_2 - param_4" (identifier "param_2") (< "<") (binary_expression "param_2 - param_4" (identifier "param_2") (- "-") (identifier "param_4"))) () ")")))) (, ",") (binary_expression "param_2 - param_4" (identifier "param_2") (- "-") (identifier "param_4")) () ")"))) (; ";")) (} "}"))) (} "}"))))) (return_statement "return CONCAT44(param_1,param_2);" (return "return") (call_expression "CONCAT44(param_1,param_2)" (identifier "CONCAT44") (argument_list "(param_1,param_2)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") () ")"))) (; ";")) (} "}")))

/* WARNING: Removing unreachable block (ram,0x0001aae8) */

type_1 function_1(type_2 var_3,type_2 var_6,type_2 var_1,type_2 var_4)

{
  type_3 var_18;
  type_2 var_7;
  type_2 var_11;
  type_2 var_9;
  type_2 var_13;
  type_2 var_10;
  type_2 var_12;
  type_2 var_5;
  type_2 var_15;
  type_2 var_14;
  type_2 var_16;
  
  if (var_1 == 0) {
    var_5 = var_2(var_4);
    if (var_3 < var_4) {
      var_7 = var_4 >> 0x10;
      if (var_5 != 0) {
        var_7 = var_6 >> (-var_5 & 0x1f);
        var_4 = var_4 << (var_5 & 0x1f);
        var_6 = var_6 << (var_5 & 0x1f);
        var_3 = var_7 | var_3 << (var_5 & 0x1f);
        var_7 = var_4 >> 0x10;
      }
      if (var_7 == 0) {
        var_8(7);
      }
      var_10 = (var_3 / var_7) * (var_4 & 0xffff);
      var_9 = var_3 % var_7 << 0x10 | var_6 >> 0x10;
      if (var_9 < var_10) {
        var_9 = var_9 + var_4;
        if ((var_4 <= var_9) && (var_9 < var_10)) {
          var_9 = var_9 + var_4;
        }
      }
      if (var_7 == 0) {
        var_8(7);
      }
      var_11 = ((var_9 - var_10) / var_7) * (var_4 & 0xffff);
      var_7 = (var_9 - var_10) % var_7 << 0x10 | var_6 & 0xffff;
      if (((var_7 < var_11) && (var_7 = var_7 + var_4, var_4 <= var_7)) && (var_7 < var_11)) {
        var_7 = var_7 + var_4;
      }
      var_3 = 0;
      var_6 = var_7 - var_11 >> (var_5 & 0x1f);
    }
    else {
      if (var_4 == 0) {
        var_8(7);
        var_4 = 1 / 0;
        var_5 = var_2(var_4);
      }
      var_7 = var_3 - var_4;
      if (var_5 == 0) {
        var_10 = var_4 >> 0x10;
        var_9 = var_4 & 0xffff;
      }
      else {
        var_4 = var_4 << (var_5 & 0x1f);
        var_10 = var_4 >> 0x10;
        var_7 = var_3 >> (0x20 - var_5 & 0x1f);
        var_9 = var_4 & 0xffff;
        if (var_10 == 0) {
          var_8(7);
        }
        var_11 = var_6 >> (0x20 - var_5 & 0x1f);
        var_6 = var_6 << (var_5 & 0x1f);
        var_11 = var_11 | var_3 << (var_5 & 0x1f);
        var_12 = (var_7 / var_10) * var_9;
        var_7 = var_7 % var_10 << 0x10 | var_11 >> 0x10;
        if (var_7 < var_12) {
          var_7 = var_7 + var_4;
          if ((var_4 <= var_7) && (var_7 < var_12)) {
            var_7 = var_7 + var_4;
          }
        }
        if (var_10 == 0) {
          var_8(7);
        }
        var_13 = ((var_7 - var_12) / var_10) * var_9;
        var_7 = (var_7 - var_12) % var_10 << 0x10 | var_11 & 0xffff;
        if (var_7 < var_13) {
          var_7 = var_7 + var_4;
          if ((var_4 <= var_7) && (var_7 < var_13)) {
            var_7 = var_7 + var_4;
          }
        }
        var_7 = var_7 - var_13;
      }
      if (var_10 == 0) {
        var_8(7);
      }
      var_11 = (var_7 / var_10) * var_9;
      var_7 = var_7 % var_10 << 0x10 | var_6 >> 0x10;
      if (var_7 < var_11) {
        var_7 = var_7 + var_4;
        if ((var_4 <= var_7) && (var_7 < var_11)) {
          var_7 = var_7 + var_4;
        }
      }
      if (var_10 == 0) {
        var_8(7);
      }
      var_9 = ((var_7 - var_11) / var_10) * var_9;
      var_7 = (var_7 - var_11) % var_10 << 0x10 | var_6 & 0xffff;
      if (var_7 < var_9) {
        var_7 = var_7 + var_4;
        if ((var_4 <= var_7) && (var_7 < var_9)) {
          var_7 = var_7 + var_4;
        }
      }
      var_3 = 0;
      var_6 = var_7 - var_9 >> (var_5 & 0x1f);
    }
  }
  else if (var_1 <= var_3) {
    var_5 = var_2(var_1);
    if (var_5 != 0) {
      var_10 = 0x20 - var_5;
      var_7 = var_3 >> (var_10 & 0x1f);
      var_11 = var_4 >> (var_10 & 0x1f) | var_1 << (var_5 & 0x1f);
      var_9 = var_11 >> 0x10;
      if (var_9 == 0) {
        var_8(7);
      }
      var_14 = var_7 / var_9;
      var_15 = var_6 >> (var_10 & 0x1f) | var_3 << (var_5 & 0x1f);
      var_4 = var_4 << (var_5 & 0x1f);
      var_12 = (var_11 & 0xffff) * var_14;
      var_13 = var_7 % var_9 << 0x10 | var_15 >> 0x10;
      var_6 = var_6 << (var_5 & 0x1f);
      var_7 = var_14;
      if (var_13 < var_12) {
        var_13 = var_13 + var_11;
        var_7 = var_14 - 1;
        if ((var_11 <= var_13) && (var_13 < var_12)) {
          var_7 = var_14 - 2;
          var_13 = var_13 + var_11;
        }
      }
      if (var_9 == 0) {
        var_8(7);
      }
      var_16 = (var_13 - var_12) / var_9;
      var_14 = (var_11 & 0xffff) * var_16;
      var_12 = (var_13 - var_12) % var_9 << 0x10 | var_15 & 0xffff;
      var_9 = var_16;
      if (var_12 < var_14) {
        var_12 = var_12 + var_11;
        var_9 = var_16 - 1;
        if ((var_11 <= var_12) && (var_12 < var_14)) {
          var_9 = var_16 - 2;
          var_12 = var_12 + var_11;
        }
      }
      var_18 = (type_3)(var_7 << 0x10 | var_9) * (type_3)var_4;
      if (var_17(var_12 - var_14,var_6) < var_18) {
        var_4 = (type_2)var_18 - var_4;
        var_18 = var_17(((int)(var_18 >> 0x20) - var_11) - (type_2)((type_2)var_18 < var_4),var_4);
      }
      var_9 = var_6 - (int)var_18;
      var_7 = ((var_12 - var_14) - (int)(var_18 >> 0x20)) - (type_2)(var_6 < var_9);
      return var_17(var_7 >> (var_5 & 0x1f),var_7 << (var_10 & 0x1f) | var_9 >> (var_5 & 0x1f));
    }
    if ((var_1 < var_3) || (var_4 <= var_6)) {
      return var_17((var_3 - var_1) - (type_2)(var_6 < var_6 - var_4),var_6 - var_4);
    }
  }
  return var_17(var_3,var_6);
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) 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: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (unary_expression argument: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (identifier))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (identifier)) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))) right: (binary_expression left: (identifier) right: (identifier)))))) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (number_literal) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) right: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) right: (identifier)) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (identifier))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (identifier)) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (identifier))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (identifier)) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (number_literal) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (identifier)) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (identifier)) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (identifier)))) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (identifier)) (identifier))) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (identifier))) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (identifier))))) (identifier))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (identifier))))))) (return_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (binary_expression left: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) right: (binary_expression left: (identifier) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) consequence: (compound_statement (return_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier)))))) (binary_expression left: (identifier) right: (identifier))))))))))) (return_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))))

/* WARNING: Removing unreachable block (ram,0x0001aae8) */

undefined8 MASKED(uint param_1,uint param_2,uint param_3,uint param_4)

{
  ulonglong uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  
  if (param_3 == 0) {
    uVar8 = LZCOUNT(param_4);
    if (param_1 < param_4) {
      uVar2 = param_4 >> 0x10;
      if (uVar8 != 0) {
        uVar2 = param_2 >> (-uVar8 & 0x1f);
        param_4 = param_4 << (uVar8 & 0x1f);
        param_2 = param_2 << (uVar8 & 0x1f);
        param_1 = uVar2 | param_1 << (uVar8 & 0x1f);
        uVar2 = param_4 >> 0x10;
      }
      if (uVar2 == 0) {
        trap(7);
      }
      uVar6 = (param_1 / uVar2) * (param_4 & 0xffff);
      uVar4 = param_1 % uVar2 << 0x10 | param_2 >> 0x10;
      if (uVar4 < uVar6) {
        uVar4 = uVar4 + param_4;
        if ((param_4 <= uVar4) && (uVar4 < uVar6)) {
          uVar4 = uVar4 + param_4;
        }
      }
      if (uVar2 == 0) {
        trap(7);
      }
      uVar3 = ((uVar4 - uVar6) / uVar2) * (param_4 & 0xffff);
      uVar2 = (uVar4 - uVar6) % uVar2 << 0x10 | param_2 & 0xffff;
      if (((uVar2 < uVar3) && (uVar2 = uVar2 + param_4, param_4 <= uVar2)) && (uVar2 < uVar3)) {
        uVar2 = uVar2 + param_4;
      }
      param_1 = 0;
      param_2 = uVar2 - uVar3 >> (uVar8 & 0x1f);
    }
    else {
      if (param_4 == 0) {
        trap(7);
        param_4 = 1 / 0;
        uVar8 = LZCOUNT(param_4);
      }
      uVar2 = param_1 - param_4;
      if (uVar8 == 0) {
        uVar6 = param_4 >> 0x10;
        uVar4 = param_4 & 0xffff;
      }
      else {
        param_4 = param_4 << (uVar8 & 0x1f);
        uVar6 = param_4 >> 0x10;
        uVar2 = param_1 >> (0x20 - uVar8 & 0x1f);
        uVar4 = param_4 & 0xffff;
        if (uVar6 == 0) {
          trap(7);
        }
        uVar3 = param_2 >> (0x20 - uVar8 & 0x1f);
        param_2 = param_2 << (uVar8 & 0x1f);
        uVar3 = uVar3 | param_1 << (uVar8 & 0x1f);
        uVar7 = (uVar2 / uVar6) * uVar4;
        uVar2 = uVar2 % uVar6 << 0x10 | uVar3 >> 0x10;
        if (uVar2 < uVar7) {
          uVar2 = uVar2 + param_4;
          if ((param_4 <= uVar2) && (uVar2 < uVar7)) {
            uVar2 = uVar2 + param_4;
          }
        }
        if (uVar6 == 0) {
          trap(7);
        }
        uVar5 = ((uVar2 - uVar7) / uVar6) * uVar4;
        uVar2 = (uVar2 - uVar7) % uVar6 << 0x10 | uVar3 & 0xffff;
        if (uVar2 < uVar5) {
          uVar2 = uVar2 + param_4;
          if ((param_4 <= uVar2) && (uVar2 < uVar5)) {
            uVar2 = uVar2 + param_4;
          }
        }
        uVar2 = uVar2 - uVar5;
      }
      if (uVar6 == 0) {
        trap(7);
      }
      uVar3 = (uVar2 / uVar6) * uVar4;
      uVar2 = uVar2 % uVar6 << 0x10 | param_2 >> 0x10;
      if (uVar2 < uVar3) {
        uVar2 = uVar2 + param_4;
        if ((param_4 <= uVar2) && (uVar2 < uVar3)) {
          uVar2 = uVar2 + param_4;
        }
      }
      if (uVar6 == 0) {
        trap(7);
      }
      uVar4 = ((uVar2 - uVar3) / uVar6) * uVar4;
      uVar2 = (uVar2 - uVar3) % uVar6 << 0x10 | param_2 & 0xffff;
      if (uVar2 < uVar4) {
        uVar2 = uVar2 + param_4;
        if ((param_4 <= uVar2) && (uVar2 < uVar4)) {
          uVar2 = uVar2 + param_4;
        }
      }
      param_1 = 0;
      param_2 = uVar2 - uVar4 >> (uVar8 & 0x1f);
    }
  }
  else if (param_3 <= param_1) {
    uVar8 = LZCOUNT(param_3);
    if (uVar8 != 0) {
      uVar6 = 0x20 - uVar8;
      uVar2 = param_1 >> (uVar6 & 0x1f);
      uVar3 = param_4 >> (uVar6 & 0x1f) | param_3 << (uVar8 & 0x1f);
      uVar4 = uVar3 >> 0x10;
      if (uVar4 == 0) {
        trap(7);
      }
      uVar10 = uVar2 / uVar4;
      uVar9 = param_2 >> (uVar6 & 0x1f) | param_1 << (uVar8 & 0x1f);
      param_4 = param_4 << (uVar8 & 0x1f);
      uVar7 = (uVar3 & 0xffff) * uVar10;
      uVar5 = uVar2 % uVar4 << 0x10 | uVar9 >> 0x10;
      param_2 = param_2 << (uVar8 & 0x1f);
      uVar2 = uVar10;
      if (uVar5 < uVar7) {
        uVar5 = uVar5 + uVar3;
        uVar2 = uVar10 - 1;
        if ((uVar3 <= uVar5) && (uVar5 < uVar7)) {
          uVar2 = uVar10 - 2;
          uVar5 = uVar5 + uVar3;
        }
      }
      if (uVar4 == 0) {
        trap(7);
      }
      uVar11 = (uVar5 - uVar7) / uVar4;
      uVar10 = (uVar3 & 0xffff) * uVar11;
      uVar7 = (uVar5 - uVar7) % uVar4 << 0x10 | uVar9 & 0xffff;
      uVar4 = uVar11;
      if (uVar7 < uVar10) {
        uVar7 = uVar7 + uVar3;
        uVar4 = uVar11 - 1;
        if ((uVar3 <= uVar7) && (uVar7 < uVar10)) {
          uVar4 = uVar11 - 2;
          uVar7 = uVar7 + uVar3;
        }
      }
      uVar1 = (ulonglong)(uVar2 << 0x10 | uVar4) * (ulonglong)param_4;
      if (CONCAT44(uVar7 - uVar10,param_2) < uVar1) {
        param_4 = (uint)uVar1 - param_4;
        uVar1 = CONCAT44(((int)(uVar1 >> 0x20) - uVar3) - (uint)((uint)uVar1 < param_4),param_4);
      }
      uVar4 = param_2 - (int)uVar1;
      uVar2 = ((uVar7 - uVar10) - (int)(uVar1 >> 0x20)) - (uint)(param_2 < uVar4);
      return CONCAT44(uVar2 >> (uVar8 & 0x1f),uVar2 << (uVar6 & 0x1f) | uVar4 >> (uVar8 & 0x1f));
    }
    if ((param_3 < param_1) || (param_4 <= param_2)) {
      return CONCAT44((param_1 - param_3) - (uint)(param_2 < param_2 - param_4),param_2 - param_4);
    }
  }
  return CONCAT44(param_1,param_2);
}

