docs: function(m) {
              // cache elements in local variables, for speedup:
              var this0 = this.elements[0];
              var this1 = this.elements[1];
              var this2 = this.elements[2];
              var this3 = this.elements[3];
              var this4 = this.elements[4];
              var this5 = this.elements[5];
              var this6 = this.elements[6];
              var this7 = this.elements[7];
              var this8 = this.elements[8];
              var this9 = this.elements[9];
              var this10 = this.elements[10];
              var this11 = this.elements[11];
              var this12 = this.elements[12];
              var this13 = this.elements[13];
              var this14 = this.elements[14];
              var this15 = this.elements[15];
              var m0 = m.elements[0];
              var m1 = m.elements[1];
              var m2 = m.elements[2];
              var m3 = m.elements[3];
              var m4 = m.elements[4];
              var m5 = m.elements[5];
              var m6 = m.elements[6];
              var m7 = m.elements[7];
              var m8 = m.elements[8];
              var m9 = m.elements[9];
              var m10 = m.elements[10];
              var m11 = m.elements[11];
              var m12 = m.elements[12];
              var m13 = m.elements[13];
              var m14 = m.elements[14];
              var m15 = m.elements[15];
  
              var result = [];
              result[0] = this0 * m0 + this1 * m4 + this2 * m8 + this3 * m12;
              result[1] = this0 * m1 + this1 * m5 + this2 * m9 + this3 * m13;
              result[2] = this0 * m2 + this1 * m6 + this2 * m10 + this3 * m14;
              result[3] = this0 * m3 + this1 * m7 + this2 * m11 + this3 * m15;
              result[4] = this4 * m0 + this5 * m4 + this6 * m8 + this7 * m12;
              result[5] = this4 * m1 + this5 * m5 + this6 * m9 + this7 * m13;
              result[6] = this4 * m2 + this5 * m6 + this6 * m10 + this7 * m14;
              result[7] = this4 * m3 + this5 * m7 + this6 * m11 + this7 * m15;
              result[8] = this8 * m0 + this9 * m4 + this10 * m8 + this11 * m12;
              result[9] = this8 * m1 + this9 * m5 + this10 * m9 + this11 * m13;
              result[10] = this8 * m2 + this9 * m6 + this10 * m10 + this11 * m14;
              result[11] = this8 * m3 + this9 * m7 + this10 * m11 + this11 * m15;
              result[12] = this12 * m0 + this13 * m4 + this14 * m8 + this15 * m12;
              result[13] = this12 * m1 + this13 * m5 + this14 * m9 + this15 * m13;
              result[14] = this12 * m2 + this13 * m6 + this14 * m10 + this15 * m14;
              result[15] = this12 * m3 + this13 * m7 + this14 * m11 + this15 * m15;
              return new CSG.Matrix4x4(result);
          }