diff --git a/bench/Matrix44Bench.cpp b/bench/Matrix44Bench.cpp
index 653f2b2..31525d2 100644
--- a/bench/Matrix44Bench.cpp
+++ b/bench/Matrix44Bench.cpp
@@ -79,22 +79,22 @@
 class InvertMatrix44Bench : public Matrix44Bench {
 public:
     InvertMatrix44Bench(void* param) : INHERITED(param, "invert") {
-	fM0.set(0, 0, -1.1);
-	fM0.set(0, 1, 2.1);
-	fM0.set(0, 2, -3.1);
-	fM0.set(0, 3, 4.1);
-	fM0.set(1, 0, 5.1);
-	fM0.set(1, 1, -6.1);
-	fM0.set(1, 2, 7.1);
-	fM0.set(1, 3, 8.1);
-	fM0.set(2, 0, -9.1);
-	fM0.set(2, 1, 10.1);
-	fM0.set(2, 2, 11.1);
-	fM0.set(2, 3, -12.1);
-	fM0.set(3, 0, -13.1);
-	fM0.set(3, 1, 14.1);
-	fM0.set(3, 2, -15.1);
-	fM0.set(3, 3, 16.1);
+    fM0.set(0, 0, -1.1);
+    fM0.set(0, 1, 2.1);
+    fM0.set(0, 2, -3.1);
+    fM0.set(0, 3, 4.1);
+    fM0.set(1, 0, 5.1);
+    fM0.set(1, 1, -6.1);
+    fM0.set(1, 2, 7.1);
+    fM0.set(1, 3, 8.1);
+    fM0.set(2, 0, -9.1);
+    fM0.set(2, 1, 10.1);
+    fM0.set(2, 2, 11.1);
+    fM0.set(2, 3, -12.1);
+    fM0.set(3, 0, -13.1);
+    fM0.set(3, 1, 14.1);
+    fM0.set(3, 2, -15.1);
+    fM0.set(3, 3, 16.1);
     }
 protected:
     virtual void performTest() {
diff --git a/experimental/Intersection/Intersection_Tests.cpp b/experimental/Intersection/Intersection_Tests.cpp
index 6170946..9ae4ff5 100644
--- a/experimental/Intersection/Intersection_Tests.cpp
+++ b/experimental/Intersection/Intersection_Tests.cpp
@@ -14,7 +14,7 @@
 
 void Intersection_Tests() {
     int testsRun = 0;
-    
+
     SimplifyNew_Test();
     Simplify4x4QuadraticsThreaded_Test(testsRun);
     QuadLineIntersectThreaded_Test(testsRun);
diff --git a/experimental/Intersection/Simplify.cpp b/experimental/Intersection/Simplify.cpp
index d0b22ce..42c911a 100644
--- a/experimental/Intersection/Simplify.cpp
+++ b/experimental/Intersection/Simplify.cpp
@@ -5711,7 +5711,7 @@
         } else {
             SkDebugf("   ");
         }
-        SkDebugf(" start=(%1.9g,%1.9g) end=(%1.9g,%1.9g)\n", 
+        SkDebugf(" start=(%1.9g,%1.9g) end=(%1.9g,%1.9g)\n",
                 eStart.fX, eStart.fY, eEnd.fX, eEnd.fY);
 #endif
         if (approximatelyEqual(eStart, eEnd)) {
@@ -5814,8 +5814,8 @@
         SkASSERT(eIndex != INT_MAX);
 #if DEBUG_ASSEMBLE
         SkDebugf("%s sIndex=%c%d eIndex=%c%d\n", __FUNCTION__, sIndex < 0 ? 's' : 'e',
-                    sIndex < 0 ? ~sIndex : sIndex, eIndex < 0 ? 's' : 'e', 
-                    eIndex < 0 ? ~eIndex : eIndex);  
+                    sIndex < 0 ? ~sIndex : sIndex, eIndex < 0 ? 's' : 'e',
+                    eIndex < 0 ? ~eIndex : eIndex);
 #endif
         do {
             outer = runs[rIndex];
@@ -5832,7 +5832,7 @@
             }
 #if DEBUG_ASSEMBLE
             SkDebugf("%s rIndex=%d eIndex=%s%d close=%d\n", __FUNCTION__, rIndex,
-                eIndex < 0 ? "~" : "", eIndex < 0 ? ~eIndex : eIndex, 
+                eIndex < 0 ? "~" : "", eIndex < 0 ? ~eIndex : eIndex,
                 sIndex == ((rIndex != eIndex) ^ forward ? eIndex : ~eIndex));
 #endif
             if (sIndex == ((rIndex != eIndex) ^ forward ? eIndex : ~eIndex)) {
diff --git a/experimental/Intersection/SimplifyNew_Test.cpp b/experimental/Intersection/SimplifyNew_Test.cpp
index 3f17b1f..8d1eaf3 100644
--- a/experimental/Intersection/SimplifyNew_Test.cpp
+++ b/experimental/Intersection/SimplifyNew_Test.cpp
@@ -3091,7 +3091,7 @@
     TEST(testQuadratic71),
     TEST(testQuadratic70x),
     TEST(testQuadratic69),
-    TEST(testQuadratic68), 
+    TEST(testQuadratic68),
     TEST(testQuadratic67x),
     TEST(testQuadratic65),
     TEST(testQuadratic64),
diff --git a/include/core/SkTileGridPicture.h b/include/core/SkTileGridPicture.h
index ef42f8c..b35c2a3 100644
--- a/include/core/SkTileGridPicture.h
+++ b/include/core/SkTileGridPicture.h
@@ -26,4 +26,4 @@
     int fTileWidth, fTileHeight, fXTileCount, fYTileCount;
 };
 
-#endif
\ No newline at end of file
+#endif
diff --git a/src/core/SkBlitter.cpp b/src/core/SkBlitter.cpp
index 1234f43..1589d51 100644
--- a/src/core/SkBlitter.cpp
+++ b/src/core/SkBlitter.cpp
@@ -587,7 +587,7 @@
         }
         return true;
     }
-    
+
     virtual void endContext() SK_OVERRIDE {
         if (fProxy) {
             fProxy->endContext();
diff --git a/src/core/SkTileGrid.cpp b/src/core/SkTileGrid.cpp
index ce40be7..43de0a8 100644
--- a/src/core/SkTileGrid.cpp
+++ b/src/core/SkTileGrid.cpp
@@ -98,4 +98,4 @@
 
 int SkTileGrid::getCount() const {
     return fInsertionCount;
-}
\ No newline at end of file
+}
diff --git a/src/core/SkTileGrid.h b/src/core/SkTileGrid.h
index 7c4bd74..8ae3f2c 100644
--- a/src/core/SkTileGrid.h
+++ b/src/core/SkTileGrid.h
@@ -117,4 +117,4 @@
     return NULL;
 }
 
-#endif
\ No newline at end of file
+#endif
diff --git a/src/gpu/GrDrawTarget.h b/src/gpu/GrDrawTarget.h
index 6b756b8..7aba256 100644
--- a/src/gpu/GrDrawTarget.h
+++ b/src/gpu/GrDrawTarget.h
@@ -496,7 +496,7 @@
         this->drawRect(rect, matrix, NULL, NULL);
     }
 
-    
+
     /**
      * This call is used to draw multiple instances of some geometry with a
      * given number of vertices (V) and indices (I) per-instance. The indices in
@@ -895,7 +895,7 @@
     };
     GR_DECL_BITFIELD_OPS_FRIENDS(BlendOptFlags);
 
-    /** 
+    /**
      * Determines what optimizations can be applied based on the blend. The coefficients may have
      * to be tweaked in order for the optimization to work. srcCoeff and dstCoeff are optional
      * params that receive the tweaked coefficients. Normally the function looks at the current
diff --git a/tests/TileGridTest.cpp b/tests/TileGridTest.cpp
index d5ca52b..1946b9f 100644
--- a/tests/TileGridTest.cpp
+++ b/tests/TileGridTest.cpp
@@ -55,7 +55,7 @@
     static void TestUnalignedQuery(skiatest::Reporter* reporter) {
         // Use SkTileGridPicture to generate a SkTileGrid with a helper
         SkTileGridPicture picture(10, 10, 20, 20);
-        SkRect rect1 = SkRect::MakeXYWH(SkIntToScalar(0), SkIntToScalar(0), 
+        SkRect rect1 = SkRect::MakeXYWH(SkIntToScalar(0), SkIntToScalar(0),
             SkIntToScalar(8), SkIntToScalar(8));
         SkRect rect2 = SkRect::MakeXYWH(SkIntToScalar(11), SkIntToScalar(11),
             SkIntToScalar(1), SkIntToScalar(1));
