package Ġcom . so y wiz . dyn are k 2 Ċ Ċ import Ġkotlin . reflect .* Ċ Ċ inline Ġoperator Ġfun ĠK Function < Int >. invoke ( var arg Ġargs : ĠD 2 Expr < *> ): ĠD 2 Expr I Ġ= ĠD 2 Expr . Invoke ( D 2 INT , Ġthis , Ġ* args ) Ċ Ċ val ĠInt . lit Ġget () Ġ= ĠD 2 Expr . IL it ( this ) Ċ Ċ operator Ġfun ĠD 2 Expr I . unary Minus () Ġ= ĠUN OP ( this , ĠD 2 Un Op . NEG ) Ċ Ċ fun ĠBIN OP ( l : ĠD 2 Expr I , Ġop : ĠD 2 IB in Op , Ġr : ĠD 2 Expr I ) Ġ= ĠD 2 Expr . IB in Op ( l , Ġop , Ġr ) Ċ fun ĠCOMP OP ( l : ĠD 2 Expr I , Ġop : ĠD 2 Comp Op , Ġr : ĠD 2 Expr I ) Ġ= ĠD 2 Expr . IC om Op ( l , Ġop , Ġr ) Ċ fun ĠUN OP ( l : ĠD 2 Expr I , Ġop : ĠD 2 Un Op ) Ġ= ĠD 2 Expr . I Un op ( l , Ġop ) Ċ Ċ operator Ġfun ĠD 2 Expr I . plus ( other : ĠD 2 Expr I ) Ġ= ĠBIN OP ( this , ĠD 2 IB in Op . ADD , Ġother ) Ċ operator Ġfun ĠD 2 Expr I . minus ( other : ĠD 2 Expr I ) Ġ= ĠBIN OP ( this , ĠD 2 IB in Op . SUB , Ġother ) Ċ operator Ġfun ĠD 2 Expr I . times ( other : ĠD 2 Expr I ) Ġ= ĠBIN OP ( this , ĠD 2 IB in Op . MUL , Ġother ) Ċ operator Ġfun ĠD 2 Expr I . div ( other : ĠD 2 Expr I ) Ġ= ĠBIN OP ( this , ĠD 2 IB in Op . DIV , Ġother ) Ċ operator Ġfun ĠD 2 Expr I . rem ( other : ĠD 2 Expr I ) Ġ= ĠBIN OP ( this , ĠD 2 IB in Op . REM , Ġother ) Ċ Ċ infix Ġfun ĠD 2 Expr I . SH L ( other : ĠD 2 Expr I ) Ġ= ĠBIN OP ( this , ĠD 2 IB in Op . SH L , Ġother ) Ċ infix Ġfun ĠD 2 Expr I . SH R ( other : ĠD 2 Expr I ) Ġ= ĠBIN OP ( this , ĠD 2 IB in Op . SH R , Ġother ) Ċ infix Ġfun ĠD 2 Expr I . US HR ( other : ĠD 2 Expr I ) Ġ= ĠBIN OP ( this , ĠD 2 IB in Op . US HR , Ġother ) Ċ Ċ infix Ġfun ĠD 2 Expr I . AND ( other : ĠD 2 Expr I ) Ġ= ĠBIN OP ( this , ĠD 2 IB in Op . AND , Ġother ) Ċ infix Ġfun ĠD 2 Expr I . OR ( other : ĠD 2 Expr I ) Ġ= ĠBIN OP ( this , ĠD 2 IB in Op . OR , Ġother ) Ċ infix Ġfun ĠD 2 Expr I . XOR ( other : ĠD 2 Expr I ) Ġ= ĠBIN OP ( this , ĠD 2 IB in Op . XOR , Ġother ) Ċ Ċ infix Ġfun ĠD 2 Expr I . EQ ( other : ĠD 2 Expr I ) Ġ= ĠCOMP OP ( this , ĠD 2 Comp Op . EQ , Ġother ) Ċ infix Ġfun ĠD 2 Expr I . NE ( other : ĠD 2 Expr I ) Ġ= ĠCOMP OP ( this , ĠD 2 Comp Op . NE , Ġother ) Ċ infix Ġfun ĠD 2 Expr I . LT ( other : ĠD 2 Expr I ) Ġ= ĠCOMP OP ( this , ĠD 2 Comp Op . LT , Ġother ) Ċ infix Ġfun ĠD 2 Expr I . LE ( other : ĠD 2 Expr I ) Ġ= ĠCOMP OP ( this , ĠD 2 Comp Op . LE , Ġother ) Ċ infix Ġfun ĠD 2 Expr I . GT ( other : ĠD 2 Expr I ) Ġ= ĠCOMP OP ( this , ĠD 2 Comp Op . GT , Ġother ) Ċ infix Ġfun ĠD 2 Expr I . GE ( other : ĠD 2 Expr I ) Ġ= ĠCOMP OP ( this , ĠD 2 Comp Op . GE , Ġother ) Ċ Ċ private Ġfun ĠInt . mask (): ĠInt Ġ= Ġ( 1 Ġshl Ġthis ) Ġ- Ġ 1 Ċ Ċ fun ĠD 2 Expr I . EXTRACT ( offset : ĠInt , Ġsize : ĠInt ): ĠD 2 Expr I Ġ= Ġ( this ĠS HR Ġoffset . lit ) ĠAND Ġsize . mask (). lit Ċ fun ĠD 2 Expr I . INSERT ( offset : ĠInt , Ġsize : ĠInt , Ġvalue : ĠD 2 Expr I ): ĠD 2 Expr I Ġ= ĊĠĠĠ Ġ( this ĠAND Ġ( size . mask () Ġshl Ġoffset ). lit ) ĠOR Ġ(( value ĠAND Ġsize . mask (). lit ) ĠSH L Ġoffset . lit ) Ċ Ċ fun ĠIN V ( v : ĠD 2 Expr I ) Ġ= Ġv ĠXOR Ġ(- 1 ). lit Ċ