TtmpTsmIterate

BOOL __fastcall TtmpTsmIterate(INT64 a1, INT64 a2){
  int v2; 
  int v5; 
  int v6; 
  __int64 v7; 
  UINT64 v8; 
  _QWORD *v9; 
  INT64 a4; 
  v2 = *(_DWORD *)(a1 + 44);
  LODWORD(a4) = 0;
  if( v2 == 2 )
  {
    v5 = 1;
  }
  else
  {
    if( v2 != 1 )
    {
      v5 = *(_DWORD *)a1;
      v6 = 0;
      goto LABEL_7;
    }
    v5 = 3;
  }
  v6 = *(_DWORD *)(a1 + 48);
LABEL_7:
  if( *(_BYTE *)(a1 + 41) || v2 == 1 )
  {
    v8 = 0i64;
    *(_QWORD *)(a2 + 16) = *(_QWORD *)(a1 + 16);
  }
  else
  {
    v7 = *(_QWORD *)(a1 + 8);
    *(_QWORD *)(a2 + 16) = v7;
    v8 = *(_QWORD *)(a1 + 16) - v7;
  }
  LODWORD(v9) = v5 - 2;
  if( (unsigned int)(v5 - 2) <= 1 )
  {
    v9 = (_QWORD *)(a2 + 24);
    if( *(_BYTE *)(a1 + 40) )
    {
      v5 = 3;
      *v9 = 0i64;
    }
    else
    {
      TtmpTsmEvaluateTimeouts(*(_QWORD *)(a1 + 24), *(_QWORD *)(a1 + 32), v8, (INT64)&a4, (UINT64 *)(a2 + 24));
      v5 = a4;
      LODWORD(v9) = a4 - 1;
      if( (unsigned int)(a4 - 1) <= 1 )
        v6 = 12;
    }
  }
  else
  {
    *(_QWORD *)(a2 + 24) = 0i64;
  }
  *(_DWORD *)a2 = v5;
  LOBYTE(v9) = *(_DWORD *)a1 != v5;
  *(_BYTE *)(a2 + 4) = (_BYTE)v9;
  *(_DWORD *)(a2 + 8) = v6;
  return(int)v9;
}

Referenced by:

TtmpUpdateTerminalState