package Ġs des Ċ Ċ import Ġs des . Config . IP Ċ Ċ fun Ġgenerate Inverse IP ( ip : ĠList < Int >): ĠList < Int > Ġ{ ĊĠĠĠ Ġval Ġinverse Ip Ġ= Ġmutable ListOf < Int >() ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. ip . size ) ĊĠĠĠĠĠĠĠ Ġinverse Ip . add ( ip . indexOf ( i ) Ġ+ Ġ 1 ) ĊĠĠĠ Ġreturn Ġinverse Ip Ċ } Ċ Ċ fun Ġinitial Per mutation ( x : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġresult Ġ= Ġ 0 ĊĠĠĠ ĠIP . forEach Indexed Ġ{ Ġindex , Ġp Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Bit Ġ= Ġ( x Ġshr Ġ( 8 Ġ- Ġp )) Ġand Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġshifted X Ġ= Ġcurrent Bit Ġshl Ġ( 7 Ġ- Ġindex ) ĊĠĠĠĠĠĠĠ Ġresult Ġ+= Ġshifted X ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ fun Ġinverse Per mutation ( x : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġvar Ġresult Ġ= Ġ 0 ĊĠĠĠ Ġval Ġinverse Ip Ġ= Ġgenerate Inverse IP ( IP ) ĊĠĠĠ Ġinverse Ip . forEach Indexed Ġ{ Ġindex , Ġp Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Bit Ġ= Ġ( x Ġshr Ġ( 8 Ġ- Ġp )) Ġand Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġshifted X Ġ= Ġcurrent Bit Ġshl Ġ( 7 Ġ- Ġindex ) ĊĠĠĠĠĠĠĠ Ġresult Ġ+= Ġshifted X ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ fun Ġswitch ( x : ĠInt ): ĠInt Ġ{ ĊĠĠĠ Ġval Ġm sb Ġ= Ġx Ġshr Ġ 4 ĊĠĠĠ Ġval Ġl sb Ġ= Ġx Ġand Ġ 0 b 1 1 1 1 ĊĠĠĠ Ġreturn Ġ(( lsb Ġshl Ġ 4 ) Ġor Ġm sb ) Ċ }