anchor.diff:          ;; start CUDA timer
           (start-timer)
           ;; start glut main loop
  -        (glut:display-window window))))))
  +        (glut:display-window window)
  +        (nbody-demo-release))))))
   
   (defun not-implemented ()
     (error "not implemented."))
  
positive.code: ;;; NBodyDemo
  ;;;
  
  (defun nbody-demo-update-simulation (new-pos old-pos vel delta-time damping num-bodies p)
    (integrate-nbody-system new-pos old-pos vel delta-time damping num-bodies p))
  
  
negative.code:     (not-implemented))
    
    (defun init-gl ()
      ;; create shader objects
      (setf m-vertex-shader (gl:create-shader :vertex-shader))
      (setf m-pixel-shader (gl:create-shader :fragment-shader))
      ;; set shader source codes
      (gl:shader-source m-vertex-shader +vertex-shader+)
      (gl:shader-source m-pixel-shader +pixel-shader+)
      ;; compile source codes
      (gl:compile-shader m-vertex-shader)
      (gl:compile-shader m-pixel-shader)
      ;; create an empty program object
      (setf m-program (gl:create-program))
      ;; attach shader objects to program object
      (gl:attach-shader m-program m-vertex-shader)
      (gl:attach-shader m-program m-pixel-shader)
      ;; link program object
      (gl:link-program m-program)
      ;; create texture
      (create-texture 32))
    
    (defun eval-hermite (pa pb va vb u)
      (let ((u2 (* u u))
            (u3 (* u u u)))
        (let ((b0 (+ (- (* 2 u3) (* 3 u2)) 1))
              (b1 (+ (* -2 u3) (* 3 u2)))
              (b2 (+ (- u3 (* 2 u2)) u))
              (b3 (- u3 u)))
          (+ (* b0 pa) (* b1 pb) (* b2 va) (* b3 vb)))))
    
    (defun create-gaussian-map (b n)
      (cffi:with-foreign-object (m :float (* 2 n n))
        (let (xx y2 dist
              (incr (/ 2.0 n))
              (i 0)
              (j 0)
              (yy -1.0))
          (dotimes (y n)
            (incf yy incr)
            (setf y2 (* yy yy))
            (setf xx -1.0)
            (dotimes (x n)
              (incf xx incr)
              (incf i  2)
              (incf j  4)
              (setf dist (min (sqrt (+ (* xx xx) y2)) 1.0))
              (setf (cffi:mem-aref m :float i)      (eval-hermite 1.0 0 0 0 dist)
                    (cffi:mem-aref m :float (1+ i)) (cffi:mem-aref m :float i))
              (setf (cffi:mem-aref b :unsigned-char j)       (truncate (* (cffi:mem-aref m :float i) 255))
                    (cffi:mem-aref b :unsigned-char (+ j 1)) (truncate (* (cffi:mem-aref m :float i) 255))
                    (cffi:mem-aref b :unsigned-char (+ j 2)) (truncate (* (cffi:mem-aref m :float i) 255))
                    (cffi:mem-aref b :unsigned-char (+ j 3)) (truncate (* (cffi:mem-aref m :float i) 255))))))))
    
    (defun create-texture (resolution)
      (setf m-texture-data (cffi:foreign-alloc :unsigned-char :count (* 4 resolution resolution)))
      (create-gaussian-map m-texture-data resolution)
      (setf m-texture (first (gl:gen-textures 1)))
      (gl:bind-texture :texture-2d m-texture)
      (gl:tex-parameter :texture-2d :generate-mipmap :true)
      (gl:tex-parameter :texture-2d :texture-min-filter :linear-mipmap-linear)
      (gl:tex-parameter :texture-2d :texture-mag-filter :linear)
      (gl:tex-image-2d :texture-2d 0 :rgba8 resolution resolution 0
                       :rgba :unsigned-byte m-texture-data))
    
    (defun draw-points ()
      (gl:begin :points)
  