anchor.diff:  
     setupTimer() {
       if (run) {
  -      currentTimer = new Timer(new Duration(milliseconds: runDelay.toInt()), () {
  +      currentTimer = new Timer(new Duration(milliseconds: runDelay.toInt()), ()
  +          {
           currentTimer = null;
           if (run) {
             nextState();
  
positive.code:     context.restore();
    }
  
    click(MouseEvent e) {
      if (game != null) {
        int cellSize = getCellSize();
        Rectangle clientRect = canvas.getBoundingClientRect();
        int x = (e.client.x - clientRect.left) ~/ cellSize;
        int y = (e.client.y - clientRect.top) ~/ cellSize;
        game.set(x, y, !game.get(x, y));
      }
    }
  
  }
  
negative.code: 
    CanvasElement canvas;
  
    bool drawLive = null;
  
    GolRendererComponent(this.scope);
  
    @override
    void onShadowRoot(ShadowRoot shadowRoot) {
      canvas = shadowRoot.querySelector("canvas");
  
      canvas.onMouseDown.listen(drawStart);
      canvas.onMouseMove.listen(drawMove);
      canvas.onMouseUp.listen(drawStop);
      canvas.onMouseLeave.listen(drawStop);
  
      scope.watch('[game, game.version, cellSize, liveColor, deadColor]', (v, _)
          => draw(), context: this);
  