anchor.diff:  
     List<Move> moves = [];
     Piece clickedPiece = gamestate.pieceAt(coordinate);
  -  if (clickedPiece == selectedPiece) {
  -    selectedPiece = null;
  -  } else {
  -    selectedPiece = clickedPiece;
  -  }
  +  selectionState.select(clickedPiece, gamestate);
   
     render(gamestate);
   }
  
positive.code:     return;
    }
    bench = new Bench(parsedGame.player1, parsedGame.player2);
    selectedPiece = null;
    gamestate.initialize(parsedGame.gameEvents);
    gamestate.step(1);
    render(gamestate);
  }
  
  void showNextMove(GameState gamestate) {
    selectedPiece = null;
    gamestate.stepBy(1);
  
    render(gamestate);
  }
  
  void showPreviousMove(GameState gamestate) {
    selectedPiece = null;
    gamestate.stepBy(-1);
  
    render(gamestate);
  }
  
  void showFirstMove(GameState gamestate) {
    selectedPiece = null;
    gamestate.step(1);
  
    render(gamestate);
  }
  
  void showLastMove(GameState gamestate) {
    selectedPiece = null;
    gamestate.stepToEnd();
  
    render(gamestate);
  
negative.code: import '../lib/gamemodel.dart';
  import '../lib/rules.dart';
  
  class SelectionState {
    Piece piece;
    List<Move> validMoves = [];
  
    void select(Piece piece, GameState gamestate) {
      this.piece = piece;
      if (piece == null) {
        validMoves = [];
      } else {
        validMoves = piece.moves(gamestate);
      }
    }
  
    void clear() {
      piece = null;
      validMoves = [];
    }
  }
  
  var camera = new Camera();
  Bench bench;
  SelectionState selectionState = new SelectionState();
  
  
  void main() {
  