Fix MatrixVectorMultiply and incorrect DCHECKS.

(Thanks to Serget Sharybin for reporting this)

Change-Id: I6bbc41667308fc2932871cf25ad07b431f70801f
diff --git a/internal/ceres/blas.h b/internal/ceres/blas.h
index 12667d0..bacf1ff 100644
--- a/internal/ceres/blas.h
+++ b/internal/ceres/blas.h
@@ -171,8 +171,8 @@
 
   const int NUM_ROW_C = NUM_ROW_A;
   const int NUM_COL_C = NUM_COL_B;
-  DCHECK_LT(start_row_c + NUM_ROW_C, row_stride_c);
-  DCHECK_LT(start_col_c + NUM_COL_C, col_stride_c);
+  DCHECK_LE(start_row_c + NUM_ROW_C, row_stride_c);
+  DCHECK_LE(start_col_c + NUM_COL_C, col_stride_c);
 
   for (int row = 0; row < NUM_ROW_C; ++row) {
     for (int col = 0; col < NUM_COL_C; ++col) {
@@ -324,8 +324,8 @@
 
   const int NUM_ROW_C = NUM_COL_A;
   const int NUM_COL_C = NUM_COL_B;
-  DCHECK_LT(start_row_c + NUM_ROW_C, row_stride_c);
-  DCHECK_LT(start_col_c + NUM_COL_C, col_stride_c);
+  DCHECK_LE(start_row_c + NUM_ROW_C, row_stride_c);
+  DCHECK_LE(start_col_c + NUM_COL_C, col_stride_c);
 
   for (int row = 0; row < NUM_ROW_C; ++row) {
     for (int col = 0; col < NUM_COL_C; ++col) {
@@ -401,7 +401,7 @@
   } else if (kOperation < 0) {
     cref -= Aref.lazyProduct(bref);
   } else {
-    cref -= Aref.lazyProduct(bref);
+    cref = Aref.lazyProduct(bref);
   }
 #else
 
@@ -459,7 +459,7 @@
   } else if (kOperation < 0) {
     cref -= Aref.transpose().lazyProduct(bref);
   } else {
-    cref -= Aref.transpose().lazyProduct(bref);
+    cref = Aref.transpose().lazyProduct(bref);
   }
 #else