anchor.diff:      _cubeVertexPositionBuffer = _gl.createBuffer();
       _gl.bindBuffer(webgl.RenderingContext.ARRAY_BUFFER, _cubeVertexPositionBuffer);
       // fill "current buffer" with triangle verticies
  -    vertices = [
  -        // Front face
  -        -1.0, -1.0,  1.0,
  -         1.0, -1.0,  1.0,
  -         1.0,  1.0,  1.0,
  -        -1.0,  1.0,  1.0,
  -
  -        // Back face
  -        -1.0, -1.0, -1.0,
  -        -1.0,  1.0, -1.0,
  -         1.0,  1.0, -1.0,
  -         1.0, -1.0, -1.0,
  -
  -        // Top face
  -        -1.0,  1.0, -1.0,
  -        -1.0,  1.0,  1.0,
  -         1.0,  1.0,  1.0,
  -         1.0,  1.0, -1.0,
  -
  -        // Bottom face
  -        -1.0, -1.0, -1.0,
  -         1.0, -1.0, -1.0,
  -         1.0, -1.0,  1.0,
  -        -1.0, -1.0,  1.0,
  -
  -        // Right face
  -         1.0, -1.0, -1.0,
  -         1.0,  1.0, -1.0,
  -         1.0,  1.0,  1.0,
  -         1.0, -1.0,  1.0,
  -
  -        // Left face
  -        -1.0, -1.0, -1.0,
  -        -1.0, -1.0,  1.0,
  -        -1.0,  1.0,  1.0,
  -        -1.0,  1.0, -1.0,
  -    ];
  +    vertices = [// Front face
  +      -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, 1.0, // Back face
  +      -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0, -1.0, // Top face
  +      -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, // Bottom face
  +      -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, -1.0, 1.0, -1.0, -1.0, 1.0, // Right face
  +      1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, // Left face
  +      -1.0, -1.0, -1.0, -1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, 1.0, -1.0,];
       _gl.bufferData(webgl.RenderingContext.ARRAY_BUFFER, new Float32List.fromList(vertices), webgl.RenderingContext.STATIC_DRAW);
   
       _cubeVertexTextureCoordBuffer = _gl.createBuffer();
       _gl.bindBuffer(webgl.RenderingContext.ARRAY_BUFFER, _cubeVertexTextureCoordBuffer);
  -    textureCoords = [
  -        // Front face
  -        0.0, 0.0,
  -        1.0, 0.0,
  -        1.0, 1.0,
  -        0.0, 1.0,
  -
  -        // Back face
  -        1.0, 0.0,
  -        1.0, 1.0,
  -        0.0, 1.0,
  -        0.0, 0.0,
  -
  -        // Top face
  -        0.0, 1.0,
  -        0.0, 0.0,
  -        1.0, 0.0,
  -        1.0, 1.0,
  -
  -        // Bottom face
  -        1.0, 1.0,
  -        0.0, 1.0,
  -        0.0, 0.0,
  -        1.0, 0.0,
  -
  -        // Right face
  -        1.0, 0.0,
  -        1.0, 1.0,
  -        0.0, 1.0,
  -        0.0, 0.0,
  -
  -        // Left face
  -        0.0, 0.0,
  -        1.0, 0.0,
  -        1.0, 1.0,
  -        0.0, 1.0,
  -    ];
  +    textureCoords = [// Front face
  +      0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, // Back face
  +      1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0, // Top face
  +      0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, // Bottom face
  +      1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, // Right face
  +      1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0, // Left face
  +      0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0,];
       _gl.bufferData(webgl.RenderingContext.ARRAY_BUFFER, new Float32List.fromList(textureCoords), webgl.RenderingContext.STATIC_DRAW);
   
       _cubeVertexIndexBuffer = _gl.createBuffer();
       _gl.bindBuffer(webgl.RenderingContext.ELEMENT_ARRAY_BUFFER, _cubeVertexIndexBuffer);
  -    List<int> _cubeVertexIndices = [
  -         0,  1,  2,    0,  2,  3, // Front face
  -         4,  5,  6,    4,  6,  7, // Back face
  -         8,  9, 10,    8, 10, 11, // Top face
  -        12, 13, 14,   12, 14, 15, // Bottom face
  -        16, 17, 18,   16, 18, 19, // Right face
  -        20, 21, 22,   20, 22, 23  // Left face
  +    List<int> _cubeVertexIndices = [0, 1, 2, 0, 2, 3, // Front face
  +      4, 5, 6, 4, 6, 7, // Back face
  +      8, 9, 10, 8, 10, 11, // Top face
  +      12, 13, 14, 12, 14, 15, // Bottom face
  +      16, 17, 18, 16, 18, 19, // Right face
  +      20, 21, 22, 20, 22, 23 // Left face
       ];
       _gl.bufferData(webgl.RenderingContext.ELEMENT_ARRAY_BUFFER, new Uint16List.fromList(_cubeVertexIndices), webgl.RenderingContext.STATIC_DRAW);
   
   
       _cubeVertexNormalBuffer = _gl.createBuffer();
       _gl.bindBuffer(webgl.RenderingContext.ARRAY_BUFFER, _cubeVertexNormalBuffer);
  -    vertexNormals = [
  -      // Front face
  -       0.0,  0.0,  1.0,
  -       0.0,  0.0,  1.0,
  -       0.0,  0.0,  1.0,
  -       0.0,  0.0,  1.0,
  -
  -      // Back face
  -       0.0,  0.0, -1.0,
  -       0.0,  0.0, -1.0,
  -       0.0,  0.0, -1.0,
  -       0.0,  0.0, -1.0,
  -
  -      // Top face
  -       0.0,  1.0,  0.0,
  -       0.0,  1.0,  0.0,
  -       0.0,  1.0,  0.0,
  -       0.0,  1.0,  0.0,
  -
  -      // Bottom face
  -       0.0, -1.0,  0.0,
  -       0.0, -1.0,  0.0,
  -       0.0, -1.0,  0.0,
  -       0.0, -1.0,  0.0,
  -
  -      // Right face
  -       1.0,  0.0,  0.0,
  -       1.0,  0.0,  0.0,
  -       1.0,  0.0,  0.0,
  -       1.0,  0.0,  0.0,
  -
  -      // Left face
  -      -1.0,  0.0,  0.0,
  -      -1.0,  0.0,  0.0,
  -      -1.0,  0.0,  0.0,
  -      -1.0,  0.0,  0.0,
  -    ];
  +    vertexNormals = [// Front face
  +      0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, // Back face
  +      0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, // Top face
  +      0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, // Bottom face
  +      0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, // Right face
  +      1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, // Left face
  +      -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0, -1.0, 0.0, 0.0,];
       _gl.bufferData(webgl.RenderingContext.ARRAY_BUFFER, new Float32List.fromList(vertexNormals), webgl.RenderingContext.STATIC_DRAW);
   
     }
  
positive.code: 
    void _animate(double timeNow) {
      if (_lastTime != 0) {
          double elapsed = timeNow - _lastTime;
  
          _xRot += (_xSpeed * elapsed) / 1000.0;
          _yRot += (_ySpeed * elapsed) / 1000.0;
      }
      _lastTime = timeNow;
    }
  
    void _handleKeys() {
      if (_currentlyPressedKeys[33]) {
        // Page Up
        _zPos -= 0.05;
      }
      if (_currentlyPressedKeys[34]) {
        // Page Down
        _zPos += 0.05;
      }
      if (_currentlyPressedKeys[37]) {
        // Left cursor key
        _ySpeed -= 1;
      }
      if (_currentlyPressedKeys[39]) {
        // Right cursor key
        _ySpeed += 1;
      }
      if (_currentlyPressedKeys[38]) {
        // Up cursor key
        _xSpeed -= 1;
      }
      if (_currentlyPressedKeys[40]) {
        // Down cursor key
        _xSpeed += 1;
      }
  
negative.code:     document.onKeyDown.listen(this._handleKeyDown);
      document.onKeyUp.listen(this._handleKeyUp);
  
      _elmLighting = document.querySelector("#lighting");
      _elmAmbientR = document.querySelector("#ambientR");
      _elmAmbientG = document.querySelector("#ambientG");
      _elmAmbientB = document.querySelector("#ambientB");
      _elmLightDirectionX = document.querySelector("#lightDirectionX");
      _elmLightDirectionY = document.querySelector("#lightDirectionY");
      _elmLightDirectionZ = document.querySelector("#lightDirectionZ");
      _elmDirectionalR = document.querySelector("#directionalR");
      _elmDirectionalG = document.querySelector("#directionalG");
      _elmDirectionalB = document.querySelector("#directionalB");
    }
  
  
    void _initShaders() {
      // vertex shader source code. uPosition is our variable that we'll
      // use to create animation
      /*String vsSource = """
      attribute vec3 aVertexPosition;
      attribute vec2 aTextureCoord;
    
  