RtlpHpLfhOwnerMoveSubsegment

INT64 *__fastcall RtlpHpLfhOwnerMoveSubsegment(INT64 a1, INT64 *a2, INT64 a3){
  char v3; 
  INT64 v5; 
  _QWORD *v6; 
  INT64 v7; 
  _QWORD *v8; 
  INT64 **v9; 
  INT64 v11; 
  INT64 **v12; 
  INT64 v13; 
  v3 = a3;
  if( *((_BYTE *)a2 + 38) )
  {
    if( *((_BYTE *)a2 + 38) == 1 )
    {
      v5 = a1 + 40;
    }
    else
    {
      if( *((_BYTE *)a2 + 38) != 2 )
        return a2;
      v5 = 0i64;
    }
    v6 = 0i64;
  }
  else
  {
    v5 = a1 + 24;
    v6 = (_QWORD *)(a1 + 8);
  }
  if( (_DWORD)a3 )
  {
    if( (_DWORD)a3 == 1 )
    {
      v7 = a1 + 40;
    }
    else
    {
      if( (_DWORD)a3 != 2 )
        return a2;
      v7 = 0i64;
    }
    v8 = 0i64;
  }
  else
  {
    v7 = a1 + 24;
    v8 = (_QWORD *)(a1 + 8);
  }
  if( v5 )
  {
    v11 = *a2;
    if( *(INT64 **)(*a2 + 8) != a2 )
      goto LABEL_30;
    v12 = (INT64 **)a2[1];
    if( *v12 != a2 )
      goto LABEL_30;
    *v12 = (INT64 *)v11;
    *(_QWORD *)(v11 + 8) = v12;
    if( v6 )
      --*v6;
  }
  *((_BYTE *)a2 + 38) = v3;
  if( v7 )
  {
    v9 = *(INT64 ***)(v7 + 8);
    if( *v9 != (INT64 *)v7 )
      goto LABEL_30;
    *a2 = v7;
    a2[1] = (INT64)v9;
    *v9 = a2;
    *(_QWORD *)(v7 + 8) = a2;
    if( v8 )
      ++*v8;
    a2 = 0i64;
  }
  if( (*(_BYTE *)a1 & 1) == 0 && *(_QWORD *)(a1 + 8) > 8ui64 )
  {
    a2 = *(INT64 **)v7;
    if( *(_QWORD *)(*(_QWORD *)v7 + 8i64) == v7 )
    {
      v13 = *a2;
      if( *(INT64 **)(*a2 + 8) == a2 )
      {
        *(_QWORD *)v7 = v13;
        *(_QWORD *)(v13 + 8) = v7;
        --*v8;
        *((_BYTE *)a2 + 38) = 2;
        goto LABEL_16;
      }
    }
LABEL_30:
    __fastfail(3u);
  }
LABEL_16:
  if( a2 && *((_BYTE *)a2 + 38) == 2 )
    a2[2] = 0i64;
  return a2;
}

Referenced by:

RtlpHpLfhBucketAddSubsegment
RtlpHpLfhBucketGetSubsegment
RtlpHpLfhSlotAddSubsegment