RtlRbRemoveNode

INT8 __fastcall RtlRbRemoveNode(UINT64 *a1, UINT64 a2){
  char v2; 
  UINT64 v4; 
  unsigned __int64 v5; 
  UINT64 v6; 
  unsigned __int64 v7; 
  char v8; 
  unsigned __int64 v9; 
  unsigned __int64 v10; 
  UINT64 v11; 
  __int64 v12; 
  _BOOL8 v13; 
  __int64 v14; 
  char v15; 
  UINT64 v16; 
  unsigned __int64 v17; 
  __int64 v18; 
  UINT64 v19; 
  unsigned __int64 v20; 
  char v21; 
  UINT64 v22; 
  UINT64 v23; 
  UINT64 *v24; 
  __int64 v25; 
  unsigned __int64 v26; 
  char v27; 
  UINT64 v28; 
  __int64 v29; 
  unsigned __int64 v30; 
  char v31; 
  unsigned __int64 v32; 
  unsigned __int64 v33; 
  char v34; 
  unsigned __int64 v35; 
  char v36; 
  unsigned __int64 v37; 
  unsigned __int64 v38; 
  unsigned __int64 v39; 
  unsigned __int64 v40; 
  char v41; 
  __int64 v42; 
  __int64 v43; 
  UINT64 *v44; 
  __int64 v45; 
  UINT64 v46; 
  UINT64 v47; 
  char v48; 
  char v49; 
  unsigned __int64 v50; 
  __int64 v51; 
  __int64 v52; 
  unsigned __int64 v53; 
  __int64 v54; 
  char v55; 
  __int64 v56; 
  char v57; 
  char v58; 
  unsigned __int64 v59; 
  UINT64 v60; 
  unsigned __int64 v61; 
  int v62; 
  __int64 v63; 
  unsigned __int64 v64; 
  __int64 v65; 
  unsigned __int64 v66; 
  __int64 v67; 
  unsigned __int64 *v68; 
  unsigned __int64 v69; 
  unsigned __int64 v70; 
  __int64 v71; 
  UINT64 v72; 
  unsigned __int64 v73; 
  int v74; 
  unsigned __int64 v75; 
  __int64 v76; 
  unsigned __int64 v77; 
  __int64 v78; 
  unsigned __int64 v79; 
  unsigned __int64 v80; 
  unsigned __int64 v81; 
  unsigned __int64 v82; 
  __int64 v83; 
  unsigned __int64 v84; 
  int v85; 
  __int64 *v86; 
  __int64 v87; 
  __int64 v88; 
  unsigned __int64 v89; 
  unsigned __int64 v90; 
  unsigned __int64 v91; 
  unsigned __int64 v92; 
  unsigned __int64 *v93; 
  unsigned __int64 v94; 
  unsigned __int64 v95; 
  bool v96; 
  unsigned __int64 v97; 
  __int64 v98; 
  unsigned __int64 v99; 
  unsigned __int64 v100; 
  __int64 v101; 
  unsigned __int64 v102; 
  __int64 v103; 
  unsigned __int64 v104; 
  unsigned __int64 v105; 
  __int64 v106; 
  unsigned __int64 v107; 
  __int64 v108; 
  unsigned __int64 v109; 
  unsigned __int64 v110; 
  UINT64 v111; 
  UINT64 v112; 
  unsigned __int64 v113; 
  unsigned __int64 v114; 

  v2 = *((_BYTE *)a1 + 8);
  v4 = *(_QWORD *)a2;
  if( (v2 & 1) != 0 && v4 )
    v4 ^= a2;
  v5 = *(_QWORD *)(a2 + 8);
  if( (v2 & 1) != 0 && v5 )
    v5 ^= a2;
  v6 = v5;
  if( v4 )
    v6 = v4;
  v7 = 0i64;
  v8 = v2 & 1;
  v9 = 0i64;
  if( v4 )
    v9 = v5;
  if( !v9 )
  {
    v10 = *(_QWORD *)(a2 + 16) & 0xFFFFFFFFFFFFFFFCui64;
    if( v8 && v10 )
      v10 ^= a2;
    v11 = a2;
    if( !v10 )
    {
      if( v6 )
        *(_QWORD *)(v6 + 16) = 0i64;
      v17 = a1[1];
      v47 = *a1;
      if( (v17 & 1) != 0 )
      {
        if( v47 )
          v47 ^= (unsigned __int64)a1;
        else
          v47 = 0i64;
      }
      if( v47 != a2 )
        goto LABEL_327;
      if( (v17 & 1) != 0 )
      {
        v114 = 0i64;
        LOBYTE(v17) = (unsigned __int8)a1 ^ v6;
        if( v6 )
          v114 = (unsigned __int64)a1 ^ v6;
        a1[1] = v114;
        v48 = v114 | 1;
        *((_BYTE *)a1 + 8) = v48;
      }
      else
      {
        a1[1] = v6;
        v48 = v6;
      }
      if( (v48 & 1) != 0 )
      {
        LOBYTE(v17) = (unsigned __int8)a1 ^ v6;
        if( v6 )
          v7 = (unsigned __int64)a1 ^ v6;
        *a1 = v7;
      }
      else
      {
        *a1 = v6;
      }
      return v17;
    }
    v12 = *(_QWORD *)(v10 + 8);
    if( v8 && v12 )
      v12 ^= v10;
    if( v12 == a2 )
    {
      LODWORD(v13) = 1;
    }
    else
    {
      v18 = *(_QWORD *)v10;
      if( v8 && v18 )
        v18 ^= v10;
      if( v18 != a2 )
        goto LABEL_327;
      v19 = a1[1];
      LODWORD(v13) = 0;
      if( (v19 & 1) != 0 )
      {
        if( v19 == 1 )
          v20 = 0i64;
        else
          v20 = v19 ^ ((unsigned __int64)a1 | 1);
      }
      else
      {
        v20 = a1[1];
      }
      if( v20 == a2 )
      {
        v21 = v19 & 1;
        if( v6 )
        {
          if( v21 )
          {
            a1[1] = (unsigned __int64)a1 ^ v6;
            *((_BYTE *)a1 + 8) = (unsigned __int8)a1 ^ v6 | 1;
          }
          else
          {
            a1[1] = v6;
          }
        }
        else if( v21 )
        {
          a1[1] = (unsigned __int64)a1 ^ v10;
          *((_BYTE *)a1 + 8) = (unsigned __int8)a1 ^ v10 | 1;
        }
        else
        {
          a1[1] = v10;
        }
      }
    }
    LOBYTE(v14) = *(_BYTE *)(a2 + 16);
    goto LABEL_14;
  }
  v22 = *(_QWORD *)v5;
  v11 = v5;
  v10 = v5;
  LODWORD(v13) = 1;
  if( *(_QWORD *)v5 )
  {
    LODWORD(v13) = 0;
    do
    {
      v10 = v11;
      if( v8 && v22 )
        v11 ^= v22;
      else
        v11 = v22;
      v22 = *(_QWORD *)v11;
    }
    while( *(_QWORD *)v11 );
  }
  if( v8 && v4 )
    v23 = v4 ^ v11;
  else
    v23 = v4;
  *(_QWORD *)v11 = v23;
  v24 = (UINT64 *)(v4 + 16);
  v25 = *(_QWORD *)(v4 + 16);
  v26 = v25 & 0xFFFFFFFFFFFFFFFCui64;
  v27 = a1[1] & 1;
  if( v27 && v26 )
    v26 ^= v4;
  if( v26 != a2 )
    goto LABEL_327;
  v28 = v11 ^ v4;
  if( !v27 )
    v28 = v11;
  *v24 = v25 & 3 | v28;
  v29 = *(_QWORD *)(v5 + 16);
  v30 = v29 & 0xFFFFFFFFFFFFFFFCui64;
  v31 = a1[1] & 1;
  if( v31 && v30 )
    v30 ^= v5;
  if( v30 != a2 )
    goto LABEL_327;
  v32 = v5 ^ v11;
  v33 = v5 ^ v11;
  if( !v31 )
    v32 = v11;
  *(_QWORD *)(v5 + 16) = v29 & 3 | v32;
  v6 = *(_QWORD *)(v11 + 8);
  v34 = a1[1] & 1;
  if( v34 && v6 )
    v6 ^= v11;
  if( !v34 )
    v33 = v5;
  *(_QWORD *)(v11 + 8) = v33;
  v14 = *(_QWORD *)(v11 + 16);
  v35 = v14 & 0xFFFFFFFFFFFFFFFCui64;
  v36 = a1[1] & 1;
  if( v36 && v35 )
    v37 = v11 ^ v35;
  else
    v37 = *(_QWORD *)(v11 + 16) & 0xFFFFFFFFFFFFFFFCui64;
  if( v37 != v10 )
  {
    if( v36 )
    {
      if( !v35 )
        goto LABEL_232;
      v35 ^= v11;
    }
    if( v35 )
      goto LABEL_327;
LABEL_232:
    if( v11 != v10 )
      goto LABEL_327;
  }
  v38 = *(_QWORD *)(a2 + 16) & 0xFFFFFFFFFFFFFFFCui64;
  if( v36 )
  {
    if( v38 )
      v38 ^= a2;
    if( v38 )
      v38 ^= v11;
  }
  v39 = v38 | v14 & 3;
  *(_QWORD *)(v11 + 16) = v39;
  *(_BYTE *)(v11 + 16) = v39 ^ (v39 ^ *(_BYTE *)(a2 + 16)) & 1;
  v40 = *(_QWORD *)(a2 + 16) & 0xFFFFFFFFFFFFFFFCui64;
  if( v40 )
  {
    v41 = a1[1] & 1;
    if( v41 )
      v40 ^= a2;
    v42 = *(_QWORD *)(v40 + 8);
    if( v41 && v42 )
      v42 ^= v40;
    v43 = 0i64;
    if( v42 == a2 )
      v43 = 8i64;
    v44 = (UINT64 *)(v43 + v40);
    v45 = *(_QWORD *)(v43 + v40);
    if( v41 && v45 )
      v45 ^= v40;
    if( v45 != a2 )
      goto LABEL_327;
    v46 = v11 ^ v40;
    if( !v41 )
      v46 = v11;
    *v44 = v46;
  }
  else
  {
    v111 = a1[1];
    v112 = *a1;
    if( (v111 & 1) != 0 )
    {
      if( v112 )
        v112 ^= (unsigned __int64)a1;
      else
        v112 = 0i64;
    }
    if( v112 != a2 )
      goto LABEL_327;
    v113 = v11;
    if( (v111 & 1) != 0 )
      v113 = (unsigned __int64)a1 ^ v11;
    *a1 = v113;
  }
LABEL_14:
  v15 = v14 & 1;
  if( (a1[1] & 1) != 0 && v6 )
    v16 = v6 ^ v10;
  else
    v16 = v6;
  LOBYTE(v17) = v13;
  *(_QWORD *)(v10 + 8 * v13) = v16;
  if( v6 )
  {
    v17 = *(_QWORD *)(v6 + 16) & 0xFFFFFFFFFFFFFFFCui64;
    v58 = a1[1] & 1;
    if( v58 && v17 )
      v17 ^= v6;
    if( v17 != v11 )
      goto LABEL_327;
    if( v58 && v10 )
      v10 ^= v6;
    *(_QWORD *)(v6 + 16) = v10;
    return v17;
  }
  if( v15 )
    return v17;
  v49 = *((_BYTE *)a1 + 8);
  while( 1 )
  {
    v50 = v10;
    v51 = !v13;
    v52 = *(_QWORD *)(v10 + 8 * v51);
    if( (v49 & 1) != 0 && v52 )
      v53 = v10 ^ v52;
    else
      v53 = *(_QWORD *)(v10 + 8 * v51);
    if( (*(_BYTE *)(v53 + 16) & 1) == 0 )
      goto LABEL_72;
    v72 = *a1;
    if( (a1[1] & 1) != 0 )
    {
      if( v72 )
        v72 ^= (unsigned __int64)a1;
      else
        v72 = 0i64;
    }
    v73 = *(_QWORD *)(v53 + 16) & 0xFFFFFFFFFFFFFFFCui64;
    v74 = a1[1] & 1;
    if( (a1[1] & 1) != 0 && v73 )
      v73 ^= v53;
    if( v73 != v10 )
      goto LABEL_327;
    if( (a1[1] & 1) != 0 && v52 )
      v52 ^= v10;
    if( v52 != v53 )
      goto LABEL_327;
    v75 = *(_QWORD *)(v10 + 16) & 0xFFFFFFFFFFFFFFFCui64;
    if( (a1[1] & 1) != 0 )
    {
      if( !v75 )
      {
LABEL_199:
        if( v72 != v10 )
          goto LABEL_327;
        v72 = v53;
        goto LABEL_134;
      }
      v75 ^= v10;
    }
    if( !v75 )
      goto LABEL_199;
    v76 = *(_QWORD *)(v75 + 8);
    if( (a1[1] & 1) != 0 && v76 )
      v76 ^= v75;
    if( v76 == v10 )
    {
      v77 = v75 ^ v53;
      if( (a1[1] & 1) == 0 )
        v77 = v53;
      *(_QWORD *)(v75 + 8) = v77;
    }
    else
    {
      v106 = *(_QWORD *)v75;
      if( (a1[1] & 1) != 0 && v106 )
        v106 ^= v75;
      if( v106 != v10 )
        goto LABEL_327;
      v107 = v75 ^ v53;
      if( (a1[1] & 1) == 0 )
        v107 = v53;
      *(_QWORD *)v75 = v107;
    }
LABEL_134:
    if( v74 && v75 )
      v75 ^= v53;
    *(_QWORD *)(v53 + 16) = v75 | *(_DWORD *)(v53 + 16) & 3;
    v78 = *(_QWORD *)(v53 + 8 * v13);
    if( !v74 )
      goto LABEL_136;
    if( v78 )
    {
      v78 ^= v53;
LABEL_136:
      if( v78 )
      {
        v103 = *(_QWORD *)(v78 + 16);
        v104 = v103 & 0xFFFFFFFFFFFFFFFCui64;
        if( v74 && v104 )
          v104 ^= v78;
        if( v104 != v53 )
          goto LABEL_327;
        v105 = v78 ^ v10;
        if( !v74 )
          v105 = v10;
        *(_QWORD *)(v78 + 16) = v103 & 3 | v105;
      }
    }
    if( v74 && v78 )
      v78 ^= v10;
    *(_QWORD *)(v10 + 8 * v51) = v78;
    v79 = v10 ^ v53;
    v80 = v10 ^ v53;
    if( !v74 )
      v80 = v10;
    if( !v74 )
      v79 = v53;
    *(_QWORD *)(v53 + 8 * v13) = v80;
    v81 = v72;
    *(_QWORD *)(v10 + 16) = *(_DWORD *)(v10 + 16) & 3 | v79;
    if( (a1[1] & 1) != 0 )
    {
      v81 = (unsigned __int64)a1 ^ v72;
      if( !v72 )
        v81 = 0i64;
    }
    *a1 = v81;
    *(_BYTE *)(v53 + 16) &= ~1u;
    *(_BYTE *)(v10 + 16) |= 1u;
    v49 = *((_BYTE *)a1 + 8);
    v53 = *(_QWORD *)(v10 + 8 * v51);
    if( (v49 & 1) != 0 && v53 )
      v53 ^= v10;
LABEL_72:
    v54 = *(_QWORD *)v53;
    v55 = v49 & 1;
    if( *(_QWORD *)v53 )
    {
      if( v55 )
        v54 ^= v53;
      if( (*(_BYTE *)(v54 + 16) & 1) != 0 )
        break;
    }
    v56 = *(_QWORD *)(v53 + 8);
    if( v56 )
    {
      if( v55 )
        v56 ^= v53;
      if( (*(_BYTE *)(v56 + 16) & 1) != 0 )
        break;
    }
    v57 = *(_BYTE *)(v10 + 16);
    if( (v57 & 1) != 0 )
    {
      LOBYTE(v17) = v57 & 0xFE;
      *(_BYTE *)(v10 + 16) = v17;
      *(_BYTE *)(v53 + 16) |= 1u;
      return v17;
    }
    *(_BYTE *)(v53 + 16) |= 1u;
    v49 = *((_BYTE *)a1 + 8);
    v17 = *(_QWORD *)(v10 + 16) & 0xFFFFFFFFFFFFFFFCui64;
    if( (v49 & 1) != 0 && v17 )
      v10 ^= v17;
    else
      v10 = *(_QWORD *)(v10 + 16) & 0xFFFFFFFFFFFFFFFCui64;
    if( !v10 )
      return v17;
    v71 = *(_QWORD *)(v10 + 8);
    if( (v49 & 1) != 0 && v71 )
      v71 ^= v10;
    v13 = v71 == v50;
  }
  v59 = *(_QWORD *)(v53 + 8 * v51);
  if( v55 )
  {
    if( v59 )
    {
      v59 ^= v53;
      goto LABEL_93;
    }
  }
  else
  {
LABEL_93:
    if( v59 && (*(_BYTE *)(v59 + 16) & 1) != 0 )
      goto LABEL_95;
  }
  v82 = *(_QWORD *)(v53 + 8 * v13);
  if( v55 && v82 )
    v82 ^= v53;
  *(_BYTE *)(v82 + 16) &= ~1u;
  v83 = (unsigned int)v13 ^ 1;
  v84 = *(_QWORD *)(v82 + 16) & 0xFFFFFFFFFFFFFFFCui64;
  v85 = a1[1] & 1;
  if( (a1[1] & 1) != 0 && v84 )
    v84 ^= v82;
  if( v84 != v53 )
    goto LABEL_327;
  v86 = (__int64 *)(v53 + 8 * v13);
  v87 = *v86;
  if( (a1[1] & 1) != 0 && v87 )
    v87 ^= v53;
  if( v87 != v82 )
    goto LABEL_327;
  v88 = *(_QWORD *)(v10 + 8 * v83);
  if( (a1[1] & 1) != 0 && v88 )
    v88 ^= v10;
  if( v88 != v53 )
    goto LABEL_327;
  v89 = *(_QWORD *)(v53 + 16) & 0xFFFFFFFFFFFFFFFCui64;
  if( (a1[1] & 1) != 0 && v89 )
    v89 ^= v53;
  if( v89 != v10 )
    goto LABEL_327;
  v90 = v82 ^ v10;
  v91 = v82 ^ v10;
  if( (a1[1] & 1) == 0 )
    v91 = v82;
  *(_QWORD *)(v10 + 8 * v83) = v91;
  if( !v85 || !v10 )
    v90 = v10;
  v92 = v90 | *(_DWORD *)(v82 + 16) & 3;
  v93 = (unsigned __int64 *)(v82 + 8 * v83);
  *(_QWORD *)(v82 + 16) = v92;
  v94 = *v93;
  if( !v85 )
  {
LABEL_162:
    if( !v94 )
      goto LABEL_163;
    v108 = *(_QWORD *)(v94 + 16);
    v109 = v108 & 0xFFFFFFFFFFFFFFFCui64;
    if( v85 && v109 )
      v109 ^= v94;
    if( v109 == v82 )
    {
      v110 = v94 ^ v53;
      if( !v85 )
        v110 = v53;
      *(_QWORD *)(v94 + 16) = v108 & 3 | v110;
      goto LABEL_163;
    }
    goto LABEL_327;
  }
  if( v94 )
  {
    v94 ^= v82;
    goto LABEL_162;
  }
LABEL_163:
  if( v85 && v94 )
    v94 ^= v53;
  *v86 = v94;
  v95 = v53 ^ v82;
  v96 = v85 == 0;
  v97 = v53 ^ v82;
  v59 = v53;
  if( v96 )
  {
    v97 = v53;
    if( v96 )
      v95 = v82;
  }
  *v93 = v97;
  *(_QWORD *)(v53 + 16) = *(_DWORD *)(v53 + 16) & 3 | v95;
  v53 = v82;
LABEL_95:
  *(_BYTE *)(v53 + 16) ^= (*(_BYTE *)(v10 + 16) ^ *(_BYTE *)(v53 + 16)) & 1;
  *(_BYTE *)(v10 + 16) &= ~1u;
  *(_BYTE *)(v59 + 16) &= ~1u;
  v60 = *a1;
  if( (a1[1] & 1) != 0 )
  {
    if( v60 )
      v60 ^= (unsigned __int64)a1;
    else
      v60 = 0i64;
  }
  v61 = *(_QWORD *)(v53 + 16) & 0xFFFFFFFFFFFFFFFCui64;
  v62 = a1[1] & 1;
  if( (a1[1] & 1) != 0 && v61 )
    v61 ^= v53;
  if( v61 != v10 )
    goto LABEL_327;
  v63 = *(_QWORD *)(v10 + 8 * v51);
  if( (a1[1] & 1) != 0 && v63 )
    v63 ^= v10;
  if( v63 != v53 )
LABEL_327:
    __fastfail(0x1Du);
  v64 = *(_QWORD *)(v10 + 16) & 0xFFFFFFFFFFFFFFFCui64;
  if( (a1[1] & 1) != 0 )
  {
    if( v64 )
    {
      v64 ^= v10;
      goto LABEL_101;
    }
    goto LABEL_188;
  }
LABEL_101:
  if( !v64 )
  {
LABEL_188:
    if( v60 != v10 )
      goto LABEL_327;
    v60 = v53;
    goto LABEL_107;
  }
  v65 = *(_QWORD *)(v64 + 8);
  if( (a1[1] & 1) != 0 && v65 )
    v65 ^= v64;
  if( v65 == v10 )
  {
    v66 = v64 ^ v53;
    if( (a1[1] & 1) == 0 )
      v66 = v53;
    *(_QWORD *)(v64 + 8) = v66;
  }
  else
  {
    v101 = *(_QWORD *)v64;
    if( (a1[1] & 1) != 0 && v101 )
      v101 ^= v64;
    if( v101 != v10 )
      goto LABEL_327;
    v102 = v64 ^ v53;
    if( (a1[1] & 1) == 0 )
      v102 = v53;
    *(_QWORD *)v64 = v102;
  }
LABEL_107:
  if( v62 && v64 )
    v64 ^= v53;
  *(_QWORD *)(v53 + 16) = v64 | *(_DWORD *)(v53 + 16) & 3;
  v67 = *(_QWORD *)(v53 + 8 * v13);
  v68 = (unsigned __int64 *)(v53 + 8 * v13);
  if( v62 )
  {
    if( v67 )
    {
      v67 ^= v53;
      goto LABEL_109;
    }
  }
  else
  {
LABEL_109:
    if( v67 )
    {
      v98 = *(_QWORD *)(v67 + 16);
      v99 = v98 & 0xFFFFFFFFFFFFFFFCui64;
      if( v62 && v99 )
        v99 ^= v67;
      if( v99 != v53 )
        goto LABEL_327;
      v100 = v10 ^ v67;
      if( !v62 )
        v100 = v10;
      *(_QWORD *)(v67 + 16) = v98 & 3 | v100;
    }
  }
  if( v62 && v67 )
    v67 ^= v10;
  *(_QWORD *)(v10 + 8 * v51) = v67;
  v69 = v10 ^ v53;
  v70 = v10 ^ v53;
  if( !v62 )
    v70 = v10;
  if( !v62 )
    v69 = v53;
  *v68 = v70;
  v17 = v60;
  *(_QWORD *)(v10 + 16) = *(_DWORD *)(v10 + 16) & 3 | v69;
  if( (a1[1] & 1) != 0 )
  {
    v17 = (unsigned __int64)a1 ^ v60;
    if( !v60 )
      v17 = 0i64;
  }
  *a1 = v17;
  return v17;
}

Referenced by:

EtwpDeleteSessionDemuxObject
EtwpRegisterPrivateSession
EtwpReleaseProviderTraitsReference
EtwpSetProviderTraitsCommon
HalFreeCommonBufferThin
HalFreeCommonBufferV3
HvpViewMapPromoteRangeToMapping
HvpViewMapShrinkStorage
IoStopDiskIoAttributionForContext
KiAbEntryRemoveFromTree
KiAbEntryUpdateOwnerTreePosition
KiAbEntryUpdateWaiterTreePosition
KiRemoveSchedulingGroupQueue
KiRemoveTimer2
KiSetClockInterval
KiSetVirtualHeteroClockIntervalRequest
MiBitmapsCachedEntryLengthChanged
MiDeleteImageHotPatchState
MiInvalidatePageFileBitmapsCache
MiRemoveSlabEntry
MiRescanPageFileBitmapPortion
PfSnNameRemove
PspJobIoRateVolumeEntryRemove
RtlpHpLargeFree
RtlpHpSegFreeRangeRemove
RtlpHpSegPageRangeAllocate
RtlpHpVaMgrAlloc
RtlpHpVaMgrRangeCoalesce
RtlpHpVsChunkCoalesce
RtlpHpVsChunkSplit
RtlpHpVsFreeChunkRemove
VmpFaultEntryRemove
VmpMergeMemoryRanges
VmpRemoveMemoryRange