anchor.diff:  
       canvas.onMouseUp.listen((MouseEvent e) {
         if (_startDrag != null) {
  -        Matrix4 rotation = dragRotation(_startDrag, e.client, planeDistance);
  +        Multivector rotation =
  +            dragRotation(_startDrag, e.client, planeDistance);
           for (int i = 0; i < ROTATION_POWER; i++) {
  -          _rotation = _rotation.multiply(rotation);
  +          _rotation = rotation * _rotation;
           }
   
           _startDrag = null;
  
positive.code:     _pMatrix = makePerspectiveMatrix(
          radians(90.0), _viewportWidth / _viewportHeight, 0.1, FAR_DISTANCE);
  
      _mvMatrix = new Matrix4.identity();
      _mvMatrix.translate(0.0, 0.0, -1.5);
      _mvMatrix.multiplyTranspose(_rotation);
  
      _mvMatrix.translate(-_center);
      _mvMatrix.scale(_scale);
  
      _setMatrixUniforms();
  
  
negative.code: 
      canvas.onMouseMove.listen((MouseEvent e) {
        if (_startDrag != null) {
          Multivector rotation =
              dragRotation(_startDrag, e.client, planeDistance);
          for (int i = 0; i < ROTATION_POWER; i++) {
            _rotation = rotation * _rotation;
          }
  
          _startDrag = e.client;
  