anchor.diff:         %% The multiply by add shifted trick avoids creating bignums
          %% which improves performance significantly
          %%
  -       V_a = ?MASK(58, S + ?BSL(58, S, 2)), % V_a = S * 5
  -       V_b = ?ROTL(58, V_a, 7),
  -       ?MASK(58, V_b + ?BSL(58, V_b, 3)) % V_b * 9
  +       %% Scramble ** (all operations modulo word size)
  +       %% ((S * 5) rotl 7) * 9
  +       %%
  +       V_a = S + ?BSL(58, S, 2),                             % * 5
  +       V_b = ?BSL(58, V_a, 7) bor ?MASK(7, V_a bsr (58-7)),  % rotl 7
  +       ?MASK(58, V_b + ?BSL(58, V_b, 3))                     % * 9
      end).
   
   
  
positive.code:     %% const uint64_t result_starstar = rotl(s0 * S, R) * T;
      %%
      {?scramble_starstar(S0, V_0, V_1), SR};
  %%    %% The multiply by add shifted trick avoids creating bignums
  %%    %% which improves performance significantly
  %%    %%
  %%    V0 = ?MASK(58, S0 + ?BSL(58, S0, 2)), % V0 = S0 * 5
  %%    V1 = ?ROTL(58, V0, 7),
  %%    V = ?MASK(58, V1 + ?BSL(58, V1, 3)), % V = V1 * 9
  %%    {V, SR};
  exro928ss_next({[S15], Rs}) ->
      exro928ss_next({[S15|lists:reverse(Rs)], []}).
  
  
negative.code:                        {X :: uint58(), NewAlgState :: exsplus_state()}.
  exsp_next([S1|S0]) ->
      %% Note: members s0 and s1 are swapped here
      S0_1 = ?MASK(58, S0),
      NewS1 = ?exs_next(S0_1, S1, S1_b),
      %% Scramble + (all operations modulo word size)
      %% S0 + NewS1
      {?MASK(58, S0_1 + NewS1), [S0_1|NewS1]}.
  
  -dialyzer({no_improper_lists, exsss_next/1}).
  
  -spec exsss_next(exsplus_state()) -> {uint58(), exsplus_state()}.
  exsss_next([S1|S0]) ->
      %% Note: members s0 and s1 are swapped here
      S0_1 = ?MASK(58, S0),
      NewS1 = ?exs_next(S0_1, S1, S1_b),
      {?scramble_starstar(S0_1, V_1, V_2), [S0_1|NewS1]}.
  
  exsp_uniform({AlgHandler, R0}) ->
      {I, R1} = exsp_next(R0),
  