NormBuffer__SortBeforeSameClass

CHAR __fastcall NormBuffer__SortBeforeSameClass(INT64 a1, UINT8 a2){
  __int64 v2; 
  __int64 v4; 
  __int64 v5; 
  INT64 CurrentOutputChar; 
  __int64 v7; 
  __int64 v8; 
  __int64 v9; 
  INT64 v10; 
  CHAR v11; 
  CHAR v12; 
  INT64 v13; 
  WCHAR **v14; 
  __int64 v15; 
  __int64 v16; 
  __int64 v18; 
  __int64 v19; 
  v2 = *(_QWORD *)(a1 + 40);
  v4 = *(_QWORD *)(a1 + 80);
  *(_QWORD *)(a1 + 104) = v2;
  if( v2 != v4 )
  {
    v18 = v2 - 2;
    v5 = -4i64;
    CurrentOutputChar = (unsigned int)NormBuffer__GetCurrentOutputChar((WCHAR **)a1);
    LOBYTE(v2) = -2;
    if( *(int *)(v7 + 88) <= 0xFFFF )
      v5 = -2i64;
    v9 = v8 + v5;
    if( v18 != v9 )
    {
      v10 = *(_QWORD *)(v7 + 112);
      do
      {
        v11 = Normalization__PageLookup(v10, CurrentOutputChar);
        LOBYTE(v2) = Normalization__TableLookup(v13, v12, v11) & 0x3F;
        if( (unsigned __int8)v2 < a2 )
          break;
        *(_QWORD *)(v15 + 104) = v16;
        v19 = v16 - 2;
        LODWORD(v2) = NormBuffer__GetCurrentOutputChar(v14);
        CurrentOutputChar = (unsigned int)v2;
      }
      while( v19 != v9 );
    }
  }
  return v2;
}

Referenced by:

NormBuffer__AppendAndSortDecomposed