anchor.diff:    }
   
     const Blender();
  -}+}
  
positive.code:   Map<String, double> rgb2hsv(r, g, b) {
      var c = rgb2YCbCr(r, g, b);
      var s = math.sqrt(c['g'] * c['g'] + c['b'] * c['b']),
      h = math.atan2(c['g'], c['b']);
      return {'h': h, s: s, 'v': c['r']};
    }
  
    Map<String, double> hsv2rgb(h, s, v) {
      var g = s * math.sin(h),
      b = s * math.cos(h);
      return YCbCr2rgb(v, g, b);
    }
  
    blend(dom.CanvasElement fromCanvas, dom.CanvasElement destCanvas,
          BlendMode blendMode, {num destX: 0, num destY: 0, num sourceX: 0,
          num sourceY: 0, num width: 0, num height: 0}) {
      if (width == 0) width = fromCanvas.width;
      if (height == 0) height = fromCanvas.height;
  
      width = math.min(
          math.min(width, fromCanvas.width - sourceX), destCanvas.width - destX);
      height = math.min(math.min(height, fromCanvas.height - sourceY),
      destCanvas.height - destY);
  
      var srcD =
      fromCanvas.context2D.getImageData(sourceX, sourceY, width, height);
      var dstD = destCanvas.context2D.getImageData(destX, destY, width, height);
  
      List<int> src = srcD.data;
  
negative.code:     };
    }
  
    /*1.0000   -0.0000    1.4020
  	1.0000   -0.3441   -0.7141
  	1.0000    1.7720    0.0000*/
    Map<String, double> YCbCr2rgb(r, g, b) {
      return {
        'r': r + 1.4020 * b,
  