Import Cobalt 21.master.0.253153
diff --git a/src/third_party/skia/experimental/ChromeUtils/SkBorder.cpp b/src/third_party/skia/experimental/ChromeUtils/SkBorder.cpp
deleted file mode 100644
index fad2721..0000000
--- a/src/third_party/skia/experimental/ChromeUtils/SkBorder.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright 2013 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "SkBorder.h"
-
-SkBorder::SkBorder(SkPaint& p, SkScalar width, BorderStyle style)
-    : fFlags(kOnePaint_Flag) {
-    fPaints[0] = p;
-
-    for (int i = 0; i < 4; ++i) {
-        fWidths[i] = width;
-        fStyles[i] = style;
-    }
-}
-
-SkBorder::SkBorder(const SkPaint paints[4],
-                   const SkScalar widths[4],
-                   const BorderStyle styles[4])
-    : fFlags(0) {
-    for (int i = 0; i < 4; ++i) {
-        fPaints[i] = paints[i];
-    }
-
-    memcpy(fWidths, widths, sizeof(fWidths));
-    memcpy(fStyles, styles, sizeof(fStyles));
-}
diff --git a/src/third_party/skia/experimental/ChromeUtils/SkBorder.h b/src/third_party/skia/experimental/ChromeUtils/SkBorder.h
deleted file mode 100644
index e9d8774..0000000
--- a/src/third_party/skia/experimental/ChromeUtils/SkBorder.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright 2013 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-
-#ifndef SkBorder_DEFINED
-#define SkBorder_DEFINED
-
-#include "SkColor.h"
-#include "SkPaint.h"
-#include "SkScalar.h"
-#include "SkTArray.h"
-
-// This class provides a concise means of specifying all the geometry/shading
-// associated with a CSS-style box/round-rect.
-class SkBorder {
-public:
-    enum BorderStyle {
-        /**
-        */
-        kNone_BorderStyle,
-        /**
-        */
-        kHidden_BorderStyle,
-        /**
-        */
-        kDotted_BorderStyle,
-        /**
-        */
-        kDashed_BorderStyle,
-        /**
-        */
-        kSolid_BorderStyle,
-        /**
-        */
-        kDouble_BorderStyle,
-        /**
-        */
-        kGroove_BorderStyle,
-        /**
-        */
-        kRidge_BorderStyle,
-        /**
-        */
-        kInset_BorderStyle,
-        /**
-        */
-        kOutset_BorderStyle,
-    };
-
-    enum BlurStyle {
-        kNormal_BlurStyle,  //!< fuzzy inside and outside
-        kInner_BlurStyle,   //!< fuzzy inside, nothing outside
-    };
-
-    struct ShadowInfo {
-        SkScalar  fXOffset;
-        SkScalar  fYOffset;
-        SkScalar  fBlurSigma;
-        SkColor   fColor;
-        BlurStyle fStyle;
-    };
-
-    SkBorder(SkPaint& p, SkScalar width, BorderStyle style);
-
-    SkBorder(const SkPaint paints[4], const SkScalar widths[4], const BorderStyle styles[4]);
-
-    void setBackground(SkPaint* p) {
-        if (NULL == p) {
-            fBackground.reset();
-            fFlags &= ~kDrawBackground_Flag;
-        } else {
-            fBackground = *p;
-            fFlags |= kDrawBackground_Flag;
-        }
-    }
-
-    void addShadow(ShadowInfo& info) {
-        fShadows.push_back(info);
-    }
-
-private:
-    enum Flags {
-        // One paint "fPaints[0]" is applied to all the borders
-        kOnePaint_Flag = 0x01,
-        // Use 'fBackground' to draw the background
-        kDrawBackground_Flag = 0x02,
-    };
-
-    // If kOnePaint_Flag is specified then fBorder[0] is applied to all sides.
-    // Otherwise the order is: left, top, right, bottom
-    SkPaint              fPaints[4];
-    // Only valid if kDrawBackground_Flag is set.
-    SkPaint              fBackground;
-    SkScalar             fWidths[4];
-    BorderStyle          fStyles[4];
-    SkTArray<ShadowInfo> fShadows;
-    uint32_t             fFlags;
-};
-
-#endif
diff --git a/src/third_party/skia/experimental/DrawingBoard/SampleDrawingClient.cpp b/src/third_party/skia/experimental/DrawingBoard/SampleDrawingClient.cpp
deleted file mode 100644
index 542c589..0000000
--- a/src/third_party/skia/experimental/DrawingBoard/SampleDrawingClient.cpp
+++ /dev/null
@@ -1,278 +0,0 @@
-#include "SampleCode.h"
-#include "SkView.h"
-#include "SkCanvas.h"
-#include "SkGPipe.h"
-#include "SkSockets.h"
-#include "SkNetPipeController.h"
-#include "SkCornerPathEffect.h"
-#include "SkColorPalette.h"
-#include "SkOSMenu.h"
-
-
-/**
- * Drawing Client
- *
- * A drawing client that allows a user to perform simple brush stokes with
- * a selected color and brush size. The drawing client communicates with a
- * drawing server to send/receive data to/from other clients connected to the
- * same server. The drawing client stores data in fData and fBuffer depending on
- * the data type. Append type means that the drawing data is a completed stroke
- * and Replace type means that the drawing data is in progress and will be
- * replaced by subsequent data. fData and fBuffer are read by a pipe reader and
- * reproduce the drawing. When the client is in a normal state, the data stored
- * on the client and the server should be identical.
- * The drawing client is also able to switch between vector and bitmap drawing.
- * The drawing client also renders the latest drawing stroke locally in order to
- * produce better reponses. This can be disabled by calling
- * controller.disablePlayBack(), which will introduce a lag between the input
- * and the drawing.
- * Note: in order to keep up with the drawing data, the client will try to read
- * a few times each frame in case more than one frame worth of data has been
- * received and render them together. This behavior can be adjusted by tweaking
- * MAX_READ_PER_FRAME or disabled by turning fSync to false
- */
-
-#define MAX_READ_PER_FRAME 5
-
-class DrawingClientView : public SampleView {
-public:
-    DrawingClientView() {
-        fSocket = NULL;
-        fTotalBytesRead = 0;
-        fPalette = new SkColorPalette;
-        fPalette->setSize(100, 300);
-        fPalette->setVisibleP(true);
-        this->attachChildToFront(fPalette);
-        fPalette->unref();
-        fBrushSize = 2.5;
-        fAA = false;
-        fPaletteVisible = true;
-        fSync = true;
-        fVector = true;
-    }
-    ~DrawingClientView() {
-        if (fSocket) {
-            delete fSocket;
-        }
-        fData.reset();
-        fBuffer.reset();
-    }
-
-    virtual void requestMenu(SkOSMenu* menu) {
-        menu->setTitle("Drawing Client");
-        menu->appendTextField("Server IP", "Server IP", this->getSinkID(),
-                              "IP address or hostname");
-        menu->appendSwitch("Vector", "Vector", this->getSinkID(), fVector);
-        menu->appendSlider("Brush Size", "Brush Size", this->getSinkID(), 1.0,
-                           100.0, fBrushSize);
-        menu->appendSwitch("Anti-Aliasing", "AA", this->getSinkID(), fAA);
-        menu->appendSwitch("Show Color Palette", "Palette", this->getSinkID(),
-                           fPaletteVisible);
-        menu->appendSwitch("Sync", "Sync", this->getSinkID(), fSync);
-        menu->appendAction("Clear", this->getSinkID());
-    }
-
-protected:
-
-    static void readData(int cid, const void* data, size_t size,
-                         SkSocket::DataType type, void* context) {
-        DrawingClientView* view = (DrawingClientView*)context;
-        view->onRead(cid, data, size, type);
-    }
-
-    void onRead(int cid, const void* data, size_t size, SkSocket::DataType type) {
-        if (size > 0) {
-            fBuffer.reset();
-            if (type == SkSocket::kPipeReplace_type)
-                fBuffer.append(size, (const char*)data);
-            else if (type == SkSocket::kPipeAppend_type)
-                fData.append(size, (const char*)data);
-            else {
-                //other types of data
-            }
-        }
-    }
-
-    bool onQuery(SkEvent* evt) {
-        if (SampleCode::TitleQ(*evt)) {
-            SampleCode::TitleR(evt, "Drawing Client");
-            return true;
-        }
-
-        return this->INHERITED::onQuery(evt);
-    }
-
-    bool onEvent(const SkEvent& evt) {;
-        if (SkOSMenu::FindSliderValue(evt, "Brush Size", &fBrushSize))
-            return true;
-
-        SkString s;
-        if (SkOSMenu::FindText(evt, "Server IP", &s)) {
-            if (NULL != fSocket) {
-                delete fSocket;
-            }
-            fSocket = new SkTCPClient(s.c_str(), 40000);
-            fSocket->connectToServer();
-            fSocket->suspendWrite();
-            SkDebugf("Connecting to %s\n", s.c_str());
-            fData.reset();
-            fBuffer.reset();
-            this->inval(NULL);
-            return true;
-        }
-        if (SkOSMenu::FindSwitchState(evt, "AA", &fAA) ||
-            SkOSMenu::FindSwitchState(evt, "Sync", &fSync))
-            return true;
-        if (SkOSMenu::FindSwitchState(evt, "Vector", &fVector)) {
-            this->clearBitmap();
-            return true;
-        }
-        if (SkOSMenu::FindAction(evt, "Clear")) {
-            this->clear();
-            return true;
-        }
-        if (SkOSMenu::FindSwitchState(evt, "Palette", &fPaletteVisible)) {
-            fPalette->setVisibleP(fPaletteVisible);
-            return true;
-        }
-        return this->INHERITED::onEvent(evt);
-    }
-
-    virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y) {
-        return new Click(this);
-    }
-
-    virtual bool onClick(SkView::Click* click) {
-        switch (click->fState) {
-            case SkView::Click::kDown_State:
-                fCurrLine.moveTo(click->fCurr);
-                fType = SkSocket::kPipeReplace_type;
-                if (fSocket)
-                    fSocket->resumeWrite();
-                break;
-            case SkView::Click::kMoved_State:
-                fCurrLine.lineTo(click->fCurr);
-                break;
-            case SkView::Click::kUp_State:
-                fType = SkSocket::kPipeAppend_type;
-                break;
-            default:
-                break;
-        }
-        return true;
-    }
-
-    virtual void onDrawContent(SkCanvas* canvas) {
-        if (fSocket) {
-            if (fSocket->isConnected()) {
-                if (fSync) {
-                    int count = 0;
-                    while (fSocket->readPacket(readData, this) > 0 &&
-                           count < MAX_READ_PER_FRAME)
-                        ++count;
-                }
-                else
-                    fSocket->readPacket(readData, this);
-            }
-            else
-                fSocket->connectToServer();
-        }
-        size_t bytesRead = 0;
-        SkGPipeReader::Status status;
-        SkCanvas bufferCanvas(fBase);
-        SkCanvas* tempCanvas;
-        while (fTotalBytesRead < fData.count()) {
-            if (fVector)
-                tempCanvas = canvas;
-            else
-                tempCanvas = &bufferCanvas;
-            SkGPipeReader reader(tempCanvas);
-            status = reader.playback(fData.begin() + fTotalBytesRead,
-                                     fData.count() - fTotalBytesRead,
-                                     &bytesRead);
-            SkASSERT(SkGPipeReader::kError_Status != status);
-            fTotalBytesRead += bytesRead;
-        }
-        if (fVector)
-            fTotalBytesRead = 0;
-        else
-            canvas->drawBitmap(fBase, 0, 0, NULL);
-
-        size_t totalBytesRead = 0;
-        while (totalBytesRead < fBuffer.count()) {
-            SkGPipeReader reader(canvas);
-            status = reader.playback(fBuffer.begin() + totalBytesRead,
-                                     fBuffer.count() - totalBytesRead,
-                                     &bytesRead);
-            SkASSERT(SkGPipeReader::kError_Status != status);
-            totalBytesRead += bytesRead;
-        }
-
-        SkNetPipeController controller(canvas);
-        SkGPipeWriter writer;
-        SkCanvas* writerCanvas = writer.startRecording(&controller,
-                                                       SkGPipeWriter::kCrossProcess_Flag);
-
-        //controller.disablePlayback();
-        SkPaint p;
-        p.setColor(fPalette->getColor());
-        p.setStyle(SkPaint::kStroke_Style);
-        p.setStrokeWidth(fBrushSize);
-        p.setStrokeCap(SkPaint::kRound_Cap);
-        p.setStrokeJoin(SkPaint::kRound_Join);
-        p.setAntiAlias(fAA);
-        p.setPathEffect(new SkCornerPathEffect(55))->unref();
-        writerCanvas->drawPath(fCurrLine, p);
-        writer.endRecording();
-
-        controller.writeToSocket(fSocket, fType);
-        if (fType == SkSocket::kPipeAppend_type && fSocket) {
-            fSocket->suspendWrite();
-            fCurrLine.reset();
-        }
-
-        this->inval(NULL);
-    }
-
-    virtual void onSizeChange() {
-        this->INHERITED::onSizeChange();
-        fPalette->setLoc(this->width()-100, 0);
-        fBase.setConfig(SkBitmap::kARGB_8888_Config, this->width(), this->height());
-        fBase.allocPixels(NULL);
-        this->clearBitmap();
-    }
-
-private:
-    void clear() {
-        fData.reset();
-        fBuffer.reset();
-        fCurrLine.reset();
-        fTotalBytesRead = 0;
-        this->clearBitmap();
-    }
-    void clearBitmap() {
-        fTotalBytesRead = 0;
-        fBase.eraseColor(fBGColor);
-    }
-    SkTDArray<char>     fData;
-    SkTDArray<char>     fBuffer;
-    SkBitmap            fBase;
-    SkPath              fCurrLine;
-    SkTCPClient*        fSocket;
-    SkSocket::DataType  fType;
-    SkColorPalette*     fPalette;
-    bool                fPaletteVisible;
-    size_t              fTotalBytesRead;
-    SkScalar            fBrushSize;
-    bool                fAA;
-    bool                fSync;
-    bool                fVector;
-
-    typedef SampleView INHERITED;
-};
-
-
-///////////////////////////////////////////////////////////////////////////////
-
-static SkView* MyFactory() { return new DrawingClientView; }
-static SkViewRegister reg(MyFactory);
diff --git a/src/third_party/skia/experimental/DrawingBoard/SampleDrawingServer.cpp b/src/third_party/skia/experimental/DrawingBoard/SampleDrawingServer.cpp
deleted file mode 100644
index fa059fa..0000000
--- a/src/third_party/skia/experimental/DrawingBoard/SampleDrawingServer.cpp
+++ /dev/null
@@ -1,222 +0,0 @@
-#include "SampleCode.h"
-#include "SkView.h"
-#include "SkCanvas.h"
-#include "SkGPipe.h"
-#include "SkSockets.h"
-#include "SkNetPipeController.h"
-#include "SkCornerPathEffect.h"
-#include "SkOSMenu.h"
-#include <map>
-
-/**
- * Drawing Server
- *
- * This simple drawing server can accept connections from multiple drawing
- * clients simultaneously. It accumulates drawing data from each client each
- * frame, stores it in the appropriate place, and then broadcasts incremental
- * changes back to all the clients. Each logical packet, meaning one brush
- * stoke in this case can be of two types, append and replace. Append types are
- * completed strokes ready to be stored in the fData queue and will no longer be
- * modified. Replace types are drawing operations that are still in progress on
- * the client side, so they are appended to fBuffer. The location and size of
- * the buffered data for each client is stored in a map and updated properly.
- * Each time a new replace drawing call is received from a client, its previous
- * buffered data is discarded.
- * Since the Server keeps all the complete drawing data and the latest buffered
- * data, it's able to switch between vector and bitmap drawing
- */
-
-class DrawingServerView : public SampleView {
-public:
-    DrawingServerView(){
-        fServer = new SkTCPServer(40000);
-        fServer->suspendWrite();
-        fTotalBytesRead = fTotalBytesWritten = 0;
-        fVector = true;
-    }
-    ~DrawingServerView() {
-        delete fServer;
-        fData.reset();
-        fBuffer.reset();
-        fClientMap.clear();
-    }
-
-    virtual void requestMenu(SkOSMenu* menu) {
-        menu->setTitle("Drawing Server");
-        menu->appendAction("Clear", this->getSinkID());
-        menu->appendSwitch("Vector", "Vector", this->getSinkID(), fVector);
-    }
-
-protected:
-    static void readData(int cid, const void* data, size_t size,
-                         SkSocket::DataType type, void* context) {
-        DrawingServerView* view = (DrawingServerView*)context;
-        view->onRead(cid, data, size, type);
-    }
-
-    void onRead(int cid, const void* data, size_t size, SkSocket::DataType type) {
-        if (NULL == data && size <= 0)
-            return;
-
-        ClientState* cs;
-        std::map<int, ClientState*>::iterator it = fClientMap.find(cid);
-        if (it == fClientMap.end()) { //New client
-            cs = new ClientState;
-            cs->bufferBase = 0;
-            cs->bufferSize = 0;
-            fClientMap[cid] = cs;
-        }
-        else {
-            cs = it->second;
-        }
-
-        if (type == SkSocket::kPipeReplace_type) {
-            fBuffer.remove(cs->bufferBase, cs->bufferSize);
-
-            for (it = fClientMap.begin(); it != fClientMap.end(); ++it) {
-                if (cid == it->first)
-                    continue;
-                else {
-                    if (it->second->bufferBase > cs->bufferBase) {
-                        it->second->bufferBase -= cs->bufferSize;
-                        SkASSERT(it->second->bufferBase >= 0);
-                    }
-                }
-            }
-
-            cs->bufferBase = fBuffer.count();
-            cs->bufferSize = size;
-            fBuffer.append(size, (const char*)data);
-        }
-        else if (type == SkSocket::kPipeAppend_type) {
-            fData.append(size, (const char*)data);
-            fServer->resumeWrite();
-            fServer->writePacket(fData.begin() + fTotalBytesWritten,
-                                 fData.count() - fTotalBytesWritten,
-                                 SkSocket::kPipeAppend_type);
-            fTotalBytesWritten = fData.count();
-            fServer->suspendWrite();
-        }
-        else {
-            //other types of data
-        }
-    }
-
-    bool onQuery(SkEvent* evt) {
-        if (SampleCode::TitleQ(*evt)) {
-            SampleCode::TitleR(evt, "Drawing Server");
-            return true;
-        }
-        return this->INHERITED::onQuery(evt);
-    }
-
-    bool onEvent(const SkEvent& evt) {
-        if (SkOSMenu::FindAction(evt, "Clear")) {
-            this->clear();
-            return true;
-        }
-        if (SkOSMenu::FindSwitchState(evt, "Vector", &fVector)) {
-            this->clearBitmap();
-            return true;
-        }
-        return this->INHERITED::onEvent(evt);
-    }
-
-
-    virtual void onDrawContent(SkCanvas* canvas) {
-        if (fCurrMatrix != canvas->getTotalMatrix()) {
-            fTotalBytesRead = 0;
-            fCurrMatrix = canvas->getTotalMatrix();
-        }
-
-        fServer->acceptConnections();
-        if (fServer->readPacket(readData, this) > 0) {
-            fServer->resumeWrite();
-        }
-        else {
-            fServer->suspendWrite();
-        }
-
-        size_t bytesRead;
-        SkGPipeReader::Status stat;
-        SkCanvas bufferCanvas(fBase);
-        SkCanvas* tempCanvas;
-        while (fTotalBytesRead < fData.count()) {
-            if (fVector) {
-                tempCanvas = canvas;
-            } else {
-                tempCanvas = &bufferCanvas;
-            }
-            SkGPipeReader reader(tempCanvas);
-            stat = reader.playback(fData.begin() + fTotalBytesRead,
-                                   fData.count() - fTotalBytesRead,
-                                   &bytesRead);
-            SkASSERT(SkGPipeReader::kError_Status != stat);
-            fTotalBytesRead += bytesRead;
-        }
-        if (fVector) {
-            fTotalBytesRead = 0;
-        } else {
-            canvas->drawBitmap(fBase, 0, 0, NULL);
-        }
-
-        size_t totalBytesRead = 0;
-        while (totalBytesRead < fBuffer.count()) {
-            SkGPipeReader reader(canvas);
-            stat = reader.playback(fBuffer.begin() + totalBytesRead,
-                                   fBuffer.count() - totalBytesRead,
-                                   &bytesRead);
-            SkASSERT(SkGPipeReader::kError_Status != stat);
-            totalBytesRead += bytesRead;
-        }
-
-        fServer->writePacket(fBuffer.begin(), fBuffer.count(),
-                             SkSocket::kPipeReplace_type);
-
-        this->inval(NULL);
-    }
-
-    virtual void onSizeChange() {
-        this->INHERITED::onSizeChange();
-        fBase.setConfig(SkBitmap::kARGB_8888_Config,
-                        this->width(),
-                        this->height());
-        fBase.allocPixels(NULL);
-        this->clearBitmap();
-    }
-
-private:
-    void clear() {
-        fData.reset();
-        fBuffer.reset();
-        fTotalBytesRead = fTotalBytesWritten = 0;
-        fClientMap.clear();
-        this->clearBitmap();
-    }
-    void clearBitmap() {
-        fTotalBytesRead = 0;
-        fBase.eraseColor(fBGColor);
-    }
-
-    struct ClientState {
-        int bufferBase;
-        int bufferSize;
-    };
-
-    std::map<int, ClientState*> fClientMap;
-    SkTDArray<char>             fData;
-    SkTDArray<char>             fBuffer;
-    size_t                      fTotalBytesRead;
-    size_t                      fTotalBytesWritten;
-    SkMatrix                    fCurrMatrix;
-    SkBitmap                    fBase;
-    bool                        fVector;
-    SkTCPServer*                fServer;
-    typedef SampleView INHERITED;
-};
-
-
-///////////////////////////////////////////////////////////////////////////////
-
-static SkView* MyFactory() { return new DrawingServerView; }
-static SkViewRegister reg(MyFactory);
diff --git a/src/third_party/skia/experimental/DrawingBoard/SkColorPalette.cpp b/src/third_party/skia/experimental/DrawingBoard/SkColorPalette.cpp
deleted file mode 100644
index f2776af..0000000
--- a/src/third_party/skia/experimental/DrawingBoard/SkColorPalette.cpp
+++ /dev/null
@@ -1,195 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#include "SkView.h"
-#include "SkCanvas.h"
-#include "SkPaint.h"
-#include "SkGradientShader.h"
-#include "SkColorPalette.h"
-
-SkColorPalette::SkColorPalette() {
-    fSlotRect = SkRect::MakeWH(SkIntToScalar(50), SkIntToScalar(20));
-    fGradientRect = SkRect::MakeWH(SkIntToScalar(100), SkIntToScalar(100));
-    fSelected = 0;
-    fCurrColor = 0xFF000000;
-
-    fColors[0] = SK_ColorWHITE;
-    fColors[1] = SK_ColorBLACK;
-    fColors[2] = SK_ColorRED;
-    fColors[3] = SK_ColorGREEN;
-    fColors[4] = SK_ColorBLUE;
-}
-
-bool SkColorPalette::onEvent(const SkEvent& evt) {
-    return this->INHERITED::onEvent(evt);
-}
-
-void SkColorPalette::onDraw(SkCanvas* canvas) {
-    canvas->drawColor(SK_ColorWHITE);
-
-    SkPaint paint;
-    paint.setAntiAlias(true);
-
-    canvas->translate(PalettePadding, PalettePadding);
-
-    for (int i = 0; i < PaletteSlots; ++i) {
-        if (fSelected == i) {
-            paint.setStrokeWidth(SkIntToScalar(3));
-        }
-        else {
-            paint.setStrokeWidth(1);
-        }
-
-        paint.setStyle(SkPaint::kStroke_Style);
-        paint.setColor(SK_ColorBLACK);
-        canvas->drawRect(fSlotRect, paint);
-        paint.setStyle(SkPaint::kFill_Style);
-        paint.setColor(fColors[i]);
-        canvas->drawRect(fSlotRect, paint);
-        canvas->translate(0, fSlotRect.height() + PalettePadding);
-    }
-    paint.setStrokeWidth(0);
-    canvas->translate(0, PalettePadding);
-    SkPoint p = SkPoint::Make(0,0);
-    SkPoint q = SkPoint::Make(this->width(), 0);
-    SkPoint pts[] = {p, q};
-
-    SkColor colors[] = { SK_ColorRED, SK_ColorYELLOW, SK_ColorGREEN,
-        SK_ColorCYAN, SK_ColorBLUE, SK_ColorMAGENTA,SK_ColorRED};
-    SkScalar colorPositions[] = { 0, 0.2, 0.4, 0.5, 0.6, 0.8, 1.0};
-
-
-    SkShader* shader1 = SkGradientShader::CreateLinear(pts, colors, colorPositions,7,
-                                                       SkShader::kMirror_TileMode);
-    paint.setShader(shader1)->unref();
-
-    canvas->drawRect(fGradientRect, paint);
-
-    //this->INHERITED::onDraw(canvas);
-}
-
-SkView::Click* SkColorPalette::onFindClickHandler(SkScalar x, SkScalar y) {
-    return new Click(this);
-}
-
-bool SkColorPalette::onClick(SkView::Click* click) {
-    SkPoint curr = click->fCurr;
-    //SkDebugf("click %f %f \n", curr.fX, curr.fY);
-    int selected = selectSlot(curr);
-    if (selected >= 0) {
-        switch (click->fState) {
-            case SkView::Click::kDown_State:
-            case SkView::Click::kMoved_State:
-            case SkView::Click::kUp_State:
-                fSelected = selected;
-                fCurrColor = fColors[fSelected];
-                break;
-            default:
-                break;
-        }
-        return true;
-    }
-    else{
-        //account for padding
-        curr.fX -= PalettePadding;
-        curr.fY -= 2 * PalettePadding + (fSlotRect.height() + PalettePadding) * PaletteSlots;
-        if (curr.fX < 0 || curr.fX > fGradientRect.width() ||
-            curr.fY < 0 || curr.fY > fGradientRect.height()) {
-            return false;
-        }
-        else {
-            switch (click->fState) {
-                case SkView::Click::kDown_State:
-                case SkView::Click::kMoved_State:
-                case SkView::Click::kUp_State:
-                    fColors[fSelected] = selectColorFromGradient(curr);
-                    fCurrColor = fColors[fSelected];
-                    break;
-                default:
-                    break;
-            }
-            return true;
-        }
-    }
-}
-
-void SkColorPalette::onSizeChange() {
-    fGradientRect = SkRect::MakeWH(this->width() - 2*PalettePadding,
-                                   this->width() - 2*PalettePadding);
-    this->INHERITED::onSizeChange();
-}
-
-int SkColorPalette::selectSlot(SkPoint& cursorPosition) {
-    //account for padding
-    cursorPosition.fX -= PalettePadding;
-    cursorPosition.fY -= PalettePadding;
-
-    if (cursorPosition.fX < 0 || cursorPosition.fX > fSlotRect.width() ||
-        cursorPosition.fY < 0 || cursorPosition.fY > (fSlotRect.height() + PalettePadding) * PaletteSlots) {
-        return -1;
-    }
-    int index = cursorPosition.fY/(fSlotRect.height() + PalettePadding);
-    int offset = (int)cursorPosition.fY%((int)fSlotRect.height() + PalettePadding);
-    if (offset <= fSlotRect.height()) {
-        return index;
-    }
-    else {
-        return -1;
-    }
-}
-
-SkColor SkColorPalette::selectColorFromGradient(SkPoint& cursorPosition) {
-    float h = cursorPosition.fX/fGradientRect.width();
-    float s = 1.0 - cursorPosition.fY/fGradientRect.height();
-    float v = 1.0;
-    float _h,r,g,b;
-    float _1, _2, _3;
-    int _i;
-
-    _h = h * 6;
-    _i = (int)_h;
-    _1 = v * (1 - s);
-    _2 = v * (1 - s * (_h - _i));
-    _3 = v * (1 - s * (1 - (_h - _i)));
-
-    if (_i == 0) {
-        r = v;
-        g = _3;
-        b = _1;
-    }
-    else if (_i == 1) {
-        r = _2;
-        g = v;
-        b = _1;
-    }
-    else if (_i == 2) {
-        r = _1;
-        g = v;
-        b = _3;
-    }
-    else if (_i == 3) {
-        r = _1;
-        g = _2;
-        b = v;
-    }
-    else if (_i == 4) {
-        r = _3;
-        g = _1;
-        b = v;
-    }
-    else {
-        r = v;
-        g = _1;
-        b = _2;
-    };
-
-    SkColor retval = 0xFF000000;
-    retval += ((int)(r * 255) << 16);
-    retval += ((int)(g * 255) << 8);
-    retval += (int)(b * 255);
-    return retval;
-}
diff --git a/src/third_party/skia/experimental/DrawingBoard/SkColorPalette.h b/src/third_party/skia/experimental/DrawingBoard/SkColorPalette.h
deleted file mode 100644
index 0ee1dd5..0000000
--- a/src/third_party/skia/experimental/DrawingBoard/SkColorPalette.h
+++ /dev/null
@@ -1,34 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#ifndef SkColorPalette_DEFINED
-#define SkColorPalette_DEFINED
-
-#define PaletteSlots 5
-#define PalettePadding 5
-class SkColorPalette : public SkView {
-public:
-    SkColorPalette();
-    SkColor getColor() { return fCurrColor; }
-protected:
-    virtual bool onEvent(const SkEvent& evt);
-    virtual void onDraw(SkCanvas* canvas);
-    virtual SkView::Click* onFindClickHandler(SkScalar x, SkScalar y);
-    virtual bool onClick(SkView::Click* click);
-    virtual void onSizeChange();
-private:
-    int selectSlot(SkPoint& cursorPosition);
-    SkColor selectColorFromGradient(SkPoint& cursorPosition);
-    int     fSelected;
-    SkRect  fGradientRect;
-    SkRect  fSlotRect;
-    SkColor fCurrColor;
-    SkColor fColors[PaletteSlots];
-    typedef SkView INHERITED;
-};
-
-#endif
diff --git a/src/third_party/skia/experimental/DrawingBoard/SkNetPipeController.cpp b/src/third_party/skia/experimental/DrawingBoard/SkNetPipeController.cpp
deleted file mode 100644
index 3e4ded5..0000000
--- a/src/third_party/skia/experimental/DrawingBoard/SkNetPipeController.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#include "SkNetPipeController.h"
-
-SkNetPipeController::SkNetPipeController(SkCanvas* target) : fReader(target) {
-    fBlock = NULL;
-    fBlockSize = fBytesWritten = 0;
-    fPlayback = true;
-    fStatus = SkGPipeReader::kDone_Status;
-    fTotalWritten = 0;
-    fAtomsWritten = 0;
-}
-SkNetPipeController::~SkNetPipeController() {
-    sk_free(fBlock);
-}
-
-int SkNetPipeController::writeToSocket(SkSocket* sockfd, SkSocket::DataType type) {
-    if (NULL != sockfd && fTotalWritten > 4)
-        return sockfd->writePacket(fBlock, fBytesWritten, type);
-    else
-        return -1;
-}
-
-void* SkNetPipeController::requestBlock(size_t minRequest, size_t* actual) {
-    sk_free(fBlock);
-
-    fBlockSize = minRequest * 4;
-    fBlock = sk_malloc_throw(fBlockSize);
-    fBytesWritten = 0;
-    *actual = fBlockSize;
-    return fBlock;
-}
-
-void SkNetPipeController::notifyWritten(size_t bytes) {
-    SkASSERT(fBytesWritten + bytes <= fBlockSize);
-
-    if (fPlayback) {
-        fStatus = fReader.playback((const char*)fBlock + fBytesWritten, bytes);
-    }
-
-    SkASSERT(SkGPipeReader::kError_Status != fStatus);
-    fBytesWritten += bytes;
-    fTotalWritten += bytes;
-
-    fAtomsWritten += 1;
-}
diff --git a/src/third_party/skia/experimental/DrawingBoard/SkNetPipeController.h b/src/third_party/skia/experimental/DrawingBoard/SkNetPipeController.h
deleted file mode 100644
index 84b1714..0000000
--- a/src/third_party/skia/experimental/DrawingBoard/SkNetPipeController.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#ifndef SkNetPipeController_DEFINED
-#define SkNetPipeController_DEFINED
-#include "SkTypes.h"
-#include "SkCanvas.h"
-#include "SkGPipe.h"
-#include "SkSockets.h"
-class SkNetPipeController : public SkGPipeController {
-public:
-    SkNetPipeController(SkCanvas* target);
-    ~SkNetPipeController();
-
-    virtual void* requestBlock(size_t minRequest, size_t* actual);
-    virtual void notifyWritten(size_t bytes);
-
-    int writeToSocket(SkSocket* sockfd, SkSocket::DataType type);
-    void enablePlayback() { fPlayback = true; }
-    void disablePlayback() { fPlayback = false; }
-
-private:
-    SkGPipeReader   fReader;
-    bool            fPlayback;
-    void*           fBlock;
-    size_t          fBlockSize;
-    size_t          fBytesWritten;
-    int             fAtomsWritten;
-    size_t          fTotalWritten;
-
-    SkGPipeReader::Status   fStatus;
-};
-#endif
diff --git a/src/third_party/skia/experimental/FileReaderApp/English.lproj/InfoPlist.strings b/src/third_party/skia/experimental/FileReaderApp/English.lproj/InfoPlist.strings
deleted file mode 100644
index 477b28f..0000000
--- a/src/third_party/skia/experimental/FileReaderApp/English.lproj/InfoPlist.strings
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Localized versions of Info.plist keys */
-
diff --git a/src/third_party/skia/experimental/FileReaderApp/English.lproj/MainMenu.xib b/src/third_party/skia/experimental/FileReaderApp/English.lproj/MainMenu.xib
deleted file mode 100644
index 53e910b..0000000
--- a/src/third_party/skia/experimental/FileReaderApp/English.lproj/MainMenu.xib
+++ /dev/null
@@ -1,4272 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
-	<data>
-		<int key="IBDocument.SystemTarget">1060</int>
-		<string key="IBDocument.SystemVersion">10J3250</string>
-		<string key="IBDocument.InterfaceBuilderVersion">851</string>
-		<string key="IBDocument.AppKitVersion">1038.35</string>
-		<string key="IBDocument.HIToolboxVersion">461.00</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			<string key="NS.object.0">851</string>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-		</object>
-		<object class="NSArray" key="IBDocument.PluginDependencies">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.Metadata">
-			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
-			<integer value="1" key="NS.object.0"/>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSCustomObject" id="1021">
-				<string key="NSClassName">NSApplication</string>
-			</object>
-			<object class="NSCustomObject" id="1014">
-				<string key="NSClassName">FirstResponder</string>
-			</object>
-			<object class="NSCustomObject" id="1050">
-				<string key="NSClassName">NSApplication</string>
-			</object>
-			<object class="NSMenu" id="649796088">
-				<string key="NSTitle">AMainMenu</string>
-				<object class="NSMutableArray" key="NSMenuItems">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="NSMenuItem" id="694149608">
-						<reference key="NSMenu" ref="649796088"/>
-						<string key="NSTitle">FileReaderApp</string>
-						<string key="NSKeyEquiv"/>
-						<int key="NSKeyEquivModMask">1048576</int>
-						<int key="NSMnemonicLoc">2147483647</int>
-						<object class="NSCustomResource" key="NSOnImage" id="35465992">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">NSMenuCheckmark</string>
-						</object>
-						<object class="NSCustomResource" key="NSMixedImage" id="502551668">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">NSMenuMixedState</string>
-						</object>
-						<string key="NSAction">submenuAction:</string>
-						<object class="NSMenu" key="NSSubmenu" id="110575045">
-							<string key="NSTitle">FileReaderApp</string>
-							<object class="NSMutableArray" key="NSMenuItems">
-								<bool key="EncodedWithXMLCoder">YES</bool>
-								<object class="NSMenuItem" id="238522557">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">About FileReaderApp</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="304266470">
-									<reference key="NSMenu" ref="110575045"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="609285721">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">Preferences…</string>
-									<string key="NSKeyEquiv">,</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="481834944">
-									<reference key="NSMenu" ref="110575045"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="1046388886">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">Services</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-									<string key="NSAction">submenuAction:</string>
-									<object class="NSMenu" key="NSSubmenu" id="752062318">
-										<string key="NSTitle">Services</string>
-										<object class="NSMutableArray" key="NSMenuItems">
-											<bool key="EncodedWithXMLCoder">YES</bool>
-										</object>
-										<string key="NSName">_NSServicesMenu</string>
-									</object>
-								</object>
-								<object class="NSMenuItem" id="646227648">
-									<reference key="NSMenu" ref="110575045"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="755159360">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">Hide FileReaderApp</string>
-									<string key="NSKeyEquiv">h</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="342932134">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">Hide Others</string>
-									<string key="NSKeyEquiv">h</string>
-									<int key="NSKeyEquivModMask">1572864</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="908899353">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">Show All</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="1056857174">
-									<reference key="NSMenu" ref="110575045"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="632727374">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">Quit FileReaderApp</string>
-									<string key="NSKeyEquiv">q</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-							</object>
-							<string key="NSName">_NSAppleMenu</string>
-						</object>
-					</object>
-					<object class="NSMenuItem" id="379814623">
-						<reference key="NSMenu" ref="649796088"/>
-						<string key="NSTitle">File</string>
-						<string key="NSKeyEquiv"/>
-						<int key="NSKeyEquivModMask">1048576</int>
-						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="35465992"/>
-						<reference key="NSMixedImage" ref="502551668"/>
-						<string key="NSAction">submenuAction:</string>
-						<object class="NSMenu" key="NSSubmenu" id="720053764">
-							<string key="NSTitle">File</string>
-							<object class="NSMutableArray" key="NSMenuItems">
-								<bool key="EncodedWithXMLCoder">YES</bool>
-								<object class="NSMenuItem" id="705341025">
-									<reference key="NSMenu" ref="720053764"/>
-									<string key="NSTitle">New</string>
-									<string key="NSKeyEquiv">n</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="722745758">
-									<reference key="NSMenu" ref="720053764"/>
-									<string key="NSTitle">Open…</string>
-									<string key="NSKeyEquiv">o</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="1025936716">
-									<reference key="NSMenu" ref="720053764"/>
-									<string key="NSTitle">Open Recent</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-									<string key="NSAction">submenuAction:</string>
-									<object class="NSMenu" key="NSSubmenu" id="1065607017">
-										<string key="NSTitle">Open Recent</string>
-										<object class="NSMutableArray" key="NSMenuItems">
-											<bool key="EncodedWithXMLCoder">YES</bool>
-											<object class="NSMenuItem" id="759406840">
-												<reference key="NSMenu" ref="1065607017"/>
-												<string key="NSTitle">Clear Menu</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-										</object>
-										<string key="NSName">_NSRecentDocumentsMenu</string>
-									</object>
-								</object>
-								<object class="NSMenuItem" id="425164168">
-									<reference key="NSMenu" ref="720053764"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="776162233">
-									<reference key="NSMenu" ref="720053764"/>
-									<string key="NSTitle">Close</string>
-									<string key="NSKeyEquiv">w</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="1023925487">
-									<reference key="NSMenu" ref="720053764"/>
-									<string key="NSTitle">Save</string>
-									<string key="NSKeyEquiv">s</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="117038363">
-									<reference key="NSMenu" ref="720053764"/>
-									<string key="NSTitle">Save As…</string>
-									<string key="NSKeyEquiv">S</string>
-									<int key="NSKeyEquivModMask">1179648</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="579971712">
-									<reference key="NSMenu" ref="720053764"/>
-									<string key="NSTitle">Revert to Saved</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="1010469920">
-									<reference key="NSMenu" ref="720053764"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="294629803">
-									<reference key="NSMenu" ref="720053764"/>
-									<string key="NSTitle">Page Setup...</string>
-									<string key="NSKeyEquiv">P</string>
-									<int key="NSKeyEquivModMask">1179648</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-									<string key="NSToolTip"/>
-								</object>
-								<object class="NSMenuItem" id="49223823">
-									<reference key="NSMenu" ref="720053764"/>
-									<string key="NSTitle">Print…</string>
-									<string key="NSKeyEquiv">p</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-							</object>
-						</object>
-					</object>
-					<object class="NSMenuItem" id="952259628">
-						<reference key="NSMenu" ref="649796088"/>
-						<string key="NSTitle">Edit</string>
-						<string key="NSKeyEquiv"/>
-						<int key="NSKeyEquivModMask">1048576</int>
-						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="35465992"/>
-						<reference key="NSMixedImage" ref="502551668"/>
-						<string key="NSAction">submenuAction:</string>
-						<object class="NSMenu" key="NSSubmenu" id="789758025">
-							<string key="NSTitle">Edit</string>
-							<object class="NSMutableArray" key="NSMenuItems">
-								<bool key="EncodedWithXMLCoder">YES</bool>
-								<object class="NSMenuItem" id="1058277027">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Undo</string>
-									<string key="NSKeyEquiv">z</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="790794224">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Redo</string>
-									<string key="NSKeyEquiv">Z</string>
-									<int key="NSKeyEquivModMask">1179648</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="1040322652">
-									<reference key="NSMenu" ref="789758025"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="296257095">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Cut</string>
-									<string key="NSKeyEquiv">x</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="860595796">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Copy</string>
-									<string key="NSKeyEquiv">c</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="29853731">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Paste</string>
-									<string key="NSKeyEquiv">v</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="82994268">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Paste and Match Style</string>
-									<string key="NSKeyEquiv">V</string>
-									<int key="NSKeyEquivModMask">1572864</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="437104165">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Delete</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="583158037">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Select All</string>
-									<string key="NSKeyEquiv">a</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="212016141">
-									<reference key="NSMenu" ref="789758025"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="892235320">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Find</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-									<string key="NSAction">submenuAction:</string>
-									<object class="NSMenu" key="NSSubmenu" id="963351320">
-										<string key="NSTitle">Find</string>
-										<object class="NSMutableArray" key="NSMenuItems">
-											<bool key="EncodedWithXMLCoder">YES</bool>
-											<object class="NSMenuItem" id="447796847">
-												<reference key="NSMenu" ref="963351320"/>
-												<string key="NSTitle">Find…</string>
-												<string key="NSKeyEquiv">f</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">1</int>
-											</object>
-											<object class="NSMenuItem" id="326711663">
-												<reference key="NSMenu" ref="963351320"/>
-												<string key="NSTitle">Find Next</string>
-												<string key="NSKeyEquiv">g</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">2</int>
-											</object>
-											<object class="NSMenuItem" id="270902937">
-												<reference key="NSMenu" ref="963351320"/>
-												<string key="NSTitle">Find Previous</string>
-												<string key="NSKeyEquiv">G</string>
-												<int key="NSKeyEquivModMask">1179648</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">3</int>
-											</object>
-											<object class="NSMenuItem" id="159080638">
-												<reference key="NSMenu" ref="963351320"/>
-												<string key="NSTitle">Use Selection for Find</string>
-												<string key="NSKeyEquiv">e</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">7</int>
-											</object>
-											<object class="NSMenuItem" id="88285865">
-												<reference key="NSMenu" ref="963351320"/>
-												<string key="NSTitle">Jump to Selection</string>
-												<string key="NSKeyEquiv">j</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-										</object>
-									</object>
-								</object>
-								<object class="NSMenuItem" id="972420730">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Spelling and Grammar</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-									<string key="NSAction">submenuAction:</string>
-									<object class="NSMenu" key="NSSubmenu" id="769623530">
-										<string key="NSTitle">Spelling and Grammar</string>
-										<object class="NSMutableArray" key="NSMenuItems">
-											<bool key="EncodedWithXMLCoder">YES</bool>
-											<object class="NSMenuItem" id="679648819">
-												<reference key="NSMenu" ref="769623530"/>
-												<string key="NSTitle">Show Spelling and Grammar</string>
-												<string key="NSKeyEquiv">:</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="96193923">
-												<reference key="NSMenu" ref="769623530"/>
-												<string key="NSTitle">Check Document Now</string>
-												<string key="NSKeyEquiv">;</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="859480356">
-												<reference key="NSMenu" ref="769623530"/>
-												<bool key="NSIsDisabled">YES</bool>
-												<bool key="NSIsSeparator">YES</bool>
-												<string key="NSTitle"/>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="948374510">
-												<reference key="NSMenu" ref="769623530"/>
-												<string key="NSTitle">Check Spelling While Typing</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="967646866">
-												<reference key="NSMenu" ref="769623530"/>
-												<string key="NSTitle">Check Grammar With Spelling</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="795346622">
-												<reference key="NSMenu" ref="769623530"/>
-												<string key="NSTitle">Correct Spelling Automatically</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-										</object>
-									</object>
-								</object>
-								<object class="NSMenuItem" id="507821607">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Substitutions</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-									<string key="NSAction">submenuAction:</string>
-									<object class="NSMenu" key="NSSubmenu" id="698887838">
-										<string key="NSTitle">Substitutions</string>
-										<object class="NSMutableArray" key="NSMenuItems">
-											<bool key="EncodedWithXMLCoder">YES</bool>
-											<object class="NSMenuItem" id="65139061">
-												<reference key="NSMenu" ref="698887838"/>
-												<string key="NSTitle">Show Substitutions</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="19036812">
-												<reference key="NSMenu" ref="698887838"/>
-												<bool key="NSIsDisabled">YES</bool>
-												<bool key="NSIsSeparator">YES</bool>
-												<string key="NSTitle"/>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="605118523">
-												<reference key="NSMenu" ref="698887838"/>
-												<string key="NSTitle">Smart Copy/Paste</string>
-												<string key="NSKeyEquiv">f</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">1</int>
-											</object>
-											<object class="NSMenuItem" id="197661976">
-												<reference key="NSMenu" ref="698887838"/>
-												<string key="NSTitle">Smart Quotes</string>
-												<string key="NSKeyEquiv">g</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">2</int>
-											</object>
-											<object class="NSMenuItem" id="672708820">
-												<reference key="NSMenu" ref="698887838"/>
-												<string key="NSTitle">Smart Dashes</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="708854459">
-												<reference key="NSMenu" ref="698887838"/>
-												<string key="NSTitle">Smart Links</string>
-												<string key="NSKeyEquiv">G</string>
-												<int key="NSKeyEquivModMask">1179648</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">3</int>
-											</object>
-											<object class="NSMenuItem" id="537092702">
-												<reference key="NSMenu" ref="698887838"/>
-												<string key="NSTitle">Text Replacement</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-										</object>
-									</object>
-								</object>
-								<object class="NSMenuItem" id="288088188">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Transformations</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-									<string key="NSAction">submenuAction:</string>
-									<object class="NSMenu" key="NSSubmenu" id="579392910">
-										<string key="NSTitle">Transformations</string>
-										<object class="NSMutableArray" key="NSMenuItems">
-											<bool key="EncodedWithXMLCoder">YES</bool>
-											<object class="NSMenuItem" id="1060694897">
-												<reference key="NSMenu" ref="579392910"/>
-												<string key="NSTitle">Make Upper Case</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="879586729">
-												<reference key="NSMenu" ref="579392910"/>
-												<string key="NSTitle">Make Lower Case</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="56570060">
-												<reference key="NSMenu" ref="579392910"/>
-												<string key="NSTitle">Capitalize</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-										</object>
-									</object>
-								</object>
-								<object class="NSMenuItem" id="676164635">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Speech</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-									<string key="NSAction">submenuAction:</string>
-									<object class="NSMenu" key="NSSubmenu" id="785027613">
-										<string key="NSTitle">Speech</string>
-										<object class="NSMutableArray" key="NSMenuItems">
-											<bool key="EncodedWithXMLCoder">YES</bool>
-											<object class="NSMenuItem" id="731782645">
-												<reference key="NSMenu" ref="785027613"/>
-												<string key="NSTitle">Start Speaking</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="680220178">
-												<reference key="NSMenu" ref="785027613"/>
-												<string key="NSTitle">Stop Speaking</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-										</object>
-									</object>
-								</object>
-							</object>
-						</object>
-					</object>
-					<object class="NSMenuItem" id="302598603">
-						<reference key="NSMenu" ref="649796088"/>
-						<string key="NSTitle">Format</string>
-						<string key="NSKeyEquiv"/>
-						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="35465992"/>
-						<reference key="NSMixedImage" ref="502551668"/>
-						<string key="NSAction">submenuAction:</string>
-						<object class="NSMenu" key="NSSubmenu" id="941447902">
-							<string key="NSTitle">Format</string>
-							<object class="NSMutableArray" key="NSMenuItems">
-								<bool key="EncodedWithXMLCoder">YES</bool>
-								<object class="NSMenuItem" id="792887677">
-									<reference key="NSMenu" ref="941447902"/>
-									<string key="NSTitle">Font</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-									<string key="NSAction">submenuAction:</string>
-									<object class="NSMenu" key="NSSubmenu" id="786677654">
-										<string key="NSTitle">Font</string>
-										<object class="NSMutableArray" key="NSMenuItems">
-											<bool key="EncodedWithXMLCoder">YES</bool>
-											<object class="NSMenuItem" id="159677712">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Show Fonts</string>
-												<string key="NSKeyEquiv">t</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="305399458">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Bold</string>
-												<string key="NSKeyEquiv">b</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">2</int>
-											</object>
-											<object class="NSMenuItem" id="814362025">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Italic</string>
-												<string key="NSKeyEquiv">i</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">1</int>
-											</object>
-											<object class="NSMenuItem" id="330926929">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Underline</string>
-												<string key="NSKeyEquiv">u</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="533507878">
-												<reference key="NSMenu" ref="786677654"/>
-												<bool key="NSIsDisabled">YES</bool>
-												<bool key="NSIsSeparator">YES</bool>
-												<string key="NSTitle"/>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="158063935">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Bigger</string>
-												<string key="NSKeyEquiv">+</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">3</int>
-											</object>
-											<object class="NSMenuItem" id="885547335">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Smaller</string>
-												<string key="NSKeyEquiv">-</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">4</int>
-											</object>
-											<object class="NSMenuItem" id="901062459">
-												<reference key="NSMenu" ref="786677654"/>
-												<bool key="NSIsDisabled">YES</bool>
-												<bool key="NSIsSeparator">YES</bool>
-												<string key="NSTitle"/>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="767671776">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Kern</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<string key="NSAction">submenuAction:</string>
-												<object class="NSMenu" key="NSSubmenu" id="175441468">
-													<string key="NSTitle">Kern</string>
-													<object class="NSMutableArray" key="NSMenuItems">
-														<bool key="EncodedWithXMLCoder">YES</bool>
-														<object class="NSMenuItem" id="252969304">
-															<reference key="NSMenu" ref="175441468"/>
-															<string key="NSTitle">Use Default</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="766922938">
-															<reference key="NSMenu" ref="175441468"/>
-															<string key="NSTitle">Use None</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="677519740">
-															<reference key="NSMenu" ref="175441468"/>
-															<string key="NSTitle">Tighten</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="238351151">
-															<reference key="NSMenu" ref="175441468"/>
-															<string key="NSTitle">Loosen</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-													</object>
-												</object>
-											</object>
-											<object class="NSMenuItem" id="691570813">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Ligature</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<string key="NSAction">submenuAction:</string>
-												<object class="NSMenu" key="NSSubmenu" id="1058217995">
-													<string key="NSTitle">Ligature</string>
-													<object class="NSMutableArray" key="NSMenuItems">
-														<bool key="EncodedWithXMLCoder">YES</bool>
-														<object class="NSMenuItem" id="706297211">
-															<reference key="NSMenu" ref="1058217995"/>
-															<string key="NSTitle">Use Default</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="568384683">
-															<reference key="NSMenu" ref="1058217995"/>
-															<string key="NSTitle">Use None</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="663508465">
-															<reference key="NSMenu" ref="1058217995"/>
-															<string key="NSTitle">Use All</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-													</object>
-												</object>
-											</object>
-											<object class="NSMenuItem" id="769124883">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Baseline</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<string key="NSAction">submenuAction:</string>
-												<object class="NSMenu" key="NSSubmenu" id="18263474">
-													<string key="NSTitle">Baseline</string>
-													<object class="NSMutableArray" key="NSMenuItems">
-														<bool key="EncodedWithXMLCoder">YES</bool>
-														<object class="NSMenuItem" id="257962622">
-															<reference key="NSMenu" ref="18263474"/>
-															<string key="NSTitle">Use Default</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="644725453">
-															<reference key="NSMenu" ref="18263474"/>
-															<string key="NSTitle">Superscript</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="1037576581">
-															<reference key="NSMenu" ref="18263474"/>
-															<string key="NSTitle">Subscript</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="941806246">
-															<reference key="NSMenu" ref="18263474"/>
-															<string key="NSTitle">Raise</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="1045724900">
-															<reference key="NSMenu" ref="18263474"/>
-															<string key="NSTitle">Lower</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-													</object>
-												</object>
-											</object>
-											<object class="NSMenuItem" id="739652853">
-												<reference key="NSMenu" ref="786677654"/>
-												<bool key="NSIsDisabled">YES</bool>
-												<bool key="NSIsSeparator">YES</bool>
-												<string key="NSTitle"/>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="1012600125">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Show Colors</string>
-												<string key="NSKeyEquiv">C</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="214559597">
-												<reference key="NSMenu" ref="786677654"/>
-												<bool key="NSIsDisabled">YES</bool>
-												<bool key="NSIsSeparator">YES</bool>
-												<string key="NSTitle"/>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="596732606">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Copy Style</string>
-												<string key="NSKeyEquiv">c</string>
-												<int key="NSKeyEquivModMask">1572864</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="393423671">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Paste Style</string>
-												<string key="NSKeyEquiv">v</string>
-												<int key="NSKeyEquivModMask">1572864</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-										</object>
-										<string key="NSName">_NSFontMenu</string>
-									</object>
-								</object>
-								<object class="NSMenuItem" id="215659978">
-									<reference key="NSMenu" ref="941447902"/>
-									<string key="NSTitle">Text</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-									<string key="NSAction">submenuAction:</string>
-									<object class="NSMenu" key="NSSubmenu" id="446991534">
-										<string key="NSTitle">Text</string>
-										<object class="NSMutableArray" key="NSMenuItems">
-											<bool key="EncodedWithXMLCoder">YES</bool>
-											<object class="NSMenuItem" id="875092757">
-												<reference key="NSMenu" ref="446991534"/>
-												<string key="NSTitle">Align Left</string>
-												<string key="NSKeyEquiv">{</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="630155264">
-												<reference key="NSMenu" ref="446991534"/>
-												<string key="NSTitle">Center</string>
-												<string key="NSKeyEquiv">|</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="945678886">
-												<reference key="NSMenu" ref="446991534"/>
-												<string key="NSTitle">Justify</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="512868991">
-												<reference key="NSMenu" ref="446991534"/>
-												<string key="NSTitle">Align Right</string>
-												<string key="NSKeyEquiv">}</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="163117631">
-												<reference key="NSMenu" ref="446991534"/>
-												<bool key="NSIsDisabled">YES</bool>
-												<bool key="NSIsSeparator">YES</bool>
-												<string key="NSTitle"/>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="31516759">
-												<reference key="NSMenu" ref="446991534"/>
-												<string key="NSTitle">Writing Direction</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<string key="NSAction">submenuAction:</string>
-												<object class="NSMenu" key="NSSubmenu" id="956096989">
-													<string key="NSTitle">Writing Direction</string>
-													<object class="NSMutableArray" key="NSMenuItems">
-														<bool key="EncodedWithXMLCoder">YES</bool>
-														<object class="NSMenuItem" id="257099033">
-															<reference key="NSMenu" ref="956096989"/>
-															<bool key="NSIsDisabled">YES</bool>
-															<string key="NSTitle">Paragraph</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="551969625">
-															<reference key="NSMenu" ref="956096989"/>
-															<string type="base64-UTF8" key="NSTitle">CURlZmF1bHQ</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="249532473">
-															<reference key="NSMenu" ref="956096989"/>
-															<string type="base64-UTF8" key="NSTitle">CUxlZnQgdG8gUmlnaHQ</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="607364498">
-															<reference key="NSMenu" ref="956096989"/>
-															<string type="base64-UTF8" key="NSTitle">CVJpZ2h0IHRvIExlZnQ</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="508151438">
-															<reference key="NSMenu" ref="956096989"/>
-															<bool key="NSIsDisabled">YES</bool>
-															<bool key="NSIsSeparator">YES</bool>
-															<string key="NSTitle"/>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="981751889">
-															<reference key="NSMenu" ref="956096989"/>
-															<bool key="NSIsDisabled">YES</bool>
-															<string key="NSTitle">Selection</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="380031999">
-															<reference key="NSMenu" ref="956096989"/>
-															<string type="base64-UTF8" key="NSTitle">CURlZmF1bHQ</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="825984362">
-															<reference key="NSMenu" ref="956096989"/>
-															<string type="base64-UTF8" key="NSTitle">CUxlZnQgdG8gUmlnaHQ</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="560145579">
-															<reference key="NSMenu" ref="956096989"/>
-															<string type="base64-UTF8" key="NSTitle">CVJpZ2h0IHRvIExlZnQ</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-													</object>
-												</object>
-											</object>
-											<object class="NSMenuItem" id="908105787">
-												<reference key="NSMenu" ref="446991534"/>
-												<bool key="NSIsDisabled">YES</bool>
-												<bool key="NSIsSeparator">YES</bool>
-												<string key="NSTitle"/>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="644046920">
-												<reference key="NSMenu" ref="446991534"/>
-												<string key="NSTitle">Show Ruler</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="231811626">
-												<reference key="NSMenu" ref="446991534"/>
-												<string key="NSTitle">Copy Ruler</string>
-												<string key="NSKeyEquiv">c</string>
-												<int key="NSKeyEquivModMask">1310720</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="883618387">
-												<reference key="NSMenu" ref="446991534"/>
-												<string key="NSTitle">Paste Ruler</string>
-												<string key="NSKeyEquiv">v</string>
-												<int key="NSKeyEquivModMask">1310720</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-										</object>
-									</object>
-								</object>
-							</object>
-						</object>
-					</object>
-					<object class="NSMenuItem" id="586577488">
-						<reference key="NSMenu" ref="649796088"/>
-						<string key="NSTitle">View</string>
-						<string key="NSKeyEquiv"/>
-						<int key="NSKeyEquivModMask">1048576</int>
-						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="35465992"/>
-						<reference key="NSMixedImage" ref="502551668"/>
-						<string key="NSAction">submenuAction:</string>
-						<object class="NSMenu" key="NSSubmenu" id="466310130">
-							<string key="NSTitle">View</string>
-							<object class="NSMutableArray" key="NSMenuItems">
-								<bool key="EncodedWithXMLCoder">YES</bool>
-								<object class="NSMenuItem" id="102151532">
-									<reference key="NSMenu" ref="466310130"/>
-									<string key="NSTitle">Show Toolbar</string>
-									<string key="NSKeyEquiv">t</string>
-									<int key="NSKeyEquivModMask">1572864</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="237841660">
-									<reference key="NSMenu" ref="466310130"/>
-									<string key="NSTitle">Customize Toolbar…</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-							</object>
-						</object>
-					</object>
-					<object class="NSMenuItem" id="713487014">
-						<reference key="NSMenu" ref="649796088"/>
-						<string key="NSTitle">Window</string>
-						<string key="NSKeyEquiv"/>
-						<int key="NSKeyEquivModMask">1048576</int>
-						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="35465992"/>
-						<reference key="NSMixedImage" ref="502551668"/>
-						<string key="NSAction">submenuAction:</string>
-						<object class="NSMenu" key="NSSubmenu" id="835318025">
-							<string key="NSTitle">Window</string>
-							<object class="NSMutableArray" key="NSMenuItems">
-								<bool key="EncodedWithXMLCoder">YES</bool>
-								<object class="NSMenuItem" id="1011231497">
-									<reference key="NSMenu" ref="835318025"/>
-									<string key="NSTitle">Minimize</string>
-									<string key="NSKeyEquiv">m</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="575023229">
-									<reference key="NSMenu" ref="835318025"/>
-									<string key="NSTitle">Zoom</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="299356726">
-									<reference key="NSMenu" ref="835318025"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="625202149">
-									<reference key="NSMenu" ref="835318025"/>
-									<string key="NSTitle">Bring All to Front</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-							</object>
-							<string key="NSName">_NSWindowsMenu</string>
-						</object>
-					</object>
-					<object class="NSMenuItem" id="448692316">
-						<reference key="NSMenu" ref="649796088"/>
-						<string key="NSTitle">Help</string>
-						<string key="NSKeyEquiv"/>
-						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="35465992"/>
-						<reference key="NSMixedImage" ref="502551668"/>
-						<string key="NSAction">submenuAction:</string>
-						<object class="NSMenu" key="NSSubmenu" id="992780483">
-							<string key="NSTitle">Help</string>
-							<object class="NSMutableArray" key="NSMenuItems">
-								<bool key="EncodedWithXMLCoder">YES</bool>
-								<object class="NSMenuItem" id="105068016">
-									<reference key="NSMenu" ref="992780483"/>
-									<string key="NSTitle">FileReaderApp Help</string>
-									<string key="NSKeyEquiv">?</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-							</object>
-							<string key="NSName">_NSHelpMenu</string>
-						</object>
-					</object>
-				</object>
-				<string key="NSName">_NSMainMenu</string>
-			</object>
-			<object class="NSWindowTemplate" id="972006081">
-				<int key="NSWindowStyleMask">15</int>
-				<int key="NSWindowBacking">2</int>
-				<string key="NSWindowRect">{{335, 390}, {640, 480}}</string>
-				<int key="NSWTFlags">1954021376</int>
-				<string key="NSWindowTitle">FileReaderApp</string>
-				<string key="NSWindowClass">FileReaderWindow</string>
-				<nil key="NSViewClass"/>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
-				<object class="NSView" key="NSWindowView" id="439893737">
-					<nil key="NSNextResponder"/>
-					<int key="NSvFlags">256</int>
-					<object class="NSMutableArray" key="NSSubviews">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSCustomView" id="322594744">
-							<reference key="NSNextResponder" ref="439893737"/>
-							<int key="NSvFlags">274</int>
-							<string key="NSFrameSize">{640, 480}</string>
-							<reference key="NSSuperview" ref="439893737"/>
-							<string key="NSClassName">SkNSView</string>
-						</object>
-					</object>
-					<string key="NSFrameSize">{640, 480}</string>
-				</object>
-				<string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
-			</object>
-			<object class="NSCustomObject" id="976324537">
-				<string key="NSClassName">FileReaderAppDelegate</string>
-			</object>
-			<object class="NSCustomObject" id="755631768">
-				<string key="NSClassName">NSFontManager</string>
-			</object>
-		</object>
-		<object class="IBObjectContainer" key="IBDocument.Objects">
-			<object class="NSMutableArray" key="connectionRecords">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">performMiniaturize:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="1011231497"/>
-					</object>
-					<int key="connectionID">37</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">arrangeInFront:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="625202149"/>
-					</object>
-					<int key="connectionID">39</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">print:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="49223823"/>
-					</object>
-					<int key="connectionID">86</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">runPageLayout:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="294629803"/>
-					</object>
-					<int key="connectionID">87</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">clearRecentDocuments:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="759406840"/>
-					</object>
-					<int key="connectionID">127</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">orderFrontStandardAboutPanel:</string>
-						<reference key="source" ref="1021"/>
-						<reference key="destination" ref="238522557"/>
-					</object>
-					<int key="connectionID">142</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">performClose:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="776162233"/>
-					</object>
-					<int key="connectionID">193</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleContinuousSpellChecking:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="948374510"/>
-					</object>
-					<int key="connectionID">222</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">undo:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="1058277027"/>
-					</object>
-					<int key="connectionID">223</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">copy:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="860595796"/>
-					</object>
-					<int key="connectionID">224</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">checkSpelling:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="96193923"/>
-					</object>
-					<int key="connectionID">225</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">paste:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="29853731"/>
-					</object>
-					<int key="connectionID">226</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">stopSpeaking:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="680220178"/>
-					</object>
-					<int key="connectionID">227</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">cut:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="296257095"/>
-					</object>
-					<int key="connectionID">228</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">showGuessPanel:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="679648819"/>
-					</object>
-					<int key="connectionID">230</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">redo:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="790794224"/>
-					</object>
-					<int key="connectionID">231</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">selectAll:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="583158037"/>
-					</object>
-					<int key="connectionID">232</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">startSpeaking:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="731782645"/>
-					</object>
-					<int key="connectionID">233</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">delete:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="437104165"/>
-					</object>
-					<int key="connectionID">235</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">performZoom:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="575023229"/>
-					</object>
-					<int key="connectionID">240</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">performFindPanelAction:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="447796847"/>
-					</object>
-					<int key="connectionID">241</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">centerSelectionInVisibleArea:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="88285865"/>
-					</object>
-					<int key="connectionID">245</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleGrammarChecking:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="967646866"/>
-					</object>
-					<int key="connectionID">347</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleSmartInsertDelete:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="605118523"/>
-					</object>
-					<int key="connectionID">355</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleAutomaticQuoteSubstitution:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="197661976"/>
-					</object>
-					<int key="connectionID">356</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleAutomaticLinkDetection:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="708854459"/>
-					</object>
-					<int key="connectionID">357</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">saveDocument:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="1023925487"/>
-					</object>
-					<int key="connectionID">362</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">saveDocumentAs:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="117038363"/>
-					</object>
-					<int key="connectionID">363</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">revertDocumentToSaved:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="579971712"/>
-					</object>
-					<int key="connectionID">364</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">runToolbarCustomizationPalette:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="237841660"/>
-					</object>
-					<int key="connectionID">365</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleToolbarShown:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="102151532"/>
-					</object>
-					<int key="connectionID">366</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">hide:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="755159360"/>
-					</object>
-					<int key="connectionID">367</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">hideOtherApplications:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="342932134"/>
-					</object>
-					<int key="connectionID">368</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">unhideAllApplications:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="908899353"/>
-					</object>
-					<int key="connectionID">370</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">newDocument:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="705341025"/>
-					</object>
-					<int key="connectionID">373</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">openDocument:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="722745758"/>
-					</object>
-					<int key="connectionID">374</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">addFontTrait:</string>
-						<reference key="source" ref="755631768"/>
-						<reference key="destination" ref="305399458"/>
-					</object>
-					<int key="connectionID">421</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">addFontTrait:</string>
-						<reference key="source" ref="755631768"/>
-						<reference key="destination" ref="814362025"/>
-					</object>
-					<int key="connectionID">422</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">modifyFont:</string>
-						<reference key="source" ref="755631768"/>
-						<reference key="destination" ref="885547335"/>
-					</object>
-					<int key="connectionID">423</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">orderFrontFontPanel:</string>
-						<reference key="source" ref="755631768"/>
-						<reference key="destination" ref="159677712"/>
-					</object>
-					<int key="connectionID">424</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">modifyFont:</string>
-						<reference key="source" ref="755631768"/>
-						<reference key="destination" ref="158063935"/>
-					</object>
-					<int key="connectionID">425</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">raiseBaseline:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="941806246"/>
-					</object>
-					<int key="connectionID">426</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">lowerBaseline:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="1045724900"/>
-					</object>
-					<int key="connectionID">427</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">copyFont:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="596732606"/>
-					</object>
-					<int key="connectionID">428</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">subscript:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="1037576581"/>
-					</object>
-					<int key="connectionID">429</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">superscript:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="644725453"/>
-					</object>
-					<int key="connectionID">430</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">tightenKerning:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="677519740"/>
-					</object>
-					<int key="connectionID">431</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">underline:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="330926929"/>
-					</object>
-					<int key="connectionID">432</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">orderFrontColorPanel:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="1012600125"/>
-					</object>
-					<int key="connectionID">433</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">useAllLigatures:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="663508465"/>
-					</object>
-					<int key="connectionID">434</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">loosenKerning:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="238351151"/>
-					</object>
-					<int key="connectionID">435</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">pasteFont:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="393423671"/>
-					</object>
-					<int key="connectionID">436</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">unscript:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="257962622"/>
-					</object>
-					<int key="connectionID">437</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">useStandardKerning:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="252969304"/>
-					</object>
-					<int key="connectionID">438</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">useStandardLigatures:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="706297211"/>
-					</object>
-					<int key="connectionID">439</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">turnOffLigatures:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="568384683"/>
-					</object>
-					<int key="connectionID">440</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">turnOffKerning:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="766922938"/>
-					</object>
-					<int key="connectionID">441</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">terminate:</string>
-						<reference key="source" ref="1050"/>
-						<reference key="destination" ref="632727374"/>
-					</object>
-					<int key="connectionID">449</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleAutomaticSpellingCorrection:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="795346622"/>
-					</object>
-					<int key="connectionID">456</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">orderFrontSubstitutionsPanel:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="65139061"/>
-					</object>
-					<int key="connectionID">458</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleAutomaticDashSubstitution:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="672708820"/>
-					</object>
-					<int key="connectionID">461</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleAutomaticTextReplacement:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="537092702"/>
-					</object>
-					<int key="connectionID">463</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">uppercaseWord:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="1060694897"/>
-					</object>
-					<int key="connectionID">464</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">capitalizeWord:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="56570060"/>
-					</object>
-					<int key="connectionID">467</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">lowercaseWord:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="879586729"/>
-					</object>
-					<int key="connectionID">468</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">pasteAsPlainText:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="82994268"/>
-					</object>
-					<int key="connectionID">486</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">performFindPanelAction:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="326711663"/>
-					</object>
-					<int key="connectionID">487</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">performFindPanelAction:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="270902937"/>
-					</object>
-					<int key="connectionID">488</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">performFindPanelAction:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="159080638"/>
-					</object>
-					<int key="connectionID">489</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">showHelp:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="105068016"/>
-					</object>
-					<int key="connectionID">493</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBOutletConnection" key="connection">
-						<string key="label">delegate</string>
-						<reference key="source" ref="1021"/>
-						<reference key="destination" ref="976324537"/>
-					</object>
-					<int key="connectionID">495</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">alignCenter:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="630155264"/>
-					</object>
-					<int key="connectionID">518</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">pasteRuler:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="883618387"/>
-					</object>
-					<int key="connectionID">519</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleRuler:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="644046920"/>
-					</object>
-					<int key="connectionID">520</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">alignRight:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="512868991"/>
-					</object>
-					<int key="connectionID">521</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">copyRuler:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="231811626"/>
-					</object>
-					<int key="connectionID">522</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">alignJustified:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="945678886"/>
-					</object>
-					<int key="connectionID">523</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">alignLeft:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="875092757"/>
-					</object>
-					<int key="connectionID">524</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">makeBaseWritingDirectionNatural:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="551969625"/>
-					</object>
-					<int key="connectionID">525</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">makeBaseWritingDirectionLeftToRight:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="249532473"/>
-					</object>
-					<int key="connectionID">526</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">makeBaseWritingDirectionRightToLeft:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="607364498"/>
-					</object>
-					<int key="connectionID">527</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">makeTextWritingDirectionNatural:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="380031999"/>
-					</object>
-					<int key="connectionID">528</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">makeTextWritingDirectionLeftToRight:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="825984362"/>
-					</object>
-					<int key="connectionID">529</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">makeTextWritingDirectionRightToLeft:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="560145579"/>
-					</object>
-					<int key="connectionID">530</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBOutletConnection" key="connection">
-						<string key="label">fView</string>
-						<reference key="source" ref="972006081"/>
-						<reference key="destination" ref="322594744"/>
-					</object>
-					<int key="connectionID">535</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBOutletConnection" key="connection">
-						<string key="label">window</string>
-						<reference key="source" ref="976324537"/>
-						<reference key="destination" ref="972006081"/>
-					</object>
-					<int key="connectionID">536</int>
-				</object>
-			</object>
-			<object class="IBMutableOrderedSet" key="objectRecords">
-				<object class="NSArray" key="orderedObjects">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBObjectRecord">
-						<int key="objectID">0</int>
-						<object class="NSArray" key="object" id="0">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-						</object>
-						<reference key="children" ref="1048"/>
-						<nil key="parent"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-2</int>
-						<reference key="object" ref="1021"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">File's Owner</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-1</int>
-						<reference key="object" ref="1014"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">First Responder</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-3</int>
-						<reference key="object" ref="1050"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">Application</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">29</int>
-						<reference key="object" ref="649796088"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="713487014"/>
-							<reference ref="694149608"/>
-							<reference ref="952259628"/>
-							<reference ref="379814623"/>
-							<reference ref="586577488"/>
-							<reference ref="302598603"/>
-							<reference ref="448692316"/>
-						</object>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">19</int>
-						<reference key="object" ref="713487014"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="835318025"/>
-						</object>
-						<reference key="parent" ref="649796088"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">56</int>
-						<reference key="object" ref="694149608"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="110575045"/>
-						</object>
-						<reference key="parent" ref="649796088"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">217</int>
-						<reference key="object" ref="952259628"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="789758025"/>
-						</object>
-						<reference key="parent" ref="649796088"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">83</int>
-						<reference key="object" ref="379814623"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="720053764"/>
-						</object>
-						<reference key="parent" ref="649796088"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">81</int>
-						<reference key="object" ref="720053764"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="1023925487"/>
-							<reference ref="117038363"/>
-							<reference ref="49223823"/>
-							<reference ref="722745758"/>
-							<reference ref="705341025"/>
-							<reference ref="1025936716"/>
-							<reference ref="294629803"/>
-							<reference ref="776162233"/>
-							<reference ref="425164168"/>
-							<reference ref="579971712"/>
-							<reference ref="1010469920"/>
-						</object>
-						<reference key="parent" ref="379814623"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">75</int>
-						<reference key="object" ref="1023925487"/>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">80</int>
-						<reference key="object" ref="117038363"/>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">78</int>
-						<reference key="object" ref="49223823"/>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">72</int>
-						<reference key="object" ref="722745758"/>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">82</int>
-						<reference key="object" ref="705341025"/>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">124</int>
-						<reference key="object" ref="1025936716"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="1065607017"/>
-						</object>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">77</int>
-						<reference key="object" ref="294629803"/>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">73</int>
-						<reference key="object" ref="776162233"/>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">79</int>
-						<reference key="object" ref="425164168"/>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">112</int>
-						<reference key="object" ref="579971712"/>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">74</int>
-						<reference key="object" ref="1010469920"/>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">125</int>
-						<reference key="object" ref="1065607017"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="759406840"/>
-						</object>
-						<reference key="parent" ref="1025936716"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">126</int>
-						<reference key="object" ref="759406840"/>
-						<reference key="parent" ref="1065607017"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">205</int>
-						<reference key="object" ref="789758025"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="437104165"/>
-							<reference ref="583158037"/>
-							<reference ref="1058277027"/>
-							<reference ref="212016141"/>
-							<reference ref="296257095"/>
-							<reference ref="29853731"/>
-							<reference ref="860595796"/>
-							<reference ref="1040322652"/>
-							<reference ref="790794224"/>
-							<reference ref="892235320"/>
-							<reference ref="972420730"/>
-							<reference ref="676164635"/>
-							<reference ref="507821607"/>
-							<reference ref="288088188"/>
-							<reference ref="82994268"/>
-						</object>
-						<reference key="parent" ref="952259628"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">202</int>
-						<reference key="object" ref="437104165"/>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">198</int>
-						<reference key="object" ref="583158037"/>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">207</int>
-						<reference key="object" ref="1058277027"/>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">214</int>
-						<reference key="object" ref="212016141"/>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">199</int>
-						<reference key="object" ref="296257095"/>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">203</int>
-						<reference key="object" ref="29853731"/>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">197</int>
-						<reference key="object" ref="860595796"/>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">206</int>
-						<reference key="object" ref="1040322652"/>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">215</int>
-						<reference key="object" ref="790794224"/>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">218</int>
-						<reference key="object" ref="892235320"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="963351320"/>
-						</object>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">216</int>
-						<reference key="object" ref="972420730"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="769623530"/>
-						</object>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">200</int>
-						<reference key="object" ref="769623530"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="948374510"/>
-							<reference ref="96193923"/>
-							<reference ref="679648819"/>
-							<reference ref="967646866"/>
-							<reference ref="859480356"/>
-							<reference ref="795346622"/>
-						</object>
-						<reference key="parent" ref="972420730"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">219</int>
-						<reference key="object" ref="948374510"/>
-						<reference key="parent" ref="769623530"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">201</int>
-						<reference key="object" ref="96193923"/>
-						<reference key="parent" ref="769623530"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">204</int>
-						<reference key="object" ref="679648819"/>
-						<reference key="parent" ref="769623530"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">220</int>
-						<reference key="object" ref="963351320"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="270902937"/>
-							<reference ref="88285865"/>
-							<reference ref="159080638"/>
-							<reference ref="326711663"/>
-							<reference ref="447796847"/>
-						</object>
-						<reference key="parent" ref="892235320"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">213</int>
-						<reference key="object" ref="270902937"/>
-						<reference key="parent" ref="963351320"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">210</int>
-						<reference key="object" ref="88285865"/>
-						<reference key="parent" ref="963351320"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">221</int>
-						<reference key="object" ref="159080638"/>
-						<reference key="parent" ref="963351320"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">208</int>
-						<reference key="object" ref="326711663"/>
-						<reference key="parent" ref="963351320"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">209</int>
-						<reference key="object" ref="447796847"/>
-						<reference key="parent" ref="963351320"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">57</int>
-						<reference key="object" ref="110575045"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="238522557"/>
-							<reference ref="755159360"/>
-							<reference ref="908899353"/>
-							<reference ref="632727374"/>
-							<reference ref="646227648"/>
-							<reference ref="609285721"/>
-							<reference ref="481834944"/>
-							<reference ref="304266470"/>
-							<reference ref="1046388886"/>
-							<reference ref="1056857174"/>
-							<reference ref="342932134"/>
-						</object>
-						<reference key="parent" ref="694149608"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">58</int>
-						<reference key="object" ref="238522557"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">134</int>
-						<reference key="object" ref="755159360"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">150</int>
-						<reference key="object" ref="908899353"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">136</int>
-						<reference key="object" ref="632727374"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">144</int>
-						<reference key="object" ref="646227648"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">129</int>
-						<reference key="object" ref="609285721"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">143</int>
-						<reference key="object" ref="481834944"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">236</int>
-						<reference key="object" ref="304266470"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">131</int>
-						<reference key="object" ref="1046388886"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="752062318"/>
-						</object>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">149</int>
-						<reference key="object" ref="1056857174"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">145</int>
-						<reference key="object" ref="342932134"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">130</int>
-						<reference key="object" ref="752062318"/>
-						<reference key="parent" ref="1046388886"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">24</int>
-						<reference key="object" ref="835318025"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="299356726"/>
-							<reference ref="625202149"/>
-							<reference ref="575023229"/>
-							<reference ref="1011231497"/>
-						</object>
-						<reference key="parent" ref="713487014"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">92</int>
-						<reference key="object" ref="299356726"/>
-						<reference key="parent" ref="835318025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">5</int>
-						<reference key="object" ref="625202149"/>
-						<reference key="parent" ref="835318025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">239</int>
-						<reference key="object" ref="575023229"/>
-						<reference key="parent" ref="835318025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">23</int>
-						<reference key="object" ref="1011231497"/>
-						<reference key="parent" ref="835318025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">295</int>
-						<reference key="object" ref="586577488"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="466310130"/>
-						</object>
-						<reference key="parent" ref="649796088"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">296</int>
-						<reference key="object" ref="466310130"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="102151532"/>
-							<reference ref="237841660"/>
-						</object>
-						<reference key="parent" ref="586577488"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">297</int>
-						<reference key="object" ref="102151532"/>
-						<reference key="parent" ref="466310130"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">298</int>
-						<reference key="object" ref="237841660"/>
-						<reference key="parent" ref="466310130"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">211</int>
-						<reference key="object" ref="676164635"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="785027613"/>
-						</object>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">212</int>
-						<reference key="object" ref="785027613"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="680220178"/>
-							<reference ref="731782645"/>
-						</object>
-						<reference key="parent" ref="676164635"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">195</int>
-						<reference key="object" ref="680220178"/>
-						<reference key="parent" ref="785027613"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">196</int>
-						<reference key="object" ref="731782645"/>
-						<reference key="parent" ref="785027613"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">346</int>
-						<reference key="object" ref="967646866"/>
-						<reference key="parent" ref="769623530"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">348</int>
-						<reference key="object" ref="507821607"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="698887838"/>
-						</object>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">349</int>
-						<reference key="object" ref="698887838"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="605118523"/>
-							<reference ref="197661976"/>
-							<reference ref="708854459"/>
-							<reference ref="65139061"/>
-							<reference ref="19036812"/>
-							<reference ref="672708820"/>
-							<reference ref="537092702"/>
-						</object>
-						<reference key="parent" ref="507821607"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">350</int>
-						<reference key="object" ref="605118523"/>
-						<reference key="parent" ref="698887838"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">351</int>
-						<reference key="object" ref="197661976"/>
-						<reference key="parent" ref="698887838"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">354</int>
-						<reference key="object" ref="708854459"/>
-						<reference key="parent" ref="698887838"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">371</int>
-						<reference key="object" ref="972006081"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="439893737"/>
-						</object>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">372</int>
-						<reference key="object" ref="439893737"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="322594744"/>
-						</object>
-						<reference key="parent" ref="972006081"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">375</int>
-						<reference key="object" ref="302598603"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="941447902"/>
-						</object>
-						<reference key="parent" ref="649796088"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">376</int>
-						<reference key="object" ref="941447902"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="792887677"/>
-							<reference ref="215659978"/>
-						</object>
-						<reference key="parent" ref="302598603"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">377</int>
-						<reference key="object" ref="792887677"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="786677654"/>
-						</object>
-						<reference key="parent" ref="941447902"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">388</int>
-						<reference key="object" ref="786677654"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="159677712"/>
-							<reference ref="305399458"/>
-							<reference ref="814362025"/>
-							<reference ref="330926929"/>
-							<reference ref="533507878"/>
-							<reference ref="158063935"/>
-							<reference ref="885547335"/>
-							<reference ref="901062459"/>
-							<reference ref="767671776"/>
-							<reference ref="691570813"/>
-							<reference ref="769124883"/>
-							<reference ref="739652853"/>
-							<reference ref="1012600125"/>
-							<reference ref="214559597"/>
-							<reference ref="596732606"/>
-							<reference ref="393423671"/>
-						</object>
-						<reference key="parent" ref="792887677"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">389</int>
-						<reference key="object" ref="159677712"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">390</int>
-						<reference key="object" ref="305399458"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">391</int>
-						<reference key="object" ref="814362025"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">392</int>
-						<reference key="object" ref="330926929"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">393</int>
-						<reference key="object" ref="533507878"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">394</int>
-						<reference key="object" ref="158063935"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">395</int>
-						<reference key="object" ref="885547335"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">396</int>
-						<reference key="object" ref="901062459"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">397</int>
-						<reference key="object" ref="767671776"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="175441468"/>
-						</object>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">398</int>
-						<reference key="object" ref="691570813"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="1058217995"/>
-						</object>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">399</int>
-						<reference key="object" ref="769124883"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="18263474"/>
-						</object>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">400</int>
-						<reference key="object" ref="739652853"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">401</int>
-						<reference key="object" ref="1012600125"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">402</int>
-						<reference key="object" ref="214559597"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">403</int>
-						<reference key="object" ref="596732606"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">404</int>
-						<reference key="object" ref="393423671"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">405</int>
-						<reference key="object" ref="18263474"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="257962622"/>
-							<reference ref="644725453"/>
-							<reference ref="1037576581"/>
-							<reference ref="941806246"/>
-							<reference ref="1045724900"/>
-						</object>
-						<reference key="parent" ref="769124883"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">406</int>
-						<reference key="object" ref="257962622"/>
-						<reference key="parent" ref="18263474"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">407</int>
-						<reference key="object" ref="644725453"/>
-						<reference key="parent" ref="18263474"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">408</int>
-						<reference key="object" ref="1037576581"/>
-						<reference key="parent" ref="18263474"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">409</int>
-						<reference key="object" ref="941806246"/>
-						<reference key="parent" ref="18263474"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">410</int>
-						<reference key="object" ref="1045724900"/>
-						<reference key="parent" ref="18263474"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">411</int>
-						<reference key="object" ref="1058217995"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="706297211"/>
-							<reference ref="568384683"/>
-							<reference ref="663508465"/>
-						</object>
-						<reference key="parent" ref="691570813"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">412</int>
-						<reference key="object" ref="706297211"/>
-						<reference key="parent" ref="1058217995"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">413</int>
-						<reference key="object" ref="568384683"/>
-						<reference key="parent" ref="1058217995"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">414</int>
-						<reference key="object" ref="663508465"/>
-						<reference key="parent" ref="1058217995"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">415</int>
-						<reference key="object" ref="175441468"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="252969304"/>
-							<reference ref="766922938"/>
-							<reference ref="677519740"/>
-							<reference ref="238351151"/>
-						</object>
-						<reference key="parent" ref="767671776"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">416</int>
-						<reference key="object" ref="252969304"/>
-						<reference key="parent" ref="175441468"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">417</int>
-						<reference key="object" ref="766922938"/>
-						<reference key="parent" ref="175441468"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">418</int>
-						<reference key="object" ref="677519740"/>
-						<reference key="parent" ref="175441468"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">419</int>
-						<reference key="object" ref="238351151"/>
-						<reference key="parent" ref="175441468"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">420</int>
-						<reference key="object" ref="755631768"/>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">450</int>
-						<reference key="object" ref="288088188"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="579392910"/>
-						</object>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">451</int>
-						<reference key="object" ref="579392910"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="1060694897"/>
-							<reference ref="879586729"/>
-							<reference ref="56570060"/>
-						</object>
-						<reference key="parent" ref="288088188"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">452</int>
-						<reference key="object" ref="1060694897"/>
-						<reference key="parent" ref="579392910"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">453</int>
-						<reference key="object" ref="859480356"/>
-						<reference key="parent" ref="769623530"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">454</int>
-						<reference key="object" ref="795346622"/>
-						<reference key="parent" ref="769623530"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">457</int>
-						<reference key="object" ref="65139061"/>
-						<reference key="parent" ref="698887838"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">459</int>
-						<reference key="object" ref="19036812"/>
-						<reference key="parent" ref="698887838"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">460</int>
-						<reference key="object" ref="672708820"/>
-						<reference key="parent" ref="698887838"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">462</int>
-						<reference key="object" ref="537092702"/>
-						<reference key="parent" ref="698887838"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">465</int>
-						<reference key="object" ref="879586729"/>
-						<reference key="parent" ref="579392910"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">466</int>
-						<reference key="object" ref="56570060"/>
-						<reference key="parent" ref="579392910"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">485</int>
-						<reference key="object" ref="82994268"/>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">490</int>
-						<reference key="object" ref="448692316"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="992780483"/>
-						</object>
-						<reference key="parent" ref="649796088"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">491</int>
-						<reference key="object" ref="992780483"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="105068016"/>
-						</object>
-						<reference key="parent" ref="448692316"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">492</int>
-						<reference key="object" ref="105068016"/>
-						<reference key="parent" ref="992780483"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">494</int>
-						<reference key="object" ref="976324537"/>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">496</int>
-						<reference key="object" ref="215659978"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="446991534"/>
-						</object>
-						<reference key="parent" ref="941447902"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">497</int>
-						<reference key="object" ref="446991534"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="875092757"/>
-							<reference ref="630155264"/>
-							<reference ref="945678886"/>
-							<reference ref="512868991"/>
-							<reference ref="163117631"/>
-							<reference ref="31516759"/>
-							<reference ref="908105787"/>
-							<reference ref="644046920"/>
-							<reference ref="231811626"/>
-							<reference ref="883618387"/>
-						</object>
-						<reference key="parent" ref="215659978"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">498</int>
-						<reference key="object" ref="875092757"/>
-						<reference key="parent" ref="446991534"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">499</int>
-						<reference key="object" ref="630155264"/>
-						<reference key="parent" ref="446991534"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">500</int>
-						<reference key="object" ref="945678886"/>
-						<reference key="parent" ref="446991534"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">501</int>
-						<reference key="object" ref="512868991"/>
-						<reference key="parent" ref="446991534"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">502</int>
-						<reference key="object" ref="163117631"/>
-						<reference key="parent" ref="446991534"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">503</int>
-						<reference key="object" ref="31516759"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="956096989"/>
-						</object>
-						<reference key="parent" ref="446991534"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">504</int>
-						<reference key="object" ref="908105787"/>
-						<reference key="parent" ref="446991534"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">505</int>
-						<reference key="object" ref="644046920"/>
-						<reference key="parent" ref="446991534"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">506</int>
-						<reference key="object" ref="231811626"/>
-						<reference key="parent" ref="446991534"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">507</int>
-						<reference key="object" ref="883618387"/>
-						<reference key="parent" ref="446991534"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">508</int>
-						<reference key="object" ref="956096989"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="257099033"/>
-							<reference ref="551969625"/>
-							<reference ref="249532473"/>
-							<reference ref="607364498"/>
-							<reference ref="508151438"/>
-							<reference ref="981751889"/>
-							<reference ref="380031999"/>
-							<reference ref="825984362"/>
-							<reference ref="560145579"/>
-						</object>
-						<reference key="parent" ref="31516759"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">509</int>
-						<reference key="object" ref="257099033"/>
-						<reference key="parent" ref="956096989"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">510</int>
-						<reference key="object" ref="551969625"/>
-						<reference key="parent" ref="956096989"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">511</int>
-						<reference key="object" ref="249532473"/>
-						<reference key="parent" ref="956096989"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">512</int>
-						<reference key="object" ref="607364498"/>
-						<reference key="parent" ref="956096989"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">513</int>
-						<reference key="object" ref="508151438"/>
-						<reference key="parent" ref="956096989"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">514</int>
-						<reference key="object" ref="981751889"/>
-						<reference key="parent" ref="956096989"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">515</int>
-						<reference key="object" ref="380031999"/>
-						<reference key="parent" ref="956096989"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">516</int>
-						<reference key="object" ref="825984362"/>
-						<reference key="parent" ref="956096989"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">517</int>
-						<reference key="object" ref="560145579"/>
-						<reference key="parent" ref="956096989"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">533</int>
-						<reference key="object" ref="322594744"/>
-						<reference key="parent" ref="439893737"/>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="flattenedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>-3.IBPluginDependency</string>
-					<string>112.IBPluginDependency</string>
-					<string>112.ImportedFromIB2</string>
-					<string>124.IBPluginDependency</string>
-					<string>124.ImportedFromIB2</string>
-					<string>125.IBPluginDependency</string>
-					<string>125.ImportedFromIB2</string>
-					<string>125.editorWindowContentRectSynchronizationRect</string>
-					<string>126.IBPluginDependency</string>
-					<string>126.ImportedFromIB2</string>
-					<string>129.IBPluginDependency</string>
-					<string>129.ImportedFromIB2</string>
-					<string>130.IBPluginDependency</string>
-					<string>130.ImportedFromIB2</string>
-					<string>130.editorWindowContentRectSynchronizationRect</string>
-					<string>131.IBPluginDependency</string>
-					<string>131.ImportedFromIB2</string>
-					<string>134.IBPluginDependency</string>
-					<string>134.ImportedFromIB2</string>
-					<string>136.IBPluginDependency</string>
-					<string>136.ImportedFromIB2</string>
-					<string>143.IBPluginDependency</string>
-					<string>143.ImportedFromIB2</string>
-					<string>144.IBPluginDependency</string>
-					<string>144.ImportedFromIB2</string>
-					<string>145.IBPluginDependency</string>
-					<string>145.ImportedFromIB2</string>
-					<string>149.IBPluginDependency</string>
-					<string>149.ImportedFromIB2</string>
-					<string>150.IBPluginDependency</string>
-					<string>150.ImportedFromIB2</string>
-					<string>19.IBPluginDependency</string>
-					<string>19.ImportedFromIB2</string>
-					<string>195.IBPluginDependency</string>
-					<string>195.ImportedFromIB2</string>
-					<string>196.IBPluginDependency</string>
-					<string>196.ImportedFromIB2</string>
-					<string>197.IBPluginDependency</string>
-					<string>197.ImportedFromIB2</string>
-					<string>198.IBPluginDependency</string>
-					<string>198.ImportedFromIB2</string>
-					<string>199.IBPluginDependency</string>
-					<string>199.ImportedFromIB2</string>
-					<string>200.IBEditorWindowLastContentRect</string>
-					<string>200.IBPluginDependency</string>
-					<string>200.ImportedFromIB2</string>
-					<string>200.editorWindowContentRectSynchronizationRect</string>
-					<string>201.IBPluginDependency</string>
-					<string>201.ImportedFromIB2</string>
-					<string>202.IBPluginDependency</string>
-					<string>202.ImportedFromIB2</string>
-					<string>203.IBPluginDependency</string>
-					<string>203.ImportedFromIB2</string>
-					<string>204.IBPluginDependency</string>
-					<string>204.ImportedFromIB2</string>
-					<string>205.IBEditorWindowLastContentRect</string>
-					<string>205.IBPluginDependency</string>
-					<string>205.ImportedFromIB2</string>
-					<string>205.editorWindowContentRectSynchronizationRect</string>
-					<string>206.IBPluginDependency</string>
-					<string>206.ImportedFromIB2</string>
-					<string>207.IBPluginDependency</string>
-					<string>207.ImportedFromIB2</string>
-					<string>208.IBPluginDependency</string>
-					<string>208.ImportedFromIB2</string>
-					<string>209.IBPluginDependency</string>
-					<string>209.ImportedFromIB2</string>
-					<string>210.IBPluginDependency</string>
-					<string>210.ImportedFromIB2</string>
-					<string>211.IBPluginDependency</string>
-					<string>211.ImportedFromIB2</string>
-					<string>212.IBPluginDependency</string>
-					<string>212.ImportedFromIB2</string>
-					<string>212.editorWindowContentRectSynchronizationRect</string>
-					<string>213.IBPluginDependency</string>
-					<string>213.ImportedFromIB2</string>
-					<string>214.IBPluginDependency</string>
-					<string>214.ImportedFromIB2</string>
-					<string>215.IBPluginDependency</string>
-					<string>215.ImportedFromIB2</string>
-					<string>216.IBPluginDependency</string>
-					<string>216.ImportedFromIB2</string>
-					<string>217.IBPluginDependency</string>
-					<string>217.ImportedFromIB2</string>
-					<string>218.IBPluginDependency</string>
-					<string>218.ImportedFromIB2</string>
-					<string>219.IBPluginDependency</string>
-					<string>219.ImportedFromIB2</string>
-					<string>220.IBEditorWindowLastContentRect</string>
-					<string>220.IBPluginDependency</string>
-					<string>220.ImportedFromIB2</string>
-					<string>220.editorWindowContentRectSynchronizationRect</string>
-					<string>221.IBPluginDependency</string>
-					<string>221.ImportedFromIB2</string>
-					<string>23.IBPluginDependency</string>
-					<string>23.ImportedFromIB2</string>
-					<string>236.IBPluginDependency</string>
-					<string>236.ImportedFromIB2</string>
-					<string>239.IBPluginDependency</string>
-					<string>239.ImportedFromIB2</string>
-					<string>24.IBEditorWindowLastContentRect</string>
-					<string>24.IBPluginDependency</string>
-					<string>24.ImportedFromIB2</string>
-					<string>24.editorWindowContentRectSynchronizationRect</string>
-					<string>29.IBEditorWindowLastContentRect</string>
-					<string>29.IBPluginDependency</string>
-					<string>29.ImportedFromIB2</string>
-					<string>29.WindowOrigin</string>
-					<string>29.editorWindowContentRectSynchronizationRect</string>
-					<string>295.IBPluginDependency</string>
-					<string>296.IBEditorWindowLastContentRect</string>
-					<string>296.IBPluginDependency</string>
-					<string>296.editorWindowContentRectSynchronizationRect</string>
-					<string>297.IBPluginDependency</string>
-					<string>298.IBPluginDependency</string>
-					<string>346.IBPluginDependency</string>
-					<string>346.ImportedFromIB2</string>
-					<string>348.IBPluginDependency</string>
-					<string>348.ImportedFromIB2</string>
-					<string>349.IBEditorWindowLastContentRect</string>
-					<string>349.IBPluginDependency</string>
-					<string>349.ImportedFromIB2</string>
-					<string>349.editorWindowContentRectSynchronizationRect</string>
-					<string>350.IBPluginDependency</string>
-					<string>350.ImportedFromIB2</string>
-					<string>351.IBPluginDependency</string>
-					<string>351.ImportedFromIB2</string>
-					<string>354.IBPluginDependency</string>
-					<string>354.ImportedFromIB2</string>
-					<string>371.IBEditorWindowLastContentRect</string>
-					<string>371.IBPluginDependency</string>
-					<string>371.IBWindowTemplateEditedContentRect</string>
-					<string>371.NSWindowTemplate.visibleAtLaunch</string>
-					<string>371.editorWindowContentRectSynchronizationRect</string>
-					<string>371.windowTemplate.maxSize</string>
-					<string>371.windowTemplate.minSize</string>
-					<string>372.IBPluginDependency</string>
-					<string>375.IBPluginDependency</string>
-					<string>376.IBEditorWindowLastContentRect</string>
-					<string>376.IBPluginDependency</string>
-					<string>377.IBPluginDependency</string>
-					<string>388.IBEditorWindowLastContentRect</string>
-					<string>388.IBPluginDependency</string>
-					<string>389.IBPluginDependency</string>
-					<string>390.IBPluginDependency</string>
-					<string>391.IBPluginDependency</string>
-					<string>392.IBPluginDependency</string>
-					<string>393.IBPluginDependency</string>
-					<string>394.IBPluginDependency</string>
-					<string>395.IBPluginDependency</string>
-					<string>396.IBPluginDependency</string>
-					<string>397.IBPluginDependency</string>
-					<string>398.IBPluginDependency</string>
-					<string>399.IBPluginDependency</string>
-					<string>400.IBPluginDependency</string>
-					<string>401.IBPluginDependency</string>
-					<string>402.IBPluginDependency</string>
-					<string>403.IBPluginDependency</string>
-					<string>404.IBPluginDependency</string>
-					<string>405.IBPluginDependency</string>
-					<string>406.IBPluginDependency</string>
-					<string>407.IBPluginDependency</string>
-					<string>408.IBPluginDependency</string>
-					<string>409.IBPluginDependency</string>
-					<string>410.IBPluginDependency</string>
-					<string>411.IBPluginDependency</string>
-					<string>412.IBPluginDependency</string>
-					<string>413.IBPluginDependency</string>
-					<string>414.IBPluginDependency</string>
-					<string>415.IBPluginDependency</string>
-					<string>416.IBPluginDependency</string>
-					<string>417.IBPluginDependency</string>
-					<string>418.IBPluginDependency</string>
-					<string>419.IBPluginDependency</string>
-					<string>450.IBPluginDependency</string>
-					<string>451.IBEditorWindowLastContentRect</string>
-					<string>451.IBPluginDependency</string>
-					<string>452.IBPluginDependency</string>
-					<string>453.IBPluginDependency</string>
-					<string>454.IBPluginDependency</string>
-					<string>457.IBPluginDependency</string>
-					<string>459.IBPluginDependency</string>
-					<string>460.IBPluginDependency</string>
-					<string>462.IBPluginDependency</string>
-					<string>465.IBPluginDependency</string>
-					<string>466.IBPluginDependency</string>
-					<string>485.IBPluginDependency</string>
-					<string>490.IBPluginDependency</string>
-					<string>491.IBEditorWindowLastContentRect</string>
-					<string>491.IBPluginDependency</string>
-					<string>492.IBPluginDependency</string>
-					<string>496.IBPluginDependency</string>
-					<string>497.IBEditorWindowLastContentRect</string>
-					<string>497.IBPluginDependency</string>
-					<string>498.IBPluginDependency</string>
-					<string>499.IBPluginDependency</string>
-					<string>5.IBPluginDependency</string>
-					<string>5.ImportedFromIB2</string>
-					<string>500.IBPluginDependency</string>
-					<string>501.IBPluginDependency</string>
-					<string>502.IBPluginDependency</string>
-					<string>503.IBPluginDependency</string>
-					<string>504.IBPluginDependency</string>
-					<string>505.IBPluginDependency</string>
-					<string>506.IBPluginDependency</string>
-					<string>507.IBPluginDependency</string>
-					<string>508.IBEditorWindowLastContentRect</string>
-					<string>508.IBPluginDependency</string>
-					<string>509.IBPluginDependency</string>
-					<string>510.IBPluginDependency</string>
-					<string>511.IBPluginDependency</string>
-					<string>512.IBPluginDependency</string>
-					<string>513.IBPluginDependency</string>
-					<string>514.IBPluginDependency</string>
-					<string>515.IBPluginDependency</string>
-					<string>516.IBPluginDependency</string>
-					<string>517.IBPluginDependency</string>
-					<string>533.IBPluginDependency</string>
-					<string>533.IBViewBoundsToFrameTransform</string>
-					<string>56.IBPluginDependency</string>
-					<string>56.ImportedFromIB2</string>
-					<string>57.IBEditorWindowLastContentRect</string>
-					<string>57.IBPluginDependency</string>
-					<string>57.ImportedFromIB2</string>
-					<string>57.editorWindowContentRectSynchronizationRect</string>
-					<string>58.IBPluginDependency</string>
-					<string>58.ImportedFromIB2</string>
-					<string>72.IBPluginDependency</string>
-					<string>72.ImportedFromIB2</string>
-					<string>73.IBPluginDependency</string>
-					<string>73.ImportedFromIB2</string>
-					<string>74.IBPluginDependency</string>
-					<string>74.ImportedFromIB2</string>
-					<string>75.IBPluginDependency</string>
-					<string>75.ImportedFromIB2</string>
-					<string>77.IBPluginDependency</string>
-					<string>77.ImportedFromIB2</string>
-					<string>78.IBPluginDependency</string>
-					<string>78.ImportedFromIB2</string>
-					<string>79.IBPluginDependency</string>
-					<string>79.ImportedFromIB2</string>
-					<string>80.IBPluginDependency</string>
-					<string>80.ImportedFromIB2</string>
-					<string>81.IBEditorWindowLastContentRect</string>
-					<string>81.IBPluginDependency</string>
-					<string>81.ImportedFromIB2</string>
-					<string>81.editorWindowContentRectSynchronizationRect</string>
-					<string>82.IBPluginDependency</string>
-					<string>82.ImportedFromIB2</string>
-					<string>83.IBPluginDependency</string>
-					<string>83.ImportedFromIB2</string>
-					<string>92.IBPluginDependency</string>
-					<string>92.ImportedFromIB2</string>
-				</object>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{522, 812}, {146, 23}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{436, 809}, {64, 6}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{753, 187}, {275, 113}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{608, 612}, {275, 83}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{547, 180}, {254, 283}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{187, 434}, {243, 243}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{608, 612}, {167, 43}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{753, 217}, {238, 103}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{608, 612}, {241, 103}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{654, 239}, {194, 73}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{525, 802}, {197, 73}}</string>
-					<string>{{380, 836}, {489, 20}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{74, 862}</string>
-					<string>{{6, 978}, {478, 20}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{604, 269}, {231, 43}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{475, 832}, {234, 43}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{746, 287}, {220, 133}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{608, 612}, {215, 63}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{358, 214}, {480, 360}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{358, 214}, {480, 360}}</string>
-					<integer value="1"/>
-					<string>{{33, 99}, {480, 360}}</string>
-					<string>{3.40282e+38, 3.40282e+38}</string>
-					<string>{0, 0}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{591, 420}, {83, 43}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{523, 2}, {178, 283}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{753, 197}, {170, 63}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{725, 289}, {246, 23}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{674, 260}, {204, 183}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{878, 180}, {164, 173}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">AULIAABDAgAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{286, 129}, {275, 183}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{23, 794}, {245, 183}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{452, 109}, {196, 203}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{145, 474}, {199, 203}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="unlocalizedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="activeLocalization"/>
-			<object class="NSMutableDictionary" key="localizations">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="sourceID"/>
-			<int key="maxID">536</int>
-		</object>
-		<object class="IBClassDescriber" key="IBDocument.Classes">
-			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">FileReaderAppDelegate</string>
-					<string key="superclassName">NSObject</string>
-					<object class="NSMutableDictionary" key="outlets">
-						<string key="NS.key.0">window</string>
-						<string key="NS.object.0">SkNSWindow</string>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<string key="NS.key.0">window</string>
-						<object class="IBToOneOutletInfo" key="NS.object.0">
-							<string key="name">window</string>
-							<string key="candidateClassName">SkNSWindow</string>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">FileReaderAppDelegate.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">FileReaderWindow</string>
-					<string key="superclassName">SkNSWindow</string>
-					<object class="NSMutableDictionary" key="outlets">
-						<string key="NS.key.0">fView</string>
-						<string key="NS.object.0">SkNSView</string>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<string key="NS.key.0">fView</string>
-						<object class="IBToOneOutletInfo" key="NS.object.0">
-							<string key="name">fView</string>
-							<string key="candidateClassName">SkNSView</string>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">FileReaderWindow.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">SkNSView</string>
-					<string key="superclassName">NSView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">SkNSView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">SkNSWindow</string>
-					<string key="superclassName">NSWindow</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">SkNSWindow.h</string>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSApplication</string>
-					<string key="superclassName">NSResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="822405504">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSApplication.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSApplication</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="850738725">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSApplication</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="624831158">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSApplication</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSApplication</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSApplication</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSBrowser</string>
-					<string key="superclassName">NSControl</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSBrowser.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSControl</string>
-					<string key="superclassName">NSView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="310914472">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSControl.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSDocument</string>
-					<string key="superclassName">NSObject</string>
-					<object class="NSMutableDictionary" key="actions">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>printDocument:</string>
-							<string>revertDocumentToSaved:</string>
-							<string>runPageLayout:</string>
-							<string>saveDocument:</string>
-							<string>saveDocumentAs:</string>
-							<string>saveDocumentTo:</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>id</string>
-							<string>id</string>
-							<string>id</string>
-							<string>id</string>
-							<string>id</string>
-							<string>id</string>
-						</object>
-					</object>
-					<object class="NSMutableDictionary" key="actionInfosByName">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>printDocument:</string>
-							<string>revertDocumentToSaved:</string>
-							<string>runPageLayout:</string>
-							<string>saveDocument:</string>
-							<string>saveDocumentAs:</string>
-							<string>saveDocumentTo:</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBActionInfo">
-								<string key="name">printDocument:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-							<object class="IBActionInfo">
-								<string key="name">revertDocumentToSaved:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-							<object class="IBActionInfo">
-								<string key="name">runPageLayout:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-							<object class="IBActionInfo">
-								<string key="name">saveDocument:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-							<object class="IBActionInfo">
-								<string key="name">saveDocumentAs:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-							<object class="IBActionInfo">
-								<string key="name">saveDocumentTo:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSDocument.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSDocument</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSDocumentScripting.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSDocumentController</string>
-					<string key="superclassName">NSObject</string>
-					<object class="NSMutableDictionary" key="actions">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>clearRecentDocuments:</string>
-							<string>newDocument:</string>
-							<string>openDocument:</string>
-							<string>saveAllDocuments:</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>id</string>
-							<string>id</string>
-							<string>id</string>
-							<string>id</string>
-						</object>
-					</object>
-					<object class="NSMutableDictionary" key="actionInfosByName">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>clearRecentDocuments:</string>
-							<string>newDocument:</string>
-							<string>openDocument:</string>
-							<string>saveAllDocuments:</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBActionInfo">
-								<string key="name">clearRecentDocuments:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-							<object class="IBActionInfo">
-								<string key="name">newDocument:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-							<object class="IBActionInfo">
-								<string key="name">openDocument:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-							<object class="IBActionInfo">
-								<string key="name">saveAllDocuments:</string>
-								<string key="candidateClassName">id</string>
-							</object>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSDocumentController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSFontManager</string>
-					<string key="superclassName">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="946436764">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSFontManager.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSFormatter</string>
-					<string key="superclassName">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSMatrix</string>
-					<string key="superclassName">NSControl</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSMatrix.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSMenu</string>
-					<string key="superclassName">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="1056362899">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSMenu.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSMenuItem</string>
-					<string key="superclassName">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="472958451">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSMenuItem.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSMovieView</string>
-					<string key="superclassName">NSView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSMovieView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<reference key="sourceIdentifier" ref="822405504"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<reference key="sourceIdentifier" ref="850738725"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<reference key="sourceIdentifier" ref="624831158"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<reference key="sourceIdentifier" ref="310914472"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSDragging.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<reference key="sourceIdentifier" ref="946436764"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSFontPanel.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSKeyValueBinding.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<reference key="sourceIdentifier" ref="1056362899"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSNibLoading.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSOutlineView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSPasteboard.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSSavePanel.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="809545482">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSTableView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSToolbarItem.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="260078765">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSInterfaceStyle.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSResponder</string>
-					<string key="superclassName">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSResponder.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSTableView</string>
-					<string key="superclassName">NSControl</string>
-					<reference key="sourceIdentifier" ref="809545482"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSText</string>
-					<string key="superclassName">NSView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSText.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSTextView</string>
-					<string key="superclassName">NSText</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSTextView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSClipView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSView</string>
-					<reference key="sourceIdentifier" ref="472958451"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSRulerView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSView</string>
-					<string key="superclassName">NSResponder</string>
-					<reference key="sourceIdentifier" ref="260078765"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSWindow</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSDrawer.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSWindow</string>
-					<string key="superclassName">NSResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSWindow.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSWindow</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">AppKit.framework/Headers/NSWindowScripting.h</string>
-					</object>
-				</object>
-			</object>
-		</object>
-		<int key="IBDocument.localizationMode">0</int>
-		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
-			<integer value="1060" key="NS.object.0"/>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
-			<integer value="3000" key="NS.object.0"/>
-		</object>
-		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
-		<string key="IBDocument.LastKnownRelativeProjectPath">../FileReaderApp.xcodeproj</string>
-		<int key="IBDocument.defaultPropertyAccessControl">3</int>
-		<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<string>NSMenuCheckmark</string>
-				<string>NSMenuMixedState</string>
-			</object>
-			<object class="NSMutableArray" key="dict.values">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<string>{9, 8}</string>
-				<string>{7, 2}</string>
-			</object>
-		</object>
-	</data>
-</archive>
diff --git a/src/third_party/skia/experimental/FileReaderApp/FileReaderApp-Info.plist b/src/third_party/skia/experimental/FileReaderApp/FileReaderApp-Info.plist
deleted file mode 100644
index f696cb2..0000000
--- a/src/third_party/skia/experimental/FileReaderApp/FileReaderApp-Info.plist
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIconFile</key>
-	<string></string>
-	<key>CFBundleIdentifier</key>
-	<string>com.yourcompany.${PRODUCT_NAME:rfc1034identifier}</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleShortVersionString</key>
-	<string>1.0</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1</string>
-	<key>LSMinimumSystemVersion</key>
-	<string>${MACOSX_DEPLOYMENT_TARGET}</string>
-	<key>NSMainNibFile</key>
-	<string>MainMenu</string>
-	<key>NSPrincipalClass</key>
-	<string>NSApplication</string>
-</dict>
-</plist>
diff --git a/src/third_party/skia/experimental/FileReaderApp/FileReaderAppDelegate.h b/src/third_party/skia/experimental/FileReaderApp/FileReaderAppDelegate.h
deleted file mode 100644
index 113f62e..0000000
--- a/src/third_party/skia/experimental/FileReaderApp/FileReaderAppDelegate.h
+++ /dev/null
@@ -1,15 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#import <Cocoa/Cocoa.h>
-#import "SkNSWindow.h"
-@interface FileReaderAppDelegate : NSObject <NSApplicationDelegate> {
-    SkNSWindow *window;
-}
-
-@property (assign) IBOutlet SkNSWindow *window;
-@end
diff --git a/src/third_party/skia/experimental/FileReaderApp/FileReaderAppDelegate.mm b/src/third_party/skia/experimental/FileReaderApp/FileReaderAppDelegate.mm
deleted file mode 100644
index 6b706b6..0000000
--- a/src/third_party/skia/experimental/FileReaderApp/FileReaderAppDelegate.mm
+++ /dev/null
@@ -1,10 +0,0 @@
-#import "FileReaderAppDelegate.h"
-
-@implementation FileReaderAppDelegate
-@synthesize window;
-
--(void) applicationDidFinishLaunching:(NSNotification *)aNotification {
-    //Load specified skia views after launching
-    [window installSkViews];
-}
-@end
diff --git a/src/third_party/skia/experimental/FileReaderApp/FileReaderApp_Prefix.pch b/src/third_party/skia/experimental/FileReaderApp/FileReaderApp_Prefix.pch
deleted file mode 100644
index 8d43cae..0000000
--- a/src/third_party/skia/experimental/FileReaderApp/FileReaderApp_Prefix.pch
+++ /dev/null
@@ -1,7 +0,0 @@
-//
-// Prefix header for all source files of the 'CocoaSampleApp' target in the 'CocoaSampleApp' project
-//
-
-#ifdef __OBJC__
-    #import <Cocoa/Cocoa.h>
-#endif
diff --git a/src/third_party/skia/experimental/FileReaderApp/FileReaderWindow.h b/src/third_party/skia/experimental/FileReaderApp/FileReaderWindow.h
deleted file mode 100644
index e18a31c..0000000
--- a/src/third_party/skia/experimental/FileReaderApp/FileReaderWindow.h
+++ /dev/null
@@ -1,14 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#import "SkNSWindow.h"
-#import "ReaderView.h"
-@interface FileReaderWindow : SkNSWindow {
-    IBOutlet SkNSView* fView;
-    ReaderView* fReaderView;
-}
-@end
diff --git a/src/third_party/skia/experimental/FileReaderApp/FileReaderWindow.mm b/src/third_party/skia/experimental/FileReaderApp/FileReaderWindow.mm
deleted file mode 100644
index 87b9ab1..0000000
--- a/src/third_party/skia/experimental/FileReaderApp/FileReaderWindow.mm
+++ /dev/null
@@ -1,35 +0,0 @@
-#import "FileReaderWindow.h"
-#import "SkGradientShader.h"
-
-bool gNeverSetToTrueJustNeedToFoolLinker;
-static void init_effects() {
-  if (gNeverSetToTrueJustNeedToFoolLinker) {
-    SkPoint p = SkPoint::Make(0,0);
-    SkPoint q = SkPoint::Make(100,100);
-    SkPoint pts[] = {p, q};
-    SkColor colors[] = { SK_ColorRED, SK_ColorGREEN };
-    SkScalar pos[] = { 0, 1.0};
-    SkGradientShader::CreateLinear(pts, colors, pos, 2, 
-                                   SkShader::kMirror_TileMode);
-  }
-}
-
-@implementation FileReaderWindow
--(void) installSkViews {
-    init_effects();
-    fReaderView = new ReaderView;
-    fReaderView->setVisibleP(true);
-    fReaderView->setSize([self frame].size.width, [self frame].size.height);
-    [fView addSkView:fReaderView];
-    [fView setNeedsDisplay:YES];
-    fReaderView->unref();
-    //TODO - Temporary fix. Inval doesn't Seem to be working. 
-    [NSTimer scheduledTimerWithTimeInterval:0.01 target:self 
-                                   selector:@selector(redraw) userInfo:nil 
-                                    repeats:YES];
-}
-
-- (void)redraw {
-    [fView setNeedsDisplay:YES];
-}
-@end
\ No newline at end of file
diff --git a/src/third_party/skia/experimental/FileReaderApp/ReaderView.cpp b/src/third_party/skia/experimental/FileReaderApp/ReaderView.cpp
deleted file mode 100644
index d0792d2..0000000
--- a/src/third_party/skia/experimental/FileReaderApp/ReaderView.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#include "ReaderView.h"
-#include "SkGPipe.h"
-#include "SkCanvas.h"
-
-#include <stdio.h>
-
-#define FILE_PATH   "/Users/yangsu/Code/test/test.a"
-ReaderView::ReaderView() {
-    fBGColor = 0xFFDDDDDD;
-    fFilePos = 0;
-    fBufferBitmaps[0].setConfig(SkBitmap::kARGB_8888_Config, 640, 480);
-    fBufferBitmaps[0].allocPixels(NULL);
-    fBufferBitmaps[1].setConfig(SkBitmap::kARGB_8888_Config, 640, 480);
-    fBufferBitmaps[1].allocPixels(NULL);
-    fFront  = 0;
-    fBack   = 1;
-}
-
-void ReaderView::draw(SkCanvas* canvas) {
-    canvas->drawColor(fBGColor);
-
-    SkAutoCanvasRestore acr(canvas, true);
-
-    //Create a temporary canvas and reader object that draws into the back
-    //bitmap so that the incremental changes or incomplete reads are not shown
-    //on screen
-    SkCanvas bufferCanvas(fBufferBitmaps[fBack]);
-    SkGPipeReader reader(&bufferCanvas);
-
-    //The file specified by FILE_PATH MUST exist
-    FILE* f = fopen(FILE_PATH, "rb");
-    SkASSERT(f != NULL);
-
-    fseek(f, 0, SEEK_END);
-    int size = ftell(f) * sizeof(char);
-    if (size <= fFilePos) {
-        fFilePos = 0;
-    }
-
-    //Resume from the last read location
-    fseek(f, fFilePos, SEEK_SET);
-    int toBeRead = size - fFilePos;
-    if (size > 0 && toBeRead > 0) {
-        void* block = sk_malloc_throw(toBeRead);
-        fread(block, 1, toBeRead, f);
-
-        size_t bytesRead;
-        SkGPipeReader::Status fStatus = reader.playback(block, toBeRead, &bytesRead);
-        SkASSERT(SkGPipeReader::kError_Status != fStatus);
-        SkASSERT(toBeRead >= bytesRead);
-
-        //if the reader reaches a done verb, a frame is complete.
-        //Update the file location and swap the front and back bitmaps to show
-        //the new frame
-        if (SkGPipeReader::kDone_Status == fStatus) {
-            fFilePos += bytesRead;
-            fFront = fFront ^ 0x1;
-            fBack = fBack ^ 0x1;
-        }
-        sk_free(block);
-    }
-
-    fclose(f);
-
-    //the front bitmap is always drawn
-    canvas->drawBitmap(fBufferBitmaps[fFront], 0, 0, NULL);
-    this->inval(NULL);
-}
diff --git a/src/third_party/skia/experimental/FileReaderApp/ReaderView.h b/src/third_party/skia/experimental/FileReaderApp/ReaderView.h
deleted file mode 100644
index 3f61eb8..0000000
--- a/src/third_party/skia/experimental/FileReaderApp/ReaderView.h
+++ /dev/null
@@ -1,29 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#include "SkView.h"
-#include "SkColor.h"
-#include "SkBitmap.h"
-
-/*
- * Pipe Reader with File IO. This view reads from the data file produced by the
- * Pipe Writer.
- */
-
-class ReaderView : public SkView {
-public:
-    ReaderView();
-    virtual void draw(SkCanvas* canvas);
-
-private:
-    int     fFilePos;
-    int     fFront;
-    int     fBack;
-    SkColor fBGColor;
-    SkBitmap fBufferBitmaps[2];
-    typedef SkView INHERITED;
-};
diff --git a/src/third_party/skia/experimental/FileReaderApp/main.m b/src/third_party/skia/experimental/FileReaderApp/main.m
deleted file mode 100644
index cd85c6d..0000000
--- a/src/third_party/skia/experimental/FileReaderApp/main.m
+++ /dev/null
@@ -1,16 +0,0 @@
-//
-//  main.m
-//  CocoaSampleApp
-//
-//  Created by Yang Su on 6/14/11.
-//  Copyright 2011 Google Inc.
-//  Use of this source code is governed by a BSD-style license that can be
-//  found in the LICENSE file.
-//
-
-#import <Cocoa/Cocoa.h>
-
-int main(int argc, char *argv[])
-{
-    return NSApplicationMain(argc,  (const char **) argv);
-}
diff --git a/src/third_party/skia/experimental/GLFWTest/GLFWTest.xcodeproj/project.pbxproj b/src/third_party/skia/experimental/GLFWTest/GLFWTest.xcodeproj/project.pbxproj
deleted file mode 100644
index 259ad2d..0000000
--- a/src/third_party/skia/experimental/GLFWTest/GLFWTest.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,411 +0,0 @@
-// !$*UTF8*$!
-{
-	archiveVersion = 1;
-	classes = {
-	};
-	objectVersion = 46;
-	objects = {
-
-/* Begin PBXBuildFile section */
-		AF48715A1BBB21990090FF83 /* glfw_main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AF4871591BBB21990090FF83 /* glfw_main.cpp */; };
-		AF48715C1BBB255E0090FF83 /* libglfw3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48715B1BBB255E0090FF83 /* libglfw3.a */; };
-		AF4872741BBB26770090FF83 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4872701BBB26770090FF83 /* Cocoa.framework */; };
-		AF4872751BBB26770090FF83 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4872711BBB26770090FF83 /* CoreVideo.framework */; };
-		AF4872761BBB26770090FF83 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4872721BBB26770090FF83 /* IOKit.framework */; };
-		AF4872771BBB26770090FF83 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4872731BBB26770090FF83 /* OpenGL.framework */; };
-		AFE840981BBC3B46008D1091 /* libskia_skgpu.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840971BBC3B46008D1091 /* libskia_skgpu.a */; };
-		AFE8409B1BBC3B7A008D1091 /* libskia_core.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE8409A1BBC3B7A008D1091 /* libskia_core.a */; settings = {ATTRIBUTES = (Required, ); }; };
-		AFE8409D1BBC3B88008D1091 /* libskia_utils.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE8409C1BBC3B88008D1091 /* libskia_utils.a */; };
-		AFE840A31BBC3C4D008D1091 /* libskia_ports.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840A21BBC3C4D008D1091 /* libskia_ports.a */; };
-		AFE840A51BBC3C6D008D1091 /* libskia_images.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840A41BBC3C6C008D1091 /* libskia_images.a */; };
-		AFE840A71BBC3C9E008D1091 /* libskia_opts.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840A61BBC3C9E008D1091 /* libskia_opts.a */; };
-		AFE840A91BBC3CBC008D1091 /* libskia_opts_ssse3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840A81BBC3CBC008D1091 /* libskia_opts_ssse3.a */; settings = {ATTRIBUTES = (Weak, ); }; };
-		AFE840AD1BBC3CD3008D1091 /* libskia_opts_sse41.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840AC1BBC3CD3008D1091 /* libskia_opts_sse41.a */; settings = {ATTRIBUTES = (Weak, ); }; };
-		AFE840AF1BBC3CFB008D1091 /* libskia_effects.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840AE1BBC3CFB008D1091 /* libskia_effects.a */; };
-		AFE840B11BBC3D55008D1091 /* libSkKTX.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840B01BBC3D55008D1091 /* libSkKTX.a */; };
-		AFE840B31BBC3D66008D1091 /* libetc1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840B21BBC3D66008D1091 /* libetc1.a */; };
-		AFE840B51BBC3D92008D1091 /* libskia_sfnt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840B41BBC3D92008D1091 /* libskia_sfnt.a */; };
-		AFE840B71BBC5A5F008D1091 /* libtimer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840B61BBC5A5F008D1091 /* libtimer.a */; };
-		AFE840B91BBC5AC9008D1091 /* ship.png in Resources */ = {isa = PBXBuildFile; fileRef = AFE840B81BBC5AC9008D1091 /* ship.png */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXFileReference section */
-		AF4871311BBB21290090FF83 /* GLFWTest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GLFWTest.app; sourceTree = BUILT_PRODUCTS_DIR; };
-		AF4871571BBB218D0090FF83 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; };
-		AF4871591BBB21990090FF83 /* glfw_main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = glfw_main.cpp; sourceTree = SOURCE_ROOT; };
-		AF48715B1BBB255E0090FF83 /* libglfw3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libglfw3.a; path = "glfw-3.1.1/src/libglfw3.a"; sourceTree = SOURCE_ROOT; };
-		AF4872701BBB26770090FF83 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = ../../../../../../../../System/Library/Frameworks/Cocoa.framework; sourceTree = "<group>"; };
-		AF4872711BBB26770090FF83 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = ../../../../../../../../System/Library/Frameworks/CoreVideo.framework; sourceTree = "<group>"; };
-		AF4872721BBB26770090FF83 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = ../../../../../../../../System/Library/Frameworks/IOKit.framework; sourceTree = "<group>"; };
-		AF4872731BBB26770090FF83 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = ../../../../../../../../System/Library/Frameworks/OpenGL.framework; sourceTree = "<group>"; };
-		AFE840971BBC3B46008D1091 /* libskia_skgpu.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_skgpu.a; path = ../../../out/Release/libskia_skgpu.a; sourceTree = "<group>"; };
-		AFE8409A1BBC3B7A008D1091 /* libskia_core.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_core.a; path = ../../../out/Release/libskia_core.a; sourceTree = "<group>"; };
-		AFE8409C1BBC3B88008D1091 /* libskia_utils.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_utils.a; path = ../../../out/Release/libskia_utils.a; sourceTree = "<group>"; };
-		AFE840A21BBC3C4D008D1091 /* libskia_ports.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_ports.a; path = ../../../out/Release/libskia_ports.a; sourceTree = "<group>"; };
-		AFE840A41BBC3C6C008D1091 /* libskia_images.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_images.a; path = ../../../out/Release/libskia_images.a; sourceTree = "<group>"; };
-		AFE840A61BBC3C9E008D1091 /* libskia_opts.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_opts.a; path = ../../../out/Release/libskia_opts.a; sourceTree = "<group>"; };
-		AFE840A81BBC3CBC008D1091 /* libskia_opts_ssse3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_opts_ssse3.a; path = ../../../out/Release/libskia_opts_ssse3.a; sourceTree = "<group>"; };
-		AFE840AA1BBC3CCC008D1091 /* libskia_opts_sse4.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_opts_sse4.a; path = ../../../out/Release/libskia_opts_sse4.a; sourceTree = "<group>"; };
-		AFE840AC1BBC3CD3008D1091 /* libskia_opts_sse41.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_opts_sse41.a; path = ../../../out/Release/libskia_opts_sse41.a; sourceTree = "<group>"; };
-		AFE840AE1BBC3CFB008D1091 /* libskia_effects.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_effects.a; path = ../../../out/Release/libskia_effects.a; sourceTree = "<group>"; };
-		AFE840B01BBC3D55008D1091 /* libSkKTX.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libSkKTX.a; path = ../../../out/Release/libSkKTX.a; sourceTree = "<group>"; };
-		AFE840B21BBC3D66008D1091 /* libetc1.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libetc1.a; path = ../../../out/Release/libetc1.a; sourceTree = "<group>"; };
-		AFE840B41BBC3D92008D1091 /* libskia_sfnt.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_sfnt.a; path = ../../../out/Release/libskia_sfnt.a; sourceTree = "<group>"; };
-		AFE840B61BBC5A5F008D1091 /* libtimer.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtimer.a; path = ../../../out/Debug/libtimer.a; sourceTree = "<group>"; };
-		AFE840B81BBC5AC9008D1091 /* ship.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ship.png; sourceTree = SOURCE_ROOT; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
-		AF48712E1BBB21290090FF83 /* Frameworks */ = {
-			isa = PBXFrameworksBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				AFE8409B1BBC3B7A008D1091 /* libskia_core.a in Frameworks */,
-				AFE840981BBC3B46008D1091 /* libskia_skgpu.a in Frameworks */,
-				AF4872741BBB26770090FF83 /* Cocoa.framework in Frameworks */,
-				AF48715C1BBB255E0090FF83 /* libglfw3.a in Frameworks */,
-				AFE840B11BBC3D55008D1091 /* libSkKTX.a in Frameworks */,
-				AFE840A31BBC3C4D008D1091 /* libskia_ports.a in Frameworks */,
-				AF4872751BBB26770090FF83 /* CoreVideo.framework in Frameworks */,
-				AFE8409D1BBC3B88008D1091 /* libskia_utils.a in Frameworks */,
-				AFE840B31BBC3D66008D1091 /* libetc1.a in Frameworks */,
-				AFE840B51BBC3D92008D1091 /* libskia_sfnt.a in Frameworks */,
-				AFE840AD1BBC3CD3008D1091 /* libskia_opts_sse41.a in Frameworks */,
-				AFE840A71BBC3C9E008D1091 /* libskia_opts.a in Frameworks */,
-				AF4872771BBB26770090FF83 /* OpenGL.framework in Frameworks */,
-				AFE840B71BBC5A5F008D1091 /* libtimer.a in Frameworks */,
-				AF4872761BBB26770090FF83 /* IOKit.framework in Frameworks */,
-				AFE840AF1BBC3CFB008D1091 /* libskia_effects.a in Frameworks */,
-				AFE840A51BBC3C6D008D1091 /* libskia_images.a in Frameworks */,
-				AFE840A91BBC3CBC008D1091 /* libskia_opts_ssse3.a in Frameworks */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
-		AF4871281BBB21290090FF83 = {
-			isa = PBXGroup;
-			children = (
-				AF4871331BBB21290090FF83 /* GLFWTest */,
-				AF4871321BBB21290090FF83 /* Products */,
-			);
-			sourceTree = "<group>";
-		};
-		AF4871321BBB21290090FF83 /* Products */ = {
-			isa = PBXGroup;
-			children = (
-				AF4871311BBB21290090FF83 /* GLFWTest.app */,
-			);
-			name = Products;
-			sourceTree = "<group>";
-		};
-		AF4871331BBB21290090FF83 /* GLFWTest */ = {
-			isa = PBXGroup;
-			children = (
-				AF4871591BBB21990090FF83 /* glfw_main.cpp */,
-				AFE840991BBC3B61008D1091 /* Skia */,
-				AF48726F1BBB25A40090FF83 /* Frameworks */,
-				AF4871341BBB212A0090FF83 /* Supporting Files */,
-			);
-			path = GLFWTest;
-			sourceTree = "<group>";
-		};
-		AF4871341BBB212A0090FF83 /* Supporting Files */ = {
-			isa = PBXGroup;
-			children = (
-				AFE840B81BBC5AC9008D1091 /* ship.png */,
-				AF4871571BBB218D0090FF83 /* Info.plist */,
-			);
-			name = "Supporting Files";
-			sourceTree = "<group>";
-		};
-		AF48726F1BBB25A40090FF83 /* Frameworks */ = {
-			isa = PBXGroup;
-			children = (
-				AF48715B1BBB255E0090FF83 /* libglfw3.a */,
-				AF4872701BBB26770090FF83 /* Cocoa.framework */,
-				AF4872711BBB26770090FF83 /* CoreVideo.framework */,
-				AF4872721BBB26770090FF83 /* IOKit.framework */,
-				AF4872731BBB26770090FF83 /* OpenGL.framework */,
-			);
-			name = Frameworks;
-			sourceTree = "<group>";
-		};
-		AFE840991BBC3B61008D1091 /* Skia */ = {
-			isa = PBXGroup;
-			children = (
-				AFE8409A1BBC3B7A008D1091 /* libskia_core.a */,
-				AFE840AE1BBC3CFB008D1091 /* libskia_effects.a */,
-				AFE840B21BBC3D66008D1091 /* libetc1.a */,
-				AFE840B01BBC3D55008D1091 /* libSkKTX.a */,
-				AFE840A41BBC3C6C008D1091 /* libskia_images.a */,
-				AFE840A61BBC3C9E008D1091 /* libskia_opts.a */,
-				AFE840A81BBC3CBC008D1091 /* libskia_opts_ssse3.a */,
-				AFE840AA1BBC3CCC008D1091 /* libskia_opts_sse4.a */,
-				AFE840AC1BBC3CD3008D1091 /* libskia_opts_sse41.a */,
-				AFE840A21BBC3C4D008D1091 /* libskia_ports.a */,
-				AFE840B41BBC3D92008D1091 /* libskia_sfnt.a */,
-				AFE8409C1BBC3B88008D1091 /* libskia_utils.a */,
-				AFE840971BBC3B46008D1091 /* libskia_skgpu.a */,
-				AFE840B61BBC5A5F008D1091 /* libtimer.a */,
-			);
-			name = Skia;
-			sourceTree = "<group>";
-		};
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
-		AF4871301BBB21290090FF83 /* GLFWTest */ = {
-			isa = PBXNativeTarget;
-			buildConfigurationList = AF4871511BBB212A0090FF83 /* Build configuration list for PBXNativeTarget "GLFWTest" */;
-			buildPhases = (
-				AF48712D1BBB21290090FF83 /* Sources */,
-				AF48712E1BBB21290090FF83 /* Frameworks */,
-				AF48712F1BBB21290090FF83 /* Resources */,
-			);
-			buildRules = (
-			);
-			dependencies = (
-			);
-			name = GLFWTest;
-			productName = GLFWTest;
-			productReference = AF4871311BBB21290090FF83 /* GLFWTest.app */;
-			productType = "com.apple.product-type.application";
-		};
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
-		AF4871291BBB21290090FF83 /* Project object */ = {
-			isa = PBXProject;
-			attributes = {
-				LastUpgradeCheck = 0630;
-				ORGANIZATIONNAME = "Jim Van Verth";
-				TargetAttributes = {
-					AF4871301BBB21290090FF83 = {
-						CreatedOnToolsVersion = 6.3.2;
-					};
-				};
-			};
-			buildConfigurationList = AF48712C1BBB21290090FF83 /* Build configuration list for PBXProject "GLFWTest" */;
-			compatibilityVersion = "Xcode 3.2";
-			developmentRegion = English;
-			hasScannedForEncodings = 0;
-			knownRegions = (
-				en,
-				Base,
-			);
-			mainGroup = AF4871281BBB21290090FF83;
-			productRefGroup = AF4871321BBB21290090FF83 /* Products */;
-			projectDirPath = "";
-			projectRoot = "";
-			targets = (
-				AF4871301BBB21290090FF83 /* GLFWTest */,
-			);
-		};
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
-		AF48712F1BBB21290090FF83 /* Resources */ = {
-			isa = PBXResourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				AFE840B91BBC5AC9008D1091 /* ship.png in Resources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
-		AF48712D1BBB21290090FF83 /* Sources */ = {
-			isa = PBXSourcesBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-				AF48715A1BBB21990090FF83 /* glfw_main.cpp in Sources */,
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-		};
-/* End PBXSourcesBuildPhase section */
-
-/* Begin XCBuildConfiguration section */
-		AF48714F1BBB212A0090FF83 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-				CLANG_CXX_LIBRARY = "libc++";
-				CLANG_ENABLE_MODULES = YES;
-				CLANG_ENABLE_OBJC_ARC = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-				CLANG_WARN_EMPTY_BODY = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-				CODE_SIGN_IDENTITY = "-";
-				COPY_PHASE_STRIP = NO;
-				DEBUG_INFORMATION_FORMAT = dwarf;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_DYNAMIC_NO_PIC = NO;
-				GCC_NO_COMMON_BLOCKS = YES;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_PREPROCESSOR_DEFINITIONS = (
-					"DEBUG=1",
-					"$(inherited)",
-				);
-				GCC_SYMBOLS_PRIVATE_EXTERN = NO;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				HEADER_SEARCH_PATHS = (
-					../../include/gpu,
-					../../include/utils,
-					../../include/config,
-					../../include/core,
-					"$(inherited)",
-					/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
-				);
-				MACOSX_DEPLOYMENT_TARGET = 10.10;
-				MTL_ENABLE_DEBUG_INFO = YES;
-				ONLY_ACTIVE_ARCH = YES;
-				SDKROOT = macosx;
-			};
-			name = Debug;
-		};
-		AF4871501BBB212A0090FF83 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ALWAYS_SEARCH_USER_PATHS = NO;
-				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
-				CLANG_CXX_LIBRARY = "libc++";
-				CLANG_ENABLE_MODULES = YES;
-				CLANG_ENABLE_OBJC_ARC = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
-				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
-				CLANG_WARN_EMPTY_BODY = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
-				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-				CODE_SIGN_IDENTITY = "-";
-				COPY_PHASE_STRIP = NO;
-				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
-				ENABLE_NS_ASSERTIONS = NO;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				GCC_C_LANGUAGE_STANDARD = gnu99;
-				GCC_NO_COMMON_BLOCKS = YES;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
-				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_VARIABLE = YES;
-				HEADER_SEARCH_PATHS = (
-					../../include/gpu,
-					../../include/utils,
-					../../include/config,
-					../../include/core,
-					"$(inherited)",
-					/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
-				);
-				MACOSX_DEPLOYMENT_TARGET = 10.10;
-				MTL_ENABLE_DEBUG_INFO = NO;
-				SDKROOT = macosx;
-			};
-			name = Release;
-		};
-		AF4871521BBB212A0090FF83 /* Debug */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				COMBINE_HIDPI_IMAGES = YES;
-				HEADER_SEARCH_PATHS = (
-					../../include/gpu,
-					../../include/utils,
-					../../include/config,
-					../../include/core,
-					"$(inherited)",
-					/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
-					../../tools/timer,
-				);
-				INFOPLIST_FILE = "$(SRCROOT)/Info.plist";
-				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(PROJECT_DIR)/../../out/Debug",
-					"$(PROJECT_DIR)/../../third_party/externals/glfw/src",
-				);
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../../third_party/externals/glfw/include";
-			};
-			name = Debug;
-		};
-		AF4871531BBB212A0090FF83 /* Release */ = {
-			isa = XCBuildConfiguration;
-			buildSettings = {
-				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
-				COMBINE_HIDPI_IMAGES = YES;
-				HEADER_SEARCH_PATHS = (
-					../../include/gpu,
-					../../include/utils,
-					../../include/config,
-					../../include/core,
-					"$(inherited)",
-					/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
-					../../tools/timer,
-				);
-				"HEADER_SEARCH_PATHS[arch=*]" = (
-					../../include/gpu,
-					../../include/utils,
-					../../include/config,
-					../../include/core,
-					"$(inherited)",
-					/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
-					../../tools/timer,
-				);
-				INFOPLIST_FILE = "$(SRCROOT)/Info.plist";
-				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
-				LIBRARY_SEARCH_PATHS = (
-					"$(inherited)",
-					"$(PROJECT_DIR)/../../out/Release",
-					"$(PROJECT_DIR)/../../third_party/externals/glfw/src",
-				);
-				PRODUCT_NAME = "$(TARGET_NAME)";
-				USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../../third_party/externals/glfw/include";
-			};
-			name = Release;
-		};
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
-		AF48712C1BBB21290090FF83 /* Build configuration list for PBXProject "GLFWTest" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				AF48714F1BBB212A0090FF83 /* Debug */,
-				AF4871501BBB212A0090FF83 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-		AF4871511BBB212A0090FF83 /* Build configuration list for PBXNativeTarget "GLFWTest" */ = {
-			isa = XCConfigurationList;
-			buildConfigurations = (
-				AF4871521BBB212A0090FF83 /* Debug */,
-				AF4871531BBB212A0090FF83 /* Release */,
-			);
-			defaultConfigurationIsVisible = 0;
-			defaultConfigurationName = Release;
-		};
-/* End XCConfigurationList section */
-	};
-	rootObject = AF4871291BBB21290090FF83 /* Project object */;
-}
diff --git a/src/third_party/skia/experimental/GLFWTest/Info.plist b/src/third_party/skia/experimental/GLFWTest/Info.plist
deleted file mode 100644
index cbd8696..0000000
--- a/src/third_party/skia/experimental/GLFWTest/Info.plist
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>en</string>
-	<key>CFBundleExecutable</key>
-	<string>$(EXECUTABLE_NAME)</string>
-	<key>CFBundleIconFile</key>
-	<string></string>
-	<key>CFBundleIdentifier</key>
-	<string>Google.$(PRODUCT_NAME:rfc1034identifier)</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>$(PRODUCT_NAME)</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleShortVersionString</key>
-	<string>1.0</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1</string>
-	<key>LSMinimumSystemVersion</key>
-	<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
-	<key>NSHumanReadableCopyright</key>
-	<string>Copyright © 2015 Google. All rights reserved.</string>
-	<key>NSMainStoryboardFile</key>
-	<string>Main</string>
-	<key>NSPrincipalClass</key>
-	<string>NSApplication</string>
-</dict>
-</plist>
diff --git a/src/third_party/skia/experimental/GLFWTest/README.txt b/src/third_party/skia/experimental/GLFWTest/README.txt
deleted file mode 100644
index 2be3f24..0000000
--- a/src/third_party/skia/experimental/GLFWTest/README.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-This test is Mac-only for now. Adding Linux or Win support shouldn’t be that difficult — it just needs a project file.
-
-To run this demo, you’ll need to do three things:
-1) Get GLFW 3.1.1 or later, and install it at third_party/externals/glfw. You’ll need to run ‘cmake’ in that directory to build the makefiles, and then ‘make’ to build the libglfw.a library.
-2) Build the skia libraries via the command line (by running ‘ninja -C out/<config> dm’, for example.
-3) Get a ship.png file. Place it in this directory. 
diff --git a/src/third_party/skia/experimental/GLFWTest/glfw_main.cpp b/src/third_party/skia/experimental/GLFWTest/glfw_main.cpp
deleted file mode 100644
index 63ea1f1..0000000
--- a/src/third_party/skia/experimental/GLFWTest/glfw_main.cpp
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "GLFW/glfw3.h"
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "GrContext.h"
-
-#include "SkCanvas.h"
-#include "SkImage.h"
-#include "SkRSXform.h"
-#include "SkSurface.h"
-#include "Timer.h"
-
-GrContext* sContext = nullptr;
-SkSurface* sSurface = nullptr;
-
-static void error_callback(int error, const char* description) {
-    fputs(description, stderr);
-}
-
-static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) {
-    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
-        glfwSetWindowShouldClose(window, GL_TRUE);
-}
-
-
-static void init_skia(int w, int h) {
-    sContext = GrContext::Create(kOpenGL_GrBackend, 0);
-    
-    GrBackendRenderTargetDesc desc;
-    desc.fWidth = w;
-    desc.fHeight = h;
-    desc.fConfig = kSkia8888_GrPixelConfig;
-    desc.fOrigin = kBottomLeft_GrSurfaceOrigin;
-    desc.fSampleCnt = 1;
-    desc.fStencilBits = 0;
-    desc.fRenderTargetHandle = 0;  // assume default framebuffer
- 
-    sSurface = SkSurface::MakeFromBackendRenderTarget(sContext, desc, nullptr, nullptr).release();
-}
-
-static void cleanup_skia() {
-    delete sSurface;
-    delete sContext;
-}
-
-const int kGrid = 100;
-const int kWidth = 960;
-const int kHeight = 640;
-
-int main(void) {
-    GLFWwindow* window;
-    glfwSetErrorCallback(error_callback);
-    if (!glfwInit()) {
-        exit(EXIT_FAILURE);
-    }
-    
-    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
-    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
-    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
-    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
-    glfwWindowHint(GLFW_SRGB_CAPABLE, GL_TRUE);
-    
-    window = glfwCreateWindow(kWidth, kHeight, "Simple example", NULL, NULL);
-    if (!window) {
-        glfwTerminate();
-        exit(EXIT_FAILURE);
-    }
-    glfwMakeContextCurrent(window);
-    
-    init_skia(kWidth, kHeight);
-    
-    sk_sp<SkImage> atlas;
-    SkRSXform   xform[kGrid*kGrid+1];
-    SkRect      tex[kGrid*kGrid+1];
-    WallTimer   timer;
-    float       times[32];
-    int         currentTime;
-
-    sk_sp<SkData> imageData(SkData::MakeFromFileName("ship.png"));
-    atlas.reset(SkImage::NewFromEncoded(imageData.get()));
-    if (!atlas) {
-        SkDebugf("\nCould not decode file ship.png\n");
-        
-        cleanup_skia();
-        glfwDestroyWindow(window);
-        glfwTerminate();
-        exit(EXIT_FAILURE);
-    }
-    
-    SkScalar anchorX = atlas->width()*0.5f;
-    SkScalar anchorY = atlas->height()*0.5f;
-    int currIndex = 0;
-    for (int x = 0; x < kGrid; x++) {
-        for (int y = 0; y < kGrid; y++) {
-            float xPos = (x / (kGrid - 1.0)) * kWidth;
-            float yPos = (y / (kGrid - 1.0)) * kWidth;
-            
-            tex[currIndex] = SkRect::MakeLTRB(0.0f, 0.0f, atlas->width(), atlas->height());
-            xform[currIndex] = SkRSXform::MakeFromRadians(2.0f, SK_ScalarPI*0.5f,
-                                                          xPos, yPos, anchorX, anchorY);
-            currIndex++;
-        }
-    }
-    tex[currIndex] = SkRect::MakeLTRB(0.0f, 0.0f, atlas->width(), atlas->height());
-    xform[currIndex] = SkRSXform::MakeFromRadians(2.0f, SK_ScalarPI*0.5f,
-                                                  kWidth*0.5f, kHeight*0.5f, anchorX, anchorY);
-    
-    currentTime = 0;
-    
-    glfwSwapInterval(1);
-    glfwSetKeyCallback(window, key_callback);
-    
-    // Draw to the surface via its SkCanvas.
-    SkCanvas* canvas = sSurface->getCanvas();   // We don't manage this pointer's lifetime.
-    SkPaint paint;
-    paint.setFilterQuality(kLow_SkFilterQuality);
-    paint.setColor(SK_ColorWHITE);
-    paint.setTextSize(15.0f);
-
-    while (!glfwWindowShouldClose(window)) {
-        const float kCosDiff = 0.99984769515f;
-        const float kSinDiff = 0.01745240643f;
-
-        timer.start();
-        
-        glfwPollEvents();
-        
-        float meanTime = 0.0f;
-        for (int i = 0; i < 32; ++i) {
-            meanTime += times[i];
-        }
-        meanTime /= 32.f;
-        char outString[64];
-        float fps = 1000.f/meanTime;
-        sprintf(outString, "fps: %f ms: %f", fps, meanTime);
-        
-        for (int i = 0; i < kGrid*kGrid+1; ++i) {
-            SkScalar c = xform[i].fSCos;
-            SkScalar s = xform[i].fSSin;
-        
-            SkScalar dx = c*anchorX - s*anchorY;
-            SkScalar dy = s*anchorX + c*anchorY;
-
-            xform[i].fSCos = kCosDiff*c - kSinDiff*s;
-            xform[i].fSSin = kSinDiff*c + kCosDiff*s;
-            
-            dx -= xform[i].fSCos*anchorX - xform[i].fSSin*anchorY;
-            dy -= xform[i].fSSin*anchorX + xform[i].fSCos*anchorY;
-            xform[i].fTx += dx;
-            xform[i].fTy += dy;
-        }
-        
-        canvas->clear(SK_ColorBLACK);
-        canvas->drawAtlas(atlas, xform, tex, nullptr, kGrid*kGrid+1, SkXfermode::kSrcOver_Mode,
-                          nullptr, &paint);
-        canvas->drawText(outString, strlen(outString), 100.f, 100.f, paint);
-        
-        canvas->flush();
-        
-        timer.end();
-        times[currentTime] = (float)(timer.fWall);
-        currentTime = (currentTime + 1) & 0x1f;
-        
-        glfwSwapBuffers(window);
-    }
-  
-    cleanup_skia();
-    
-    glfwDestroyWindow(window);
-    glfwTerminate();
-    exit(EXIT_SUCCESS);
-}
diff --git a/src/third_party/skia/experimental/Networking/SampleNetPipeReader.cpp b/src/third_party/skia/experimental/Networking/SampleNetPipeReader.cpp
deleted file mode 100644
index aef5653..0000000
--- a/src/third_party/skia/experimental/Networking/SampleNetPipeReader.cpp
+++ /dev/null
@@ -1,129 +0,0 @@
-#include "SampleCode.h"
-#include "SkView.h"
-#include "SkCanvas.h"
-#include "SkGradientShader.h"
-#include "SkGPipe.h"
-#include "SkSockets.h"
-#include "SkOSMenu.h"
-
-/**
- * A simple networked pipe reader
- *
- * This view will connect to a user specified server, in this case meaning any
- * Skia app that's has a SkTCPServer set up to broadcast its piped drawing data,
- * received all the data transmitted and attempt to reproduce the drawing calls.
- * This reader will only keep the latest batch of data. In order to keep up with
- * the server, which may be producing data at a much higher rate than the reader
- * is consuming, the reader will attempt multiple reads and only render the
- * latest frame. this behavior can be adjusted by changing MAX_READS_PER_FRAME
- * or disabled by setting fSync to false
- */
-
-#define MAX_READS_PER_FRAME 12
-
-class NetPipeReaderView : public SampleView {
-public:
-    NetPipeReaderView() {
-        fSocket = NULL;
-        fSync = true;
-    }
-
-    ~NetPipeReaderView() {
-        if (fSocket) {
-            delete fSocket;
-        }
-        fDataArray.reset();
-    }
-    virtual void requestMenu(SkOSMenu* menu) {
-        menu->setTitle("Net Pipe Reader");
-        menu->appendTextField("Server IP", "Server IP", this->getSinkID(),
-                              "IP address");
-        menu->appendSwitch("Sync", "Sync", this->getSinkID(), fSync);
-    }
-
-protected:
-    static void readData(int cid, const void* data, size_t size,
-                         SkSocket::DataType type, void* context) {
-        NetPipeReaderView* view = (NetPipeReaderView*)context;
-        view->onRead(data, size);
-    }
-
-    void onRead(const void* data, size_t size) {
-        if (size > 0)
-            fDataArray.append(size, (const char*)data);
-    }
-
-    bool onQuery(SkEvent* evt) {
-        if (SampleCode::TitleQ(*evt)) {
-            SampleCode::TitleR(evt, "Net Pipe Reader");
-            return true;
-        }
-        return this->INHERITED::onQuery(evt);
-    }
-
-    bool onEvent(const SkEvent& evt) {
-        SkString s;
-        if (SkOSMenu::FindText(evt, "Server IP", &s)) {
-            if (NULL != fSocket) {
-                delete fSocket;
-            }
-            fSocket = new SkTCPClient(s.c_str());
-            fSocket->connectToServer();
-            SkDebugf("Connecting to %s\n", s.c_str());
-            return true;
-        }
-        if (SkOSMenu::FindSwitchState(evt, "Sync", &fSync))
-            return true;
-        return this->INHERITED::onEvent(evt);
-    }
-
-    void onDrawContent(SkCanvas* canvas) {
-        if (NULL == fSocket)
-            return;
-
-        if (fSocket->isConnected()) {
-            int dataToRemove = fDataArray.count();
-            if (fSync) {
-                int numreads = 0;
-                while (fSocket->readPacket(readData, this) > 0 &&
-                       numreads < MAX_READS_PER_FRAME) {
-                    // at this point, new data has been read and stored, discard
-                    // old data since it's not needed anymore
-                    SkASSERT(fDataArray.count() > dataToRemove);
-                    fDataArray.remove(0, dataToRemove);
-                    dataToRemove = fDataArray.count();
-                    ++numreads;
-                }
-                // clean up if max reads reached
-                if (numreads == MAX_READS_PER_FRAME &&
-                    fDataArray.count() > dataToRemove)
-                    fDataArray.remove(0, dataToRemove);
-            }
-            else {
-                if (fSocket->readPacket(readData, this) > 0)
-                    fDataArray.remove(0, dataToRemove);
-            }
-        }
-        else
-            fSocket->connectToServer();
-
-        SkGPipeReader reader(canvas);
-        size_t bytesRead;
-        SkGPipeReader::Status fStatus = reader.playback(fDataArray.begin(),
-                                                        fDataArray.count(),
-                                                        &bytesRead);
-        SkASSERT(SkGPipeReader::kError_Status != fStatus);
-        this->inval(NULL);
-    }
-
-private:
-    bool fSync;
-    SkTDArray<char> fDataArray;
-    SkTCPClient* fSocket;
-    typedef SampleView INHERITED;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-
-static SkView* MyFactory() { return new NetPipeReaderView; }
-static SkViewRegister reg(MyFactory);
diff --git a/src/third_party/skia/experimental/Networking/SkSockets.cpp b/src/third_party/skia/experimental/Networking/SkSockets.cpp
index db9da09..7a6f442 100644
--- a/src/third_party/skia/experimental/Networking/SkSockets.cpp
+++ b/src/third_party/skia/experimental/Networking/SkSockets.cpp
@@ -8,8 +8,8 @@
 #include <unistd.h>
 #include <errno.h>
 #include <fcntl.h>
-#include "SkSockets.h"
-#include "SkData.h"
+#include "experimental/Networking/SkSockets.h"
+#include "include/core/SkData.h"
 
 SkSocket::SkSocket() {
     fMaxfd = 0;
diff --git a/src/third_party/skia/experimental/Networking/SkSockets.h b/src/third_party/skia/experimental/Networking/SkSockets.h
index 8d85446..bea7a88 100644
--- a/src/third_party/skia/experimental/Networking/SkSockets.h
+++ b/src/third_party/skia/experimental/Networking/SkSockets.h
@@ -9,8 +9,8 @@
 
 #include <netinet/in.h>
 #include <sys/socket.h>
-#include "SkTypes.h"
-#include "SkStream.h"
+#include "include/core/SkStream.h"
+#include "include/core/SkTypes.h"
 
 /* PACKET and HEADER Format */
 #define PACKET_SIZE 1024
diff --git a/src/third_party/skia/experimental/SimpleCocoaApp/SimpleApp-Info.plist b/src/third_party/skia/experimental/SimpleCocoaApp/SimpleApp-Info.plist
deleted file mode 100644
index dcb5a45..0000000
--- a/src/third_party/skia/experimental/SimpleCocoaApp/SimpleApp-Info.plist
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIconFile</key>
-	<string></string>
-	<key>CFBundleIdentifier</key>
-	<string>com.yourcompany.${PRODUCT_NAME:rfc1034identifier}</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleShortVersionString</key>
-	<string>1.0</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1</string>
-	<key>LSMinimumSystemVersion</key>
-	<string>${MACOSX_DEPLOYMENT_TARGET}</string>
-	<key>NSMainNibFile</key>
-	<string>SimpleApp</string>
-	<key>NSPrincipalClass</key>
-	<string>NSApplication</string>
-</dict>
-</plist>
diff --git a/src/third_party/skia/experimental/SimpleCocoaApp/SimpleApp.h b/src/third_party/skia/experimental/SimpleCocoaApp/SimpleApp.h
deleted file mode 100644
index fe47a4a..0000000
--- a/src/third_party/skia/experimental/SimpleCocoaApp/SimpleApp.h
+++ /dev/null
@@ -1,16 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-/*
- * Simple hello world app for skia on Mac OS (Cocoa)
- */
-
-#import "SkNSView.h"
-@interface SimpleNSView : SkNSView
-- (id)initWithDefaults;
-@end
diff --git a/src/third_party/skia/experimental/SimpleCocoaApp/SimpleApp.mm b/src/third_party/skia/experimental/SimpleCocoaApp/SimpleApp.mm
deleted file mode 100644
index 95684c1..0000000
--- a/src/third_party/skia/experimental/SimpleCocoaApp/SimpleApp.mm
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#include "SkCanvas.h"
-#include "SkCGUtils.h"
-#include "SkGraphics.h"
-#include "SkImageDecoder.h"
-#include "SkOSFile.h"
-#include "SkPaint.h"
-#include "SkPicture.h"
-#include "SkStream.h"
-#include "SkWindow.h"
-
-static void make_filepath(SkString* path, const char* dir, const SkString& name) {
-    size_t len = strlen(dir);
-    path->set(dir);
-    if (len > 0 && dir[len - 1] != '/') {
-        path->append("/");
-    }
-    path->append(name);
-}
-
-static SkPicture* LoadPicture(const char path[]) {
-    SkPicture* pic = NULL;
-
-    SkBitmap bm;
-    if (SkImageDecoder::DecodeFile(path, &bm)) {
-        bm.setImmutable();
-        pic = new SkPicture;
-        SkCanvas* can = pic->beginRecording(bm.width(), bm.height());
-        can->drawBitmap(bm, 0, 0, NULL);
-        pic->endRecording();
-    } else {
-        SkFILEStream stream(path);
-        if (stream.isValid()) {
-            pic = new SkPicture(&stream, NULL, &SkImageDecoder::DecodeStream);
-        }
-
-        if (false) { // re-record
-            SkPicture p2;
-            pic->draw(p2.beginRecording(pic->width(), pic->height()));
-            p2.endRecording();
-
-            SkString path2(path);
-            path2.append(".new.skp");
-            SkFILEWStream writer(path2.c_str());
-            p2.serialize(&writer);
-        }
-    }
-    return pic;
-}
-
-class SkSampleView : public SkView {
-public:
-    SkSampleView() {
-        this->setVisibleP(true);
-        this->setClipToBounds(false);
-    };
-protected:
-    virtual void onDraw(SkCanvas* canvas) {
-        canvas->drawColor(0xFFFFFFFF);
-        SkPaint p;
-        p.setTextSize(20);
-        p.setAntiAlias(true);
-        canvas->drawText("Hello World!", 13, 50, 30, p);
-     //   SkRect r = {50, 50, 80, 80};
-        p.setColor(0xAA11EEAA);
-   //     canvas->drawRect(r, p);
-
-        SkRect result;
-        SkPath path;
-        path.moveTo(0, 0);
-        path.lineTo(1, 1);
-        path.lineTo(1, 8);
-        path.lineTo(0, 9);
-        SkASSERT(path.hasRectangularInterior(&result));
-
-        path.reset();
-        path.addRect(10, 10, 100, 100, SkPath::kCW_Direction);
-        path.addRect(20, 20, 50, 50, SkPath::kCW_Direction);
-        path.addRect(50, 50, 90, 90, SkPath::kCCW_Direction);
-        p.setColor(0xAA335577);
-        canvas->drawPath(path, p);
-        SkASSERT(!path.hasRectangularInterior(NULL));
-        path.reset();
-        path.addRect(10, 10, 100, 100, SkPath::kCW_Direction);
-        path.addRect(20, 20, 80, 80, SkPath::kCW_Direction);
-        SkRect expected = {20, 20, 80, 80};
-        SkASSERT(path.hasRectangularInterior(&result));
-        SkASSERT(result == expected);
-
-    }
-private:
-    typedef SkView INHERITED;
-};
-
-void application_init();
-void application_term();
-
-static int showPathContour(SkPath::Iter& iter) {
-    uint8_t verb;
-    SkPoint pts[4];
-    int moves = 0;
-    bool waitForClose = false;
-    while ((verb = iter.next(pts)) != SkPath::kDone_Verb) {
-        switch (verb) {
-            case SkPath::kMove_Verb:
-                if (!waitForClose) {
-                    ++moves;
-                    waitForClose = true;
-                }
-                SkDebugf("path.moveTo(%1.9g, %1.9g);\n", pts[0].fX, pts[0].fY);
-                break;
-            case SkPath::kLine_Verb:
-                SkDebugf("path.lineTo(%1.9g, %1.9g);\n", pts[1].fX, pts[1].fY);
-                break;
-            case SkPath::kQuad_Verb:
-                SkDebugf("path.quadTo(%1.9g, %1.9g, %1.9g, %1.9g);\n",
-                    pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY);
-                break;
-            case SkPath::kCubic_Verb:
-                SkDebugf("path.cubicTo(%1.9g, %1.9g, %1.9g, %1.9g, %1.9g, %1.9g);\n",
-                    pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY,
-                    pts[3].fX, pts[3].fY);
-                break;
-            case SkPath::kClose_Verb:
-                waitForClose = false;
-                SkDebugf("path.close();\n");
-                break;
-            default:
-                SkDEBUGFAIL("bad verb");
-                SkASSERT(0);
-                return 0;
-        }
-    }
-    return moves;
-}
-
-class PathCanvas : public SkCanvas {
-    virtual void drawPath(const SkPath& path, const SkPaint& paint) {
-        if (nameonly) {
-            SkDebugf("    %s%d,\n", filename.c_str(), ++count);
-            return;
-        }
-        SkPath::Iter iter(path, true);
-        SkDebugf("<div id=\"%s%d\">\n", filename.c_str(), ++count);
-        SkASSERT(path.getFillType() < SkPath::kInverseWinding_FillType);
-        SkDebugf("path.setFillType(SkPath::k%s_FillType);\n",
-            path.getFillType() == SkPath::kWinding_FillType ? "Winding" : "EvenOdd");
-        int contours = showPathContour(iter);
-        SkRect r;
-        SkRect copy = r;
-        bool hasOne = path.hasRectangularInterior(&r);
-        bool expected = (path.getFillType() == SkPath::kWinding_FillType && contours == 1)
-            || (path.getFillType() == SkPath::kEvenOdd_FillType && contours == 2);
-        if (!expected) {
-            SkDebugf("suspect contours=%d\n", contours);
-        }
-        int verbs = path.countVerbs();
-        int points = path.countPoints();
-        if (hasOne) {
-            if (rectVerbsMin > verbs) {
-                rectVerbsMin = verbs;
-            }
-            if (rectVerbsMax < verbs) {
-                rectVerbsMax = verbs;
-            }
-            if (rectPointsMin > points) {
-                rectPointsMin = points;
-            }
-            if (rectPointsMax < points) {
-                rectPointsMax = points;
-            }
-            SkDebugf("path.addRect(%1.9g, %1.9g, %1.9g, %1.9g);\n",
-                    r.fLeft, r.fTop, r.fRight, r.fBottom);
-        } else {
-            if (verbsMin > verbs) {
-                verbsMin = verbs;
-            }
-            if (verbsMax < verbs) {
-                verbsMax = verbs;
-            }
-            if (pointsMin > points) {
-                pointsMin = points;
-            }
-            if (pointsMax < points) {
-                pointsMax = points;
-            }
-            SkDebugf("no interior bounds\n");
-        }
-        path.hasRectangularInterior(&copy);
-        SkDebugf("</div>\n\n");
-    }
-
-    virtual void drawPosTextH(const void* text, size_t byteLength,
-                              const SkScalar xpos[], SkScalar constY,
-                              const SkPaint& paint) {
-    }
-
-public:
-    void divName(const SkString& str, bool only) {
-        filename = str;
-        char* chars = filename.writable_str();
-        while (*chars) {
-            if (*chars == '.' || *chars == '-') *chars = '_';
-            chars++;
-        }
-        count = 0;
-        nameonly = only;
-    }
-
-    void init() {
-        pointsMin = verbsMin = SK_MaxS32;
-        pointsMax = verbsMax = SK_MinS32;
-        rectPointsMin = rectVerbsMin = SK_MaxS32;
-        rectPointsMax = rectVerbsMax = SK_MinS32;
-    }
-
-    SkString filename;
-    int count;
-    bool nameonly;
-    int pointsMin;
-    int pointsMax;
-    int verbsMin;
-    int verbsMax;
-    int rectPointsMin;
-    int rectPointsMax;
-    int rectVerbsMin;
-    int rectVerbsMax;
-};
-
-bool runone = false;
-
-void application_init() {
-    SkGraphics::Init();
-    SkEvent::Init();
-    if (runone) {
-        return;
-    }
-    const char pictDir[] = "/Volumes/chrome/nih/skia/skp/skp";
-    SkOSFile::Iter iter(pictDir, "skp");
-    SkString filename;
-    PathCanvas canvas;
-    canvas.init();
-    while (iter.next(&filename)) {
-        SkString path;
-     //   if (true) filename.set("tabl_www_sahadan_com.skp");
-        make_filepath(&path, pictDir, filename);
-        canvas.divName(filename, false);
-        SkPicture* pic = LoadPicture(path.c_str());
-        pic->draw(&canvas);
-        delete pic;
-    }
-    SkDebugf("\n</div>\n\n");
-
-    SkDebugf("<script type=\"text/javascript\">\n\n");
-    SkDebugf("var testDivs = [\n");
-
-    iter.reset(pictDir, "skp");
-    while (iter.next(&filename)) {
-        SkString path;
-        make_filepath(&path, pictDir, filename);
-        canvas.divName(filename, true);
-        SkPicture* pic = LoadPicture(path.c_str());
-        pic->draw(&canvas);
-        delete pic;
-    }
-    SkDebugf("];\n\n");
-
-    SkDebugf("points min=%d max=%d verbs min=%d max=%d\n", canvas.pointsMin, canvas.pointsMax,
-            canvas.verbsMin, canvas.verbsMax);
-    SkDebugf("rect points min=%d max=%d verbs min=%d max=%d\n", canvas.rectPointsMin, canvas.rectPointsMax,
-            canvas.rectVerbsMin, canvas.rectVerbsMax);
-
-    SkDebugf("\n");
-}
-
-void application_term() {
-    SkEvent::Term();
-}
-
-class FillLayout : public SkView::Layout {
-protected:
-    virtual void onLayoutChildren(SkView* parent) {
-        SkView* view = SkView::F2BIter(parent).next();
-        view->setSize(parent->width(), parent->height());
-    }
-};
-
-#import "SimpleApp.h"
-@implementation SimpleNSView
-
-- (id)initWithDefaults {
-    if ((self = [super initWithDefaults])) {
-        fWind = new SkOSWindow(self);
-        fWind->setLayout(new FillLayout, false);
-        fWind->attachChildToFront(new SkSampleView)->unref();
-    }
-    return self;
-}
-
-- (void)drawRect:(NSRect)dirtyRect {
-    CGContextRef ctx = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
-    SkCGDrawBitmap(ctx, fWind->getBitmap(), 0, 0);
-}
-
-@end
diff --git a/src/third_party/skia/experimental/SimpleCocoaApp/SimpleApp.xib b/src/third_party/skia/experimental/SimpleCocoaApp/SimpleApp.xib
deleted file mode 100644
index 8ce9bc8..0000000
--- a/src/third_party/skia/experimental/SimpleCocoaApp/SimpleApp.xib
+++ /dev/null
@@ -1,3734 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
-	<data>
-		<int key="IBDocument.SystemTarget">1060</int>
-		<string key="IBDocument.SystemVersion">10K540</string>
-		<string key="IBDocument.InterfaceBuilderVersion">851</string>
-		<string key="IBDocument.AppKitVersion">1038.36</string>
-		<string key="IBDocument.HIToolboxVersion">461.00</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
-			<string key="NS.object.0">851</string>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<integer value="372"/>
-			<integer value="24"/>
-		</object>
-		<object class="NSArray" key="IBDocument.PluginDependencies">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.Metadata">
-			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
-			<integer value="1" key="NS.object.0"/>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.RootObjects" id="1048">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSCustomObject" id="1021">
-				<string key="NSClassName">NSApplication</string>
-			</object>
-			<object class="NSCustomObject" id="1014">
-				<string key="NSClassName">FirstResponder</string>
-			</object>
-			<object class="NSCustomObject" id="1050">
-				<string key="NSClassName">NSApplication</string>
-			</object>
-			<object class="NSMenu" id="649796088">
-				<string key="NSTitle">AMainMenu</string>
-				<object class="NSMutableArray" key="NSMenuItems">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="NSMenuItem" id="694149608">
-						<reference key="NSMenu" ref="649796088"/>
-						<string key="NSTitle">SimpleCocoaApp</string>
-						<string key="NSKeyEquiv"/>
-						<int key="NSKeyEquivModMask">1048576</int>
-						<int key="NSMnemonicLoc">2147483647</int>
-						<object class="NSCustomResource" key="NSOnImage" id="35465992">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">NSMenuCheckmark</string>
-						</object>
-						<object class="NSCustomResource" key="NSMixedImage" id="502551668">
-							<string key="NSClassName">NSImage</string>
-							<string key="NSResourceName">NSMenuMixedState</string>
-						</object>
-						<string key="NSAction">submenuAction:</string>
-						<object class="NSMenu" key="NSSubmenu" id="110575045">
-							<string key="NSTitle">SimpleCocoaApp</string>
-							<object class="NSMutableArray" key="NSMenuItems">
-								<bool key="EncodedWithXMLCoder">YES</bool>
-								<object class="NSMenuItem" id="238522557">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">About SimpleCocoaApp</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="304266470">
-									<reference key="NSMenu" ref="110575045"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="609285721">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">Preferences…</string>
-									<string key="NSKeyEquiv">,</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="481834944">
-									<reference key="NSMenu" ref="110575045"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="1046388886">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">Services</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-									<string key="NSAction">submenuAction:</string>
-									<object class="NSMenu" key="NSSubmenu" id="752062318">
-										<string key="NSTitle">Services</string>
-										<object class="NSMutableArray" key="NSMenuItems">
-											<bool key="EncodedWithXMLCoder">YES</bool>
-										</object>
-										<string key="NSName">_NSServicesMenu</string>
-									</object>
-								</object>
-								<object class="NSMenuItem" id="646227648">
-									<reference key="NSMenu" ref="110575045"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="755159360">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">Hide SimpleCocoaApp</string>
-									<string key="NSKeyEquiv">h</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="342932134">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">Hide Others</string>
-									<string key="NSKeyEquiv">h</string>
-									<int key="NSKeyEquivModMask">1572864</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="908899353">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">Show All</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="1056857174">
-									<reference key="NSMenu" ref="110575045"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="632727374">
-									<reference key="NSMenu" ref="110575045"/>
-									<string key="NSTitle">Quit SimpleCocoaApp</string>
-									<string key="NSKeyEquiv">q</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-							</object>
-							<string key="NSName">_NSAppleMenu</string>
-						</object>
-					</object>
-					<object class="NSMenuItem" id="379814623">
-						<reference key="NSMenu" ref="649796088"/>
-						<string key="NSTitle">File</string>
-						<string key="NSKeyEquiv"/>
-						<int key="NSKeyEquivModMask">1048576</int>
-						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="35465992"/>
-						<reference key="NSMixedImage" ref="502551668"/>
-						<string key="NSAction">submenuAction:</string>
-						<object class="NSMenu" key="NSSubmenu" id="720053764">
-							<string key="NSTitle">File</string>
-							<object class="NSMutableArray" key="NSMenuItems">
-								<bool key="EncodedWithXMLCoder">YES</bool>
-								<object class="NSMenuItem" id="705341025">
-									<reference key="NSMenu" ref="720053764"/>
-									<string key="NSTitle">New</string>
-									<string key="NSKeyEquiv">n</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="722745758">
-									<reference key="NSMenu" ref="720053764"/>
-									<string key="NSTitle">Open…</string>
-									<string key="NSKeyEquiv">o</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="1025936716">
-									<reference key="NSMenu" ref="720053764"/>
-									<string key="NSTitle">Open Recent</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-									<string key="NSAction">submenuAction:</string>
-									<object class="NSMenu" key="NSSubmenu" id="1065607017">
-										<string key="NSTitle">Open Recent</string>
-										<object class="NSMutableArray" key="NSMenuItems">
-											<bool key="EncodedWithXMLCoder">YES</bool>
-											<object class="NSMenuItem" id="759406840">
-												<reference key="NSMenu" ref="1065607017"/>
-												<string key="NSTitle">Clear Menu</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-										</object>
-										<string key="NSName">_NSRecentDocumentsMenu</string>
-									</object>
-								</object>
-								<object class="NSMenuItem" id="425164168">
-									<reference key="NSMenu" ref="720053764"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="776162233">
-									<reference key="NSMenu" ref="720053764"/>
-									<string key="NSTitle">Close</string>
-									<string key="NSKeyEquiv">w</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="1023925487">
-									<reference key="NSMenu" ref="720053764"/>
-									<string key="NSTitle">Save</string>
-									<string key="NSKeyEquiv">s</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="117038363">
-									<reference key="NSMenu" ref="720053764"/>
-									<string key="NSTitle">Save As…</string>
-									<string key="NSKeyEquiv">S</string>
-									<int key="NSKeyEquivModMask">1179648</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="579971712">
-									<reference key="NSMenu" ref="720053764"/>
-									<string key="NSTitle">Revert to Saved</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="1010469920">
-									<reference key="NSMenu" ref="720053764"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="294629803">
-									<reference key="NSMenu" ref="720053764"/>
-									<string key="NSTitle">Page Setup...</string>
-									<string key="NSKeyEquiv">P</string>
-									<int key="NSKeyEquivModMask">1179648</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-									<string key="NSToolTip"/>
-								</object>
-								<object class="NSMenuItem" id="49223823">
-									<reference key="NSMenu" ref="720053764"/>
-									<string key="NSTitle">Print…</string>
-									<string key="NSKeyEquiv">p</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-							</object>
-						</object>
-					</object>
-					<object class="NSMenuItem" id="952259628">
-						<reference key="NSMenu" ref="649796088"/>
-						<string key="NSTitle">Edit</string>
-						<string key="NSKeyEquiv"/>
-						<int key="NSKeyEquivModMask">1048576</int>
-						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="35465992"/>
-						<reference key="NSMixedImage" ref="502551668"/>
-						<string key="NSAction">submenuAction:</string>
-						<object class="NSMenu" key="NSSubmenu" id="789758025">
-							<string key="NSTitle">Edit</string>
-							<object class="NSMutableArray" key="NSMenuItems">
-								<bool key="EncodedWithXMLCoder">YES</bool>
-								<object class="NSMenuItem" id="1058277027">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Undo</string>
-									<string key="NSKeyEquiv">z</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="790794224">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Redo</string>
-									<string key="NSKeyEquiv">Z</string>
-									<int key="NSKeyEquivModMask">1179648</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="1040322652">
-									<reference key="NSMenu" ref="789758025"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="296257095">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Cut</string>
-									<string key="NSKeyEquiv">x</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="860595796">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Copy</string>
-									<string key="NSKeyEquiv">c</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="29853731">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Paste</string>
-									<string key="NSKeyEquiv">v</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="82994268">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Paste and Match Style</string>
-									<string key="NSKeyEquiv">V</string>
-									<int key="NSKeyEquivModMask">1572864</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="437104165">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Delete</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="583158037">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Select All</string>
-									<string key="NSKeyEquiv">a</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="212016141">
-									<reference key="NSMenu" ref="789758025"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="892235320">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Find</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-									<string key="NSAction">submenuAction:</string>
-									<object class="NSMenu" key="NSSubmenu" id="963351320">
-										<string key="NSTitle">Find</string>
-										<object class="NSMutableArray" key="NSMenuItems">
-											<bool key="EncodedWithXMLCoder">YES</bool>
-											<object class="NSMenuItem" id="447796847">
-												<reference key="NSMenu" ref="963351320"/>
-												<string key="NSTitle">Find…</string>
-												<string key="NSKeyEquiv">f</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">1</int>
-											</object>
-											<object class="NSMenuItem" id="326711663">
-												<reference key="NSMenu" ref="963351320"/>
-												<string key="NSTitle">Find Next</string>
-												<string key="NSKeyEquiv">g</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">2</int>
-											</object>
-											<object class="NSMenuItem" id="270902937">
-												<reference key="NSMenu" ref="963351320"/>
-												<string key="NSTitle">Find Previous</string>
-												<string key="NSKeyEquiv">G</string>
-												<int key="NSKeyEquivModMask">1179648</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">3</int>
-											</object>
-											<object class="NSMenuItem" id="159080638">
-												<reference key="NSMenu" ref="963351320"/>
-												<string key="NSTitle">Use Selection for Find</string>
-												<string key="NSKeyEquiv">e</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">7</int>
-											</object>
-											<object class="NSMenuItem" id="88285865">
-												<reference key="NSMenu" ref="963351320"/>
-												<string key="NSTitle">Jump to Selection</string>
-												<string key="NSKeyEquiv">j</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-										</object>
-									</object>
-								</object>
-								<object class="NSMenuItem" id="972420730">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Spelling and Grammar</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-									<string key="NSAction">submenuAction:</string>
-									<object class="NSMenu" key="NSSubmenu" id="769623530">
-										<string key="NSTitle">Spelling and Grammar</string>
-										<object class="NSMutableArray" key="NSMenuItems">
-											<bool key="EncodedWithXMLCoder">YES</bool>
-											<object class="NSMenuItem" id="679648819">
-												<reference key="NSMenu" ref="769623530"/>
-												<string key="NSTitle">Show Spelling and Grammar</string>
-												<string key="NSKeyEquiv">:</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="96193923">
-												<reference key="NSMenu" ref="769623530"/>
-												<string key="NSTitle">Check Document Now</string>
-												<string key="NSKeyEquiv">;</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="859480356">
-												<reference key="NSMenu" ref="769623530"/>
-												<bool key="NSIsDisabled">YES</bool>
-												<bool key="NSIsSeparator">YES</bool>
-												<string key="NSTitle"/>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="948374510">
-												<reference key="NSMenu" ref="769623530"/>
-												<string key="NSTitle">Check Spelling While Typing</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="967646866">
-												<reference key="NSMenu" ref="769623530"/>
-												<string key="NSTitle">Check Grammar With Spelling</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="795346622">
-												<reference key="NSMenu" ref="769623530"/>
-												<string key="NSTitle">Correct Spelling Automatically</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-										</object>
-									</object>
-								</object>
-								<object class="NSMenuItem" id="507821607">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Substitutions</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-									<string key="NSAction">submenuAction:</string>
-									<object class="NSMenu" key="NSSubmenu" id="698887838">
-										<string key="NSTitle">Substitutions</string>
-										<object class="NSMutableArray" key="NSMenuItems">
-											<bool key="EncodedWithXMLCoder">YES</bool>
-											<object class="NSMenuItem" id="65139061">
-												<reference key="NSMenu" ref="698887838"/>
-												<string key="NSTitle">Show Substitutions</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="19036812">
-												<reference key="NSMenu" ref="698887838"/>
-												<bool key="NSIsDisabled">YES</bool>
-												<bool key="NSIsSeparator">YES</bool>
-												<string key="NSTitle"/>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="605118523">
-												<reference key="NSMenu" ref="698887838"/>
-												<string key="NSTitle">Smart Copy/Paste</string>
-												<string key="NSKeyEquiv">f</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">1</int>
-											</object>
-											<object class="NSMenuItem" id="197661976">
-												<reference key="NSMenu" ref="698887838"/>
-												<string key="NSTitle">Smart Quotes</string>
-												<string key="NSKeyEquiv">g</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">2</int>
-											</object>
-											<object class="NSMenuItem" id="672708820">
-												<reference key="NSMenu" ref="698887838"/>
-												<string key="NSTitle">Smart Dashes</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="708854459">
-												<reference key="NSMenu" ref="698887838"/>
-												<string key="NSTitle">Smart Links</string>
-												<string key="NSKeyEquiv">G</string>
-												<int key="NSKeyEquivModMask">1179648</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">3</int>
-											</object>
-											<object class="NSMenuItem" id="537092702">
-												<reference key="NSMenu" ref="698887838"/>
-												<string key="NSTitle">Text Replacement</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-										</object>
-									</object>
-								</object>
-								<object class="NSMenuItem" id="288088188">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Transformations</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-									<string key="NSAction">submenuAction:</string>
-									<object class="NSMenu" key="NSSubmenu" id="579392910">
-										<string key="NSTitle">Transformations</string>
-										<object class="NSMutableArray" key="NSMenuItems">
-											<bool key="EncodedWithXMLCoder">YES</bool>
-											<object class="NSMenuItem" id="1060694897">
-												<reference key="NSMenu" ref="579392910"/>
-												<string key="NSTitle">Make Upper Case</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="879586729">
-												<reference key="NSMenu" ref="579392910"/>
-												<string key="NSTitle">Make Lower Case</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="56570060">
-												<reference key="NSMenu" ref="579392910"/>
-												<string key="NSTitle">Capitalize</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-										</object>
-									</object>
-								</object>
-								<object class="NSMenuItem" id="676164635">
-									<reference key="NSMenu" ref="789758025"/>
-									<string key="NSTitle">Speech</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-									<string key="NSAction">submenuAction:</string>
-									<object class="NSMenu" key="NSSubmenu" id="785027613">
-										<string key="NSTitle">Speech</string>
-										<object class="NSMutableArray" key="NSMenuItems">
-											<bool key="EncodedWithXMLCoder">YES</bool>
-											<object class="NSMenuItem" id="731782645">
-												<reference key="NSMenu" ref="785027613"/>
-												<string key="NSTitle">Start Speaking</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="680220178">
-												<reference key="NSMenu" ref="785027613"/>
-												<string key="NSTitle">Stop Speaking</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-										</object>
-									</object>
-								</object>
-							</object>
-						</object>
-					</object>
-					<object class="NSMenuItem" id="302598603">
-						<reference key="NSMenu" ref="649796088"/>
-						<string key="NSTitle">Format</string>
-						<string key="NSKeyEquiv"/>
-						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="35465992"/>
-						<reference key="NSMixedImage" ref="502551668"/>
-						<string key="NSAction">submenuAction:</string>
-						<object class="NSMenu" key="NSSubmenu" id="941447902">
-							<string key="NSTitle">Format</string>
-							<object class="NSMutableArray" key="NSMenuItems">
-								<bool key="EncodedWithXMLCoder">YES</bool>
-								<object class="NSMenuItem" id="792887677">
-									<reference key="NSMenu" ref="941447902"/>
-									<string key="NSTitle">Font</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-									<string key="NSAction">submenuAction:</string>
-									<object class="NSMenu" key="NSSubmenu" id="786677654">
-										<string key="NSTitle">Font</string>
-										<object class="NSMutableArray" key="NSMenuItems">
-											<bool key="EncodedWithXMLCoder">YES</bool>
-											<object class="NSMenuItem" id="159677712">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Show Fonts</string>
-												<string key="NSKeyEquiv">t</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="305399458">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Bold</string>
-												<string key="NSKeyEquiv">b</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">2</int>
-											</object>
-											<object class="NSMenuItem" id="814362025">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Italic</string>
-												<string key="NSKeyEquiv">i</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">1</int>
-											</object>
-											<object class="NSMenuItem" id="330926929">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Underline</string>
-												<string key="NSKeyEquiv">u</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="533507878">
-												<reference key="NSMenu" ref="786677654"/>
-												<bool key="NSIsDisabled">YES</bool>
-												<bool key="NSIsSeparator">YES</bool>
-												<string key="NSTitle"/>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="158063935">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Bigger</string>
-												<string key="NSKeyEquiv">+</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">3</int>
-											</object>
-											<object class="NSMenuItem" id="885547335">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Smaller</string>
-												<string key="NSKeyEquiv">-</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<int key="NSTag">4</int>
-											</object>
-											<object class="NSMenuItem" id="901062459">
-												<reference key="NSMenu" ref="786677654"/>
-												<bool key="NSIsDisabled">YES</bool>
-												<bool key="NSIsSeparator">YES</bool>
-												<string key="NSTitle"/>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="767671776">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Kern</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<string key="NSAction">submenuAction:</string>
-												<object class="NSMenu" key="NSSubmenu" id="175441468">
-													<string key="NSTitle">Kern</string>
-													<object class="NSMutableArray" key="NSMenuItems">
-														<bool key="EncodedWithXMLCoder">YES</bool>
-														<object class="NSMenuItem" id="252969304">
-															<reference key="NSMenu" ref="175441468"/>
-															<string key="NSTitle">Use Default</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="766922938">
-															<reference key="NSMenu" ref="175441468"/>
-															<string key="NSTitle">Use None</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="677519740">
-															<reference key="NSMenu" ref="175441468"/>
-															<string key="NSTitle">Tighten</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="238351151">
-															<reference key="NSMenu" ref="175441468"/>
-															<string key="NSTitle">Loosen</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-													</object>
-												</object>
-											</object>
-											<object class="NSMenuItem" id="691570813">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Ligature</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<string key="NSAction">submenuAction:</string>
-												<object class="NSMenu" key="NSSubmenu" id="1058217995">
-													<string key="NSTitle">Ligature</string>
-													<object class="NSMutableArray" key="NSMenuItems">
-														<bool key="EncodedWithXMLCoder">YES</bool>
-														<object class="NSMenuItem" id="706297211">
-															<reference key="NSMenu" ref="1058217995"/>
-															<string key="NSTitle">Use Default</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="568384683">
-															<reference key="NSMenu" ref="1058217995"/>
-															<string key="NSTitle">Use None</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="663508465">
-															<reference key="NSMenu" ref="1058217995"/>
-															<string key="NSTitle">Use All</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-													</object>
-												</object>
-											</object>
-											<object class="NSMenuItem" id="769124883">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Baseline</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<string key="NSAction">submenuAction:</string>
-												<object class="NSMenu" key="NSSubmenu" id="18263474">
-													<string key="NSTitle">Baseline</string>
-													<object class="NSMutableArray" key="NSMenuItems">
-														<bool key="EncodedWithXMLCoder">YES</bool>
-														<object class="NSMenuItem" id="257962622">
-															<reference key="NSMenu" ref="18263474"/>
-															<string key="NSTitle">Use Default</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="644725453">
-															<reference key="NSMenu" ref="18263474"/>
-															<string key="NSTitle">Superscript</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="1037576581">
-															<reference key="NSMenu" ref="18263474"/>
-															<string key="NSTitle">Subscript</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="941806246">
-															<reference key="NSMenu" ref="18263474"/>
-															<string key="NSTitle">Raise</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="1045724900">
-															<reference key="NSMenu" ref="18263474"/>
-															<string key="NSTitle">Lower</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-													</object>
-												</object>
-											</object>
-											<object class="NSMenuItem" id="739652853">
-												<reference key="NSMenu" ref="786677654"/>
-												<bool key="NSIsDisabled">YES</bool>
-												<bool key="NSIsSeparator">YES</bool>
-												<string key="NSTitle"/>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="1012600125">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Show Colors</string>
-												<string key="NSKeyEquiv">C</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="214559597">
-												<reference key="NSMenu" ref="786677654"/>
-												<bool key="NSIsDisabled">YES</bool>
-												<bool key="NSIsSeparator">YES</bool>
-												<string key="NSTitle"/>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="596732606">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Copy Style</string>
-												<string key="NSKeyEquiv">c</string>
-												<int key="NSKeyEquivModMask">1572864</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="393423671">
-												<reference key="NSMenu" ref="786677654"/>
-												<string key="NSTitle">Paste Style</string>
-												<string key="NSKeyEquiv">v</string>
-												<int key="NSKeyEquivModMask">1572864</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-										</object>
-										<string key="NSName">_NSFontMenu</string>
-									</object>
-								</object>
-								<object class="NSMenuItem" id="215659978">
-									<reference key="NSMenu" ref="941447902"/>
-									<string key="NSTitle">Text</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-									<string key="NSAction">submenuAction:</string>
-									<object class="NSMenu" key="NSSubmenu" id="446991534">
-										<string key="NSTitle">Text</string>
-										<object class="NSMutableArray" key="NSMenuItems">
-											<bool key="EncodedWithXMLCoder">YES</bool>
-											<object class="NSMenuItem" id="875092757">
-												<reference key="NSMenu" ref="446991534"/>
-												<string key="NSTitle">Align Left</string>
-												<string key="NSKeyEquiv">{</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="630155264">
-												<reference key="NSMenu" ref="446991534"/>
-												<string key="NSTitle">Center</string>
-												<string key="NSKeyEquiv">|</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="945678886">
-												<reference key="NSMenu" ref="446991534"/>
-												<string key="NSTitle">Justify</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="512868991">
-												<reference key="NSMenu" ref="446991534"/>
-												<string key="NSTitle">Align Right</string>
-												<string key="NSKeyEquiv">}</string>
-												<int key="NSKeyEquivModMask">1048576</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="163117631">
-												<reference key="NSMenu" ref="446991534"/>
-												<bool key="NSIsDisabled">YES</bool>
-												<bool key="NSIsSeparator">YES</bool>
-												<string key="NSTitle"/>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="31516759">
-												<reference key="NSMenu" ref="446991534"/>
-												<string key="NSTitle">Writing Direction</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-												<string key="NSAction">submenuAction:</string>
-												<object class="NSMenu" key="NSSubmenu" id="956096989">
-													<string key="NSTitle">Writing Direction</string>
-													<object class="NSMutableArray" key="NSMenuItems">
-														<bool key="EncodedWithXMLCoder">YES</bool>
-														<object class="NSMenuItem" id="257099033">
-															<reference key="NSMenu" ref="956096989"/>
-															<bool key="NSIsDisabled">YES</bool>
-															<string key="NSTitle">Paragraph</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="551969625">
-															<reference key="NSMenu" ref="956096989"/>
-															<string type="base64-UTF8" key="NSTitle">CURlZmF1bHQ</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="249532473">
-															<reference key="NSMenu" ref="956096989"/>
-															<string type="base64-UTF8" key="NSTitle">CUxlZnQgdG8gUmlnaHQ</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="607364498">
-															<reference key="NSMenu" ref="956096989"/>
-															<string type="base64-UTF8" key="NSTitle">CVJpZ2h0IHRvIExlZnQ</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="508151438">
-															<reference key="NSMenu" ref="956096989"/>
-															<bool key="NSIsDisabled">YES</bool>
-															<bool key="NSIsSeparator">YES</bool>
-															<string key="NSTitle"/>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="981751889">
-															<reference key="NSMenu" ref="956096989"/>
-															<bool key="NSIsDisabled">YES</bool>
-															<string key="NSTitle">Selection</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="380031999">
-															<reference key="NSMenu" ref="956096989"/>
-															<string type="base64-UTF8" key="NSTitle">CURlZmF1bHQ</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="825984362">
-															<reference key="NSMenu" ref="956096989"/>
-															<string type="base64-UTF8" key="NSTitle">CUxlZnQgdG8gUmlnaHQ</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-														<object class="NSMenuItem" id="560145579">
-															<reference key="NSMenu" ref="956096989"/>
-															<string type="base64-UTF8" key="NSTitle">CVJpZ2h0IHRvIExlZnQ</string>
-															<string key="NSKeyEquiv"/>
-															<int key="NSMnemonicLoc">2147483647</int>
-															<reference key="NSOnImage" ref="35465992"/>
-															<reference key="NSMixedImage" ref="502551668"/>
-														</object>
-													</object>
-												</object>
-											</object>
-											<object class="NSMenuItem" id="908105787">
-												<reference key="NSMenu" ref="446991534"/>
-												<bool key="NSIsDisabled">YES</bool>
-												<bool key="NSIsSeparator">YES</bool>
-												<string key="NSTitle"/>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="644046920">
-												<reference key="NSMenu" ref="446991534"/>
-												<string key="NSTitle">Show Ruler</string>
-												<string key="NSKeyEquiv"/>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="231811626">
-												<reference key="NSMenu" ref="446991534"/>
-												<string key="NSTitle">Copy Ruler</string>
-												<string key="NSKeyEquiv">c</string>
-												<int key="NSKeyEquivModMask">1310720</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-											<object class="NSMenuItem" id="883618387">
-												<reference key="NSMenu" ref="446991534"/>
-												<string key="NSTitle">Paste Ruler</string>
-												<string key="NSKeyEquiv">v</string>
-												<int key="NSKeyEquivModMask">1310720</int>
-												<int key="NSMnemonicLoc">2147483647</int>
-												<reference key="NSOnImage" ref="35465992"/>
-												<reference key="NSMixedImage" ref="502551668"/>
-											</object>
-										</object>
-									</object>
-								</object>
-							</object>
-						</object>
-					</object>
-					<object class="NSMenuItem" id="586577488">
-						<reference key="NSMenu" ref="649796088"/>
-						<string key="NSTitle">View</string>
-						<string key="NSKeyEquiv"/>
-						<int key="NSKeyEquivModMask">1048576</int>
-						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="35465992"/>
-						<reference key="NSMixedImage" ref="502551668"/>
-						<string key="NSAction">submenuAction:</string>
-						<object class="NSMenu" key="NSSubmenu" id="466310130">
-							<string key="NSTitle">View</string>
-							<object class="NSMutableArray" key="NSMenuItems">
-								<bool key="EncodedWithXMLCoder">YES</bool>
-								<object class="NSMenuItem" id="102151532">
-									<reference key="NSMenu" ref="466310130"/>
-									<string key="NSTitle">Show Toolbar</string>
-									<string key="NSKeyEquiv">t</string>
-									<int key="NSKeyEquivModMask">1572864</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="237841660">
-									<reference key="NSMenu" ref="466310130"/>
-									<string key="NSTitle">Customize Toolbar…</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-							</object>
-						</object>
-					</object>
-					<object class="NSMenuItem" id="713487014">
-						<reference key="NSMenu" ref="649796088"/>
-						<string key="NSTitle">Window</string>
-						<string key="NSKeyEquiv"/>
-						<int key="NSKeyEquivModMask">1048576</int>
-						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="35465992"/>
-						<reference key="NSMixedImage" ref="502551668"/>
-						<string key="NSAction">submenuAction:</string>
-						<object class="NSMenu" key="NSSubmenu" id="835318025">
-							<string key="NSTitle">Window</string>
-							<object class="NSMutableArray" key="NSMenuItems">
-								<bool key="EncodedWithXMLCoder">YES</bool>
-								<object class="NSMenuItem" id="1011231497">
-									<reference key="NSMenu" ref="835318025"/>
-									<string key="NSTitle">Minimize</string>
-									<string key="NSKeyEquiv">m</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="575023229">
-									<reference key="NSMenu" ref="835318025"/>
-									<string key="NSTitle">Zoom</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="299356726">
-									<reference key="NSMenu" ref="835318025"/>
-									<bool key="NSIsDisabled">YES</bool>
-									<bool key="NSIsSeparator">YES</bool>
-									<string key="NSTitle"/>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-								<object class="NSMenuItem" id="625202149">
-									<reference key="NSMenu" ref="835318025"/>
-									<string key="NSTitle">Bring All to Front</string>
-									<string key="NSKeyEquiv"/>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-							</object>
-							<string key="NSName">_NSWindowsMenu</string>
-						</object>
-					</object>
-					<object class="NSMenuItem" id="448692316">
-						<reference key="NSMenu" ref="649796088"/>
-						<string key="NSTitle">Help</string>
-						<string key="NSKeyEquiv"/>
-						<int key="NSMnemonicLoc">2147483647</int>
-						<reference key="NSOnImage" ref="35465992"/>
-						<reference key="NSMixedImage" ref="502551668"/>
-						<string key="NSAction">submenuAction:</string>
-						<object class="NSMenu" key="NSSubmenu" id="992780483">
-							<string key="NSTitle">Help</string>
-							<object class="NSMutableArray" key="NSMenuItems">
-								<bool key="EncodedWithXMLCoder">YES</bool>
-								<object class="NSMenuItem" id="105068016">
-									<reference key="NSMenu" ref="992780483"/>
-									<string key="NSTitle">SimpleCocoaApp Help</string>
-									<string key="NSKeyEquiv">?</string>
-									<int key="NSKeyEquivModMask">1048576</int>
-									<int key="NSMnemonicLoc">2147483647</int>
-									<reference key="NSOnImage" ref="35465992"/>
-									<reference key="NSMixedImage" ref="502551668"/>
-								</object>
-							</object>
-							<string key="NSName">_NSHelpMenu</string>
-						</object>
-					</object>
-				</object>
-				<string key="NSName">_NSMainMenu</string>
-			</object>
-			<object class="NSWindowTemplate" id="972006081">
-				<int key="NSWindowStyleMask">15</int>
-				<int key="NSWindowBacking">2</int>
-				<string key="NSWindowRect">{{335, 390}, {480, 360}}</string>
-				<int key="NSWTFlags">1954021376</int>
-				<string key="NSWindowTitle">SimpleApp</string>
-				<string key="NSWindowClass">NSWindow</string>
-				<nil key="NSViewClass"/>
-				<string key="NSWindowContentMaxSize">{3.40282e+38, 3.40282e+38}</string>
-				<object class="NSView" key="NSWindowView" id="439893737">
-					<reference key="NSNextResponder"/>
-					<int key="NSvFlags">256</int>
-					<string key="NSFrameSize">{480, 360}</string>
-					<reference key="NSSuperview"/>
-				</object>
-				<string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string>
-				<string key="NSMaxSize">{3.40282e+38, 3.40282e+38}</string>
-			</object>
-		</object>
-		<object class="IBObjectContainer" key="IBDocument.Objects">
-			<object class="NSMutableArray" key="connectionRecords">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">performMiniaturize:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="1011231497"/>
-					</object>
-					<int key="connectionID">37</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">arrangeInFront:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="625202149"/>
-					</object>
-					<int key="connectionID">39</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">print:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="49223823"/>
-					</object>
-					<int key="connectionID">86</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">runPageLayout:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="294629803"/>
-					</object>
-					<int key="connectionID">87</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">clearRecentDocuments:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="759406840"/>
-					</object>
-					<int key="connectionID">127</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">orderFrontStandardAboutPanel:</string>
-						<reference key="source" ref="1021"/>
-						<reference key="destination" ref="238522557"/>
-					</object>
-					<int key="connectionID">142</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">performClose:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="776162233"/>
-					</object>
-					<int key="connectionID">193</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleContinuousSpellChecking:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="948374510"/>
-					</object>
-					<int key="connectionID">222</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">undo:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="1058277027"/>
-					</object>
-					<int key="connectionID">223</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">copy:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="860595796"/>
-					</object>
-					<int key="connectionID">224</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">checkSpelling:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="96193923"/>
-					</object>
-					<int key="connectionID">225</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">paste:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="29853731"/>
-					</object>
-					<int key="connectionID">226</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">stopSpeaking:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="680220178"/>
-					</object>
-					<int key="connectionID">227</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">cut:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="296257095"/>
-					</object>
-					<int key="connectionID">228</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">showGuessPanel:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="679648819"/>
-					</object>
-					<int key="connectionID">230</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">redo:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="790794224"/>
-					</object>
-					<int key="connectionID">231</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">selectAll:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="583158037"/>
-					</object>
-					<int key="connectionID">232</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">startSpeaking:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="731782645"/>
-					</object>
-					<int key="connectionID">233</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">delete:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="437104165"/>
-					</object>
-					<int key="connectionID">235</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">performZoom:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="575023229"/>
-					</object>
-					<int key="connectionID">240</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">performFindPanelAction:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="447796847"/>
-					</object>
-					<int key="connectionID">241</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">centerSelectionInVisibleArea:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="88285865"/>
-					</object>
-					<int key="connectionID">245</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleGrammarChecking:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="967646866"/>
-					</object>
-					<int key="connectionID">347</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleSmartInsertDelete:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="605118523"/>
-					</object>
-					<int key="connectionID">355</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleAutomaticQuoteSubstitution:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="197661976"/>
-					</object>
-					<int key="connectionID">356</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleAutomaticLinkDetection:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="708854459"/>
-					</object>
-					<int key="connectionID">357</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">saveDocument:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="1023925487"/>
-					</object>
-					<int key="connectionID">362</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">saveDocumentAs:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="117038363"/>
-					</object>
-					<int key="connectionID">363</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">revertDocumentToSaved:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="579971712"/>
-					</object>
-					<int key="connectionID">364</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">runToolbarCustomizationPalette:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="237841660"/>
-					</object>
-					<int key="connectionID">365</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleToolbarShown:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="102151532"/>
-					</object>
-					<int key="connectionID">366</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">hide:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="755159360"/>
-					</object>
-					<int key="connectionID">367</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">hideOtherApplications:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="342932134"/>
-					</object>
-					<int key="connectionID">368</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">unhideAllApplications:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="908899353"/>
-					</object>
-					<int key="connectionID">370</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">newDocument:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="705341025"/>
-					</object>
-					<int key="connectionID">373</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">openDocument:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="722745758"/>
-					</object>
-					<int key="connectionID">374</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">raiseBaseline:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="941806246"/>
-					</object>
-					<int key="connectionID">426</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">lowerBaseline:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="1045724900"/>
-					</object>
-					<int key="connectionID">427</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">copyFont:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="596732606"/>
-					</object>
-					<int key="connectionID">428</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">subscript:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="1037576581"/>
-					</object>
-					<int key="connectionID">429</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">superscript:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="644725453"/>
-					</object>
-					<int key="connectionID">430</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">tightenKerning:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="677519740"/>
-					</object>
-					<int key="connectionID">431</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">underline:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="330926929"/>
-					</object>
-					<int key="connectionID">432</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">orderFrontColorPanel:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="1012600125"/>
-					</object>
-					<int key="connectionID">433</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">useAllLigatures:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="663508465"/>
-					</object>
-					<int key="connectionID">434</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">loosenKerning:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="238351151"/>
-					</object>
-					<int key="connectionID">435</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">pasteFont:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="393423671"/>
-					</object>
-					<int key="connectionID">436</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">unscript:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="257962622"/>
-					</object>
-					<int key="connectionID">437</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">useStandardKerning:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="252969304"/>
-					</object>
-					<int key="connectionID">438</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">useStandardLigatures:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="706297211"/>
-					</object>
-					<int key="connectionID">439</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">turnOffLigatures:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="568384683"/>
-					</object>
-					<int key="connectionID">440</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">turnOffKerning:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="766922938"/>
-					</object>
-					<int key="connectionID">441</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">terminate:</string>
-						<reference key="source" ref="1050"/>
-						<reference key="destination" ref="632727374"/>
-					</object>
-					<int key="connectionID">449</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleAutomaticSpellingCorrection:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="795346622"/>
-					</object>
-					<int key="connectionID">456</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">orderFrontSubstitutionsPanel:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="65139061"/>
-					</object>
-					<int key="connectionID">458</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleAutomaticDashSubstitution:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="672708820"/>
-					</object>
-					<int key="connectionID">461</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleAutomaticTextReplacement:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="537092702"/>
-					</object>
-					<int key="connectionID">463</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">uppercaseWord:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="1060694897"/>
-					</object>
-					<int key="connectionID">464</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">capitalizeWord:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="56570060"/>
-					</object>
-					<int key="connectionID">467</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">lowercaseWord:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="879586729"/>
-					</object>
-					<int key="connectionID">468</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">pasteAsPlainText:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="82994268"/>
-					</object>
-					<int key="connectionID">486</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">performFindPanelAction:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="326711663"/>
-					</object>
-					<int key="connectionID">487</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">performFindPanelAction:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="270902937"/>
-					</object>
-					<int key="connectionID">488</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">performFindPanelAction:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="159080638"/>
-					</object>
-					<int key="connectionID">489</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">showHelp:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="105068016"/>
-					</object>
-					<int key="connectionID">493</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">alignCenter:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="630155264"/>
-					</object>
-					<int key="connectionID">518</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">pasteRuler:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="883618387"/>
-					</object>
-					<int key="connectionID">519</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">toggleRuler:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="644046920"/>
-					</object>
-					<int key="connectionID">520</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">alignRight:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="512868991"/>
-					</object>
-					<int key="connectionID">521</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">copyRuler:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="231811626"/>
-					</object>
-					<int key="connectionID">522</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">alignJustified:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="945678886"/>
-					</object>
-					<int key="connectionID">523</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">alignLeft:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="875092757"/>
-					</object>
-					<int key="connectionID">524</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">makeBaseWritingDirectionNatural:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="551969625"/>
-					</object>
-					<int key="connectionID">525</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">makeBaseWritingDirectionLeftToRight:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="249532473"/>
-					</object>
-					<int key="connectionID">526</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">makeBaseWritingDirectionRightToLeft:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="607364498"/>
-					</object>
-					<int key="connectionID">527</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">makeTextWritingDirectionNatural:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="380031999"/>
-					</object>
-					<int key="connectionID">528</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">makeTextWritingDirectionLeftToRight:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="825984362"/>
-					</object>
-					<int key="connectionID">529</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBActionConnection" key="connection">
-						<string key="label">makeTextWritingDirectionRightToLeft:</string>
-						<reference key="source" ref="1014"/>
-						<reference key="destination" ref="560145579"/>
-					</object>
-					<int key="connectionID">530</int>
-				</object>
-			</object>
-			<object class="IBMutableOrderedSet" key="objectRecords">
-				<object class="NSArray" key="orderedObjects">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBObjectRecord">
-						<int key="objectID">0</int>
-						<object class="NSArray" key="object" id="0">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-						</object>
-						<reference key="children" ref="1048"/>
-						<nil key="parent"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-2</int>
-						<reference key="object" ref="1021"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">File's Owner</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-1</int>
-						<reference key="object" ref="1014"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">First Responder</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-3</int>
-						<reference key="object" ref="1050"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">Application</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">29</int>
-						<reference key="object" ref="649796088"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="713487014"/>
-							<reference ref="694149608"/>
-							<reference ref="952259628"/>
-							<reference ref="379814623"/>
-							<reference ref="586577488"/>
-							<reference ref="302598603"/>
-							<reference ref="448692316"/>
-						</object>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">19</int>
-						<reference key="object" ref="713487014"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="835318025"/>
-						</object>
-						<reference key="parent" ref="649796088"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">56</int>
-						<reference key="object" ref="694149608"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="110575045"/>
-						</object>
-						<reference key="parent" ref="649796088"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">217</int>
-						<reference key="object" ref="952259628"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="789758025"/>
-						</object>
-						<reference key="parent" ref="649796088"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">83</int>
-						<reference key="object" ref="379814623"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="720053764"/>
-						</object>
-						<reference key="parent" ref="649796088"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">81</int>
-						<reference key="object" ref="720053764"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="1023925487"/>
-							<reference ref="117038363"/>
-							<reference ref="49223823"/>
-							<reference ref="722745758"/>
-							<reference ref="705341025"/>
-							<reference ref="1025936716"/>
-							<reference ref="294629803"/>
-							<reference ref="776162233"/>
-							<reference ref="425164168"/>
-							<reference ref="579971712"/>
-							<reference ref="1010469920"/>
-						</object>
-						<reference key="parent" ref="379814623"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">75</int>
-						<reference key="object" ref="1023925487"/>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">80</int>
-						<reference key="object" ref="117038363"/>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">78</int>
-						<reference key="object" ref="49223823"/>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">72</int>
-						<reference key="object" ref="722745758"/>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">82</int>
-						<reference key="object" ref="705341025"/>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">124</int>
-						<reference key="object" ref="1025936716"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="1065607017"/>
-						</object>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">77</int>
-						<reference key="object" ref="294629803"/>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">73</int>
-						<reference key="object" ref="776162233"/>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">79</int>
-						<reference key="object" ref="425164168"/>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">112</int>
-						<reference key="object" ref="579971712"/>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">74</int>
-						<reference key="object" ref="1010469920"/>
-						<reference key="parent" ref="720053764"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">125</int>
-						<reference key="object" ref="1065607017"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="759406840"/>
-						</object>
-						<reference key="parent" ref="1025936716"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">126</int>
-						<reference key="object" ref="759406840"/>
-						<reference key="parent" ref="1065607017"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">205</int>
-						<reference key="object" ref="789758025"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="437104165"/>
-							<reference ref="583158037"/>
-							<reference ref="1058277027"/>
-							<reference ref="212016141"/>
-							<reference ref="296257095"/>
-							<reference ref="29853731"/>
-							<reference ref="860595796"/>
-							<reference ref="1040322652"/>
-							<reference ref="790794224"/>
-							<reference ref="892235320"/>
-							<reference ref="972420730"/>
-							<reference ref="676164635"/>
-							<reference ref="507821607"/>
-							<reference ref="288088188"/>
-							<reference ref="82994268"/>
-						</object>
-						<reference key="parent" ref="952259628"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">202</int>
-						<reference key="object" ref="437104165"/>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">198</int>
-						<reference key="object" ref="583158037"/>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">207</int>
-						<reference key="object" ref="1058277027"/>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">214</int>
-						<reference key="object" ref="212016141"/>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">199</int>
-						<reference key="object" ref="296257095"/>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">203</int>
-						<reference key="object" ref="29853731"/>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">197</int>
-						<reference key="object" ref="860595796"/>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">206</int>
-						<reference key="object" ref="1040322652"/>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">215</int>
-						<reference key="object" ref="790794224"/>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">218</int>
-						<reference key="object" ref="892235320"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="963351320"/>
-						</object>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">216</int>
-						<reference key="object" ref="972420730"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="769623530"/>
-						</object>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">200</int>
-						<reference key="object" ref="769623530"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="948374510"/>
-							<reference ref="96193923"/>
-							<reference ref="679648819"/>
-							<reference ref="967646866"/>
-							<reference ref="859480356"/>
-							<reference ref="795346622"/>
-						</object>
-						<reference key="parent" ref="972420730"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">219</int>
-						<reference key="object" ref="948374510"/>
-						<reference key="parent" ref="769623530"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">201</int>
-						<reference key="object" ref="96193923"/>
-						<reference key="parent" ref="769623530"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">204</int>
-						<reference key="object" ref="679648819"/>
-						<reference key="parent" ref="769623530"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">220</int>
-						<reference key="object" ref="963351320"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="270902937"/>
-							<reference ref="88285865"/>
-							<reference ref="159080638"/>
-							<reference ref="326711663"/>
-							<reference ref="447796847"/>
-						</object>
-						<reference key="parent" ref="892235320"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">213</int>
-						<reference key="object" ref="270902937"/>
-						<reference key="parent" ref="963351320"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">210</int>
-						<reference key="object" ref="88285865"/>
-						<reference key="parent" ref="963351320"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">221</int>
-						<reference key="object" ref="159080638"/>
-						<reference key="parent" ref="963351320"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">208</int>
-						<reference key="object" ref="326711663"/>
-						<reference key="parent" ref="963351320"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">209</int>
-						<reference key="object" ref="447796847"/>
-						<reference key="parent" ref="963351320"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">57</int>
-						<reference key="object" ref="110575045"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="238522557"/>
-							<reference ref="755159360"/>
-							<reference ref="908899353"/>
-							<reference ref="632727374"/>
-							<reference ref="646227648"/>
-							<reference ref="609285721"/>
-							<reference ref="481834944"/>
-							<reference ref="304266470"/>
-							<reference ref="1046388886"/>
-							<reference ref="1056857174"/>
-							<reference ref="342932134"/>
-						</object>
-						<reference key="parent" ref="694149608"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">58</int>
-						<reference key="object" ref="238522557"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">134</int>
-						<reference key="object" ref="755159360"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">150</int>
-						<reference key="object" ref="908899353"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">136</int>
-						<reference key="object" ref="632727374"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">144</int>
-						<reference key="object" ref="646227648"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">129</int>
-						<reference key="object" ref="609285721"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">143</int>
-						<reference key="object" ref="481834944"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">236</int>
-						<reference key="object" ref="304266470"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">131</int>
-						<reference key="object" ref="1046388886"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="752062318"/>
-						</object>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">149</int>
-						<reference key="object" ref="1056857174"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">145</int>
-						<reference key="object" ref="342932134"/>
-						<reference key="parent" ref="110575045"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">130</int>
-						<reference key="object" ref="752062318"/>
-						<reference key="parent" ref="1046388886"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">24</int>
-						<reference key="object" ref="835318025"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="299356726"/>
-							<reference ref="625202149"/>
-							<reference ref="575023229"/>
-							<reference ref="1011231497"/>
-						</object>
-						<reference key="parent" ref="713487014"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">92</int>
-						<reference key="object" ref="299356726"/>
-						<reference key="parent" ref="835318025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">5</int>
-						<reference key="object" ref="625202149"/>
-						<reference key="parent" ref="835318025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">239</int>
-						<reference key="object" ref="575023229"/>
-						<reference key="parent" ref="835318025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">23</int>
-						<reference key="object" ref="1011231497"/>
-						<reference key="parent" ref="835318025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">295</int>
-						<reference key="object" ref="586577488"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="466310130"/>
-						</object>
-						<reference key="parent" ref="649796088"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">296</int>
-						<reference key="object" ref="466310130"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="102151532"/>
-							<reference ref="237841660"/>
-						</object>
-						<reference key="parent" ref="586577488"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">297</int>
-						<reference key="object" ref="102151532"/>
-						<reference key="parent" ref="466310130"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">298</int>
-						<reference key="object" ref="237841660"/>
-						<reference key="parent" ref="466310130"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">211</int>
-						<reference key="object" ref="676164635"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="785027613"/>
-						</object>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">212</int>
-						<reference key="object" ref="785027613"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="680220178"/>
-							<reference ref="731782645"/>
-						</object>
-						<reference key="parent" ref="676164635"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">195</int>
-						<reference key="object" ref="680220178"/>
-						<reference key="parent" ref="785027613"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">196</int>
-						<reference key="object" ref="731782645"/>
-						<reference key="parent" ref="785027613"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">346</int>
-						<reference key="object" ref="967646866"/>
-						<reference key="parent" ref="769623530"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">348</int>
-						<reference key="object" ref="507821607"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="698887838"/>
-						</object>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">349</int>
-						<reference key="object" ref="698887838"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="605118523"/>
-							<reference ref="197661976"/>
-							<reference ref="708854459"/>
-							<reference ref="65139061"/>
-							<reference ref="19036812"/>
-							<reference ref="672708820"/>
-							<reference ref="537092702"/>
-						</object>
-						<reference key="parent" ref="507821607"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">350</int>
-						<reference key="object" ref="605118523"/>
-						<reference key="parent" ref="698887838"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">351</int>
-						<reference key="object" ref="197661976"/>
-						<reference key="parent" ref="698887838"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">354</int>
-						<reference key="object" ref="708854459"/>
-						<reference key="parent" ref="698887838"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">371</int>
-						<reference key="object" ref="972006081"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="439893737"/>
-						</object>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">372</int>
-						<reference key="object" ref="439893737"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-						</object>
-						<reference key="parent" ref="972006081"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">375</int>
-						<reference key="object" ref="302598603"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="941447902"/>
-						</object>
-						<reference key="parent" ref="649796088"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">376</int>
-						<reference key="object" ref="941447902"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="792887677"/>
-							<reference ref="215659978"/>
-						</object>
-						<reference key="parent" ref="302598603"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">377</int>
-						<reference key="object" ref="792887677"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="786677654"/>
-						</object>
-						<reference key="parent" ref="941447902"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">388</int>
-						<reference key="object" ref="786677654"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="159677712"/>
-							<reference ref="305399458"/>
-							<reference ref="814362025"/>
-							<reference ref="330926929"/>
-							<reference ref="533507878"/>
-							<reference ref="158063935"/>
-							<reference ref="885547335"/>
-							<reference ref="901062459"/>
-							<reference ref="767671776"/>
-							<reference ref="691570813"/>
-							<reference ref="769124883"/>
-							<reference ref="739652853"/>
-							<reference ref="1012600125"/>
-							<reference ref="214559597"/>
-							<reference ref="596732606"/>
-							<reference ref="393423671"/>
-						</object>
-						<reference key="parent" ref="792887677"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">389</int>
-						<reference key="object" ref="159677712"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">390</int>
-						<reference key="object" ref="305399458"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">391</int>
-						<reference key="object" ref="814362025"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">392</int>
-						<reference key="object" ref="330926929"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">393</int>
-						<reference key="object" ref="533507878"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">394</int>
-						<reference key="object" ref="158063935"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">395</int>
-						<reference key="object" ref="885547335"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">396</int>
-						<reference key="object" ref="901062459"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">397</int>
-						<reference key="object" ref="767671776"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="175441468"/>
-						</object>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">398</int>
-						<reference key="object" ref="691570813"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="1058217995"/>
-						</object>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">399</int>
-						<reference key="object" ref="769124883"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="18263474"/>
-						</object>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">400</int>
-						<reference key="object" ref="739652853"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">401</int>
-						<reference key="object" ref="1012600125"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">402</int>
-						<reference key="object" ref="214559597"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">403</int>
-						<reference key="object" ref="596732606"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">404</int>
-						<reference key="object" ref="393423671"/>
-						<reference key="parent" ref="786677654"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">405</int>
-						<reference key="object" ref="18263474"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="257962622"/>
-							<reference ref="644725453"/>
-							<reference ref="1037576581"/>
-							<reference ref="941806246"/>
-							<reference ref="1045724900"/>
-						</object>
-						<reference key="parent" ref="769124883"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">406</int>
-						<reference key="object" ref="257962622"/>
-						<reference key="parent" ref="18263474"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">407</int>
-						<reference key="object" ref="644725453"/>
-						<reference key="parent" ref="18263474"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">408</int>
-						<reference key="object" ref="1037576581"/>
-						<reference key="parent" ref="18263474"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">409</int>
-						<reference key="object" ref="941806246"/>
-						<reference key="parent" ref="18263474"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">410</int>
-						<reference key="object" ref="1045724900"/>
-						<reference key="parent" ref="18263474"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">411</int>
-						<reference key="object" ref="1058217995"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="706297211"/>
-							<reference ref="568384683"/>
-							<reference ref="663508465"/>
-						</object>
-						<reference key="parent" ref="691570813"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">412</int>
-						<reference key="object" ref="706297211"/>
-						<reference key="parent" ref="1058217995"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">413</int>
-						<reference key="object" ref="568384683"/>
-						<reference key="parent" ref="1058217995"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">414</int>
-						<reference key="object" ref="663508465"/>
-						<reference key="parent" ref="1058217995"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">415</int>
-						<reference key="object" ref="175441468"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="252969304"/>
-							<reference ref="766922938"/>
-							<reference ref="677519740"/>
-							<reference ref="238351151"/>
-						</object>
-						<reference key="parent" ref="767671776"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">416</int>
-						<reference key="object" ref="252969304"/>
-						<reference key="parent" ref="175441468"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">417</int>
-						<reference key="object" ref="766922938"/>
-						<reference key="parent" ref="175441468"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">418</int>
-						<reference key="object" ref="677519740"/>
-						<reference key="parent" ref="175441468"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">419</int>
-						<reference key="object" ref="238351151"/>
-						<reference key="parent" ref="175441468"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">450</int>
-						<reference key="object" ref="288088188"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="579392910"/>
-						</object>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">451</int>
-						<reference key="object" ref="579392910"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="1060694897"/>
-							<reference ref="879586729"/>
-							<reference ref="56570060"/>
-						</object>
-						<reference key="parent" ref="288088188"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">452</int>
-						<reference key="object" ref="1060694897"/>
-						<reference key="parent" ref="579392910"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">453</int>
-						<reference key="object" ref="859480356"/>
-						<reference key="parent" ref="769623530"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">454</int>
-						<reference key="object" ref="795346622"/>
-						<reference key="parent" ref="769623530"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">457</int>
-						<reference key="object" ref="65139061"/>
-						<reference key="parent" ref="698887838"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">459</int>
-						<reference key="object" ref="19036812"/>
-						<reference key="parent" ref="698887838"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">460</int>
-						<reference key="object" ref="672708820"/>
-						<reference key="parent" ref="698887838"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">462</int>
-						<reference key="object" ref="537092702"/>
-						<reference key="parent" ref="698887838"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">465</int>
-						<reference key="object" ref="879586729"/>
-						<reference key="parent" ref="579392910"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">466</int>
-						<reference key="object" ref="56570060"/>
-						<reference key="parent" ref="579392910"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">485</int>
-						<reference key="object" ref="82994268"/>
-						<reference key="parent" ref="789758025"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">490</int>
-						<reference key="object" ref="448692316"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="992780483"/>
-						</object>
-						<reference key="parent" ref="649796088"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">491</int>
-						<reference key="object" ref="992780483"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="105068016"/>
-						</object>
-						<reference key="parent" ref="448692316"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">492</int>
-						<reference key="object" ref="105068016"/>
-						<reference key="parent" ref="992780483"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">496</int>
-						<reference key="object" ref="215659978"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="446991534"/>
-						</object>
-						<reference key="parent" ref="941447902"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">497</int>
-						<reference key="object" ref="446991534"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="875092757"/>
-							<reference ref="630155264"/>
-							<reference ref="945678886"/>
-							<reference ref="512868991"/>
-							<reference ref="163117631"/>
-							<reference ref="31516759"/>
-							<reference ref="908105787"/>
-							<reference ref="644046920"/>
-							<reference ref="231811626"/>
-							<reference ref="883618387"/>
-						</object>
-						<reference key="parent" ref="215659978"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">498</int>
-						<reference key="object" ref="875092757"/>
-						<reference key="parent" ref="446991534"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">499</int>
-						<reference key="object" ref="630155264"/>
-						<reference key="parent" ref="446991534"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">500</int>
-						<reference key="object" ref="945678886"/>
-						<reference key="parent" ref="446991534"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">501</int>
-						<reference key="object" ref="512868991"/>
-						<reference key="parent" ref="446991534"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">502</int>
-						<reference key="object" ref="163117631"/>
-						<reference key="parent" ref="446991534"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">503</int>
-						<reference key="object" ref="31516759"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="956096989"/>
-						</object>
-						<reference key="parent" ref="446991534"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">504</int>
-						<reference key="object" ref="908105787"/>
-						<reference key="parent" ref="446991534"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">505</int>
-						<reference key="object" ref="644046920"/>
-						<reference key="parent" ref="446991534"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">506</int>
-						<reference key="object" ref="231811626"/>
-						<reference key="parent" ref="446991534"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">507</int>
-						<reference key="object" ref="883618387"/>
-						<reference key="parent" ref="446991534"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">508</int>
-						<reference key="object" ref="956096989"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="257099033"/>
-							<reference ref="551969625"/>
-							<reference ref="249532473"/>
-							<reference ref="607364498"/>
-							<reference ref="508151438"/>
-							<reference ref="981751889"/>
-							<reference ref="380031999"/>
-							<reference ref="825984362"/>
-							<reference ref="560145579"/>
-						</object>
-						<reference key="parent" ref="31516759"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">509</int>
-						<reference key="object" ref="257099033"/>
-						<reference key="parent" ref="956096989"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">510</int>
-						<reference key="object" ref="551969625"/>
-						<reference key="parent" ref="956096989"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">511</int>
-						<reference key="object" ref="249532473"/>
-						<reference key="parent" ref="956096989"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">512</int>
-						<reference key="object" ref="607364498"/>
-						<reference key="parent" ref="956096989"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">513</int>
-						<reference key="object" ref="508151438"/>
-						<reference key="parent" ref="956096989"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">514</int>
-						<reference key="object" ref="981751889"/>
-						<reference key="parent" ref="956096989"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">515</int>
-						<reference key="object" ref="380031999"/>
-						<reference key="parent" ref="956096989"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">516</int>
-						<reference key="object" ref="825984362"/>
-						<reference key="parent" ref="956096989"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">517</int>
-						<reference key="object" ref="560145579"/>
-						<reference key="parent" ref="956096989"/>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="flattenedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>-3.IBPluginDependency</string>
-					<string>112.IBPluginDependency</string>
-					<string>112.ImportedFromIB2</string>
-					<string>124.IBPluginDependency</string>
-					<string>124.ImportedFromIB2</string>
-					<string>125.IBPluginDependency</string>
-					<string>125.ImportedFromIB2</string>
-					<string>125.editorWindowContentRectSynchronizationRect</string>
-					<string>126.IBPluginDependency</string>
-					<string>126.ImportedFromIB2</string>
-					<string>129.IBPluginDependency</string>
-					<string>129.ImportedFromIB2</string>
-					<string>130.IBPluginDependency</string>
-					<string>130.ImportedFromIB2</string>
-					<string>130.editorWindowContentRectSynchronizationRect</string>
-					<string>131.IBPluginDependency</string>
-					<string>131.ImportedFromIB2</string>
-					<string>134.IBPluginDependency</string>
-					<string>134.ImportedFromIB2</string>
-					<string>136.IBPluginDependency</string>
-					<string>136.ImportedFromIB2</string>
-					<string>143.IBPluginDependency</string>
-					<string>143.ImportedFromIB2</string>
-					<string>144.IBPluginDependency</string>
-					<string>144.ImportedFromIB2</string>
-					<string>145.IBPluginDependency</string>
-					<string>145.ImportedFromIB2</string>
-					<string>149.IBPluginDependency</string>
-					<string>149.ImportedFromIB2</string>
-					<string>150.IBPluginDependency</string>
-					<string>150.ImportedFromIB2</string>
-					<string>19.IBPluginDependency</string>
-					<string>19.ImportedFromIB2</string>
-					<string>195.IBPluginDependency</string>
-					<string>195.ImportedFromIB2</string>
-					<string>196.IBPluginDependency</string>
-					<string>196.ImportedFromIB2</string>
-					<string>197.IBPluginDependency</string>
-					<string>197.ImportedFromIB2</string>
-					<string>198.IBPluginDependency</string>
-					<string>198.ImportedFromIB2</string>
-					<string>199.IBPluginDependency</string>
-					<string>199.ImportedFromIB2</string>
-					<string>200.IBEditorWindowLastContentRect</string>
-					<string>200.IBPluginDependency</string>
-					<string>200.ImportedFromIB2</string>
-					<string>200.editorWindowContentRectSynchronizationRect</string>
-					<string>201.IBPluginDependency</string>
-					<string>201.ImportedFromIB2</string>
-					<string>202.IBPluginDependency</string>
-					<string>202.ImportedFromIB2</string>
-					<string>203.IBPluginDependency</string>
-					<string>203.ImportedFromIB2</string>
-					<string>204.IBPluginDependency</string>
-					<string>204.ImportedFromIB2</string>
-					<string>205.IBEditorWindowLastContentRect</string>
-					<string>205.IBPluginDependency</string>
-					<string>205.ImportedFromIB2</string>
-					<string>205.editorWindowContentRectSynchronizationRect</string>
-					<string>206.IBPluginDependency</string>
-					<string>206.ImportedFromIB2</string>
-					<string>207.IBPluginDependency</string>
-					<string>207.ImportedFromIB2</string>
-					<string>208.IBPluginDependency</string>
-					<string>208.ImportedFromIB2</string>
-					<string>209.IBPluginDependency</string>
-					<string>209.ImportedFromIB2</string>
-					<string>210.IBPluginDependency</string>
-					<string>210.ImportedFromIB2</string>
-					<string>211.IBPluginDependency</string>
-					<string>211.ImportedFromIB2</string>
-					<string>212.IBPluginDependency</string>
-					<string>212.ImportedFromIB2</string>
-					<string>212.editorWindowContentRectSynchronizationRect</string>
-					<string>213.IBPluginDependency</string>
-					<string>213.ImportedFromIB2</string>
-					<string>214.IBPluginDependency</string>
-					<string>214.ImportedFromIB2</string>
-					<string>215.IBPluginDependency</string>
-					<string>215.ImportedFromIB2</string>
-					<string>216.IBPluginDependency</string>
-					<string>216.ImportedFromIB2</string>
-					<string>217.IBPluginDependency</string>
-					<string>217.ImportedFromIB2</string>
-					<string>218.IBPluginDependency</string>
-					<string>218.ImportedFromIB2</string>
-					<string>219.IBPluginDependency</string>
-					<string>219.ImportedFromIB2</string>
-					<string>220.IBEditorWindowLastContentRect</string>
-					<string>220.IBPluginDependency</string>
-					<string>220.ImportedFromIB2</string>
-					<string>220.editorWindowContentRectSynchronizationRect</string>
-					<string>221.IBPluginDependency</string>
-					<string>221.ImportedFromIB2</string>
-					<string>23.IBPluginDependency</string>
-					<string>23.ImportedFromIB2</string>
-					<string>236.IBPluginDependency</string>
-					<string>236.ImportedFromIB2</string>
-					<string>239.IBPluginDependency</string>
-					<string>239.ImportedFromIB2</string>
-					<string>24.IBEditorWindowLastContentRect</string>
-					<string>24.IBPluginDependency</string>
-					<string>24.ImportedFromIB2</string>
-					<string>24.editorWindowContentRectSynchronizationRect</string>
-					<string>29.IBEditorWindowLastContentRect</string>
-					<string>29.IBPluginDependency</string>
-					<string>29.ImportedFromIB2</string>
-					<string>29.WindowOrigin</string>
-					<string>29.editorWindowContentRectSynchronizationRect</string>
-					<string>295.IBPluginDependency</string>
-					<string>296.IBEditorWindowLastContentRect</string>
-					<string>296.IBPluginDependency</string>
-					<string>296.editorWindowContentRectSynchronizationRect</string>
-					<string>297.IBPluginDependency</string>
-					<string>298.IBPluginDependency</string>
-					<string>346.IBPluginDependency</string>
-					<string>346.ImportedFromIB2</string>
-					<string>348.IBPluginDependency</string>
-					<string>348.ImportedFromIB2</string>
-					<string>349.IBEditorWindowLastContentRect</string>
-					<string>349.IBPluginDependency</string>
-					<string>349.ImportedFromIB2</string>
-					<string>349.editorWindowContentRectSynchronizationRect</string>
-					<string>350.IBPluginDependency</string>
-					<string>350.ImportedFromIB2</string>
-					<string>351.IBPluginDependency</string>
-					<string>351.ImportedFromIB2</string>
-					<string>354.IBPluginDependency</string>
-					<string>354.ImportedFromIB2</string>
-					<string>371.IBEditorWindowLastContentRect</string>
-					<string>371.IBPluginDependency</string>
-					<string>371.IBWindowTemplateEditedContentRect</string>
-					<string>371.NSWindowTemplate.visibleAtLaunch</string>
-					<string>371.editorWindowContentRectSynchronizationRect</string>
-					<string>371.windowTemplate.maxSize</string>
-					<string>371.windowTemplate.minSize</string>
-					<string>372.CustomClassName</string>
-					<string>372.IBPluginDependency</string>
-					<string>375.IBPluginDependency</string>
-					<string>376.IBEditorWindowLastContentRect</string>
-					<string>376.IBPluginDependency</string>
-					<string>377.IBPluginDependency</string>
-					<string>388.IBEditorWindowLastContentRect</string>
-					<string>388.IBPluginDependency</string>
-					<string>389.IBPluginDependency</string>
-					<string>390.IBPluginDependency</string>
-					<string>391.IBPluginDependency</string>
-					<string>392.IBPluginDependency</string>
-					<string>393.IBPluginDependency</string>
-					<string>394.IBPluginDependency</string>
-					<string>395.IBPluginDependency</string>
-					<string>396.IBPluginDependency</string>
-					<string>397.IBPluginDependency</string>
-					<string>398.IBPluginDependency</string>
-					<string>399.IBPluginDependency</string>
-					<string>400.IBPluginDependency</string>
-					<string>401.IBPluginDependency</string>
-					<string>402.IBPluginDependency</string>
-					<string>403.IBPluginDependency</string>
-					<string>404.IBPluginDependency</string>
-					<string>405.IBPluginDependency</string>
-					<string>406.IBPluginDependency</string>
-					<string>407.IBPluginDependency</string>
-					<string>408.IBPluginDependency</string>
-					<string>409.IBPluginDependency</string>
-					<string>410.IBPluginDependency</string>
-					<string>411.IBPluginDependency</string>
-					<string>412.IBPluginDependency</string>
-					<string>413.IBPluginDependency</string>
-					<string>414.IBPluginDependency</string>
-					<string>415.IBPluginDependency</string>
-					<string>416.IBPluginDependency</string>
-					<string>417.IBPluginDependency</string>
-					<string>418.IBPluginDependency</string>
-					<string>419.IBPluginDependency</string>
-					<string>450.IBPluginDependency</string>
-					<string>451.IBEditorWindowLastContentRect</string>
-					<string>451.IBPluginDependency</string>
-					<string>452.IBPluginDependency</string>
-					<string>453.IBPluginDependency</string>
-					<string>454.IBPluginDependency</string>
-					<string>457.IBPluginDependency</string>
-					<string>459.IBPluginDependency</string>
-					<string>460.IBPluginDependency</string>
-					<string>462.IBPluginDependency</string>
-					<string>465.IBPluginDependency</string>
-					<string>466.IBPluginDependency</string>
-					<string>485.IBPluginDependency</string>
-					<string>490.IBPluginDependency</string>
-					<string>491.IBEditorWindowLastContentRect</string>
-					<string>491.IBPluginDependency</string>
-					<string>492.IBPluginDependency</string>
-					<string>496.IBPluginDependency</string>
-					<string>497.IBEditorWindowLastContentRect</string>
-					<string>497.IBPluginDependency</string>
-					<string>498.IBPluginDependency</string>
-					<string>499.IBPluginDependency</string>
-					<string>5.IBPluginDependency</string>
-					<string>5.ImportedFromIB2</string>
-					<string>500.IBPluginDependency</string>
-					<string>501.IBPluginDependency</string>
-					<string>502.IBPluginDependency</string>
-					<string>503.IBPluginDependency</string>
-					<string>504.IBPluginDependency</string>
-					<string>505.IBPluginDependency</string>
-					<string>506.IBPluginDependency</string>
-					<string>507.IBPluginDependency</string>
-					<string>508.IBEditorWindowLastContentRect</string>
-					<string>508.IBPluginDependency</string>
-					<string>509.IBPluginDependency</string>
-					<string>510.IBPluginDependency</string>
-					<string>511.IBPluginDependency</string>
-					<string>512.IBPluginDependency</string>
-					<string>513.IBPluginDependency</string>
-					<string>514.IBPluginDependency</string>
-					<string>515.IBPluginDependency</string>
-					<string>516.IBPluginDependency</string>
-					<string>517.IBPluginDependency</string>
-					<string>56.IBPluginDependency</string>
-					<string>56.ImportedFromIB2</string>
-					<string>57.IBEditorWindowLastContentRect</string>
-					<string>57.IBPluginDependency</string>
-					<string>57.ImportedFromIB2</string>
-					<string>57.editorWindowContentRectSynchronizationRect</string>
-					<string>58.IBPluginDependency</string>
-					<string>58.ImportedFromIB2</string>
-					<string>72.IBPluginDependency</string>
-					<string>72.ImportedFromIB2</string>
-					<string>73.IBPluginDependency</string>
-					<string>73.ImportedFromIB2</string>
-					<string>74.IBPluginDependency</string>
-					<string>74.ImportedFromIB2</string>
-					<string>75.IBPluginDependency</string>
-					<string>75.ImportedFromIB2</string>
-					<string>77.IBPluginDependency</string>
-					<string>77.ImportedFromIB2</string>
-					<string>78.IBPluginDependency</string>
-					<string>78.ImportedFromIB2</string>
-					<string>79.IBPluginDependency</string>
-					<string>79.ImportedFromIB2</string>
-					<string>80.IBPluginDependency</string>
-					<string>80.ImportedFromIB2</string>
-					<string>81.IBEditorWindowLastContentRect</string>
-					<string>81.IBPluginDependency</string>
-					<string>81.ImportedFromIB2</string>
-					<string>81.editorWindowContentRectSynchronizationRect</string>
-					<string>82.IBPluginDependency</string>
-					<string>82.ImportedFromIB2</string>
-					<string>83.IBPluginDependency</string>
-					<string>83.ImportedFromIB2</string>
-					<string>92.IBPluginDependency</string>
-					<string>92.ImportedFromIB2</string>
-				</object>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{522, 812}, {146, 23}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{436, 809}, {64, 6}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{753, 187}, {275, 113}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{608, 612}, {275, 83}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{559, 374}, {254, 283}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{187, 434}, {243, 243}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{608, 612}, {167, 43}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{753, 217}, {238, 103}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{608, 612}, {241, 103}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{719, 584}, {194, 73}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{525, 802}, {197, 73}}</string>
-					<string>{{366, 657}, {485, 20}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{74, 862}</string>
-					<string>{{6, 978}, {478, 20}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{669, 614}, {231, 43}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{475, 832}, {234, 43}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{746, 287}, {220, 133}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{608, 612}, {215, 63}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{228, 569}, {480, 360}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{228, 569}, {480, 360}}</string>
-					<integer value="1"/>
-					<string>{{33, 99}, {480, 360}}</string>
-					<string>{3.40282e+38, 3.40282e+38}</string>
-					<string>{0, 0}</string>
-					<string>SimpleNSView</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{603, 614}, {83, 43}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{523, 2}, {178, 283}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{753, 197}, {170, 63}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{790, 634}, {221, 23}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{674, 260}, {204, 183}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>{{878, 180}, {164, 173}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{378, 474}, {250, 183}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{23, 794}, {245, 183}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{517, 454}, {196, 203}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>{{145, 474}, {199, 203}}</string>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-					<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
-					<integer value="1"/>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="unlocalizedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="activeLocalization"/>
-			<object class="NSMutableDictionary" key="localizations">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="sourceID"/>
-			<int key="maxID">650</int>
-		</object>
-		<object class="IBClassDescriber" key="IBDocument.Classes">
-			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">SimpleNSView</string>
-					<string key="superclassName">SkNSView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">../../experimental/SimpleCocoaApp/SimpleApp.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">SkNSView</string>
-					<string key="superclassName">NSView</string>
-					<object class="NSMutableDictionary" key="outlets">
-						<string key="NS.key.0">fOptionsDelegate</string>
-						<string key="NS.object.0">id</string>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<string key="NS.key.0">fOptionsDelegate</string>
-						<object class="IBToOneOutletInfo" key="NS.object.0">
-							<string key="name">fOptionsDelegate</string>
-							<string key="candidateClassName">id</string>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">../../src/utils/mac/SkNSView.h</string>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSFormatter</string>
-					<string key="superclassName">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSFormatter.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">PrintCore.framework/Headers/PDEPluginInterface.h</string>
-					</object>
-				</object>
-			</object>
-		</object>
-		<int key="IBDocument.localizationMode">0</int>
-		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
-			<integer value="3000" key="NS.object.0"/>
-		</object>
-		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
-		<string key="IBDocument.LastKnownRelativeProjectPath">../../../out/gyp/SimpleCocoaApp.xcodeproj</string>
-		<int key="IBDocument.defaultPropertyAccessControl">3</int>
-		<object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<string>NSMenuCheckmark</string>
-				<string>NSMenuMixedState</string>
-			</object>
-			<object class="NSMutableArray" key="dict.values">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<string>{9, 8}</string>
-				<string>{7, 2}</string>
-			</object>
-		</object>
-	</data>
-</archive>
diff --git a/src/third_party/skia/experimental/SimpleiOSApp/SimpleApp.h b/src/third_party/skia/experimental/SimpleiOSApp/SimpleApp.h
deleted file mode 100644
index 392353b..0000000
--- a/src/third_party/skia/experimental/SimpleiOSApp/SimpleApp.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#import <UIKit/UIKit.h>
-#import "SkUIView.h"
-
-@interface SimpleApp : SkUIView
-- (id)initWithDefaults;
-@end
diff --git a/src/third_party/skia/experimental/SimpleiOSApp/SimpleApp.mm b/src/third_party/skia/experimental/SimpleiOSApp/SimpleApp.mm
deleted file mode 100644
index 123449f..0000000
--- a/src/third_party/skia/experimental/SimpleiOSApp/SimpleApp.mm
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "SkApplication.h"
-#import "SkCanvas.h"
-#import "SkPaint.h"
-#import "SkWindow.h"
-#include "SkGraphics.h"
-#include "SkCGUtils.h"
-
-void dummy_main(int , char *[]) {
-}
-
-class SkSampleView : public SkView {
-public:
-    SkSampleView() {
-        this->setVisibleP(true);
-        this->setClipToBounds(false);
-    };
-protected:
-    virtual void onDraw(SkCanvas* canvas) {
-        canvas->drawColor(0xFFFFFFFF);
-        SkPaint p;
-        p.setTextSize(20);
-        p.setAntiAlias(true);
-        canvas->drawText("finished", 13, 50, 30, p);
-        SkRect r = {50, 50, 80, 80};
-        p.setColor(0xAA11EEAA);
-        canvas->drawRect(r, p);
-    }
-private:
-    typedef SkView INHERITED;
-};
-
-void application_init() {
-    SkGraphics::Init();
-    SkEvent::Init();
-}
-
-void application_term() {
-    SkEvent::Term();
-}
-
-int saved_argc;
-char** saved_argv;
-
-IOS_launch_type set_cmd_line_args(int argc, char *argv[], const char* ) {
-    saved_argc = argc;
-    saved_argv = argv;
-    return kTool_iOSLaunchType;
-}
-
-class FillLayout : public SkView::Layout {
-protected:
-    virtual void onLayoutChildren(SkView* parent) {
-        SkView* view = SkView::F2BIter(parent).next();
-        view->setSize(parent->width(), parent->height());
-    }
-};
-
-#import "SimpleApp.h"
-@implementation SimpleApp
-
-- (id)initWithDefaults {
-    dummy_main(saved_argc, saved_argv);
-    if (self = [super initWithDefaults]) {
-        fWind = new SkOSWindow(self);
-        fWind->setLayout(new FillLayout, false);
-        fWind->attachChildToFront(new SkSampleView)->unref();
-    }
-    return self;
-}
-
-@end
diff --git a/src/third_party/skia/experimental/SimpleiOSApp/SimpleiOSApp-Info.plist b/src/third_party/skia/experimental/SimpleiOSApp/SimpleiOSApp-Info.plist
deleted file mode 100644
index da6b2f1..0000000
--- a/src/third_party/skia/experimental/SimpleiOSApp/SimpleiOSApp-Info.plist
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleDisplayName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIconFile</key>
-	<string></string>
-	<key>CFBundleIdentifier</key>
-	<string>com.yourcompany.${PRODUCT_NAME:rfc1034identifier}</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>LSRequiresIPhoneOS</key>
-	<true/>
-	<key>NSMainNibFile</key>
-	<string>MainWindow_iPhone</string>
-	<key>NSMainNibFile~ipad</key>
-	<string>MainWindow_iPad</string>
-	<key>UISupportedInterfaceOrientations</key>
-	<array>
-		<string>UIInterfaceOrientationPortrait</string>
-	</array>
-	<key>UISupportedInterfaceOrientations~ipad</key>
-	<array>
-		<string>UIInterfaceOrientationPortrait</string>
-		<string>UIInterfaceOrientationPortraitUpsideDown</string>
-		<string>UIInterfaceOrientationLandscapeLeft</string>
-		<string>UIInterfaceOrientationLandscapeRight</string>
-	</array>
-</dict>
-</plist>
diff --git a/src/third_party/skia/experimental/SimpleiOSApp/SimpleiOSApp_Prefix.pch b/src/third_party/skia/experimental/SimpleiOSApp/SimpleiOSApp_Prefix.pch
deleted file mode 100644
index 0791950..0000000
--- a/src/third_party/skia/experimental/SimpleiOSApp/SimpleiOSApp_Prefix.pch
+++ /dev/null
@@ -1,8 +0,0 @@
-//
-// Prefix header for all source files of the 'iosshell' target in the 'iosshell' project
-//
-
-#ifdef __OBJC__
-    #import <Foundation/Foundation.h>
-    #import <UIKit/UIKit.h>
-#endif
diff --git a/src/third_party/skia/experimental/SimpleiOSApp/iPad/AppDelegate_iPad.h b/src/third_party/skia/experimental/SimpleiOSApp/iPad/AppDelegate_iPad.h
deleted file mode 100644
index 844d953..0000000
--- a/src/third_party/skia/experimental/SimpleiOSApp/iPad/AppDelegate_iPad.h
+++ /dev/null
@@ -1,17 +0,0 @@
-//
-//  AppDelegate_iPad.h
-//  iosshell
-//
-//  Created by Yang Su on 6/30/11.
-//  Copyright 2011 Google Inc. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-@interface AppDelegate_iPad : NSObject <UIApplicationDelegate> {
-    UIWindow *window;
-}
-
-@property (nonatomic, retain) IBOutlet UIWindow *window;
-
-@end
diff --git a/src/third_party/skia/experimental/SimpleiOSApp/iPad/AppDelegate_iPad.m b/src/third_party/skia/experimental/SimpleiOSApp/iPad/AppDelegate_iPad.m
deleted file mode 100644
index 1792658..0000000
--- a/src/third_party/skia/experimental/SimpleiOSApp/iPad/AppDelegate_iPad.m
+++ /dev/null
@@ -1,67 +0,0 @@
-//
-//  AppDelegate_iPad.m
-//  iosshell
-//
-//  Created by Yang Su on 6/30/11.
-//  Copyright 2011 Google Inc. All rights reserved.
-//
-
-#import "AppDelegate_iPad.h"
-
-@implementation AppDelegate_iPad
-
-@synthesize window;
-
-
-#pragma mark -
-#pragma mark Application lifecycle
-
-- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
-    
-    // Override point for customization after application launch.
-    
-    [self.window makeKeyAndVisible];
-    
-    return YES;
-}
-
-
-- (void)applicationWillResignActive:(UIApplication *)application {
-    /*
-     Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
-     Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
-     */
-}
-
-
-- (void)applicationDidBecomeActive:(UIApplication *)application {
-    /*
-     Restart any tasks that were paused (or not yet started) while the application was inactive.
-     */
-}
-
-
-- (void)applicationWillTerminate:(UIApplication *)application {
-    /*
-     Called when the application is about to terminate.
-     */
-}
-
-
-#pragma mark -
-#pragma mark Memory management
-
-- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
-    /*
-     Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later.
-     */
-}
-
-
-- (void)dealloc {
-    [window release];
-    [super dealloc];
-}
-
-
-@end
diff --git a/src/third_party/skia/experimental/SimpleiOSApp/iPad/MainWindow_iPad.xib b/src/third_party/skia/experimental/SimpleiOSApp/iPad/MainWindow_iPad.xib
deleted file mode 100644
index a5348b8..0000000
--- a/src/third_party/skia/experimental/SimpleiOSApp/iPad/MainWindow_iPad.xib
+++ /dev/null
@@ -1,439 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="7.10">
-	<data>
-		<int key="IBDocument.SystemTarget">1056</int>
-		<string key="IBDocument.SystemVersion">10K540</string>
-		<string key="IBDocument.InterfaceBuilderVersion">851</string>
-		<string key="IBDocument.AppKitVersion">1038.36</string>
-		<string key="IBDocument.HIToolboxVersion">461.00</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-			<string key="NS.object.0">141</string>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-		</object>
-		<object class="NSArray" key="IBDocument.PluginDependencies">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.Metadata">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys" id="0">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-			<object class="NSMutableArray" key="dict.values">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="IBProxyObject" id="841351856">
-				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
-				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-			</object>
-			<object class="IBProxyObject" id="606714003">
-				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
-				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-			</object>
-			<object class="IBUIWindow" id="62075450">
-				<nil key="NSNextResponder"/>
-				<int key="NSvFlags">292</int>
-				<object class="NSMutableArray" key="NSSubviews">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBUIView" id="470150200">
-						<reference key="NSNextResponder" ref="62075450"/>
-						<int key="NSvFlags">274</int>
-						<string key="NSFrame">{{0, 10}, {768, 1004}}</string>
-						<reference key="NSSuperview" ref="62075450"/>
-						<object class="NSColor" key="IBUIBackgroundColor">
-							<int key="NSColorSpace">3</int>
-							<bytes key="NSWhite">MQA</bytes>
-							<object class="NSColorSpace" key="NSCustomColorSpace">
-								<int key="NSID">2</int>
-							</object>
-						</object>
-						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-					</object>
-				</object>
-				<string key="NSFrameSize">{768, 1024}</string>
-				<object class="NSColor" key="IBUIBackgroundColor">
-					<int key="NSColorSpace">1</int>
-					<bytes key="NSRGB">MSAxIDEAA</bytes>
-				</object>
-				<bool key="IBUIOpaque">NO</bool>
-				<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
-				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics">
-					<int key="IBUIStatusBarStyle">2</int>
-				</object>
-				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-				<bool key="IBUIResizesToFullScreen">YES</bool>
-			</object>
-			<object class="IBUICustomObject" id="250404236">
-				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-			</object>
-		</object>
-		<object class="IBObjectContainer" key="IBDocument.Objects">
-			<object class="NSMutableArray" key="connectionRecords">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">window</string>
-						<reference key="source" ref="250404236"/>
-						<reference key="destination" ref="62075450"/>
-					</object>
-					<int key="connectionID">7</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">delegate</string>
-						<reference key="source" ref="841351856"/>
-						<reference key="destination" ref="250404236"/>
-					</object>
-					<int key="connectionID">8</int>
-				</object>
-			</object>
-			<object class="IBMutableOrderedSet" key="objectRecords">
-				<object class="NSArray" key="orderedObjects">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBObjectRecord">
-						<int key="objectID">0</int>
-						<reference key="object" ref="0"/>
-						<reference key="children" ref="1000"/>
-						<nil key="parent"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-1</int>
-						<reference key="object" ref="841351856"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">File's Owner</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-2</int>
-						<reference key="object" ref="606714003"/>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">2</int>
-						<reference key="object" ref="62075450"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="470150200"/>
-						</object>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">6</int>
-						<reference key="object" ref="250404236"/>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">10</int>
-						<reference key="object" ref="470150200"/>
-						<reference key="parent" ref="62075450"/>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="flattenedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>-1.CustomClassName</string>
-					<string>-2.CustomClassName</string>
-					<string>10.CustomClassName</string>
-					<string>10.IBPluginDependency</string>
-					<string>10.IBViewBoundsToFrameTransform</string>
-					<string>2.IBEditorWindowLastContentRect</string>
-					<string>2.IBPluginDependency</string>
-					<string>6.CustomClassName</string>
-					<string>6.IBPluginDependency</string>
-				</object>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>UIApplication</string>
-					<string>UIResponder</string>
-					<string>SimpleApp</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAAAAAAAAxHqAAA</bytes>
-					</object>
-					<string>{{903, 55}, {768, 1024}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>AppDelegate_iPad</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="unlocalizedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="activeLocalization"/>
-			<object class="NSMutableDictionary" key="localizations">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="sourceID"/>
-			<int key="maxID">12</int>
-		</object>
-		<object class="IBClassDescriber" key="IBDocument.Classes">
-			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">AppDelegate_iPad</string>
-					<string key="superclassName">NSObject</string>
-					<object class="NSMutableDictionary" key="outlets">
-						<string key="NS.key.0">window</string>
-						<string key="NS.object.0">UIWindow</string>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<string key="NS.key.0">window</string>
-						<object class="IBToOneOutletInfo" key="NS.object.0">
-							<string key="name">window</string>
-							<string key="candidateClassName">UIWindow</string>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">iPad/AppDelegate_iPad.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">SimpleApp</string>
-					<string key="superclassName">SkUIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">SimpleApp.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">SkUIView</string>
-					<string key="superclassName">UIView</string>
-					<object class="NSMutableDictionary" key="outlets">
-						<string key="NS.key.0">fOptionsDelegate</string>
-						<string key="NS.object.0">id</string>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<string key="NS.key.0">fOptionsDelegate</string>
-						<object class="IBToOneOutletInfo" key="NS.object.0">
-							<string key="name">fOptionsDelegate</string>
-							<string key="candidateClassName">id</string>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">../iOSSampleApp/Shared/SkUIView.h</string>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIAccessibility.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINibLoading.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="786211723">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIResponder.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIApplication</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIApplication.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIResponder</string>
-					<string key="superclassName">NSObject</string>
-					<reference key="sourceIdentifier" ref="786211723"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISearchBar</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISearchBar.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISearchDisplayController</string>
-					<string key="superclassName">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISearchDisplayController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPrintFormatter.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITextField.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINavigationController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPopoverController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISplitViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITabBarController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIWindow</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIWindow.h</string>
-					</object>
-				</object>
-			</object>
-		</object>
-		<int key="IBDocument.localizationMode">0</int>
-		<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
-			<integer value="1056" key="NS.object.0"/>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
-			<integer value="3100" key="NS.object.0"/>
-		</object>
-		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
-		<string key="IBDocument.LastKnownRelativeProjectPath">../SimpleiOSApp.xcodeproj</string>
-		<int key="IBDocument.defaultPropertyAccessControl">3</int>
-		<string key="IBCocoaTouchPluginVersion">141</string>
-	</data>
-</archive>
diff --git a/src/third_party/skia/experimental/SimpleiOSApp/iPhone/AppDelegate_iPhone.h b/src/third_party/skia/experimental/SimpleiOSApp/iPhone/AppDelegate_iPhone.h
deleted file mode 100644
index e7e7b84..0000000
--- a/src/third_party/skia/experimental/SimpleiOSApp/iPhone/AppDelegate_iPhone.h
+++ /dev/null
@@ -1,17 +0,0 @@
-//
-//  AppDelegate_iPhone.h
-//  iosshell
-//
-//  Created by Yang Su on 6/30/11.
-//  Copyright 2011 Google Inc. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-@interface AppDelegate_iPhone : NSObject <UIApplicationDelegate> {
-    UIWindow *window;
-}
-
-@property (nonatomic, retain) IBOutlet UIWindow *window;
-
-@end
diff --git a/src/third_party/skia/experimental/SimpleiOSApp/iPhone/AppDelegate_iPhone.m b/src/third_party/skia/experimental/SimpleiOSApp/iPhone/AppDelegate_iPhone.m
deleted file mode 100644
index dcf14f2..0000000
--- a/src/third_party/skia/experimental/SimpleiOSApp/iPhone/AppDelegate_iPhone.m
+++ /dev/null
@@ -1,83 +0,0 @@
-//
-//  AppDelegate_iPhone.m
-//  iosshell
-//
-//  Created by Yang Su on 6/30/11.
-//  Copyright 2011 Google Inc. All rights reserved.
-//
-
-#import "AppDelegate_iPhone.h"
-
-@implementation AppDelegate_iPhone
-
-@synthesize window;
-
-
-#pragma mark -
-#pragma mark Application lifecycle
-
-- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
-    
-    // Override point for customization after application launch.
-    
-    [self.window makeKeyAndVisible];
-    
-    return YES;
-}
-
-
-- (void)applicationWillResignActive:(UIApplication *)application {
-    /*
-     Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
-     Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
-     */
-}
-
-
-- (void)applicationDidEnterBackground:(UIApplication *)application {
-    /*
-     Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
-     If your application supports background execution, called instead of applicationWillTerminate: when the user quits.
-     */
-}
-
-
-- (void)applicationWillEnterForeground:(UIApplication *)application {
-    /*
-     Called as part of  transition from the background to the inactive state: here you can undo many of the changes made on entering the background.
-     */
-}
-
-
-- (void)applicationDidBecomeActive:(UIApplication *)application {
-    /*
-     Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
-     */
-}
-
-
-- (void)applicationWillTerminate:(UIApplication *)application {
-    /*
-     Called when the application is about to terminate.
-     See also applicationDidEnterBackground:.
-     */
-}
-
-
-#pragma mark -
-#pragma mark Memory management
-
-- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
-    /*
-     Free up as much memory as possible by purging cached data objects that can be recreated (or reloaded from disk) later.
-     */
-}
-
-
-- (void)dealloc {
-    [window release];
-    [super dealloc];
-}
-
-
-@end
diff --git a/src/third_party/skia/experimental/SimpleiOSApp/iPhone/MainWindow_iPhone.xib b/src/third_party/skia/experimental/SimpleiOSApp/iPhone/MainWindow_iPhone.xib
deleted file mode 100644
index 1bd5b56..0000000
--- a/src/third_party/skia/experimental/SimpleiOSApp/iPhone/MainWindow_iPhone.xib
+++ /dev/null
@@ -1,449 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
-	<data>
-		<int key="IBDocument.SystemTarget">1056</int>
-		<string key="IBDocument.SystemVersion">10K540</string>
-		<string key="IBDocument.InterfaceBuilderVersion">851</string>
-		<string key="IBDocument.AppKitVersion">1038.36</string>
-		<string key="IBDocument.HIToolboxVersion">461.00</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-			<string key="NS.object.0">141</string>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-		</object>
-		<object class="NSArray" key="IBDocument.PluginDependencies">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.Metadata">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys" id="0">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-			<object class="NSMutableArray" key="dict.values">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="IBProxyObject" id="841351856">
-				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-			</object>
-			<object class="IBProxyObject" id="450319686">
-				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-			</object>
-			<object class="IBUICustomObject" id="987256611">
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-			</object>
-			<object class="IBUIWindow" id="380026005">
-				<nil key="NSNextResponder"/>
-				<int key="NSvFlags">1316</int>
-				<object class="NSMutableArray" key="NSSubviews">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBUIView" id="268100401">
-						<reference key="NSNextResponder" ref="380026005"/>
-						<int key="NSvFlags">292</int>
-						<string key="NSFrame">{{0, 10}, {320, 460}}</string>
-						<reference key="NSSuperview" ref="380026005"/>
-						<object class="NSColor" key="IBUIBackgroundColor">
-							<int key="NSColorSpace">3</int>
-							<bytes key="NSWhite">MQA</bytes>
-							<object class="NSColorSpace" key="NSCustomColorSpace">
-								<int key="NSID">2</int>
-							</object>
-						</object>
-						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-					</object>
-				</object>
-				<object class="NSPSMatrix" key="NSFrameMatrix"/>
-				<string key="NSFrameSize">{320, 480}</string>
-				<object class="NSColor" key="IBUIBackgroundColor">
-					<int key="NSColorSpace">1</int>
-					<bytes key="NSRGB">MSAxIDEAA</bytes>
-				</object>
-				<bool key="IBUIOpaque">NO</bool>
-				<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
-				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-				<bool key="IBUIResizesToFullScreen">YES</bool>
-			</object>
-		</object>
-		<object class="IBObjectContainer" key="IBDocument.Objects">
-			<object class="NSMutableArray" key="connectionRecords">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">delegate</string>
-						<reference key="source" ref="841351856"/>
-						<reference key="destination" ref="987256611"/>
-					</object>
-					<int key="connectionID">5</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">window</string>
-						<reference key="source" ref="987256611"/>
-						<reference key="destination" ref="380026005"/>
-					</object>
-					<int key="connectionID">6</int>
-				</object>
-			</object>
-			<object class="IBMutableOrderedSet" key="objectRecords">
-				<object class="NSArray" key="orderedObjects">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBObjectRecord">
-						<int key="objectID">0</int>
-						<reference key="object" ref="0"/>
-						<reference key="children" ref="1000"/>
-						<nil key="parent"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">2</int>
-						<reference key="object" ref="380026005"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="268100401"/>
-						</object>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-1</int>
-						<reference key="object" ref="841351856"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">File's Owner</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">4</int>
-						<reference key="object" ref="987256611"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">App Delegate</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-2</int>
-						<reference key="object" ref="450319686"/>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">12</int>
-						<reference key="object" ref="268100401"/>
-						<reference key="parent" ref="380026005"/>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="flattenedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>-1.CustomClassName</string>
-					<string>-2.CustomClassName</string>
-					<string>12.CustomClassName</string>
-					<string>12.IBPluginDependency</string>
-					<string>12.IBViewBoundsToFrameTransform</string>
-					<string>2.IBAttributePlaceholdersKey</string>
-					<string>2.IBEditorWindowLastContentRect</string>
-					<string>2.IBPluginDependency</string>
-					<string>2.UIWindow.visibleAtLaunch</string>
-					<string>4.CustomClassName</string>
-					<string>4.IBPluginDependency</string>
-				</object>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>UIApplication</string>
-					<string>UIResponder</string>
-					<string>SimpleApp</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAABC6AAAxCbAAA</bytes>
-					</object>
-					<object class="NSMutableDictionary">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<reference key="dict.sortedKeys" ref="0"/>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-						</object>
-					</object>
-					<string>{{520, 376}, {320, 480}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<integer value="1"/>
-					<string>AppDelegate_iPhone</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="unlocalizedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="activeLocalization"/>
-			<object class="NSMutableDictionary" key="localizations">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="sourceID"/>
-			<int key="maxID">12</int>
-		</object>
-		<object class="IBClassDescriber" key="IBDocument.Classes">
-			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">AppDelegate_iPhone</string>
-					<string key="superclassName">NSObject</string>
-					<object class="NSMutableDictionary" key="outlets">
-						<string key="NS.key.0">window</string>
-						<string key="NS.object.0">UIWindow</string>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<string key="NS.key.0">window</string>
-						<object class="IBToOneOutletInfo" key="NS.object.0">
-							<string key="name">window</string>
-							<string key="candidateClassName">UIWindow</string>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">iPhone/AppDelegate_iPhone.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">SimpleApp</string>
-					<string key="superclassName">SkUIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">SimpleApp.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">SkUIView</string>
-					<string key="superclassName">UIView</string>
-					<object class="NSMutableDictionary" key="outlets">
-						<string key="NS.key.0">fOptionsDelegate</string>
-						<string key="NS.object.0">id</string>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<string key="NS.key.0">fOptionsDelegate</string>
-						<object class="IBToOneOutletInfo" key="NS.object.0">
-							<string key="name">fOptionsDelegate</string>
-							<string key="candidateClassName">id</string>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">../iOSSampleApp/Shared/SkUIView.h</string>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIAccessibility.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINibLoading.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="565734826">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIResponder.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIApplication</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIApplication.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIResponder</string>
-					<string key="superclassName">NSObject</string>
-					<reference key="sourceIdentifier" ref="565734826"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISearchBar</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISearchBar.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISearchDisplayController</string>
-					<string key="superclassName">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISearchDisplayController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPrintFormatter.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITextField.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINavigationController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPopoverController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISplitViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITabBarController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIWindow</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIWindow.h</string>
-					</object>
-				</object>
-			</object>
-		</object>
-		<int key="IBDocument.localizationMode">0</int>
-		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
-			<integer value="1056" key="NS.object.0"/>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
-			<integer value="3100" key="NS.object.0"/>
-		</object>
-		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
-		<string key="IBDocument.LastKnownRelativeProjectPath">../SimpleiOSApp.xcodeproj</string>
-		<int key="IBDocument.defaultPropertyAccessControl">3</int>
-		<string key="IBCocoaTouchPluginVersion">141</string>
-	</data>
-</archive>
diff --git a/src/third_party/skia/experimental/SimpleiOSApp/tool-Info.plist b/src/third_party/skia/experimental/SimpleiOSApp/tool-Info.plist
deleted file mode 100644
index 6f8c6d8..0000000
--- a/src/third_party/skia/experimental/SimpleiOSApp/tool-Info.plist
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleDisplayName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIconFile</key>
-	<string></string>
-	<key>CFBundleIdentifier</key>
-	<string>com.google.${EXECUTABLE_NAME}</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>LSRequiresIPhoneOS</key>
-	<true/>
-	<key>NSMainNibFile</key>
-	<string>MainWindow_iPhone</string>
-	<key>NSMainNibFile~ipad</key>
-	<string>MainWindow_iPad</string>
-	<key>UISupportedInterfaceOrientations</key>
-	<array>
-		<string>UIInterfaceOrientationPortrait</string>
-	</array>
-	<key>UISupportedInterfaceOrientations~ipad</key>
-	<array>
-		<string>UIInterfaceOrientationPortrait</string>
-		<string>UIInterfaceOrientationPortraitUpsideDown</string>
-		<string>UIInterfaceOrientationLandscapeLeft</string>
-		<string>UIInterfaceOrientationLandscapeRight</string>
-	</array>
-</dict>
-</plist>
diff --git a/src/third_party/skia/experimental/SkSetPoly3To3.cpp b/src/third_party/skia/experimental/SkSetPoly3To3.cpp
deleted file mode 100644
index 19adf40..0000000
--- a/src/third_party/skia/experimental/SkSetPoly3To3.cpp
+++ /dev/null
@@ -1,70 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#include "SkMatrix.h"
-#include "SkMalloc.h"
-
-// FIXME: needs to be in a header
-bool SkSetPoly3To3(SkMatrix* matrix, const SkPoint src[3], const SkPoint dst[3]);
-
-static void computeOuterProduct(SkScalar op[4],
-                                const SkPoint pts0[3], const SkPoint& ave0,
-                                const SkPoint pts1[3], const SkPoint& ave1) {
-    sk_bzero(op, 4 * sizeof(op[0]));
-    for (int i = 0; i < 3; i++) {
-        SkScalar x0 = pts0[i].fX - ave0.fX;
-        SkScalar y0 = pts0[i].fY - ave0.fY;
-        SkScalar x1 = pts1[i].fX - ave1.fX;
-        SkScalar y1 = pts1[i].fY - ave1.fY;
-        op[0] += x0 * x1;
-        op[1] += x0 * y1;
-        op[2] += y0 * x1;
-        op[3] += y0 * y1;
-    }
-}
-
-static SkScalar dot(SkScalar ax, SkScalar ay, SkScalar bx, SkScalar by) {
-    return ax * bx + ay * by;
-}
-
-bool SkSetPoly3To3(SkMatrix* matrix, const SkPoint src[3], const SkPoint dst[3]) {
-    const SkPoint& srcAve = src[0];
-    const SkPoint& dstAve = dst[0];
-
-    SkScalar srcOP[4], dstOP[4];
-
-    computeOuterProduct(srcOP, src, srcAve, src, srcAve);
-    computeOuterProduct(dstOP, src, srcAve, dst, dstAve);
-
-    SkScalar det = srcOP[0] * srcOP[3] - srcOP[1] * srcOP[2];
-
-    // need SkScalarNearlyZeroSquared for this (to match Chrome's fix)
-    if (SkScalarNearlyZero(det)) {
-        return false;
-    }
-
-    SkScalar invDet = SkScalarInvert(det);
-
-    // now compute invDet * [srcOP]T * [dstOP]
-
-    // scale and transpose
-    const SkScalar srcOP0 =  srcOP[3] * invDet;
-    const SkScalar srcOP1 = -srcOP[1] * invDet;
-    const SkScalar srcOP2 = -srcOP[2] * invDet;
-    const SkScalar srcOP3 =  srcOP[0] * invDet;
-
-    matrix->reset();
-    matrix->setScaleX(dot(srcOP0, srcOP1, dstOP[0], dstOP[2]));
-    matrix->setSkewX( dot(srcOP2, srcOP3, dstOP[0], dstOP[2]));
-    matrix->setSkewY (dot(srcOP0, srcOP1, dstOP[1], dstOP[3]));
-    matrix->setScaleY(dot(srcOP2, srcOP3, dstOP[1], dstOP[3]));
-    matrix->setTranslateX(dstAve.fX - dot(srcAve.fX, srcAve.fY,
-                                    matrix->getScaleX(), matrix->getSkewX()));
-    matrix->setTranslateY(dstAve.fY - dot(srcAve.fX, srcAve.fY,
-                                    matrix->getSkewY(), matrix->getScaleY()));
-    return true;
-}
diff --git a/src/third_party/skia/experimental/SkSetPoly3To3_A.cpp b/src/third_party/skia/experimental/SkSetPoly3To3_A.cpp
deleted file mode 100644
index 41eb178..0000000
--- a/src/third_party/skia/experimental/SkSetPoly3To3_A.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#include "SkMatrix.h"
-#include "SkMalloc.h"
-
-// FIXME: needs to be in a header
-bool SkSetPoly3To3_A(SkMatrix* matrix, const SkPoint src[3], const SkPoint dst[3]);
-
-typedef double SkDScalar;
-
-static SkScalar SkDScalar_toScalar(SkDScalar value) {
-    return static_cast<float>(value);
-}
-static SkScalar divide(SkDScalar numer, SkDScalar denom) {
-    return static_cast<float>(numer / denom);
-}
-
-static SkDScalar SkDScalar_setMul(SkScalar a, SkScalar b) {
-    return (SkDScalar) ((SkDScalar) a * b);
-}
-
-static void computeOuterProduct(SkScalar op[4],
-                                const SkPoint pts0[3], const SkPoint& ave0,
-                                const SkPoint pts1[3], const SkPoint& ave1) {
-    sk_bzero(op, 4 * sizeof(op[0]));
-    for (int i = 0; i < 3; i++) {
-        SkScalar x0 = pts0[i].fX - ave0.fX;
-        SkScalar y0 = pts0[i].fY - ave0.fY;
-        SkScalar x1 = pts1[i].fX - ave1.fX;
-        SkScalar y1 = pts1[i].fY - ave1.fY;
-        op[0] += x0 * x1;
-        op[1] += x0 * y1;
-        op[2] += y0 * x1;
-        op[3] += y0 * y1;
-    }
-}
-
-static SkDScalar ddot(SkScalar ax, SkScalar ay, SkScalar bx, SkScalar by) {
-    return SkDScalar_setMul(ax, bx) + SkDScalar_setMul(ay, by);
-}
-
-static SkScalar dot(SkScalar ax, SkScalar ay, SkScalar bx, SkScalar by) {
-    return SkDScalar_toScalar(ddot(ax, ay, bx, by));
-}
-
-bool SkSetPoly3To3_A(SkMatrix* matrix, const SkPoint src[3], const SkPoint dst[3]) {
-    const SkPoint& srcAve = src[0];
-    const SkPoint& dstAve = dst[0];
-
-    SkScalar srcOP[4], dstOP[4];
-
-    computeOuterProduct(srcOP, src, srcAve, src, srcAve);
-    computeOuterProduct(dstOP, src, srcAve, dst, dstAve);
-
-    SkDScalar det = SkDScalar_setMul(srcOP[0], srcOP[3]) -
-                    SkDScalar_setMul(srcOP[1], srcOP[2]);
-
-    SkDScalar M[4];
-
-    const SkScalar srcOP0 = srcOP[3];
-    const SkScalar srcOP1 = -srcOP[1];
-    const SkScalar srcOP2 = -srcOP[2];
-    const SkScalar srcOP3 = srcOP[0];
-
-    M[0] = ddot(srcOP0, srcOP1, dstOP[0], dstOP[2]);
-    M[1] = ddot(srcOP2, srcOP3, dstOP[0], dstOP[2]);
-    M[2] = ddot(srcOP0, srcOP1, dstOP[1], dstOP[3]);
-    M[3] = ddot(srcOP2, srcOP3, dstOP[1], dstOP[3]);
-
-    matrix->reset();
-    matrix->setScaleX(divide(M[0], det));
-    matrix->setSkewX( divide(M[1], det));
-    matrix->setSkewY (divide(M[2], det));
-    matrix->setScaleY(divide(M[3], det));
-    matrix->setTranslateX(dstAve.fX - dot(srcAve.fX, srcAve.fY,
-                                    matrix->getScaleX(), matrix->getSkewX()));
-    matrix->setTranslateY(dstAve.fY - dot(srcAve.fX, srcAve.fY,
-                                    matrix->getSkewY(), matrix->getScaleY()));
-    return true;
-}
diff --git a/src/third_party/skia/experimental/SkSetPoly3To3_D.cpp b/src/third_party/skia/experimental/SkSetPoly3To3_D.cpp
deleted file mode 100644
index 18f34c9..0000000
--- a/src/third_party/skia/experimental/SkSetPoly3To3_D.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#include "SkMatrix.h"
-#include "SkMalloc.h"
-
-// FIXME: needs to be in a header
-bool SkSetPoly3To3_D(SkMatrix* matrix, const SkPoint src[3], const SkPoint dst[3]);
-
-typedef int64_t SkDScalar;
-
-static SkScalar SkDScalar_toScalar(SkDScalar value) {
-    SkDScalar result = (value + (1 << 15)) >> 16;
-    SkDEBUGCODE(int top = static_cast<int>(result >> 31);)
-    SkASSERT(top == 0 || top == -1);
-    return (SkScalar)result;
-}
-
-static SkDScalar SkDScalar_setMul(SkScalar a, SkScalar b) {
-    return (SkDScalar) ((SkDScalar) a * (SkDScalar) b);
-}
-
-static void computeOuterProduct(SkMatrix* matrix,
-                                const SkPoint pts0[3], const SkPoint& ave0,
-                                const SkPoint pts1[3], const SkPoint& ave1) {
-    SkDScalar tmp[4];
-    sk_bzero(tmp, sizeof(tmp));
-
-    for (int i = 0; i < 3; i++) {
-        SkScalar x0 = pts0[i].fX - ave0.fX;
-        SkScalar y0 = pts0[i].fY - ave0.fY;
-        SkScalar x1 = pts1[i].fX - ave1.fX;
-        SkScalar y1 = pts1[i].fY - ave1.fY;
-        tmp[0] += SkDScalar_setMul(x0, x1);
-        tmp[1] += SkDScalar_setMul(x0, y1);
-        tmp[2] += SkDScalar_setMul(y0, x1);
-        tmp[3] += SkDScalar_setMul(y0, y1);
-    }
-    matrix->reset();
-    matrix->setScaleX(SkDScalar_toScalar(tmp[0]));
-    matrix->setSkewY( SkDScalar_toScalar(tmp[1]));
-    matrix->setSkewX( SkDScalar_toScalar(tmp[2]));
-    matrix->setScaleY(SkDScalar_toScalar(tmp[3]));
-}
-
-static SkScalar dot(SkScalar ax, SkScalar ay, SkScalar bx, SkScalar by) {
-    return SkDScalar_toScalar(SkDScalar_setMul(ax, bx) +
-                              SkDScalar_setMul(ay, by));
-}
-
-bool SkSetPoly3To3_D(SkMatrix* matrix, const SkPoint src[3], const SkPoint dst[3]) {
-    const SkPoint& srcAve = src[0];
-    const SkPoint& dstAve = dst[0];
-
-    SkMatrix srcOP, dstOP;
-
-    computeOuterProduct(&srcOP, src, srcAve, src, srcAve);
-
-    if (!srcOP.invert(&srcOP)) {
-        return false;
-    }
-
-    computeOuterProduct(&dstOP, src, srcAve, dst, dstAve);
-
-    matrix->setConcat(dstOP, srcOP);
-    matrix->setTranslateX(dstAve.fX - dot(srcAve.fX, srcAve.fY,
-                                    matrix->getScaleX(), matrix->getSkewX()));
-    matrix->setTranslateY(dstAve.fY - dot(srcAve.fX, srcAve.fY,
-                                    matrix->getSkewY(), matrix->getScaleY()));
-    return true;
-}
diff --git a/src/third_party/skia/experimental/SkV8Example/DrawingMethods.cpp b/src/third_party/skia/experimental/SkV8Example/DrawingMethods.cpp
deleted file mode 100644
index 5fcdd6a..0000000
--- a/src/third_party/skia/experimental/SkV8Example/DrawingMethods.cpp
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- */
-#include <v8.h>
-
-#include "Global.h"
-#include "DrawingMethods.h"
-#include "Path2D.h"
-#include "SkCanvas.h"
-#include "SkPaint.h"
-
-
-DrawingMethods* DrawingMethods::Unwrap(v8::Handle<v8::Object> obj) {
-    v8::Handle<v8::External> field = v8::Handle<v8::External>::Cast(obj->GetInternalField(0));
-    void* ptr = field->Value();
-    return static_cast<DrawingMethods*>(ptr);
-}
-
-
-void DrawingMethods::Save(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    DrawingMethods* drawingMethods = Unwrap(args.This());
-    SkCanvas* canvas = drawingMethods->getCanvas();
-    if (NULL == canvas) {
-        return;
-    }
-
-    canvas->save();
-}
-
-void DrawingMethods::Restore(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    DrawingMethods* drawingMethods = Unwrap(args.This());
-    SkCanvas* canvas = drawingMethods->getCanvas();
-    if (NULL == canvas) {
-        return;
-    }
-
-    canvas->restore();
-}
-
-void DrawingMethods::Rotate(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    DrawingMethods* drawingMethods = Unwrap(args.This());
-    SkCanvas* canvas = drawingMethods->getCanvas();
-    if (NULL == canvas) {
-        return;
-    }
-
-    if (args.Length() != 1) {
-        args.GetIsolate()->ThrowException(
-                v8::String::NewFromUtf8(
-                        args.GetIsolate(), "Error: 1 arguments required."));
-        return;
-    }
-    double angle = args[0]->NumberValue();
-    canvas->rotate(SkRadiansToDegrees(angle));
-}
-
-void DrawingMethods::Translate(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    DrawingMethods* drawingMethods = Unwrap(args.This());
-    SkCanvas* canvas = drawingMethods->getCanvas();
-    if (NULL == canvas) {
-        return;
-    }
-
-    if (args.Length() != 2) {
-        args.GetIsolate()->ThrowException(
-                v8::String::NewFromUtf8(
-                        args.GetIsolate(), "Error: 2 arguments required."));
-        return;
-    }
-    double dx = args[0]->NumberValue();
-    double dy = args[1]->NumberValue();
-    canvas->translate(SkDoubleToScalar(dx), SkDoubleToScalar(dy));
-}
-
-void DrawingMethods::ResetTransform(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    DrawingMethods* drawingMethods = Unwrap(args.This());
-    SkCanvas* canvas = drawingMethods->getCanvas();
-    if (NULL == canvas) {
-        return;
-    }
-
-    canvas->resetMatrix();
-}
-
-void DrawingMethods::DrawPath(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    DrawingMethods* drawingMethods = Unwrap(args.This());
-    SkCanvas* canvas = drawingMethods->getCanvas();
-    if (NULL == canvas) {
-        return;
-    }
-
-    if (args.Length() != 1) {
-        args.GetIsolate()->ThrowException(
-                v8::String::NewFromUtf8(
-                        args.GetIsolate(), "Error: 1 argument required."));
-        return;
-    }
-
-    v8::Handle<v8::External> field = v8::Handle<v8::External>::Cast(
-            args[0]->ToObject()->GetInternalField(0));
-    void* ptr = field->Value();
-    Path2D* path = static_cast<Path2D*>(ptr);
-    if (NULL == path) {
-        return;
-    }
-    // TODO(jcgregorio) Add support for Paint2D parameter after Paint2D is
-    // implemented.
-    SkPaint fillStyle;
-    fillStyle.setColor(SK_ColorBLACK);
-    fillStyle.setAntiAlias(true);
-    fillStyle.setStyle(SkPaint::kFill_Style);
-    canvas->drawPath(*(path->path()), fillStyle);
-}
-
-
-void DrawingMethods::GetWidth(v8::Local<v8::String> name,
-        const v8::PropertyCallbackInfo<v8::Value>& info) {
-    DrawingMethods* drawingMethods = Unwrap(info.This());
-    SkCanvas* canvas = drawingMethods->getCanvas();
-    if (NULL == canvas) {
-        return;
-    }
-
-    info.GetReturnValue().Set(
-            v8::Int32::New(
-                drawingMethods->fGlobal->getIsolate(), canvas->imageInfo().width()));
-}
-
-void DrawingMethods::GetHeight(v8::Local<v8::String> name,
-        const v8::PropertyCallbackInfo<v8::Value>& info) {
-    DrawingMethods* drawingMethods = Unwrap(info.This());
-    SkCanvas* canvas = drawingMethods->getCanvas();
-    if (NULL == canvas) {
-        return;
-    }
-
-    info.GetReturnValue().Set(
-            v8::Int32::New(
-                drawingMethods->fGlobal->getIsolate(), canvas->imageInfo().height()));
-}
-
-#define ADD_METHOD(name, fn) \
-    tmpl->Set(v8::String::NewFromUtf8( \
-         fGlobal->getIsolate(), name, \
-         v8::String::kInternalizedString), \
-             v8::FunctionTemplate::New(fGlobal->getIsolate(), fn))
-
-void DrawingMethods::addAttributesAndMethods(v8::Handle<v8::ObjectTemplate> tmpl) {
-    v8::HandleScope scope(fGlobal->getIsolate());
-
-    // Add accessors for each of the fields of the context object.
-    tmpl->SetAccessor(v8::String::NewFromUtf8(
-        fGlobal->getIsolate(), "width", v8::String::kInternalizedString),
-            GetWidth);
-    tmpl->SetAccessor(v8::String::NewFromUtf8(
-        fGlobal->getIsolate(), "height", v8::String::kInternalizedString),
-            GetHeight);
-
-    // Add methods.
-    ADD_METHOD("save", Save);
-    ADD_METHOD("restore", Restore);
-    ADD_METHOD("rotate", Rotate);
-    ADD_METHOD("translate", Translate);
-    ADD_METHOD("resetTransform", ResetTransform);
-
-    ADD_METHOD("drawPath", DrawPath);
-}
diff --git a/src/third_party/skia/experimental/SkV8Example/DrawingMethods.h b/src/third_party/skia/experimental/SkV8Example/DrawingMethods.h
deleted file mode 100644
index d72a3df..0000000
--- a/src/third_party/skia/experimental/SkV8Example/DrawingMethods.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- */
-
-#ifndef SkV8Example_DrawingMethods_DEFINED
-#define SkV8Example_DrawingMethods_DEFINED
-
-#include <v8.h>
-
-class SkCanvas;
-class Global;
-
-// DrawingMethods contains common functionality for both Context, Image2Builder,
-// and DisplayListBuiler.
-class DrawingMethods {
-public:
-    DrawingMethods(Global* global)
-            : fGlobal(global)
-    {}
-    virtual ~DrawingMethods() {}
-
-    // Retrieve the SkCanvas to draw on. May return NULL.
-    virtual SkCanvas* getCanvas() = 0;
-
-    // Add the Javascript attributes and methods that DrawingMethods
-    // implements to the ObjectTemplate.
-    void addAttributesAndMethods(v8::Handle<v8::ObjectTemplate> tmpl);
-
-protected:
-    // Get the pointer out of obj.
-    static DrawingMethods* Unwrap(v8::Handle<v8::Object> obj);
-
-    Global* fGlobal;
-
-private:
-    // JS Attributes
-    static void GetWidth(v8::Local<v8::String> name,
-                         const v8::PropertyCallbackInfo<v8::Value>& info);
-    static void GetHeight(v8::Local<v8::String> name,
-                          const v8::PropertyCallbackInfo<v8::Value>& info);
-
-    // JS Methods
-    static void Save(const v8::FunctionCallbackInfo<v8::Value>& args);
-    static void Restore(const v8::FunctionCallbackInfo<v8::Value>& args);
-    static void Rotate(const v8::FunctionCallbackInfo<v8::Value>& args);
-    static void Translate(const v8::FunctionCallbackInfo<v8::Value>& args);
-    static void ResetTransform(const v8::FunctionCallbackInfo<v8::Value>& args);
-
-    static void DrawPath(const v8::FunctionCallbackInfo<v8::Value>& args);
-};
-
-#endif
diff --git a/src/third_party/skia/experimental/SkV8Example/Global.cpp b/src/third_party/skia/experimental/SkV8Example/Global.cpp
deleted file mode 100644
index 919f247..0000000
--- a/src/third_party/skia/experimental/SkV8Example/Global.cpp
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright 2013 Google Inc.
- *
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- */
-#include "Global.h"
-
-#include "SkWindow.h"
-#include "SkEvent.h"
-
-
-Global* Global::gGlobal = NULL;
-
-// Extracts a C string from a V8 Utf8Value.
-static const char* to_cstring(const v8::String::Utf8Value& value) {
-    return *value ? *value : "<string conversion failed>";
-}
-
-int32_t Global::getNextTimerID() {
-    do {
-        fLastTimerID++;
-        if (fLastTimerID < 0) {
-            fLastTimerID = 0;
-        }
-    } while (fTimeouts.find(fLastTimerID) != fTimeouts.end());
-    return fLastTimerID;
-}
-
-// Slight modification to an original function found in the V8 sample shell.cc.
-void Global::reportException(v8::TryCatch* tryCatch) {
-    v8::HandleScope handleScope(fIsolate);
-    v8::String::Utf8Value exception(tryCatch->Exception());
-    const char* exceptionString = to_cstring(exception);
-    v8::Handle<v8::Message> message = tryCatch->Message();
-    if (message.IsEmpty()) {
-        // V8 didn't provide any extra information about this error; just
-        // print the exception.
-        fprintf(stderr, "%s\n", exceptionString);
-    } else {
-        // Print (filename):(line number): (message).
-        v8::String::Utf8Value filename(message->GetScriptOrigin().ResourceName());
-        const char* filenameString = to_cstring(filename);
-        int linenum = message->GetLineNumber();
-        fprintf(stderr,
-                "%s:%i: %s\n", filenameString, linenum, exceptionString);
-        // Print line of source code.
-        v8::String::Utf8Value sourceline(message->GetSourceLine());
-        const char* sourceLineString = to_cstring(sourceline);
-        fprintf(stderr, "%s\n", sourceLineString);
-        // Print wavy underline.
-        int start = message->GetStartColumn();
-        for (int i = 0; i < start; i++) {
-            fprintf(stderr, " ");
-        }
-        int end = message->GetEndColumn();
-        for (int i = start; i < end; i++) {
-            fprintf(stderr, "^");
-        }
-        fprintf(stderr, "\n");
-        v8::String::Utf8Value stackTrace(tryCatch->StackTrace());
-        if (stackTrace.length() > 0) {
-            const char* stackTraceString = to_cstring(stackTrace);
-            fprintf(stderr, "%s\n", stackTraceString);
-        }
-    }
-}
-
-// The callback that implements the JavaScript 'inval' function.
-// Invalidates the current window, forcing a redraw.
-//
-// JS: inval();
-void Global::Inval(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    gGlobal->getWindow()->inval(NULL);
-}
-
-// The callback that is invoked by v8 whenever the JavaScript 'print'
-// function is called. Prints its arguments on stdout separated by
-// spaces and ending with a newline.
-//
-// JS: print("foo", "bar");
-void Global::Print(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    bool first = true;
-    v8::HandleScope handleScope(args.GetIsolate());
-    for (int i = 0; i < args.Length(); i++) {
-        if (first) {
-            first = false;
-        } else {
-            printf(" ");
-        }
-        v8::String::Utf8Value str(args[i]);
-        printf("%s", to_cstring(str));
-    }
-    printf("\n");
-    fflush(stdout);
-}
-
-// The callback that is invoked by v8 whenever the JavaScript 'setTimeout'
-// function is called.
-//
-// JS: setTimeout(on_timeout, 500);
-void Global::SetTimeout(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    if (args.Length() != 2) {
-        args.GetIsolate()->ThrowException(
-                v8::String::NewFromUtf8(
-                        args.GetIsolate(), "Error: 2 arguments required."));
-        return;
-    }
-
-    // Pull out the first arg, make sure it's a function.
-    if (!args[0]->IsFunction()) {
-        printf("Not a function passed to setTimeout.\n");
-        return;
-    }
-    v8::Handle<v8::Function> timeoutFn = v8::Handle<v8::Function>::Cast(args[0]);
-
-    double delay = args[1]->NumberValue();
-    int32_t id = gGlobal->getNextTimerID();
-
-    gGlobal->fTimeouts[id].Reset(gGlobal->fIsolate, timeoutFn);
-
-    // Create an SkEvent and add it with the right delay.
-    SkEvent* evt = new SkEvent();
-    evt->setTargetProc(Global::TimeOutProc);
-    evt->setFast32(id);
-    evt->postDelay(delay);
-
-    args.GetReturnValue().Set(v8::Integer::New(gGlobal->fIsolate, id));
-}
-
-// Callback function for SkEvents used to implement timeouts.
-bool Global::TimeOutProc(const SkEvent& evt) {
-    // Create a handle scope to keep the temporary object references.
-    v8::HandleScope handleScope(gGlobal->getIsolate());
-
-    // Create a local context from our global context.
-    v8::Local<v8::Context> context = gGlobal->getContext();
-
-    // Enter the context so all the remaining operations take place there.
-    v8::Context::Scope contextScope(context);
-
-    // Set up an exception handler before calling the Process function.
-    v8::TryCatch tryCatch;
-
-    int32_t id = evt.getFast32();
-    if (gGlobal->fTimeouts.find(gGlobal->fLastTimerID) == gGlobal->fTimeouts.end()) {
-        printf("Not a valid timer ID.\n");
-        return true;
-    }
-
-    const int argc = 0;
-    v8::Local<v8::Function> onTimeout =
-            v8::Local<v8::Function>::New(gGlobal->getIsolate(), gGlobal->fTimeouts[id]);
-    v8::Handle<v8::Value> result = onTimeout->Call(context->Global(), argc, NULL);
-    gGlobal->fTimeouts.erase(id);
-
-    // Handle any exceptions or output.
-    if (result.IsEmpty()) {
-        SkASSERT(tryCatch.HasCaught());
-        // Print errors that happened during execution.
-        gGlobal->reportException(&tryCatch);
-    } else {
-        SkASSERT(!tryCatch.HasCaught());
-        if (!result->IsUndefined()) {
-            // If all went well and the result wasn't undefined then print the
-            // returned value.
-            v8::String::Utf8Value str(result);
-            const char* cstr = to_cstring(str);
-            printf("%s\n", cstr);
-        }
-    }
-    return true;
-}
-
-// Creates a new execution environment containing the built-in functions.
-v8::Handle<v8::Context> Global::createRootContext() {
-  // Create a template for the global object.
-  v8::Handle<v8::ObjectTemplate> global = v8::ObjectTemplate::New();
-
-  global->Set(v8::String::NewFromUtf8(fIsolate, "print"),
-              v8::FunctionTemplate::New(fIsolate, Global::Print));
-  global->Set(v8::String::NewFromUtf8(fIsolate, "setTimeout"),
-              v8::FunctionTemplate::New(fIsolate, Global::SetTimeout));
-  global->Set(v8::String::NewFromUtf8(fIsolate, "inval"),
-              v8::FunctionTemplate::New(fIsolate, Global::Inval));
-
-
-  return v8::Context::New(fIsolate, NULL, global);
-}
-
-void Global::initialize() {
-    // Create a stack-allocated handle scope.
-    v8::HandleScope handleScope(fIsolate);
-
-    // Create a new context.
-    v8::Handle<v8::Context> context = this->createRootContext();
-
-    // Make the context persistent.
-    fContext.Reset(fIsolate, context);
-}
-
-
-// Creates the root context, parses the script into it, then stores the
-// context in a global.
-//
-// TODO(jcgregorio) Currently only handles one script. Need to move
-// createRootContext to another call that's only done once.
-bool Global::parseScript(const char script[]) {
-
-    // Create a stack-allocated handle scope.
-    v8::HandleScope handleScope(fIsolate);
-
-    // Get the global context.
-    v8::Handle<v8::Context> context = this->getContext();
-
-    // Enter the scope so all operations take place in the scope.
-    v8::Context::Scope contextScope(context);
-
-    v8::TryCatch tryCatch;
-
-    // Compile the source code.
-    v8::Handle<v8::String> source = v8::String::NewFromUtf8(fIsolate, script);
-    v8::Handle<v8::Script> compiledScript = v8::Script::Compile(source);
-
-    if (compiledScript.IsEmpty()) {
-        // Print errors that happened during compilation.
-        this->reportException(&tryCatch);
-        return false;
-    }
-
-    // Try running it now to create the onDraw function.
-    v8::Handle<v8::Value> result = compiledScript->Run();
-
-    // Handle any exceptions or output.
-    if (result.IsEmpty()) {
-        SkASSERT(tryCatch.HasCaught());
-        // Print errors that happened during execution.
-        this->reportException(&tryCatch);
-        return false;
-    }
-
-    return true;
-}
diff --git a/src/third_party/skia/experimental/SkV8Example/Global.h b/src/third_party/skia/experimental/SkV8Example/Global.h
deleted file mode 100644
index a50f244..0000000
--- a/src/third_party/skia/experimental/SkV8Example/Global.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright 2013 Google Inc.
- *
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- */
-
-#ifndef SkV8Example_Global_DEFINED
-#define SkV8Example_Global_DEFINED
-
-#include <map>
-
-#include <v8.h>
-
-
-#include "SkTypes.h"
-#include "SkEvent.h"
-
-class SkOSWindow;
-
-typedef v8::Persistent<v8::Function, v8::CopyablePersistentTraits<v8::Function> > CopyablePersistentFn;
-
-// Provides the global isolate and context for our V8 instance.
-// Also implements all the global level functions.
-class Global : SkNoncopyable  {
-public:
-    Global(v8::Isolate* isolate)
-        : fIsolate(isolate)
-        , fWindow(NULL)
-        , fLastTimerID(0)
-    {
-        gGlobal = this;
-        this->initialize();
-    }
-    virtual ~Global() {}
-
-    // The script will be parsed into the context this Global contains.
-    bool parseScript(const char script[]);
-
-    v8::Local<v8::Context> getContext() {
-        return v8::Local<v8::Context>::New(fIsolate, fContext);
-    }
-
-    v8::Isolate* getIsolate() {
-        return fIsolate;
-    }
-
-    void setWindow(SkOSWindow* win) {
-        fWindow = win;
-    }
-    SkOSWindow* getWindow() {
-        return fWindow;
-    }
-
-    void reportException(v8::TryCatch* tryCatch);
-
-private:
-    void initialize();
-    v8::Handle<v8::Context> createRootContext();
-    int32_t getNextTimerID();
-
-    static bool TimeOutProc(const SkEvent& evt);
-
-    // Static functions that implement the global JS functions we add to
-    // the context.
-    static void SetTimeout(const v8::FunctionCallbackInfo<v8::Value>& args);
-    static void Print(const v8::FunctionCallbackInfo<v8::Value>& args);
-    static void Inval(const v8::FunctionCallbackInfo<v8::Value>& args);
-
-    v8::Persistent<v8::Context> fContext;
-    v8::Isolate*                fIsolate;
-    SkOSWindow*                 fWindow;
-    static Global*              gGlobal;
-
-    // Handle to the functions to call when a timeout triggers as indexed by id.
-    std::map<int32_t, CopyablePersistentFn > fTimeouts;
-
-    // Last timer ID generated.
-    int32_t fLastTimerID;
-};
-
-#endif
diff --git a/src/third_party/skia/experimental/SkV8Example/JsContext.cpp b/src/third_party/skia/experimental/SkV8Example/JsContext.cpp
deleted file mode 100644
index 959068d..0000000
--- a/src/third_party/skia/experimental/SkV8Example/JsContext.cpp
+++ /dev/null
@@ -1,138 +0,0 @@
-
-/*
- * Copyright 2013 Google Inc.
- *
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- */
-#include <v8.h>
-
-#include "Global.h"
-#include "JsContext.h"
-#include "Path2D.h"
-#include "SkCanvas.h"
-
-
-// Extracts a C string from a V8 Utf8Value.
-// TODO(jcgregrio) Currently dup'd in two files, fix.
-static const char* to_cstring(const v8::String::Utf8Value& value) {
-    return *value ? *value : "<string conversion failed>";
-}
-
-v8::Persistent<v8::ObjectTemplate> JsContext::gContextTemplate;
-
-// Wraps 'this' in a Javascript object.
-v8::Handle<v8::Object> JsContext::wrap() {
-    // Handle scope for temporary handles.
-    v8::EscapableHandleScope handleScope(fGlobal->getIsolate());
-
-    // Fetch the template for creating JavaScript JsContext wrappers.
-    // It only has to be created once, which we do on demand.
-    if (gContextTemplate.IsEmpty()) {
-        v8::Local<v8::ObjectTemplate> localTemplate = v8::ObjectTemplate::New();
-
-        // Add a field to store the pointer to a JsContext instance.
-        localTemplate->SetInternalFieldCount(1);
-
-        this->addAttributesAndMethods(localTemplate);
-
-        gContextTemplate.Reset(fGlobal->getIsolate(), localTemplate);
-    }
-    v8::Handle<v8::ObjectTemplate> templ =
-            v8::Local<v8::ObjectTemplate>::New(fGlobal->getIsolate(), gContextTemplate);
-
-    // Create an empty JsContext wrapper.
-    v8::Local<v8::Object> result = templ->NewInstance();
-
-    // Wrap the raw C++ pointer in an External so it can be referenced
-    // from within JavaScript.
-    v8::Handle<v8::External> contextPtr = v8::External::New(fGlobal->getIsolate(), this);
-
-    // Store the context pointer in the JavaScript wrapper.
-    result->SetInternalField(0, contextPtr);
-
-    // Return the result through the current handle scope.  Since each
-    // of these handles will go away when the handle scope is deleted
-    // we need to call Close to let one, the result, escape into the
-    // outer handle scope.
-    return handleScope.Escape(result);
-}
-
-void JsContext::onDraw(SkCanvas* canvas) {
-    // Record canvas and window in this.
-    fCanvas = canvas;
-
-    // Create a handle scope to keep the temporary object references.
-    v8::HandleScope handleScope(fGlobal->getIsolate());
-
-    // Create a local context from our global context.
-    v8::Local<v8::Context> context = fGlobal->getContext();
-
-    // Enter the context so all the remaining operations take place there.
-    v8::Context::Scope contextScope(context);
-
-    // Wrap the C++ this pointer in a JavaScript wrapper.
-    v8::Handle<v8::Object> contextObj = this->wrap();
-
-    // Set up an exception handler before calling the Process function.
-    v8::TryCatch tryCatch;
-
-    // Invoke the process function, giving the global object as 'this'
-    // and one argument, this JsContext.
-    const int argc = 1;
-    v8::Handle<v8::Value> argv[argc] = { contextObj };
-    v8::Local<v8::Function> onDraw =
-            v8::Local<v8::Function>::New(fGlobal->getIsolate(), fOnDraw);
-    v8::Handle<v8::Value> result = onDraw->Call(context->Global(), argc, argv);
-
-    // Handle any exceptions or output.
-    if (result.IsEmpty()) {
-        SkASSERT(tryCatch.HasCaught());
-        // Print errors that happened during execution.
-        fGlobal->reportException(&tryCatch);
-    } else {
-        SkASSERT(!tryCatch.HasCaught());
-        if (!result->IsUndefined()) {
-            // If all went well and the result wasn't undefined then print
-            // the returned value.
-            v8::String::Utf8Value str(result);
-            const char* cstr = to_cstring(str);
-            printf("%s\n", cstr);
-        }
-    }
-}
-
-// Fetch the onDraw function from the global context.
-bool JsContext::initialize() {
-
-    // Create a stack-allocated handle scope.
-    v8::HandleScope handleScope(fGlobal->getIsolate());
-
-    // Create a local context from our global context.
-    v8::Local<v8::Context> context = fGlobal->getContext();
-
-    // Enter the scope so all operations take place in the scope.
-    v8::Context::Scope contextScope(context);
-
-    v8::TryCatch try_catch;
-
-    v8::Handle<v8::String> fn_name = v8::String::NewFromUtf8(
-        fGlobal->getIsolate(), "onDraw");
-    v8::Handle<v8::Value> fn_val = context->Global()->Get(fn_name);
-
-    if (!fn_val->IsFunction()) {
-        printf("Not a function.\n");
-        return false;
-    }
-
-    // It is a function; cast it to a Function.
-    v8::Handle<v8::Function> fn_fun = v8::Handle<v8::Function>::Cast(fn_val);
-
-    // Store the function in a Persistent handle, since we also want that to
-    // remain after this call returns.
-    fOnDraw.Reset(fGlobal->getIsolate(), fn_fun);
-
-    return true;
-}
diff --git a/src/third_party/skia/experimental/SkV8Example/JsContext.h b/src/third_party/skia/experimental/SkV8Example/JsContext.h
deleted file mode 100644
index a6b5e4c..0000000
--- a/src/third_party/skia/experimental/SkV8Example/JsContext.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- */
-
-#ifndef SkV8Example_JsContext_DEFINED
-#define SkV8Example_JsContext_DEFINED
-
-#include <v8.h>
-
-#include "SkPaint.h"
-#include "DrawingMethods.h"
-
-class SkCanvas;
-class Global;
-
-// Provides the canvas context implementation in JS, and the OnDraw() method in
-// C++ that's used to bridge from C++ to JS. Should be used in JS as:
-//
-//  function onDraw(context) {
-//    context.fillStyle="#FF0000";
-//    context.fillRect(x, y, w, h);
-//  }
-class JsContext : public DrawingMethods {
-public:
-    JsContext(Global* global)
-            : INHERITED(global)
-            , fCanvas(NULL)
-    {
-    }
-    virtual ~JsContext() {}
-
-    // Parse the script.
-    bool initialize();
-
-    // Call this with the SkCanvas you want onDraw to draw on.
-    void onDraw(SkCanvas* canvas);
-
-    virtual SkCanvas* getCanvas() { return fCanvas; };
-
-private:
-
-    // Wrap the 'this' pointer into an Object. Can be retrieved via Unwrap.
-    v8::Handle<v8::Object> wrap();
-
-    // A handle to the onDraw function defined in the script.
-    v8::Persistent<v8::Function> fOnDraw;
-
-    // The template for what a canvas context object looks like. The canvas
-    // context object is what's passed into the JS onDraw() function.
-    static v8::Persistent<v8::ObjectTemplate> gContextTemplate;
-
-    // Only valid when inside OnDraw().
-    SkCanvas* fCanvas;
-
-    typedef DrawingMethods INHERITED;
-};
-
-#endif
diff --git a/src/third_party/skia/experimental/SkV8Example/Path2D.cpp b/src/third_party/skia/experimental/SkV8Example/Path2D.cpp
deleted file mode 100644
index dded688..0000000
--- a/src/third_party/skia/experimental/SkV8Example/Path2D.cpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- */
-
-#include "Path2D.h"
-#include "Global.h"
-
-Global* Path2D::gGlobal = NULL;
-v8::Persistent<v8::ObjectTemplate> Path2D::gPath2DTemplate;
-
-void weakPath2DCallback(const v8::WeakCallbackData<v8::Object, Path2D>& args) {
-    delete args.GetParameter();
-}
-
-// Wraps an SkPath* in a Path2D object.
-Path2D::Path2D(SkPath* path) : path_(path) {
-    // Handle scope for temporary handles.
-    v8::HandleScope handleScope(gGlobal->getIsolate());
-
-    // Just once create the ObjectTemplate for what Path2D looks like in JS.
-    if (gPath2DTemplate.IsEmpty()) {
-        v8::Local<v8::ObjectTemplate> localTemplate = v8::ObjectTemplate::New();
-
-        // Add a field to store the pointer to a SkPath pointer.
-        localTemplate->SetInternalFieldCount(1);
-
-        gPath2DTemplate.Reset(gGlobal->getIsolate(), localTemplate);
-    }
-    v8::Handle<v8::ObjectTemplate> templ =
-            v8::Local<v8::ObjectTemplate>::New(gGlobal->getIsolate(), gPath2DTemplate);
-
-    // Create an empty Path2D wrapper.
-    v8::Local<v8::Object> result = templ->NewInstance();
-
-    // Store the SkPath pointer in the JavaScript wrapper.
-    result->SetInternalField(0, v8::External::New(gGlobal->getIsolate(), this));
-    gGlobal->getIsolate()->AdjustAmountOfExternalAllocatedMemory(sizeof(SkPath));
-
-    // Make a weak persistent and set up the callback so we can delete the path pointer.
-    // TODO(jcgregorio) Figure out why weakPath2DCallback never gets called and we leak.
-    v8::Persistent<v8::Object> weak(gGlobal->getIsolate(), result);
-    weak.SetWeak(this, weakPath2DCallback);
-    this->handle_.Reset(gGlobal->getIsolate(), weak);
-}
-
-Path2D::~Path2D() {
-    delete path_;
-    handle_.Reset();
-    gGlobal->getIsolate()->AdjustAmountOfExternalAllocatedMemory(-sizeof(SkPath));
-}
diff --git a/src/third_party/skia/experimental/SkV8Example/Path2D.h b/src/third_party/skia/experimental/SkV8Example/Path2D.h
deleted file mode 100644
index 4ac9877..0000000
--- a/src/third_party/skia/experimental/SkV8Example/Path2D.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- */
-
-#ifndef SkV8Example_Path2D_DEFINED
-#define SkV8Example_Path2D_DEFINED
-
-#include <v8.h>
-
-#include "SkPath.h"
-#include "SkTypes.h"
-
-class Global;
-
-// Path2D bridges between JS and SkPath.
-class Path2D : SkNoncopyable {
-public:
-    Path2D(SkPath* path);
-    virtual ~Path2D();
-
-    static void AddToGlobal(Global* global) {
-        gGlobal = global;
-    }
-
-    v8::Persistent<v8::Object>& persistent() {
-        return handle_;
-    }
-
-    SkPath* path() {
-        return path_;
-    }
-
-private:
-    // The handle to this object in JS space.
-    v8::Persistent<v8::Object> handle_;
-
-    SkPath* path_;
-
-    // The global context we are running in.
-    static Global* gGlobal;
-
-    // The template for what a JS Path2D object looks like.
-    static v8::Persistent<v8::ObjectTemplate> gPath2DTemplate;
-};
-
-#endif
diff --git a/src/third_party/skia/experimental/SkV8Example/Path2DBuilder.cpp b/src/third_party/skia/experimental/SkV8Example/Path2DBuilder.cpp
deleted file mode 100644
index ad05668..0000000
--- a/src/third_party/skia/experimental/SkV8Example/Path2DBuilder.cpp
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- */
-
-#include "Global.h"
-#include "Path2DBuilder.h"
-#include "Path2D.h"
-#include "SkPath.h"
-
-Global* Path2DBuilder::gGlobal = NULL;
-
-void Path2DBuilder::ConstructPath(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    v8::HandleScope handleScope(gGlobal->getIsolate());
-    Path2DBuilder* path = new Path2DBuilder();
-    args.This()->SetInternalField(
-            0, v8::External::New(gGlobal->getIsolate(), path));
-}
-
-#define ADD_METHOD(name, fn) \
-    constructor->InstanceTemplate()->Set( \
-            v8::String::NewFromUtf8( \
-                    global->getIsolate(), name, \
-                    v8::String::kInternalizedString), \
-            v8::FunctionTemplate::New(global->getIsolate(), fn))
-
-// Install the constructor in the global scope so Path2DBuilders can be constructed
-// in JS.
-void Path2DBuilder::AddToGlobal(Global* global) {
-    gGlobal = global;
-
-    // Create a stack-allocated handle scope.
-    v8::HandleScope handleScope(gGlobal->getIsolate());
-
-    v8::Handle<v8::Context> context = gGlobal->getContext();
-
-    // Enter the scope so all operations take place in the scope.
-    v8::Context::Scope contextScope(context);
-
-    v8::Local<v8::FunctionTemplate> constructor = v8::FunctionTemplate::New(
-            gGlobal->getIsolate(), Path2DBuilder::ConstructPath);
-    constructor->InstanceTemplate()->SetInternalFieldCount(1);
-
-    ADD_METHOD("close", ClosePath);
-    ADD_METHOD("moveTo", MoveTo);
-    ADD_METHOD("lineTo", LineTo);
-    ADD_METHOD("quadraticCurveTo", QuadraticCurveTo);
-    ADD_METHOD("bezierCurveTo", BezierCurveTo);
-    ADD_METHOD("arc", Arc);
-    ADD_METHOD("rect", Rect);
-    ADD_METHOD("oval", Oval);
-    ADD_METHOD("conicTo", ConicTo);
-
-    ADD_METHOD("finalize", Finalize);
-
-    context->Global()->Set(v8::String::NewFromUtf8(
-            gGlobal->getIsolate(), "Path2DBuilder"), constructor->GetFunction());
-}
-
-Path2DBuilder* Path2DBuilder::Unwrap(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    v8::Handle<v8::External> field = v8::Handle<v8::External>::Cast(
-            args.This()->GetInternalField(0));
-    void* ptr = field->Value();
-    return static_cast<Path2DBuilder*>(ptr);
-}
-
-void Path2DBuilder::ClosePath(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    Path2DBuilder* path = Unwrap(args);
-    path->fSkPath.close();
-}
-
-void Path2DBuilder::MoveTo(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    if (args.Length() != 2) {
-        args.GetIsolate()->ThrowException(
-                v8::String::NewFromUtf8(
-                        args.GetIsolate(), "Error: 2 arguments required."));
-        return;
-    }
-    double x = args[0]->NumberValue();
-    double y = args[1]->NumberValue();
-    Path2DBuilder* path = Unwrap(args);
-    path->fSkPath.moveTo(SkDoubleToScalar(x), SkDoubleToScalar(y));
-}
-
-void Path2DBuilder::LineTo(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    if (args.Length() != 2) {
-        args.GetIsolate()->ThrowException(
-                v8::String::NewFromUtf8(
-                        args.GetIsolate(), "Error: 2 arguments required."));
-        return;
-    }
-    double x = args[0]->NumberValue();
-    double y = args[1]->NumberValue();
-    Path2DBuilder* path = Unwrap(args);
-    path->fSkPath.lineTo(SkDoubleToScalar(x), SkDoubleToScalar(y));
-}
-
-void Path2DBuilder::QuadraticCurveTo(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    if (args.Length() != 4) {
-        args.GetIsolate()->ThrowException(
-                v8::String::NewFromUtf8(
-                        args.GetIsolate(), "Error: 4 arguments required."));
-        return;
-    }
-    double cpx = args[0]->NumberValue();
-    double cpy = args[1]->NumberValue();
-    double x = args[2]->NumberValue();
-    double y = args[3]->NumberValue();
-    Path2DBuilder* path = Unwrap(args);
-    // TODO(jcgregorio) Doesn't handle the empty last path case correctly per
-    // the HTML 5 spec.
-    path->fSkPath.quadTo(
-            SkDoubleToScalar(cpx), SkDoubleToScalar(cpy),
-            SkDoubleToScalar(x), SkDoubleToScalar(y));
-}
-
-void Path2DBuilder::BezierCurveTo(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    if (args.Length() != 6) {
-        args.GetIsolate()->ThrowException(
-                v8::String::NewFromUtf8(
-                        args.GetIsolate(), "Error: 6 arguments required."));
-        return;
-    }
-    double cp1x = args[0]->NumberValue();
-    double cp1y = args[1]->NumberValue();
-    double cp2x = args[2]->NumberValue();
-    double cp2y = args[3]->NumberValue();
-    double x = args[4]->NumberValue();
-    double y = args[5]->NumberValue();
-    Path2DBuilder* path = Unwrap(args);
-    // TODO(jcgregorio) Doesn't handle the empty last path case correctly per
-    // the HTML 5 spec.
-    path->fSkPath.cubicTo(
-            SkDoubleToScalar(cp1x), SkDoubleToScalar(cp1y),
-            SkDoubleToScalar(cp2x), SkDoubleToScalar(cp2y),
-            SkDoubleToScalar(x), SkDoubleToScalar(y));
-}
-
-void Path2DBuilder::Arc(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    if (args.Length() != 5 && args.Length() != 6) {
-        args.GetIsolate()->ThrowException(
-                v8::String::NewFromUtf8(
-                        args.GetIsolate(), "Error: 5 or 6 args required."));
-        return;
-    }
-    double x          = args[0]->NumberValue();
-    double y          = args[1]->NumberValue();
-    double radius     = args[2]->NumberValue();
-    double startAngle = args[3]->NumberValue();
-    double endAngle   = args[4]->NumberValue();
-    bool antiClockwise = false;
-    if (args.Length() == 6) {
-       antiClockwise = args[5]->BooleanValue();
-    }
-    double sweepAngle;
-    if (!antiClockwise) {
-      sweepAngle = endAngle - startAngle;
-    } else {
-      sweepAngle = startAngle - endAngle;
-      startAngle = endAngle;
-    }
-
-    Path2DBuilder* path = Unwrap(args);
-    SkRect rect = {
-        SkDoubleToScalar(x-radius),
-        SkDoubleToScalar(y-radius),
-        SkDoubleToScalar(x+radius),
-        SkDoubleToScalar(y+radius)
-    };
-
-    path->fSkPath.addArc(rect, SkRadiansToDegrees(startAngle),
-                         SkRadiansToDegrees(sweepAngle));
-}
-
-void Path2DBuilder::Rect(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    if (args.Length() != 4) {
-        args.GetIsolate()->ThrowException(
-                v8::String::NewFromUtf8(
-                        args.GetIsolate(), "Error: 4 arguments required."));
-        return;
-    }
-    double x = args[0]->NumberValue();
-    double y = args[1]->NumberValue();
-    double w = args[2]->NumberValue();
-    double h = args[3]->NumberValue();
-
-    SkRect rect = {
-        SkDoubleToScalar(x),
-        SkDoubleToScalar(y),
-        SkDoubleToScalar(x) + SkDoubleToScalar(w),
-        SkDoubleToScalar(y) + SkDoubleToScalar(h)
-    };
-    Path2DBuilder* path = Unwrap(args);
-    path->fSkPath.addRect(rect);
-}
-
-void Path2DBuilder::Oval(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    if (args.Length() != 4 && args.Length() != 5) {
-        args.GetIsolate()->ThrowException(
-                v8::String::NewFromUtf8(
-                        args.GetIsolate(), "Error: 4 or 5 args required."));
-        return;
-    }
-    double x          = args[0]->NumberValue();
-    double y          = args[1]->NumberValue();
-    double radiusX    = args[2]->NumberValue();
-    double radiusY    = args[3]->NumberValue();
-    SkPath::Direction dir = SkPath::kCW_Direction;
-    if (args.Length() == 5 && !args[4]->BooleanValue()) {
-        dir = SkPath::kCCW_Direction;
-    }
-    Path2DBuilder* path = Unwrap(args);
-    SkRect rect = {
-        SkDoubleToScalar(x-radiusX),
-        SkDoubleToScalar(y-radiusX),
-        SkDoubleToScalar(x+radiusY),
-        SkDoubleToScalar(y+radiusY)
-    };
-
-    path->fSkPath.addOval(rect, dir);
-}
-
-void Path2DBuilder::ConicTo(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    if (args.Length() != 5) {
-        args.GetIsolate()->ThrowException(
-                v8::String::NewFromUtf8(
-                        args.GetIsolate(), "Error: 5 args required."));
-        return;
-    }
-    double x1 = args[0]->NumberValue();
-    double y1 = args[1]->NumberValue();
-    double x2 = args[2]->NumberValue();
-    double y2 = args[3]->NumberValue();
-    double w  = args[4]->NumberValue();
-    Path2DBuilder* path = Unwrap(args);
-
-    path->fSkPath.conicTo(
-            SkDoubleToScalar(x1),
-            SkDoubleToScalar(y1),
-            SkDoubleToScalar(x2),
-            SkDoubleToScalar(y2),
-            SkDoubleToScalar(w)
-            );
-}
-
-void Path2DBuilder::Finalize(const v8::FunctionCallbackInfo<v8::Value>& args) {
-    Path2DBuilder* path = Unwrap(args);
-
-    // Build Path2D from out fSkPath and return it.
-    SkPath* skPath = new SkPath(path->fSkPath);
-
-    path->fSkPath.reset();
-
-    Path2D* pathWrap = new Path2D(skPath);
-
-    args.GetReturnValue().Set(pathWrap->persistent());
-}
diff --git a/src/third_party/skia/experimental/SkV8Example/Path2DBuilder.h b/src/third_party/skia/experimental/SkV8Example/Path2DBuilder.h
deleted file mode 100644
index da9bddc..0000000
--- a/src/third_party/skia/experimental/SkV8Example/Path2DBuilder.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2014 Google Inc.
- *
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- */
-
-#ifndef SkV8Example_Path2DBuilder_DEFINED
-#define SkV8Example_Path2DBuilder_DEFINED
-
-#include <v8.h>
-
-#include "SkPath.h"
-#include "SkTypes.h"
-
-class Global;
-
-class Path2DBuilder : SkNoncopyable {
-public:
-    Path2DBuilder() : fSkPath() {}
-    virtual ~Path2DBuilder() {}
-
-    const SkPath& getSkPath() { return fSkPath; }
-
-    // The JS Path2DBuilder constuctor implementation.
-    static void ConstructPath(const v8::FunctionCallbackInfo<v8::Value>& args);
-
-    // Add the Path2DBuilder JS constructor to the global context.
-    static void AddToGlobal(Global* global);
-
-    // Path2DBuilder JS methods.
-    static void ClosePath(const v8::FunctionCallbackInfo<v8::Value>& args);
-    static void MoveTo(const v8::FunctionCallbackInfo<v8::Value>& args);
-    static void LineTo(const v8::FunctionCallbackInfo<v8::Value>& args);
-    static void QuadraticCurveTo(
-            const v8::FunctionCallbackInfo<v8::Value>& args);
-    static void BezierCurveTo(const v8::FunctionCallbackInfo<v8::Value>& args);
-    static void Arc(const v8::FunctionCallbackInfo<v8::Value>& args);
-    static void Rect(const v8::FunctionCallbackInfo<v8::Value>& args);
-    static void Oval(const v8::FunctionCallbackInfo<v8::Value>& args);
-    static void ConicTo(const v8::FunctionCallbackInfo<v8::Value>& args);
-    static void Finalize(const v8::FunctionCallbackInfo<v8::Value>& args);
-private:
-    SkPath fSkPath;
-
-    static Path2DBuilder* Unwrap(const v8::FunctionCallbackInfo<v8::Value>& args);
-
-    static Global* gGlobal;
-};
-
-#endif
diff --git a/src/third_party/skia/experimental/SkV8Example/README b/src/third_party/skia/experimental/SkV8Example/README
deleted file mode 100644
index f650cf9..0000000
--- a/src/third_party/skia/experimental/SkV8Example/README
+++ /dev/null
@@ -1,16 +0,0 @@
-Build Instructions
-==================
-
-V8 gyp is not quite standard and Chromium uses a Python script
-to work around that, for now we have some manual steps to do
-before you can compile and run this sample:
-
-1. Uncomment out the v8 dep in DEPS and re-run gclient sync.
-2. Run 'make dependencies' in third_pary/externals/v8.
-3. Run 'make native' in third_pary/externals/v8.
-4. Uncomment SkV8Example in gyp/everything.gyp.
-5. Run 'ninja -C out/Debug SkV8Example'
-6. Run the sample as:
-     ./out/Debug/SkV8Example --infile experimental/SkV8Example/js/speed.js
-
-
diff --git a/src/third_party/skia/experimental/SkV8Example/SkV8Example.cpp b/src/third_party/skia/experimental/SkV8Example/SkV8Example.cpp
deleted file mode 100644
index a6a2a7e..0000000
--- a/src/third_party/skia/experimental/SkV8Example/SkV8Example.cpp
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Copyright 2013 Google Inc.
- *
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- */
-#include <v8.h>
-#include <include/libplatform/libplatform.h>
-
-#include "SkV8Example.h"
-#include "Global.h"
-#include "JsContext.h"
-#include "Path2D.h"
-#include "Path2DBuilder.h"
-
-#include "gl/GrGLUtil.h"
-#include "gl/GrGLDefines.h"
-#include "gl/GrGLInterface.h"
-#include "GrContext.h"
-#include "SkApplication.h"
-#include "SkCommandLineFlags.h"
-#include "SkData.h"
-#include "SkDraw.h"
-#include "SkGpuDevice.h"
-#include "SkGraphics.h"
-#include "SkScalar.h"
-#include "SkSurface.h"
-
-
-DEFINE_string2(infile, i, NULL, "Name of file to load JS from.\n");
-DEFINE_bool(gpu, true, "Use the GPU for rendering.");
-
-void application_init() {
-    SkGraphics::Init();
-    SkEvent::Init();
-}
-
-void application_term() {
-    SkEvent::Term();
-}
-
-SkV8ExampleWindow::SkV8ExampleWindow(void* hwnd, JsContext* context)
-    : INHERITED(hwnd)
-    , fJsContext(context)
-#if SK_SUPPORT_GPU
-    , fCurContext(NULL)
-    , fCurIntf(NULL)
-    , fCurSurface(NULL)
-#endif
-{
-    this->setVisibleP(true);
-    this->setClipToBounds(false);
-
-#if SK_SUPPORT_GPU
-    this->windowSizeChanged();
-#endif
-}
-
-SkV8ExampleWindow::~SkV8ExampleWindow() {
-#if SK_SUPPORT_GPU
-    SkSafeUnref(fCurContext);
-    SkSafeUnref(fCurIntf);
-    SkSafeUnref(fCurSurface);
-#endif
-}
-
-#if SK_SUPPORT_GPU
-void SkV8ExampleWindow::windowSizeChanged() {
-    if (FLAGS_gpu) {
-        SkOSWindow::AttachmentInfo attachmentInfo;
-        bool result = this->attach(
-                SkOSWindow::kNativeGL_BackEndType, 0, false, &attachmentInfo);
-        if (!result) {
-            printf("Failed to attach.");
-            exit(1);
-        }
-
-        fCurIntf = GrGLCreateNativeInterface();
-        fCurContext = GrContext::Create(
-                kOpenGL_GrBackend, (GrBackendContext) fCurIntf);
-        if (NULL == fCurIntf || NULL == fCurContext) {
-            printf("Failed to initialize GL.");
-            exit(1);
-        }
-
-        GrBackendRenderTargetDesc desc;
-        desc.fWidth = SkScalarRoundToInt(this->width());
-        desc.fHeight = SkScalarRoundToInt(this->height());
-        desc.fConfig = kSkia8888_GrPixelConfig;
-        desc.fOrigin = kBottomLeft_GrSurfaceOrigin;
-        desc.fSampleCnt = attachmentInfo.fSampleCount;
-        desc.fStencilBits = attachmentInfo.fStencilBits;
-        GrGLint buffer;
-        GR_GL_GetIntegerv(fCurIntf, GR_GL_FRAMEBUFFER_BINDING, &buffer);
-        desc.fRenderTargetHandle = buffer;
-
-        SkSafeUnref(fCurSurface);
-        fCurSurface = SkSurface::MakeFromBackendRenderTarget(fCurContext, desc,
-                                                             nullptr, nullptr).release();
-    }
-}
-#endif
-
-#if SK_SUPPORT_GPU
-SkSurface* SkV8ExampleWindow::createSurface() {
-    if (FLAGS_gpu) {
-        // Increase the ref count since callers of createSurface put the
-        // results in a sk_sp.
-        fCurSurface->ref();
-        return fCurSurface;
-    } else {
-        return this->INHERITED::createSurface();
-    }
-}
-#endif
-
-void SkV8ExampleWindow::onSizeChange() {
-    this->INHERITED::onSizeChange();
-
-#if SK_SUPPORT_GPU
-    this->windowSizeChanged();
-#endif
-}
-
-Global* global = NULL;
-
-void SkV8ExampleWindow::onDraw(SkCanvas* canvas) {
-
-    canvas->save();
-    canvas->drawColor(SK_ColorWHITE);
-
-    // Now jump into JS and call the onDraw(canvas) method defined there.
-    fJsContext->onDraw(canvas);
-
-    canvas->restore();
-
-    this->INHERITED::onDraw(canvas);
-
-#if SK_SUPPORT_GPU
-    if (FLAGS_gpu) {
-        fCurContext->flush();
-        this->present();
-    }
-#endif
-}
-
-#ifdef SK_BUILD_FOR_WIN
-void SkV8ExampleWindow::onHandleInval(const SkIRect& rect) {
-    RECT winRect;
-    winRect.top = rect.top();
-    winRect.bottom = rect.bottom();
-    winRect.right = rect.right();
-    winRect.left = rect.left();
-    InvalidateRect((HWND)this->getHWND(), &winRect, false);
-}
-#endif
-
-
-SkOSWindow* create_sk_window(void* hwnd, int argc, char** argv) {
-    printf("Started\n");
-
-    v8::V8::SetFlagsFromCommandLine(&argc, argv, true);
-    SkCommandLineFlags::Parse(argc, argv);
-
-    v8::V8::InitializeICU();
-    v8::Platform* platform = v8::platform::CreateDefaultPlatform();
-    v8::V8::InitializePlatform(platform);
-    v8::V8::Initialize();
-
-    v8::Isolate* isolate = v8::Isolate::New();
-    v8::Isolate::Scope isolate_scope(isolate);
-    v8::HandleScope handle_scope(isolate);
-    isolate->Enter();
-
-    global = new Global(isolate);
-
-
-    // Set up things to look like a browser by creating
-    // a console object that invokes our print function.
-    const char* startupScript =
-            "function Console() {};                   \n"
-            "Console.prototype.log = function() {     \n"
-            "  var args = Array.prototype.slice.call(arguments).join(' '); \n"
-            "  print(args);                      \n"
-            "};                                       \n"
-            "console = new Console();                 \n";
-
-    if (!global->parseScript(startupScript)) {
-        printf("Failed to parse startup script: %s.\n", FLAGS_infile[0]);
-        exit(1);
-    }
-
-    const char* script =
-            "function onDraw(canvas) {              \n"
-            "    canvas.fillStyle = '#00FF00';      \n"
-            "    canvas.fillRect(20, 20, 100, 100); \n"
-            "    canvas.inval();                    \n"
-            "}                                      \n";
-
-    sk_sp<SkData> data;
-    if (FLAGS_infile.count()) {
-        data = SkData::MakeFromFileName(FLAGS_infile[0]);
-        script = static_cast<const char*>(data->data());
-    }
-    if (NULL == script) {
-        printf("Could not load file: %s.\n", FLAGS_infile[0]);
-        exit(1);
-    }
-    Path2DBuilder::AddToGlobal(global);
-    Path2D::AddToGlobal(global);
-
-    if (!global->parseScript(script)) {
-        printf("Failed to parse file: %s.\n", FLAGS_infile[0]);
-        exit(1);
-    }
-
-
-    JsContext* jsContext = new JsContext(global);
-
-    if (!jsContext->initialize()) {
-        printf("Failed to initialize.\n");
-        exit(1);
-    }
-    SkV8ExampleWindow* win = new SkV8ExampleWindow(hwnd, jsContext);
-    global->setWindow(win);
-
-    return win;
-}
diff --git a/src/third_party/skia/experimental/SkV8Example/SkV8Example.h b/src/third_party/skia/experimental/SkV8Example/SkV8Example.h
deleted file mode 100644
index 5185722..0000000
--- a/src/third_party/skia/experimental/SkV8Example/SkV8Example.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright 2013 Google Inc.
- *
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- *
- */
-
-#ifndef SkV8Example_DEFINED
-#define SkV8Example_DEFINED
-
-#include "SkWindow.h"
-
-class GrContext;
-class GrGLInterface;
-class GrRenderTarget;
-class SkSurface;
-
-class JsContext;
-
-class SkV8ExampleWindow : public SkOSWindow {
-public:
-    SkV8ExampleWindow(void* hwnd, JsContext* canvas);
-    virtual ~SkV8ExampleWindow();
-
-protected:
-    void onDraw(SkCanvas* canvas) override;
-    void onSizeChange() override;
-
-#if SK_SUPPORT_GPU
-    SkSurface* createSurface() override;
-#endif
-
-#ifdef SK_BUILD_FOR_WIN
-    void onHandleInval(const SkIRect&) override;
-#endif
-
-    void windowSizeChanged();
-
-private:
-    typedef SkOSWindow INHERITED;
-    JsContext* fJsContext;
-
-#if SK_SUPPORT_GPU
-    GrContext*              fCurContext;
-    const GrGLInterface*    fCurIntf;
-    GrRenderTarget*         fCurRenderTarget;
-    SkSurface*              fCurSurface;
-#endif
-};
-
-#endif
diff --git a/src/third_party/skia/experimental/SkV8Example/compare/gears.html b/src/third_party/skia/experimental/SkV8Example/compare/gears.html
deleted file mode 100644
index abc4177..0000000
--- a/src/third_party/skia/experimental/SkV8Example/compare/gears.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <title>Gears</title>
-    <meta charset="utf-8" />
-</head>
-<body>
-    <canvas id=gears width=500 height=500>
-    <script src="../js/gears.js" type="text/javascript" charset="utf-8"></script>
-</body>
-</html>
diff --git a/src/third_party/skia/experimental/SkV8Example/compare/snow.html b/src/third_party/skia/experimental/SkV8Example/compare/snow.html
deleted file mode 100644
index 9c72e90..0000000
--- a/src/third_party/skia/experimental/SkV8Example/compare/snow.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-    <title>Snow</title>
-    <meta charset="utf-8" />
-</head>
-<body>
-    <canvas id=snow width=500 height=500>
-    <script src="../js/snow.js" type="text/javascript" charset="utf-8"></script>
-</body>
-</html>
diff --git a/src/third_party/skia/experimental/SkV8Example/js/gears.js b/src/third_party/skia/experimental/SkV8Example/js/gears.js
deleted file mode 100644
index a901f9d..0000000
--- a/src/third_party/skia/experimental/SkV8Example/js/gears.js
+++ /dev/null
@@ -1,183 +0,0 @@
-var IS_SKV8 = typeof document == "undefined";
-var HAS_PATH = typeof Path2D != "undefined";
-var HAS_DISPLAY_LIST = typeof DisplayList != "undefined";
-
-var NumTeeth = 24;
-var NumGears = 60;
-var DeltaTheta = Math.PI/90;
-var FaceColors = ["#000099", "#006600", "#990000", "#EEEE00"];
-var SideColors = ["#0000FF", "#009900", "#FF0000", "#CCCC00"];
-
-function makeGear(pathLike, r) {
-  var dT = Math.PI*2/NumTeeth;
-  var dTq = dT/4;
-  var outer = r;
-  var inner = 0.7 * r;
-  pathLike.moveTo(Math.sin(-2*dTq)*outer, Math.cos(-2*dTq)*outer);
-  for (var i=0; i<NumTeeth; i+=2) {
-    pathLike.lineTo(Math.sin(dT*i-dTq)*outer, Math.cos(dT*i-dTq)*outer);
-    pathLike.lineTo(Math.sin(dT*i+dTq)*inner, Math.cos(dT*i+dTq)*inner);
-    pathLike.lineTo(Math.sin(dT*(i+1)-dTq)*inner, Math.cos(dT*(i+1)-dTq)*inner);
-    pathLike.lineTo(Math.sin(dT*(i+1)+dTq)*outer, Math.cos(dT*(i+1)+dTq)*outer);
-  }
-}
-
-function gearPath(r) {
-  if (HAS_PATH) {
-    p = new Path2D();
-    makeGear(p, r)
-    p.closePath();
-    return p;
-  } else {
-    return null;
-  }
-}
-
-function gearDisplayListStroke(r, color) {
-  if (HAS_DISPLAY_LIST) {
-    p = new Path2D();
-    makeGear(p, r)
-    p.closePath();
-    var dl = new DisplayList();
-    dl.strokeStyle = color;
-    dl.stroke(p);
-    dl.finalize()
-    return dl;
-  } else {
-    return null;
-  }
-}
-
-function gearDisplayListFill(r, color) {
-  if (HAS_DISPLAY_LIST) {
-    p = new Path2D();
-    makeGear(p, r)
-    p.closePath();
-    var dl = new DisplayList();
-    dl.fillStyle = color;
-    dl.fill(p);
-    dl.finalize()
-    return dl;
-  } else {
-    return null;
-  }
-}
-
-function strokeGear(ctx, gear) {
-  if (HAS_PATH) {
-    ctx.stroke(gear.path);
-  } else {
-    ctx.beginPath();
-    makeGear(ctx, gear.r);
-    ctx.closePath();
-    ctx.stroke();
-  }
-}
-
-function fillGear(ctx) {
-  if (HAS_PATH) {
-    ctx.fill(gear.path);
-  } else {
-    ctx.beginPath();
-    makeGear(ctx, gear.r);
-    ctx.closePath();
-    ctx.fill();
-  }
-}
-
-function draw3DGear(ctx, angle, gear) {
-  ctx.strokeStyle = gear.sideColor;
-  ctx.fillStyle = gear.faceColor;
-  ctx.rotate(angle);
-  strokeGear(ctx, gear);
-  for (var i=0; i < 20; i++) {
-    ctx.rotate(-angle);
-    ctx.translate(0.707, 0.707);
-    ctx.rotate(angle);
-    if (HAS_DISPLAY_LIST) {
-        ctx.draw(gear.gearStroke);
-    } else {
-        strokeGear(ctx, gear);
-    }
-  }
-  if (HAS_DISPLAY_LIST) {
-      ctx.draw(gear.gearFill);
-  } else {
-      fillGear(ctx, gear);
-  }
-  ctx.rotate(-angle);
-}
-
-function draw3DGearAt(ctx, angle, gear) {
-  ctx.save();
-  ctx.translate(gear.x, gear.y);
-  draw3DGear(ctx, angle, gear);
-  ctx.restore();
-}
-
-var onDraw = function() {
-  var ticks=0;
-  var rotation = 0;
-  var gears = [];
-
-  for (var i=0; i<NumGears; i++) {
-    color = Math.floor(Math.random()*FaceColors.length);
-    r = Math.random()*100+5;
-    gears.push({
-        x: Math.random()*500,
-        y: Math.random()*500,
-        path: gearPath(r),
-        gearFill: gearDisplayListFill(r, FaceColors[color]),
-        gearStroke: gearDisplayListStroke(r, SideColors[color]),
-        r: r,
-        faceColor: FaceColors[color],
-        sideColor: SideColors[color]
-    });
-  }
-
-  function draw(ctx) {
-    ctx.resetTransform();
-
-    ctx.fillStyle = "#FFFFFF";
-    ctx.fillRect(0, 0, 499, 499);
-
-    rotation += DeltaTheta;
-    if (rotation >= Math.PI*2) {
-      rotation = 0;
-    }
-
-    for (var i=0; i < gears.length; i++) {
-      gear = gears[i];
-      draw3DGearAt(ctx, rotation, gear);
-    }
-
-    ticks++;
-    if (IS_SKV8) {
-      inval();
-    }
-  };
-
-  function fps() {
-    console.log(ticks);
-    ticks = 0;
-    setTimeout(fps, 1000);
-  };
-
-  setTimeout(fps, 1000);
-
-  return draw;
-}();
-
-if (!IS_SKV8) {
-  window.onload = function(){
-    var canvas = document.getElementById("gears");
-    var ctx = canvas.getContext("2d");
-    function drawCallback() {
-      onDraw(ctx);
-      setTimeout(drawCallback, 1);
-    }
-    setTimeout(drawCallback, 1);
-  }
-}
-
-console.log("HAS_PATH: " + HAS_PATH);
diff --git a/src/third_party/skia/experimental/SkV8Example/js/path.js b/src/third_party/skia/experimental/SkV8Example/js/path.js
deleted file mode 100644
index 81eb0d7..0000000
--- a/src/third_party/skia/experimental/SkV8Example/js/path.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * @fileoverview Sample onDraw script for use with SkV8Example.
- */
-var onDraw = function(){
-    var p = new Path2D();
-    p.moveTo(0, 0);
-    p.bezierCurveTo(0, 100, 100, 0, 200, 200);
-    p.close();
-    p.moveTo(0, 300);
-    p.arc(0, 300, 40, Math.PI/2, 3/2*Math.PI);
-    function f(context) {
-        context.translate(10, 10);
-        for (var i=0; i<256; i++) {
-            context.strokeStyle = '#0000' + toHex(i);
-            context.stroke(p);
-            context.translate(1, 0);
-        }
-        context.fillStyle = '#ff0000';
-        print(context.width, context.height);
-        context.resetTransform();
-        context.fillRect(context.width/2, context.height/2, 20, 20);
-    };
-    return f;
-}();
-
-
-function toHex(n) {
-  var s = n.toString(16);
-  if (s.length == 1) {
-    s = "0" + s;
-  }
-  return s;
-}
diff --git a/src/third_party/skia/experimental/SkV8Example/js/sample.js b/src/third_party/skia/experimental/SkV8Example/js/sample.js
deleted file mode 100644
index f04da33..0000000
--- a/src/third_party/skia/experimental/SkV8Example/js/sample.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * @fileoverview Sample onDraw script for use with SkV8Example.
- */
-var onDraw = function(){
-  var ticks = 0;
-  var b = new Path2DBuilder();
-  b.rect(0, 0, 200, 200);
-  var p = b.finalize();
-
-  function f(context) {
-    ticks += 1;
-
-    context.translate(context.width/2, context.height/2);
-    context.rotate(ticks/10);
-    context.drawPath(p);
-
-    inval();
-  };
-
-  function onTimeout() {
-      console.log(ticks);
-      ticks = 0;
-      setTimeout(onTimeout, 1000);
-  }
-  setTimeout(onTimeout, 1000);
-
-  return f;
-}();
-
diff --git a/src/third_party/skia/experimental/SkV8Example/js/snow.js b/src/third_party/skia/experimental/SkV8Example/js/snow.js
deleted file mode 100644
index 4640fd6..0000000
--- a/src/third_party/skia/experimental/SkV8Example/js/snow.js
+++ /dev/null
@@ -1,95 +0,0 @@
-var IS_SKV8 = typeof document == "undefined";
-var HAS_PATH = typeof Path2D != "undefined";
-
-function circlePath(r) {
-  if (HAS_PATH) {
-    var p = new Path2D();
-    p.arc(0, 0, r, 0, 2*Math.PI);
-    p.closePath();
-    return p;
-  } else {
-    return null;
-  }
-}
-
-var onDraw = function() {
-  var W = 500;
-  var H = 500;
-  var NumParticles = 100;
-
-  var angle = 0;
-  var ticks = 0;
-  var particles =[];
-
-  for (var i = 0; i < NumParticles; i++) {
-    particles[i] = {
-      x:    Math.floor(Math.random()*W),
-      y:    Math.floor(Math.random()*H),
-      r:    Math.floor(Math.random()*7+1),
-      path: circlePath(Math.random()*7+1),
-    }
-  }
-
-  function draw(ctx) {
-    ctx.fillStyle = "#ADD8E6";
-    ctx.fillRect(0, 0, W-1, H-1);
-    ctx.fillStyle = "#FFFFFF";
-
-    angle += 0.0039;
-    for (var i = 0; i < particles.length; i++) {
-      var p = particles[i];
-      p.x += Math.floor(Math.sin(angle)*5.0);
-      p.y += 0.6*p.r;
-      if (p.x > W) {
-        p.x-=W;
-      }
-      if (p.x < 0) {
-        p.x += W;
-      }
-      if(p.y>(H+1)){
-        p.y = 0;
-      }
-      if (HAS_PATH) {
-        ctx.save();
-        ctx.translate(p.x, p.y);
-        ctx.fill(p.path);
-        ctx.restore();
-      } else {
-        ctx.beginPath();
-        ctx.moveTo(p.x, p.y);
-        ctx.arc(p.x, p.y, p.r, 0, 2*Math.PI, true);
-        ctx.closePath();
-        ctx.fill();
-      }
-    };
-
-    ticks++;
-    if (IS_SKV8) {
-      inval();
-    }
-  }
-
-  function fps() {
-    console.log(ticks);
-    ticks = 0;
-    setTimeout(fps, 1000);
-  }
-
-  setTimeout(fps, 1000);
-
-  return draw;
-}();
-
-if (!IS_SKV8) {
-  window.onload = function(){
-    var canvas = document.getElementById("snow");
-    var ctx = canvas.getContext("2d");
-    function drawCallback() {
-      onDraw(ctx);
-      setTimeout(drawCallback, 1);
-    }
-    setTimeout(drawCallback, 1);
-  }
-}
-
-console.log("HAS_PATH: " + HAS_PATH);
diff --git a/src/third_party/skia/experimental/SkV8Example/js/speed.js b/src/third_party/skia/experimental/SkV8Example/js/speed.js
deleted file mode 100644
index 5b0f001..0000000
--- a/src/third_party/skia/experimental/SkV8Example/js/speed.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * @fileoverview Sample onDraw script for use with SkV8Example.
- */
-var onDraw = function(){
-  var tick = 0;
-  function f(canvas) {
-    tick += 0.1;
-    canvas.fillStyle = '#0000ff';
-    canvas.fillRect(100, 100, Math.sin(tick)*100, Math.cos(tick)*100);
-    inval();
-  };
-
-  function onTimeout() {
-      print(tick*10, " FPS");
-      setTimeout(onTimeout, 1000);
-      tick=0;
-  }
-
-  setTimeout(onTimeout, 1000);
-
-  return f;
-}();
-
diff --git a/src/third_party/skia/experimental/c-api-example/c.md b/src/third_party/skia/experimental/c-api-example/c.md
index 19ae515..d173236 100644
--- a/src/third_party/skia/experimental/c-api-example/c.md
+++ b/src/third_party/skia/experimental/c-api-example/c.md
@@ -127,5 +127,4 @@
             experimental/c-api-example/skia-c-example.c \
             "$SKIA_LIB_DIR"/libskia.* -Wl,-rpath -Wl,"$SKIA_LIB_DIR"
         ./skia-c-example
-        [ $(uname) = Darwin ] && open     skia-c-example.png
-        [ $(uname) = Linux  ] && xdg-open skia-c-example.png
+        bin/sysopen skia-c-example.png
diff --git a/src/third_party/skia/experimental/c-api-example/skia-c-example.c b/src/third_party/skia/experimental/c-api-example/skia-c-example.c
index 66b17fc..7840806 100644
--- a/src/third_party/skia/experimental/c-api-example/skia-c-example.c
+++ b/src/third_party/skia/experimental/c-api-example/skia-c-example.c
@@ -6,20 +6,18 @@
  */
 #include <stdio.h>
 
-#include "sk_data.h"
-#include "sk_image.h"
-#include "sk_canvas.h"
-#include "sk_surface.h"
-#include "sk_paint.h"
-#include "sk_path.h"
+#include "include/c/sk_canvas.h"
+#include "include/c/sk_data.h"
+#include "include/c/sk_image.h"
+#include "include/c/sk_imageinfo.h"
+#include "include/c/sk_paint.h"
+#include "include/c/sk_path.h"
+#include "include/c/sk_surface.h"
 
 static sk_surface_t* make_surface(int32_t w, int32_t h) {
-    sk_imageinfo_t info;
-    info.width = w;
-    info.height = h;
-    info.colorType = sk_colortype_get_default_8888();
-    info.alphaType = PREMUL_SK_ALPHATYPE;
-    return sk_surface_new_raster(&info, NULL);
+    sk_imageinfo_t* info = sk_imageinfo_new(w, h, RGBA_8888_SK_COLORTYPE,
+                                            PREMUL_SK_ALPHATYPE, NULL);
+    return sk_surface_new_raster(info, NULL);
 }
 
 static void emit_png(const char* path, sk_surface_t* surface) {
diff --git a/src/third_party/skia/experimental/documentation/gerrit.md b/src/third_party/skia/experimental/documentation/gerrit.md
index 6284685..ce4459b 100644
--- a/src/third_party/skia/experimental/documentation/gerrit.md
+++ b/src/third_party/skia/experimental/documentation/gerrit.md
@@ -1,7 +1,7 @@
 Using Gerrit without git-cl
 ===========================
 
-setup
+Setup
 -----
 
 The following must be executed within the Skia source repository.
@@ -10,19 +10,24 @@
 each commit.  Gerrit only accepts changes with a Change-Id and uses it to
 identify which review a change applies to.
 
-    curl -Lo "$(git rev-parse --git-dir)/hooks/commit-msg"
-      'https://gerrit-review.googlesource.com/tools/hooks/commit-msg'
-    chmod +x "$(git rev-parse --git-dir)/hooks/commit-msg"
+    experimental/tools/set-change-id-hook
 
-If you aquired Skia from a mirror (such as github), you need to change the
-`origin` remote to point to point to googlesource.  Advanvced uses will note
+If you acquired Skia from a mirror (such as github), you need to change the
+`origin` remote to point to point to googlesource.  Advanced uses will note
 that there is nothing special about the string `origin` and that you could call
 this remote anything you want, as long as you use that name for `get push`.
 
     git remote set-url origin 'https://skia.googlesource.com/skia.git'
 
 
-creating a change
+Authentication
+--------------
+
+Go to [skia.googlesource.com/new-password](https://skia.googlesource.com/new-password)
+and follow the instructions.
+
+
+Creating a Change
 -----------------
 
 1.  Create a topic branch
@@ -60,8 +65,11 @@
 
     [Gerrit Upload Documentation](https://gerrit-review.googlesource.com/Documentation/user-upload.html)
 
+5.  Open in web browser:
 
-updating a change
+        bin/sysopen https://skia-review.googlesource.com/c/skia/+/$(bin/gerrit-number @)
+
+Updating a Change
 -----------------
 
 
@@ -82,12 +90,30 @@
 
     If you want to set a comment message for this patch set, do this instead:
 
-        git push origin @:refs/for/master%m=this_is_the_patch_set_comment_message
+        M=$(experimental/tools/gerrit_percent_encode 'This is the patch set comment message!')
+        git push origin @:refs/for/master%m=$M
 
-    The title of this patch set will be "this is the patch set comment message".
+    The title of this patch set will be "This is the patch set comment message!".
 
 
-scripting
+Triggering Commit-Queue Dry Run when you upload a patch
+-------------------------------------------------------
+
+    M=$(experimental/tools/gerrit_percent_encode 'This is the patch set comment message!')
+    git push origin @:refs/for/master%l=Commit-Queue+1,m=$M
+
+
+Using `git cl try`
+------------------
+
+On your current branch, after uploading to gerrit:
+
+    git cl issue $(bin/gerrit-number @)
+
+Now `git cl try` and `bin/try` will work correctly.
+
+
+Scripting
 ---------
 
 You may want to make git aliases for common tasks:
@@ -98,6 +124,10 @@
 
     git config alias.amend-head 'commit --all --amend --reuse-message=@'
 
+Set the CL issue numnber:
+
+    git config alias.setcl '!git-cl issue $(bin/gerrit-number @)'
+
 The following shell script will squash all commits on the current branch,
 assuming that the branch has an upstream topic branch.
 
diff --git a/src/third_party/skia/experimental/expectations/skp/Test-Mac10.8-MacMini4.1-GeForce320M-x86_64-Debug/renderskp-defaults.json b/src/third_party/skia/experimental/expectations/skp/Test-Mac10.8-MacMini4.1-GeForce320M-x86_64-Debug/renderskp-defaults.json
deleted file mode 100644
index 47114b6..0000000
--- a/src/third_party/skia/experimental/expectations/skp/Test-Mac10.8-MacMini4.1-GeForce320M-x86_64-Debug/renderskp-defaults.json
+++ /dev/null
@@ -1,1346 +0,0 @@
-{
-  "expected-results": {
-    "desk_baidu.skp": {
-      "tiled-images": [
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5510949507806706943", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_5510949507806706943.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4622418091259302841", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_4622418091259302841.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7705930371507694208", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_7705930371507694208.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12317749648466137796", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_12317749648466137796.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13092743760936029533", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_13092743760936029533.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14783408633137721173", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_14783408633137721173.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "18085831060737163534", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_18085831060737163534.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1664185099925875810", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_1664185099925875810.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13783872130691114045", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_13783872130691114045.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4251409765260720119", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_4251409765260720119.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15909889068299287523", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_15909889068299287523.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15215602532725166577", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_15215602532725166577.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12815364849356885672", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_12815364849356885672.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13164588161148906052", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_13164588161148906052.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2539157984787587772", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_2539157984787587772.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1027331229460980498", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_1027331229460980498.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10477184082008794723", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_10477184082008794723.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16643765212098808703", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_16643765212098808703.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17027327171337018732", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_17027327171337018732.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17428317017476560348", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_17428317017476560348.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5909337452074227103", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_5909337452074227103.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13302609138176228816", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_13302609138176228816.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16858395402357368969", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_16858395402357368969.png", 
-          "reviewed-by-human": false
-        }
-      ]
-    }, 
-    "desk_blogger.skp": {
-      "tiled-images": [
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "18193696074589909928", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_18193696074589909928.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6497701297353523037", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6497701297353523037.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11785152122139506459", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11785152122139506459.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "18430208307346174630", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_18430208307346174630.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16877428576881411401", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16877428576881411401.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2019481412010345810", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2019481412010345810.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15854601218802446421", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15854601218802446421.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15469534865109249405", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15469534865109249405.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6662796013602259314", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6662796013602259314.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16173971805930781909", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16173971805930781909.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15391249933675296541", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15391249933675296541.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "18399440961969146567", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_18399440961969146567.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6069040010646638133", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6069040010646638133.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6745453463705933528", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6745453463705933528.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "873197292128898639", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_873197292128898639.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12501067190077474731", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12501067190077474731.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12182843447128977645", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12182843447128977645.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "26773737329821472", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_26773737329821472.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9227736571607873653", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9227736571607873653.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "796682111958180573", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_796682111958180573.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5025228445659542827", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5025228445659542827.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8102640754580394584", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8102640754580394584.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13983369311423653591", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13983369311423653591.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7866999636262318063", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7866999636262318063.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8493174528435558164", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8493174528435558164.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9326417106879447920", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9326417106879447920.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16093948354673765421", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16093948354673765421.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11361934388533362154", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11361934388533362154.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8771978309291039635", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8771978309291039635.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10230062863412328400", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10230062863412328400.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2341453029778767862", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2341453029778767862.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3031422606891944260", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3031422606891944260.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2684293480018873967", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2684293480018873967.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17939753176675551940", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17939753176675551940.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15369960552495866504", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15369960552495866504.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3168314579830116147", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3168314579830116147.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13057211837426464782", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13057211837426464782.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16138926132656497197", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16138926132656497197.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17863239536507361583", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17863239536507361583.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10248905545368276433", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10248905545368276433.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7383323457948286876", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7383323457948286876.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14197795513211745038", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14197795513211745038.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4734987298013439083", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4734987298013439083.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15465284720103991575", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15465284720103991575.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5516480160298870797", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5516480160298870797.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13021672792550622692", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13021672792550622692.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3099173933603006251", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3099173933603006251.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16172889928626067999", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16172889928626067999.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15236078591758877622", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15236078591758877622.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6680102432844645833", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6680102432844645833.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16128165167478823048", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16128165167478823048.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3605252414081920514", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3605252414081920514.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16589129184558107315", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16589129184558107315.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6638093165109080854", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6638093165109080854.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9956115900941476755", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9956115900941476755.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8686898041074983968", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8686898041074983968.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9964189931096402288", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9964189931096402288.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6957505210631754297", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6957505210631754297.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10195939513068588505", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10195939513068588505.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7906582923153584382", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7906582923153584382.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "18064618796114971019", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_18064618796114971019.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11369907070287413693", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11369907070287413693.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7527290808416231356", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7527290808416231356.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "383738317842516145", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_383738317842516145.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15252208369879473582", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15252208369879473582.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "841943910542607154", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_841943910542607154.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4101647095708255832", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4101647095708255832.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10224131532229351507", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10224131532229351507.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10417063134679809185", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10417063134679809185.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17149322956605856579", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17149322956605856579.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17852070562173402509", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17852070562173402509.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5100603959220766123", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5100603959220766123.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6889850068780519491", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6889850068780519491.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "392170183229836145", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_392170183229836145.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14548182214395934108", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14548182214395934108.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9396525855978633839", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9396525855978633839.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15027461975863665772", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15027461975863665772.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14512247607555859904", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14512247607555859904.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4640376493988766790", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4640376493988766790.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16906327606017927194", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16906327606017927194.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1567144668892774143", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1567144668892774143.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16846477871394845568", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16846477871394845568.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13337526335316080955", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13337526335316080955.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12486618539850454912", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12486618539850454912.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3250469153123222089", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3250469153123222089.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10039760334491748169", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10039760334491748169.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8920840005472164712", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8920840005472164712.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10312960052215366927", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10312960052215366927.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9579612800481114333", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9579612800481114333.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10590514961500285791", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10590514961500285791.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4595240846166872319", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4595240846166872319.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "736390975313861599", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_736390975313861599.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4118383298795315325", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4118383298795315325.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13670063135855155613", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13670063135855155613.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4153691405972215108", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4153691405972215108.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2644951716624303240", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2644951716624303240.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11755522400750885035", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11755522400750885035.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16368577349712977363", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16368577349712977363.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9084154871324098052", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9084154871324098052.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2311531479661712409", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2311531479661712409.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5384569044418205202", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5384569044418205202.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5506206312736182193", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5506206312736182193.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }
-      ]
-    }
-  }, 
-  "header": {
-    "revision": 1, 
-    "type": "ChecksummedImages"
-  }
-}
\ No newline at end of file
diff --git a/src/third_party/skia/experimental/expectations/skp/Test-Mac10.8-MacMini4.1-GeForce320M-x86_64-Debug/renderskp-deferImageDecoding.json b/src/third_party/skia/experimental/expectations/skp/Test-Mac10.8-MacMini4.1-GeForce320M-x86_64-Debug/renderskp-deferImageDecoding.json
deleted file mode 100644
index 6a86d87..0000000
--- a/src/third_party/skia/experimental/expectations/skp/Test-Mac10.8-MacMini4.1-GeForce320M-x86_64-Debug/renderskp-deferImageDecoding.json
+++ /dev/null
@@ -1,1346 +0,0 @@
-{
-  "expected-results": {
-    "desk_baidu.skp": {
-      "tiled-images": [
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15416105200059008351", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_15416105200059008351.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4973086474270251778", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_4973086474270251778.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "18021596506523099808", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_18021596506523099808.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12426445537303847919", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_12426445537303847919.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9876786765754472302", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_9876786765754472302.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15331065111291899650", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_15331065111291899650.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17539528729374288441", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_17539528729374288441.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9100680979201226800", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_9100680979201226800.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12173323263528710419", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_12173323263528710419.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3712178768989178390", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_3712178768989178390.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "211888896324696047", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_211888896324696047.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7083400329331785041", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_7083400329331785041.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9815460630499410395", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_9815460630499410395.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2473890974675091487", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_2473890974675091487.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2479754884816755898", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_2479754884816755898.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14172691682527577539", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_14172691682527577539.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5621989358731174221", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_5621989358731174221.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2194449339140901772", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_2194449339140901772.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15475485765526191487", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_15475485765526191487.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9104131931332113553", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_9104131931332113553.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16302809368008861575", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_16302809368008861575.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11599249512246895329", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_11599249512246895329.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16858395402357368969", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_16858395402357368969.png", 
-          "reviewed-by-human": false
-        }
-      ]
-    }, 
-    "desk_blogger.skp": {
-      "tiled-images": [
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7841221974904480141", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7841221974904480141.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12952058328558118361", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12952058328558118361.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13438474142770400621", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13438474142770400621.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17305138246482099834", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17305138246482099834.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2339237720340106572", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2339237720340106572.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9133518276788097938", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9133518276788097938.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16768763127532639628", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16768763127532639628.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16108613879169710267", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16108613879169710267.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6781918266006344063", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6781918266006344063.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9062645238268733571", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9062645238268733571.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "172493045746957600", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_172493045746957600.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4296133301180502367", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4296133301180502367.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15638577549339283490", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15638577549339283490.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12644379640631274656", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12644379640631274656.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3352045847025161390", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3352045847025161390.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15123237272049632329", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15123237272049632329.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17808053363983400384", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17808053363983400384.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1870959069040666868", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1870959069040666868.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5578637393273578954", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5578637393273578954.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17468170000466055398", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17468170000466055398.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2798133757667981950", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2798133757667981950.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12056186299810582132", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12056186299810582132.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14805126467323821815", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14805126467323821815.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1262761629208254711", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1262761629208254711.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10017221126624110965", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10017221126624110965.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9326417106879447920", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9326417106879447920.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10732956852784776392", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10732956852784776392.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16796717901686899745", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16796717901686899745.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5284376332506067560", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5284376332506067560.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8445679907174827840", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8445679907174827840.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4045733944080058452", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4045733944080058452.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16573813979083448236", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16573813979083448236.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8964683934034389040", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8964683934034389040.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17571463359924121607", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17571463359924121607.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15369960552495866504", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15369960552495866504.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3487218210168886496", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3487218210168886496.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16116481139464372435", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16116481139464372435.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10175869703021583627", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10175869703021583627.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2495618649560987836", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2495618649560987836.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16700931713289358511", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16700931713289358511.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10828047253212456343", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10828047253212456343.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1375951298049525932", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1375951298049525932.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "43126774536983876", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_43126774536983876.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10994815648702250558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10994815648702250558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10721132518498860573", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10721132518498860573.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15521913976926340790", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15521913976926340790.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15462843448168743659", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15462843448168743659.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16172889928626067999", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16172889928626067999.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15236078591758877622", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15236078591758877622.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6680102432844645833", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6680102432844645833.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15178861613701060319", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15178861613701060319.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9821698822945749270", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9821698822945749270.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6533741389672656623", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6533741389672656623.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6631881651846346069", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6631881651846346069.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10474305944716211711", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10474305944716211711.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1456787145413697865", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1456787145413697865.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13598941742737334496", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13598941742737334496.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10872701498030761173", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10872701498030761173.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11936566152876930889", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11936566152876930889.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16948841223902088798", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16948841223902088798.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2075646102019337688", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2075646102019337688.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10328467874235548196", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10328467874235548196.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7754424482287838161", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7754424482287838161.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10187865664468729110", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10187865664468729110.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9692329142475544501", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9692329142475544501.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11805082683909040672", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11805082683909040672.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12055072783392081613", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12055072783392081613.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16415644052404953300", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16415644052404953300.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10417063134679809185", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10417063134679809185.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17149322956605856579", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17149322956605856579.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17852070562173402509", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17852070562173402509.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6009473361945447992", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6009473361945447992.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2906954880153437864", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2906954880153437864.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16159666950478632099", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16159666950478632099.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "434955267933854712", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_434955267933854712.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6964150898141519015", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6964150898141519015.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6940588501707502747", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6940588501707502747.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6763326955485442779", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6763326955485442779.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11068022256279202338", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11068022256279202338.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2092729783561167800", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2092729783561167800.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8259470553186264019", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8259470553186264019.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11439861493994832272", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11439861493994832272.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13337526335316080955", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13337526335316080955.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16032242154117966364", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16032242154117966364.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10022606368105601930", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10022606368105601930.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2626105827972108937", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2626105827972108937.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3856258771777886656", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3856258771777886656.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8213635271367467056", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8213635271367467056.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10608071113433085369", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10608071113433085369.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3035135943591931231", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3035135943591931231.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6241565033127932581", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6241565033127932581.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1210958474959001922", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1210958474959001922.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4118383298795315325", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4118383298795315325.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13670063135855155613", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13670063135855155613.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4153691405972215108", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4153691405972215108.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17317665081186813642", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17317665081186813642.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11606967570971750256", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11606967570971750256.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4714743017604436495", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4714743017604436495.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9084154871324098052", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9084154871324098052.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7664523892962060584", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7664523892962060584.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3214042322297598605", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3214042322297598605.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4036117529343107446", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4036117529343107446.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }
-      ]
-    }
-  }, 
-  "header": {
-    "revision": 1, 
-    "type": "ChecksummedImages"
-  }
-}
\ No newline at end of file
diff --git a/src/third_party/skia/experimental/expectations/skp/Test-Mac10.8-MacMini4.1-GeForce320M-x86_64-Debug/renderskp-grid.json b/src/third_party/skia/experimental/expectations/skp/Test-Mac10.8-MacMini4.1-GeForce320M-x86_64-Debug/renderskp-grid.json
deleted file mode 100644
index 47114b6..0000000
--- a/src/third_party/skia/experimental/expectations/skp/Test-Mac10.8-MacMini4.1-GeForce320M-x86_64-Debug/renderskp-grid.json
+++ /dev/null
@@ -1,1346 +0,0 @@
-{
-  "expected-results": {
-    "desk_baidu.skp": {
-      "tiled-images": [
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5510949507806706943", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_5510949507806706943.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4622418091259302841", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_4622418091259302841.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7705930371507694208", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_7705930371507694208.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12317749648466137796", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_12317749648466137796.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13092743760936029533", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_13092743760936029533.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14783408633137721173", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_14783408633137721173.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "18085831060737163534", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_18085831060737163534.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1664185099925875810", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_1664185099925875810.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13783872130691114045", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_13783872130691114045.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4251409765260720119", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_4251409765260720119.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15909889068299287523", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_15909889068299287523.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15215602532725166577", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_15215602532725166577.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12815364849356885672", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_12815364849356885672.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13164588161148906052", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_13164588161148906052.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2539157984787587772", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_2539157984787587772.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1027331229460980498", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_1027331229460980498.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10477184082008794723", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_10477184082008794723.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16643765212098808703", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_16643765212098808703.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17027327171337018732", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_17027327171337018732.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17428317017476560348", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_17428317017476560348.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5909337452074227103", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_5909337452074227103.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13302609138176228816", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_13302609138176228816.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16858395402357368969", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_16858395402357368969.png", 
-          "reviewed-by-human": false
-        }
-      ]
-    }, 
-    "desk_blogger.skp": {
-      "tiled-images": [
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "18193696074589909928", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_18193696074589909928.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6497701297353523037", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6497701297353523037.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11785152122139506459", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11785152122139506459.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "18430208307346174630", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_18430208307346174630.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16877428576881411401", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16877428576881411401.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2019481412010345810", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2019481412010345810.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15854601218802446421", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15854601218802446421.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15469534865109249405", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15469534865109249405.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6662796013602259314", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6662796013602259314.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16173971805930781909", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16173971805930781909.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15391249933675296541", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15391249933675296541.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "18399440961969146567", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_18399440961969146567.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6069040010646638133", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6069040010646638133.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6745453463705933528", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6745453463705933528.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "873197292128898639", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_873197292128898639.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12501067190077474731", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12501067190077474731.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12182843447128977645", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12182843447128977645.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "26773737329821472", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_26773737329821472.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9227736571607873653", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9227736571607873653.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "796682111958180573", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_796682111958180573.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5025228445659542827", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5025228445659542827.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8102640754580394584", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8102640754580394584.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13983369311423653591", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13983369311423653591.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7866999636262318063", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7866999636262318063.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8493174528435558164", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8493174528435558164.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9326417106879447920", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9326417106879447920.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16093948354673765421", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16093948354673765421.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11361934388533362154", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11361934388533362154.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8771978309291039635", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8771978309291039635.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10230062863412328400", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10230062863412328400.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2341453029778767862", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2341453029778767862.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3031422606891944260", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3031422606891944260.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2684293480018873967", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2684293480018873967.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17939753176675551940", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17939753176675551940.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15369960552495866504", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15369960552495866504.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3168314579830116147", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3168314579830116147.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13057211837426464782", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13057211837426464782.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16138926132656497197", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16138926132656497197.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17863239536507361583", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17863239536507361583.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10248905545368276433", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10248905545368276433.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7383323457948286876", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7383323457948286876.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14197795513211745038", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14197795513211745038.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4734987298013439083", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4734987298013439083.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15465284720103991575", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15465284720103991575.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5516480160298870797", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5516480160298870797.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13021672792550622692", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13021672792550622692.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3099173933603006251", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3099173933603006251.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16172889928626067999", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16172889928626067999.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15236078591758877622", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15236078591758877622.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6680102432844645833", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6680102432844645833.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16128165167478823048", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16128165167478823048.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3605252414081920514", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3605252414081920514.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16589129184558107315", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16589129184558107315.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6638093165109080854", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6638093165109080854.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9956115900941476755", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9956115900941476755.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8686898041074983968", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8686898041074983968.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9964189931096402288", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9964189931096402288.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6957505210631754297", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6957505210631754297.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10195939513068588505", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10195939513068588505.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7906582923153584382", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7906582923153584382.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "18064618796114971019", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_18064618796114971019.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11369907070287413693", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11369907070287413693.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7527290808416231356", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7527290808416231356.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "383738317842516145", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_383738317842516145.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15252208369879473582", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15252208369879473582.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "841943910542607154", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_841943910542607154.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4101647095708255832", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4101647095708255832.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10224131532229351507", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10224131532229351507.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10417063134679809185", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10417063134679809185.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17149322956605856579", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17149322956605856579.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17852070562173402509", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17852070562173402509.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5100603959220766123", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5100603959220766123.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6889850068780519491", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6889850068780519491.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "392170183229836145", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_392170183229836145.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14548182214395934108", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14548182214395934108.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9396525855978633839", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9396525855978633839.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15027461975863665772", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15027461975863665772.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14512247607555859904", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14512247607555859904.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4640376493988766790", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4640376493988766790.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16906327606017927194", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16906327606017927194.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1567144668892774143", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1567144668892774143.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16846477871394845568", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16846477871394845568.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13337526335316080955", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13337526335316080955.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12486618539850454912", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12486618539850454912.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3250469153123222089", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3250469153123222089.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10039760334491748169", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10039760334491748169.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8920840005472164712", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8920840005472164712.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10312960052215366927", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10312960052215366927.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9579612800481114333", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9579612800481114333.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10590514961500285791", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10590514961500285791.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4595240846166872319", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4595240846166872319.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "736390975313861599", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_736390975313861599.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4118383298795315325", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4118383298795315325.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13670063135855155613", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13670063135855155613.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4153691405972215108", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4153691405972215108.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2644951716624303240", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2644951716624303240.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11755522400750885035", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11755522400750885035.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16368577349712977363", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16368577349712977363.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9084154871324098052", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9084154871324098052.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2311531479661712409", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2311531479661712409.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5384569044418205202", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5384569044418205202.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5506206312736182193", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5506206312736182193.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }
-      ]
-    }
-  }, 
-  "header": {
-    "revision": 1, 
-    "type": "ChecksummedImages"
-  }
-}
\ No newline at end of file
diff --git a/src/third_party/skia/experimental/expectations/skp/Test-Mac10.8-MacMini4.1-GeForce320M-x86_64-Debug/renderskp-rtree.json b/src/third_party/skia/experimental/expectations/skp/Test-Mac10.8-MacMini4.1-GeForce320M-x86_64-Debug/renderskp-rtree.json
deleted file mode 100644
index 6a86d87..0000000
--- a/src/third_party/skia/experimental/expectations/skp/Test-Mac10.8-MacMini4.1-GeForce320M-x86_64-Debug/renderskp-rtree.json
+++ /dev/null
@@ -1,1346 +0,0 @@
-{
-  "expected-results": {
-    "desk_baidu.skp": {
-      "tiled-images": [
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15416105200059008351", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_15416105200059008351.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4973086474270251778", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_4973086474270251778.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "18021596506523099808", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_18021596506523099808.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12426445537303847919", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_12426445537303847919.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9876786765754472302", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_9876786765754472302.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15331065111291899650", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_15331065111291899650.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17539528729374288441", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_17539528729374288441.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9100680979201226800", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_9100680979201226800.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12173323263528710419", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_12173323263528710419.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3712178768989178390", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_3712178768989178390.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "211888896324696047", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_211888896324696047.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7083400329331785041", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_7083400329331785041.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9815460630499410395", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_9815460630499410395.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2473890974675091487", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_2473890974675091487.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2479754884816755898", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_2479754884816755898.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14172691682527577539", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_14172691682527577539.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5621989358731174221", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_5621989358731174221.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2194449339140901772", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_2194449339140901772.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15475485765526191487", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_15475485765526191487.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9104131931332113553", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_9104131931332113553.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16302809368008861575", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_16302809368008861575.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11599249512246895329", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_11599249512246895329.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16858395402357368969", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_16858395402357368969.png", 
-          "reviewed-by-human": false
-        }
-      ]
-    }, 
-    "desk_blogger.skp": {
-      "tiled-images": [
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7841221974904480141", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7841221974904480141.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12952058328558118361", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12952058328558118361.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13438474142770400621", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13438474142770400621.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17305138246482099834", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17305138246482099834.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2339237720340106572", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2339237720340106572.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9133518276788097938", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9133518276788097938.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16768763127532639628", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16768763127532639628.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16108613879169710267", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16108613879169710267.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6781918266006344063", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6781918266006344063.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9062645238268733571", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9062645238268733571.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "172493045746957600", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_172493045746957600.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4296133301180502367", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4296133301180502367.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15638577549339283490", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15638577549339283490.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12644379640631274656", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12644379640631274656.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3352045847025161390", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3352045847025161390.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15123237272049632329", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15123237272049632329.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17808053363983400384", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17808053363983400384.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1870959069040666868", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1870959069040666868.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5578637393273578954", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5578637393273578954.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17468170000466055398", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17468170000466055398.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2798133757667981950", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2798133757667981950.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12056186299810582132", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12056186299810582132.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14805126467323821815", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14805126467323821815.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1262761629208254711", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1262761629208254711.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10017221126624110965", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10017221126624110965.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9326417106879447920", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9326417106879447920.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10732956852784776392", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10732956852784776392.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16796717901686899745", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16796717901686899745.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5284376332506067560", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5284376332506067560.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8445679907174827840", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8445679907174827840.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4045733944080058452", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4045733944080058452.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16573813979083448236", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16573813979083448236.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8964683934034389040", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8964683934034389040.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17571463359924121607", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17571463359924121607.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15369960552495866504", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15369960552495866504.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3487218210168886496", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3487218210168886496.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16116481139464372435", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16116481139464372435.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10175869703021583627", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10175869703021583627.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2495618649560987836", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2495618649560987836.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16700931713289358511", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16700931713289358511.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10828047253212456343", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10828047253212456343.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1375951298049525932", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1375951298049525932.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "43126774536983876", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_43126774536983876.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10994815648702250558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10994815648702250558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10721132518498860573", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10721132518498860573.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15521913976926340790", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15521913976926340790.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15462843448168743659", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15462843448168743659.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16172889928626067999", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16172889928626067999.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15236078591758877622", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15236078591758877622.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6680102432844645833", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6680102432844645833.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15178861613701060319", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15178861613701060319.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9821698822945749270", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9821698822945749270.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6533741389672656623", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6533741389672656623.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6631881651846346069", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6631881651846346069.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10474305944716211711", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10474305944716211711.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1456787145413697865", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1456787145413697865.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13598941742737334496", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13598941742737334496.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10872701498030761173", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10872701498030761173.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11936566152876930889", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11936566152876930889.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16948841223902088798", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16948841223902088798.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2075646102019337688", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2075646102019337688.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10328467874235548196", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10328467874235548196.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7754424482287838161", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7754424482287838161.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10187865664468729110", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10187865664468729110.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9692329142475544501", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9692329142475544501.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11805082683909040672", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11805082683909040672.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12055072783392081613", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12055072783392081613.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16415644052404953300", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16415644052404953300.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10417063134679809185", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10417063134679809185.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17149322956605856579", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17149322956605856579.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17852070562173402509", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17852070562173402509.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6009473361945447992", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6009473361945447992.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2906954880153437864", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2906954880153437864.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16159666950478632099", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16159666950478632099.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "434955267933854712", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_434955267933854712.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6964150898141519015", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6964150898141519015.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6940588501707502747", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6940588501707502747.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6763326955485442779", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6763326955485442779.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11068022256279202338", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11068022256279202338.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2092729783561167800", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2092729783561167800.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8259470553186264019", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8259470553186264019.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11439861493994832272", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11439861493994832272.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13337526335316080955", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13337526335316080955.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16032242154117966364", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16032242154117966364.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10022606368105601930", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10022606368105601930.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2626105827972108937", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2626105827972108937.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3856258771777886656", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3856258771777886656.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8213635271367467056", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8213635271367467056.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10608071113433085369", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10608071113433085369.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3035135943591931231", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3035135943591931231.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6241565033127932581", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6241565033127932581.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1210958474959001922", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1210958474959001922.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4118383298795315325", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4118383298795315325.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13670063135855155613", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13670063135855155613.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4153691405972215108", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4153691405972215108.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17317665081186813642", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17317665081186813642.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11606967570971750256", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11606967570971750256.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4714743017604436495", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4714743017604436495.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9084154871324098052", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9084154871324098052.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7664523892962060584", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7664523892962060584.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3214042322297598605", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3214042322297598605.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4036117529343107446", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4036117529343107446.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }
-      ]
-    }
-  }, 
-  "header": {
-    "revision": 1, 
-    "type": "ChecksummedImages"
-  }
-}
\ No newline at end of file
diff --git a/src/third_party/skia/experimental/expectations/skp/Test-Ubuntu12-ShuttleA-GTX660-x86-Release/renderskp-defaults.json b/src/third_party/skia/experimental/expectations/skp/Test-Ubuntu12-ShuttleA-GTX660-x86-Release/renderskp-defaults.json
deleted file mode 100644
index 8abffb3..0000000
--- a/src/third_party/skia/experimental/expectations/skp/Test-Ubuntu12-ShuttleA-GTX660-x86-Release/renderskp-defaults.json
+++ /dev/null
@@ -1,1346 +0,0 @@
-{
-  "expected-results": {
-    "desk_baidu.skp": {
-      "tiled-images": [
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3103957207455402189", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_3103957207455402189.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11925568760951136415", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_11925568760951136415.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8888133269384212643", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_8888133269384212643.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17435217654509333124", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_17435217654509333124.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2691218562276236261", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_2691218562276236261.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13672224023108986449", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_13672224023108986449.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7738965648261737420", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_7738965648261737420.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16810744210966367354", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_16810744210966367354.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6435532870061265927", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_6435532870061265927.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15977263461823528082", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_15977263461823528082.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9732930971450196281", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_9732930971450196281.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9211406172407949768", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_9211406172407949768.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "134411606574472711", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_134411606574472711.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12599858964862963121", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_12599858964862963121.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11495683735352899084", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_11495683735352899084.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14368526869268404973", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_14368526869268404973.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "934067786525143945", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_934067786525143945.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14536710494262003674", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_14536710494262003674.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3949389531893113396", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_3949389531893113396.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1299411908358108494", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_1299411908358108494.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17276800542466300447", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_17276800542466300447.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1854619144645237659", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_1854619144645237659.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16858395402357368969", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_16858395402357368969.png", 
-          "reviewed-by-human": false
-        }
-      ]
-    }, 
-    "desk_blogger.skp": {
-      "tiled-images": [
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4409098515104762699", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4409098515104762699.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "18063726072059682166", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_18063726072059682166.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "578410399481473734", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_578410399481473734.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2589405255835792110", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2589405255835792110.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16526700744570463500", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16526700744570463500.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15427155972791686227", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15427155972791686227.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17189576784142909362", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17189576784142909362.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8143782940301948488", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8143782940301948488.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15923740601950322525", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15923740601950322525.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10468064568897259544", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10468064568897259544.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4764547265983582174", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4764547265983582174.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "555681830662279942", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_555681830662279942.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14759553433179345431", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14759553433179345431.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1931480068715411289", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1931480068715411289.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13654386293398306653", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13654386293398306653.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14073455342569729771", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14073455342569729771.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1109580770517590475", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1109580770517590475.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3680496870786029807", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3680496870786029807.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1424885171315687230", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1424885171315687230.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14196166553629708478", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14196166553629708478.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15404791874924753598", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15404791874924753598.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4165986149161562619", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4165986149161562619.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9856235210909150304", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9856235210909150304.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8802756878634943156", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8802756878634943156.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17535503900932381245", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17535503900932381245.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9326417106879447920", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9326417106879447920.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5178085763805992526", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5178085763805992526.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11869569364477193720", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11869569364477193720.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "548435612187582040", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_548435612187582040.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14179104895304717525", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14179104895304717525.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1934572640745902043", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1934572640745902043.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13160104162506982940", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13160104162506982940.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6115945743987553050", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6115945743987553050.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1283803438437923386", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1283803438437923386.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15369960552495866504", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15369960552495866504.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17071536272004227731", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17071536272004227731.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7003549960656976385", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7003549960656976385.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1594283046124638522", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1594283046124638522.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "972302601138260902", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_972302601138260902.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6227683145577307757", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6227683145577307757.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9457693224425111124", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9457693224425111124.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10955236939817798898", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10955236939817798898.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4438057092999264657", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4438057092999264657.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "18114440324917939881", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_18114440324917939881.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "18006831638063341288", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_18006831638063341288.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17433936882953789865", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17433936882953789865.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12723744419745085842", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12723744419745085842.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11613699191910703362", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11613699191910703362.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9557099198443573641", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9557099198443573641.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6680102432844645833", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6680102432844645833.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11837263834511675779", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11837263834511675779.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3870126445747712572", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3870126445747712572.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5236483905029898201", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5236483905029898201.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1536403971510144397", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1536403971510144397.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11270251894704189538", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11270251894704189538.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11048385056788108684", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11048385056788108684.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14925159620935787998", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14925159620935787998.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9548444977865406697", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9548444977865406697.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13901275459799646042", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13901275459799646042.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9500625502858480775", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9500625502858480775.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12963300397607994376", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12963300397607994376.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1040212142345063485", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1040212142345063485.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12782844368195151910", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12782844368195151910.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3988060650317583226", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3988060650317583226.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11079601822198307230", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11079601822198307230.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12896944502868948208", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12896944502868948208.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11600770619664464362", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11600770619664464362.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13969960985640821181", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13969960985640821181.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8869070581921666053", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8869070581921666053.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13147017370295037042", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13147017370295037042.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9279665181398103652", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9279665181398103652.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7303087569656196667", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7303087569656196667.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "706042466293040698", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_706042466293040698.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9957631787957492476", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9957631787957492476.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11467254681435763083", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11467254681435763083.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5481743975971658299", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5481743975971658299.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14356174681243099953", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14356174681243099953.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4698942479665102739", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4698942479665102739.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7893107362714041473", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7893107362714041473.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7106679553205561366", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7106679553205561366.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13380142741069001789", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13380142741069001789.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2746829924057212395", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2746829924057212395.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1285424446886417072", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1285424446886417072.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1709378357931948221", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1709378357931948221.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11080694908395382227", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11080694908395382227.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3240010718406782309", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3240010718406782309.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5320916944068509977", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5320916944068509977.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3236246394968999037", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3236246394968999037.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11060533057820057454", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11060533057820057454.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5235366103879424344", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5235366103879424344.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5281449086122419263", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5281449086122419263.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4245834217885058121", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4245834217885058121.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4543965757853917820", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4543965757853917820.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3573296526852807165", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3573296526852807165.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4499268025613836002", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4499268025613836002.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5182972607551661321", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5182972607551661321.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12386147276617332256", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12386147276617332256.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14014574075260666393", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14014574075260666393.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13784047907206805889", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13784047907206805889.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17302052631373368991", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17302052631373368991.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9651952082807389183", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9651952082807389183.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1768330543673562709", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1768330543673562709.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }
-      ]
-    }
-  }, 
-  "header": {
-    "revision": 1, 
-    "type": "ChecksummedImages"
-  }
-}
\ No newline at end of file
diff --git a/src/third_party/skia/experimental/expectations/skp/Test-Ubuntu12-ShuttleA-GTX660-x86-Release/renderskp-grid.json b/src/third_party/skia/experimental/expectations/skp/Test-Ubuntu12-ShuttleA-GTX660-x86-Release/renderskp-grid.json
deleted file mode 100644
index 8abffb3..0000000
--- a/src/third_party/skia/experimental/expectations/skp/Test-Ubuntu12-ShuttleA-GTX660-x86-Release/renderskp-grid.json
+++ /dev/null
@@ -1,1346 +0,0 @@
-{
-  "expected-results": {
-    "desk_baidu.skp": {
-      "tiled-images": [
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3103957207455402189", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_3103957207455402189.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11925568760951136415", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_11925568760951136415.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8888133269384212643", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_8888133269384212643.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17435217654509333124", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_17435217654509333124.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2691218562276236261", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_2691218562276236261.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13672224023108986449", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_13672224023108986449.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7738965648261737420", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_7738965648261737420.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16810744210966367354", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_16810744210966367354.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6435532870061265927", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_6435532870061265927.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15977263461823528082", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_15977263461823528082.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9732930971450196281", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_9732930971450196281.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9211406172407949768", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_9211406172407949768.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "134411606574472711", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_134411606574472711.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12599858964862963121", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_12599858964862963121.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11495683735352899084", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_11495683735352899084.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14368526869268404973", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_14368526869268404973.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "934067786525143945", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_934067786525143945.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14536710494262003674", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_14536710494262003674.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3949389531893113396", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_3949389531893113396.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1299411908358108494", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_1299411908358108494.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17276800542466300447", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_17276800542466300447.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1854619144645237659", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_1854619144645237659.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16858395402357368969", 
-          "filepath": "desk_baidu_skp/bitmap-64bitMD5_16858395402357368969.png", 
-          "reviewed-by-human": false
-        }
-      ]
-    }, 
-    "desk_blogger.skp": {
-      "tiled-images": [
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4409098515104762699", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4409098515104762699.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "18063726072059682166", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_18063726072059682166.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "578410399481473734", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_578410399481473734.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2589405255835792110", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2589405255835792110.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "16526700744570463500", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_16526700744570463500.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15427155972791686227", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15427155972791686227.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17189576784142909362", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17189576784142909362.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8143782940301948488", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8143782940301948488.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15923740601950322525", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15923740601950322525.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10468064568897259544", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10468064568897259544.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4764547265983582174", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4764547265983582174.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "555681830662279942", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_555681830662279942.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14759553433179345431", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14759553433179345431.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1931480068715411289", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1931480068715411289.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13654386293398306653", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13654386293398306653.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14073455342569729771", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14073455342569729771.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1109580770517590475", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1109580770517590475.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3680496870786029807", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3680496870786029807.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1424885171315687230", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1424885171315687230.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14196166553629708478", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14196166553629708478.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15404791874924753598", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15404791874924753598.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4165986149161562619", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4165986149161562619.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9856235210909150304", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9856235210909150304.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8802756878634943156", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8802756878634943156.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17535503900932381245", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17535503900932381245.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9326417106879447920", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9326417106879447920.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5178085763805992526", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5178085763805992526.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11869569364477193720", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11869569364477193720.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "548435612187582040", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_548435612187582040.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14179104895304717525", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14179104895304717525.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1934572640745902043", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1934572640745902043.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13160104162506982940", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13160104162506982940.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6115945743987553050", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6115945743987553050.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1283803438437923386", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1283803438437923386.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "15369960552495866504", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_15369960552495866504.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17071536272004227731", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17071536272004227731.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7003549960656976385", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7003549960656976385.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1594283046124638522", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1594283046124638522.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "972302601138260902", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_972302601138260902.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6227683145577307757", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6227683145577307757.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9457693224425111124", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9457693224425111124.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "10955236939817798898", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_10955236939817798898.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4438057092999264657", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4438057092999264657.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "18114440324917939881", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_18114440324917939881.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "18006831638063341288", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_18006831638063341288.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17433936882953789865", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17433936882953789865.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12723744419745085842", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12723744419745085842.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11613699191910703362", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11613699191910703362.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9557099198443573641", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9557099198443573641.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "6680102432844645833", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_6680102432844645833.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11837263834511675779", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11837263834511675779.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3870126445747712572", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3870126445747712572.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5236483905029898201", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5236483905029898201.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1536403971510144397", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1536403971510144397.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11270251894704189538", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11270251894704189538.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11048385056788108684", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11048385056788108684.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14925159620935787998", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14925159620935787998.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9548444977865406697", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9548444977865406697.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13901275459799646042", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13901275459799646042.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9500625502858480775", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9500625502858480775.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12963300397607994376", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12963300397607994376.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1040212142345063485", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1040212142345063485.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12782844368195151910", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12782844368195151910.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3988060650317583226", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3988060650317583226.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11079601822198307230", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11079601822198307230.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12896944502868948208", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12896944502868948208.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11600770619664464362", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11600770619664464362.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13969960985640821181", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13969960985640821181.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "8869070581921666053", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_8869070581921666053.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13147017370295037042", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13147017370295037042.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9279665181398103652", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9279665181398103652.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7303087569656196667", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7303087569656196667.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "706042466293040698", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_706042466293040698.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9957631787957492476", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9957631787957492476.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11467254681435763083", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11467254681435763083.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5481743975971658299", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5481743975971658299.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14356174681243099953", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14356174681243099953.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4698942479665102739", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4698942479665102739.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7893107362714041473", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7893107362714041473.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "7106679553205561366", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_7106679553205561366.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13380142741069001789", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13380142741069001789.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "2746829924057212395", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_2746829924057212395.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1285424446886417072", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1285424446886417072.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1709378357931948221", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1709378357931948221.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11080694908395382227", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11080694908395382227.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3240010718406782309", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3240010718406782309.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5320916944068509977", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5320916944068509977.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3236246394968999037", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3236246394968999037.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "11060533057820057454", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_11060533057820057454.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5235366103879424344", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5235366103879424344.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5281449086122419263", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5281449086122419263.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4245834217885058121", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4245834217885058121.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4543965757853917820", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4543965757853917820.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "3573296526852807165", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_3573296526852807165.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "4499268025613836002", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_4499268025613836002.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "5182972607551661321", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_5182972607551661321.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "12386147276617332256", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_12386147276617332256.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "14014574075260666393", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_14014574075260666393.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "13784047907206805889", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_13784047907206805889.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "17302052631373368991", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_17302052631373368991.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "9651952082807389183", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_9651952082807389183.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "1768330543673562709", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_1768330543673562709.png", 
-          "reviewed-by-human": false
-        }, 
-        {
-          "bugs": null, 
-          "checksumAlgorithm": "bitmap-64bitMD5", 
-          "checksumValue": "702315074913249558", 
-          "filepath": "desk_blogger_skp/bitmap-64bitMD5_702315074913249558.png", 
-          "reviewed-by-human": false
-        }
-      ]
-    }
-  }, 
-  "header": {
-    "revision": 1, 
-    "type": "ChecksummedImages"
-  }
-}
\ No newline at end of file
diff --git a/src/third_party/skia/experimental/ffmpeg/SkVideoDecoder.cpp b/src/third_party/skia/experimental/ffmpeg/SkVideoDecoder.cpp
new file mode 100644
index 0000000..5e035eb
--- /dev/null
+++ b/src/third_party/skia/experimental/ffmpeg/SkVideoDecoder.cpp
@@ -0,0 +1,412 @@
+/*
+ * Copyright 2019 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "experimental/ffmpeg/SkVideoDecoder.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkYUVAIndex.h"
+
+static SkYUVColorSpace get_yuvspace(AVColorSpace space) {
+    // this is pretty incomplete -- TODO: look to convert more AVColorSpaces
+    switch (space) {
+        case AVCOL_SPC_RGB:     return kIdentity_SkYUVColorSpace;
+        case AVCOL_SPC_BT709:   return kRec709_SkYUVColorSpace;
+        case AVCOL_SPC_SMPTE170M:
+        case AVCOL_SPC_SMPTE240M:
+        case AVCOL_SPC_BT470BG: return kRec601_SkYUVColorSpace;
+        default: break;
+    }
+    return kRec709_SkYUVColorSpace;
+}
+
+struct av_transfer_characteristics {
+    // if x < beta     delta * x
+    //    else         alpha * (x^gama)
+    float alpha, beta, gamma, delta;
+};
+
+// Tables extracted from vf_colorspace.c
+
+const av_transfer_characteristics gTransfer[AVCOL_TRC_NB] = {
+    [AVCOL_TRC_BT709]     = { 1.099,  0.018,  0.45, 4.5 },
+    [AVCOL_TRC_GAMMA22]   = { 1.0,    0.0,    1.0 / 2.2, 0.0 },
+    [AVCOL_TRC_GAMMA28]   = { 1.0,    0.0,    1.0 / 2.8, 0.0 },
+    [AVCOL_TRC_SMPTE170M] = { 1.099,  0.018,  0.45, 4.5 },
+    [AVCOL_TRC_SMPTE240M] = { 1.1115, 0.0228, 0.45, 4.0 },
+    [AVCOL_TRC_IEC61966_2_1] = { 1.055, 0.0031308, 1.0 / 2.4, 12.92 },
+    [AVCOL_TRC_IEC61966_2_4] = { 1.099, 0.018, 0.45, 4.5 },
+    [AVCOL_TRC_BT2020_10] = { 1.099,  0.018,  0.45, 4.5 },
+    [AVCOL_TRC_BT2020_12] = { 1.0993, 0.0181, 0.45, 4.5 },
+};
+
+static skcms_TransferFunction compute_transfer(AVColorTransferCharacteristic t) {
+    const av_transfer_characteristics* av = &gTransfer[AVCOL_TRC_BT709];
+    if ((unsigned)t < AVCOL_TRC_NB) {
+        av = &gTransfer[t];
+    }
+    if (av->alpha == 0) {
+        av = &gTransfer[AVCOL_TRC_BT709];
+    }
+
+    skcms_TransferFunction linear_to_encoded = {
+        av->gamma, sk_float_pow(av->alpha, 1/av->gamma), 0, av->delta, av->beta, 1 - av->alpha, 0,
+    };
+    skcms_TransferFunction encoded_to_linear;
+    bool success = skcms_TransferFunction_invert(&linear_to_encoded, &encoded_to_linear);
+    SkASSERT(success);
+
+    return encoded_to_linear;
+}
+
+enum Whitepoint {
+    WP_D65,
+    WP_C,
+    WP_DCI,
+    WP_E,
+    WP_NB,
+};
+
+const SkPoint gWP[WP_NB] = {
+    [WP_D65] = { 0.3127f, 0.3290f },
+    [WP_C]   = { 0.3100f, 0.3160f },
+    [WP_DCI] = { 0.3140f, 0.3510f },
+    [WP_E]   = { 1/3.0f, 1/3.0f },
+};
+
+#define ExpandWP(index) gWP[index].fX, gWP[index].fY
+
+const SkColorSpacePrimaries gPrimaries[AVCOL_PRI_NB] = {
+    [AVCOL_PRI_BT709]     = { 0.640f, 0.330f, 0.300f, 0.600f, 0.150f, 0.060f, ExpandWP(WP_D65) },
+    [AVCOL_PRI_BT470M]    = { 0.670f, 0.330f, 0.210f, 0.710f, 0.140f, 0.080f, ExpandWP(WP_C)   },
+    [AVCOL_PRI_BT470BG]   = { 0.640f, 0.330f, 0.290f, 0.600f, 0.150f, 0.060f, ExpandWP(WP_D65) },
+    [AVCOL_PRI_SMPTE170M] = { 0.630f, 0.340f, 0.310f, 0.595f, 0.155f, 0.070f, ExpandWP(WP_D65) },
+    [AVCOL_PRI_SMPTE240M] = { 0.630f, 0.340f, 0.310f, 0.595f, 0.155f, 0.070f, ExpandWP(WP_D65) },
+    [AVCOL_PRI_SMPTE428]  = { 0.735f, 0.265f, 0.274f, 0.718f, 0.167f, 0.009f, ExpandWP(WP_E)   },
+    [AVCOL_PRI_SMPTE431]  = { 0.680f, 0.320f, 0.265f, 0.690f, 0.150f, 0.060f, ExpandWP(WP_DCI) },
+    [AVCOL_PRI_SMPTE432]  = { 0.680f, 0.320f, 0.265f, 0.690f, 0.150f, 0.060f, ExpandWP(WP_D65) },
+    [AVCOL_PRI_FILM]      = { 0.681f, 0.319f, 0.243f, 0.692f, 0.145f, 0.049f, ExpandWP(WP_C)   },
+    [AVCOL_PRI_BT2020]    = { 0.708f, 0.292f, 0.170f, 0.797f, 0.131f, 0.046f, ExpandWP(WP_D65) },
+    [AVCOL_PRI_JEDEC_P22] = { 0.630f, 0.340f, 0.295f, 0.605f, 0.155f, 0.077f, ExpandWP(WP_D65) },
+};
+
+sk_sp<SkColorSpace> make_colorspace(AVColorPrimaries primaries,
+                                    AVColorTransferCharacteristic transfer) {
+    if (primaries == AVCOL_PRI_BT709 && transfer == AVCOL_TRC_BT709) {
+        return SkColorSpace::MakeSRGB();
+    }
+
+    const SkColorSpacePrimaries* p = &gPrimaries[0];
+    if ((unsigned)primaries < (unsigned)AVCOL_PRI_NB) {
+        p = &gPrimaries[primaries];
+    }
+
+    skcms_Matrix3x3 matrix;
+    p->toXYZD50(&matrix);
+    return SkColorSpace::MakeRGB(compute_transfer(transfer), matrix);
+}
+
+// returns true on error (and may dump the particular error message)
+static bool check_err(int err, const int silentList[] = nullptr) {
+    if (err >= 0) {
+        return false;
+    }
+
+    if (silentList) {
+        for (; *silentList; ++silentList) {
+            if (*silentList == err) {
+                return true;    // we still report the error, but we don't printf
+            }
+        }
+    }
+
+    char errbuf[128];
+    const char *errbuf_ptr = errbuf;
+
+    if (av_strerror(err, errbuf, sizeof(errbuf)) < 0) {
+        errbuf_ptr = strerror(AVUNERROR(err));
+    }
+    SkDebugf("%s\n", errbuf_ptr);
+    return true;
+}
+
+static int skstream_read_packet(void* ctx, uint8_t* dstBuffer, int dstSize) {
+    SkStream* stream = (SkStream*)ctx;
+    int result = (int)stream->read(dstBuffer, dstSize);
+    if (result == 0) {
+        result = AVERROR_EOF;
+    }
+    return result;
+}
+
+static int64_t skstream_seek_packet(void* ctx, int64_t pos, int whence) {
+    SkStream* stream = (SkStream*)ctx;
+    switch (whence) {
+        case SEEK_SET:
+            break;
+        case SEEK_CUR:
+            pos = (int64_t)stream->getPosition() + pos;
+            break;
+        case SEEK_END:
+            pos = (int64_t)stream->getLength() + pos;
+            break;
+        default:
+            return -1;
+    }
+    return stream->seek(SkToSizeT(pos)) ? pos : -1;
+}
+
+static sk_sp<SkImage> make_yuv_420(GrContext* gr, int w, int h,
+                                   uint8_t* const data[], int const strides[],
+                                   SkYUVColorSpace yuv_space,
+                                   sk_sp<SkColorSpace> cs) {
+    SkImageInfo info[3];
+    info[0] = SkImageInfo::Make(w, h, kGray_8_SkColorType, kOpaque_SkAlphaType);
+    info[1] = SkImageInfo::Make(w/2, h/2, kGray_8_SkColorType, kOpaque_SkAlphaType);
+    info[2] = SkImageInfo::Make(w/2, h/2, kGray_8_SkColorType, kOpaque_SkAlphaType);
+
+    SkPixmap pm[4];
+    for (int i = 0; i < 3; ++i) {
+        pm[i] = SkPixmap(info[i], data[i], strides[i]);
+    }
+    pm[3].reset();  // no alpha
+
+    SkYUVAIndex indices[4];
+    indices[SkYUVAIndex::kY_Index] = {0, SkColorChannel::kR};
+    indices[SkYUVAIndex::kU_Index] = {1, SkColorChannel::kR};
+    indices[SkYUVAIndex::kV_Index] = {2, SkColorChannel::kR};
+    indices[SkYUVAIndex::kA_Index] = {-1, SkColorChannel::kR};
+
+    return SkImage::MakeFromYUVAPixmaps(gr, yuv_space, pm, indices, {w, h},
+                                        kTopLeft_GrSurfaceOrigin, false, false, cs);
+}
+
+// Init with illegal values, so our first compare will fail, forcing us to compute
+// the skcolorspace.
+SkVideoDecoder::ConvertedColorSpace::ConvertedColorSpace()
+    : fPrimaries(AVCOL_PRI_NB), fTransfer(AVCOL_TRC_NB)
+{}
+
+void SkVideoDecoder::ConvertedColorSpace::update(AVColorPrimaries primaries,
+            AVColorTransferCharacteristic transfer) {
+    if (fPrimaries != primaries || fTransfer != transfer) {
+        fPrimaries = primaries;
+        fTransfer  = transfer;
+        fCS = make_colorspace(primaries, transfer);
+    }
+}
+
+double SkVideoDecoder::computeTimeStamp(const AVFrame* frame) const {
+    AVRational base = fFormatCtx->streams[fStreamIndex]->time_base;
+    return 1.0 * frame->pts * base.num / base.den;
+}
+
+sk_sp<SkImage> SkVideoDecoder::convertFrame(const AVFrame* frame) {
+    auto yuv_space = get_yuvspace(frame->colorspace);
+
+    // we have a 1-entry cache for converting colorspaces
+    fCSCache.update(frame->color_primaries, frame->color_trc);
+
+    // Are these always true? If so, we don't need to check our "cache" on each frame...
+    SkASSERT(fDecoderCtx->colorspace == frame->colorspace);
+    SkASSERT(fDecoderCtx->color_primaries == frame->color_primaries);
+    SkASSERT(fDecoderCtx->color_trc == frame->color_trc);
+
+    // Is this always true? If so, we might take advantage of it, knowing up-front if we support
+    // the format for the whole stream, in which case we might have to ask ffmpeg to convert it
+    // to something more reasonable (for us)...
+    SkASSERT(fDecoderCtx->pix_fmt == frame->format);
+
+    switch (frame->format) {
+        case AV_PIX_FMT_YUV420P:
+            return make_yuv_420(fGr, frame->width, frame->height, frame->data, frame->linesize,
+                                yuv_space, fCSCache.fCS);
+            break;
+        default:
+            SkDebugf("unsupported format (for now)\n");
+    }
+    return nullptr;
+}
+
+sk_sp<SkImage> SkVideoDecoder::nextImage(double* timeStamp) {
+    double dummyTimeStampStorage = 0;
+    if (!timeStamp) {
+        timeStamp = &dummyTimeStampStorage;
+    }
+
+    if (fFormatCtx == nullptr) {
+        return nullptr;
+    }
+
+    if (fMode == kProcessing_Mode) {
+        // We sit in a loop, waiting for the codec to have received enough data (packets)
+        // to have at least one frame available.
+        // Treat non-zero return as EOF (or error, which we will decide is also EOF)
+        while (!av_read_frame(fFormatCtx, &fPacket)) {
+            if (fPacket.stream_index != fStreamIndex) {
+                // got a packet for a stream other than our (video) stream, so continue
+                continue;
+            }
+
+            int ret = avcodec_send_packet(fDecoderCtx, &fPacket);
+            if (ret == AVERROR(EAGAIN)) {
+                // may signal that we have plenty already, encouraging us to call receive_frame
+                // so we don't treat this as an error.
+                ret = 0;
+            }
+            (void)check_err(ret);   // we try to continue if there was an error
+
+            int silentList[] = {
+                -35,    // Resource temporarily unavailable (need more packets)
+                0,
+            };
+            if (check_err(avcodec_receive_frame(fDecoderCtx, fFrame), silentList)) {
+                // this may be just "needs more input", so we try to continue
+            } else {
+                *timeStamp = this->computeTimeStamp(fFrame);
+                return this->convertFrame(fFrame);
+            }
+        }
+
+        fMode = kDraining_Mode;
+        (void)avcodec_send_packet(fDecoderCtx, nullptr);    // signal to start draining
+    }
+    if (fMode == kDraining_Mode) {
+        if (avcodec_receive_frame(fDecoderCtx, fFrame) >= 0) {
+            *timeStamp = this->computeTimeStamp(fFrame);
+            return this->convertFrame(fFrame);
+        }
+        // else we decide we're done
+        fMode = kDone_Mode;
+    }
+    return nullptr;
+}
+
+SkVideoDecoder::SkVideoDecoder(GrContext* gr) : fGr(gr) {}
+
+SkVideoDecoder::~SkVideoDecoder() {
+    this->reset();
+}
+
+void SkVideoDecoder::reset() {
+    if (fFrame) {
+        av_frame_free(&fFrame);
+        fFrame = nullptr;
+    }
+    if (fDecoderCtx) {
+        avcodec_free_context(&fDecoderCtx);
+        fDecoderCtx = nullptr;
+    }
+    if (fFormatCtx) {
+        avformat_close_input(&fFormatCtx);
+        fFormatCtx = nullptr;
+    }
+    if (fStreamCtx) {
+        av_freep(&fStreamCtx->buffer);
+        avio_context_free(&fStreamCtx);
+        fStreamCtx = nullptr;
+    }
+
+    fStream.reset(nullptr);
+    fStreamIndex = -1;
+    fMode = kDone_Mode;
+}
+
+bool SkVideoDecoder::loadStream(std::unique_ptr<SkStream> stream) {
+    this->reset();
+    if (!stream) {
+        return false;
+    }
+
+    int bufferSize = 4 * 1024;
+    uint8_t* buffer = (uint8_t*)av_malloc(bufferSize);
+    if (!buffer) {
+        return false;
+    }
+
+    fStream = std::move(stream);
+    fStreamCtx = avio_alloc_context(buffer, bufferSize, 0, fStream.get(),
+                                    skstream_read_packet, nullptr, skstream_seek_packet);
+    if (!fStreamCtx) {
+        av_freep(buffer);
+        this->reset();
+        return false;
+    }
+
+    fFormatCtx = avformat_alloc_context();
+    if (!fFormatCtx) {
+        this->reset();
+        return false;
+    }
+    fFormatCtx->pb = fStreamCtx;
+
+    int err = avformat_open_input(&fFormatCtx, nullptr, nullptr, nullptr);
+    if (err < 0) {
+        SkDebugf("avformat_open_input failed %d\n", err);
+        return false;
+    }
+
+    AVCodec* codec;
+    fStreamIndex = av_find_best_stream(fFormatCtx, AVMEDIA_TYPE_VIDEO, -1, -1, &codec, 0);
+    if (fStreamIndex < 0) {
+        SkDebugf("av_find_best_stream failed %d\n", fStreamIndex);
+        this->reset();
+        return false;
+    }
+
+    SkASSERT(codec);
+    fDecoderCtx = avcodec_alloc_context3(codec);
+
+    AVStream* strm = fFormatCtx->streams[fStreamIndex];
+    if ((err = avcodec_parameters_to_context(fDecoderCtx, strm->codecpar)) < 0) {
+        SkDebugf("avcodec_parameters_to_context failed %d\n", err);
+        this->reset();
+        return false;
+    }
+
+    if ((err = avcodec_open2(fDecoderCtx, codec, nullptr)) < 0) {
+        SkDebugf("avcodec_open2 failed %d\n", err);
+        this->reset();
+        return false;
+    }
+
+    fFrame = av_frame_alloc();
+    SkASSERT(fFrame);
+
+    av_init_packet(&fPacket);   // is there a "free" call?
+
+    fMode = kProcessing_Mode;
+
+    return true;
+}
+
+SkISize SkVideoDecoder::dimensions() const {
+    if (!fFormatCtx) {
+        return {0, 0};
+    }
+
+    AVStream* strm = fFormatCtx->streams[fStreamIndex];
+    return {strm->codecpar->width, strm->codecpar->height};
+}
+
+double SkVideoDecoder::duration() const {
+    if (!fFormatCtx) {
+        return 0;
+    }
+
+    AVStream* strm = fFormatCtx->streams[fStreamIndex];
+    AVRational base = strm->time_base;
+    return 1.0 * strm->duration * base.num / base.den;
+}
+
+bool SkVideoDecoder::rewind() {
+    auto stream = std::move(fStream);
+    this->reset();
+    if (stream) {
+        stream->rewind();
+    }
+    return this->loadStream(std::move(stream));
+}
diff --git a/src/third_party/skia/experimental/ffmpeg/SkVideoDecoder.h b/src/third_party/skia/experimental/ffmpeg/SkVideoDecoder.h
new file mode 100644
index 0000000..5d334b8
--- /dev/null
+++ b/src/third_party/skia/experimental/ffmpeg/SkVideoDecoder.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2019 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkVideDecoder_DEFINED
+#define SkVideDecoder_DEFINED
+
+#include "include/core/SkImage.h"
+
+extern "C" {
+#include "libavcodec/avcodec.h"
+#include "libavformat/avformat.h"
+#include "libavformat/avio.h"
+#include "libavutil/pixdesc.h"
+}
+
+class SkVideoDecoder {
+public:
+    SkVideoDecoder(GrContext* gr = nullptr);
+    ~SkVideoDecoder();
+
+    void reset();
+    void setGrContext(GrContext* gr) { fGr = gr; }
+
+    bool loadStream(std::unique_ptr<SkStream>);
+    bool rewind();
+
+    SkISize dimensions() const;
+    double duration() const;    // in seconds
+
+    // Returns each image in the video, or nullptr on eof
+    sk_sp<SkImage> nextImage(double* timeStamp = nullptr);
+
+private:
+    sk_sp<SkImage> convertFrame(const AVFrame*);
+    double computeTimeStamp(const AVFrame*) const;
+
+    struct ConvertedColorSpace {
+        AVColorPrimaries              fPrimaries;
+        AVColorTransferCharacteristic fTransfer;
+        // fCS is the converted skia form of the above enums
+        sk_sp<SkColorSpace> fCS;
+
+        // Init with illegal values, so our first compare will fail, forcing us to compute
+        // the skcolorspace.
+        ConvertedColorSpace();
+
+        void update(AVColorPrimaries, AVColorTransferCharacteristic);
+    };
+
+    GrContext*          fGr = nullptr;  // not owned by us
+
+    std::unique_ptr<SkStream>   fStream;
+
+    AVIOContext*        fStreamCtx = nullptr;
+    AVFormatContext*    fFormatCtx = nullptr;
+    AVCodecContext*     fDecoderCtx = nullptr;
+    int                 fStreamIndex = -1;  // fFormatCtx->stream[...]
+
+    AVPacket            fPacket;
+    AVFrame*            fFrame = nullptr;
+    ConvertedColorSpace fCSCache;
+
+    enum Mode {
+        kProcessing_Mode,
+        kDraining_Mode,
+        kDone_Mode,
+    };
+    Mode    fMode = kDone_Mode;
+};
+
+#endif
+
diff --git a/src/third_party/skia/experimental/ffmpeg/SkVideoEncoder.cpp b/src/third_party/skia/experimental/ffmpeg/SkVideoEncoder.cpp
new file mode 100644
index 0000000..358f5a5
--- /dev/null
+++ b/src/third_party/skia/experimental/ffmpeg/SkVideoEncoder.cpp
@@ -0,0 +1,337 @@
+/*
+ * Copyright 2019 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "experimental/ffmpeg/SkVideoEncoder.h"
+#include "include/core/SkColorSpace.h"
+#include "include/core/SkImage.h"
+#include "include/core/SkYUVAIndex.h"
+#include "include/private/SkTDArray.h"
+
+extern "C" {
+#include "libswscale/swscale.h"
+}
+
+class SkRandomAccessWStream {
+    SkTDArray<char> fStorage;
+    size_t          fPos = 0;
+
+public:
+    SkRandomAccessWStream() {}
+
+    size_t pos() const { return fPos; }
+
+    size_t size() const { return fStorage.size(); }
+
+    void write(const void* src, size_t bytes) {
+        size_t len = fStorage.size();
+        SkASSERT(fPos <= len);
+
+        size_t overwrite = SkTMin(len - fPos, bytes);
+        if (overwrite) {
+            SkDebugf("overwrite %zu bytes at %zu offset with %zu remaining\n", overwrite, fPos, bytes - overwrite);
+            memcpy(&fStorage[fPos], src, overwrite);
+            fPos += overwrite;
+            src = (const char*)src + overwrite;
+            bytes -= overwrite;
+        }
+        // bytes now represents the amount to append
+        if (bytes) {
+            fStorage.append(bytes, (const char*)src);
+            fPos += bytes;
+        }
+        SkASSERT(fPos <= fStorage.size());
+    }
+
+    void seek(size_t pos) {
+        SkASSERT(pos <= fStorage.size());
+        fPos = pos;
+    }
+
+    sk_sp<SkData> detachAsData() {
+        // TODO: could add an efficient detach to SkTDArray if we wanted, w/o copy
+        return SkData::MakeWithCopy(fStorage.begin(), fStorage.size());
+    }
+};
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
+
+// returns true on error (and may dump the particular error message)
+static bool check_err(int err, const int silentList[] = nullptr) {
+    if (err >= 0) {
+        return false;
+    }
+
+    if (silentList) {
+        for (; *silentList; ++silentList) {
+            if (*silentList == err) {
+                return true;    // we still report the error, but we don't printf
+            }
+        }
+    }
+
+    char errbuf[128];
+    const char *errbuf_ptr = errbuf;
+
+    if (av_strerror(err, errbuf, sizeof(errbuf)) < 0) {
+        errbuf_ptr = strerror(AVUNERROR(err));
+    }
+    SkDebugf("%s\n", errbuf_ptr);
+    return true;
+}
+
+static int sk_write_packet(void* ctx, uint8_t* buffer, int size) {
+    SkRandomAccessWStream* stream = (SkRandomAccessWStream*)ctx;
+    stream->write(buffer, size);
+    return size;
+}
+
+static int64_t sk_seek_packet(void* ctx, int64_t pos, int whence) {
+    SkRandomAccessWStream* stream = (SkRandomAccessWStream*)ctx;
+    switch (whence) {
+        case SEEK_SET:
+            break;
+        case SEEK_CUR:
+            pos = (int64_t)stream->pos() + pos;
+            break;
+        case SEEK_END:
+            pos = (int64_t)stream->size() + pos;
+            break;
+        default:
+            return -1;
+    }
+    if (pos < 0 || pos > (int64_t)stream->size()) {
+        return -1;
+    }
+    stream->seek(SkToSizeT(pos));
+    return pos;
+}
+
+SkVideoEncoder::SkVideoEncoder() {
+    fInfo = SkImageInfo::MakeUnknown();
+}
+
+SkVideoEncoder::~SkVideoEncoder() {
+    this->reset();
+
+    if (fSWScaleCtx) {
+        sws_freeContext(fSWScaleCtx);
+    }
+}
+
+void SkVideoEncoder::reset() {
+    if (fFrame) {
+        av_frame_free(&fFrame);
+        fFrame = nullptr;
+    }
+    if (fEncoderCtx) {
+        avcodec_free_context(&fEncoderCtx);
+        fEncoderCtx = nullptr;
+    }
+    if (fFormatCtx) {
+        avformat_free_context(fFormatCtx);
+        fFormatCtx = nullptr;
+    }
+
+    av_packet_free(&fPacket);
+    fPacket = nullptr;
+
+    fSurface.reset();
+    fWStream.reset();
+}
+
+bool SkVideoEncoder::init(int fps) {
+    // only support this for now
+    AVPixelFormat pix_fmt = AV_PIX_FMT_YUV420P;
+
+    this->reset();
+
+    fWStream.reset(new SkRandomAccessWStream);
+
+    int bufferSize = 4 * 1024;
+    uint8_t* buffer = (uint8_t*)av_malloc(bufferSize);
+    if (!buffer) {
+        return false;
+    }
+    fStreamCtx = avio_alloc_context(buffer, bufferSize, AVIO_FLAG_WRITE, fWStream.get(),
+                                    nullptr, sk_write_packet, sk_seek_packet);
+    SkASSERT(fStreamCtx);
+
+    avformat_alloc_output_context2(&fFormatCtx, nullptr, "mp4", nullptr);
+    SkASSERT(fFormatCtx);
+    fFormatCtx->pb = fStreamCtx;
+
+    AVOutputFormat *output_format = fFormatCtx->oformat;
+
+    if (output_format->video_codec == AV_CODEC_ID_NONE) {
+        return false;
+    }
+    AVCodec* codec = avcodec_find_encoder(output_format->video_codec);
+    SkASSERT(codec);
+
+    fStream = avformat_new_stream(fFormatCtx, codec);
+    SkASSERT(fStream);
+    fStream->id = fFormatCtx->nb_streams-1;
+    fStream->time_base = (AVRational){ 1, fps };
+
+    fEncoderCtx = avcodec_alloc_context3(codec);
+    SkASSERT(fEncoderCtx);
+
+    fEncoderCtx->codec_id = output_format->video_codec;
+    fEncoderCtx->width    = fInfo.width();
+    fEncoderCtx->height   = fInfo.height();
+    fEncoderCtx->time_base = fStream->time_base;
+    fEncoderCtx->pix_fmt  = pix_fmt;
+
+    /* Some formats want stream headers to be separate. */
+    if (output_format->flags & AVFMT_GLOBALHEADER) {
+        fEncoderCtx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
+    }
+
+    if (check_err(avcodec_open2(fEncoderCtx, codec, nullptr))) {
+        return false;
+    }
+    fFrame = av_frame_alloc();
+    SkASSERT(fFrame);
+    fFrame->format = pix_fmt;
+    fFrame->width = fEncoderCtx->width;
+    fFrame->height = fEncoderCtx->height;
+    if (check_err(av_frame_get_buffer(fFrame, 32))) {
+        return false;
+    }
+
+    if (check_err(avcodec_parameters_from_context(fStream->codecpar, fEncoderCtx))) {
+        return false;
+    }
+    if (check_err(avformat_write_header(fFormatCtx, nullptr))) {
+        return false;
+    }
+    fPacket = av_packet_alloc();
+    return true;
+}
+
+#include "include/core/SkCanvas.h"
+#include "include/core/SkColorFilter.h"
+#include "include/core/SkSurface.h"
+#include "src/core/SkYUVMath.h"
+
+static bool is_valid(SkISize dim) {
+    if (dim.width() <= 0 || dim.height() <= 0) {
+        return false;
+    }
+    // need the dimensions to be even for YUV 420
+    return ((dim.width() | dim.height()) & 1) == 0;
+}
+
+bool SkVideoEncoder::beginRecording(SkISize dim, int fps) {
+    if (!is_valid(dim)) {
+        return false;
+    }
+
+    SkAlphaType alphaType = kOpaque_SkAlphaType;
+    sk_sp<SkColorSpace> cs = nullptr;   // should we use this?
+    fInfo = SkImageInfo::MakeN32(dim.width(), dim.height(), alphaType, cs);
+    if (!this->init(fps)) {
+        return false;
+    }
+
+    fCurrentPTS = 0;
+    fDeltaPTS = 1;
+
+    const auto fmt = kN32_SkColorType == kRGBA_8888_SkColorType ? AV_PIX_FMT_RGBA : AV_PIX_FMT_BGRA;
+    SkASSERT(sws_isSupportedInput(fmt) > 0);
+    SkASSERT(sws_isSupportedOutput(AV_PIX_FMT_YUV420P) > 0);
+    // sws_getCachedContext takes in either null or a previous ctx. It returns either a new ctx,
+    // or the same as the input if it is compatible with the inputs. Thus we never have to
+    // explicitly release our ctx until the destructor, since sws_getCachedContext takes care
+    // of freeing the old as needed if/when it returns a new one.
+    fSWScaleCtx = sws_getCachedContext(fSWScaleCtx,
+                                       dim.width(), dim.height(), fmt,
+                                       dim.width(), dim.height(), AV_PIX_FMT_YUV420P,
+                                       SWS_FAST_BILINEAR, nullptr, nullptr, nullptr);
+    return fSWScaleCtx != nullptr;
+}
+
+bool SkVideoEncoder::addFrame(const SkPixmap& pm) {
+    if (!is_valid(pm.dimensions())) {
+        return false;
+    }
+    if (pm.info().colorType() != fInfo.colorType()) {
+        return false;
+    }
+    /* make sure the frame data is writable */
+    if (check_err(av_frame_make_writable(fFrame))) {
+        return false;
+    }
+
+    fFrame->pts = fCurrentPTS;
+    fCurrentPTS += fDeltaPTS;
+
+    const uint8_t* src[] = { (const uint8_t*)pm.addr() };
+    const int strides[] = { SkToInt(pm.rowBytes()) };
+    sws_scale(fSWScaleCtx, src, strides, 0, fInfo.height(), fFrame->data, fFrame->linesize);
+
+    return this->sendFrame(fFrame);
+}
+
+bool SkVideoEncoder::sendFrame(AVFrame* frame) {
+    if (check_err(avcodec_send_frame(fEncoderCtx, frame))) {
+        return false;
+    }
+
+    int ret = 0;
+    while (ret >= 0) {
+        ret = avcodec_receive_packet(fEncoderCtx, fPacket);
+        if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
+            break;
+        }
+        if (check_err(ret)) {
+            return false;
+        }
+
+        av_packet_rescale_ts(fPacket, fEncoderCtx->time_base, fStream->time_base);
+        SkASSERT(fPacket->stream_index == fStream->index);
+
+        if (check_err(av_interleaved_write_frame(fFormatCtx, fPacket))) {
+            return false;
+        }
+    }
+    return true;
+}
+
+SkCanvas* SkVideoEncoder::beginFrame() {
+    if (!fSurface) {
+        fSurface = SkSurface::MakeRaster(fInfo);
+        if (!fSurface) {
+            return nullptr;
+        }
+    }
+    SkCanvas* canvas = fSurface->getCanvas();
+    canvas->restoreToCount(1);
+    canvas->clear(0);
+    return canvas;
+}
+
+bool SkVideoEncoder::endFrame() {
+    if (!fSurface) {
+        return false;
+    }
+    SkPixmap pm;
+    return fSurface->peekPixels(&pm) && this->addFrame(pm);
+}
+
+sk_sp<SkData> SkVideoEncoder::endRecording() {
+    if (!fFormatCtx) {
+        return nullptr;
+    }
+
+    this->sendFrame(nullptr);
+    av_write_trailer(fFormatCtx);
+
+    sk_sp<SkData> data = fWStream->detachAsData();
+    this->reset();
+    return data;
+}
diff --git a/src/third_party/skia/experimental/ffmpeg/SkVideoEncoder.h b/src/third_party/skia/experimental/ffmpeg/SkVideoEncoder.h
new file mode 100644
index 0000000..62450e4
--- /dev/null
+++ b/src/third_party/skia/experimental/ffmpeg/SkVideoEncoder.h
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2019 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkVideEncoder_DEFINED
+#define SkVideEncoder_DEFINED
+
+#include "include/core/SkImage.h"
+#include "include/core/SkStream.h"
+
+extern "C" {
+#include "libavcodec/avcodec.h"
+#include "libavformat/avformat.h"
+#include "libavformat/avio.h"
+#include "libavutil/pixdesc.h"
+}
+
+// private to the impl
+class SkRandomAccessWStream;
+struct SwsContext;
+
+class SkVideoEncoder {
+public:
+    SkVideoEncoder();
+    ~SkVideoEncoder();
+
+    /**
+     *  Begins a new recording. Balance this (after adding all of your frames) with a call
+     *  to endRecording().
+     */
+    bool beginRecording(SkISize, int fps);
+
+    /**
+     *  If you have your own pixmap, call addFrame(). Note this may fail if it uses an unsupported
+     *  ColorType (requires kN32_SkColorType) or AlphaType, or the dimensions don't match those set
+     *  in beginRecording.
+     */
+    bool addFrame(const SkPixmap&);
+
+    /**
+     *  As an alternative to calling addFrame(), you can call beginFrame/endFrame, and the encoder
+     *  will manage allocating a surface/canvas for you.
+     *
+     *  SkCanvas* canvas = encoder.beginFrame();
+     *  // your drawing code here, drawing into canvas
+     *  encoder.endFrame();
+     */
+    SkCanvas* beginFrame();
+    bool endFrame();
+
+    /**
+     *  Call this after having added all of your frames. After calling this, no more frames can
+     *  be added to this recording. To record a new video, call beginRecording().
+     */
+    sk_sp<SkData> endRecording();
+
+private:
+    void reset();
+    bool init(int fps);
+    bool sendFrame(AVFrame*);   // frame can be null
+
+    double computeTimeStamp(const AVFrame*) const;
+
+    SwsContext*     fSWScaleCtx = nullptr;
+    AVIOContext*    fStreamCtx = nullptr;
+    AVFormatContext* fFormatCtx = nullptr;
+    AVCodecContext* fEncoderCtx = nullptr;
+    AVStream*       fStream = nullptr;  // we do not free this
+    AVFrame*        fFrame = nullptr;
+    AVPacket*       fPacket = nullptr;
+
+    SkImageInfo     fInfo;  // only defined between beginRecording() and endRecording()
+    std::unique_ptr<SkRandomAccessWStream> fWStream;
+    int64_t         fCurrentPTS, fDeltaPTS;
+
+    // Lazily allocated, iff the client has called beginFrame() for a given recording session.
+    sk_sp<SkSurface> fSurface;
+
+};
+
+#endif
+
diff --git a/src/third_party/skia/experimental/go-demo/main.go b/src/third_party/skia/experimental/go-demo/main.go
deleted file mode 100644
index 7df64d6..0000000
--- a/src/third_party/skia/experimental/go-demo/main.go
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-package main
-
-/*
-	This is a translation of the example code in
-	"experimental/c-api-example/skia-c-example.c" to test the
-	go-skia package.
-*/
-
-import (
-	"log"
-	"os"
-
-	skia "skia.googlesource.com/skia/experimental/go-skia"
-)
-
-func main() {
-	imgInfo := &skia.ImageInfo{
-		Width:     640,
-		Height:    480,
-		ColorType: skia.GetDefaultColortype(),
-		AlphaType: skia.PREMUL_ALPHATYPE,
-	}
-
-	surface, err := skia.NewRasterSurface(imgInfo)
-	if err != nil {
-		log.Fatalln(err)
-	}
-
-	canvas := surface.Canvas()
-
-	fillPaint := skia.NewPaint()
-	fillPaint.SetColor(0xFF0000FF)
-	canvas.DrawPaint(fillPaint)
-	fillPaint.SetColor(0xFF00FFFF)
-
-	rect := skia.NewRect(100, 100, 540, 380)
-	canvas.DrawRect(rect, fillPaint)
-
-	strokePaint := skia.NewPaint()
-	strokePaint.SetColor(0xFFFF0000)
-	strokePaint.SetAntiAlias(true)
-	strokePaint.SetStroke(true)
-	strokePaint.SetStrokeWidth(5.0)
-
-	path := skia.NewPath()
-	path.MoveTo(50, 50)
-	path.LineTo(590, 50)
-	path.CubicTo(-490, 50, 1130, 430, 50, 430)
-	path.LineTo(590, 430)
-	canvas.DrawPath(path, strokePaint)
-
-	fillPaint.SetColor(0x8000FF00)
-	canvas.DrawOval(skia.NewRect(120, 120, 520, 360), fillPaint)
-
-	// // Get a skia image from the surface.
-	skImg := surface.Image()
-
-	// Write new image to file if we have one.
-	if skImg != nil {
-		out, err := os.Create("testimage.png")
-		if err != nil {
-			log.Fatal(err)
-		}
-		defer out.Close()
-
-		if err := skImg.WritePNG(out); err != nil {
-			log.Fatalf("Unable to write png: %s", err)
-		}
-	}
-}
diff --git a/src/third_party/skia/experimental/go-skia/ctypes.go b/src/third_party/skia/experimental/go-skia/ctypes.go
deleted file mode 100644
index 64953ed..0000000
--- a/src/third_party/skia/experimental/go-skia/ctypes.go
+++ /dev/null
@@ -1,58 +0,0 @@
-//+build ignore
-
-/*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-package skia
-
-// This file is used to generate 'types.go'
-// from the corresponding type definitions in the C API.
-// Any C struct for which we would like to generate a
-// Go struct with the same memory layout should defined defined here.
-// Any enum that is used in Go should also be listed here, together
-// with the enum values that we want to use.
-
-/*
-#cgo CFLAGS: -I../../include/c
-#include "../../include/c/sk_types.h"
-*/
-import "C"
-
-type Color C.sk_color_t
-
-type ColorType C.sk_colortype_t
-
-const (
-	UNKNOWN_COLORTYPE   ColorType = C.UNKNOWN_SK_COLORTYPE
-	RGBA_8888_COLORTYPE ColorType = C.RGBA_8888_SK_COLORTYPE
-	BGRA_8888_COLORTYPE ColorType = C.BGRA_8888_SK_COLORTYPE
-	ALPHA_8_COLORTYPE   ColorType = C.ALPHA_8_SK_COLORTYPE
-)
-
-type AlphaType C.sk_alphatype_t
-
-const (
-	OPAQUE_ALPHATYPE   AlphaType = C.OPAQUE_SK_ALPHATYPE
-	PREMUL_ALPHATYPE   AlphaType = C.PREMUL_SK_ALPHATYPE
-	UNPREMUL_ALPHATYPE AlphaType = C.UNPREMUL_SK_ALPHATYPE
-)
-
-type PixelGeometry C.sk_pixelgeometry_t
-
-const (
-	UNKNOWN_SK_PIXELGEOMETRY PixelGeometry = C.UNKNOWN_SK_PIXELGEOMETRY
-	RGB_H_SK_PIXELGEOMETRY   PixelGeometry = C.RGB_H_SK_PIXELGEOMETRY
-	BGR_H_SK_PIXELGEOMETRY   PixelGeometry = C.BGR_H_SK_PIXELGEOMETRY
-	RGB_V_SK_PIXELGEOMETRY   PixelGeometry = C.RGB_V_SK_PIXELGEOMETRY
-	BGR_V_SK_PIXELGEOMETRY   PixelGeometry = C.BGR_V_SK_PIXELGEOMETRY
-)
-
-type ImageInfo C.sk_imageinfo_t
-
-type SurfaceProps C.sk_surfaceprops_t
-
-type Rect C.sk_rect_t
diff --git a/src/third_party/skia/experimental/go-skia/skia.go b/src/third_party/skia/experimental/go-skia/skia.go
deleted file mode 100644
index e477593..0000000
--- a/src/third_party/skia/experimental/go-skia/skia.go
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-package skia
-
-/*
-#cgo LDFLAGS: -L${SRCDIR}/../../out/Shared
-#cgo LDFLAGS: -Wl,-rpath=${SRCDIR}/../../out/Shared
-#cgo LDFLAGS: -lskia
-#cgo CFLAGS: -I../../include/c
-#include "sk_canvas.h"
-#include "sk_data.h"
-#include "sk_image.h"
-#include "sk_paint.h"
-#include "sk_path.h"
-#include "sk_surface.h"
-*/
-import "C"
-
-import (
-	"fmt"
-	"io"
-	"runtime"
-	"unsafe"
-)
-
-// TODO(stephana): Add proper documentation to the types defined here.
-
-//////////////////////////////////////////////////////////////////////////
-// Surface
-//////////////////////////////////////////////////////////////////////////
-type Surface struct {
-	ptr *C.sk_surface_t
-}
-
-// func NewRasterSurface(width, height int32, alphaType AlphaType) (*Surface, error) {
-func NewRasterSurface(imgInfo *ImageInfo) (*Surface, error) {
-	ptr := C.sk_surface_new_raster(imgInfo.cPointer(), (*C.sk_surfaceprops_t)(nil))
-	if ptr == nil {
-		return nil, fmt.Errorf("Unable to create raster surface.")
-	}
-
-	ret := &Surface{ptr: ptr}
-	runtime.SetFinalizer(ret, func(s *Surface) {
-		C.sk_surface_unref(s.ptr)
-	})
-	return ret, nil
-}
-
-func (s *Surface) Canvas() *Canvas {
-	return &Canvas{
-		ptr:             C.sk_surface_get_canvas(s.ptr),
-		keepParentAlive: s,
-	}
-}
-
-func (s *Surface) Image() *Image {
-	ret := &Image{
-		ptr:             C.sk_surface_new_image_snapshot(s.ptr),
-		keepParentAlive: s,
-	}
-	runtime.SetFinalizer(ret, func(i *Image) {
-		C.sk_image_unref(i.ptr)
-	})
-	return ret
-}
-
-//////////////////////////////////////////////////////////////////////////
-// Image
-//////////////////////////////////////////////////////////////////////////
-type Image struct {
-	ptr             *C.sk_image_t
-	keepParentAlive *Surface
-}
-
-func (i *Image) WritePNG(w io.Writer) error {
-	data := C.sk_image_encode(i.ptr)
-	defer C.sk_data_unref(data)
-
-	dataPtr := C.sk_data_get_data(data)
-	dataSize := C.sk_data_get_size(data)
-	byteSlice := C.GoBytes(dataPtr, C.int(dataSize))
-	_, err := w.Write(byteSlice)
-	if err != nil {
-		return err
-	}
-	return nil
-}
-
-//////////////////////////////////////////////////////////////////////////
-// Canvas
-//////////////////////////////////////////////////////////////////////////
-type Canvas struct {
-	ptr             *C.sk_canvas_t
-	keepParentAlive *Surface
-}
-
-func (c *Canvas) DrawPaint(paint *Paint) {
-	C.sk_canvas_draw_paint(c.ptr, paint.ptr)
-}
-
-func (c *Canvas) DrawOval(rect *Rect, paint *Paint) {
-	// C.sk_canvas_draw_oval(c.ptr, (*C.sk_rect_t)(unsafe.Pointer(rect)), (*C.sk_paint_t)(paint.ptr))
-	C.sk_canvas_draw_oval(c.ptr, rect.cPointer(), paint.ptr)
-}
-
-func (c *Canvas) DrawRect(rect *Rect, paint *Paint) {
-	// C.sk_canvas_draw_rect(c.ptr, (*C.sk_rect_t)(unsafe.Pointer(rect)), (*C.sk_paint_t)(paint.ptr))
-	C.sk_canvas_draw_rect(c.ptr, rect.cPointer(), paint.ptr)
-}
-
-func (c *Canvas) DrawPath(path *Path, paint *Paint) {
-	// C.sk_canvas_draw_path(c.ptr, (*C.sk_path_t)(path.ptr), (*C.sk_paint_t)(paint.ptr))
-	C.sk_canvas_draw_path(c.ptr, path.ptr, paint.ptr)
-}
-
-//////////////////////////////////////////////////////////////////////////
-// Paint
-//////////////////////////////////////////////////////////////////////////
-type Paint struct {
-	ptr *C.sk_paint_t
-}
-
-func NewPaint() *Paint {
-	ret := &Paint{ptr: C.sk_paint_new()}
-	runtime.SetFinalizer(ret, func(p *Paint) {
-		C.sk_paint_delete(p.ptr)
-	})
-	return ret
-}
-
-func (p *Paint) SetColor(color Color) {
-	C.sk_paint_set_color(p.ptr, C.sk_color_t(color))
-}
-
-func (p *Paint) SetAntiAlias(antiAlias bool) {
-	C.sk_paint_set_antialias(p.ptr, C._Bool(antiAlias))
-}
-
-func (p *Paint) SetStroke(val bool) {
-	C.sk_paint_set_stroke(p.ptr, C._Bool(val))
-}
-
-func (p *Paint) SetStrokeWidth(width float32) {
-	C.sk_paint_set_stroke_width(p.ptr, C.float(width))
-}
-
-//////////////////////////////////////////////////////////////////////////
-// Path
-//////////////////////////////////////////////////////////////////////////
-type Path struct {
-	ptr *C.sk_path_t
-}
-
-func NewPath() *Path {
-	ret := &Path{ptr: C.sk_path_new()}
-	runtime.SetFinalizer(ret, func(p *Path) {
-		C.sk_path_delete(p.ptr)
-	})
-	return ret
-}
-
-func (p *Path) MoveTo(x, y float32) {
-	C.sk_path_move_to(p.ptr, C.float(x), C.float(y))
-}
-
-func (p *Path) LineTo(x, y float32) {
-	C.sk_path_line_to(p.ptr, C.float(x), C.float(y))
-}
-
-func (p *Path) QuadTo(x0, y0, x1, y1 float32) {
-	C.sk_path_quad_to(p.ptr, C.float(x0), C.float(y0), C.float(x1), C.float(y1))
-}
-
-func (p *Path) ConicTo(x0, y0, x1, y1, w float32) {
-	C.sk_path_conic_to(p.ptr, C.float(x0), C.float(y0), C.float(x1), C.float(y1), C.float(w))
-}
-
-func (p *Path) CubicTo(x0, y0, x1, y1, x2, y2 float32) {
-	C.sk_path_cubic_to(p.ptr, C.float(x0), C.float(y0), C.float(x1), C.float(y1), C.float(x2), C.float(y2))
-}
-
-func (p *Path) Close() {
-	C.sk_path_close(p.ptr)
-}
-
-// NewRect is a convenience function to define a Rect in a single line.
-func NewRect(left, top, right, bottom float32) *Rect {
-	return &Rect{
-		Left:   left,
-		Top:    top,
-		Right:  right,
-		Bottom: bottom,
-	}
-}
-
-// cPointer casts the pointer to Rect to the corresponding C pointer.
-func (r *Rect) cPointer() *C.sk_rect_t {
-	return (*C.sk_rect_t)(unsafe.Pointer(r))
-}
-
-// cPointer casts the pointer to ImageInfo to the corresponding C pointer.
-func (i *ImageInfo) cPointer() *C.sk_imageinfo_t {
-	return (*C.sk_imageinfo_t)(unsafe.Pointer(i))
-}
-
-// Utility functions.
-func GetDefaultColortype() ColorType {
-	return ColorType(C.sk_colortype_get_default_8888())
-}
diff --git a/src/third_party/skia/experimental/go-skia/types.go b/src/third_party/skia/experimental/go-skia/types.go
deleted file mode 100644
index 637ecee..0000000
--- a/src/third_party/skia/experimental/go-skia/types.go
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-// Created by cgo -godefs. Enum fields in structs were fixed by hand.
-// command: go tool cgo -godefs ctypes.go > types.go
-//
-// The purpose of this file is to have Go structs with the same memory
-// layout as their C counterparts. For enums we want the underlying primitive
-// types to match.
-//
-// TODO(stephan): Add tests that allow to detect failure on platforms other
-// than Linux and changes in the underlying C types.
-
-package skia
-
-type Color uint32
-
-type ColorType uint32
-
-const (
-	UNKNOWN_COLORTYPE   ColorType = 0x0
-	RGBA_8888_COLORTYPE ColorType = 0x1
-	BGRA_8888_COLORTYPE ColorType = 0x2
-	ALPHA_8_COLORTYPE   ColorType = 0x3
-)
-
-type AlphaType uint32
-
-const (
-	OPAQUE_ALPHATYPE   AlphaType = 0x0
-	PREMUL_ALPHATYPE   AlphaType = 0x1
-	UNPREMUL_ALPHATYPE AlphaType = 0x2
-)
-
-type PixelGeometry uint32
-
-const (
-	UNKNOWN_SK_PIXELGEOMETRY PixelGeometry = 0x0
-	RGB_H_SK_PIXELGEOMETRY   PixelGeometry = 0x1
-	BGR_H_SK_PIXELGEOMETRY   PixelGeometry = 0x2
-	RGB_V_SK_PIXELGEOMETRY   PixelGeometry = 0x3
-	BGR_V_SK_PIXELGEOMETRY   PixelGeometry = 0x4
-)
-
-type ImageInfo struct {
-	Width     int32
-	Height    int32
-	ColorType ColorType
-	AlphaType AlphaType
-}
-
-type SurfaceProps struct {
-	PixelGeometry PixelGeometry
-}
-
-type Rect struct {
-	Left   float32
-	Top    float32
-	Right  float32
-	Bottom float32
-}
diff --git a/src/third_party/skia/experimental/iOSSampleApp/Shared/SkOptionListController.h b/src/third_party/skia/experimental/iOSSampleApp/Shared/SkOptionListController.h
deleted file mode 100644
index 87c044b..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/Shared/SkOptionListController.h
+++ /dev/null
@@ -1,16 +0,0 @@
-#import <UIKit/UIKit.h>
-
-@interface SkOptionListController : UITableViewController {
-    NSMutableArray* fOptions;
-    NSInteger fSelectedIndex;
-    UITableViewCell* fSelectedCell;
-    UITableViewCell* fParentCell;
-}
-@property (nonatomic, retain) NSMutableArray* fOptions;
-@property (nonatomic, assign) NSInteger fSelectedIndex;
-@property (nonatomic, retain) UITableViewCell* fSelectedCell;
-@property (nonatomic, retain) UITableViewCell* fParentCell;
-
-- (void)addOption:(NSString*)option;
-- (NSString*)getSelectedOption;
-@end
diff --git a/src/third_party/skia/experimental/iOSSampleApp/Shared/SkOptionListController.mm b/src/third_party/skia/experimental/iOSSampleApp/Shared/SkOptionListController.mm
deleted file mode 100644
index d524134..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/Shared/SkOptionListController.mm
+++ /dev/null
@@ -1,78 +0,0 @@
-#import "SkOptionListController.h"
-
-@implementation SkOptionListController
-
-@synthesize fOptions, fSelectedIndex, fSelectedCell, fParentCell;
-
-#pragma mark -
-#pragma mark Initialization
-
-- (id)initWithStyle:(UITableViewStyle)style {
-    self = [super initWithStyle:style];
-    if (self) {
-        self.fOptions = [[NSMutableArray alloc] init];
-        self.fSelectedIndex = 0;
-        self.fSelectedCell = nil;
-    }
-    return self;
-}
-
-- (void)addOption:(NSString*)option {
-    [fOptions addObject:option];
-}
-
-- (NSString*)getSelectedOption {
-    return (NSString*)[fOptions objectAtIndex:self.fSelectedIndex];
-}
-
-#pragma mark -
-#pragma mark Table view data source
-
-- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
-    return 1;
-}
-
-- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
-    return [fOptions count];
-}
-
-- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
-    
-    static NSString *CellIdentifier = @"Cell";
-    
-    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
-    if (cell == nil) {
-        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
-    }
-    
-    cell.textLabel.text = [fOptions objectAtIndex:indexPath.row];
-    if (indexPath.row == fSelectedIndex) {
-        cell.accessoryType = UITableViewCellAccessoryCheckmark;
-        self.fSelectedCell = cell;
-    }
-    else
-        cell.accessoryType = UITableViewCellAccessoryNone;
-    
-    return cell;
-}
-
-#pragma mark -
-#pragma mark Table view delegate
-
-- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
-    self.fSelectedCell.accessoryType = UITableViewCellAccessoryNone;
-    self.fSelectedCell = cell;
-    cell.accessoryType = UITableViewCellAccessoryCheckmark;
-    self.fParentCell.detailTextLabel.text = cell.textLabel.text;;
-    self.fSelectedIndex = indexPath.row;
-    [self.navigationController popViewControllerAnimated:YES];
-}
-
-- (void)dealloc {
-    self.fOptions = nil;
-    self.fSelectedCell = nil;
-    [super dealloc];
-}
-
-@end
diff --git a/src/third_party/skia/experimental/iOSSampleApp/Shared/SkOptionsTableViewController.h b/src/third_party/skia/experimental/iOSSampleApp/Shared/SkOptionsTableViewController.h
deleted file mode 100644
index 13d6c1b..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/Shared/SkOptionsTableViewController.h
+++ /dev/null
@@ -1,42 +0,0 @@
-#import <UIKit/UIKit.h>
-#import "SkOptionListController.h"
-#import "SkOSMenu.h"
-#import "SkEvent.h"
-#import "SkUIView.h"
-@interface SkOptionItem : NSObject {
-    UITableViewCell* fCell;
-    const SkOSMenu::Item* fItem;
-}
-@property (nonatomic, assign) const SkOSMenu::Item* fItem;
-@property (nonatomic, retain) UITableViewCell* fCell;
-
-@end
-
-@interface SkOptionListItem : SkOptionItem{
-    SkOptionListController* fOptions;
-}
-@property (nonatomic, retain) SkOptionListController* fOptions;
-
-@end
-
-@interface SkOptionsTableViewController : UITableViewController <UINavigationControllerDelegate, SkUIViewOptionsDelegate> {
-    NSMutableArray* fItems;
-    const SkTDArray<SkOSMenu*>* fMenus;
-    SkOptionListItem* fCurrentList;
-}
-
-@property (nonatomic, retain) NSMutableArray* fItems;
-@property (nonatomic, retain) SkOptionListItem* fCurrentList;
-
-- (void)registerMenus:(const SkTDArray<SkOSMenu*>*)menus;
-- (void)updateMenu:(SkOSMenu*)menu;
-- (void)loadMenu:(SkOSMenu*)menu;
-
-- (UITableViewCell*)createAction:(NSString*)title;
-- (UITableViewCell*)createSlider:(NSString*)title min:(float)min max:(float)max default:(float)value;
-- (UITableViewCell*)createSwitch:(NSString*)title default:(BOOL)state;
-- (UITableViewCell*)createTriState:(NSString*)title default:(int)index;
-- (UITableViewCell*)createTextField:(NSString*)title default:(NSString*)value;
-- (UITableViewCell*)createList:(NSString*)title default:(NSString*)value;
-
-@end
diff --git a/src/third_party/skia/experimental/iOSSampleApp/Shared/SkOptionsTableViewController.mm b/src/third_party/skia/experimental/iOSSampleApp/Shared/SkOptionsTableViewController.mm
deleted file mode 100644
index e6adfd0..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/Shared/SkOptionsTableViewController.mm
+++ /dev/null
@@ -1,339 +0,0 @@
-#import "SkOptionsTableViewController.h"
-#include "SkEvent.h"
-#include "SkTArray.h"
-
-@implementation SkOptionItem
-@synthesize fCell, fItem;
-- (void)dealloc {
-    [fCell release];
-    [super dealloc];
-}
-@end
-
-@implementation SkOptionListItem
-@synthesize fOptions;
-- (void)dealloc {
-    [fOptions release];
-    [super dealloc];
-}
-@end
-
-@implementation SkOptionsTableViewController
-
-@synthesize fItems, fCurrentList;
-
-- (id)initWithStyle:(UITableViewStyle)style {
-    self = [super initWithStyle:style];
-    if (self) {
-        self.fItems = [NSMutableArray array];
-    }
-    return self;
-}
-
-//SkUIViewOptionsDelegate
-- (void) view:(SkUIView*)view didAddMenu:(const SkOSMenu*)menu {}
-- (void) view:(SkUIView*)view didUpdateMenu:(SkOSMenu*)menu {
-    [self updateMenu:menu];
-}
-
-- (NSUInteger)convertPathToIndex:(NSIndexPath*)path {
-    NSUInteger index = 0;
-    for (NSInteger i = 0; i < path.section; ++i) {
-        index += (*fMenus)[i]->getCount();
-    }
-    return index + path.row;
-}
-
-- (void)registerMenus:(const SkTDArray<SkOSMenu*>*)menus {
-    fMenus = menus;
-    for (NSUInteger i = 0; i < fMenus->count(); ++i) {
-        [self loadMenu:(*fMenus)[i]];
-    }
-}
-
-- (void)updateMenu:(SkOSMenu*)menu {
-    // the first menu is always assumed to be the static, the second is 
-    // repopulated every time over and over again 
-    int menuIndex = fMenus->find(menu);
-    if (menuIndex >= 0 && menuIndex < fMenus->count()) {
-        NSUInteger first = 0;
-        for (NSInteger i = 0; i < menuIndex; ++i) {
-            first += (*fMenus)[i]->getCount();
-        }
-        [fItems removeObjectsInRange:NSMakeRange(first, [fItems count] - first)];
-        [self loadMenu:menu];
-    }
-    [self.tableView reloadData];
-}
-
-- (void)loadMenu:(SkOSMenu*)menu {
-    const SkOSMenu::Item* menuitems[menu->getCount()];
-    menu->getItems(menuitems);
-    for (int i = 0; i < menu->getCount(); ++i) {
-        const SkOSMenu::Item* item = menuitems[i];
-        NSString* title = [NSString stringWithUTF8String:item->getLabel()];
-        
-        if (SkOSMenu::kList_Type == item->getType()) {
-            int value = 0;
-            SkOptionListItem* List = [[SkOptionListItem alloc] init];
-
-            List.fItem = item;
-            List.fOptions = [[SkOptionListController alloc] initWithStyle:UITableViewStyleGrouped];
-            
-            int count = 0;
-            SkOSMenu::FindListItemCount(*item->getEvent(), &count);
-            SkTArray<SkString> options;
-            options.resize_back(count);
-            SkOSMenu::FindListItems(*item->getEvent(), &options.front());
-            for (int i = 0; i < count; ++i)
-                [List.fOptions addOption:[NSString stringWithUTF8String:options[i].c_str()]];
-            SkOSMenu::FindListIndex(*item->getEvent(), item->getSlotName(), &value);
-            
-            List.fOptions.fSelectedIndex = value;
-            List.fCell = [self createList:title
-                                      default:[List.fOptions getSelectedOption]];
-            List.fOptions.fParentCell = List.fCell;
-            [fItems addObject:List];
-            [List release];
-        }
-        else {
-            SkOptionItem* option = [[SkOptionItem alloc] init];
-            option.fItem = item;
- 
-            bool state = false;
-            SkString str;
-            SkOSMenu::TriState tristate;
-            switch (item->getType()) {
-                case SkOSMenu::kAction_Type:
-                    option.fCell = [self createAction:title];
-                    break;
-                case SkOSMenu::kSwitch_Type:
-                    SkOSMenu::FindSwitchState(*item->getEvent(), item->getSlotName(), &state);
-                    option.fCell = [self createSwitch:title default:(BOOL)state];
-                    break;
-                case SkOSMenu::kSlider_Type:
-                    SkScalar min, max, value;
-                    SkOSMenu::FindSliderValue(*item->getEvent(), item->getSlotName(), &value);
-                    SkOSMenu::FindSliderMin(*item->getEvent(), &min);
-                    SkOSMenu::FindSliderMax(*item->getEvent(), &max);
-                    option.fCell = [self createSlider:title 
-                                                  min:min 
-                                                  max:max
-                                              default:value];
-                    break;                    
-                case SkOSMenu::kTriState_Type:
-                    SkOSMenu::FindTriState(*item->getEvent(), item->getSlotName(), &tristate);
-                    option.fCell = [self createTriState:title default:(int)tristate];
-                    break;
-                case SkOSMenu::kTextField_Type:
-                    SkOSMenu::FindText(*item->getEvent(), item->getSlotName(), &str);
-                    option.fCell = [self createTextField:title 
-                                                 default:[NSString stringWithUTF8String:str.c_str()]];
-                    break;
-                default:
-                    break;
-            }
-            [fItems addObject:option];
-            [option release];
-        }
-    }
-}
-
-- (void)valueChanged:(id)sender {
-    UITableViewCell* cell = (UITableViewCell*)(((UIView*)sender).superview);
-    NSUInteger index = [self convertPathToIndex:[self.tableView indexPathForCell:cell]];
-    SkOptionItem* item = (SkOptionItem*)[fItems objectAtIndex:index];
-    if ([sender isKindOfClass:[UISlider class]]) {//Slider
-        UISlider* slider = (UISlider *)sender;
-        cell.detailTextLabel.text = [NSString stringWithFormat:@"%1.1f", slider.value];
-        item.fItem->setScalar(slider.value);
-    }
-    else if ([sender isKindOfClass:[UISwitch class]]) {//Switch
-        UISwitch* switch_ = (UISwitch *)sender;
-        item.fItem->setBool(switch_.on);
-    }
-    else if ([sender isKindOfClass:[UITextField class]]) { //TextField
-        UITextField* textField = (UITextField *)sender;
-        [textField resignFirstResponder];
-        item.fItem->setString([textField.text UTF8String]);
-    }
-    else if ([sender isKindOfClass:[UISegmentedControl class]]) { //Action
-        UISegmentedControl* segmented = (UISegmentedControl *)sender;
-        SkOSMenu::TriState state;
-        if (2 == segmented.selectedSegmentIndex) {
-            state = SkOSMenu::kMixedState;
-        } else {
-            state = (SkOSMenu::TriState)segmented.selectedSegmentIndex;
-        }
-        item.fItem->setTriState(state);
-    }
-    else{
-        NSLog(@"unknown");
-    }
-    item.fItem->postEvent();
-}
-
-- (UITableViewCell*)createAction:(NSString*)title {
-    UITableViewCell* cell = [[[UITableViewCell alloc]
-                              initWithStyle:UITableViewCellStyleValue1 
-                              reuseIdentifier:nil] autorelease];
-    cell.textLabel.text = title;
-    return cell;
-}
-
-- (UITableViewCell*)createSwitch:(NSString*)title default:(BOOL)state {
-    UITableViewCell* cell = [[[UITableViewCell alloc] 
-                              initWithStyle:UITableViewCellStyleValue1 
-                              reuseIdentifier:nil] autorelease];
-    cell.textLabel.text = title;
-    cell.selectionStyle = UITableViewCellSelectionStyleNone;
-    UISwitch* switchView = [[UISwitch alloc] initWithFrame:CGRectZero];
-    [switchView setOn:state animated:NO];
-    [switchView addTarget:self 
-                   action:@selector(valueChanged:) 
-         forControlEvents:UIControlEventValueChanged];
-    cell.accessoryView = switchView;
-    [switchView release];
-    return cell;
-}
-
-- (UITableViewCell*)createSlider:(NSString*)title 
-                             min:(float)min 
-                             max:(float)max 
-                         default:(float)value {
-    UITableViewCell* cell = [[[UITableViewCell alloc] 
-                             initWithStyle:UITableViewCellStyleValue1 
-                             reuseIdentifier:nil] autorelease];
-    cell.textLabel.text = title;
-    cell.selectionStyle = UITableViewCellSelectionStyleNone;
-    UISlider* sliderView = [[UISlider alloc] init];
-    sliderView.value = value;
-    sliderView.minimumValue = min;
-    sliderView.maximumValue = max;
-    [sliderView addTarget:self 
-                   action:@selector(valueChanged:) 
-         forControlEvents:UIControlEventValueChanged];
-    cell.detailTextLabel.text = [NSString stringWithFormat:@"%1.1f", value];
-    cell.accessoryView = sliderView; 
-    [sliderView release];
-    return cell;
-}
-
-- (UITableViewCell*)createTriState:(NSString*)title default:(int)index {
-    UITableViewCell* cell = [[[UITableViewCell alloc] 
-                              initWithStyle:UITableViewCellStyleValue1 
-                              reuseIdentifier:nil] autorelease];
-    cell.textLabel.text = title;
-    cell.selectionStyle = UITableViewCellSelectionStyleNone;
-    NSArray* items = [NSArray arrayWithObjects:@"Off", @"On", @"Mixed", nil];
-    UISegmentedControl* segmented = [[UISegmentedControl alloc] initWithItems:items];
-    segmented.selectedSegmentIndex = (index == -1) ? 2 : index;
-    segmented.segmentedControlStyle = UISegmentedControlStyleBar;
-    [segmented addTarget:self 
-                  action:@selector(valueChanged:) 
-        forControlEvents:UIControlEventValueChanged];
-    cell.accessoryView = segmented;
-    [segmented release];
-    return cell; 
-}
-
-- (UITableViewCell*)createTextField:(NSString*)title 
-                            default:(NSString*)value {
-    UITableViewCell* cell = [[[UITableViewCell alloc] 
-                              initWithStyle:UITableViewCellStyleValue1 
-                              reuseIdentifier:nil] autorelease];
-    cell.textLabel.text = title;
-    cell.selectionStyle = UITableViewCellSelectionStyleNone;
-    UITextField* textField = [[UITextField alloc] 
-                              initWithFrame:CGRectMake(0, 10, 150, 25)];
-    textField.adjustsFontSizeToFitWidth = YES;
-    textField.textAlignment = NSTextAlignmentRight;
-    textField.textColor = cell.detailTextLabel.textColor;
-    textField.placeholder = value;
-    textField.returnKeyType = UIReturnKeyDone;
-    [textField addTarget:self 
-                  action:@selector(valueChanged:) 
-        forControlEvents:UIControlEventEditingDidEndOnExit];
-    cell.accessoryView = textField; 
-    [textField release];
-    return cell;
-}
-
-- (UITableViewCell*)createList:(NSString*)title default:(NSString*)value{
-    UITableViewCell* cell = [[[UITableViewCell alloc] 
-                              initWithStyle:UITableViewCellStyleValue1 
-                              reuseIdentifier:nil] autorelease];
-    cell.textLabel.text = title;
-    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
-    cell.detailTextLabel.text = value;
-    return cell; 
-}
-
-#pragma mark -
-#pragma mark Table view data source
-
-- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
-    return fMenus->count();
-}
-
-- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
-    return [NSString stringWithUTF8String:(*fMenus)[section]->getTitle()];
-}
-
-- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
-    return (*fMenus)[section]->getCount();
-}
-
-- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
-    return ((SkOptionItem*)[fItems objectAtIndex:[self convertPathToIndex:indexPath]]).fCell;
-}
-
-#pragma mark -
-#pragma mark Table view delegate
-
-- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    UITableViewCell* cell = [tableView cellForRowAtIndexPath:indexPath];
-    id item = [fItems objectAtIndex:[self convertPathToIndex:indexPath]];
-    
-    if ([item isKindOfClass:[SkOptionListItem class]]) {
-        SkOptionListItem* list = (SkOptionListItem*)item;
-        self.fCurrentList = list;
-        self.navigationController.delegate = self;
-        [self.navigationController pushViewController:list.fOptions animated:YES];
-    }
-    else if ([item isKindOfClass:[SkOptionItem class]]) {
-        if (UITableViewCellSelectionStyleNone != cell.selectionStyle) { //Actions
-            SkOptionItem* action = (SkOptionItem*)item;
-            action.fItem->postEvent();
-        }
-    } 
-    else{
-        NSLog(@"unknown");
-    }
-
-    [self.tableView deselectRowAtIndexPath:indexPath animated:YES];
-}
-
-#pragma mark -
-#pragma mark Navigation controller delegate
-
-- (void)navigationController:(UINavigationController *)navigationController 
-      willShowViewController:(UIViewController *)viewController 
-                    animated:(BOOL)animated {
-    if (self == viewController) { //when a List option is popped, trigger event
-        NSString* selectedOption = [fCurrentList.fOptions getSelectedOption];
-        fCurrentList.fCell.detailTextLabel.text = selectedOption;
-        fCurrentList.fItem->setInt(fCurrentList.fOptions.fSelectedIndex);
-        fCurrentList.fItem->postEvent();
-    }
-}
-
-#pragma mark -
-#pragma mark Memory management
-
-- (void)dealloc {
-    self.fItems = nil;
-    [super dealloc];
-}
-
-@end
\ No newline at end of file
diff --git a/src/third_party/skia/experimental/iOSSampleApp/Shared/SkUIDetailViewController.h b/src/third_party/skia/experimental/iOSSampleApp/Shared/SkUIDetailViewController.h
deleted file mode 100644
index 7435a9d..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/Shared/SkUIDetailViewController.h
+++ /dev/null
@@ -1,42 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#import <UIKit/UIKit.h>
-#import "SkOptionsTableViewController.h"
-#import "SkUIRootViewController.h"
-#import "SkUIView.h"
-
-class SampleWindow;
-class SkData;
-@interface SkUIDetailViewController : UIViewController {
-    UIPopoverController* fPopOverController;
-    SkOptionsTableViewController* fOptionsController;
-    UIBarButtonItem* fPrintButton;
-    UIBarButtonItem* fOptionsButton;
-    SkData* fData;
-    SkUIView* fSkUIView;
-    SampleWindow* fWind;
-}
-
-@property (nonatomic, retain) UIBarButtonItem* fPrintButton;
-@property (nonatomic, retain) UIBarButtonItem* fOptionsButton;
-@property (nonatomic, retain) SkOptionsTableViewController* fOptionsController;
-@property (nonatomic, assign) UIPopoverController* fPopOverController;
-
-//Instance methods
-- (void)populateRoot:(SkUIRootViewController*)root;
-- (void)goToItem:(NSUInteger)index;
-- (void)createButtons;
-//UI actions
-- (void)printContent;
-- (void)presentOptions;
-
-//SplitView popover management
-- (void)showRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem;
-- (void)invalidateRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem;
-
-@end
diff --git a/src/third_party/skia/experimental/iOSSampleApp/Shared/SkUIDetailViewController.mm b/src/third_party/skia/experimental/iOSSampleApp/Shared/SkUIDetailViewController.mm
deleted file mode 100644
index 0ab71d9..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/Shared/SkUIDetailViewController.mm
+++ /dev/null
@@ -1,178 +0,0 @@
-#import "SkUIDetailViewController.h"
-#include "SampleApp.h"
-#include "SkCGUtils.h"
-#include "SkData.h"
-#include "SkOSMenu.h"
-@implementation SkUIDetailViewController
-@synthesize fPrintButton, fOptionsButton, fPopOverController, fOptionsController;
-
-//Overwritten from UIViewController
-- (void)viewDidLoad {
-    [super viewDidLoad];
-
-    fSkUIView = (SkUIView*)self.view;
-    
-    fWind = (SampleWindow*)fSkUIView.fWind;
-    fSkUIView.fTitleItem = self.navigationItem;
-    
-    [self createButtons];
-    
-    UISwipeGestureRecognizer* swipe = [[UISwipeGestureRecognizer alloc]
-                                       initWithTarget:self 
-                                       action:@selector(handleSwipe:)];
-    [self.navigationController.navigationBar addGestureRecognizer:swipe];
-    [swipe release];
-    swipe = [[UISwipeGestureRecognizer alloc]
-             initWithTarget:self 
-             action:@selector(handleSwipe:)];
-    swipe.direction = UISwipeGestureRecognizerDirectionLeft;
-    [self.navigationController.navigationBar addGestureRecognizer:swipe];
-    [swipe release];
-    
-    fOptionsController = [[SkOptionsTableViewController alloc] 
-                          initWithStyle:UITableViewStyleGrouped];
-    fSkUIView.fOptionsDelegate = fOptionsController;
-    [fOptionsController registerMenus:fWind->getMenus()];
-    
-}
-
-- (void)createButtons {
-    UIToolbar* toolbar = [[UIToolbar alloc]
-                          initWithFrame:CGRectMake(0, 0, 125, 45)];
-    [toolbar setBarStyle: UIBarStyleBlackOpaque];
-    
-    UIBarButtonItem* flexibleSpace = [[UIBarButtonItem alloc]
-                                       initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
-                                       target:nil
-                                       action:nil];
-    
-    fOptionsButton = [[UIBarButtonItem alloc]
-                    initWithTitle:@"Options" 
-                    style:UIBarButtonItemStylePlain
-                    target:self
-                    action:@selector(presentOptions)];
-    UIBarButtonItem* fixedSpace = [[UIBarButtonItem alloc]
-                                    initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace
-                                    target:nil
-                                    action:nil];
-    fixedSpace.width = 10;
-    
-    fPrintButton = [[UIBarButtonItem alloc]
-                    initWithBarButtonSystemItem:UIBarButtonSystemItemAction
-                    target:self
-                    action:@selector(printContent)];
-    fPrintButton.style = UIBarButtonItemStylePlain;
-
-    [toolbar setItems:[NSArray arrayWithObjects:flexibleSpace, fOptionsButton, fixedSpace, fPrintButton, nil]
-             animated:NO];
-    
-    self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]
-                                              initWithCustomView:toolbar];
-    [flexibleSpace release];
-    [fixedSpace release];
-    [toolbar release];
-}
-
-- (void)handleSwipe:(UISwipeGestureRecognizer *)sender {
-    if (UISwipeGestureRecognizerDirectionRight == sender.direction)
-        fWind->previousSample();
-    else
-        fWind->nextSample();
-}
-
-- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
-    return YES; // Overriden to allow auto rotation for any direction
-}
-
-- (void)dealloc {
-    [fPrintButton release];
-    [fOptionsButton release];
-    [fPopOverController release];
-    [fOptionsController release];
-    [super dealloc];
-}
-
-//Instance Methods
-- (void)populateRoot:(SkUIRootViewController*)rootVC {
-    for (int i = 0; i < fWind->sampleCount(); ++i) {
-        [rootVC addItem:[NSString stringWithUTF8String:fWind->getSampleTitle(i).c_str()]];
-    }
-}
-
-- (void)goToItem:(NSUInteger)index {
-    fWind->goToSample(index);
-}
-
-- (void)printContent {
-    /* comment out until we rev. this to use SkDocument
-
-    UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
-    UIPrintInfo *printInfo = [UIPrintInfo printInfo];
-    printInfo.jobName = @"Skia iOS SampleApp";
-    printInfo.duplex = UIPrintInfoDuplexLongEdge;
-    printInfo.outputType = UIPrintInfoOutputGeneral;
-    fWind->saveToPdf();
-    [fSkUIView forceRedraw];
-    fData = fWind->getPDFData();
-    NSData* data = [NSData dataWithBytesNoCopy:(void*)fData->data() length:fData->size()];
-    controller.printInfo = printInfo;
-    controller.printingItem = data;
-    //Add ref because data pointer retains a pointer to data
-    fData->ref();
-
-    void (^SkCompletionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
-    ^(UIPrintInteractionController *pic, BOOL completed, NSError *error) {
-        fData->unref();
-        if (!completed && error)
-            NSLog(@"FAILED! due to error in domain %@ with error code %u",
-                  error.domain, error.code);
-    };
-
-    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
-        [controller presentFromBarButtonItem:fPrintButton animated:YES
-                        completionHandler:SkCompletionHandler];
-    } else {
-        [controller presentAnimated:YES completionHandler:SkCompletionHandler];
-    }
-     */
-}
-
-- (void)presentOptions {
-    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
-        if (nil == fPopOverController) {
-            UINavigationController* navigation = [[UINavigationController alloc] 
-                                                  initWithRootViewController:fOptionsController];
-            navigation.navigationBar.topItem.title = @"Options";
-            fPopOverController = [[UIPopoverController alloc] initWithContentViewController:navigation];
-            [navigation release];
-        }
-        
-        if (fPopOverController.isPopoverVisible)
-            [fPopOverController dismissPopoverAnimated:YES];
-        else
-            [fPopOverController presentPopoverFromBarButtonItem:fOptionsButton 
-                                       permittedArrowDirections:UIPopoverArrowDirectionAny 
-                                                       animated:YES];
-        
-    } else {
-        UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
-                                                                       style:UIBarButtonItemStyleBordered
-                                                                      target:nil
-                                                                      action:nil];
-        self.navigationItem.backBarButtonItem = backButton;
-        [backButton release];
-        [self.navigationController pushViewController:fOptionsController animated:YES];
-        self.navigationController.navigationBar.topItem.title = @"Options";
-    }
-}
- 
-//Popover Management
-- (void)showRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem {
-    [self.navigationItem setLeftBarButtonItem:barButtonItem animated:NO];
-}
-
-- (void)invalidateRootPopoverButtonItem:(UIBarButtonItem *)barButtonItem {
-    [self.navigationItem setLeftBarButtonItem:nil animated:NO];
-}
-
-@end
\ No newline at end of file
diff --git a/src/third_party/skia/experimental/iOSSampleApp/Shared/SkUIRootViewController.h b/src/third_party/skia/experimental/iOSSampleApp/Shared/SkUIRootViewController.h
deleted file mode 100644
index e4deec1..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/Shared/SkUIRootViewController.h
+++ /dev/null
@@ -1,21 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#import <UIKit/UIKit.h>
-
-@interface SkUIRootViewController : UITableViewController <UITableViewDataSource> {
-@private
-    UIPopoverController *popoverController;
-    UIBarButtonItem *popoverButtonItem;
-    NSMutableArray* fSamples;
-}
-@property (nonatomic, retain) UIPopoverController *popoverController;
-@property (nonatomic, retain) UIBarButtonItem *popoverButtonItem;
-
-- (void)addItem:(NSString*)anItem;
-
-@end
diff --git a/src/third_party/skia/experimental/iOSSampleApp/Shared/SkUIRootViewController.mm b/src/third_party/skia/experimental/iOSSampleApp/Shared/SkUIRootViewController.mm
deleted file mode 100644
index 255a271..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/Shared/SkUIRootViewController.mm
+++ /dev/null
@@ -1,61 +0,0 @@
-#import "SkUIRootViewController.h"
-#import "SkUISplitViewController.h"
-@implementation SkUIRootViewController
-@synthesize popoverController, popoverButtonItem;
-
-//Overwritten from UIViewController
-- (void)viewDidLoad {
-    [super viewDidLoad];
-    self.contentSizeForViewInPopover = CGSizeMake(200, self.view.bounds.size.height);
-    fSamples = [[NSMutableArray alloc] init];
-}
-
-- (void)viewDidUnload {
-    [super viewDidUnload];
-    self.popoverButtonItem = nil;
-}
-
-- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
-    return YES;
-}
-
-- (void)dealloc {
-    [popoverController release];
-    [popoverButtonItem release];
-    [fSamples release];
-    [super dealloc];
-}
-
-
-//Table View Delegate Methods
-- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
-    // Return the number of sections.
-    return 1;
-}
-
-- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
-    // Return the number of rows in the section.
-    return [fSamples count];
-}
-
-- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
-
-    static NSString *CellIdentifier = @"Cell";
-
-    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
-    if (cell == nil) {
-        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
-                                       reuseIdentifier:CellIdentifier] autorelease];
-    }
-
-    cell.textLabel.text = [fSamples objectAtIndex:indexPath.row];
-    return cell;
-}
-
-//Instance methods
-- (void)addItem:(NSString*)anItem {
-    [fSamples addObject:anItem];
-}
-
-@end
-
diff --git a/src/third_party/skia/experimental/iOSSampleApp/Shared/SkUIView.h b/src/third_party/skia/experimental/iOSSampleApp/Shared/SkUIView.h
deleted file mode 100644
index 80bd339..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/Shared/SkUIView.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#import <OpenGLES/EAGL.h>
-#import <OpenGLES/ES1/gl.h>
-#import <OpenGLES/ES1/glext.h>
-#import <OpenGLES/ES2/gl.h>
-#import <OpenGLES/ES2/glext.h>
-#import <QuartzCore/QuartzCore.h>
-#import <UIKit/UIKit.h>
-#include "SkOSWindow_ios.h"
-
-class SkEvent;
-@class SkUIView;
-
-@protocol SkUIViewOptionsDelegate <NSObject>
-@optional
-// Called when the view needs to handle adding an SkOSMenu
-- (void) view:(SkUIView*)view didAddMenu:(const SkOSMenu*)menu;
-- (void) view:(SkUIView*)view didUpdateMenu:(const SkOSMenu*)menu;
-@end
-
-@interface SkUIView : UIView  {
-    UINavigationItem* fTitleItem;
-    SkOSWindow* fWind;
-    id<SkUIViewOptionsDelegate> fOptionsDelegate;
-}
-
-@property (nonatomic, readonly) SkOSWindow *fWind;
-@property (nonatomic, retain) UINavigationItem* fTitleItem;
-@property (nonatomic, assign) id<SkUIViewOptionsDelegate> fOptionsDelegate;
-
-- (id)initWithDefaults;
-- (void)setUpWindow;
-- (void)forceRedraw;
-- (void)drawInRaster;
-
-- (void)setSkTitle:(const char*)title;
-- (void)onAddMenu:(const SkOSMenu*)menu;
-- (void)onUpdateMenu:(const SkOSMenu*)menu;
-- (void)postInvalWithRect:(const SkIRect*)rectOrNil;
-- (BOOL)onHandleEvent:(const SkEvent&)event;
-- (void)getAttachmentInfo:(SkOSWindow::AttachmentInfo*)info;
-
-@end
diff --git a/src/third_party/skia/experimental/iOSSampleApp/Shared/SkUIView.mm b/src/third_party/skia/experimental/iOSSampleApp/Shared/SkUIView.mm
deleted file mode 100644
index 5969773..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/Shared/SkUIView.mm
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#import "SkUIView.h"
-#include "SkCanvas.h"
-#include "SkCGUtils.h"
-@implementation SkUIView
-
-@synthesize fWind, fTitleItem, fOptionsDelegate;
-
-- (id)initWithDefaults {
-    fWind = NULL;
-    return self;
-}
-
-- (id)initWithCoder:(NSCoder*)coder {
-    if ((self = [super initWithCoder:coder])) {
-        self = [self initWithDefaults];
-        [self setUpWindow];
-    }
-    return self;
-}
-
-- (id)initWithFrame:(CGRect)frame {
-    if (self = [super initWithFrame:frame]) {
-        self = [self initWithDefaults];
-        [self setUpWindow];
-    }
-    return self;
-}
-
-- (void)setUpWindow {
-    if (NULL != fWind) {
-        fWind->setVisibleP(true);
-        fWind->resize(self.frame.size.width, self.frame.size.height);
-    }
-}
-
-- (void)dealloc {
-    delete fWind;
-    [fTitleItem release];
-    [super dealloc];
-}
-
-- (void)forceRedraw {
-    [self drawInRaster];
-}
-
-- (void)drawInRaster {
-    SkCanvas canvas(fWind->getBitmap());
-    fWind->draw(&canvas);
-    CGImageRef cgimage = SkCreateCGImageRef(fWind->getBitmap());
-    self.layer.contents = (id)cgimage;
-    CGImageRelease(cgimage);
-}
-
-//Gesture Handlers
-- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
-    for (UITouch *touch in touches) {
-        CGPoint loc = [touch locationInView:self];
-        fWind->handleClick(loc.x, loc.y, SkView::Click::kDown_State, touch);
-    }
-}
-
-- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
-    for (UITouch *touch in touches) {
-        CGPoint loc = [touch locationInView:self];
-        fWind->handleClick(loc.x, loc.y, SkView::Click::kMoved_State, touch);
-    }
-}
-
-- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
-    for (UITouch *touch in touches) {
-        CGPoint loc = [touch locationInView:self];
-        fWind->handleClick(loc.x, loc.y, SkView::Click::kUp_State, touch);
-    }
-}
-
-- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event {
-    for (UITouch *touch in touches) {
-        CGPoint loc = [touch locationInView:self];
-        fWind->handleClick(loc.x, loc.y, SkView::Click::kUp_State, touch);
-    }
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-- (void)setSkTitle:(const char *)title {
-    if (fTitleItem) {
-        fTitleItem.title = [NSString stringWithUTF8String:title];
-    }
-}
-
-- (BOOL)onHandleEvent:(const SkEvent&)evt {
-    return false;
-}
-
-- (void)getAttachmentInfo:(SkOSWindow::AttachmentInfo*)info {
-    // we don't have a GL context.
-    info->fSampleCount = 0;
-    info->fStencilBits = 0;
-}
-
-#include "SkOSMenu.h"
-- (void)onAddMenu:(const SkOSMenu*)menu {
-    [self.fOptionsDelegate view:self didAddMenu:menu];
-}
-- (void)onUpdateMenu:(const SkOSMenu*)menu {
-    [self.fOptionsDelegate view:self didUpdateMenu:menu];
-}
-
-- (void)postInvalWithRect:(const SkIRect*)r {
-    [self performSelector:@selector(drawInRaster) withObject:nil afterDelay:0];
-    [self setNeedsDisplay];
-}
-
-@end
diff --git a/src/third_party/skia/experimental/iOSSampleApp/Shared/skia_ios.mm b/src/third_party/skia/experimental/iOSSampleApp/Shared/skia_ios.mm
deleted file mode 100644
index b8680c4..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/Shared/skia_ios.mm
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#import <UIKit/UIKit.h>
-#include "SkApplication.h"
-
-int main(int argc, char *argv[]) {
-    signal(SIGPIPE, SIG_IGN);
-    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
-    application_init();
-
-    // Identify the documents directory
-    NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
-    NSString *docsDir = [dirPaths objectAtIndex:0];
-    NSString *resourceDir = [docsDir stringByAppendingString:@"/resources"];
-    const char *d = [resourceDir UTF8String];
-
-    // change to the dcouments directory. To allow the 'writePath' flag to use relative paths. 
-    NSFileManager *filemgr = [NSFileManager defaultManager];
-    int retVal = 99; 
-    if ([filemgr changeCurrentDirectoryPath: docsDir] == YES)
-    {
-        IOS_launch_type launchType = set_cmd_line_args(argc, argv, d);
-        retVal = launchType == kApplication__iOSLaunchType
-                ? UIApplicationMain(argc, argv, nil, nil) : (int) launchType;
-    }
-    application_term();
-    [filemgr release];
-    [pool release];
-    return retVal;
-}
diff --git a/src/third_party/skia/experimental/iOSSampleApp/SkSampleUIView.h b/src/third_party/skia/experimental/iOSSampleApp/SkSampleUIView.h
deleted file mode 100644
index a1009b8..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/SkSampleUIView.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "SampleApp.h"
-#import "SkUIView.h"
-
-class SkiOSDeviceManager;
-class SkOSWindow;
-class SkEvent;
-struct FPSState;
-
-@interface SkSampleUIView : SkUIView  {
-    BOOL fRedrawRequestPending;
-
-    struct {
-        EAGLContext*    fContext;
-        GLuint          fRenderbuffer;
-        GLuint          fStencilbuffer;
-        GLuint          fFramebuffer;
-        GLint           fWidth;
-        GLint           fHeight;
-    } fGL;
-
-    NSString* fTitle;
-    CALayer* fRasterLayer;
-    CAEAGLLayer* fGLLayer;
-
-    FPSState* fFPSState;
-    SkiOSDeviceManager* fDevManager;
-}
-
-@property (nonatomic, copy) NSString* fTitle;
-@property (nonatomic, retain) CALayer* fRasterLayer;
-@property (nonatomic, retain) CAEAGLLayer* fGLLayer;
-
-- (id)initWithDefaults;
-- (void)drawInRaster;
-- (void)forceRedraw;
-
-- (void)setSkTitle:(const char*)title;
-- (void)postInvalWithRect:(const SkIRect*)rectOrNil;
-- (void)getAttachmentInfo:(SkOSWindow::AttachmentInfo*)info;
-
-@end
diff --git a/src/third_party/skia/experimental/iOSSampleApp/SkSampleUIView.mm b/src/third_party/skia/experimental/iOSSampleApp/SkSampleUIView.mm
deleted file mode 100644
index b1e0487..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/SkSampleUIView.mm
+++ /dev/null
@@ -1,499 +0,0 @@
-/*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#import "SkSampleUIView.h"
-
-//#define SKGL_CONFIG         kEAGLColorFormatRGB565
-#define SKGL_CONFIG         kEAGLColorFormatRGBA8
-
-#define FORCE_REDRAW
-
-#include "SkCanvas.h"
-#include "SkCGUtils.h"
-#include "SkSurface.h"
-#include "SampleApp.h"
-
-#if SK_SUPPORT_GPU
-//#define USE_GL_1
-#define USE_GL_2
-
-#include "gl/GrGLInterface.h"
-#include "GrContext.h"
-#include "SkGpuDevice.h"
-#endif
-
-class SkiOSDeviceManager : public SampleWindow::DeviceManager {
-public:
-    SkiOSDeviceManager(GLint layerFBO) {
-#if SK_SUPPORT_GPU
-        fCurContext = NULL;
-        fCurIntf = NULL;
-        fMSAASampleCount = 0;
-        fDeepColor = false;
-        fActualColorBits = 0;
-#endif
-        fBackend = SkOSWindow::kNone_BackEndType;
-    }
-    
-    virtual ~SkiOSDeviceManager() {
-#if SK_SUPPORT_GPU
-        SkSafeUnref(fCurContext);
-        SkSafeUnref(fCurIntf);
-#endif
-    }
-    
-    void setUpBackend(SampleWindow* win, int msaaSampleCount, bool deepColor) override {
-        SkASSERT(SkOSWindow::kNone_BackEndType == fBackend);
-        
-        fBackend = SkOSWindow::kNone_BackEndType;
-        
-#if SK_SUPPORT_GPU
-        switch (win->getDeviceType()) {
-            case SampleWindow::kRaster_DeviceType:
-                break;
-            // these guys use the native backend
-            case SampleWindow::kGPU_DeviceType:
-                fBackend = SkOSWindow::kNativeGL_BackEndType;
-                break;
-            default:
-                SkASSERT(false);
-                break;
-        }
-        SkOSWindow::AttachmentInfo info;
-        bool result = win->attach(fBackend, msaaSampleCount, false, &info);
-        if (!result) {
-            SkDebugf("Failed to initialize GL");
-            return;
-        }
-        fMSAASampleCount = msaaSampleCount;
-        fDeepColor = deepColor;
-        // Assume that we have at least 24-bit output, for backends that don't supply this data
-        fActualColorBits = SkTMax(info.fColorBits, 24);
-        
-        SkASSERT(NULL == fCurIntf);
-        switch (win->getDeviceType()) {
-            case SampleWindow::kRaster_DeviceType:
-                fCurIntf = NULL;
-                break;
-            case SampleWindow::kGPU_DeviceType:
-                fCurIntf = GrGLCreateNativeInterface();
-                break;
-            default:
-                SkASSERT(false);
-                break;
-        }
-        
-        SkASSERT(NULL == fCurContext);
-        if (SkOSWindow::kNone_BackEndType != fBackend) {
-            fCurContext = GrContext::Create(kOpenGL_GrBackend,
-                                            (GrBackendContext) fCurIntf);
-        }
-        
-        if ((NULL == fCurContext || NULL == fCurIntf) &&
-            SkOSWindow::kNone_BackEndType != fBackend) {
-            // We need some context and interface to see results if we're using a GL backend
-            SkSafeUnref(fCurContext);
-            SkSafeUnref(fCurIntf);
-            SkDebugf("Failed to setup 3D");
-            win->release();
-        }
-#endif // SK_SUPPORT_GPU
-        // call windowSizeChanged to create the render target
-        this->windowSizeChanged(win);
-    }
-    
-    void tearDownBackend(SampleWindow *win) override {
-#if SK_SUPPORT_GPU
-        SkSafeUnref(fCurContext);
-        fCurContext = NULL;
-        
-        SkSafeUnref(fCurIntf);
-        fCurIntf = NULL;
-        
-        fGpuSurface = nullptr;
-#endif
-        win->release();
-        fBackend = SampleWindow::kNone_BackEndType;
-    }
-
-    sk_sp<SkSurface> makeSurface(SampleWindow::DeviceType dType, SampleWindow* win) override {
-#if SK_SUPPORT_GPU
-        if (SampleWindow::IsGpuDeviceType(dType) && fCurContext) {
-            SkSurfaceProps props(win->getSurfaceProps());
-            if (kRGBA_F16_SkColorType == win->info().colorType() || fActualColorBits > 24) {
-                // If we're rendering to F16, we need an off-screen surface - the current render
-                // target is most likely the wrong format.
-                //
-                // If we're using a deep (10-bit or higher) surface, we probably need an off-screen
-                // surface. 10-bit, in particular, has strange gamma behavior.
-                return SkSurface::MakeRenderTarget(fCurContext, SkBudgeted::kNo, win->info(),
-                                                   fMSAASampleCount, &props);
-            } else {
-                return fGpuSurface;
-            }
-        }
-#endif
-        return nullptr;
-    }
-
-    virtual void publishCanvas(SampleWindow::DeviceType dType,
-                               SkCanvas* canvas,
-                               SampleWindow* win) override {
-#if SK_SUPPORT_GPU
-        if (NULL != fCurContext) {
-            fCurContext->flush();
-        }
-#endif
-        win->present();
-    }
-
-    void windowSizeChanged(SampleWindow* win) override {
-#if SK_SUPPORT_GPU
-        if (fCurContext) {
-            SampleWindow::AttachmentInfo attachmentInfo;
-            win->attach(fBackend, fMSAASampleCount, fDeepColor, &attachmentInfo);
-            fActualColorBits = SkTMax(attachmentInfo.fColorBits, 24);
-            fGpuSurface = win->makeGpuBackedSurface(attachmentInfo, fCurIntf, fCurContext);
-        }
-#endif
-    }
-
-    GrContext* getGrContext() override {
-#if SK_SUPPORT_GPU
-        return fCurContext;
-#else
-        return NULL;
-#endif
-    }
-
-    int numColorSamples() const override {
-#if SK_SUPPORT_GPU
-        return fMSAASampleCount;
-#else
-        return 0;
-#endif
-    }
-
-    int getColorBits() override {
-#if SK_SUPPORT_GPU
-        return fActualColorBits;
-#else
-        return 24;
-#endif
-    }
-
-    bool isUsingGL() const { return SkOSWindow::kNone_BackEndType != fBackend; }
-
-private:
-
-#if SK_SUPPORT_GPU
-    GrContext*              fCurContext;
-    const GrGLInterface*    fCurIntf;
-    sk_sp<SkSurface>        fGpuSurface;
-    int                     fMSAASampleCount;
-    bool                    fDeepColor;
-    int                     fActualColorBits;
-#endif
-    
-    SkOSWindow::SkBackEndTypes fBackend;
-    
-    typedef SampleWindow::DeviceManager INHERITED;
-};
-
-////////////////////////////////////////////////////////////////////////////////
-@implementation SkSampleUIView
-
-@synthesize fTitle, fRasterLayer, fGLLayer;
-
-#include "SkApplication.h"
-#include "SkEvent.h"
-#include "SkWindow.h"
-
-struct FPSState {
-    static const int FRAME_COUNT = 60;
-    
-    CFTimeInterval fNow0, fNow1;
-    CFTimeInterval fTime0, fTime1, fTotalTime;
-    int fFrameCounter;
-    SkString str;
-    FPSState() {
-        fTime0 = fTime1 = fTotalTime = 0;
-        fFrameCounter = 0;
-    }
-    
-    void startDraw() {
-        fNow0 = CACurrentMediaTime();
-    }
-    
-    void endDraw() {
-        fNow1 = CACurrentMediaTime();
-    }
-    
-    void flush(SkOSWindow* hwnd) {
-        CFTimeInterval now2 = CACurrentMediaTime();
-        
-        fTime0 += fNow1 - fNow0;
-        fTime1 += now2 - fNow1;
-        
-        if (++fFrameCounter == FRAME_COUNT) {
-            CFTimeInterval totalNow = CACurrentMediaTime();
-            fTotalTime = totalNow - fTotalTime;
-            
-            //SkMSec ms0 = (int)(1000 * fTime0 / FRAME_COUNT);
-            //SkMSec msTotal = (int)(1000 * fTotalTime / FRAME_COUNT);
-            //str.printf(" ms: %d [%d], fps: %3.1f", msTotal, ms0,
-            //           FRAME_COUNT / fTotalTime);
-            str.printf(" fps:%3.1f", FRAME_COUNT / fTotalTime);
-            hwnd->setTitle(NULL);
-            fTotalTime = totalNow;
-            fTime0 = fTime1 = 0;
-            fFrameCounter = 0;
-        }
-    }
-};
-
-static FPSState gFPS;
-
-#define FPS_StartDraw() gFPS.startDraw()
-#define FPS_EndDraw()   gFPS.endDraw()
-#define FPS_Flush(wind) gFPS.flush(wind)
-
-///////////////////////////////////////////////////////////////////////////////
-
-- (id)initWithDefaults {
-    if (self = [super initWithDefaults]) {
-        fRedrawRequestPending = false;
-        fFPSState = new FPSState;
-        
-#ifdef USE_GL_1
-        fGL.fContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
-#else
-        fGL.fContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
-#endif
-        
-        if (!fGL.fContext || ![EAGLContext setCurrentContext:fGL.fContext])
-        {
-            [self release];
-            return nil;
-        }
-        
-        // Create default framebuffer object. The backing will be allocated for the current layer in -resizeFromLayer
-        glGenFramebuffers(1, &fGL.fFramebuffer);
-        glBindFramebuffer(GL_FRAMEBUFFER, fGL.fFramebuffer);
-        
-        glGenRenderbuffers(1, &fGL.fRenderbuffer);
-        glGenRenderbuffers(1, &fGL.fStencilbuffer);
-        
-        glBindRenderbuffer(GL_RENDERBUFFER, fGL.fRenderbuffer);
-        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, fGL.fRenderbuffer);
-        
-        glBindRenderbuffer(GL_RENDERBUFFER, fGL.fStencilbuffer);
-        glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, fGL.fStencilbuffer);
-        
-        self.fGLLayer = [CAEAGLLayer layer];
-        fGLLayer.bounds = self.bounds;
-        fGLLayer.anchorPoint = CGPointMake(0, 0);
-        fGLLayer.opaque = TRUE;
-        [self.layer addSublayer:fGLLayer];
-        fGLLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
-                                       [NSNumber numberWithBool:NO],
-                                       kEAGLDrawablePropertyRetainedBacking,
-                                       SKGL_CONFIG,
-                                       kEAGLDrawablePropertyColorFormat,
-                                       nil];
-        
-        self.fRasterLayer = [CALayer layer];
-        fRasterLayer.anchorPoint = CGPointMake(0, 0);
-        fRasterLayer.opaque = TRUE;
-        [self.layer addSublayer:fRasterLayer];
-        
-        NSMutableDictionary *newActions = [[NSMutableDictionary alloc] initWithObjectsAndKeys:[NSNull null], @"onOrderIn",
-                                           [NSNull null], @"onOrderOut",
-                                           [NSNull null], @"sublayers",
-                                           [NSNull null], @"contents",
-                                           [NSNull null], @"bounds",
-                                           nil];
-        fGLLayer.actions = newActions;
-        fRasterLayer.actions = newActions;
-        [newActions release];
-        
-        // rebuild argc and argv from process info
-        NSArray* arguments = [[NSProcessInfo processInfo] arguments];
-        int argc = [arguments count];
-        char** argv = new char*[argc];
-        for (int i = 0; i < argc; ++i) {
-            NSString* arg = [arguments objectAtIndex:i];
-            int strlen = [arg lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
-            argv[i] = new char[strlen+1];
-            [arg getCString:argv[i] maxLength:strlen+1 encoding:NSUTF8StringEncoding];
-        }
-        
-        fDevManager = new SkiOSDeviceManager(fGL.fFramebuffer);
-        fWind = new SampleWindow(self, argc, argv, fDevManager);
-
-        fWind->resize(self.frame.size.width, self.frame.size.height);
-        
-        for (int i = 0; i < argc; ++i) {
-            delete [] argv[i];
-        }
-        delete [] argv;
-    }
-    return self;
-}
-
-- (void)dealloc {
-    delete fDevManager;
-    delete fFPSState;
-    self.fRasterLayer = nil;
-    self.fGLLayer = nil;
-    [fGL.fContext release];
-    [super dealloc];
-}
-
-- (void)layoutSubviews {
-    int W, H;
-    
-    // Allocate color buffer backing based on the current layer size
-    glBindRenderbuffer(GL_RENDERBUFFER, fGL.fRenderbuffer);
-    [fGL.fContext renderbufferStorage:GL_RENDERBUFFER fromDrawable:fGLLayer];
-    
-    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &fGL.fWidth);
-    glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &fGL.fHeight);
-    
-    glBindRenderbuffer(GL_RENDERBUFFER, fGL.fStencilbuffer);
-    glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, fGL.fWidth, fGL.fHeight);
-    
-    if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
-        NSLog(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatus(GL_FRAMEBUFFER));
-    }
-    
-    if (fDevManager->isUsingGL()) {
-        W = fGL.fWidth;
-        H = fGL.fHeight;
-        CGRect rect = CGRectMake(0, 0, W, H);
-        fGLLayer.bounds = rect;
-    }
-    else {
-        CGRect rect = self.bounds;
-        W = (int)CGRectGetWidth(rect);
-        H = (int)CGRectGetHeight(rect);
-        fRasterLayer.bounds = rect;
-    }
-    
-    printf("---- layoutSubviews %d %d\n", W, H);
-    fWind->resize(W, H);
-    fWind->inval(NULL);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-- (void)drawWithCanvas:(SkCanvas*)canvas {
-    fRedrawRequestPending = false;
-    fFPSState->startDraw();
-    fWind->draw(canvas);
-    fFPSState->endDraw();
-#ifdef FORCE_REDRAW
-    fWind->inval(NULL);
-#endif
-    fFPSState->flush(fWind);
-}
-
-- (void)drawInGL {
-    // This application only creates a single context which is already set current at this point.
-    // This call is redundant, but needed if dealing with multiple contexts.
-    [EAGLContext setCurrentContext:fGL.fContext];
-    
-    // This application only creates a single default framebuffer which is already bound at this point.
-    // This call is redundant, but needed if dealing with multiple framebuffers.
-    glBindFramebuffer(GL_FRAMEBUFFER, fGL.fFramebuffer);
-    
-    GLint scissorEnable;
-    glGetIntegerv(GL_SCISSOR_TEST, &scissorEnable);
-    glDisable(GL_SCISSOR_TEST);
-    glClearColor(0,0,0,0);
-    glClear(GL_COLOR_BUFFER_BIT);
-    if (scissorEnable) {
-        glEnable(GL_SCISSOR_TEST);
-    }
-    glViewport(0, 0, fGL.fWidth, fGL.fHeight);
-    
-   
-    sk_sp<SkSurface> surface(fWind->makeSurface());
-    SkCanvas* canvas = surface->getCanvas();
-
-    // if we're not "retained", then we have to always redraw everything.
-    // This call forces us to ignore the fDirtyRgn, and draw everywhere.
-    // If we are "retained", we can skip this call (as the raster case does)
-    fWind->forceInvalAll();
-
-    [self drawWithCanvas:canvas];
-
-    // This application only creates a single color renderbuffer which is already bound at this point.
-    // This call is redundant, but needed if dealing with multiple renderbuffers.
-    glBindRenderbuffer(GL_RENDERBUFFER, fGL.fRenderbuffer);
-    [fGL.fContext presentRenderbuffer:GL_RENDERBUFFER];
-}
-
-- (void)drawInRaster {
-    sk_sp<SkSurface> surface(fWind->makeSurface());
-    SkCanvas* canvas = surface->getCanvas();
-    [self drawWithCanvas:canvas];
-    CGImageRef cgimage = SkCreateCGImageRef(fWind->getBitmap());
-    fRasterLayer.contents = (id)cgimage;
-    CGImageRelease(cgimage);
-}
-
-- (void)forceRedraw {
-    if (fDevManager->isUsingGL())
-        [self drawInGL];
-    else 
-        [self drawInRaster];
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-- (void)setSkTitle:(const char *)title {
-    NSString* text = [NSString stringWithUTF8String:title];
-    if ([text length] > 0)
-        self.fTitle = text;
-    
-    if (fTitleItem && fTitle) {
-        fTitleItem.title = [NSString stringWithFormat:@"%@%@", fTitle, 
-                            [NSString stringWithUTF8String:fFPSState->str.c_str()]];
-    }
-}
-
-- (void)postInvalWithRect:(const SkIRect*)r {
-    if (!fRedrawRequestPending) {
-        fRedrawRequestPending = true;
-        bool gl = fDevManager->isUsingGL();
-        [CATransaction begin];
-        [CATransaction setAnimationDuration:0];
-        fRasterLayer.hidden = gl;
-        fGLLayer.hidden = !gl;
-        [CATransaction commit];
-        if (gl) {
-            [self performSelector:@selector(drawInGL) withObject:nil afterDelay:0];
-        }
-        else {
-            [self performSelector:@selector(drawInRaster) withObject:nil afterDelay:0];
-            [self setNeedsDisplay];
-        }
-    }
-}
-
-- (void)getAttachmentInfo:(SkOSWindow::AttachmentInfo*)info {
-    glBindRenderbuffer(GL_RENDERBUFFER, fGL.fRenderbuffer);
-    glGetRenderbufferParameteriv(GL_RENDERBUFFER,
-                                 GL_RENDERBUFFER_STENCIL_SIZE,
-                                 &info->fStencilBits);
-    glGetRenderbufferParameteriv(GL_RENDERBUFFER,
-                                 GL_RENDERBUFFER_SAMPLES_APPLE,
-                                 &info->fSampleCount);
-}
-
-@end
diff --git a/src/third_party/skia/experimental/iOSSampleApp/SkiOSSampleApp-Base.xcconfig b/src/third_party/skia/experimental/iOSSampleApp/SkiOSSampleApp-Base.xcconfig
deleted file mode 100644
index a219e72..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/SkiOSSampleApp-Base.xcconfig
+++ /dev/null
@@ -1,17 +0,0 @@
-//
-//  SkiOSSampleApp-Base.xcconfig
-//  iOSSampleApp
-//
-//  Created by Yang Su on 6/30/11.
-//  Copyright 2011 Google Inc.
-//  Use of this source code is governed by a BSD-style license that can be
-//  found in the LICENSE file.
-//
-ARCHS=armv6 armv7
-IPHONEOS_DEPLOYMENT_TARGET=4.2
-SDKROOT=iphoneos
-TARGETED_DEVICE_FAMILY=1,2
-
-USER_HEADER_SEARCH_PATHS=../../gpu/include/** ../../include/**
-CODE_SIGN_IDENTITY=iPhone Developer
-
diff --git a/src/third_party/skia/experimental/iOSSampleApp/SkiOSSampleApp-Debug.xcconfig b/src/third_party/skia/experimental/iOSSampleApp/SkiOSSampleApp-Debug.xcconfig
deleted file mode 100644
index 3833c6f..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/SkiOSSampleApp-Debug.xcconfig
+++ /dev/null
@@ -1,13 +0,0 @@
-//
-//  SkiOSSampleApp.xcconfig
-//  iOSSampleApp
-//
-//  Created by Yang Su on 6/30/11.
-//  Copyright 2011 Google Inc.
-//  Use of this source code is governed by a BSD-style license that can be
-//  found in the LICENSE file.
-//
-#include "SkiOSSampleApp-Base"
-
-GCC_PREPROCESSOR_DEFINITIONS=SK_DEBUG SK_BUILD_FOR_IOS SK_BUILD_NO_OPTS
-GCC_OPTIMIZATION_LEVEL=0
diff --git a/src/third_party/skia/experimental/iOSSampleApp/SkiOSSampleApp-Release.xcconfig b/src/third_party/skia/experimental/iOSSampleApp/SkiOSSampleApp-Release.xcconfig
deleted file mode 100644
index 711e0e6..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/SkiOSSampleApp-Release.xcconfig
+++ /dev/null
@@ -1,12 +0,0 @@
-//
-//  SkiOSSampleApp-Release.xcconfig
-//  iOSSampleApp
-//
-//  Created by Yang Su on 6/30/11.
-//  Copyright 2011 Google Inc.
-//  Use of this source code is governed by a BSD-style license that can be
-//  found in the LICENSE file.
-//
-#include "SkiOSSampleApp-Base"
-GCC_PREPROCESSOR_DEFINITIONS=SK_RELEASE SK_BUILD_FOR_IOS SK_BUILD_NO_OPTS
-GCC_OPTIMIZATION_LEVEL=s
diff --git a/src/third_party/skia/experimental/iOSSampleApp/iOSSampleApp-Info.plist b/src/third_party/skia/experimental/iOSSampleApp/iOSSampleApp-Info.plist
deleted file mode 100644
index 47a923f..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/iOSSampleApp-Info.plist
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleDisplayName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIconFile</key>
-	<string></string>
-	<key>CFBundleIdentifier</key>
-	<string>com.google.SkiaSampleApp</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>LSRequiresIPhoneOS</key>
-	<true/>
-	<key>NSMainNibFile</key>
-	<string>MainWindow_iPhone</string>
-	<key>NSMainNibFile~ipad</key>
-	<string>MainWindow_iPad</string>
-	<key>UISupportedInterfaceOrientations</key>
-	<array>
-		<string>UIInterfaceOrientationPortrait</string>
-	</array>
-	<key>UISupportedInterfaceOrientations~ipad</key>
-	<array>
-		<string>UIInterfaceOrientationPortrait</string>
-		<string>UIInterfaceOrientationPortraitUpsideDown</string>
-		<string>UIInterfaceOrientationLandscapeLeft</string>
-		<string>UIInterfaceOrientationLandscapeRight</string>
-	</array>
-</dict>
-</plist>
diff --git a/src/third_party/skia/experimental/iOSSampleApp/iOSSampleApp_Prefix.pch b/src/third_party/skia/experimental/iOSSampleApp/iOSSampleApp_Prefix.pch
deleted file mode 100644
index 1c479f4..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/iOSSampleApp_Prefix.pch
+++ /dev/null
@@ -1,8 +0,0 @@
-//
-// Prefix header for all source files of the 'iOSShell' target in the 'iOSShell' project
-//
-
-#ifdef __OBJC__
-    #import <Foundation/Foundation.h>
-    #import <UIKit/UIKit.h>
-#endif
diff --git a/src/third_party/skia/experimental/iOSSampleApp/iPad/AppDelegate_iPad.h b/src/third_party/skia/experimental/iOSSampleApp/iPad/AppDelegate_iPad.h
deleted file mode 100644
index eb54c69..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/iPad/AppDelegate_iPad.h
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#import <UIKit/UIKit.h>
-#import "SkUISplitViewController.h"
-
-@interface AppDelegate_iPad : NSObject <UIApplicationDelegate> {
-@private;
-    UIWindow* window;
-    SkUISplitViewController* splitViewController;
-}
-@property (nonatomic, retain) IBOutlet UIWindow* window;
-@property (nonatomic, retain) IBOutlet SkUISplitViewController* splitViewController;
-
-@end
diff --git a/src/third_party/skia/experimental/iOSSampleApp/iPad/AppDelegate_iPad.mm b/src/third_party/skia/experimental/iOSSampleApp/iPad/AppDelegate_iPad.mm
deleted file mode 100644
index c33fdde..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/iPad/AppDelegate_iPad.mm
+++ /dev/null
@@ -1,22 +0,0 @@
-#import "AppDelegate_iPad.h"
-
-@implementation AppDelegate_iPad
-
-@synthesize window, splitViewController;
-
-- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
-    [window addSubview:[splitViewController view]];
-    [window makeKeyAndVisible];
-
-    self.window.rootViewController = splitViewController;
-
-    return YES;
-}
-
-- (void)dealloc {
-    [window release];
-    [splitViewController release];
-    [super dealloc];
-}
-
-@end
diff --git a/src/third_party/skia/experimental/iOSSampleApp/iPad/MainWindow_iPad.xib b/src/third_party/skia/experimental/iOSSampleApp/iPad/MainWindow_iPad.xib
deleted file mode 100644
index 6b197d0..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/iPad/MainWindow_iPad.xib
+++ /dev/null
@@ -1,565 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB" version="7.10">
-	<data>
-		<int key="IBDocument.SystemTarget">1296</int>
-		<string key="IBDocument.SystemVersion">12B19</string>
-		<string key="IBDocument.InterfaceBuilderVersion">2549</string>
-		<string key="IBDocument.AppKitVersion">1187</string>
-		<string key="IBDocument.HIToolboxVersion">624.00</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-			<string key="NS.object.0">1498</string>
-		</object>
-		<object class="NSArray" key="IBDocument.IntegratedClassDependencies">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<string>IBProxyObject</string>
-			<string>IBUICustomObject</string>
-			<string>IBUINavigationBar</string>
-			<string>IBUINavigationController</string>
-			<string>IBUINavigationItem</string>
-			<string>IBUISplitViewController</string>
-			<string>IBUITableView</string>
-			<string>IBUITableViewController</string>
-			<string>IBUIView</string>
-			<string>IBUIViewController</string>
-			<string>IBUIWindow</string>
-		</object>
-		<object class="NSArray" key="IBDocument.PluginDependencies">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.Metadata">
-			<string key="NS.key.0">PluginDependencyRecalculationVersion</string>
-			<integer value="1" key="NS.object.0"/>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="IBProxyObject" id="841351856">
-				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
-				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-			</object>
-			<object class="IBProxyObject" id="606714003">
-				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
-				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-			</object>
-			<object class="IBUICustomObject" id="250404236">
-				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-			</object>
-			<object class="IBUIWindow" id="62075450">
-				<reference key="NSNextResponder"/>
-				<int key="NSvFlags">292</int>
-				<string key="NSFrameSize">{768, 1024}</string>
-				<reference key="NSSuperview"/>
-				<reference key="NSWindow"/>
-				<object class="NSColor" key="IBUIBackgroundColor">
-					<int key="NSColorSpace">1</int>
-					<bytes key="NSRGB">MSAxIDEAA</bytes>
-				</object>
-				<bool key="IBUIOpaque">NO</bool>
-				<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
-				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics">
-					<int key="IBUIStatusBarStyle">2</int>
-				</object>
-				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-				<bool key="IBUIResizesToFullScreen">YES</bool>
-			</object>
-			<object class="IBUISplitViewController" id="143532475">
-				<object class="NSArray" key="IBUIToolbarItems" id="0">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics">
-					<int key="IBUIStatusBarStyle">2</int>
-				</object>
-				<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
-					<int key="IBUIInterfaceOrientation">1</int>
-					<int key="interfaceOrientation">1</int>
-				</object>
-				<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-				<bool key="IBUIHorizontal">NO</bool>
-				<object class="IBUINavigationController" key="IBUIMasterViewController" id="524408385">
-					<reference key="IBUIParentViewController" ref="143532475"/>
-					<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics">
-						<int key="IBUIStatusBarStyle">2</int>
-					</object>
-					<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
-						<int key="IBUIInterfaceOrientation">1</int>
-						<int key="interfaceOrientation">1</int>
-					</object>
-					<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-					<bool key="IBUIHorizontal">NO</bool>
-					<object class="IBUINavigationBar" key="IBUINavigationBar" id="593802069">
-						<nil key="NSNextResponder"/>
-						<int key="NSvFlags">256</int>
-						<string key="NSFrameSize">{0, 0}</string>
-						<bool key="IBUIClipsSubviews">YES</bool>
-						<bool key="IBUIMultipleTouchEnabled">YES</bool>
-						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-						<int key="IBUIBarStyle">1</int>
-					</object>
-					<object class="NSMutableArray" key="IBUIViewControllers">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="IBUITableViewController" id="714382558">
-							<object class="IBUITableView" key="IBUIView" id="805122470">
-								<nil key="NSNextResponder"/>
-								<int key="NSvFlags">274</int>
-								<string key="NSFrameSize">{320, 960}</string>
-								<object class="NSColor" key="IBUIBackgroundColor" id="933040628">
-									<int key="NSColorSpace">3</int>
-									<bytes key="NSWhite">MQA</bytes>
-								</object>
-								<bool key="IBUIClipsSubviews">YES</bool>
-								<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-								<bool key="IBUIAlwaysBounceVertical">YES</bool>
-								<int key="IBUISeparatorStyle">1</int>
-								<int key="IBUISectionIndexMinimumDisplayRowCount">0</int>
-								<bool key="IBUIShowsSelectionImmediatelyOnTouchBegin">YES</bool>
-								<float key="IBUIRowHeight">44</float>
-								<float key="IBUISectionHeaderHeight">22</float>
-								<float key="IBUISectionFooterHeight">22</float>
-							</object>
-							<object class="IBUINavigationItem" key="IBUINavigationItem" id="136024681">
-								<string key="IBUITitle">Samples</string>
-								<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-							</object>
-							<reference key="IBUIParentViewController" ref="524408385"/>
-							<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics">
-								<int key="IBUIStatusBarStyle">2</int>
-							</object>
-							<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
-								<int key="IBUIInterfaceOrientation">1</int>
-								<int key="interfaceOrientation">1</int>
-							</object>
-							<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-							<bool key="IBUIHorizontal">NO</bool>
-							<bool key="IBUIClearsSelectionOnViewWillAppear">NO</bool>
-						</object>
-					</object>
-				</object>
-				<object class="IBUINavigationController" key="IBUIDetailViewController" id="1006871283">
-					<reference key="IBUIParentViewController" ref="143532475"/>
-					<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics">
-						<int key="IBUIStatusBarStyle">2</int>
-					</object>
-					<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
-						<int key="IBUIInterfaceOrientation">1</int>
-						<int key="interfaceOrientation">1</int>
-					</object>
-					<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-					<bool key="IBUIHorizontal">NO</bool>
-					<object class="IBUINavigationBar" key="IBUINavigationBar" id="210980145">
-						<nil key="NSNextResponder"/>
-						<int key="NSvFlags">256</int>
-						<string key="NSFrameSize">{0, 0}</string>
-						<bool key="IBUIClipsSubviews">YES</bool>
-						<bool key="IBUIMultipleTouchEnabled">YES</bool>
-						<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-						<int key="IBUIBarStyle">1</int>
-					</object>
-					<object class="NSMutableArray" key="IBUIViewControllers">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="IBUIViewController" id="659859393">
-							<object class="IBUIView" key="IBUIView" id="879616490">
-								<nil key="NSNextResponder"/>
-								<int key="NSvFlags">274</int>
-								<string key="NSFrameSize">{768, 960}</string>
-								<reference key="IBUIBackgroundColor" ref="933040628"/>
-								<bool key="IBUIMultipleTouchEnabled">YES</bool>
-								<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-							</object>
-							<reference key="IBUIToolbarItems" ref="0"/>
-							<object class="IBUINavigationItem" key="IBUINavigationItem" id="245890386">
-								<string key="IBUITitle">Title</string>
-								<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-							</object>
-							<reference key="IBUIParentViewController" ref="1006871283"/>
-							<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
-								<int key="IBUIInterfaceOrientation">1</int>
-								<int key="interfaceOrientation">1</int>
-							</object>
-							<string key="targetRuntimeIdentifier">IBIPadFramework</string>
-							<bool key="IBUIHorizontal">NO</bool>
-						</object>
-					</object>
-				</object>
-			</object>
-		</object>
-		<object class="IBObjectContainer" key="IBDocument.Objects">
-			<object class="NSMutableArray" key="connectionRecords">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">delegate</string>
-						<reference key="source" ref="841351856"/>
-						<reference key="destination" ref="250404236"/>
-					</object>
-					<int key="connectionID">8</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">window</string>
-						<reference key="source" ref="250404236"/>
-						<reference key="destination" ref="62075450"/>
-					</object>
-					<int key="connectionID">7</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">splitViewController</string>
-						<reference key="source" ref="250404236"/>
-						<reference key="destination" ref="143532475"/>
-					</object>
-					<int key="connectionID">69</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">fRoot</string>
-						<reference key="source" ref="143532475"/>
-						<reference key="destination" ref="714382558"/>
-					</object>
-					<int key="connectionID">85</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">fDetail</string>
-						<reference key="source" ref="143532475"/>
-						<reference key="destination" ref="659859393"/>
-					</object>
-					<int key="connectionID">172</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">dataSource</string>
-						<reference key="source" ref="805122470"/>
-						<reference key="destination" ref="714382558"/>
-					</object>
-					<int key="connectionID">91</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">delegate</string>
-						<reference key="source" ref="805122470"/>
-						<reference key="destination" ref="143532475"/>
-					</object>
-					<int key="connectionID">93</int>
-				</object>
-			</object>
-			<object class="IBMutableOrderedSet" key="objectRecords">
-				<object class="NSArray" key="orderedObjects">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBObjectRecord">
-						<int key="objectID">0</int>
-						<reference key="object" ref="0"/>
-						<reference key="children" ref="1000"/>
-						<nil key="parent"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-1</int>
-						<reference key="object" ref="841351856"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">File's Owner</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-2</int>
-						<reference key="object" ref="606714003"/>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">2</int>
-						<reference key="object" ref="62075450"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-						</object>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">6</int>
-						<reference key="object" ref="250404236"/>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">52</int>
-						<reference key="object" ref="143532475"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="524408385"/>
-							<reference ref="1006871283"/>
-						</object>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">53</int>
-						<reference key="object" ref="524408385"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="593802069"/>
-							<reference ref="714382558"/>
-						</object>
-						<reference key="parent" ref="143532475"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">55</int>
-						<reference key="object" ref="714382558"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="136024681"/>
-							<reference ref="805122470"/>
-						</object>
-						<reference key="parent" ref="524408385"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">56</int>
-						<reference key="object" ref="593802069"/>
-						<reference key="parent" ref="524408385"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">57</int>
-						<reference key="object" ref="136024681"/>
-						<reference key="parent" ref="714382558"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">89</int>
-						<reference key="object" ref="805122470"/>
-						<reference key="parent" ref="714382558"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">138</int>
-						<reference key="object" ref="1006871283"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="659859393"/>
-							<reference ref="210980145"/>
-						</object>
-						<reference key="parent" ref="143532475"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">142</int>
-						<reference key="object" ref="659859393"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="245890386"/>
-							<reference ref="879616490"/>
-						</object>
-						<reference key="parent" ref="1006871283"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">140</int>
-						<reference key="object" ref="210980145"/>
-						<reference key="parent" ref="1006871283"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">162</int>
-						<reference key="object" ref="245890386"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-						</object>
-						<reference key="parent" ref="659859393"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">143</int>
-						<reference key="object" ref="879616490"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-						</object>
-						<reference key="parent" ref="659859393"/>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="flattenedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>-1.CustomClassName</string>
-					<string>-1.IBPluginDependency</string>
-					<string>-2.CustomClassName</string>
-					<string>-2.IBPluginDependency</string>
-					<string>138.IBPluginDependency</string>
-					<string>140.IBPluginDependency</string>
-					<string>142.CustomClassName</string>
-					<string>142.IBPluginDependency</string>
-					<string>143.CustomClassName</string>
-					<string>143.IBPluginDependency</string>
-					<string>162.IBPluginDependency</string>
-					<string>2.IBPluginDependency</string>
-					<string>52.CustomClassName</string>
-					<string>52.IBPluginDependency</string>
-					<string>53.IBPluginDependency</string>
-					<string>55.CustomClassName</string>
-					<string>55.IBPluginDependency</string>
-					<string>56.IBPluginDependency</string>
-					<string>57.IBPluginDependency</string>
-					<string>6.CustomClassName</string>
-					<string>6.IBPluginDependency</string>
-					<string>89.IBPluginDependency</string>
-				</object>
-				<object class="NSArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>UIApplication</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>UIResponder</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>SkUIDetailViewController</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>SkSampleUIView</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>SkUISplitViewController</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>SkUIRootViewController</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>AppDelegate_iPad</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="unlocalizedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<reference key="dict.values" ref="0"/>
-			</object>
-			<nil key="activeLocalization"/>
-			<object class="NSMutableDictionary" key="localizations">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<reference key="dict.values" ref="0"/>
-			</object>
-			<nil key="sourceID"/>
-			<int key="maxID">197</int>
-		</object>
-		<object class="IBClassDescriber" key="IBDocument.Classes">
-			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">AppDelegate_iPad</string>
-					<string key="superclassName">NSObject</string>
-					<object class="NSMutableDictionary" key="outlets">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>splitViewController</string>
-							<string>window</string>
-						</object>
-						<object class="NSArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>SkUISplitViewController</string>
-							<string>UIWindow</string>
-						</object>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>splitViewController</string>
-							<string>window</string>
-						</object>
-						<object class="NSArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBToOneOutletInfo">
-								<string key="name">splitViewController</string>
-								<string key="candidateClassName">SkUISplitViewController</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">window</string>
-								<string key="candidateClassName">UIWindow</string>
-							</object>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">./Classes/AppDelegate_iPad.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">SkSampleUIView</string>
-					<string key="superclassName">SkUIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">./Classes/SkSampleUIView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">SkUIDetailViewController</string>
-					<string key="superclassName">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">./Classes/SkUIDetailViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">SkUIRootViewController</string>
-					<string key="superclassName">UITableViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">./Classes/SkUIRootViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">SkUISplitViewController</string>
-					<string key="superclassName">UISplitViewController</string>
-					<object class="NSMutableDictionary" key="outlets">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>fDetail</string>
-							<string>fRoot</string>
-						</object>
-						<object class="NSArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>SkUIDetailViewController</string>
-							<string>SkUIRootViewController</string>
-						</object>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>fDetail</string>
-							<string>fRoot</string>
-						</object>
-						<object class="NSArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBToOneOutletInfo">
-								<string key="name">fDetail</string>
-								<string key="candidateClassName">SkUIDetailViewController</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">fRoot</string>
-								<string key="candidateClassName">SkUIRootViewController</string>
-							</object>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">./Classes/SkUISplitViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">SkUIView</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">./Classes/SkUIView.h</string>
-					</object>
-				</object>
-			</object>
-		</object>
-		<int key="IBDocument.localizationMode">0</int>
-		<string key="IBDocument.TargetRuntimeIdentifier">IBIPadFramework</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
-			<real value="1296" key="NS.object.0"/>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
-			<integer value="3100" key="NS.object.0"/>
-		</object>
-		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
-		<int key="IBDocument.defaultPropertyAccessControl">3</int>
-		<string key="IBCocoaTouchPluginVersion">1498</string>
-	</data>
-</archive>
diff --git a/src/third_party/skia/experimental/iOSSampleApp/iPad/SkUISplitViewController.h b/src/third_party/skia/experimental/iOSSampleApp/iPad/SkUISplitViewController.h
deleted file mode 100644
index c333bed..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/iPad/SkUISplitViewController.h
+++ /dev/null
@@ -1,20 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#import <UIKit/UIKit.h>
-#import "SkUIRootViewController.h"
-#import "SkUIDetailViewController.h"
-
-@interface SkUISplitViewController : UISplitViewController <UITableViewDelegate, UISplitViewControllerDelegate> {
-@private
-    SkUIRootViewController* fRoot;
-    SkUIDetailViewController* fDetail;
-}
-@property (nonatomic, retain) IBOutlet SkUIRootViewController* fRoot;
-@property (nonatomic, retain) IBOutlet SkUIDetailViewController* fDetail;
-
-@end
diff --git a/src/third_party/skia/experimental/iOSSampleApp/iPad/SkUISplitViewController.mm b/src/third_party/skia/experimental/iOSSampleApp/iPad/SkUISplitViewController.mm
deleted file mode 100644
index ceb7356..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/iPad/SkUISplitViewController.mm
+++ /dev/null
@@ -1,50 +0,0 @@
-#import "SkUISplitViewController.h"
-
-@implementation SkUISplitViewController
-@synthesize fRoot, fDetail;
-
-- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
-    return YES; //Auto Rotation for all orientations
-}
-
-- (void)viewDidLoad {
-    [super viewDidLoad];
-    self.delegate = self;
-    [fDetail populateRoot:fRoot];
-}
-
-- (void)dealloc {
-    [fRoot release];
-    [fDetail release];
-    [super dealloc];
-}
-
-//Table View Delegate Methods
-- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    [fDetail goToItem:indexPath.row];
-    if (fRoot.popoverController != nil) {
-        [fRoot.popoverController dismissPopoverAnimated:YES];
-    }
-}
-
-//Split View Controller Delegate
-- (void)splitViewController:(UISplitViewController*)svc
-     willHideViewController:(UIViewController *)aViewController
-          withBarButtonItem:(UIBarButtonItem*)barButtonItem
-       forPopoverController:(UIPopoverController*)pc {
-
-    barButtonItem.title = @"Samples";
-    fRoot.popoverController = pc;
-    fRoot.popoverButtonItem = barButtonItem;
-    [fDetail showRootPopoverButtonItem:fRoot.popoverButtonItem];
-}
-
-- (void)splitViewController:(UISplitViewController*)svc
-     willShowViewController:(UIViewController *)aViewController
-  invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {
-    [fDetail invalidateRootPopoverButtonItem:fRoot.popoverButtonItem];
-    fRoot.popoverController = nil;
-    fRoot.popoverButtonItem = nil;
-}
-
-@end
diff --git a/src/third_party/skia/experimental/iOSSampleApp/iPhone/AppDelegate_iPhone.h b/src/third_party/skia/experimental/iOSSampleApp/iPhone/AppDelegate_iPhone.h
deleted file mode 100644
index e19b0bc..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/iPhone/AppDelegate_iPhone.h
+++ /dev/null
@@ -1,19 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#import <UIKit/UIKit.h>
-#import "SkUINavigationController.h"
-
-@interface AppDelegate_iPhone : NSObject <UIApplicationDelegate> {
-@private
-    UIWindow *window;
-    SkUINavigationController* fRoot;
-}
-@property (nonatomic, retain) IBOutlet UIWindow *window;
-@property (nonatomic, retain) IBOutlet SkUINavigationController* fRoot;
-
-@end
diff --git a/src/third_party/skia/experimental/iOSSampleApp/iPhone/AppDelegate_iPhone.mm b/src/third_party/skia/experimental/iOSSampleApp/iPhone/AppDelegate_iPhone.mm
deleted file mode 100644
index 1773cca..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/iPhone/AppDelegate_iPhone.mm
+++ /dev/null
@@ -1,21 +0,0 @@
-#import "AppDelegate_iPhone.h"
-
-@implementation AppDelegate_iPhone
-@synthesize window, fRoot;
-
-- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
-    [window addSubview:fRoot.view];
-    [window makeKeyAndVisible];
-
-    self.window.rootViewController = fRoot;
-
-    return YES;
-}
-
-- (void)dealloc {
-    [window release];
-    [fRoot release];
-    [super dealloc];
-}
-
-@end
diff --git a/src/third_party/skia/experimental/iOSSampleApp/iPhone/MainWindow_iPhone.xib b/src/third_party/skia/experimental/iOSSampleApp/iPhone/MainWindow_iPhone.xib
deleted file mode 100644
index a270390..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/iPhone/MainWindow_iPhone.xib
+++ /dev/null
@@ -1,831 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
-	<data>
-		<int key="IBDocument.SystemTarget">1056</int>
-		<string key="IBDocument.SystemVersion">10K540</string>
-		<string key="IBDocument.InterfaceBuilderVersion">851</string>
-		<string key="IBDocument.AppKitVersion">1038.36</string>
-		<string key="IBDocument.HIToolboxVersion">461.00</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-			<string key="NS.object.0">141</string>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<integer value="94"/>
-			<integer value="10"/>
-		</object>
-		<object class="NSArray" key="IBDocument.PluginDependencies">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.Metadata">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="NSArray" key="dict.sortedKeys" id="0">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-			<object class="NSMutableArray" key="dict.values">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-			</object>
-		</object>
-		<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
-			<bool key="EncodedWithXMLCoder">YES</bool>
-			<object class="IBProxyObject" id="841351856">
-				<string key="IBProxiedObjectIdentifier">IBFilesOwner</string>
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-			</object>
-			<object class="IBProxyObject" id="450319686">
-				<string key="IBProxiedObjectIdentifier">IBFirstResponder</string>
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-			</object>
-			<object class="IBUICustomObject" id="987256611">
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-			</object>
-			<object class="IBUIWindow" id="380026005">
-				<nil key="NSNextResponder"/>
-				<int key="NSvFlags">1316</int>
-				<object class="NSPSMatrix" key="NSFrameMatrix"/>
-				<string key="NSFrameSize">{320, 480}</string>
-				<object class="NSColor" key="IBUIBackgroundColor">
-					<int key="NSColorSpace">1</int>
-					<bytes key="NSRGB">MSAxIDEAA</bytes>
-				</object>
-				<bool key="IBUIOpaque">NO</bool>
-				<bool key="IBUIClearsContextBeforeDrawing">NO</bool>
-				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-				<bool key="IBUIResizesToFullScreen">YES</bool>
-			</object>
-			<object class="IBUINavigationController" id="490735104">
-				<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics">
-					<int key="IBUIStatusBarStyle">2</int>
-				</object>
-				<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
-					<int key="interfaceOrientation">1</int>
-				</object>
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-				<bool key="IBUIHorizontal">NO</bool>
-				<object class="IBUINavigationBar" key="IBUINavigationBar" id="1017823495">
-					<nil key="NSNextResponder"/>
-					<int key="NSvFlags">256</int>
-					<string key="NSFrameSize">{0, 0}</string>
-					<bool key="IBUIOpaque">NO</bool>
-					<bool key="IBUIClipsSubviews">YES</bool>
-					<bool key="IBUIMultipleTouchEnabled">YES</bool>
-					<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-					<int key="IBUIBarStyle">1</int>
-				</object>
-				<object class="NSMutableArray" key="IBUIViewControllers">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBUIViewController" id="386778494">
-						<object class="IBUIView" key="IBUIView" id="456730278">
-							<reference key="NSNextResponder"/>
-							<int key="NSvFlags">274</int>
-							<string key="NSFrameSize">{320, 416}</string>
-							<reference key="NSSuperview"/>
-							<object class="NSColor" key="IBUIBackgroundColor" id="535258798">
-								<int key="NSColorSpace">3</int>
-								<bytes key="NSWhite">MQA</bytes>
-							</object>
-							<bool key="IBUIMultipleTouchEnabled">YES</bool>
-							<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-						</object>
-						<reference key="IBUIToolbarItems" ref="0"/>
-						<object class="IBUINavigationItem" key="IBUINavigationItem" id="694217933">
-							<reference key="IBUINavigationBar"/>
-							<string key="IBUITitle">Item</string>
-							<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-						</object>
-						<reference key="IBUIParentViewController" ref="490735104"/>
-						<object class="IBUISimulatedNavigationBarMetrics" key="IBUISimulatedTopBarMetrics" id="18577453">
-							<int key="IBUIBarStyle">1</int>
-							<bool key="IBUIPrompted">NO</bool>
-						</object>
-						<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
-							<int key="interfaceOrientation">1</int>
-						</object>
-						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-						<bool key="IBUIHorizontal">NO</bool>
-					</object>
-				</object>
-			</object>
-			<object class="IBUINavigationController" id="922975573">
-				<reference key="IBUISimulatedTopBarMetrics" ref="18577453"/>
-				<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
-					<int key="interfaceOrientation">1</int>
-				</object>
-				<bool key="IBUIWantsFullScreenLayout">YES</bool>
-				<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-				<bool key="IBUIHorizontal">NO</bool>
-				<object class="IBUINavigationBar" key="IBUINavigationBar" id="499920774">
-					<nil key="NSNextResponder"/>
-					<int key="NSvFlags">256</int>
-					<string key="NSFrame">{{0, -44}, {0, 44}}</string>
-					<bool key="IBUIOpaque">NO</bool>
-					<bool key="IBUIClipsSubviews">YES</bool>
-					<bool key="IBUIMultipleTouchEnabled">YES</bool>
-					<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-					<int key="IBUIBarStyle">1</int>
-				</object>
-				<object class="NSMutableArray" key="IBUIViewControllers">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBUITableViewController" id="711816508">
-						<object class="IBUITableView" key="IBUIView" id="301135056">
-							<reference key="NSNextResponder"/>
-							<int key="NSvFlags">274</int>
-							<string key="NSFrameSize">{320, 436}</string>
-							<reference key="NSSuperview"/>
-							<reference key="IBUIBackgroundColor" ref="535258798"/>
-							<bool key="IBUIClipsSubviews">YES</bool>
-							<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-							<bool key="IBUIAlwaysBounceVertical">YES</bool>
-							<int key="IBUISeparatorStyle">1</int>
-							<int key="IBUISectionIndexMinimumDisplayRowCount">0</int>
-							<bool key="IBUIShowsSelectionImmediatelyOnTouchBegin">YES</bool>
-							<float key="IBUIRowHeight">44</float>
-							<float key="IBUISectionHeaderHeight">22</float>
-							<float key="IBUISectionFooterHeight">22</float>
-						</object>
-						<object class="IBUINavigationItem" key="IBUINavigationItem" id="948852329">
-							<reference key="IBUINavigationBar"/>
-							<string key="IBUITitle">Samples</string>
-							<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-						</object>
-						<reference key="IBUIParentViewController" ref="922975573"/>
-						<object class="IBUISimulatedNavigationBarMetrics" key="IBUISimulatedTopBarMetrics">
-							<bool key="IBUIPrompted">NO</bool>
-						</object>
-						<object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
-						<object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
-							<int key="interfaceOrientation">1</int>
-						</object>
-						<string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
-						<bool key="IBUIHorizontal">NO</bool>
-					</object>
-				</object>
-			</object>
-		</object>
-		<object class="IBObjectContainer" key="IBDocument.Objects">
-			<object class="NSMutableArray" key="connectionRecords">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">delegate</string>
-						<reference key="source" ref="841351856"/>
-						<reference key="destination" ref="987256611"/>
-					</object>
-					<int key="connectionID">5</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">window</string>
-						<reference key="source" ref="987256611"/>
-						<reference key="destination" ref="380026005"/>
-					</object>
-					<int key="connectionID">6</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">fDetail</string>
-						<reference key="source" ref="922975573"/>
-						<reference key="destination" ref="386778494"/>
-					</object>
-					<int key="connectionID">39</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">fRoot</string>
-						<reference key="source" ref="987256611"/>
-						<reference key="destination" ref="922975573"/>
-					</object>
-					<int key="connectionID">48</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">fRoot</string>
-						<reference key="source" ref="922975573"/>
-						<reference key="destination" ref="711816508"/>
-					</object>
-					<int key="connectionID">53</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">dataSource</string>
-						<reference key="source" ref="301135056"/>
-						<reference key="destination" ref="711816508"/>
-					</object>
-					<int key="connectionID">56</int>
-				</object>
-				<object class="IBConnectionRecord">
-					<object class="IBCocoaTouchOutletConnection" key="connection">
-						<string key="label">delegate</string>
-						<reference key="source" ref="301135056"/>
-						<reference key="destination" ref="922975573"/>
-					</object>
-					<int key="connectionID">78</int>
-				</object>
-			</object>
-			<object class="IBMutableOrderedSet" key="objectRecords">
-				<object class="NSArray" key="orderedObjects">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<object class="IBObjectRecord">
-						<int key="objectID">0</int>
-						<reference key="object" ref="0"/>
-						<reference key="children" ref="1000"/>
-						<nil key="parent"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">2</int>
-						<reference key="object" ref="380026005"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-						</object>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-1</int>
-						<reference key="object" ref="841351856"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">File's Owner</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">4</int>
-						<reference key="object" ref="987256611"/>
-						<reference key="parent" ref="0"/>
-						<string key="objectName">App Delegate</string>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">-2</int>
-						<reference key="object" ref="450319686"/>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">10</int>
-						<reference key="object" ref="922975573"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="499920774"/>
-							<reference ref="711816508"/>
-						</object>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">12</int>
-						<reference key="object" ref="499920774"/>
-						<reference key="parent" ref="922975573"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">28</int>
-						<reference key="object" ref="711816508"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="301135056"/>
-							<reference ref="948852329"/>
-						</object>
-						<reference key="parent" ref="922975573"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">54</int>
-						<reference key="object" ref="301135056"/>
-						<reference key="parent" ref="711816508"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">83</int>
-						<reference key="object" ref="948852329"/>
-						<reference key="parent" ref="711816508"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">94</int>
-						<reference key="object" ref="490735104"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="1017823495"/>
-							<reference ref="386778494"/>
-						</object>
-						<reference key="parent" ref="0"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">96</int>
-						<reference key="object" ref="1017823495"/>
-						<reference key="parent" ref="490735104"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">11</int>
-						<reference key="object" ref="386778494"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<reference ref="456730278"/>
-							<reference ref="694217933"/>
-						</object>
-						<reference key="parent" ref="490735104"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">35</int>
-						<reference key="object" ref="456730278"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-						</object>
-						<reference key="parent" ref="386778494"/>
-					</object>
-					<object class="IBObjectRecord">
-						<int key="objectID">98</int>
-						<reference key="object" ref="694217933"/>
-						<object class="NSMutableArray" key="children">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-						</object>
-						<reference key="parent" ref="386778494"/>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="flattenedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="NSArray" key="dict.sortedKeys">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>-1.CustomClassName</string>
-					<string>-2.CustomClassName</string>
-					<string>10.CustomClassName</string>
-					<string>10.IBEditorWindowLastContentRect</string>
-					<string>10.IBPluginDependency</string>
-					<string>11.CustomClassName</string>
-					<string>11.IBEditorWindowLastContentRect</string>
-					<string>11.IBPluginDependency</string>
-					<string>12.IBPluginDependency</string>
-					<string>2.IBAttributePlaceholdersKey</string>
-					<string>2.IBEditorWindowLastContentRect</string>
-					<string>2.IBPluginDependency</string>
-					<string>2.UIWindow.visibleAtLaunch</string>
-					<string>28.CustomClassName</string>
-					<string>28.IBEditorWindowLastContentRect</string>
-					<string>28.IBPluginDependency</string>
-					<string>35.CustomClassName</string>
-					<string>35.IBPluginDependency</string>
-					<string>4.CustomClassName</string>
-					<string>4.IBPluginDependency</string>
-					<string>54.IBPluginDependency</string>
-					<string>54.IBViewBoundsToFrameTransform</string>
-					<string>83.IBPluginDependency</string>
-					<string>94.IBEditorWindowLastContentRect</string>
-					<string>94.IBPluginDependency</string>
-					<string>96.IBPluginDependency</string>
-				</object>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-					<string>UIApplication</string>
-					<string>UIResponder</string>
-					<string>SkUINavigationController</string>
-					<string>{{351, 526}, {320, 480}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>SkUIDetailViewController</string>
-					<string>{{445, 495}, {320, 480}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSMutableDictionary">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<reference key="dict.sortedKeys" ref="0"/>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-						</object>
-					</object>
-					<string>{{520, 376}, {320, 480}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<integer value="1"/>
-					<string>SkUIRootViewController</string>
-					<string>{{360, 1385}, {320, 480}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>SkSampleUIView</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>AppDelegate_iPhone</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<object class="NSAffineTransform">
-						<bytes key="NSTransformStruct">P4AAAL+AAAAAAAAAw9kAAA</bytes>
-					</object>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>{{1356, 526}, {320, 480}}</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-					<string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
-				</object>
-			</object>
-			<object class="NSMutableDictionary" key="unlocalizedProperties">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="activeLocalization"/>
-			<object class="NSMutableDictionary" key="localizations">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<reference key="dict.sortedKeys" ref="0"/>
-				<object class="NSMutableArray" key="dict.values">
-					<bool key="EncodedWithXMLCoder">YES</bool>
-				</object>
-			</object>
-			<nil key="sourceID"/>
-			<int key="maxID">99</int>
-		</object>
-		<object class="IBClassDescriber" key="IBDocument.Classes">
-			<object class="NSMutableArray" key="referencedPartialClassDescriptions">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">AppDelegate_iPhone</string>
-					<string key="superclassName">NSObject</string>
-					<object class="NSMutableDictionary" key="outlets">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>fRoot</string>
-							<string>window</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>SkUINavigationController</string>
-							<string>UIWindow</string>
-						</object>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>fRoot</string>
-							<string>window</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBToOneOutletInfo">
-								<string key="name">fRoot</string>
-								<string key="candidateClassName">SkUINavigationController</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">window</string>
-								<string key="candidateClassName">UIWindow</string>
-							</object>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">iPhone/AppDelegate_iPhone.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">SkSampleUIView</string>
-					<string key="superclassName">SkUIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">SkSampleUIView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">SkUIDetailViewController</string>
-					<string key="superclassName">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Shared/SkUIDetailViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">SkUINavigationController</string>
-					<string key="superclassName">UINavigationController</string>
-					<object class="NSMutableDictionary" key="outlets">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>fDetail</string>
-							<string>fRoot</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>SkUIDetailViewController</string>
-							<string>SkUIRootViewController</string>
-						</object>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<bool key="EncodedWithXMLCoder">YES</bool>
-						<object class="NSArray" key="dict.sortedKeys">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<string>fDetail</string>
-							<string>fRoot</string>
-						</object>
-						<object class="NSMutableArray" key="dict.values">
-							<bool key="EncodedWithXMLCoder">YES</bool>
-							<object class="IBToOneOutletInfo">
-								<string key="name">fDetail</string>
-								<string key="candidateClassName">SkUIDetailViewController</string>
-							</object>
-							<object class="IBToOneOutletInfo">
-								<string key="name">fRoot</string>
-								<string key="candidateClassName">SkUIRootViewController</string>
-							</object>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">iPhone/SkUINavigationController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">SkUIRootViewController</string>
-					<string key="superclassName">UITableViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Shared/SkUIRootViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">SkUIView</string>
-					<string key="superclassName">UIView</string>
-					<object class="NSMutableDictionary" key="outlets">
-						<string key="NS.key.0">fOptionsDelegate</string>
-						<string key="NS.object.0">id</string>
-					</object>
-					<object class="NSMutableDictionary" key="toOneOutletInfosByName">
-						<string key="NS.key.0">fOptionsDelegate</string>
-						<object class="IBToOneOutletInfo" key="NS.object.0">
-							<string key="name">fOptionsDelegate</string>
-							<string key="candidateClassName">id</string>
-						</object>
-					</object>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBProjectSource</string>
-						<string key="minorKey">Shared/SkUIView.h</string>
-					</object>
-				</object>
-			</object>
-			<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
-				<bool key="EncodedWithXMLCoder">YES</bool>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">QuartzCore.framework/Headers/CAAnimation.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">QuartzCore.framework/Headers/CALayer.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIAccessibility.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINibLoading.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="565734826">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIResponder.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIApplication</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIApplication.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIBarButtonItem</string>
-					<string key="superclassName">UIBarItem</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIBarButtonItem.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIBarItem</string>
-					<string key="superclassName">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIBarItem.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UINavigationBar</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="443745583">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINavigationBar.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UINavigationController</string>
-					<string key="superclassName">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier" id="868507592">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UINavigationController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UINavigationItem</string>
-					<string key="superclassName">NSObject</string>
-					<reference key="sourceIdentifier" ref="443745583"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIResponder</string>
-					<string key="superclassName">NSObject</string>
-					<reference key="sourceIdentifier" ref="565734826"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIScrollView</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIScrollView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISearchBar</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISearchBar.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UISearchDisplayController</string>
-					<string key="superclassName">NSObject</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISearchDisplayController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UITableView</string>
-					<string key="superclassName">UIScrollView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITableView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UITableViewController</string>
-					<string key="superclassName">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITableViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPrintFormatter.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITextField.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIView</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIView.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<reference key="sourceIdentifier" ref="868507592"/>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIPopoverController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UISplitViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UITabBarController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIViewController</string>
-					<string key="superclassName">UIResponder</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIViewController.h</string>
-					</object>
-				</object>
-				<object class="IBPartialClassDescription">
-					<string key="className">UIWindow</string>
-					<string key="superclassName">UIView</string>
-					<object class="IBClassDescriptionSource" key="sourceIdentifier">
-						<string key="majorKey">IBFrameworkSource</string>
-						<string key="minorKey">UIKit.framework/Headers/UIWindow.h</string>
-					</object>
-				</object>
-			</object>
-		</object>
-		<int key="IBDocument.localizationMode">0</int>
-		<string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
-			<integer value="1056" key="NS.object.0"/>
-		</object>
-		<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
-			<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
-			<integer value="3100" key="NS.object.0"/>
-		</object>
-		<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
-		<string key="IBDocument.LastKnownRelativeProjectPath">../iOSSampleApp.xcodeproj</string>
-		<int key="IBDocument.defaultPropertyAccessControl">3</int>
-		<string key="IBCocoaTouchPluginVersion">141</string>
-	</data>
-</archive>
diff --git a/src/third_party/skia/experimental/iOSSampleApp/iPhone/SkUINavigationController.h b/src/third_party/skia/experimental/iOSSampleApp/iPhone/SkUINavigationController.h
deleted file mode 100644
index 1078a33..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/iPhone/SkUINavigationController.h
+++ /dev/null
@@ -1,20 +0,0 @@
-
-/*
- * Copyright 2011 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-#import <UIKit/UIKit.h>
-#import "SkUIRootViewController.h"
-#import "SkUIDetailViewController.h"
-
-@interface SkUINavigationController : UINavigationController <UITableViewDelegate, UINavigationBarDelegate> {
-@private
-    SkUIRootViewController* fRoot;
-    SkUIDetailViewController* fDetail;
-}
-@property (nonatomic, retain) IBOutlet SkUIRootViewController* fRoot;
-@property (nonatomic, retain) IBOutlet SkUIDetailViewController* fDetail;
-
-@end
diff --git a/src/third_party/skia/experimental/iOSSampleApp/iPhone/SkUINavigationController.mm b/src/third_party/skia/experimental/iOSSampleApp/iPhone/SkUINavigationController.mm
deleted file mode 100644
index b430560..0000000
--- a/src/third_party/skia/experimental/iOSSampleApp/iPhone/SkUINavigationController.mm
+++ /dev/null
@@ -1,28 +0,0 @@
-#import "SkUINavigationController.h"
-
-@implementation SkUINavigationController
-@synthesize fRoot, fDetail;
-
-- (void)viewDidLoad {
-    [super viewDidLoad];
-    [fDetail populateRoot:fRoot];
-    [self pushViewController:fDetail animated:NO];
-}
-
-- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
-    return YES; //Allow auto rotation for all orientations
-}
-
-- (void)dealloc {
-    [fRoot release];
-    [fDetail release];
-    [super dealloc];
-}
-
-//Table View Delegate Methods
-- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    [fDetail goToItem:indexPath.row];
-    [self pushViewController:fDetail animated:YES];
-}
-
-@end
\ No newline at end of file
diff --git a/src/third_party/skia/experimental/iOSShell/iOSShell-Info.plist b/src/third_party/skia/experimental/iOSShell/iOSShell-Info.plist
deleted file mode 100644
index 69b62ef..0000000
--- a/src/third_party/skia/experimental/iOSShell/iOSShell-Info.plist
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleDisplayName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundleExecutable</key>
-	<string>${EXECUTABLE_NAME}</string>
-	<key>CFBundleIconFile</key>
-	<string></string>
-	<key>CFBundleIdentifier</key>
-	<string>com.google.iOSShell</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundleName</key>
-	<string>${PRODUCT_NAME}</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1.0</string>
-	<key>LSRequiresIPhoneOS</key>
-	<true/>
-	<key>NSMainNibFile</key>
-	<string>MainWindow_iPhone</string>
-	<key>NSMainNibFile~ipad</key>
-	<string>MainWindow_iPad</string>
-	<key>UISupportedInterfaceOrientations</key>
-	<array>
-		<string>UIInterfaceOrientationPortrait</string>
-	</array>
-	<key>UISupportedInterfaceOrientations~ipad</key>
-	<array>
-		<string>UIInterfaceOrientationPortrait</string>
-		<string>UIInterfaceOrientationPortraitUpsideDown</string>
-		<string>UIInterfaceOrientationLandscapeLeft</string>
-		<string>UIInterfaceOrientationLandscapeRight</string>
-	</array>
-</dict>
-</plist>
diff --git a/src/third_party/skia/experimental/minimal_ios_mtl_skia_app/BUILD.gn b/src/third_party/skia/experimental/minimal_ios_mtl_skia_app/BUILD.gn
new file mode 100644
index 0000000..f014d05
--- /dev/null
+++ b/src/third_party/skia/experimental/minimal_ios_mtl_skia_app/BUILD.gn
@@ -0,0 +1,28 @@
+# Copyright 2019 Google LLC.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("../../gn/ios.gni")
+
+if (is_ios && skia_use_metal) {
+  ios_app_bundle("minimal_ios_mtl_skia_app") {
+    sources = [
+      "../skottie_ios/SkMetalViewBridge.h",
+      "../skottie_ios/SkMetalViewBridge.mm",
+      "main.mm",
+    ]
+    deps = [
+      "../..:skia",
+    ]
+    cflags_objcc = [
+      "-std=c++14",
+      "-w",
+    ]
+    libs = [
+      "Metal.framework",
+      "MetalKit.framework",
+      "UIKit.framework",
+    ]
+    launchscreen = "../../platform_tools/ios/app/LaunchScreen.storyboard"
+  }
+}
diff --git a/src/third_party/skia/experimental/minimal_ios_mtl_skia_app/README.md b/src/third_party/skia/experimental/minimal_ios_mtl_skia_app/README.md
new file mode 100644
index 0000000..eb00b0f
--- /dev/null
+++ b/src/third_party/skia/experimental/minimal_ios_mtl_skia_app/README.md
@@ -0,0 +1,20 @@
+##`minimal_ios_mtl_skia_app`
+
+How to compile:
+
+    cd $SKIA_ROOT_DIRECTORY
+
+    mkdir -p out/ios_arm64_mtl
+    cat > out/ios_arm64_mtl/args.gn <<EOM
+    target_os="ios"
+    target_cpu="arm64"
+    skia_use_metal=true
+    skia_use_expat=false
+    skia_enable_pdf=false
+    EOM
+
+    tools/git-sync-deps
+    bin/gn gen out/ios_arm64_mtl
+    ninja -C out/ios_arm64_mtl minimal_ios_mtl_skia_app
+
+Then install the `out/ios_arm64_mtl/minimal_ios_mtl_skia_app.app` bundle.
diff --git a/src/third_party/skia/experimental/minimal_ios_mtl_skia_app/main.mm b/src/third_party/skia/experimental/minimal_ios_mtl_skia_app/main.mm
new file mode 100644
index 0000000..3d4b18c
--- /dev/null
+++ b/src/third_party/skia/experimental/minimal_ios_mtl_skia_app/main.mm
@@ -0,0 +1,148 @@
+// Copyright 2019 Google LLC.
+// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
+
+// This is an example of a minimal iOS application that uses Skia to draw to
+// a Metal drawable.
+
+// Much of this code is copied from the default application created by XCode.
+
+#include "experimental/skottie_ios/SkMetalViewBridge.h"
+
+#include "include/core/SkCanvas.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkSurface.h"
+#include "include/core/SkTime.h"
+#include "include/effects/SkGradientShader.h"
+#include "include/gpu/GrBackendSurface.h"
+#include "include/gpu/GrContext.h"
+#include "include/gpu/GrContextOptions.h"
+#include "include/gpu/mtl/GrMtlTypes.h"
+
+#import <Metal/Metal.h>
+#import <MetalKit/MetalKit.h>
+#import <UIKit/UIKit.h>
+
+////////////////////////////////////////////////////////////////////////////////
+
+static void config_paint(SkPaint* paint) {
+    if (!paint->getShader()) {
+        const SkColor4f colors[2] = {SkColors::kBlack, SkColors::kWhite};
+        const SkPoint points[2] = {{0, -1024}, {0, 1024}};
+        paint->setShader(SkGradientShader::MakeLinear(points, colors, nullptr, nullptr, 2,
+                                                      SkTileMode::kClamp, 0, nullptr));
+    }
+}
+
+static void draw_example(SkSurface* surface, const SkPaint& paint, double rotation) {
+    SkCanvas* canvas = surface->getCanvas();
+    canvas->translate(surface->width() * 0.5f, surface->height() * 0.5f);
+    canvas->rotate(rotation);
+    canvas->drawPaint(paint);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+@interface AppViewDelegate : NSObject <MTKViewDelegate>
+@property (assign, nonatomic) GrContext* grContext;  // non-owning pointer.
+@property (assign, nonatomic) id<MTLCommandQueue> metalQueue;
+@end
+
+@implementation AppViewDelegate {
+    SkPaint fPaint;
+}
+
+- (void)drawInMTKView:(nonnull MTKView *)view {
+    if (![self grContext] || !view) {
+        return;
+    }
+    // Do as much as possible before creating surface.
+    config_paint(&fPaint);
+    float rotation = (float)(180 * 1e-9 * SkTime::GetNSecs());
+
+    // Create surface:
+    sk_sp<SkSurface> surface = SkMtkViewToSurface(view, [self grContext]);
+    if (!surface) {
+        NSLog(@"error: no sksurface");
+        return;
+    }
+
+    draw_example(surface.get(), fPaint, rotation);
+
+    // Must flush *and* present for this to work!
+    surface->flush();
+    surface = nullptr;
+
+    id<MTLCommandBuffer> commandBuffer = [[self metalQueue] commandBuffer];
+    [commandBuffer presentDrawable:[view currentDrawable]];
+    [commandBuffer commit];
+}
+
+- (void)mtkView:(nonnull MTKView *)view drawableSizeWillChange:(CGSize)size {
+    // change anything on size change?
+}
+@end
+
+////////////////////////////////////////////////////////////////////////////////
+
+@interface AppViewController : UIViewController
+@property (strong, nonatomic) id<MTLDevice> metalDevice;
+@property (strong, nonatomic) id<MTLCommandQueue> metalQueue;
+@end
+
+@implementation AppViewController {
+    sk_sp<GrContext> fGrContext;
+}
+
+- (void)loadView {
+    [self setView:[[MTKView alloc] initWithFrame:[[UIScreen mainScreen] bounds] device:nil]];
+}
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if (!fGrContext) {
+        [self setMetalDevice:MTLCreateSystemDefaultDevice()];
+        [self setMetalQueue:[[self metalDevice] newCommandQueue]];
+        GrContextOptions grContextOptions;  // set different options here.
+        fGrContext = SkMetalDeviceToGrContext([self metalDevice], [self metalQueue], grContextOptions);
+    }
+    if (![self view] || ![self metalDevice]) {
+        NSLog(@"Metal is not supported on this device");
+        self.view = [[UIView alloc] initWithFrame:self.view.frame];
+        return;
+    }
+    MTKView* mtkView = (MTKView*)[self view];
+    [mtkView setDevice:[self metalDevice]];
+    [mtkView setBackgroundColor:[UIColor blackColor]];
+    SkMtkViewConfigForSkia(mtkView);
+    AppViewDelegate* viewDelegate = [[AppViewDelegate alloc] init];
+    [viewDelegate setGrContext:fGrContext.get()];
+    [viewDelegate setMetalQueue:[self metalQueue]];
+    [viewDelegate mtkView:mtkView drawableSizeWillChange:[mtkView bounds].size];
+    [mtkView setDelegate:viewDelegate];
+}
+@end
+
+////////////////////////////////////////////////////////////////////////////////
+
+@interface AppDelegate : UIResponder <UIApplicationDelegate>
+@property (strong, nonatomic) UIWindow *window;
+@end
+
+@implementation AppDelegate
+- (BOOL)application:(UIApplication *)app didFinishLaunchingWithOptions:(NSDictionary*)opts {
+    // Override point for customization after application launch.
+    [self setWindow:[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]];
+    [[self window] setFrame:[[UIScreen mainScreen] bounds]];
+    [[self window] setRootViewController:[[AppViewController alloc] init]];
+    [[self window] makeKeyAndVisible];
+    return YES;
+}
+@end
+
+////////////////////////////////////////////////////////////////////////////////
+
+int main(int argc, char* argv[]) {
+    @autoreleasepool {
+        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+    }
+}
diff --git a/src/third_party/skia/experimental/pvg/draw_msg.proto b/src/third_party/skia/experimental/pvg/draw_msg.proto
new file mode 100644
index 0000000..56861c5
--- /dev/null
+++ b/src/third_party/skia/experimental/pvg/draw_msg.proto
@@ -0,0 +1,270 @@
+/*
+ * Copyright 2018 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+syntax = "proto3";
+
+package pvg;
+
+enum ClipVerb {
+    INTERSECT = 0;
+    DIFFERENCE = 1;
+}
+
+message Point {
+    float x = 1;
+    float y = 2;
+}
+
+message Rect {
+    float left = 1;
+    float top = 2;
+    float right = 3;
+    float bottom = 4;
+}
+
+message Color {
+    float r = 1;
+    float g = 2;
+    float b = 3;
+    float a = 4;    // default to 1.0
+}
+
+message Matrix33 {
+    // m11, m22, m33 default to 1.0
+
+    float m11 = 1; float m12 = 2; float m13 = 3;
+    float m21 = 4; float m22 = 5; float m23 = 6;
+    float m31 = 7; float m32 = 8; float m33 = 9;
+}
+
+message ClipArgs {
+    ClipVerb    verb  = 1;
+    bool        is_aliased = 2;
+}
+
+////////////////////////////////////////////////
+
+enum BlendMode {
+    SRC_OVER    = 0;
+    CLEAR       = 1;
+    SRC         = 2;
+    // ...
+}
+
+enum PaintStyle {
+    FILL     = 0;
+    STROKE   = 1;
+    HAIRLINE = 2;
+}
+
+enum FilterQuality {
+    NONE   = 0;
+    LOW    = 1;
+    MEDIUM = 2;
+    HIGH   = 3;
+}
+
+message Paint {
+    PaintStyle      style           = 1;
+    FilterQuality   filter_quality  = 2;
+    BlendMode       blend_mode      = 3;
+    bool            is_aliased      = 4;
+
+    Color  color                    = 5;
+
+    int32  shader                   = 6;
+    int32  color_filter             = 7;
+    int32  mask_filter              = 8;
+    int32  path_filter              = 9;
+    int32  image_filter             = 10;
+}
+
+////////////////////////////////////////////////
+
+enum Hinting {
+    NONE_Hinting    = 0;
+    SLIGHT_Hinting  = 1;
+    NORMAL_Hinting  = 2;
+    FULL_Hinting    = 3;
+}
+
+message Font {
+    int32   typeface = 1;
+    float   size     = 2;
+    float   scale_x  = 3;   // default = 1.0
+    float   skew_x   = 4;
+
+    Hinting Hinting  = 5;
+
+    bool    force_autohinting   = 6;
+    bool    embedded_bitmaps    = 7;
+    bool    subpixel            = 8;
+    bool    linear_metrics      = 9;
+    bool    embolden            = 10;
+}
+
+////////////////////////////////////////////////
+
+enum PathVerb {
+    MOVE  = 0;
+    LINE  = 1;
+    QUAD  = 2;
+    CUBIC = 3;
+    CONIC = 4;
+}
+
+message PathData {
+    repeated PathVerb verbs         = 1;
+    repeated float    points        = 2;    // count must be even, and correspond to verbs
+    repeated float    conic_weights = 3;    // count must be == # conic verbs
+}
+
+message DefinePath {
+    uint32   id   = 1;
+    PathData data = 2;
+}
+
+////////////////////////////////////////////////
+
+message DefineImage {
+    uint32  id           = 1;
+    bytes   encoded_data = 2;
+}
+
+////////////////////////////////////////////////
+
+enum TileMode {
+    CLAMP_TileMode  = 0;
+    REPEAT_TileMode = 1;
+    MIRROR_TileMode = 2;
+    DECAL_TileMode  = 3;
+}
+
+message GradientCommon {
+    repeated Color colors       = 1;
+    repeated float positions    = 2;    // empty or count == colors.count
+    Matrix33       local_matrix = 3;
+    TileMode       tile_mode    = 4;
+}
+
+message LinearGradient {
+    Point          p0     = 1;
+    Point          p1     = 2;
+    GradientCommon common = 3;
+}
+
+message RadialGradient {
+    Point          center = 1;
+    float          radius = 2;
+    GradientCommon common = 3;
+}
+
+message ImageShader {
+    uint32   image_id       = 1;
+    TileMode tile_mode_x    = 2;
+    TileMode tile_mode_y    = 3;
+    Matrix33 local_matrix   = 4;
+}
+
+message DefineShader {
+    uint32  id      = 1;
+    oneof type {
+        Color           color           = 2;
+        LinearGradient  linear_gradient = 3;
+        RadialGradient  radial_gradient = 4;
+        ImageShader     image           = 5;
+    }
+}
+
+////////////////////////////////////////////////
+
+message Save {}
+
+message SaveLayer {
+    Rect    bounds = 1;
+    Paint   paint  = 2;
+    // ...
+}
+
+message Restore {}
+
+message Concat {
+    Matrix33 matrix = 1;
+}
+
+message ClipRect {
+    Rect     rect = 1;
+    ClipArgs args = 2;
+}
+
+message ClipPath {
+    oneof path {
+        uint32   id   = 1;
+        PathData data = 2;
+    }
+    ClipArgs args = 3;
+}
+
+message DrawPaint {
+    Paint   paint = 1;
+}
+
+message DrawRect {
+    Rect    rect    = 1;
+    Paint   paint   = 2;
+}
+
+message DrawOval {
+    Rect    oval    = 1;
+    Paint   paint   = 2;
+}
+
+message DrawPath {
+    oneof path {
+        uint32   id   = 1;
+        PathData data = 2;
+    }
+    Paint paint = 3;
+}
+
+message DrawImage {
+    uint32  id    = 1;
+    Paint   paint = 2;
+}
+
+message DrawText {
+    repeated uint32 glyphs  = 1;    // uint16? bytes?
+    repeated float  pos_x   = 2;    // must match counts with glyphs
+    repeated float  pos_y   = 3;    // must match counts with glyphs OR have 1 entry
+
+    Font            font    = 4;
+    Paint           paint   = 5;
+}
+
+message CanvasMsg {
+    oneof msg {
+        Save      save       = 1;
+        SaveLayer save_layer = 2;
+        Restore   restore    = 3;
+
+        Concat    concat     = 4;
+
+        ClipRect  clip_rect  = 5;
+        ClipPath  clip_path  = 6;
+
+        DrawPaint draw_paint = 7;
+        DrawRect  draw_rect  = 8;
+        DrawOval  draw_oval  = 9;
+        DrawPath  draw_path  = 10;
+        DrawImage draw_image = 11;
+        DrawText  draw_text  = 12;
+
+        DefineImage  def_image    = 13;
+        DefinePath   def_path     = 14;
+        DefineShader def_shader   = 15;
+    }
+}
diff --git a/src/third_party/skia/experimental/skottie_ios/BUILD.gn b/src/third_party/skia/experimental/skottie_ios/BUILD.gn
new file mode 100644
index 0000000..af1efa6
--- /dev/null
+++ b/src/third_party/skia/experimental/skottie_ios/BUILD.gn
@@ -0,0 +1,45 @@
+# Copyright 2019 Google LLC.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import("../../gn/ios.gni")
+
+if (is_ios && skia_use_metal) {
+  ios_app_bundle("skottie_ios") {
+    sources = [
+      "SkMetalViewBridge.h",
+      "SkMetalViewBridge.mm",
+      "SkottieMtkView.h",
+      "SkottieMtkView.mm",
+      "main.mm",
+    ]
+    data_sources = [
+      "../../resources/skottie/skottie-3d-rotation-order.json",
+      "../../resources/skottie/skottie-camera-parent-3.json",
+      "../../resources/skottie/skottie-gradient-ramp.json",
+      "../../resources/skottie/skottie-linear-wipe-effect.json",
+      "../../resources/skottie/skottie-text-animator-1.json",
+      "../../resources/skottie/skottie-text-animator-2.json",
+      "../../resources/skottie/skottie-text-animator-3.json",
+      "../../resources/skottie/skottie-text-animator-4.json",
+      "../../resources/skottie/skottie-text-animator-5.json",
+      "../../resources/skottie/skottie-text-animator-8.json",
+      "../../resources/skottie/skottie-transform-effect.json",
+      "../../resources/skottie/skottie_sample_2.json",
+    ]
+    deps = [
+      "../..:skia",
+      "../../modules/skottie",
+    ]
+    cflags_objcc = [
+      "-std=c++14",
+      "-w",
+    ]
+    libs = [
+      "Metal.framework",
+      "MetalKit.framework",
+      "UIKit.framework",
+    ]
+    launchscreen = "../../platform_tools/ios/app/LaunchScreen.storyboard"
+  }
+}
diff --git a/src/third_party/skia/experimental/skottie_ios/README.md b/src/third_party/skia/experimental/skottie_ios/README.md
new file mode 100644
index 0000000..97282ed
--- /dev/null
+++ b/src/third_party/skia/experimental/skottie_ios/README.md
@@ -0,0 +1,21 @@
+##`skottie_ios`
+
+How to compile:
+
+    cd $SKIA_ROOT_DIRECTORY
+
+    mkdir -p out/ios_arm64_mtl
+    cat > out/ios_arm64_mtl/args.gn <<EOM
+    target_os="ios"
+    target_cpu="arm64"
+    skia_use_metal=true
+    skia_use_expat=false
+    skia_enable_pdf=false
+    EOM
+
+    tools/git-sync-deps
+    bin/gn gen out/ios_arm64_mtl
+    ninja -C out/ios_arm64_mtl skottie_ios
+
+Then install the `out/ios_arm64_mtl/skottie_ios.app` bundle.
+
diff --git a/src/third_party/skia/experimental/skottie_ios/SkMetalViewBridge.h b/src/third_party/skia/experimental/skottie_ios/SkMetalViewBridge.h
new file mode 100644
index 0000000..f5fa57f
--- /dev/null
+++ b/src/third_party/skia/experimental/skottie_ios/SkMetalViewBridge.h
@@ -0,0 +1,19 @@
+// Copyright 2019 Google LLC.
+// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
+#ifndef SkMetalViewBridge_DEFINED
+#define SkMetalViewBridge_DEFINED
+
+#import <MetalKit/MetalKit.h>
+
+class SkSurface;
+class GrContext;
+class GrContextOptions;
+template <typename T> class sk_sp;
+
+sk_sp<SkSurface> SkMtkViewToSurface(MTKView*, GrContext*);
+
+sk_sp<GrContext> SkMetalDeviceToGrContext(id<MTLDevice>, id<MTLCommandQueue>, const GrContextOptions&);
+
+void SkMtkViewConfigForSkia(MTKView*);
+
+#endif  // SkMetalViewBridge_DEFINED
diff --git a/src/third_party/skia/experimental/skottie_ios/SkMetalViewBridge.mm b/src/third_party/skia/experimental/skottie_ios/SkMetalViewBridge.mm
new file mode 100644
index 0000000..a48a197
--- /dev/null
+++ b/src/third_party/skia/experimental/skottie_ios/SkMetalViewBridge.mm
@@ -0,0 +1,52 @@
+// Copyright 2019 Google LLC.
+// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
+
+#include "experimental/skottie_ios/SkMetalViewBridge.h"
+
+#include "include/core/SkSurface.h"
+#include "include/gpu/GrBackendSurface.h"
+#include "include/gpu/GrContext.h"
+#include "include/gpu/GrContextOptions.h"
+#include "include/gpu/mtl/GrMtlTypes.h"
+
+#import <Metal/Metal.h>
+#import <MetalKit/MetalKit.h>
+
+sk_sp<SkSurface> SkMtkViewToSurface(MTKView* mtkView, GrContext* grContext) {
+    if (![[mtkView currentDrawable] texture] ||
+        !grContext ||
+        MTLPixelFormatDepth32Float_Stencil8 != [mtkView depthStencilPixelFormat] ||
+        MTLPixelFormatBGRA8Unorm != [mtkView colorPixelFormat]) {
+        return nullptr;
+    }
+    const SkColorType colorType = kBGRA_8888_SkColorType;  // MTLPixelFormatBGRA8Unorm
+    sk_sp<SkColorSpace> colorSpace = nullptr;  // MTLPixelFormatBGRA8Unorm
+    const GrSurfaceOrigin origin = kTopLeft_GrSurfaceOrigin;
+    const SkSurfaceProps surfaceProps(SkSurfaceProps::kLegacyFontHost_InitType);
+    int sampleCount = (int)[mtkView sampleCount];
+    CGSize size = [mtkView drawableSize];
+    int width  = (int)size.width;
+    int height = (int)size.height;
+
+    GrMtlTextureInfo fbInfo;
+    fbInfo.fTexture.retain((__bridge const void*)([[mtkView currentDrawable] texture]));
+    if (sampleCount == 1) {
+        GrBackendRenderTarget backendRT(width, height, 1, fbInfo);
+        return SkSurface::MakeFromBackendRenderTarget(grContext, backendRT, origin,
+                                                      colorType, colorSpace, &surfaceProps);
+    } else {
+        GrBackendTexture backendTexture(width, height, GrMipMapped::kNo, fbInfo);
+        return SkSurface::MakeFromBackendTexture(grContext, backendTexture, origin, sampleCount,
+                                                 colorType, colorSpace, &surfaceProps);
+    }
+}
+
+sk_sp<GrContext> SkMetalDeviceToGrContext(id<MTLDevice> device, id<MTLCommandQueue> queue, const GrContextOptions& opts) {
+    return GrContext::MakeMetal((void*)device, (void*)queue, opts);
+}
+
+void SkMtkViewConfigForSkia(MTKView* mtkView) {
+    [mtkView setDepthStencilPixelFormat:MTLPixelFormatDepth32Float_Stencil8];
+    [mtkView setColorPixelFormat:MTLPixelFormatBGRA8Unorm];
+    [mtkView setSampleCount:1];
+}
diff --git a/src/third_party/skia/experimental/skottie_ios/SkottieMtkView.h b/src/third_party/skia/experimental/skottie_ios/SkottieMtkView.h
new file mode 100644
index 0000000..c9e59c3
--- /dev/null
+++ b/src/third_party/skia/experimental/skottie_ios/SkottieMtkView.h
@@ -0,0 +1,49 @@
+// Copyright 2019 Google LLC.
+// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
+#ifndef SkottieMtkView_DEFINED
+#define SkottieMtkView_DEFINED
+
+#import <MetalKit/MetalKit.h>
+#import <UIKit/UIKit.h>
+
+class GrContext;
+
+@interface SkottieMtkView : MTKView
+
+// Must be set to a Metal-backed GrContext in order to draw.
+// e.g.: use SkMetalDeviceToGrContext().
+@property (assign) GrContext* grContext;  // non-owning pointer.
+
+// Must be set to a valid MTLCommandQueue. Will be used to present.
+@property (assign) id<MTLCommandQueue> queue;  // non-owning pointer.
+
+// When set, pauses at end of loop.
+@property (assign) BOOL stopAtEnd;
+
+// Override of the MTKView interface.  Uses Skia+Skottie+Metal to draw.
+- (void)drawRect:(CGRect)rect;
+
+// Load an animation from a Lottie JSON file.  Returns Yes on success.
+- (BOOL)loadAnimation:(NSData*)d;
+
+// Jump to the specified location in the animation.
+- (void)seek:(float)seconds;
+
+// Toggle paused mode.  Return paused state.
+- (BOOL)togglePaused;
+
+// Return the current paused state.
+- (BOOL)isPaused;
+
+// Return the default size of the Lottie animation.
+- (CGSize)size;
+
+// Return the length of the animation loop.
+- (float)animationDurationSeconds;
+
+// Return the current position in the animation in seconds (between zero and
+// animationDurationSeconds).
+- (float)currentTime;
+@end
+
+#endif  // SkottieMtkView_DEFINED
diff --git a/src/third_party/skia/experimental/skottie_ios/SkottieMtkView.mm b/src/third_party/skia/experimental/skottie_ios/SkottieMtkView.mm
new file mode 100644
index 0000000..a0b6196
--- /dev/null
+++ b/src/third_party/skia/experimental/skottie_ios/SkottieMtkView.mm
@@ -0,0 +1,129 @@
+ //Copyright 2019 Google LLC.
+ //Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
+
+#include "experimental/skottie_ios/SkottieMtkView.h"
+
+#include "include/core/SkCanvas.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkSurface.h"
+#include "include/core/SkTime.h"
+
+#include "modules/skottie/include/Skottie.h"
+
+#include "experimental/skottie_ios/SkMetalViewBridge.h"
+
+@implementation SkottieMtkView {
+    sk_sp<skottie::Animation> fAnimation; // owner
+    CGSize fSize;
+    double fStartTime; // used when running
+    float fAnimationMoment; // when paused.
+    SkMatrix fMatrix;
+    SkSize fAnimationSize;
+    bool fPaused;
+}
+
+-(void)dealloc {
+    fAnimation = nullptr;
+    [super dealloc];
+}
+
+- (void)drawRect:(CGRect)rect {
+    [super drawRect:rect];
+    // TODO(halcanary): Use the rect and the InvalidationController to speed up rendering.
+    if (!fAnimation || ![[self currentDrawable] texture] || ![self grContext]) {
+        return;
+    }
+    CGSize size = [self drawableSize];
+    if (size.width != fSize.width || size.height != fSize.height) {
+        // Cache the current matrix; change only if size changes.
+        if (fAnimationSize.width() > 0 && fAnimationSize.height() > 0) {
+            float scale = std::min(size.width / fAnimationSize.width(),
+                                   size.height / fAnimationSize.height());
+            fMatrix.setScaleTranslate(
+                    scale, scale,
+                    ((float)size.width  - fAnimationSize.width()  * scale) * 0.5f,
+                    ((float)size.height - fAnimationSize.height() * scale) * 0.5f);
+        } else {
+            fMatrix = SkMatrix();
+        }
+        fSize = size;
+    }
+    SkPaint whitePaint(SkColors::kWhite);
+    if (!fPaused) {
+        fAnimation->seekFrameTime([self currentTime], nullptr);
+    }
+    sk_sp<SkSurface> surface = SkMtkViewToSurface(self, [self grContext]);
+    if (!surface) {
+        NSLog(@"error: no sksurface");
+        return;
+    }
+    SkCanvas* canvas = surface->getCanvas();
+    canvas->concat(fMatrix);
+    canvas->drawRect(SkRect{0, 0, fAnimationSize.width(), fAnimationSize.height()}, whitePaint);
+    fAnimation->render(canvas);
+    surface->flush();
+    surface = nullptr;
+
+    id<MTLCommandBuffer> commandBuffer = [[self queue] commandBuffer];
+    [commandBuffer presentDrawable:[self currentDrawable]];
+    [commandBuffer commit];
+}
+
+- (BOOL)loadAnimation:(NSData*) data {
+    skottie::Animation::Builder builder;
+    fAnimation = builder.make((const char*)[data bytes], (size_t)[data length]);
+    fStartTime = SkTime::GetNSecs();
+    fAnimationMoment = 0;
+    fSize = {0, 0};
+    fAnimationSize = fAnimation ? fAnimation->size() : SkSize{0, 0};
+    return fAnimation != nullptr;
+}
+
+- (float)animationDurationSeconds {
+    return fAnimation ? fAnimation->duration() : 0;
+}
+
+- (float)currentTime {
+    if (!fAnimation) {
+        return 0;
+    }
+    if (fPaused) {
+        return fAnimationMoment;
+    }
+    double time = 1e-9 * (SkTime::GetNSecs() - fStartTime);
+    double duration = fAnimation->duration();
+    if ([self stopAtEnd] && time >= duration) {
+        fPaused = true;
+        fAnimationMoment = duration;
+        return fAnimationMoment;
+    }
+    return std::fmod(time, duration);
+}
+
+- (void)seek:(float)seconds {
+    if (fAnimation) {
+        if (fPaused) {
+            fAnimationMoment = std::fmod(seconds, fAnimation->duration());
+            fAnimation->seekFrameTime(fAnimationMoment);
+        } else {
+            fStartTime = SkTime::GetNSecs() - 1e9 * seconds;
+        }
+    }
+}
+
+- (CGSize)size { return {(CGFloat)fAnimationSize.width(), (CGFloat)fAnimationSize.height()}; }
+
+- (BOOL)togglePaused {
+    if (fPaused) {
+        double offset = fAnimationMoment >= fAnimation->duration() ? 0 : -1e9 * fAnimationMoment;
+        fStartTime = SkTime::GetNSecs() + offset;
+        fPaused = false;
+    } else {
+        fAnimationMoment = [self currentTime];
+        fPaused = true;
+    }
+    return fPaused;
+}
+
+- (BOOL)isPaused { return fPaused; }
+@end
diff --git a/src/third_party/skia/experimental/skottie_ios/main.mm b/src/third_party/skia/experimental/skottie_ios/main.mm
new file mode 100644
index 0000000..ce8934b
--- /dev/null
+++ b/src/third_party/skia/experimental/skottie_ios/main.mm
@@ -0,0 +1,146 @@
+// Copyright 2019 Google LLC.
+// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
+
+#include "experimental/skottie_ios/SkMetalViewBridge.h"
+#include "experimental/skottie_ios/SkottieMtkView.h"
+
+#include "include/gpu/GrContext.h"
+#include "include/gpu/GrContextOptions.h"
+
+#import <Metal/Metal.h>
+#import <MetalKit/MetalKit.h>
+#import <UIKit/UIKit.h>
+
+static UIStackView* make_skottie_stack(CGFloat width,
+                                       id<MTLDevice> metalDevice,
+                                       id<MTLCommandQueue> metalQueue,
+                                       GrContext* grContext) {
+    UIStackView* stack = [[UIStackView alloc] init];
+    [stack setAxis:UILayoutConstraintAxisVertical];
+    [stack setDistribution:UIStackViewDistributionEqualSpacing];
+
+    NSBundle* mainBundle = [NSBundle mainBundle];
+    NSArray<NSString*>* paths = [mainBundle pathsForResourcesOfType:@"json"
+                                            inDirectory:@"data"];
+    constexpr CGFloat kSpacing = 2;
+    CGFloat totalHeight = kSpacing;
+    for (NSUInteger i = 0; i < [paths count]; ++i) {
+        NSString* path = [paths objectAtIndex:i];
+        NSData* content = [NSData dataWithContentsOfFile:path];
+        if (!content) {
+            NSLog(@"'%@' not found", path);
+            continue;
+        }
+        SkottieMtkView* skottieView = [[SkottieMtkView alloc] init];
+        if (![skottieView loadAnimation:content]) {
+            continue;
+        }
+        [skottieView setDevice:metalDevice];
+        [skottieView setQueue:metalQueue];
+        [skottieView setGrContext:grContext];
+        SkMtkViewConfigForSkia(skottieView);
+        CGSize animSize = [skottieView size];
+        CGFloat height = animSize.width ? (width * animSize.height / animSize.width) : 0;
+        [skottieView setFrame:{{0, 0}, {width, height}}];
+        [skottieView setPreferredFramesPerSecond:30];
+        [[[skottieView heightAnchor] constraintEqualToConstant:height] setActive:true];
+        [[[skottieView widthAnchor] constraintEqualToConstant:width] setActive:true];
+        [stack addArrangedSubview:skottieView];
+        totalHeight += height + kSpacing;
+    }
+    [stack setFrame:{{0, 0}, {width, totalHeight}}];
+    return stack;
+}
+
+@interface AppViewController : UIViewController
+    @property (strong) id<MTLDevice> metalDevice;
+    @property (strong) id<MTLCommandQueue> metalQueue;
+    @property (strong) UIStackView* stackView;
+@end
+
+@implementation AppViewController {
+    sk_sp<GrContext> fGrContext;
+}
+
+- (void)dealloc {
+    fGrContext = nullptr;
+    [super dealloc];
+}
+
+- (void)loadView {
+    [self setView:[[UIView alloc] init]];
+}
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    if (!fGrContext) {
+        [self setMetalDevice:MTLCreateSystemDefaultDevice()];
+        if(![self metalDevice]) {
+            NSLog(@"Metal is not supported on this device");
+            return;
+        }
+        [self setMetalQueue:[[self metalDevice] newCommandQueue]];
+        GrContextOptions grContextOptions;  // set different options here.
+        fGrContext = SkMetalDeviceToGrContext([self metalDevice], [self metalQueue],
+                                              grContextOptions);
+    }
+
+    [self setStackView:make_skottie_stack([[UIScreen mainScreen] bounds].size.width,
+                                          [self metalDevice], [self metalQueue], fGrContext.get())];
+
+    CGFloat statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
+    CGSize mainScreenSize = [[UIScreen mainScreen] bounds].size;
+    CGRect scrollViewBounds = {{0, statusBarHeight},
+                               {mainScreenSize.width, mainScreenSize.height - statusBarHeight}};
+    UIScrollView* scrollView = [[UIScrollView alloc] initWithFrame:scrollViewBounds];
+    [scrollView setContentSize:[[self stackView] frame].size];
+    [scrollView addSubview:[self stackView]];
+    [scrollView setBackgroundColor:[UIColor blackColor]];
+
+    UIView* mainView = [self view];
+    [mainView setBounds:{{0, 0}, mainScreenSize}];
+    [mainView setBackgroundColor:[UIColor whiteColor]];
+    [mainView addSubview:scrollView];
+
+    UITapGestureRecognizer* tapGestureRecognizer = [[UITapGestureRecognizer alloc] init];
+    [tapGestureRecognizer addTarget:self action:@selector(handleTap:)];
+    [mainView addGestureRecognizer:tapGestureRecognizer];
+}
+
+- (void)handleTap:(UIGestureRecognizer*)sender {
+    if (![sender state] == UIGestureRecognizerStateEnded) {
+        return;
+    }
+    NSArray<UIView*>* subviews = [[self stackView] subviews];
+    for (NSUInteger i = 0; i < [subviews count]; ++i) {
+        UIView* subview = [subviews objectAtIndex:i];
+        if (![subview isKindOfClass:[SkottieMtkView class]]) {
+            continue;
+        }
+        SkottieMtkView* skottieView = (SkottieMtkView*)subview;
+        BOOL paused = [skottieView togglePaused];
+        [skottieView setEnableSetNeedsDisplay:paused];
+        [skottieView setPaused:paused];
+    }
+}
+@end
+
+@interface AppDelegate : UIResponder <UIApplicationDelegate>
+@property (strong, nonatomic) UIWindow* window;
+@end
+
+@implementation AppDelegate
+
+- (BOOL)application:(UIApplication*)app didFinishLaunchingWithOptions:(NSDictionary*)ops {
+    [self setWindow:[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]];
+    [[self window] setRootViewController:[[AppViewController alloc] init]];
+    [[self window] makeKeyAndVisible];
+    return YES;
+}
+@end
+
+int main(int argc, char* argv[]) {
+    @autoreleasepool {
+        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
+    }
+}
diff --git a/src/third_party/skia/experimental/svg/model/SkPEG.h b/src/third_party/skia/experimental/svg/model/SkPEG.h
index 596a570..3088549 100644
--- a/src/third_party/skia/experimental/svg/model/SkPEG.h
+++ b/src/third_party/skia/experimental/svg/model/SkPEG.h
@@ -8,8 +8,8 @@
 #ifndef SkPEG_DEFINED
 #define SkPEG_DEFINED
 
-#include "SkTArray.h"
-#include "SkTLazy.h"
+#include "include/private/SkTArray.h"
+#include "src/core/SkTLazy.h"
 
 namespace skpeg {
 
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGAttribute.cpp b/src/third_party/skia/experimental/svg/model/SkSVGAttribute.cpp
index 4935d6a..2a1670f 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGAttribute.cpp
+++ b/src/third_party/skia/experimental/svg/model/SkSVGAttribute.cpp
@@ -5,7 +5,7 @@
  * found in the LICENSE file.
  */
 
-#include "SkSVGAttribute.h"
+#include "experimental/svg/model/SkSVGAttribute.h"
 
 SkSVGPresentationAttributes SkSVGPresentationAttributes::MakeInitial() {
     SkSVGPresentationAttributes result;
@@ -13,12 +13,18 @@
     result.fFill.set(SkSVGPaint(SkSVGColorType(SK_ColorBLACK)));
     result.fFillOpacity.set(SkSVGNumberType(1));
     result.fFillRule.set(SkSVGFillRule(SkSVGFillRule::Type::kNonZero));
+    result.fClipRule.set(SkSVGFillRule(SkSVGFillRule::Type::kNonZero));
 
     result.fStroke.set(SkSVGPaint(SkSVGPaint::Type::kNone));
+    result.fStrokeDashArray.set(SkSVGDashArray(SkSVGDashArray::Type::kNone));
+    result.fStrokeDashOffset.set(SkSVGLength(0));
     result.fStrokeLineCap.set(SkSVGLineCap(SkSVGLineCap::Type::kButt));
     result.fStrokeLineJoin.set(SkSVGLineJoin(SkSVGLineJoin::Type::kMiter));
+    result.fStrokeMiterLimit.set(SkSVGNumberType(4));
     result.fStrokeOpacity.set(SkSVGNumberType(1));
     result.fStrokeWidth.set(SkSVGLength(1));
 
+    result.fVisibility.set(SkSVGVisibility(SkSVGVisibility::Type::kVisible));
+
     return result;
 }
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGAttribute.h b/src/third_party/skia/experimental/svg/model/SkSVGAttribute.h
index 2900a03..3242f59 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGAttribute.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGAttribute.h
@@ -8,38 +8,46 @@
 #ifndef SkSVGAttribute_DEFINED
 #define SkSVGAttribute_DEFINED
 
-#include "SkSVGTypes.h"
-#include "SkTLazy.h"
+#include "experimental/svg/model/SkSVGTypes.h"
+#include "src/core/SkTLazy.h"
 
 class SkSVGRenderContext;
 
 enum class SkSVGAttribute {
     kClipPath,
-    kCx, // <circle>,<ellipse>: center x position
-    kCy, // <circle>,<ellipse>: center y position
+    kClipRule,
+    kCx, // <circle>, <ellipse>, <radialGradient>: center x position
+    kCy, // <circle>, <ellipse>, <radialGradient>: center y position
     kD,
     kFill,
     kFillOpacity,
     kFillRule,
+    kFx, // <radialGradient>: focal point x position
+    kFy, // <radialGradient>: focal point y position
     kGradientTransform,
     kHeight,
     kHref,
     kOffset,
     kOpacity,
+    kPatternTransform,
     kPoints,
-    kR,  // <circle>: radius
+    kR,  // <circle>, <radialGradient>: radius
     kRx, // <ellipse>,<rect>: horizontal (corner) radius
     kRy, // <ellipse>,<rect>: vertical (corner) radius
     kSpreadMethod,
     kStopColor,
     kStopOpacity,
     kStroke,
+    kStrokeDashArray,
+    kStrokeDashOffset,
     kStrokeOpacity,
     kStrokeLineCap,
     kStrokeLineJoin,
+    kStrokeMiterLimit,
     kStrokeWidth,
     kTransform,
     kViewBox,
+    kVisibility,
     kWidth,
     kX,
     kX1, // <line>: first endpoint x
@@ -59,13 +67,19 @@
     SkTLazy<SkSVGPaint>      fFill;
     SkTLazy<SkSVGNumberType> fFillOpacity;
     SkTLazy<SkSVGFillRule>   fFillRule;
+    SkTLazy<SkSVGFillRule>   fClipRule;
 
     SkTLazy<SkSVGPaint>      fStroke;
+    SkTLazy<SkSVGDashArray>  fStrokeDashArray;
+    SkTLazy<SkSVGLength>     fStrokeDashOffset;
     SkTLazy<SkSVGLineCap>    fStrokeLineCap;
     SkTLazy<SkSVGLineJoin>   fStrokeLineJoin;
+    SkTLazy<SkSVGNumberType> fStrokeMiterLimit;
     SkTLazy<SkSVGNumberType> fStrokeOpacity;
     SkTLazy<SkSVGLength>     fStrokeWidth;
 
+    SkTLazy<SkSVGVisibility> fVisibility;
+
     // uninherited
     SkTLazy<SkSVGNumberType> fOpacity;
     SkTLazy<SkSVGClip>       fClipPath;
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGAttributeParser.cpp b/src/third_party/skia/experimental/svg/model/SkSVGAttributeParser.cpp
index f8eef8c..e541df4 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGAttributeParser.cpp
+++ b/src/third_party/skia/experimental/svg/model/SkSVGAttributeParser.cpp
@@ -5,9 +5,9 @@
  * found in the LICENSE file.
  */
 
-#include "SkParse.h"
-#include "SkSVGAttributeParser.h"
-#include "SkSVGTypes.h"
+#include "experimental/svg/model/SkSVGAttributeParser.h"
+#include "experimental/svg/model/SkSVGTypes.h"
+#include "include/utils/SkParse.h"
 
 namespace {
 
@@ -315,7 +315,7 @@
 
 bool SkSVGAttributeParser::parseTranslateToken(SkMatrix* matrix) {
     return this->parseParenthesized("translate", [this](SkMatrix* m) -> bool {
-        SkScalar tx, ty;
+        SkScalar tx = 0.0, ty = 0.0;
         this->parseWSToken();
         if (!this->parseScalarToken(&tx)) {
             return false;
@@ -332,7 +332,7 @@
 
 bool SkSVGAttributeParser::parseScaleToken(SkMatrix* matrix) {
     return this->parseParenthesized("scale", [this](SkMatrix* m) -> bool {
-        SkScalar sx, sy;
+        SkScalar sx = 0.0, sy = 0.0;
         if (!this->parseScalarToken(&sx)) {
             return false;
         }
@@ -559,7 +559,7 @@
             break;
         }
 
-        pts.push(SkPoint::Make(x, y));
+        pts.push_back(SkPoint::Make(x, y));
         parsedValue = true;
     }
 
@@ -593,3 +593,57 @@
 
     return parsedValue && this->parseEOSToken();
 }
+
+// https://www.w3.org/TR/SVG/painting.html#VisibilityProperty
+bool SkSVGAttributeParser::parseVisibility(SkSVGVisibility* visibility) {
+    static const struct {
+        SkSVGVisibility::Type fType;
+        const char*           fName;
+    } gVisibilityInfo[] = {
+        { SkSVGVisibility::Type::kVisible , "visible"  },
+        { SkSVGVisibility::Type::kHidden  , "hidden"   },
+        { SkSVGVisibility::Type::kCollapse, "collapse" },
+        { SkSVGVisibility::Type::kInherit , "inherit"  },
+    };
+
+    bool parsedValue = false;
+    for (const auto& parseInfo : gVisibilityInfo) {
+        if (this->parseExpectedStringToken(parseInfo.fName)) {
+            *visibility = SkSVGVisibility(parseInfo.fType);
+            parsedValue = true;
+            break;
+        }
+    }
+
+    return parsedValue && this->parseEOSToken();
+}
+
+// https://www.w3.org/TR/SVG/painting.html#StrokeDasharrayProperty
+bool SkSVGAttributeParser::parseDashArray(SkSVGDashArray* dashArray) {
+    bool parsedValue = false;
+    if (this->parseExpectedStringToken("none")) {
+        *dashArray = SkSVGDashArray(SkSVGDashArray::Type::kNone);
+        parsedValue = true;
+    } else if (this->parseExpectedStringToken("inherit")) {
+        *dashArray = SkSVGDashArray(SkSVGDashArray::Type::kInherit);
+        parsedValue = true;
+    } else {
+        SkTDArray<SkSVGLength> dashes;
+        for (;;) {
+            SkSVGLength dash;
+            // parseLength() also consumes trailing separators.
+            if (!this->parseLength(&dash)) {
+                break;
+            }
+
+            dashes.push_back(dash);
+            parsedValue = true;
+        }
+
+        if (parsedValue) {
+            *dashArray = SkSVGDashArray(std::move(dashes));
+        }
+    }
+
+    return parsedValue && this->parseEOSToken();
+}
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGAttributeParser.h b/src/third_party/skia/experimental/svg/model/SkSVGAttributeParser.h
index 67c13f6..49bd582 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGAttributeParser.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGAttributeParser.h
@@ -8,7 +8,8 @@
 #ifndef SkSVGAttributeParser_DEFINED
 #define SkSVGAttributeParser_DEFINED
 
-#include "SkSVGTypes.h"
+#include "experimental/svg/model/SkSVGTypes.h"
+#include "include/private/SkNoncopyable.h"
 
 class SkSVGAttributeParser : public SkNoncopyable {
 public:
@@ -27,6 +28,8 @@
     bool parsePoints(SkSVGPointsType*);
     bool parseIRI(SkSVGStringType*);
     bool parseSpreadMethod(SkSVGSpreadMethod*);
+    bool parseVisibility(SkSVGVisibility*);
+    bool parseDashArray(SkSVGDashArray*);
 
 private:
     // Stack-only
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGCircle.cpp b/src/third_party/skia/experimental/svg/model/SkSVGCircle.cpp
index 4934879..66e7d28 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGCircle.cpp
+++ b/src/third_party/skia/experimental/svg/model/SkSVGCircle.cpp
@@ -5,10 +5,10 @@
  * found in the LICENSE file.
  */
 
-#include "SkCanvas.h"
-#include "SkSVGCircle.h"
-#include "SkSVGRenderContext.h"
-#include "SkSVGValue.h"
+#include "experimental/svg/model/SkSVGCircle.h"
+#include "experimental/svg/model/SkSVGRenderContext.h"
+#include "experimental/svg/model/SkSVGValue.h"
+#include "include/core/SkCanvas.h"
 
 SkSVGCircle::SkSVGCircle() : INHERITED(SkSVGTag::kCircle) {}
 
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGCircle.h b/src/third_party/skia/experimental/svg/model/SkSVGCircle.h
index 19db926..c53cf4a 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGCircle.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGCircle.h
@@ -8,8 +8,8 @@
 #ifndef SkSVGCircle_DEFINED
 #define SkSVGCircle_DEFINED
 
-#include "SkSVGShape.h"
-#include "SkSVGTypes.h"
+#include "experimental/svg/model/SkSVGShape.h"
+#include "experimental/svg/model/SkSVGTypes.h"
 
 struct SkPoint;
 
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGClipPath.cpp b/src/third_party/skia/experimental/svg/model/SkSVGClipPath.cpp
index 60f1b6a..face942 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGClipPath.cpp
+++ b/src/third_party/skia/experimental/svg/model/SkSVGClipPath.cpp
@@ -5,6 +5,6 @@
  * found in the LICENSE file.
  */
 
-#include "SkSVGClipPath.h"
+#include "experimental/svg/model/SkSVGClipPath.h"
 
 SkSVGClipPath::SkSVGClipPath() : INHERITED(SkSVGTag::kClipPath) {}
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGClipPath.h b/src/third_party/skia/experimental/svg/model/SkSVGClipPath.h
index ec43953..269d1d0 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGClipPath.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGClipPath.h
@@ -8,8 +8,8 @@
 #ifndef SkSVGClipPath_DEFINED
 #define SkSVGClipPath_DEFINED
 
-#include "SkSVGHiddenContainer.h"
-#include "SkSVGTypes.h"
+#include "experimental/svg/model/SkSVGHiddenContainer.h"
+#include "experimental/svg/model/SkSVGTypes.h"
 
 class SkSVGClipPath final : public SkSVGHiddenContainer {
 public:
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGContainer.cpp b/src/third_party/skia/experimental/svg/model/SkSVGContainer.cpp
index 9f526c2..aca4e8d 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGContainer.cpp
+++ b/src/third_party/skia/experimental/svg/model/SkSVGContainer.cpp
@@ -5,10 +5,10 @@
  * found in the LICENSE file.
  */
 
-#include "SkSVGContainer.h"
+#include "experimental/svg/model/SkSVGContainer.h"
 
-#include "SkPath.h"
-#include "SkPathOps.h"
+#include "include/core/SkPath.h"
+#include "include/pathops/SkPathOps.h"
 
 SkSVGContainer::SkSVGContainer(SkSVGTag t) : INHERITED(t) { }
 
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGContainer.h b/src/third_party/skia/experimental/svg/model/SkSVGContainer.h
index 3a6841f..698d8c0 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGContainer.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGContainer.h
@@ -8,8 +8,8 @@
 #ifndef SkSVGContainer_DEFINED
 #define SkSVGContainer_DEFINED
 
-#include "SkSVGTransformableNode.h"
-#include "SkTArray.h"
+#include "experimental/svg/model/SkSVGTransformableNode.h"
+#include "include/private/SkTArray.h"
 
 class SkSVGContainer : public SkSVGTransformableNode {
 public:
@@ -33,4 +33,4 @@
     typedef SkSVGTransformableNode INHERITED;
 };
 
-#endif // SkSVGSVG_DEFINED
+#endif // SkSVGContainer_DEFINED
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGDOM.cpp b/src/third_party/skia/experimental/svg/model/SkSVGDOM.cpp
index cea1ae6..79d5899 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGDOM.cpp
+++ b/src/third_party/skia/experimental/svg/model/SkSVGDOM.cpp
@@ -5,29 +5,33 @@
  * found in the LICENSE file.
  */
 
-#include "SkCanvas.h"
-#include "SkDOM.h"
-#include "SkParsePath.h"
-#include "SkString.h"
-#include "SkSVGAttributeParser.h"
-#include "SkSVGCircle.h"
-#include "SkSVGClipPath.h"
-#include "SkSVGDefs.h"
-#include "SkSVGDOM.h"
-#include "SkSVGEllipse.h"
-#include "SkSVGG.h"
-#include "SkSVGLine.h"
-#include "SkSVGLinearGradient.h"
-#include "SkSVGNode.h"
-#include "SkSVGPath.h"
-#include "SkSVGPoly.h"
-#include "SkSVGRect.h"
-#include "SkSVGRenderContext.h"
-#include "SkSVGStop.h"
-#include "SkSVGSVG.h"
-#include "SkSVGTypes.h"
-#include "SkSVGValue.h"
-#include "SkTSearch.h"
+#include "experimental/svg/model/SkSVGAttributeParser.h"
+#include "experimental/svg/model/SkSVGCircle.h"
+#include "experimental/svg/model/SkSVGClipPath.h"
+#include "experimental/svg/model/SkSVGDOM.h"
+#include "experimental/svg/model/SkSVGDefs.h"
+#include "experimental/svg/model/SkSVGEllipse.h"
+#include "experimental/svg/model/SkSVGG.h"
+#include "experimental/svg/model/SkSVGLine.h"
+#include "experimental/svg/model/SkSVGLinearGradient.h"
+#include "experimental/svg/model/SkSVGNode.h"
+#include "experimental/svg/model/SkSVGPath.h"
+#include "experimental/svg/model/SkSVGPattern.h"
+#include "experimental/svg/model/SkSVGPoly.h"
+#include "experimental/svg/model/SkSVGRadialGradient.h"
+#include "experimental/svg/model/SkSVGRect.h"
+#include "experimental/svg/model/SkSVGRenderContext.h"
+#include "experimental/svg/model/SkSVGSVG.h"
+#include "experimental/svg/model/SkSVGStop.h"
+#include "experimental/svg/model/SkSVGTypes.h"
+#include "experimental/svg/model/SkSVGUse.h"
+#include "experimental/svg/model/SkSVGValue.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkString.h"
+#include "include/private/SkTo.h"
+#include "include/utils/SkParsePath.h"
+#include "src/core/SkTSearch.h"
+#include "src/xml/SkDOM.h"
 
 namespace {
 
@@ -199,6 +203,30 @@
     return true;
 }
 
+bool SetVisibilityAttribute(const sk_sp<SkSVGNode>& node, SkSVGAttribute attr,
+                            const char* stringValue) {
+    SkSVGVisibility visibility;
+    SkSVGAttributeParser parser(stringValue);
+    if (!parser.parseVisibility(&visibility)) {
+        return false;
+    }
+
+    node->setAttribute(attr, SkSVGVisibilityValue(visibility));
+    return true;
+}
+
+bool SetDashArrayAttribute(const sk_sp<SkSVGNode>& node, SkSVGAttribute attr,
+                           const char* stringValue) {
+    SkSVGDashArray dashArray;
+    SkSVGAttributeParser parser(stringValue);
+    if (!parser.parseDashArray(&dashArray)) {
+        return false;
+    }
+
+    node->setAttribute(attr, SkSVGDashArrayValue(dashArray));
+    return true;
+}
+
 SkString TrimmedString(const char* first, const char* last) {
     SkASSERT(first);
     SkASSERT(last);
@@ -278,16 +306,21 @@
 
 SortedDictionaryEntry<AttrParseInfo> gAttributeParseInfo[] = {
     { "clip-path"        , { SkSVGAttribute::kClipPath         , SetClipPathAttribute     }},
+    { "clip-rule"        , { SkSVGAttribute::kClipRule         , SetFillRuleAttribute     }},
     { "cx"               , { SkSVGAttribute::kCx               , SetLengthAttribute       }},
     { "cy"               , { SkSVGAttribute::kCy               , SetLengthAttribute       }},
     { "d"                , { SkSVGAttribute::kD                , SetPathDataAttribute     }},
     { "fill"             , { SkSVGAttribute::kFill             , SetPaintAttribute        }},
     { "fill-opacity"     , { SkSVGAttribute::kFillOpacity      , SetNumberAttribute       }},
     { "fill-rule"        , { SkSVGAttribute::kFillRule         , SetFillRuleAttribute     }},
+    // focal point x & y
+    { "fx"               , { SkSVGAttribute::kFx               , SetLengthAttribute       }},
+    { "fy"               , { SkSVGAttribute::kFy               , SetLengthAttribute       }},
     { "gradientTransform", { SkSVGAttribute::kGradientTransform, SetTransformAttribute    }},
     { "height"           , { SkSVGAttribute::kHeight           , SetLengthAttribute       }},
     { "offset"           , { SkSVGAttribute::kOffset           , SetLengthAttribute       }},
     { "opacity"          , { SkSVGAttribute::kOpacity          , SetNumberAttribute       }},
+    { "patternTransform" , { SkSVGAttribute::kPatternTransform , SetTransformAttribute    }},
     { "points"           , { SkSVGAttribute::kPoints           , SetPointsAttribute       }},
     { "r"                , { SkSVGAttribute::kR                , SetLengthAttribute       }},
     { "rx"               , { SkSVGAttribute::kRx               , SetLengthAttribute       }},
@@ -296,13 +329,17 @@
     { "stop-color"       , { SkSVGAttribute::kStopColor        , SetColorAttribute        }},
     { "stop-opacity"     , { SkSVGAttribute::kStopOpacity      , SetNumberAttribute       }},
     { "stroke"           , { SkSVGAttribute::kStroke           , SetPaintAttribute        }},
+    { "stroke-dasharray" , { SkSVGAttribute::kStrokeDashArray  , SetDashArrayAttribute    }},
+    { "stroke-dashoffset", { SkSVGAttribute::kStrokeDashOffset , SetLengthAttribute       }},
     { "stroke-linecap"   , { SkSVGAttribute::kStrokeLineCap    , SetLineCapAttribute      }},
     { "stroke-linejoin"  , { SkSVGAttribute::kStrokeLineJoin   , SetLineJoinAttribute     }},
+    { "stroke-miterlimit", { SkSVGAttribute::kStrokeMiterLimit , SetNumberAttribute       }},
     { "stroke-opacity"   , { SkSVGAttribute::kStrokeOpacity    , SetNumberAttribute       }},
     { "stroke-width"     , { SkSVGAttribute::kStrokeWidth      , SetLengthAttribute       }},
     { "style"            , { SkSVGAttribute::kUnknown          , SetStyleAttributes       }},
     { "transform"        , { SkSVGAttribute::kTransform        , SetTransformAttribute    }},
     { "viewBox"          , { SkSVGAttribute::kViewBox          , SetViewBoxAttribute      }},
+    { "visibility"       , { SkSVGAttribute::kVisibility       , SetVisibilityAttribute   }},
     { "width"            , { SkSVGAttribute::kWidth            , SetLengthAttribute       }},
     { "x"                , { SkSVGAttribute::kX                , SetLengthAttribute       }},
     { "x1"               , { SkSVGAttribute::kX1               , SetLengthAttribute       }},
@@ -314,6 +351,7 @@
 };
 
 SortedDictionaryEntry<sk_sp<SkSVGNode>(*)()> gTagFactories[] = {
+    { "a"             , []() -> sk_sp<SkSVGNode> { return SkSVGG::Make();              }},
     { "circle"        , []() -> sk_sp<SkSVGNode> { return SkSVGCircle::Make();         }},
     { "clipPath"      , []() -> sk_sp<SkSVGNode> { return SkSVGClipPath::Make();       }},
     { "defs"          , []() -> sk_sp<SkSVGNode> { return SkSVGDefs::Make();           }},
@@ -322,11 +360,14 @@
     { "line"          , []() -> sk_sp<SkSVGNode> { return SkSVGLine::Make();           }},
     { "linearGradient", []() -> sk_sp<SkSVGNode> { return SkSVGLinearGradient::Make(); }},
     { "path"          , []() -> sk_sp<SkSVGNode> { return SkSVGPath::Make();           }},
+    { "pattern"       , []() -> sk_sp<SkSVGNode> { return SkSVGPattern::Make();        }},
     { "polygon"       , []() -> sk_sp<SkSVGNode> { return SkSVGPoly::MakePolygon();    }},
     { "polyline"      , []() -> sk_sp<SkSVGNode> { return SkSVGPoly::MakePolyline();   }},
+    { "radialGradient", []() -> sk_sp<SkSVGNode> { return SkSVGRadialGradient::Make(); }},
     { "rect"          , []() -> sk_sp<SkSVGNode> { return SkSVGRect::Make();           }},
     { "stop"          , []() -> sk_sp<SkSVGNode> { return SkSVGStop::Make();           }},
     { "svg"           , []() -> sk_sp<SkSVGNode> { return SkSVGSVG::Make();            }},
+    { "use"           , []() -> sk_sp<SkSVGNode> { return SkSVGUse::Make();            }},
 };
 
 struct ConstructionContext {
@@ -440,11 +481,9 @@
 
 void SkSVGDOM::render(SkCanvas* canvas) const {
     if (fRoot) {
-        SkSVGRenderContext ctx(canvas,
-                               fIDMapper,
-                               SkSVGLengthContext(fContainerSize),
-                               SkSVGPresentationContext());
-        fRoot->render(ctx);
+        SkSVGLengthContext       lctx(fContainerSize);
+        SkSVGPresentationContext pctx;
+        fRoot->render(SkSVGRenderContext(canvas, fIDMapper, lctx, pctx));
     }
 }
 
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGDOM.h b/src/third_party/skia/experimental/svg/model/SkSVGDOM.h
index 8904c17..3d097cc 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGDOM.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGDOM.h
@@ -8,10 +8,10 @@
 #ifndef SkSVGDOM_DEFINED
 #define SkSVGDOM_DEFINED
 
-#include "SkRefCnt.h"
-#include "SkSize.h"
-#include "SkSVGIDMapper.h"
-#include "SkTemplates.h"
+#include "experimental/svg/model/SkSVGIDMapper.h"
+#include "include/core/SkRefCnt.h"
+#include "include/core/SkSize.h"
+#include "include/private/SkTemplates.h"
 
 class SkCanvas;
 class SkDOM;
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGDefs.h b/src/third_party/skia/experimental/svg/model/SkSVGDefs.h
index 3064fe2..1f4fa07 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGDefs.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGDefs.h
@@ -8,7 +8,7 @@
 #ifndef SkSVGDefs_DEFINED
 #define SkSVGDefs_DEFINED
 
-#include "SkSVGHiddenContainer.h"
+#include "experimental/svg/model/SkSVGHiddenContainer.h"
 
 class SkSVGDefs : public SkSVGHiddenContainer {
 public:
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGEllipse.cpp b/src/third_party/skia/experimental/svg/model/SkSVGEllipse.cpp
index 3f38b22..b7d4fad 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGEllipse.cpp
+++ b/src/third_party/skia/experimental/svg/model/SkSVGEllipse.cpp
@@ -5,10 +5,10 @@
  * found in the LICENSE file.
  */
 
-#include "SkCanvas.h"
-#include "SkSVGEllipse.h"
-#include "SkSVGRenderContext.h"
-#include "SkSVGValue.h"
+#include "experimental/svg/model/SkSVGEllipse.h"
+#include "experimental/svg/model/SkSVGRenderContext.h"
+#include "experimental/svg/model/SkSVGValue.h"
+#include "include/core/SkCanvas.h"
 
 SkSVGEllipse::SkSVGEllipse() : INHERITED(SkSVGTag::kEllipse) {}
 
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGEllipse.h b/src/third_party/skia/experimental/svg/model/SkSVGEllipse.h
index 68cebd7..c6bd2b3 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGEllipse.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGEllipse.h
@@ -8,8 +8,8 @@
 #ifndef SkSVGEllipse_DEFINED
 #define SkSVGEllipse_DEFINED
 
-#include "SkSVGShape.h"
-#include "SkSVGTypes.h"
+#include "experimental/svg/model/SkSVGShape.h"
+#include "experimental/svg/model/SkSVGTypes.h"
 
 struct SkRect;
 
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGG.h b/src/third_party/skia/experimental/svg/model/SkSVGG.h
index b8229c0..ca1c71c 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGG.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGG.h
@@ -8,7 +8,7 @@
 #ifndef SkSVGG_DEFINED
 #define SkSVGG_DEFINED
 
-#include "SkSVGContainer.h"
+#include "experimental/svg/model/SkSVGContainer.h"
 
 class SkSVGG : public SkSVGContainer {
 public:
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGGradient.cpp b/src/third_party/skia/experimental/svg/model/SkSVGGradient.cpp
new file mode 100644
index 0000000..38c2379
--- /dev/null
+++ b/src/third_party/skia/experimental/svg/model/SkSVGGradient.cpp
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "experimental/svg/model/SkSVGGradient.h"
+#include "experimental/svg/model/SkSVGRenderContext.h"
+#include "experimental/svg/model/SkSVGStop.h"
+#include "experimental/svg/model/SkSVGValue.h"
+
+void SkSVGGradient::setHref(const SkSVGStringType& href) {
+    fHref = std::move(href);
+}
+
+void SkSVGGradient::setGradientTransform(const SkSVGTransformType& t) {
+    fGradientTransform = t;
+}
+
+void SkSVGGradient::setSpreadMethod(const SkSVGSpreadMethod& spread) {
+    fSpreadMethod = spread;
+}
+
+void SkSVGGradient::onSetAttribute(SkSVGAttribute attr, const SkSVGValue& v) {
+    switch (attr) {
+    case SkSVGAttribute::kGradientTransform:
+        if (const auto* t = v.as<SkSVGTransformValue>()) {
+            this->setGradientTransform(*t);
+        }
+        break;
+    case SkSVGAttribute::kHref:
+        if (const auto* href = v.as<SkSVGStringValue>()) {
+            this->setHref(*href);
+        }
+        break;
+    case SkSVGAttribute::kSpreadMethod:
+        if (const auto* spread = v.as<SkSVGSpreadMethodValue>()) {
+            this->setSpreadMethod(*spread);
+        }
+        break;
+    default:
+        this->INHERITED::onSetAttribute(attr, v);
+    }
+}
+
+// https://www.w3.org/TR/SVG/pservers.html#LinearGradientElementHrefAttribute
+void SkSVGGradient::collectColorStops(const SkSVGRenderContext& ctx,
+                                      StopPositionArray* pos,
+                                      StopColorArray* colors) const {
+    // Used to resolve percentage offsets.
+    const SkSVGLengthContext ltx(SkSize::Make(1, 1));
+
+    for (const auto& child : fChildren) {
+        if (child->tag() != SkSVGTag::kStop) {
+            continue;
+        }
+
+        const auto& stop = static_cast<const SkSVGStop&>(*child);
+        colors->push_back(SkColorSetA(stop.stopColor(),
+                                      SkScalarRoundToInt(stop.stopOpacity() * 255)));
+        pos->push_back(SkTPin(ltx.resolve(stop.offset(), SkSVGLengthContext::LengthType::kOther),
+                              0.f, 1.f));
+    }
+
+    SkASSERT(colors->count() == pos->count());
+
+    if (pos->empty() && !fHref.value().isEmpty()) {
+        const auto* ref = ctx.findNodeById(fHref);
+        if (ref && (ref->tag() == SkSVGTag::kLinearGradient ||
+                    ref->tag() == SkSVGTag::kRadialGradient)) {
+            static_cast<const SkSVGGradient*>(ref)->collectColorStops(ctx, pos, colors);
+        }
+    }
+}
+
+bool SkSVGGradient::onAsPaint(const SkSVGRenderContext& ctx, SkPaint* paint) const {
+    StopColorArray colors;
+    StopPositionArray pos;
+
+    this->collectColorStops(ctx, &pos, &colors);
+
+    // TODO:
+    //       * stop (lazy?) sorting
+    //       * href loop detection
+    //       * href attribute inheritance (not just color stops)
+    //       * objectBoundingBox units support
+
+    static_assert(static_cast<SkTileMode>(SkSVGSpreadMethod::Type::kPad) ==
+                  SkTileMode::kClamp, "SkSVGSpreadMethod::Type is out of sync");
+    static_assert(static_cast<SkTileMode>(SkSVGSpreadMethod::Type::kRepeat) ==
+                  SkTileMode::kRepeat, "SkSVGSpreadMethod::Type is out of sync");
+    static_assert(static_cast<SkTileMode>(SkSVGSpreadMethod::Type::kReflect) ==
+                  SkTileMode::kMirror, "SkSVGSpreadMethod::Type is out of sync");
+    const auto tileMode = static_cast<SkTileMode>(fSpreadMethod.type());
+
+    paint->setShader(this->onMakeShader(ctx, colors.begin(), pos.begin(), colors.count(), tileMode,
+                                        fGradientTransform.value()));
+    return true;
+}
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGGradient.h b/src/third_party/skia/experimental/svg/model/SkSVGGradient.h
new file mode 100644
index 0000000..1df73d2
--- /dev/null
+++ b/src/third_party/skia/experimental/svg/model/SkSVGGradient.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkSVGGradient_DEFINED
+#define SkSVGGradient_DEFINED
+
+#include "experimental/svg/model/SkSVGHiddenContainer.h"
+#include "experimental/svg/model/SkSVGTypes.h"
+#include "include/core/SkShader.h"
+
+class SkMatrix;
+class SkSVGRenderContext;
+
+class SkSVGGradient : public SkSVGHiddenContainer {
+public:
+    ~SkSVGGradient() override = default;
+
+    void setHref(const SkSVGStringType&);
+    void setGradientTransform(const SkSVGTransformType&);
+    void setSpreadMethod(const SkSVGSpreadMethod&);
+
+protected:
+    explicit SkSVGGradient(SkSVGTag t) : INHERITED(t) {}
+
+    void onSetAttribute(SkSVGAttribute, const SkSVGValue&) override;
+
+    bool onAsPaint(const SkSVGRenderContext&, SkPaint*) const final;
+
+    virtual sk_sp<SkShader> onMakeShader(const SkSVGRenderContext&,
+                                         const SkColor*, const SkScalar*, int count,
+                                         SkTileMode, const SkMatrix& localMatrix) const = 0;
+
+private:
+    using StopPositionArray = SkSTArray<2, SkScalar, true>;
+    using    StopColorArray = SkSTArray<2,  SkColor, true>;
+    void collectColorStops(const SkSVGRenderContext&, StopPositionArray*, StopColorArray*) const;
+
+    SkSVGStringType    fHref;
+    SkSVGTransformType fGradientTransform = SkSVGTransformType(SkMatrix::I());
+    SkSVGSpreadMethod  fSpreadMethod = SkSVGSpreadMethod(SkSVGSpreadMethod::Type::kPad);
+
+    typedef SkSVGHiddenContainer INHERITED;
+};
+
+#endif // SkSVGGradient_DEFINED
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGHiddenContainer.h b/src/third_party/skia/experimental/svg/model/SkSVGHiddenContainer.h
index e224e55..b28cd00 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGHiddenContainer.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGHiddenContainer.h
@@ -8,7 +8,7 @@
 #ifndef SkSVGHiddenContainer_DEFINED
 #define SkSVGHiddenContainer_DEFINED
 
-#include "SkSVGContainer.h"
+#include "experimental/svg/model/SkSVGContainer.h"
 
 class SkSVGHiddenContainer : public SkSVGContainer {
 public:
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGIDMapper.h b/src/third_party/skia/experimental/svg/model/SkSVGIDMapper.h
index d88c1f1..ea0d916 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGIDMapper.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGIDMapper.h
@@ -8,8 +8,8 @@
 #ifndef SkSVGIDMapper_DEFINED
 #define SkSVGIDMapper_DEFINED
 
-#include "SkRefCnt.h"
-#include "SkTHash.h"
+#include "include/core/SkRefCnt.h"
+#include "include/private/SkTHash.h"
 
 class SkString;
 class SkSVGNode;
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGLine.cpp b/src/third_party/skia/experimental/svg/model/SkSVGLine.cpp
index 2719a9b..3d0efa1 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGLine.cpp
+++ b/src/third_party/skia/experimental/svg/model/SkSVGLine.cpp
@@ -5,10 +5,10 @@
  * found in the LICENSE file.
  */
 
-#include "SkCanvas.h"
-#include "SkSVGLine.h"
-#include "SkSVGRenderContext.h"
-#include "SkSVGValue.h"
+#include "experimental/svg/model/SkSVGLine.h"
+#include "experimental/svg/model/SkSVGRenderContext.h"
+#include "experimental/svg/model/SkSVGValue.h"
+#include "include/core/SkCanvas.h"
 
 SkSVGLine::SkSVGLine() : INHERITED(SkSVGTag::kLine) {}
 
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGLine.h b/src/third_party/skia/experimental/svg/model/SkSVGLine.h
index ec6213c..08e0fe6 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGLine.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGLine.h
@@ -8,8 +8,8 @@
 #ifndef SkSVGLine_DEFINED
 #define SkSVGLine_DEFINED
 
-#include "SkSVGShape.h"
-#include "SkSVGTypes.h"
+#include "experimental/svg/model/SkSVGShape.h"
+#include "experimental/svg/model/SkSVGTypes.h"
 
 struct SkPoint;
 
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGLinearGradient.cpp b/src/third_party/skia/experimental/svg/model/SkSVGLinearGradient.cpp
index 4bbed1c..59edc84 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGLinearGradient.cpp
+++ b/src/third_party/skia/experimental/svg/model/SkSVGLinearGradient.cpp
@@ -5,26 +5,13 @@
  * found in the LICENSE file.
  */
 
-#include "SkGradientShader.h"
-#include "SkSVGLinearGradient.h"
-#include "SkSVGRenderContext.h"
-#include "SkSVGStop.h"
-#include "SkSVGValue.h"
+#include "experimental/svg/model/SkSVGLinearGradient.h"
+#include "experimental/svg/model/SkSVGRenderContext.h"
+#include "experimental/svg/model/SkSVGValue.h"
+#include "include/effects/SkGradientShader.h"
 
 SkSVGLinearGradient::SkSVGLinearGradient() : INHERITED(SkSVGTag::kLinearGradient) {}
 
-void SkSVGLinearGradient::setHref(const SkSVGStringType& href) {
-    fHref = std::move(href);
-}
-
-void SkSVGLinearGradient::setGradientTransform(const SkSVGTransformType& t) {
-    fGradientTransform = t;
-}
-
-void SkSVGLinearGradient::setSpreadMethod(const SkSVGSpreadMethod& spread) {
-    fSpreadMethod = spread;
-}
-
 void SkSVGLinearGradient::setX1(const SkSVGLength& x1) {
     fX1 = x1;
 }
@@ -43,21 +30,6 @@
 
 void SkSVGLinearGradient::onSetAttribute(SkSVGAttribute attr, const SkSVGValue& v) {
     switch (attr) {
-    case SkSVGAttribute::kGradientTransform:
-        if (const auto* t = v.as<SkSVGTransformValue>()) {
-            this->setGradientTransform(*t);
-        }
-        break;
-    case SkSVGAttribute::kHref:
-        if (const auto* href = v.as<SkSVGStringValue>()) {
-            this->setHref(*href);
-        }
-        break;
-    case SkSVGAttribute::kSpreadMethod:
-        if (const auto* spread = v.as<SkSVGSpreadMethodValue>()) {
-            this->setSpreadMethod(*spread);
-        }
-        break;
     case SkSVGAttribute::kX1:
         if (const auto* x1 = v.as<SkSVGLengthValue>()) {
             this->setX1(*x1);
@@ -83,36 +55,10 @@
     }
 }
 
-// https://www.w3.org/TR/SVG/pservers.html#LinearGradientElementHrefAttribute
-void SkSVGLinearGradient::collectColorStops(const SkSVGRenderContext& ctx,
-                                            SkSTArray<2, SkScalar, true>* pos,
-                                            SkSTArray<2, SkColor, true>* colors) const {
-    // Used to resolve percentage offsets.
-    const SkSVGLengthContext ltx(SkSize::Make(1, 1));
-
-    for (const auto& child : fChildren) {
-        if (child->tag() != SkSVGTag::kStop) {
-            continue;
-        }
-
-        const auto& stop = static_cast<const SkSVGStop&>(*child);
-        colors->push_back(SkColorSetA(stop.stopColor(),
-                                      SkScalarRoundToInt(stop.stopOpacity() * 255)));
-        pos->push_back(SkTPin(ltx.resolve(stop.offset(), SkSVGLengthContext::LengthType::kOther),
-                              0.f, 1.f));
-    }
-
-    SkASSERT(colors->count() == pos->count());
-
-    if (pos->empty() && !fHref.value().isEmpty()) {
-        const auto* ref = ctx.findNodeById(fHref);
-        if (ref && ref->tag() == SkSVGTag::kLinearGradient) {
-            static_cast<const SkSVGLinearGradient*>(ref)->collectColorStops(ctx, pos, colors);
-        }
-    }
-}
-
-bool SkSVGLinearGradient::onAsPaint(const SkSVGRenderContext& ctx, SkPaint* paint) const {
+sk_sp<SkShader> SkSVGLinearGradient::onMakeShader(const SkSVGRenderContext& ctx,
+                                                  const SkColor* colors, const SkScalar* pos,
+                                                  int count, SkTileMode tm,
+                                                  const SkMatrix& localMatrix) const {
     const auto& lctx = ctx.lengthContext();
     const auto x1 = lctx.resolve(fX1, SkSVGLengthContext::LengthType::kHorizontal);
     const auto y1 = lctx.resolve(fY1, SkSVGLengthContext::LengthType::kVertical);
@@ -120,25 +66,6 @@
     const auto y2 = lctx.resolve(fY2, SkSVGLengthContext::LengthType::kVertical);
 
     const SkPoint pts[2] = { {x1, y1}, {x2, y2}};
-    SkSTArray<2, SkColor , true> colors;
-    SkSTArray<2, SkScalar, true> pos;
 
-    this->collectColorStops(ctx, &pos, &colors);
-    // TODO:
-    //       * stop (lazy?) sorting
-    //       * href loop detection
-    //       * href attribute inheritance (not just color stops)
-    //       * objectBoundingBox units support
-
-    static_assert(static_cast<SkShader::TileMode>(SkSVGSpreadMethod::Type::kPad) ==
-                  SkShader::kClamp_TileMode, "SkSVGSpreadMethod::Type is out of sync");
-    static_assert(static_cast<SkShader::TileMode>(SkSVGSpreadMethod::Type::kRepeat) ==
-                  SkShader::kRepeat_TileMode, "SkSVGSpreadMethod::Type is out of sync");
-    static_assert(static_cast<SkShader::TileMode>(SkSVGSpreadMethod::Type::kReflect) ==
-                  SkShader::kMirror_TileMode, "SkSVGSpreadMethod::Type is out of sync");
-    const auto tileMode = static_cast<SkShader::TileMode>(fSpreadMethod.type());
-
-    paint->setShader(SkGradientShader::MakeLinear(pts, colors.begin(), pos.begin(), colors.count(),
-                                                  tileMode, 0, &fGradientTransform.value()));
-    return true;
+    return SkGradientShader::MakeLinear(pts, colors, pos, count, tm, 0, &localMatrix);
 }
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGLinearGradient.h b/src/third_party/skia/experimental/svg/model/SkSVGLinearGradient.h
index 4e5905c..f6ae5b3 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGLinearGradient.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGLinearGradient.h
@@ -8,46 +8,36 @@
 #ifndef SkSVGLinearGradient_DEFINED
 #define SkSVGLinearGradient_DEFINED
 
-#include "SkSVGHiddenContainer.h"
-#include "SkSVGTypes.h"
+#include "experimental/svg/model/SkSVGGradient.h"
+#include "experimental/svg/model/SkSVGTypes.h"
 
-class SkSVGLinearGradient : public SkSVGHiddenContainer {
+class SkSVGLinearGradient final : public SkSVGGradient {
 public:
     ~SkSVGLinearGradient() override = default;
     static sk_sp<SkSVGLinearGradient> Make() {
         return sk_sp<SkSVGLinearGradient>(new SkSVGLinearGradient());
     }
 
-    void setHref(const SkSVGStringType&);
-    void setGradientTransform(const SkSVGTransformType&);
-    void setSpreadMethod(const SkSVGSpreadMethod&);
     void setX1(const SkSVGLength&);
     void setY1(const SkSVGLength&);
     void setX2(const SkSVGLength&);
     void setY2(const SkSVGLength&);
 
 protected:
-    bool onAsPaint(const SkSVGRenderContext&, SkPaint*) const override;
-
     void onSetAttribute(SkSVGAttribute, const SkSVGValue&) override;
 
+    sk_sp<SkShader> onMakeShader(const SkSVGRenderContext&,
+                                 const SkColor*, const SkScalar*, int count,
+                                 SkTileMode, const SkMatrix&) const override;
 private:
     SkSVGLinearGradient();
 
-    void collectColorStops(const SkSVGRenderContext&,
-                           SkSTArray<2, SkScalar, true>*,
-                           SkSTArray<2, SkColor, true>*) const;
-
     SkSVGLength fX1 = SkSVGLength(0  , SkSVGLength::Unit::kPercentage);
     SkSVGLength fY1 = SkSVGLength(0  , SkSVGLength::Unit::kPercentage);
     SkSVGLength fX2 = SkSVGLength(100, SkSVGLength::Unit::kPercentage);
     SkSVGLength fY2 = SkSVGLength(0  , SkSVGLength::Unit::kPercentage);
 
-    SkSVGStringType    fHref;
-    SkSVGTransformType fGradientTransform = SkSVGTransformType(SkMatrix::I());
-    SkSVGSpreadMethod  fSpreadMethod = SkSVGSpreadMethod(SkSVGSpreadMethod::Type::kPad);
-
-    typedef SkSVGHiddenContainer INHERITED;
+    typedef SkSVGGradient INHERITED;
 };
 
 #endif // SkSVGLinearGradient_DEFINED
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGNode.cpp b/src/third_party/skia/experimental/svg/model/SkSVGNode.cpp
index 0f3743f..e872493 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGNode.cpp
+++ b/src/third_party/skia/experimental/svg/model/SkSVGNode.cpp
@@ -5,13 +5,13 @@
  * found in the LICENSE file.
  */
 
-#include "SkCanvas.h"
-#include "SkMatrix.h"
-#include "SkPathOps.h"
-#include "SkSVGNode.h"
-#include "SkSVGRenderContext.h"
-#include "SkSVGValue.h"
-#include "SkTLazy.h"
+#include "experimental/svg/model/SkSVGNode.h"
+#include "experimental/svg/model/SkSVGRenderContext.h"
+#include "experimental/svg/model/SkSVGValue.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkMatrix.h"
+#include "include/pathops/SkPathOps.h"
+#include "src/core/SkTLazy.h"
 
 SkSVGNode::SkSVGNode(SkSVGTag t) : fTag(t) { }
 
@@ -50,7 +50,10 @@
 bool SkSVGNode::onPrepareToRender(SkSVGRenderContext* ctx) const {
     ctx->applyPresentationAttributes(fPresentationAttributes,
                                      this->hasChildren() ? 0 : SkSVGRenderContext::kLeaf);
-    return true;
+
+    // visibility:hidden disables rendering
+    const auto visibility = ctx->presentationContext().fInherited.fVisibility.get()->type();
+    return visibility != SkSVGVisibility::Type::kHidden;
 }
 
 void SkSVGNode::setAttribute(SkSVGAttribute attr, const SkSVGValue& v) {
@@ -61,6 +64,10 @@
     fPresentationAttributes.fClipPath.set(clip);
 }
 
+void SkSVGNode::setClipRule(const SkSVGFillRule& clipRule) {
+    fPresentationAttributes.fClipRule.set(clipRule);
+}
+
 void SkSVGNode::setFill(const SkSVGPaint& svgPaint) {
     fPresentationAttributes.fFill.set(svgPaint);
 }
@@ -83,6 +90,14 @@
     fPresentationAttributes.fStroke.set(svgPaint);
 }
 
+void SkSVGNode::setStrokeDashArray(const SkSVGDashArray& dashArray) {
+    fPresentationAttributes.fStrokeDashArray.set(dashArray);
+}
+
+void SkSVGNode::setStrokeDashOffset(const SkSVGLength& dashOffset) {
+    fPresentationAttributes.fStrokeDashOffset.set(dashOffset);
+}
+
 void SkSVGNode::setStrokeOpacity(const SkSVGNumberType& opacity) {
     fPresentationAttributes.fStrokeOpacity.set(
         SkSVGNumberType(SkTPin<SkScalar>(opacity.value(), 0, 1)));
@@ -92,6 +107,10 @@
     fPresentationAttributes.fStrokeWidth.set(strokeWidth);
 }
 
+void SkSVGNode::setVisibility(const SkSVGVisibility& visibility) {
+    fPresentationAttributes.fVisibility.set(visibility);
+}
+
 void SkSVGNode::onSetAttribute(SkSVGAttribute attr, const SkSVGValue& v) {
     switch (attr) {
     case SkSVGAttribute::kClipPath:
@@ -99,6 +118,11 @@
             this->setClipPath(*clip);
         }
         break;
+    case SkSVGAttribute::kClipRule:
+        if (const SkSVGFillRuleValue* clipRule = v.as<SkSVGFillRuleValue>()) {
+            this->setClipRule(*clipRule);
+        }
+        break;
     case SkSVGAttribute::kFill:
         if (const SkSVGPaintValue* paint = v.as<SkSVGPaintValue>()) {
             this->setFill(*paint);
@@ -124,6 +148,16 @@
             this->setStroke(*paint);
         }
         break;
+    case SkSVGAttribute::kStrokeDashArray:
+        if (const SkSVGDashArrayValue* dashArray = v.as<SkSVGDashArrayValue>()) {
+            this->setStrokeDashArray(*dashArray);
+        }
+        break;
+    case SkSVGAttribute::kStrokeDashOffset:
+        if (const SkSVGLengthValue* dashOffset= v.as<SkSVGLengthValue>()) {
+            this->setStrokeDashOffset(*dashOffset);
+        }
+        break;
     case SkSVGAttribute::kStrokeOpacity:
         if (const SkSVGNumberValue* opacity = v.as<SkSVGNumberValue>()) {
             this->setStrokeOpacity(*opacity);
@@ -139,13 +173,25 @@
             fPresentationAttributes.fStrokeLineJoin.set(*lineJoin);
         }
         break;
+    case SkSVGAttribute::kStrokeMiterLimit:
+        if (const SkSVGNumberValue* miterLimit = v.as<SkSVGNumberValue>()) {
+            fPresentationAttributes.fStrokeMiterLimit.set(*miterLimit);
+        }
+        break;
     case SkSVGAttribute::kStrokeWidth:
         if (const SkSVGLengthValue* strokeWidth = v.as<SkSVGLengthValue>()) {
             this->setStrokeWidth(*strokeWidth);
         }
         break;
+    case SkSVGAttribute::kVisibility:
+        if (const SkSVGVisibilityValue* visibility = v.as<SkSVGVisibilityValue>()) {
+            this->setVisibility(*visibility);
+        }
+        break;
     default:
+#if defined(SK_VERBOSE_SVG_PARSING)
         SkDebugf("attribute ID <%d> ignored for node <%d>\n", attr, fTag);
+#endif
         break;
     }
 }
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGNode.h b/src/third_party/skia/experimental/svg/model/SkSVGNode.h
index 385b158..0a20a67 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGNode.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGNode.h
@@ -8,8 +8,8 @@
 #ifndef SkSVGNode_DEFINED
 #define SkSVGNode_DEFINED
 
-#include "SkRefCnt.h"
-#include "SkSVGAttribute.h"
+#include "experimental/svg/model/SkSVGAttribute.h"
+#include "include/core/SkRefCnt.h"
 
 class SkCanvas;
 class SkMatrix;
@@ -27,11 +27,14 @@
     kLine,
     kLinearGradient,
     kPath,
+    kPattern,
     kPolygon,
     kPolyline,
+    kRadialGradient,
     kRect,
     kStop,
-    kSvg
+    kSvg,
+    kUse
 };
 
 class SkSVGNode : public SkRefCnt {
@@ -49,13 +52,17 @@
     void setAttribute(SkSVGAttribute, const SkSVGValue&);
 
     void setClipPath(const SkSVGClip&);
+    void setClipRule(const SkSVGFillRule&);
     void setFill(const SkSVGPaint&);
     void setFillOpacity(const SkSVGNumberType&);
     void setFillRule(const SkSVGFillRule&);
     void setOpacity(const SkSVGNumberType&);
     void setStroke(const SkSVGPaint&);
+    void setStrokeDashArray(const SkSVGDashArray&);
+    void setStrokeDashOffset(const SkSVGLength&);
     void setStrokeOpacity(const SkSVGNumberType&);
     void setStrokeWidth(const SkSVGLength&);
+    void setVisibility(const SkSVGVisibility&);
 
 protected:
     SkSVGNode(SkSVGTag);
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGPath.cpp b/src/third_party/skia/experimental/svg/model/SkSVGPath.cpp
index 7568744..f3f4524 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGPath.cpp
+++ b/src/third_party/skia/experimental/svg/model/SkSVGPath.cpp
@@ -5,11 +5,11 @@
  * found in the LICENSE file.
  */
 
-#include "SkCanvas.h"
-#include "SkPaint.h"
-#include "SkSVGPath.h"
-#include "SkSVGRenderContext.h"
-#include "SkSVGValue.h"
+#include "experimental/svg/model/SkSVGPath.h"
+#include "experimental/svg/model/SkSVGRenderContext.h"
+#include "experimental/svg/model/SkSVGValue.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkPaint.h"
 
 SkSVGPath::SkSVGPath() : INHERITED(SkSVGTag::kPath) { }
 
@@ -33,10 +33,9 @@
 }
 
 SkPath SkSVGPath::onAsPath(const SkSVGRenderContext& ctx) const {
-    // the computed fillType follows inheritance rules and needs to be applied at draw time.
-    fPath.setFillType(FillRuleToFillType(*ctx.presentationContext().fInherited.fFillRule.get()));
-
     SkPath path = fPath;
+    // clip-rule can be inherited and needs to be applied at clip time.
+    path.setFillType(ctx.presentationContext().fInherited.fClipRule.get()->asFillType());
     this->mapToParent(&path);
     return path;
 }
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGPath.h b/src/third_party/skia/experimental/svg/model/SkSVGPath.h
index 176b838..5b41637 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGPath.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGPath.h
@@ -8,8 +8,8 @@
 #ifndef SkSVGPath_DEFINED
 #define SkSVGPath_DEFINED
 
-#include "SkPath.h"
-#include "SkSVGShape.h"
+#include "experimental/svg/model/SkSVGShape.h"
+#include "include/core/SkPath.h"
 
 class SkSVGPath final : public SkSVGShape {
 public:
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGPattern.cpp b/src/third_party/skia/experimental/svg/model/SkSVGPattern.cpp
new file mode 100644
index 0000000..9b92270
--- /dev/null
+++ b/src/third_party/skia/experimental/svg/model/SkSVGPattern.cpp
@@ -0,0 +1,170 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "experimental/svg/model/SkSVGPattern.h"
+
+#include "experimental/svg/model/SkSVGRenderContext.h"
+#include "experimental/svg/model/SkSVGValue.h"
+#include "include/core/SkPictureRecorder.h"
+#include "include/core/SkShader.h"
+
+SkSVGPattern::SkSVGPattern() : INHERITED(SkSVGTag::kPattern) {}
+
+void SkSVGPattern::setX(const SkSVGLength& x) {
+    fAttributes.fX.set(x);
+}
+
+void SkSVGPattern::setY(const SkSVGLength& y) {
+    fAttributes.fY.set(y);
+}
+
+void SkSVGPattern::setWidth(const SkSVGLength& w) {
+    fAttributes.fWidth.set(w);
+}
+
+void SkSVGPattern::setHeight(const SkSVGLength& h) {
+    fAttributes.fHeight.set(h);
+}
+
+void SkSVGPattern::setHref(const SkSVGStringType& href) {
+    fHref = std::move(href);
+}
+
+void SkSVGPattern::setPatternTransform(const SkSVGTransformType& patternTransform) {
+    fAttributes.fPatternTransform.set(patternTransform);
+}
+
+void SkSVGPattern::onSetAttribute(SkSVGAttribute attr, const SkSVGValue& v) {
+    switch (attr) {
+    case SkSVGAttribute::kX:
+        if (const auto* x = v.as<SkSVGLengthValue>()) {
+            this->setX(*x);
+        }
+        break;
+    case SkSVGAttribute::kY:
+        if (const auto* y = v.as<SkSVGLengthValue>()) {
+            this->setY(*y);
+        }
+        break;
+    case SkSVGAttribute::kWidth:
+        if (const auto* w = v.as<SkSVGLengthValue>()) {
+            this->setWidth(*w);
+        }
+        break;
+    case SkSVGAttribute::kHeight:
+        if (const auto* h = v.as<SkSVGLengthValue>()) {
+            this->setHeight(*h);
+        }
+        break;
+    case SkSVGAttribute::kHref:
+        if (const auto* href = v.as<SkSVGStringValue>()) {
+            this->setHref(*href);
+        }
+        break;
+    case SkSVGAttribute::kPatternTransform:
+        if (const auto* t = v.as<SkSVGTransformValue>()) {
+            this->setPatternTransform(*t);
+        }
+        break;
+    default:
+        this->INHERITED::onSetAttribute(attr, v);
+    }
+}
+
+const SkSVGPattern* SkSVGPattern::hrefTarget(const SkSVGRenderContext& ctx) const {
+    if (fHref.value().isEmpty()) {
+        return nullptr;
+    }
+
+    const auto* href = ctx.findNodeById(fHref);
+    if (!href || href->tag() != SkSVGTag::kPattern) {
+        return nullptr;
+    }
+
+    return static_cast<const SkSVGPattern*>(href);
+}
+
+template <typename T>
+bool inherit_if_needed(const SkTLazy<T>& src, SkTLazy<T>& dst) {
+    if (!dst.isValid()) {
+        dst = src;
+        return true;
+    }
+
+    return false;
+}
+
+/* https://www.w3.org/TR/SVG/pservers.html#PatternElementHrefAttribute
+ *
+ * Any attributes which are defined on the referenced element which are not defined on this element
+ * are inherited by this element. If this element has no children, and the referenced element does
+ * (possibly due to its own ‘xlink:href’ attribute), then this element inherits the children from
+ * the referenced element. Inheritance can be indirect to an arbitrary level; thus, if the
+ * referenced element inherits attributes or children due to its own ‘xlink:href’ attribute, then
+ * the current element can inherit those attributes or children.
+ */
+const SkSVGPattern* SkSVGPattern::resolveHref(const SkSVGRenderContext& ctx,
+                                              PatternAttributes* attrs) const {
+    const SkSVGPattern *currentNode = this,
+                       *contentNode = this;
+    do {
+        // Bitwise OR to avoid short-circuiting.
+        const bool didInherit =
+            inherit_if_needed(currentNode->fAttributes.fX               , attrs->fX)      |
+            inherit_if_needed(currentNode->fAttributes.fY               , attrs->fY)      |
+            inherit_if_needed(currentNode->fAttributes.fWidth           , attrs->fWidth)  |
+            inherit_if_needed(currentNode->fAttributes.fHeight          , attrs->fHeight) |
+            inherit_if_needed(currentNode->fAttributes.fPatternTransform, attrs->fPatternTransform);
+
+        if (!contentNode->hasChildren()) {
+            contentNode = currentNode;
+        }
+
+        if (contentNode->hasChildren() && !didInherit) {
+            // All attributes have been resolved, and a valid content node has been found.
+            // We can terminate the href chain early.
+            break;
+        }
+
+        // TODO: reference loop mitigation.
+        currentNode = currentNode->hrefTarget(ctx);
+    } while (currentNode);
+
+    return contentNode;
+}
+
+bool SkSVGPattern::onAsPaint(const SkSVGRenderContext& ctx, SkPaint* paint) const {
+    PatternAttributes attrs;
+    const auto* contentNode = this->resolveHref(ctx, &attrs);
+
+    const auto tile = ctx.lengthContext().resolveRect(
+            attrs.fX.isValid()      ? *attrs.fX.get()      : SkSVGLength(0),
+            attrs.fY.isValid()      ? *attrs.fY.get()      : SkSVGLength(0),
+            attrs.fWidth.isValid()  ? *attrs.fWidth.get()  : SkSVGLength(0),
+            attrs.fHeight.isValid() ? *attrs.fHeight.get() : SkSVGLength(0));
+
+    if (tile.isEmpty()) {
+        return false;
+    }
+
+    const SkMatrix* patternTransform = attrs.fPatternTransform.isValid()
+            ? &attrs.fPatternTransform.get()->value()
+            : nullptr;
+
+    SkPictureRecorder recorder;
+    SkSVGRenderContext recordingContext(ctx, recorder.beginRecording(tile));
+
+    // Cannot call into INHERITED:: because SkSVGHiddenContainer skips rendering.
+    contentNode->SkSVGContainer::onRender(recordingContext);
+
+    paint->setShader(recorder.finishRecordingAsPicture()->makeShader(
+                                                 SkTileMode::kRepeat,
+                                                 SkTileMode::kRepeat,
+                                                 patternTransform,
+                                                 &tile));
+    return true;
+}
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGPattern.h b/src/third_party/skia/experimental/svg/model/SkSVGPattern.h
new file mode 100644
index 0000000..850baa1
--- /dev/null
+++ b/src/third_party/skia/experimental/svg/model/SkSVGPattern.h
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkSVGPattern_DEFINED
+#define SkSVGPattern_DEFINED
+
+#include "experimental/svg/model/SkSVGHiddenContainer.h"
+#include "experimental/svg/model/SkSVGTypes.h"
+
+class SkSVGRenderContext;
+
+class SkSVGPattern final : public SkSVGHiddenContainer {
+public:
+    ~SkSVGPattern() override = default;
+
+    static sk_sp<SkSVGPattern> Make() {
+        return sk_sp<SkSVGPattern>(new SkSVGPattern());
+    }
+
+    void setX(const SkSVGLength&);
+    void setY(const SkSVGLength&);
+    void setWidth(const SkSVGLength&);
+    void setHeight(const SkSVGLength&);
+    void setHref(const SkSVGStringType&);
+    void setPatternTransform(const SkSVGTransformType&);
+
+protected:
+    SkSVGPattern();
+
+    void onSetAttribute(SkSVGAttribute, const SkSVGValue&) override;
+
+    bool onAsPaint(const SkSVGRenderContext&, SkPaint*) const override;
+
+private:
+    struct PatternAttributes {
+        SkTLazy<SkSVGLength>        fX,
+                                    fY,
+                                    fWidth,
+                                    fHeight;
+        SkTLazy<SkSVGTransformType> fPatternTransform;
+    } fAttributes;
+
+    SkSVGStringType    fHref;
+
+    const SkSVGPattern* resolveHref(const SkSVGRenderContext&, PatternAttributes*) const;
+    const SkSVGPattern* hrefTarget(const SkSVGRenderContext&) const;
+
+    // TODO:
+    //   - patternUnits
+    //   - patternContentUnits
+
+    typedef SkSVGHiddenContainer INHERITED;
+};
+
+#endif // SkSVGPattern_DEFINED
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGPoly.cpp b/src/third_party/skia/experimental/svg/model/SkSVGPoly.cpp
index 479638e..6bacb1a 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGPoly.cpp
+++ b/src/third_party/skia/experimental/svg/model/SkSVGPoly.cpp
@@ -5,11 +5,11 @@
  * found in the LICENSE file.
  */
 
-#include "SkCanvas.h"
-#include "SkTLazy.h"
-#include "SkSVGRenderContext.h"
-#include "SkSVGPoly.h"
-#include "SkSVGValue.h"
+#include "experimental/svg/model/SkSVGPoly.h"
+#include "experimental/svg/model/SkSVGRenderContext.h"
+#include "experimental/svg/model/SkSVGValue.h"
+#include "include/core/SkCanvas.h"
+#include "src/core/SkTLazy.h"
 
 SkSVGPoly::SkSVGPoly(SkSVGTag t) : INHERITED(t) {}
 
@@ -40,10 +40,11 @@
 }
 
 SkPath SkSVGPoly::onAsPath(const SkSVGRenderContext& ctx) const {
-    // the computed fillType follows inheritance rules and needs to be applied at draw time.
-    fPath.setFillType(FillRuleToFillType(*ctx.presentationContext().fInherited.fFillRule.get()));
-
     SkPath path = fPath;
+
+    // clip-rule can be inherited and needs to be applied at clip time.
+    path.setFillType(ctx.presentationContext().fInherited.fClipRule.get()->asFillType());
+
     this->mapToParent(&path);
     return path;
 }
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGPoly.h b/src/third_party/skia/experimental/svg/model/SkSVGPoly.h
index 3259bc0..f47b764 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGPoly.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGPoly.h
@@ -8,8 +8,8 @@
 #ifndef SkSVGPoly_DEFINED
 #define SkSVGPoly_DEFINED
 
-#include "SkPath.h"
-#include "SkSVGShape.h"
+#include "experimental/svg/model/SkSVGShape.h"
+#include "include/core/SkPath.h"
 
 // Handles <polygon> and <polyline> elements.
 class SkSVGPoly final : public SkSVGShape {
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGRadialGradient.cpp b/src/third_party/skia/experimental/svg/model/SkSVGRadialGradient.cpp
new file mode 100644
index 0000000..c77701a
--- /dev/null
+++ b/src/third_party/skia/experimental/svg/model/SkSVGRadialGradient.cpp
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "experimental/svg/model/SkSVGRadialGradient.h"
+#include "experimental/svg/model/SkSVGRenderContext.h"
+#include "experimental/svg/model/SkSVGValue.h"
+#include "include/effects/SkGradientShader.h"
+
+SkSVGRadialGradient::SkSVGRadialGradient() : INHERITED(SkSVGTag::kRadialGradient) {}
+
+void SkSVGRadialGradient::setCx(const SkSVGLength& cx) {
+    fCx = cx;
+}
+
+void SkSVGRadialGradient::setCy(const SkSVGLength& cy) {
+    fCy = cy;
+}
+
+void SkSVGRadialGradient::setR(const SkSVGLength& r) {
+    fR = r;
+}
+
+void SkSVGRadialGradient::setFx(const SkSVGLength& fx) {
+    fFx.set(fx);
+}
+
+void SkSVGRadialGradient::setFy(const SkSVGLength& fy) {
+    fFy.set(fy);
+}
+
+void SkSVGRadialGradient::onSetAttribute(SkSVGAttribute attr, const SkSVGValue& v) {
+    switch (attr) {
+    case SkSVGAttribute::kCx:
+        if (const auto* cx = v.as<SkSVGLengthValue>()) {
+            this->setCx(*cx);
+        }
+        break;
+    case SkSVGAttribute::kCy:
+        if (const auto* cy = v.as<SkSVGLengthValue>()) {
+            this->setCy(*cy);
+        }
+        break;
+    case SkSVGAttribute::kR:
+        if (const auto* r = v.as<SkSVGLengthValue>()) {
+            this->setR(*r);
+        }
+        break;
+    case SkSVGAttribute::kFx:
+        if (const auto* fx = v.as<SkSVGLengthValue>()) {
+            this->setFx(*fx);
+        }
+        break;
+    case SkSVGAttribute::kFy:
+        if (const auto* fy = v.as<SkSVGLengthValue>()) {
+            this->setFy(*fy);
+        }
+        break;
+    default:
+        this->INHERITED::onSetAttribute(attr, v);
+    }
+}
+
+sk_sp<SkShader> SkSVGRadialGradient::onMakeShader(const SkSVGRenderContext& ctx,
+                                                  const SkColor* colors, const SkScalar* pos,
+                                                  int count, SkTileMode tm,
+                                                  const SkMatrix& m) const {
+    const auto&  lctx = ctx.lengthContext();
+    const auto      r = lctx.resolve(fR , SkSVGLengthContext::LengthType::kOther);
+    const auto center = SkPoint::Make(
+            lctx.resolve(fCx, SkSVGLengthContext::LengthType::kHorizontal),
+            lctx.resolve(fCy, SkSVGLengthContext::LengthType::kVertical));
+    const auto  focal = SkPoint::Make(
+        fFx.isValid() ? lctx.resolve(*fFx.get(), SkSVGLengthContext::LengthType::kHorizontal)
+                      : center.x(),
+        fFy.isValid() ? lctx.resolve(*fFy.get(), SkSVGLengthContext::LengthType::kVertical)
+                      : center.y());
+
+    return center == focal
+        ? SkGradientShader::MakeRadial(center, r, colors, pos, count, tm, 0, &m)
+        : SkGradientShader::MakeTwoPointConical(focal, 0, center, r, colors, pos, count, tm, 0, &m);
+}
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGRadialGradient.h b/src/third_party/skia/experimental/svg/model/SkSVGRadialGradient.h
new file mode 100644
index 0000000..6a26700
--- /dev/null
+++ b/src/third_party/skia/experimental/svg/model/SkSVGRadialGradient.h
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkSVGRadialGradient_DEFINED
+#define SkSVGRadialGradient_DEFINED
+
+#include "experimental/svg/model/SkSVGGradient.h"
+#include "experimental/svg/model/SkSVGTypes.h"
+
+class SkSVGRadialGradient final : public SkSVGGradient {
+public:
+    ~SkSVGRadialGradient() override = default;
+    static sk_sp<SkSVGRadialGradient> Make() {
+        return sk_sp<SkSVGRadialGradient>(new SkSVGRadialGradient());
+    }
+
+    void setCx(const SkSVGLength&);
+    void setCy(const SkSVGLength&);
+    void setR(const SkSVGLength&);
+    void setFx(const SkSVGLength&);
+    void setFy(const SkSVGLength&);
+
+protected:
+    void onSetAttribute(SkSVGAttribute, const SkSVGValue&) override;
+
+    sk_sp<SkShader> onMakeShader(const SkSVGRenderContext&,
+                                 const SkColor*, const SkScalar*, int count,
+                                 SkTileMode, const SkMatrix&) const override;
+private:
+    SkSVGRadialGradient();
+
+    SkSVGLength fCx = SkSVGLength(50, SkSVGLength::Unit::kPercentage);
+    SkSVGLength fCy = SkSVGLength(50, SkSVGLength::Unit::kPercentage);
+    SkSVGLength fR  = SkSVGLength(50, SkSVGLength::Unit::kPercentage);
+    SkTLazy<SkSVGLength> fFx;
+    SkTLazy<SkSVGLength> fFy;
+
+
+   typedef SkSVGGradient INHERITED;
+};
+
+#endif // SkSVGRadialGradient_DEFINED
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGRect.cpp b/src/third_party/skia/experimental/svg/model/SkSVGRect.cpp
index fe68d62..24267d0 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGRect.cpp
+++ b/src/third_party/skia/experimental/svg/model/SkSVGRect.cpp
@@ -5,11 +5,11 @@
  * found in the LICENSE file.
  */
 
-#include "SkCanvas.h"
-#include "SkRect.h"
-#include "SkSVGRect.h"
-#include "SkSVGRenderContext.h"
-#include "SkSVGValue.h"
+#include "experimental/svg/model/SkSVGRect.h"
+#include "experimental/svg/model/SkSVGRenderContext.h"
+#include "experimental/svg/model/SkSVGValue.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkRect.h"
 
 SkSVGRect::SkSVGRect() : INHERITED(SkSVGTag::kRect) {}
 
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGRect.h b/src/third_party/skia/experimental/svg/model/SkSVGRect.h
index e61f276..7d749b0 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGRect.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGRect.h
@@ -8,8 +8,8 @@
 #ifndef SkSVGRect_DEFINED
 #define SkSVGRect_DEFINED
 
-#include "SkSVGShape.h"
-#include "SkSVGTypes.h"
+#include "experimental/svg/model/SkSVGShape.h"
+#include "experimental/svg/model/SkSVGTypes.h"
 
 class SkRRect;
 
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGRenderContext.cpp b/src/third_party/skia/experimental/svg/model/SkSVGRenderContext.cpp
index 9de605a..595a704 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGRenderContext.cpp
+++ b/src/third_party/skia/experimental/svg/model/SkSVGRenderContext.cpp
@@ -5,12 +5,15 @@
  * found in the LICENSE file.
  */
 
-#include "SkCanvas.h"
-#include "SkPath.h"
-#include "SkSVGAttribute.h"
-#include "SkSVGNode.h"
-#include "SkSVGRenderContext.h"
-#include "SkSVGTypes.h"
+#include "experimental/svg/model/SkSVGRenderContext.h"
+
+#include "experimental/svg/model/SkSVGAttribute.h"
+#include "experimental/svg/model/SkSVGNode.h"
+#include "experimental/svg/model/SkSVGTypes.h"
+#include "include/core/SkCanvas.h"
+#include "include/core/SkPath.h"
+#include "include/effects/SkDashPathEffect.h"
+#include "include/private/SkTo.h"
 
 namespace {
 
@@ -154,6 +157,45 @@
 }
 
 template <>
+void commitToPaint<SkSVGAttribute::kStrokeDashArray>(const SkSVGPresentationAttributes& attrs,
+                                                     const SkSVGRenderContext& ctx,
+                                                     SkSVGPresentationContext* pctx) {
+    const auto& dashArray = attrs.fStrokeDashArray.get();
+    if (dashArray->type() != SkSVGDashArray::Type::kDashArray) {
+        return;
+    }
+
+    const auto count = dashArray->dashArray().count();
+    SkSTArray<128, SkScalar, true> intervals(count);
+    for (const auto& dash : dashArray->dashArray()) {
+        intervals.push_back(ctx.lengthContext().resolve(dash,
+                                                        SkSVGLengthContext::LengthType::kOther));
+    }
+
+    if (count & 1) {
+        // If an odd number of values is provided, then the list of values
+        // is repeated to yield an even number of values.
+        intervals.push_back_n(count);
+        memcpy(intervals.begin() + count, intervals.begin(), count);
+    }
+
+    SkASSERT((intervals.count() & 1) == 0);
+
+    const SkScalar phase = ctx.lengthContext().resolve(*pctx->fInherited.fStrokeDashOffset.get(),
+                                                       SkSVGLengthContext::LengthType::kOther);
+    pctx->fStrokePaint.setPathEffect(SkDashPathEffect::Make(intervals.begin(),
+                                                            intervals.count(),
+                                                            phase));
+}
+
+template <>
+void commitToPaint<SkSVGAttribute::kStrokeDashOffset>(const SkSVGPresentationAttributes&,
+                                                      const SkSVGRenderContext&,
+                                                      SkSVGPresentationContext*) {
+    // Applied via kStrokeDashArray.
+}
+
+template <>
 void commitToPaint<SkSVGAttribute::kStrokeLineCap>(const SkSVGPresentationAttributes& attrs,
                                                    const SkSVGRenderContext&,
                                                    SkSVGPresentationContext* pctx) {
@@ -174,6 +216,13 @@
 }
 
 template <>
+void commitToPaint<SkSVGAttribute::kStrokeMiterLimit>(const SkSVGPresentationAttributes& attrs,
+                                                      const SkSVGRenderContext&,
+                                                      SkSVGPresentationContext* pctx) {
+    pctx->fStrokePaint.setStrokeMiter(*attrs.fStrokeMiterLimit.get());
+}
+
+template <>
 void commitToPaint<SkSVGAttribute::kStrokeOpacity>(const SkSVGPresentationAttributes& attrs,
                                                    const SkSVGRenderContext&,
                                                    SkSVGPresentationContext* pctx) {
@@ -196,6 +245,20 @@
     // Not part of the SkPaint state; applied to the path at render time.
 }
 
+template <>
+void commitToPaint<SkSVGAttribute::kClipRule>(const SkSVGPresentationAttributes&,
+                                              const SkSVGRenderContext&,
+                                              SkSVGPresentationContext*) {
+    // Not part of the SkPaint state; applied to the path at clip time.
+}
+
+template <>
+void commitToPaint<SkSVGAttribute::kVisibility>(const SkSVGPresentationAttributes&,
+                                                const SkSVGRenderContext&,
+                                                SkSVGPresentationContext*) {
+    // Not part of the SkPaint state; queried to veto rendering.
+}
+
 } // anonymous ns
 
 SkSVGPresentationContext::SkSVGPresentationContext()
@@ -218,6 +281,7 @@
     commitToPaint<SkSVGAttribute::kStroke>(fInherited, dummy, this);
     commitToPaint<SkSVGAttribute::kStrokeLineCap>(fInherited, dummy, this);
     commitToPaint<SkSVGAttribute::kStrokeLineJoin>(fInherited, dummy, this);
+    commitToPaint<SkSVGAttribute::kStrokeMiterLimit>(fInherited, dummy, this);
     commitToPaint<SkSVGAttribute::kStrokeOpacity>(fInherited, dummy, this);
     commitToPaint<SkSVGAttribute::kStrokeWidth>(fInherited, dummy, this);
 }
@@ -238,6 +302,12 @@
                          *other.fLengthContext,
                          *other.fPresentationContext) {}
 
+SkSVGRenderContext::SkSVGRenderContext(const SkSVGRenderContext& other, SkCanvas* canvas)
+    : SkSVGRenderContext(canvas,
+                         other.fIDMapper,
+                         *other.fLengthContext,
+                         *other.fPresentationContext) {}
+
 SkSVGRenderContext::~SkSVGRenderContext() {
     fCanvas->restoreToCount(fCanvasSaveCount);
 }
@@ -267,11 +337,16 @@
     ApplyLazyInheritedAttribute(Fill);
     ApplyLazyInheritedAttribute(FillOpacity);
     ApplyLazyInheritedAttribute(FillRule);
+    ApplyLazyInheritedAttribute(ClipRule);
     ApplyLazyInheritedAttribute(Stroke);
+    ApplyLazyInheritedAttribute(StrokeDashOffset);
+    ApplyLazyInheritedAttribute(StrokeDashArray);
     ApplyLazyInheritedAttribute(StrokeLineCap);
     ApplyLazyInheritedAttribute(StrokeLineJoin);
+    ApplyLazyInheritedAttribute(StrokeMiterLimit);
     ApplyLazyInheritedAttribute(StrokeOpacity);
     ApplyLazyInheritedAttribute(StrokeWidth);
+    ApplyLazyInheritedAttribute(Visibility);
 
 #undef ApplyLazyInheritedAttribute
 
@@ -316,6 +391,15 @@
     }
 }
 
+void SkSVGRenderContext::saveOnce() {
+    // The canvas only needs to be saved once, per local SkSVGRenderContext.
+    if (fCanvas->getSaveCount() == fCanvasSaveCount) {
+        fCanvas->save();
+    }
+
+    SkASSERT(fCanvas->getSaveCount() > fCanvasSaveCount);
+}
+
 void SkSVGRenderContext::applyClip(const SkSVGClip& clip) {
     if (clip.type() != SkSVGClip::Type::kIRI) {
         return;
@@ -335,10 +419,7 @@
     //
     // TODO: the two uses are exclusive, avoid canvas churn when non needed.
 
-    // Only save if needed
-    if (fCanvas->getSaveCount() == fCanvasSaveCount) {
-        fCanvas->save();
-    }
+    this->saveOnce();
 
     fCanvas->clipPath(clipPath, true);
     fClipPath.set(clipPath);
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGRenderContext.h b/src/third_party/skia/experimental/svg/model/SkSVGRenderContext.h
index 3cd38cb..156dc3c 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGRenderContext.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGRenderContext.h
@@ -8,14 +8,14 @@
 #ifndef SkSVGRenderContext_DEFINED
 #define SkSVGRenderContext_DEFINED
 
-#include "SkPaint.h"
-#include "SkPath.h"
-#include "SkRect.h"
-#include "SkSize.h"
-#include "SkSVGAttribute.h"
-#include "SkSVGIDMapper.h"
-#include "SkTLazy.h"
-#include "SkTypes.h"
+#include "experimental/svg/model/SkSVGAttribute.h"
+#include "experimental/svg/model/SkSVGIDMapper.h"
+#include "include/core/SkPaint.h"
+#include "include/core/SkPath.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkSize.h"
+#include "include/core/SkTypes.h"
+#include "src/core/SkTLazy.h"
 
 class SkCanvas;
 class SkSVGLength;
@@ -61,6 +61,7 @@
     SkSVGRenderContext(SkCanvas*, const SkSVGIDMapper&, const SkSVGLengthContext&,
                        const SkSVGPresentationContext&);
     SkSVGRenderContext(const SkSVGRenderContext&);
+    SkSVGRenderContext(const SkSVGRenderContext&, SkCanvas*);
     ~SkSVGRenderContext();
 
     const SkSVGLengthContext& lengthContext() const { return *fLengthContext; }
@@ -69,6 +70,7 @@
     const SkSVGPresentationContext& presentationContext() const { return *fPresentationContext; }
 
     SkCanvas* canvas() const { return fCanvas; }
+    void saveOnce();
 
     enum ApplyFlags {
         kLeaf = 1 << 0, // the target node doesn't have descendants
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGSVG.cpp b/src/third_party/skia/experimental/svg/model/SkSVGSVG.cpp
index 5929927..9a3c455 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGSVG.cpp
+++ b/src/third_party/skia/experimental/svg/model/SkSVGSVG.cpp
@@ -5,10 +5,10 @@
  * found in the LICENSE file.
  */
 
-#include "SkCanvas.h"
-#include "SkSVGRenderContext.h"
-#include "SkSVGSVG.h"
-#include "SkSVGValue.h"
+#include "experimental/svg/model/SkSVGRenderContext.h"
+#include "experimental/svg/model/SkSVGSVG.h"
+#include "experimental/svg/model/SkSVGValue.h"
+#include "include/core/SkCanvas.h"
 
 SkSVGSVG::SkSVGSVG() : INHERITED(SkSVGTag::kSvg) { }
 
@@ -33,7 +33,7 @@
     }
 
     if (!contentMatrix.isIdentity()) {
-        ctx->canvas()->save();
+        ctx->saveOnce();
         ctx->canvas()->concat(contentMatrix);
     }
 
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGSVG.h b/src/third_party/skia/experimental/svg/model/SkSVGSVG.h
index 0dfeb76..ccdd06f 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGSVG.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGSVG.h
@@ -8,9 +8,9 @@
 #ifndef SkSVGSVG_DEFINED
 #define SkSVGSVG_DEFINED
 
-#include "SkSVGContainer.h"
-#include "SkSVGTypes.h"
-#include "SkTLazy.h"
+#include "experimental/svg/model/SkSVGContainer.h"
+#include "experimental/svg/model/SkSVGTypes.h"
+#include "src/core/SkTLazy.h"
 
 class SkSVGLengthContext;
 
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGShape.cpp b/src/third_party/skia/experimental/svg/model/SkSVGShape.cpp
index 9351a2f..3426e74 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGShape.cpp
+++ b/src/third_party/skia/experimental/svg/model/SkSVGShape.cpp
@@ -5,14 +5,13 @@
  * found in the LICENSE file.
  */
 
-#include "SkSVGRenderContext.h"
-#include "SkSVGShape.h"
+#include "experimental/svg/model/SkSVGRenderContext.h"
+#include "experimental/svg/model/SkSVGShape.h"
 
 SkSVGShape::SkSVGShape(SkSVGTag t) : INHERITED(t) {}
 
 void SkSVGShape::onRender(const SkSVGRenderContext& ctx) const {
-    const SkPath::FillType fillType =
-        FillRuleToFillType(*ctx.presentationContext().fInherited.fFillRule.get());
+    const auto fillType = ctx.presentationContext().fInherited.fFillRule.get()->asFillType();
 
     // TODO: this approach forces duplicate geometry resolution in onDraw(); refactor to avoid.
     if (const SkPaint* fillPaint = ctx.fillPaint()) {
@@ -27,15 +26,3 @@
 void SkSVGShape::appendChild(sk_sp<SkSVGNode>) {
     SkDebugf("cannot append child nodes to an SVG shape.\n");
 }
-
-SkPath::FillType SkSVGShape::FillRuleToFillType(const SkSVGFillRule& fillRule) {
-    switch (fillRule.type()) {
-    case SkSVGFillRule::Type::kNonZero:
-        return SkPath::kWinding_FillType;
-    case SkSVGFillRule::Type::kEvenOdd:
-        return SkPath::kEvenOdd_FillType;
-    default:
-        SkASSERT(false);
-        return SkPath::kWinding_FillType;
-    }
-}
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGShape.h b/src/third_party/skia/experimental/svg/model/SkSVGShape.h
index f40609e..bfbad0e 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGShape.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGShape.h
@@ -8,8 +8,8 @@
 #ifndef SkSVGShape_DEFINED
 #define SkSVGShape_DEFINED
 
-#include "SkPath.h"
-#include "SkSVGTransformableNode.h"
+#include "experimental/svg/model/SkSVGTransformableNode.h"
+#include "include/core/SkPath.h"
 
 class SkSVGLengthContext;
 class SkPaint;
@@ -28,8 +28,6 @@
     virtual void onDraw(SkCanvas*, const SkSVGLengthContext&, const SkPaint&,
                         SkPath::FillType) const = 0;
 
-    static SkPath::FillType FillRuleToFillType(const SkSVGFillRule&);
-
 private:
     typedef SkSVGTransformableNode INHERITED;
 };
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGStop.cpp b/src/third_party/skia/experimental/svg/model/SkSVGStop.cpp
index 3abf505..b666262 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGStop.cpp
+++ b/src/third_party/skia/experimental/svg/model/SkSVGStop.cpp
@@ -5,9 +5,9 @@
  * found in the LICENSE file.
  */
 
-#include "SkSVGRenderContext.h"
-#include "SkSVGStop.h"
-#include "SkSVGValue.h"
+#include "experimental/svg/model/SkSVGRenderContext.h"
+#include "experimental/svg/model/SkSVGStop.h"
+#include "experimental/svg/model/SkSVGValue.h"
 
 SkSVGStop::SkSVGStop() : INHERITED(SkSVGTag::kStop) {}
 
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGStop.h b/src/third_party/skia/experimental/svg/model/SkSVGStop.h
index 5eb0442..f24b104 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGStop.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGStop.h
@@ -8,8 +8,8 @@
 #ifndef SkSVGStop_DEFINED
 #define SkSVGStop_DEFINED
 
-#include "SkSVGHiddenContainer.h"
-#include "SkSVGTypes.h"
+#include "experimental/svg/model/SkSVGHiddenContainer.h"
+#include "experimental/svg/model/SkSVGTypes.h"
 
 class SkSVGLengthContext;
 
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGTransformableNode.cpp b/src/third_party/skia/experimental/svg/model/SkSVGTransformableNode.cpp
index b2ad0b1..77be665 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGTransformableNode.cpp
+++ b/src/third_party/skia/experimental/svg/model/SkSVGTransformableNode.cpp
@@ -5,10 +5,10 @@
  * found in the LICENSE file.
  */
 
-#include "SkCanvas.h"
-#include "SkSVGRenderContext.h"
-#include "SkSVGTransformableNode.h"
-#include "SkSVGValue.h"
+#include "experimental/svg/model/SkSVGRenderContext.h"
+#include "experimental/svg/model/SkSVGTransformableNode.h"
+#include "experimental/svg/model/SkSVGValue.h"
+#include "include/core/SkCanvas.h"
 
 SkSVGTransformableNode::SkSVGTransformableNode(SkSVGTag tag)
     : INHERITED(tag)
@@ -17,7 +17,7 @@
 
 bool SkSVGTransformableNode::onPrepareToRender(SkSVGRenderContext* ctx) const {
     if (!fTransform.value().isIdentity()) {
-        ctx->canvas()->save();
+        ctx->saveOnce();
         ctx->canvas()->concat(fTransform);
     }
 
@@ -38,14 +38,6 @@
 }
 
 void SkSVGTransformableNode::mapToParent(SkPath* path) const {
-    if (fTransform.value().isIdentity()) {
-        return;
-    }
-
-    SkMatrix inv;
-    if (!fTransform.value().invert(&inv)) {
-        return;
-    }
-
-    path->transform(inv);
+    // transforms the path to parent node coordinates.
+    path->transform(fTransform.value());
 }
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGTransformableNode.h b/src/third_party/skia/experimental/svg/model/SkSVGTransformableNode.h
index f9cd668..32096e0 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGTransformableNode.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGTransformableNode.h
@@ -8,8 +8,8 @@
 #ifndef SkSVGTransformableNode_DEFINED
 #define SkSVGTransformableNode_DEFINED
 
-#include "SkMatrix.h"
-#include "SkSVGNode.h"
+#include "experimental/svg/model/SkSVGNode.h"
+#include "include/core/SkMatrix.h"
 
 class SkSVGTransformableNode : public SkSVGNode {
 public:
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGTypes.h b/src/third_party/skia/experimental/svg/model/SkSVGTypes.h
index 42a09b9..9ac7654 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGTypes.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGTypes.h
@@ -8,14 +8,15 @@
 #ifndef SkSVGTypes_DEFINED
 #define SkSVGTypes_DEFINED
 
-#include "SkColor.h"
-#include "SkMatrix.h"
-#include "SkPoint.h"
-#include "SkRect.h"
-#include "SkScalar.h"
-#include "SkString.h"
-#include "SkTDArray.h"
-#include "SkTypes.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPath.h"
+#include "include/core/SkPoint.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkScalar.h"
+#include "include/core/SkString.h"
+#include "include/core/SkTypes.h"
+#include "include/private/SkTDArray.h"
 
 template <typename T>
 class SkSVGPrimitiveTypeWrapper {
@@ -238,8 +239,68 @@
 
     Type type() const { return fType; }
 
+    SkPath::FillType asFillType() const {
+        SkASSERT(fType != Type::kInherit); // should never be called for unresolved values.
+        return fType == Type::kEvenOdd ? SkPath::kEvenOdd_FillType : SkPath::kWinding_FillType;
+    }
+
 private:
     Type fType;
 };
 
+class SkSVGVisibility {
+public:
+    enum class Type {
+        kVisible,
+        kHidden,
+        kCollapse,
+        kInherit,
+    };
+
+    constexpr SkSVGVisibility() : fType(Type::kVisible) {}
+    constexpr explicit SkSVGVisibility(Type t) : fType(t) {}
+
+    SkSVGVisibility(const SkSVGVisibility&)            = default;
+    SkSVGVisibility& operator=(const SkSVGVisibility&) = default;
+
+    bool operator==(const SkSVGVisibility& other) const { return fType == other.fType; }
+    bool operator!=(const SkSVGVisibility& other) const { return !(*this == other); }
+
+    Type type() const { return fType; }
+
+private:
+    Type fType;
+};
+
+class SkSVGDashArray {
+public:
+    enum class Type {
+        kNone,
+        kDashArray,
+        kInherit,
+    };
+
+    SkSVGDashArray()                : fType(Type::kNone) {}
+    explicit SkSVGDashArray(Type t) : fType(t) {}
+    explicit SkSVGDashArray(SkTDArray<SkSVGLength>&& dashArray)
+        : fType(Type::kDashArray)
+        , fDashArray(std::move(dashArray)) {}
+
+    SkSVGDashArray(const SkSVGDashArray&)            = default;
+    SkSVGDashArray& operator=(const SkSVGDashArray&) = default;
+
+    bool operator==(const SkSVGDashArray& other) const {
+        return fType == other.fType && fDashArray == other.fDashArray;
+    }
+    bool operator!=(const SkSVGDashArray& other) const { return !(*this == other); }
+
+    Type type() const { return fType; }
+
+    const SkTDArray<SkSVGLength>& dashArray() const { return fDashArray; }
+
+private:
+    Type fType;
+    SkTDArray<SkSVGLength> fDashArray;
+};
+
 #endif // SkSVGTypes_DEFINED
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGUse.cpp b/src/third_party/skia/experimental/svg/model/SkSVGUse.cpp
new file mode 100644
index 0000000..9a1d2e4
--- /dev/null
+++ b/src/third_party/skia/experimental/svg/model/SkSVGUse.cpp
@@ -0,0 +1,86 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "experimental/svg/model/SkSVGUse.h"
+
+#include "experimental/svg/model/SkSVGRenderContext.h"
+#include "experimental/svg/model/SkSVGValue.h"
+#include "include/core/SkCanvas.h"
+
+SkSVGUse::SkSVGUse() : INHERITED(SkSVGTag::kUse) {}
+
+void SkSVGUse::appendChild(sk_sp<SkSVGNode>) {
+    SkDebugf("cannot append child nodes to this element.\n");
+}
+
+void SkSVGUse::setHref(const SkSVGStringType& href) {
+    fHref = href;
+}
+
+void SkSVGUse::setX(const SkSVGLength& x) {
+    fX = x;
+}
+
+void SkSVGUse::setY(const SkSVGLength& y) {
+    fY = y;
+}
+
+void SkSVGUse::onSetAttribute(SkSVGAttribute attr, const SkSVGValue& v) {
+    switch (attr) {
+    case SkSVGAttribute::kHref:
+        if (const auto* href = v.as<SkSVGStringValue>()) {
+            this->setHref(*href);
+        }
+        break;
+    case SkSVGAttribute::kX:
+        if (const auto* x = v.as<SkSVGLengthValue>()) {
+            this->setX(*x);
+        }
+        break;
+    case SkSVGAttribute::kY:
+        if (const auto* y = v.as<SkSVGLengthValue>()) {
+            this->setY(*y);
+        }
+        break;
+    default:
+        this->INHERITED::onSetAttribute(attr, v);
+    }
+}
+
+bool SkSVGUse::onPrepareToRender(SkSVGRenderContext* ctx) const {
+    if (fHref.value().isEmpty() || !INHERITED::onPrepareToRender(ctx)) {
+        return false;
+    }
+
+    if (fX.value() || fY.value()) {
+        // Restored when the local SkSVGRenderContext leaves scope.
+        ctx->saveOnce();
+        ctx->canvas()->translate(fX.value(), fY.value());
+    }
+
+    // TODO: width/height override for <svg> targets.
+
+    return true;
+}
+
+void SkSVGUse::onRender(const SkSVGRenderContext& ctx) const {
+    const auto* ref = ctx.findNodeById(fHref);
+    if (!ref) {
+        return;
+    }
+
+    ref->render(ctx);
+}
+
+SkPath SkSVGUse::onAsPath(const SkSVGRenderContext& ctx) const {
+    const auto* ref = ctx.findNodeById(fHref);
+    if (!ref) {
+        return SkPath();
+    }
+
+    return ref->asPath(ctx);
+}
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGUse.h b/src/third_party/skia/experimental/svg/model/SkSVGUse.h
new file mode 100644
index 0000000..2e9197d
--- /dev/null
+++ b/src/third_party/skia/experimental/svg/model/SkSVGUse.h
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkSVGUse_DEFINED
+#define SkSVGUse_DEFINED
+
+#include "experimental/svg/model/SkSVGTransformableNode.h"
+#include "experimental/svg/model/SkSVGTypes.h"
+
+/**
+ * Implements support for <use> (reference) elements.
+ * (https://www.w3.org/TR/SVG/struct.html#UseElement)
+ */
+class SkSVGUse final : public SkSVGTransformableNode {
+public:
+    ~SkSVGUse() override = default;
+
+    static sk_sp<SkSVGUse> Make() { return sk_sp<SkSVGUse>(new SkSVGUse()); }
+
+    void appendChild(sk_sp<SkSVGNode>) override;
+
+    void setHref(const SkSVGStringType&);
+    void setX(const SkSVGLength&);
+    void setY(const SkSVGLength&);
+
+protected:
+    void onSetAttribute(SkSVGAttribute, const SkSVGValue&) override;
+
+    bool onPrepareToRender(SkSVGRenderContext*) const override;
+    void onRender(const SkSVGRenderContext&) const override;
+    SkPath onAsPath(const SkSVGRenderContext&) const override;
+
+private:
+    SkSVGUse();
+
+    SkSVGStringType    fHref;
+    SkSVGLength        fX = SkSVGLength(0);
+    SkSVGLength        fY = SkSVGLength(0);
+
+    typedef SkSVGTransformableNode INHERITED;
+};
+
+#endif // SkSVGUse_DEFINED
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGValue.cpp b/src/third_party/skia/experimental/svg/model/SkSVGValue.cpp
index aec49d2..0b9d9c1 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGValue.cpp
+++ b/src/third_party/skia/experimental/svg/model/SkSVGValue.cpp
@@ -5,5 +5,3 @@
  * found in the LICENSE file.
  */
 
-#include "SkSVGTypes.h"
-#include "SkSVGValue.h"
diff --git a/src/third_party/skia/experimental/svg/model/SkSVGValue.h b/src/third_party/skia/experimental/svg/model/SkSVGValue.h
index 8e58b06..f0b7207 100644
--- a/src/third_party/skia/experimental/svg/model/SkSVGValue.h
+++ b/src/third_party/skia/experimental/svg/model/SkSVGValue.h
@@ -8,17 +8,19 @@
 #ifndef SkSVGValue_DEFINED
 #define SkSVGValue_DEFINED
 
-#include "SkColor.h"
-#include "SkMatrix.h"
-#include "SkPath.h"
-#include "SkSVGTypes.h"
-#include "SkTypes.h"
+#include "experimental/svg/model/SkSVGTypes.h"
+#include "include/core/SkColor.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPath.h"
+#include "include/core/SkTypes.h"
+#include "include/private/SkNoncopyable.h"
 
 class SkSVGValue : public SkNoncopyable {
 public:
     enum class Type {
         kClip,
         kColor,
+        kDashArray,
         kFillRule,
         kLength,
         kLineCap,
@@ -31,6 +33,7 @@
         kString,
         kTransform,
         kViewBox,
+        kVisibility,
     };
 
     Type type() const { return fType; }
@@ -71,20 +74,22 @@
     typedef SkSVGValue INHERITED;
 };
 
-using SkSVGClipValue         = SkSVGWrapperValue<SkSVGClip         , SkSVGValue::Type::kClip     >;
-using SkSVGColorValue        = SkSVGWrapperValue<SkSVGColorType    , SkSVGValue::Type::kColor    >;
-using SkSVGFillRuleValue     = SkSVGWrapperValue<SkSVGFillRule     , SkSVGValue::Type::kFillRule >;
-using SkSVGLengthValue       = SkSVGWrapperValue<SkSVGLength       , SkSVGValue::Type::kLength   >;
-using SkSVGPathValue         = SkSVGWrapperValue<SkPath            , SkSVGValue::Type::kPath     >;
-using SkSVGTransformValue    = SkSVGWrapperValue<SkSVGTransformType, SkSVGValue::Type::kTransform>;
-using SkSVGViewBoxValue      = SkSVGWrapperValue<SkSVGViewBoxType  , SkSVGValue::Type::kViewBox  >;
-using SkSVGPaintValue        = SkSVGWrapperValue<SkSVGPaint        , SkSVGValue::Type::kPaint    >;
-using SkSVGLineCapValue      = SkSVGWrapperValue<SkSVGLineCap      , SkSVGValue::Type::kLineCap  >;
-using SkSVGLineJoinValue     = SkSVGWrapperValue<SkSVGLineJoin     , SkSVGValue::Type::kLineJoin >;
-using SkSVGNumberValue       = SkSVGWrapperValue<SkSVGNumberType   , SkSVGValue::Type::kNumber   >;
-using SkSVGPointsValue       = SkSVGWrapperValue<SkSVGPointsType   , SkSVGValue::Type::kPoints   >;
-using SkSVGStringValue       = SkSVGWrapperValue<SkSVGStringType   , SkSVGValue::Type::kString   >;
+using SkSVGClipValue         = SkSVGWrapperValue<SkSVGClip         , SkSVGValue::Type::kClip      >;
+using SkSVGColorValue        = SkSVGWrapperValue<SkSVGColorType    , SkSVGValue::Type::kColor     >;
+using SkSVGFillRuleValue     = SkSVGWrapperValue<SkSVGFillRule     , SkSVGValue::Type::kFillRule  >;
+using SkSVGLengthValue       = SkSVGWrapperValue<SkSVGLength       , SkSVGValue::Type::kLength    >;
+using SkSVGPathValue         = SkSVGWrapperValue<SkPath            , SkSVGValue::Type::kPath      >;
+using SkSVGTransformValue    = SkSVGWrapperValue<SkSVGTransformType, SkSVGValue::Type::kTransform >;
+using SkSVGViewBoxValue      = SkSVGWrapperValue<SkSVGViewBoxType  , SkSVGValue::Type::kViewBox   >;
+using SkSVGPaintValue        = SkSVGWrapperValue<SkSVGPaint        , SkSVGValue::Type::kPaint     >;
+using SkSVGLineCapValue      = SkSVGWrapperValue<SkSVGLineCap      , SkSVGValue::Type::kLineCap   >;
+using SkSVGLineJoinValue     = SkSVGWrapperValue<SkSVGLineJoin     , SkSVGValue::Type::kLineJoin  >;
+using SkSVGNumberValue       = SkSVGWrapperValue<SkSVGNumberType   , SkSVGValue::Type::kNumber    >;
+using SkSVGPointsValue       = SkSVGWrapperValue<SkSVGPointsType   , SkSVGValue::Type::kPoints    >;
+using SkSVGStringValue       = SkSVGWrapperValue<SkSVGStringType   , SkSVGValue::Type::kString    >;
 using SkSVGSpreadMethodValue = SkSVGWrapperValue<SkSVGSpreadMethod ,
                                                  SkSVGValue::Type::kSpreadMethod>;
+using SkSVGVisibilityValue   = SkSVGWrapperValue<SkSVGVisibility   , SkSVGValue::Type::kVisibility>;
+using SkSVGDashArrayValue    = SkSVGWrapperValue<SkSVGDashArray    , SkSVGValue::Type::kDashArray >;
 
 #endif // SkSVGValue_DEFINED
diff --git a/src/third_party/skia/experimental/tools/generate-unicode-test-txt b/src/third_party/skia/experimental/tools/generate-unicode-test-txt
index 76de70e..944da31 100755
--- a/src/third_party/skia/experimental/tools/generate-unicode-test-txt
+++ b/src/third_party/skia/experimental/tools/generate-unicode-test-txt
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#! /usr/bin/env python
 
 # Copyright 2016 Google Inc.
 #
@@ -7,58 +7,80 @@
 
 import array, zlib, base64, sys
 
-## Source: http://www.unicode.org/Public/9.0.0/ucd/UnicodeData.txt
+#   import array, zlib, base64, sys, unicodedata
+#   def codepoints():
+#       for i in range(0x110000):
+#           try:
+#               u = ('\\U%08x' % i).decode('unicode-escape')
+#               n = unicodedata.name(u)
+#               c = unicodedata.category(u)
+#               if c[0] == 'C' or n.startswith('VARIATION '):
+#                   continue
+#               yield i
+#           except ValueError:
+#               pass
+#   def make_unicode_data():
+#       last = 0
+#       a = array.array('I')
+#       for i in codepoints():
+#         a.append(i - last - 1)
+#         last = i
+#       return base64.b64encode(zlib.compress(a.tostring(), 9))
+#   if __name__ == '__main__':
+#       b = make_unicode_data()
+#       for i in range(0, len(b), 76):
+#           print '  %s' % b[i:i+76]
 valid_codepoint_data = '''
-  eNrt3buPG0UcwHHPeNf22b67hPBIUpAc0iEgElAgIkSRXEkXUVOcKKj5F6BFQpSUqSgpkUAU+Rco
-  +Av4PyLicD6ZzT5mZmfmtzPz/UhWFJ/X8356H/dmkHJGFgAAAADe6I73q55j1NXLJ0VRAAASHzN0
-  ouOcaol/zuPyKmJYdct7G9oMANqv01gKGScFpbUusN0ogbheCPSVb9KUkfFcQAceQ9XA3+YOfVJX
-  nHdrtaon3FBprA3SWwnnc9u/uuO4trjuymnZ8r3LkfHeWI4pKsIYZJOXLvWrKw27409H1tllo0ym
-  3v7H5GVb3FeNOhyyH1gPpHHekw/zg/dV4715x3eYqCzjscuLRaD5em05FsVo2z6+ez4iHcuW92vH
-  +rnynO6p5b9r2zXJ/2VHW7CJ18kE8zbW2tAkPZXg+tQlHF/lMg8cX9N5kh6IY9Vz7FAYC4cy3Bay
-  5qoEwjxvKXd1ML7bzskO68GY9qEG2nNfXdOO/cR9lv1B5z85tJdU80pFPvac5gK0tqV6xm+PAFDS
-  fHno3E3XfaVU0lhCvivqddGk82IeKZwFRR21/tDGAAAAkMtaomQu58H27TGEvO7zyPP3bUemXY34
-  HoRbqzYtPH/Otk34CgPDVgnFtaa4Wq0Fw7bdP68cPp/KvEZHHt9DiHWOlk2/Xuq8lj1kmd/ndIB6
-  vBCoAxdUn0n2faz5kcN8XLr+llb3HyZcdxTreSBb7M0AkFyf68ziqxqvqcU/ZUrgWB0gLn1hqMD5
-  gGnUTT3xdiO5Tr85gfI8pUrDQkUWAAAAZLt2i+mOxWffoCgBAAAAAAAAAAAAdNCFh79ney7s0O/J
-  dxv/v5FwHVHEHXipTrQNlPCspP09IE8Ch3Pk2N/k8DfI+JzxMhvcZxXw767l50u/nou+PgzuD8n6
-  bQzuHUh/mFo93lLuAGh7AAw9u1N4BnxJHQAAAAAAAMD/5fz78BHFCwBRvE4WIGMrsgCJGjo35lGG
-  aTY9Jz/359XSb/nJF6l6wjUAfm2EwuVc/DBjl0ufP5X4psZ1T017/hziux05vLVlHdEOdbbEexes
-  qcpFMu1bf3sgvyab9LryjLoEADmOf5D1bs/f2q4Nj3X9uup4TzX+znWoZblJFgBAMm4Unv5c58Lv
-  OR73muHncjpXQAX8ripweMivP6J+oERzyzHa5P25Y7+/9jBXiNWOQ4xfY77TdU71Dk2gGPXAHCnV
-  vgoyfdquDn2UaFq/p/46OY0c3tT6qZj3B07pGU1ScZ3ius21zn7AEAQBpmuHRSbtrJT4NOV2Ldbu
-  WpqfaL4AMhTqHkJD12D83DNPSO13EnWw9tYRwoH73OPjAOUxhTV0zH2fXXofZ16XfM+zczkfxbTO
-  K6F+q7IsQ5M+Y1l4v3o/o3aa6z0TJfb9Y/ZpscbYZlvv24t/wpRr0MOM0nKcUVq6xrRLwUXGdyxw
-  JjFXNXVK1l87EWyzTTne7821a5jys3a5f7fMvNP3MLMRruNSLgbSojymz+bYRUFtoXbME2XYxkKt
-  8UzuS6Uc235b3PVVHtSO/Urb+voHuuJoY//uxXnk/UzPvfiFeUFU1Fv3OZPLWH6Ldv7Sp5HiM2bv
-  eezexSV7Rt7s1srPCsjPpUEaU8wG1zhL3C9V+joVPbEy+IILzwAAAAAAHn1DFiSrbW9hQ7YA1/7k
-  4U8AAAAAAGDC/uKCSgAAgGu/n5EHAAAgP5L3GTW9bm1/ve6lUDy7rtvjtJ9x+aI81A0bPu/n+S3X
-  Tr4i5fNCfTy7/vGL173b1AMAAAAgRcfn//37nAvekuGyxjdZypvukw3d4+mrW5QRkJsp7wVrigcF
-  e4ssaPUHWRCMr+es/EhWesftm4fzRs+6n8ehHL5TUR5WdVKPqMNKOO6q4zNz6gAAsOYHQH8EAAAA
-  ZKTt9kpj9jqf9Jzg5GMPtW+e3veM7L+XlDXgc837PllozPS8z/21xE8r/32nqcN+VFuE3fY72+61
-  uEqXmr36W2tbWKrls2pm9zuvMoybS7rGlr8KFMYnV/+eJPZjZUX3MClboTFFCR0biss5t5KX7Zd2
-  jkOJ/c5nAmEeZ1gv9svJXxkuAAAAAACw4rJP0LdfdkSWZmVLFnj3wPLzue+Zrgw/t8gkHb59PeJY
-  ZZAm7fk7fdZvX49j+fDF69Fz+iYAABDHP/Vm9jbZIOpfwWoh0w==
+  eNrt3LmOHEUYAOCt7p5jL89iAbZJwJY4ExKTIiJChAh4CgSvgIgREjEJEa+ARAQxEW/gR4GRbDGa
+  7Z4+pq+q/j5p5fVMd3XVX3fPTr99wVSedjgnCBsAANyTlby2qllX9722tlYH4DqieTKG+etV3tYJ
+  t5ntiNcqWxu9NnCbW+r6yLpQnaewn1rS3pFpPVhQWVcL7Dd/GVt6m1PGHL/WDfMXGsZlqLyHmvfy
+  DjGsyvN+3V6cuG42wrhRVd5i4jiX/ZtVnFeW1309bUrS3fS4Pw8tyxlmEMsu7auqDPvzd2ekuYuo
+  358Tw7K8b4/abh/9/66mLPmJ8uYHr4ej1/KKNJooWuYjezlXDLGOW7dob2P02zZph5o4ti3D5uj1
+  dce2t23Y9lOId9byvKqYbyrafZt87SKN60WDsaltOS5L2mE2YH76vi+ZXwyr6Tolq8ljceLcums8
+  PPj9ZiF7uGKCa75bUp/hYF5tu+Y5rN9z2n2o6Zuhh33qq+OeXTDkWB1zPykii00Y6dz3dQu45yrC
+  POeqDaDx2qju79u63q+JpYxLiHvQrhetmOi6Y63H1qq4d9dCAABAIvuFlO162DuPtQ+47Dm9mzPL
+  Hs5IZ86yRPK37vm4tn2hr2tQbxtRXleqq9QUnyH38XfadcfHsk7JRp7PhzDWvev1gG3MOiIdYeZx
+  H3qN9JUmMMvxa6n78LZ5/Tzx9pYvpN7rfDmjvNwaBmGW3hQCYIL9W5ZYfsPRz9zyH7MwwbnZAHk5
+  dY3Qc1nGui+fwv3/uwn6TlldjnF/+tEM4r27gHo+ZwYASHM/UOVJi2PfUJUAAFEIPadVjJzfqZ+9
+  EmZWl1XPmD8ltc8s85nWeWh5rO+kAgAApKvpnu+3iMsY5J2F20SY56tE62L/LLC7gdPvMp6k8B7N
+  fWEOS8aNEEDv3mp5fLHweBnrh+F5ZPMVw3difbZvPCwzt2fP3qhrQN8DAAAAAAAAAAAAAAAAAAAA
+  AAAAAAAAAAAAAKCDKyEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIwnMhAAAAAOBInnDZLlUvwChe
+  n/j6WU/pbEfO91bTEV9m5dsEylA0PG6t/y9O273ReqZtl2auJ7puLvSdhA595R3jVec9QTZx+Yx3
+  /3tc8tqLSMvStF2tVTsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA
+  JzcDpl0kEJ/iqTYCxCVTbmbsvZZrktVI+QoVr4Wj94MqjIplHEA87qzhk/RBx/MeNjxufeK9yxnF
+  IQyYVjHw9UhLIQQsUN5y7m3yet5xzL/tOO+PNa4PMV+dk2bX9dEzzX4xVpHPcbkqHKw9NPE80nL+
+  oK128vGM9oM3I177kwT2wFPvhT4yvDKBpuvgr/Pq82O7NxQO5pxshOuc8mvC8+x+vfRnRUxWLWI3
+  ZvsqWo7l2wbHbCZu798nOnZNsWbMRu4/S6zXPj2a8IOwsMA/KDseqz/daYMAAABz97MQzMbt0f9/
+  vBYTAAAAYL7++UUMIDVXM86bZ3s1sxWC2fBd03J/CMFg+nrGyU9C2TvPYKmPTXYw12dnxi/UnKM+
+  7scgO6MNh4nzXvX8zlwbALBPB4xHsXkcV3Y9U3Jevmlx7Gri/nr9cl+Wvdy7le3f9ve5989leHJ0
+  7+CqJL3v/vuZy9eYHzQ45vdb7RUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+  AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+  AAAAAAAAAAAAAAAAAIB2PhQCAAAAAAAAAAAAAAAAAAAAYAB/fyYGAMA4/gXQcRfM
 '''
+def codepoints():
+    i = 0
+    for increment in array.array('I', zlib.decompress(
+        base64.b64decode(valid_codepoint_data))).tolist():
+        i += increment + 1
+        yield i
 if sys.version_info[0] < 3:
     def to_unicode(i):
-        return ('\U%08x' % i).decode('unicode-escape').encode('UTF-8')
+        return ('\\U%08x' % i).decode('unicode-escape').encode('UTF-8')
 else:
     def to_unicode(i):
         return chr(i)
-o = sys.stdout
-o.write(to_unicode(0xFEFF))
-pack = array.array('I', zlib.decompress(
-    base64.b64decode(valid_codepoint_data)))
-i = 0
-last_row = -1
-plist = pack.tolist()
-for increment in plist:
-    i += increment + 1
-    row = i - (i & 63)
-    if last_row != row:
-        if row:
-            o.write('\n' if row % 1024 else '\n\n')
-        o.write('U+%06x ' % row)
-        last_row = row
-    o.write(' ' + to_unicode(i))
-o.write('\n')
+if __name__ == '__main__':
+    o = sys.stdout
+    o.write(to_unicode(0xFEFF))
+    last_row = -1
+    for i in codepoints():
+        row = i - (i & 63)
+        if last_row != row:
+            if row:
+                o.write('\n' if row % 1024 else '\n\n')
+            o.write('U+%06x ' % row)
+            last_row = row
+        o.write(' ' + to_unicode(i))
+    o.write('\n')
diff --git a/src/third_party/skia/experimental/tools/gerrit_percent_encode b/src/third_party/skia/experimental/tools/gerrit_percent_encode
new file mode 100755
index 0000000..f850c08
--- /dev/null
+++ b/src/third_party/skia/experimental/tools/gerrit_percent_encode
@@ -0,0 +1,17 @@
+#! /usr/bin/env python
+# Copyright 2019 Google LLC.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+import re
+import sys
+def gerrit_percent_encode(value):
+    '''
+    https://gerrit-review.googlesource.com/Documentation/user-upload.html
+    "To avoid confusion in parsing the git ref, at least the following characters
+    must be percent-encoded: " %^@.~-+_:/!". Note that some of the reserved
+    characters (like tilde) are not escaped in the standard URL encoding rules..."
+    '''
+    good = re.compile('^[A-Za-z0-9]$')
+    return ''.join(c if good.match(c) else '%%%02X' % ord(c) for c in value)
+if __name__ == '__main__':
+    sys.stdout.write(gerrit_percent_encode(' '.join(sys.argv[1:])) + '\n')
diff --git a/src/third_party/skia/experimental/tools/mskp_parser.py b/src/third_party/skia/experimental/tools/mskp_parser.py
index 051e579..e9698f2 100755
--- a/src/third_party/skia/experimental/tools/mskp_parser.py
+++ b/src/third_party/skia/experimental/tools/mskp_parser.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 # Copyright 2016 Google Inc.
-# 
+#
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
diff --git a/src/third_party/skia/experimental/tools/pdf-comparison.py b/src/third_party/skia/experimental/tools/pdf-comparison.py
new file mode 100755
index 0000000..d704695
--- /dev/null
+++ b/src/third_party/skia/experimental/tools/pdf-comparison.py
@@ -0,0 +1,348 @@
+#!/usr/bin/env python
+# Copyright 2019 Google LLC.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+'''
+This tool compares the PDF output of Skia's DM tool of two commits.
+
+It relies on pdfium_test being in the PATH.  To build:
+
+mkdir -p ~/src/pdfium
+cd ~/src/pdfium
+gclient config --unmanaged https://pdfium.googlesource.com/pdfium.git
+gclient sync
+cd pdfium
+gn gen out/default --args='pdf_enable_xfa=false pdf_enable_v8=false pdf_is_standalone=true'
+ninja -C out/default pdfium_test
+cp out/default/pdfium_test ~/bin/
+'''
+
+import os
+import re
+import shutil
+import subprocess
+import sys
+import tempfile
+import threading
+
+EXTRA_GN_ARGS = os.environ.get('PDF_COMPARISON_GN_ARGS', '')
+
+REFERENCE_BACKEND = 'gl' if 'PDF_COMPARISON_NOGPU' not in os.environ else '8888'
+
+DPI = float(os.environ.get('PDF_COMPARISON_DPI', 72))
+
+PDF_CONFIG = 'pdf' if 'PDF_COMPARISON_300DPI' not in os.environ else 'pdf300'
+
+BAD_TESTS = [
+  'image-cacherator-from-picture',
+  'image-cacherator-from-raster',
+  'mixershader',
+  'shadermaskfilter_image',
+  'tilemode_decal',
+]
+
+NINJA = 'ninja'
+
+PDFIUM_TEST = 'pdfium_test'
+
+NUM_THREADS = int(os.environ.get('PDF_COMPARISON_THREADS', 40))
+
+SOURCES = ['gm']
+
+def test_exe(cmd):
+  with open(os.devnull, 'w') as o:
+    try:
+      subprocess.call([cmd], stdout=o, stderr=o)
+    except OSError:
+      return False
+  return True
+
+def print_cmd(cmd, o):
+  m = re.compile('[^A-Za-z0-9_./-]')
+  o.write('+ ')
+  for c in cmd:
+    if m.search(c) is not None:
+      o.write(repr(c) + ' ')
+    else:
+      o.write(c + ' ')
+  o.write('\n')
+  o.flush()
+
+def check_call(cmd, **kwargs):
+  print_cmd(cmd, sys.stdout)
+  return subprocess.check_call(cmd, **kwargs)
+
+def check_output(cmd, **kwargs):
+  print_cmd(cmd, sys.stdout)
+  return subprocess.check_output(cmd, **kwargs)
+
+def remove(*paths):
+  for path in paths:
+    os.remove(path)
+
+def timeout(deadline, cmd):
+  #print_cmd(cmd, sys.stdout)
+  with open(os.devnull, 'w') as o:
+    proc = subprocess.Popen(cmd, stdout=o, stderr=subprocess.STDOUT)
+    timer = threading.Timer(deadline, proc.terminate)
+    timer.start()
+    proc.wait()
+    timer.cancel()
+    return proc.returncode
+
+def is_same(path1, path2):
+  if not os.path.isfile(path1) or not os.path.isfile(path2):
+    return os.path.isfile(path1) == os.path.isfile(path2)
+  with open(path1, 'rb') as f1:
+    with open(path2, 'rb') as f2:
+      while True:
+        c1, c2 = f1.read(4096), f2.read(4096)
+        if c1 != c2:
+          return False
+        if not c1:
+          return True
+
+
+def getfilesoftype(directory, ending):
+  for dirpath, _, filenames in os.walk(directory):
+    rp = os.path.normpath(os.path.relpath(dirpath, directory))
+    for f in filenames:
+      if f.endswith(ending):
+        yield os.path.join(rp, f)
+
+def get_common_paths(dirs, ext):
+  return sorted(list(
+    set.intersection(*(set(getfilesoftype(d, ext)) for d in dirs))))
+
+def printable_path(d):
+  if 'TMPDIR' in os.environ:
+    return d.replace(os.path.normpath(os.environ['TMPDIR']) + '/', '$TMPDIR/')
+  return d
+
+def spawn(cmd):
+  with open(os.devnull, 'w') as o:
+    subprocess.Popen(cmd, stdout=o, stderr=o)
+
+def sysopen(arg):
+  plat = sys.platform
+  if plat.startswith('darwin'):
+    spawn(["open", arg])
+  elif plat.startswith('win'):
+    # pylint: disable=no-member
+    os.startfile(arg)
+  else:
+    spawn(["xdg-open", arg])
+
+HTML_HEAD = '''
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<title>DIFF</title>
+<style>
+body{
+background-size:16px 16px;
+background-color:rgb(230,230,230);
+background-image:
+linear-gradient(45deg,rgba(255,255,255,.2) 25%,transparent 25%,transparent 50%,
+rgba(255,255,255,.2) 50%,rgba(255,255,255,.2) 75%,transparent 75%,transparent)}
+div.r{position:relative;left:0;top:0}
+table{table-layout:fixed;width:100%}
+img.s{max-width:100%;max-height:320;left:0;top:0}
+img.b{position:absolute;mix-blend-mode:difference}
+</style>
+<script>
+function r(c,e,n,g){
+t=document.getElementById("t");
+function ce(t){return document.createElement(t);}
+function ct(n){return document.createTextNode(n);}
+function ac(u,v){u.appendChild(v);}
+function cn(u,v){u.className=v;}
+function it(s){ td=ce("td"); a=ce("a"); a.href=s; img=ce("img"); img.src=s;
+        cn(img,"s"); ac(a,img); ac(td,a); return td; }
+tr=ce("tr"); td=ce("td"); td.colSpan="4"; ac(td, ct(n)); ac(tr,td);
+ac(t,tr); tr=ce("tr"); td=ce("td"); dv=ce("div"); cn(dv,"r");
+img=ce("img"); img.src=c; cn(img,"s"); ac(dv,img); img=ce("img");
+img.src=e; cn(img,"s b"); ac(dv,img); ac(td,dv); ac(tr,td);
+ac(tr,it(c)); ac(tr,it(e)); ac(tr,it(g)); ac(t,tr); }
+document.addEventListener('DOMContentLoaded',function(){
+'''
+
+HTML_TAIL = '''];
+for(i=0;i<z.length;i++){
+r(c+z[i][0],e+z[i][0],z[i][2],c+z[i][1]);}},false);
+</script></head><body><table id="t">
+<tr><th>BEFORE-AFTER DIFF</th>
+<th>BEFORE</th><th>AFTER</th>
+<th>REFERENCE</th></tr>
+</table></body></html>'''
+
+def shard(fn, arglist):
+  jobs = [[arg for j, arg in enumerate(arglist) if j % NUM_THREADS == i]
+          for i in range(NUM_THREADS)]
+  results = []
+  def do_shard(*args):
+    for arg in args:
+      results.append(fn(arg))
+  thread_list = []
+  for job in jobs:
+    t = threading.Thread(target=do_shard, args=job)
+    t.start()
+    thread_list += [t]
+  for t in thread_list:
+    t.join()
+  return results
+
+def shardsum(fn, arglist):
+  'return the number of True results returned by fn(arg) for arg in arglist.'
+  return sum(1 for result in shard(fn, arglist) if result)
+
+def checkout_worktree(checkoutable):
+  directory = os.path.join(tempfile.gettempdir(), 'skpdf_control_tree')
+  commit = check_output(['git', 'rev-parse', checkoutable]).strip()
+  if os.path.isdir(directory):
+    try:
+      check_call(['git', 'checkout', commit], cwd=directory)
+      return directory
+    except subprocess.CalledProcessError:
+      shutil.rmtree(directory)
+  check_call(['git', 'worktree', 'add', '-f', directory, commit])
+  return directory
+
+def build_skia(directory, executable):
+  args = ('--args=is_debug=false'
+          ' extra_cflags=["-DSK_PDF_LESS_COMPRESSION",'
+          ' "-DSK_PDF_BASE85_BINARY"] ')
+  if test_exe('ccache'):
+    args += ' cc_wrapper="ccache"'
+  args += EXTRA_GN_ARGS
+  build_dir = directory + '/out/pdftest'
+  check_call([sys.executable, 'bin/sync'], cwd=directory)
+  check_call([directory + '/bin/gn', 'gen', 'out/pdftest', args],
+             cwd=directory)
+  check_call([NINJA, executable], cwd=build_dir)
+  return os.path.join(build_dir, executable)
+
+def build_and_run_dm(directory, data_dir):
+  dm = build_skia(directory, 'dm')
+  for source in SOURCES:
+    os.makedirs(os.path.join(data_dir, PDF_CONFIG, source))
+  dm_args = [dm, '--src'] + SOURCES + ['--config', PDF_CONFIG, '-w', data_dir]
+  if BAD_TESTS:
+    dm_args += ['-m'] + ['~^%s$' % x for x in BAD_TESTS]
+  check_call(dm_args, cwd=directory)
+  return dm
+
+def rasterize(path):
+  ret = timeout(30, [PDFIUM_TEST, '--png', '--scale=%g' % (DPI / 72.0), path])
+  if ret != 0:
+    sys.stdout.write(
+      '\nTIMEOUT OR ERROR [%d] "%s"\n' % (ret, printable_path(path)))
+    return
+  assert os.path.isfile(path + '.0.png')
+
+def main(control_commitish):
+  assert os.pardir == '..'  and '/' in [os.sep, os.altsep]
+  assert test_exe(NINJA)
+  assert test_exe(PDFIUM_TEST)
+  os.chdir(os.path.dirname(__file__) + '/../..')
+  control_worktree = checkout_worktree(control_commitish)
+  tmpdir = tempfile.mkdtemp(prefix='skpdf_')
+  exp = tmpdir + '/experim'
+  con = tmpdir + '/control'
+  build_and_run_dm(os.curdir, exp)
+  dm = build_and_run_dm(control_worktree, con)
+  image_diff_metric = build_skia(control_worktree, 'image_diff_metric')
+
+  out = sys.stdout
+  common_paths = get_common_paths([con, exp], '.pdf')
+  out.write('\nNumber of PDFs: %d\n\n' % len(common_paths))
+  def compare_identical(path):
+    cpath, epath = (os.path.join(x, path) for x in (con, exp))
+    if is_same(cpath, epath):
+      remove(cpath, epath)
+      return True
+    return False
+  identical_count = shardsum(compare_identical, common_paths)
+  out.write('Number of identical PDFs: %d\n\n' % identical_count)
+
+  differing_paths = get_common_paths([con, exp], '.pdf')
+  if not differing_paths:
+    out.write('All PDFs are the same!\n')
+    sys.exit(0)
+  out.write('Number of differing PDFs: %d\n' % len(differing_paths))
+  for p in differing_paths:
+    out.write('  %s\n' % printable_path(tmpdir + '/*/' + p))
+  out.write('\n')
+  shard(rasterize,
+        [os.path.join(x, p) for p in differing_paths for x in [con, exp]])
+
+  common_pngs = get_common_paths([con, exp], '.pdf.0.png')
+  identical_count = shardsum(compare_identical, common_pngs)
+  out.write('Number of PDFs that rasterize the same: %d\n\n'
+            % identical_count)
+
+  differing_pngs = get_common_paths([con, exp], '.pdf.0.png')
+  if not differing_pngs:
+    out.write('All PDFs rasterize the same!\n')
+    sys.exit(0)
+  out.write('Number of PDFs that rasterize differently: %d\n'
+            % len(differing_pngs))
+  for p in differing_pngs:
+    out.write('  %s\n' % printable_path(tmpdir + '/*/' + p))
+  out.write('\n')
+
+  scores = dict()
+  def compare_differing_pngs(path):
+    cpath, epath = (os.path.join(x, path) for x in (con, exp))
+    s = float(subprocess.check_output([image_diff_metric, cpath, epath]))
+    indicator = '.' if s < 0.001 else ':' if s < 0.01 else '!'
+    sys.stdout.write(indicator)
+    sys.stdout.flush()
+    scores[path] = s
+  shard(compare_differing_pngs, differing_pngs)
+  paths = sorted(scores.iterkeys(), key=lambda p: -scores[p])
+  out.write('\n\n')
+  for p in paths:
+    pdfpath = printable_path(tmpdir + '/*/' + p.replace('.0.png', ''))
+    out.write('  %6.4f  %s\n' % (scores[p], pdfpath))
+  out.write('\n')
+
+  errors = []
+  rc = re.compile('^' + PDF_CONFIG + r'/([^/]*)/([^/]*)\.pdf\.0\.png$')
+  for p in paths:
+    m = rc.match(p)
+    assert(m)
+    source, name = m.groups()
+    errors.append((source, name, scores[p]))
+
+  for source in SOURCES:
+    os.makedirs(os.path.join(con, REFERENCE_BACKEND, source))
+  dm_args = [dm, '--src'] + SOURCES + [
+             '--config', REFERENCE_BACKEND, '-w', con, '-m'] + [
+             '^%s$' % name for _, name, _ in errors]
+  check_call(dm_args, cwd=control_worktree)
+
+  report = tmpdir + '/report.html'
+  with open(report, 'w') as o:
+    o.write(HTML_HEAD)
+    o.write('c="%s/";\n' % os.path.relpath(con, tmpdir))
+    o.write('e="%s/";\n' % os.path.relpath(exp, tmpdir))
+    o.write('z=[\n')
+    for source, name, score in errors:
+      gt = REFERENCE_BACKEND + '/' + source + '/' + name + '.png'
+      p = '%s/%s/%s.pdf.0.png' % (PDF_CONFIG, source, name)
+      desc = '%s | %s | %g' % (source, name, score)
+      o.write('["%s","%s","%s"],\n' % (p, gt, desc))
+    o.write(HTML_TAIL)
+  out.write(printable_path(report) + '\n')
+  sysopen(report)
+
+if __name__ == '__main__':
+  if len(sys.argv) != 2:
+    USAGE = ('\nusage:\n  {0} COMMIT_OR_BRANCH_TO_COMPARE_TO\n\n'
+             'e.g.:\n  {0} HEAD\nor\n  {0} HEAD~1\n\n')
+    sys.stderr.write(USAGE.format(sys.argv[0]))
+    sys.exit(1)
+  main(sys.argv[1])
diff --git a/src/third_party/skia/experimental/tools/set-change-id-hook b/src/third_party/skia/experimental/tools/set-change-id-hook
new file mode 100644
index 0000000..7cd774b
--- /dev/null
+++ b/src/third_party/skia/experimental/tools/set-change-id-hook
@@ -0,0 +1,8 @@
+#! /bin/sh
+# Copyright 2019 Google LLC
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+SRC='https://gerrit-review.googlesource.com/tools/hooks/commit-msg'
+cd "$(dirname "$0")/.."
+HOOK="$(git rev-parse --git-dir)/hooks/commit-msg"
+curl -L -o "$HOOK" "$SRC" && chmod +x "$HOOK"
diff --git a/src/third_party/skia/experimental/tools/web_to_mskp b/src/third_party/skia/experimental/tools/web_to_mskp
new file mode 100755
index 0000000..c2df8a3
--- /dev/null
+++ b/src/third_party/skia/experimental/tools/web_to_mskp
@@ -0,0 +1,34 @@
+#! /bin/sh
+
+# Copyright 2018 Google Inc.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+if [ "$(uname)" = Linux ]; then
+  EXAMPLE='/opt/google/chrome/chrome'
+elif [ "$(uname)" = Darwin ]; then
+  EXAMPLE='"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"'
+else
+  EXAMPLE='"/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"'
+fi
+
+if [ $# -ne 3 ] || ! [ -x "$1" ]; then
+    cat >&2 << EOF
+usage:
+  $0 CHROMIUM_BINARY SOURCE_URL DESTINATION_PATH
+e.g:
+  $0 $EXAMPLE https://www.google.com/ /tmp/foo.mskp
+EOF
+  exit 1
+fi
+
+EXE="$1"
+URL="$2"
+DST="$3"
+
+CRASH=~/tmp/headless_crash_dumps
+mkdir -p "$CRASH"
+
+printf 'chrome.gpuBenchmarking.printPagesToSkPictures("%s");\nquit\n' "$DST" | \
+  "$EXE" --headless --disable-gpu --repl -crash-dumps-dir="$CRASH" \
+     --no-sandbox --enable-gpu-benchmarking "$URL"
diff --git a/src/third_party/skia/experimental/tools/web_to_skp b/src/third_party/skia/experimental/tools/web_to_skp
new file mode 100755
index 0000000..cde5dce
--- /dev/null
+++ b/src/third_party/skia/experimental/tools/web_to_skp
@@ -0,0 +1,34 @@
+#! /bin/sh
+
+# Copyright 2018 Google Inc.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+if [ "$(uname)" = Linux ]; then
+  EXAMPLE='/opt/google/chrome/chrome'
+elif [ "$(uname)" = Darwin ]; then
+  EXAMPLE='"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"'
+else
+  EXAMPLE='"/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"'
+fi
+
+if [ $# -ne 3 ] || ! [ -x "$1" ]; then
+  cat >&2 << EOF
+usage:
+  $0 CHROMIUM_BINARY SOURCE_URL DESTINATION_DIRECTORY
+e.g:
+  $0 $EXAMPLE https://www.google.com/ /tmp/
+EOF
+  exit 1
+fi
+
+EXE="$1"
+URL="$2"
+DST="$3"
+
+CRASH=~/tmp/headless_crash_dumps
+mkdir -p "$CRASH" "$DST"
+
+printf 'chrome.gpuBenchmarking.printToSkPicture("%s");\nquit\n' "$DST" | \
+  "$EXE" --headless --disable-gpu --repl -crash-dumps-dir="$CRASH" \
+    --no-sandbox --enable-gpu-benchmarking "$URL"
diff --git a/src/third_party/skia/experimental/wasm-skp-debugger/Makefile b/src/third_party/skia/experimental/wasm-skp-debugger/Makefile
new file mode 100644
index 0000000..fd4fa65
--- /dev/null
+++ b/src/third_party/skia/experimental/wasm-skp-debugger/Makefile
@@ -0,0 +1,34 @@
+release:
+	# Does an incremental build where possible.
+	./compile.sh
+	mkdir -p ./debugger/bin
+	cp ../../out/debugger_wasm/debugger.js   ./debugger/bin
+	cp ../../out/debugger_wasm/debugger.wasm ./debugger/bin
+
+debug:
+	# Does an incremental build where possible.
+	./compile.sh debug
+	mkdir -p ./debugger/bin
+	cp ../../out/debugger_wasm_debug/debugger.js   ./debugger/bin
+	cp ../../out/debugger_wasm_debug/debugger.wasm ./debugger/bin
+
+move-assets:
+	# assume the developer also has a checkout of buildbot here and wants to test the newly
+	# built wasm debugger with the interface.
+	cp ./debugger/bin/debugger.js   ${SKIA_INFRA_ROOT}/debugger-assets/res/js
+	cp ./debugger/bin/debugger.wasm ${SKIA_INFRA_ROOT}/debugger-assets/res
+
+# A barebones local example of the wasm module included in a page.
+# for the real interface see
+# https://github.com/google/skia-buildbot/blob/master/debugger-assets/res/imp/wasm-app.html
+local-example:
+	rm -rf node_modules/debugger
+	mkdir -p node_modules
+	ln -s -T ../debugger node_modules/debugger
+	echo "Go check out http://localhost:8000/debugger/index.html"
+	python serve.py
+
+test-continuous:
+	echo "Assuming npm install has been run by user"
+	echo "Also assuming make debug or release has also been run by a user (if needed)"
+	npx karma start ./karma.conf.js --no-single-run --watch-poll
diff --git a/src/third_party/skia/experimental/wasm-skp-debugger/README.md b/src/third_party/skia/experimental/wasm-skp-debugger/README.md
new file mode 100644
index 0000000..6432177
--- /dev/null
+++ b/src/third_party/skia/experimental/wasm-skp-debugger/README.md
@@ -0,0 +1,33 @@
+WASM SKP Debugger
+=================
+
+The wasm skp debugger is a wasm binary that uses DebugCanvas to show SKP and MSKP files. It is
+embedded in the javascript code in debugger-assets from the infra buildbot repository.
+
+The live version is available at debugger.skia.org
+
+Build
+-----
+
+```
+make debug
+make move-assets
+```
+
+note that make move-assets just copies the two output files over to the infra repo where they can
+be served locally. This requires SKIA_INFRA_ROOT to be set to the root of your checkout of that
+repo.
+
+For more information on running the debugger locally, see infra/debugger-assets/README.md in the
+buildbot repo.
+
+Test
+----
+
+tests are run with
+
+```
+make test-continuous
+```
+
+tests are defined by files in `tests/*.spec.js`
\ No newline at end of file
diff --git a/src/third_party/skia/experimental/wasm-skp-debugger/compile.sh b/src/third_party/skia/experimental/wasm-skp-debugger/compile.sh
new file mode 100755
index 0000000..38a5b5d
--- /dev/null
+++ b/src/third_party/skia/experimental/wasm-skp-debugger/compile.sh
@@ -0,0 +1,146 @@
+#!/bin/bash
+# Copyright 2019 Google LLC
+#
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+
+set -ex
+
+BASE_DIR=`cd $(dirname ${BASH_SOURCE[0]}) && pwd`
+# This expects the environment variable EMSDK to be set
+if [[ ! -d $EMSDK ]]; then
+  echo "Be sure to set the EMSDK environment variable."
+  exit 1
+fi
+
+# Navigate to SKIA_HOME from where this file is located.
+pushd $BASE_DIR/../..
+
+source $EMSDK/emsdk_env.sh
+EMCC=`which emcc`
+EMCXX=`which em++`
+
+if [[ $@ == *debug* ]]; then
+  echo "Building a Debug build"
+  EXTRA_CFLAGS="\"-DSK_DEBUG\","
+  RELEASE_CONF="-O0 --js-opts 0 -s DEMANGLE_SUPPORT=1 -s ASSERTIONS=1 -s GL_ASSERTIONS=1 -g4 \
+                --source-map-base /node_modules/debugger/bin/ -DSK_DEBUG"
+  BUILD_DIR=${BUILD_DIR:="out/debugger_wasm_debug"}
+else
+  echo "Building a Release build"
+  EXTRA_CFLAGS="\"-DSK_RELEASE\", \"-DGR_GL_CHECK_ALLOC_WITH_GET_ERROR=0\","
+  RELEASE_CONF="-Oz --closure 1 --llvm-lto 3 -DSK_RELEASE -DGR_GL_CHECK_ALLOC_WITH_GET_ERROR=0"
+  BUILD_DIR=${BUILD_DIR:="out/debugger_wasm"}
+fi
+
+mkdir -p $BUILD_DIR
+
+BUILTIN_FONT="$BASE_DIR/fonts/NotoMono-Regular.ttf.cpp"
+# Generate the font's binary file (which is covered by .gitignore)
+python tools/embed_resources.py \
+    --name SK_EMBEDDED_FONTS \
+    --input $BASE_DIR/fonts/NotoMono-Regular.ttf \
+    --output $BASE_DIR/fonts/NotoMono-Regular.ttf.cpp \
+    --align 4
+
+GN_GPU_FLAGS="\"-DSK_DISABLE_LEGACY_SHADERCONTEXT\","
+WASM_GPU="-lEGL -lGLESv2 -DSK_SUPPORT_GPU=1 \
+          -DSK_DISABLE_LEGACY_SHADERCONTEXT --pre-js $BASE_DIR/cpu.js --pre-js $BASE_DIR/gpu.js"
+
+# Turn off exiting while we check for ninja (which may not be on PATH)
+set +e
+NINJA=`which ninja`
+if [[ -z $NINJA ]]; then
+  git clone "https://chromium.googlesource.com/chromium/tools/depot_tools.git" --depth 1 $BUILD_DIR/depot_tools
+  NINJA=$BUILD_DIR/depot_tools/ninja
+fi
+# Re-enable error checking
+set -e
+
+./bin/fetch-gn
+
+echo "Compiling bitcode"
+
+./bin/gn gen ${BUILD_DIR} \
+  --args="cc=\"${EMCC}\" \
+  cxx=\"${EMCXX}\" \
+  extra_cflags_cc=[\"-frtti\"] \
+  extra_cflags=[\"-s\",\"USE_FREETYPE=1\",\"-s\",\"USE_LIBPNG=1\", \"-s\", \"WARN_UNALIGNED=1\",
+    \"-DSKNX_NO_SIMD\", \"-DSK_DISABLE_AAA\",
+    ${GN_GPU_FLAGS}
+    ${EXTRA_CFLAGS}
+  ] \
+  is_debug=false \
+  is_official_build=true \
+  is_component_build=false \
+  werror=true \
+  target_cpu=\"wasm\" \
+  \
+  skia_use_angle = false \
+  skia_use_dng_sdk=false \
+  skia_use_egl=true \
+  skia_use_expat=false \
+  skia_use_fontconfig=false \
+  skia_use_freetype=true \
+  skia_use_libheif=false \
+  skia_use_libjpeg_turbo=true \
+  skia_use_libpng=true \
+  skia_use_libwebp=true \
+  skia_use_wuffs=true \
+  skia_use_lua=false \
+  skia_use_piex=false \
+  skia_use_system_libpng=true \
+  skia_use_system_freetype2=true \
+  skia_use_system_libjpeg_turbo = false \
+  skia_use_system_libwebp=false \
+  skia_use_vulkan=false \
+  skia_use_zlib=true \
+  skia_enable_gpu=true \
+  skia_enable_tools=false \
+  skia_enable_skshaper=false \
+  skia_enable_ccpr=false \
+  skia_enable_nvpr=false \
+  skia_enable_fontmgr_empty=false \
+  skia_enable_pdf=false"
+
+# Build all the libs, we'll link the appropriate ones down below
+${NINJA} -C ${BUILD_DIR} libskia.a libdebugcanvas.a
+
+export EMCC_CLOSURE_ARGS="--externs $BASE_DIR/externs.js "
+
+echo "Generating final debugger wasm and javascript"
+
+# Emscripten prefers that the .a files go last in order, otherwise, it
+# may drop symbols that it incorrectly thinks aren't used. One day,
+# Emscripten will use LLD, which may relax this requirement.
+${EMCXX} \
+    $RELEASE_CONF \
+    -I. \
+    -Ithird_party/icu \
+    -Ithird_party/skcms \
+    -DSK_DISABLE_AAA \
+    -std=c++17 \
+    $WASM_GPU \
+    --pre-js $BASE_DIR/helper.js \
+    --post-js $BASE_DIR/ready.js \
+    --bind \
+    $BASE_DIR/fonts/NotoMono-Regular.ttf.cpp \
+    $BASE_DIR/debugger_bindings.cpp \
+    $BUILD_DIR/libdebugcanvas.a \
+    $BUILD_DIR/libskia.a \
+    -s ALLOW_MEMORY_GROWTH=1 \
+    -s EXPORT_NAME="DebuggerInit" \
+    -s FORCE_FILESYSTEM=0 \
+    -s MODULARIZE=1 \
+    -s NO_EXIT_RUNTIME=1 \
+    -s STRICT=1 \
+    -s TOTAL_MEMORY=128MB \
+    -s USE_FREETYPE=1 \
+    -s USE_LIBPNG=1 \
+    -s WARN_UNALIGNED=1 \
+    -s WASM=1 \
+    -s USE_WEBGL2=1 \
+    -o $BUILD_DIR/debugger.js
+
+# TODO(nifong): write unit tests
diff --git a/src/third_party/skia/experimental/wasm-skp-debugger/cpu.js b/src/third_party/skia/experimental/wasm-skp-debugger/cpu.js
new file mode 100644
index 0000000..0095dce
--- /dev/null
+++ b/src/third_party/skia/experimental/wasm-skp-debugger/cpu.js
@@ -0,0 +1,85 @@
+// Adds compile-time JS functions to handle creation and flushing of wasm's offscreen buffer
+// to a visible element on the page.
+(function(DebuggerView){
+    // Takes a canvas element
+    DebuggerView.MakeSWCanvasSurface = function(canvas) {
+      // Set the canvas element to have a 2d non-gpu context. (constant until element is destroyed)
+      // We don't need the context in this scope, we just want the side effect.
+      canvas.getContext('2d', {
+          alpha: true,
+          depth: false
+        });
+      // Maybe better to use clientWidth/height.  See:
+      // https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html
+      var surface = DebuggerView.MakeSurface(canvas.width, canvas.height);
+      if (surface) {
+        surface._canvas = canvas;
+      }
+      console.log('Made HTML Canvas Surface');
+      return surface;
+    };
+
+    // Don't over-write the MakeCanvasSurface set by gpu.js if it exists.
+    if (!DebuggerView.MakeCanvasSurface) {
+      DebuggerView.MakeCanvasSurface = DebuggerView.MakeSWCanvasSurface;
+    }
+
+    DebuggerView.MakeSurface = function(width, height) {
+      var bufferLen = width * height * 4; // 4 bytes per pixel
+      // Allocate the buffer of pixels to be drawn into.
+      var pixelPtr = DebuggerView._malloc(bufferLen);
+      var imageInfo = {
+        'width':  width,
+        'height': height,
+        // RGBA 8888 is the only pixel format we can show on an HTML canvas
+        'colorType': DebuggerView.ColorType.RGBA_8888,
+        // We are sending these pixels directly into the HTML canvas,
+        // (and those pixels are un-premultiplied, i.e. straight r,g,b,a)
+        'alphaType': DebuggerView.AlphaType.Unpremul,
+      }
+      var surface = this._getRasterDirectSurface(imageInfo, pixelPtr, width * 4);
+      if (surface) {
+        surface._canvas = null;
+        surface._width = width;
+        surface._height = height;
+        surface._bufferLen = bufferLen;
+
+        surface._pixelPtr = pixelPtr;
+        // rasterDirectSurface does not initialize the pixels, so we clear them
+        // to transparent black.
+        surface.getCanvas().clear(DebuggerView.TRANSPARENT);
+      }
+      return surface;
+    };
+
+
+    DebuggerView.onRuntimeInitialized = function() {
+
+      DebuggerView.SkSurface.prototype.flush = function() {
+        this._flush();
+        // Do we have an HTML canvas to write the pixels to?
+        // We will not if this a GPU build or a raster surface, for example.
+        if (this._canvas) {
+          var pixels = new Uint8ClampedArray(DebuggerView.HEAPU8.buffer, this._pixelPtr, this._bufferLen);
+          var imageData = new ImageData(pixels, this._width, this._height);
+          this._canvas.getContext('2d').putImageData(imageData, 0, 0);
+        }
+      };
+
+      // Call dispose() instead of delete to clean up the underlying memory
+      DebuggerView.SkSurface.prototype.dispose = function() {
+        if (this._pixelPtr) {
+          DebuggerView._free(this._pixelPtr);
+        }
+        this.delete();
+      }
+    }
+
+    DebuggerView.currentContext = DebuggerView.currentContext || function() {
+      // no op if this is a cpu-only build.
+    };
+
+    DebuggerView.setCurrentContext = DebuggerView.setCurrentContext || function() {
+       // no op if this is a cpu-only build.
+    };
+}(Module)); // When this file is loaded in, the high level object is "Module";
diff --git a/src/third_party/skia/experimental/wasm-skp-debugger/debugger/anim.mskp b/src/third_party/skia/experimental/wasm-skp-debugger/debugger/anim.mskp
new file mode 100644
index 0000000..2cc3877
--- /dev/null
+++ b/src/third_party/skia/experimental/wasm-skp-debugger/debugger/anim.mskp
Binary files differ
diff --git a/src/third_party/skia/experimental/wasm-skp-debugger/debugger/index.html b/src/third_party/skia/experimental/wasm-skp-debugger/debugger/index.html
new file mode 100644
index 0000000..aee2fc6
--- /dev/null
+++ b/src/third_party/skia/experimental/wasm-skp-debugger/debugger/index.html
@@ -0,0 +1,147 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+    <title>Debugger Demo</title>
+  <script src="bin/debugger.js"></script>
+  <script>
+let index = 0;
+let surface;
+
+DebuggerInit({
+  locateFile: (file) => '/node_modules/debugger/bin/'+file,
+}).ready().then((Debugger) => {
+  const player = new Debugger.SkpDebugPlayer();
+
+  // Define an event handler for the file input dialog
+  function readSkpFile(e){
+    // Did the change event result in the file-input element specifing a file? (user might have cancelled the dialog)
+    const file = e.target.files[0];
+    if (!file) {
+      return;
+    }
+    // create a callback for when the file finishes being read.
+    const reader = new FileReader();
+    reader.onload = function(e) {
+      // Convert e.target.result (an ArrayBuffer) into a typedarray,
+      // otherwise fileMem.set() below seems to have no effect.
+      const fileContents = new Uint8Array(e.target.result);
+      const size = fileContents.byteLength;
+      // Allocate memory in wasm to hold the skp file selected by the user.
+      const fileMemPtr = Debugger._malloc(size);
+      // Make a typed array view of that memory
+      let fileMem = new Uint8Array(Debugger.HEAPU8.buffer, fileMemPtr, size);
+      // Copy the file into it
+      fileMem.set(fileContents);
+      // Hand off pointer to wasm
+      player.loadSkp(fileMemPtr, size);
+      // From the loaded commands, Debugger now knows the bounds.
+      let bounds = player.getBounds();
+      // Resize our canvas to match
+      canvas = document.getElementById('debugger_view');
+      canvas.width = bounds.fRight - bounds.fLeft;
+      canvas.height = bounds.fBottom - bounds.fTop;
+      //Assume GPU selected initially
+      surface = Debugger.MakeWebGLCanvasSurface(canvas);
+
+      document.getElementById('command-count').innerHTML = player.getSize();
+      player.setClipVizColor(0);
+    };
+    reader.readAsArrayBuffer(file);
+  }
+
+  function playFile() {
+    interval = parseFloat(document.getElementById('interval').value);
+    let intervalID = setInterval(function() {
+        if (index < 789){
+          player.drawTo(surface, index);
+          surface.flush();
+          index++;
+        }
+    }, interval);
+  }
+
+  // Discard canvas when switching between cpu/gpu backend because it's bound to a context.
+  function replaceCanvas() {
+      canvas = document.getElementById('debugger_view');
+      let newCanvas = canvas.cloneNode(true);
+      let parent = canvas.parentNode;
+      parent.replaceChild(newCanvas, canvas);
+  }
+
+  document.getElementById('file-input')
+    .addEventListener('change', readSkpFile);
+
+  document.getElementById('play_button')
+    .addEventListener('click', playFile);
+
+  document.getElementById('overdraw')
+    .addEventListener('change', function(e) {
+      player.setOverdrawVis(e.target.checked);
+    });
+
+  document.getElementById('gpu_op_bounds')
+    .addEventListener('change', function(e) {
+      player.setGpuOpBounds(e.target.checked);
+    });
+
+  document.getElementById('clip_viz_color')
+    .addEventListener('change', function(e) {
+      // Remove the '#' from the hex color string.
+      // prepend an alpha value (0x50 or about 30%)
+      // then convert to an integer.
+      colorInt = parseInt("50"+e.target.value.substring(1),16);
+      player.setClipVizColor(colorInt);
+    });
+
+  document.getElementById('disable_clip_viz')
+    .addEventListener('click', function(e) {
+      // Setting the clip viz to transparent black makes it invisible.
+      player.setClipVizColor(0);
+    });
+
+  document.getElementById('get_json_command_list')
+    .addEventListener('click', function(e) {
+      result = player.jsonCommandList(surface);
+      console.log('getjsoncommandlist result '+result.substring(0,100)+'...');
+      commands = JSON.parse(result);
+      console.log('parsed json');
+    });
+
+  document.getElementById('backend_gpu')
+    .addEventListener('change', function(e) {
+      if (e.target.checked) {
+        replaceCanvas();
+        surface = Debugger.MakeWebGLCanvasSurface(document.getElementById('debugger_view'));
+      }
+    });
+
+  document.getElementById('backend_cpu')
+    .addEventListener('change', function(e) {
+      if (e.target.checked) {
+        replaceCanvas();
+        surface = Debugger.MakeSWCanvasSurface(document.getElementById('debugger_view'));
+      }
+    });
+
+});
+  </script>
+  </head>
+  <body>
+    <canvas id=debugger_view width=400 height=400></canvas>
+    <div style="float:right">
+      <input type="radio" name="backend" value="CPU" id="backend_cpu"> CPU
+      <input type="radio" name="backend" value="WebGL" id="backend_gpu" checked> WebGL<br>
+      <input type="file" id="file-input" /> | <span id="command-count">0</span> commands<br>
+      <input type="button" id="play_button" value="Play" />
+      command interval in ms
+      <input type="text" id="interval" value="20" /><br>
+      <input type="checkbox" id="overdraw" /> Overdraw vis<br>
+      <input type="checkbox" id="gpu_op_bounds" /> GPU Op bounds<br>
+      <input type="color" id="clip_viz_color" />Clip visualization color
+      <input type="button" id="disable_clip_viz" value="Disable" /><br>
+      <input type="button" id="get_json_command_list" value="Get JSON Command List" /><br>
+    <div>
+    <div style="float:clear"></div>
+  </body>
+</html>
diff --git a/src/third_party/skia/experimental/wasm-skp-debugger/debugger/sample.skp b/src/third_party/skia/experimental/wasm-skp-debugger/debugger/sample.skp
new file mode 100644
index 0000000..3053116
--- /dev/null
+++ b/src/third_party/skia/experimental/wasm-skp-debugger/debugger/sample.skp
Binary files differ
diff --git a/src/third_party/skia/experimental/wasm-skp-debugger/debugger_bindings.cpp b/src/third_party/skia/experimental/wasm-skp-debugger/debugger_bindings.cpp
new file mode 100644
index 0000000..2ccce3c
--- /dev/null
+++ b/src/third_party/skia/experimental/wasm-skp-debugger/debugger_bindings.cpp
@@ -0,0 +1,414 @@
+/*
+ * Copyright 2019 Google LLC
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "include/core/SkPicture.h"
+#include "include/core/SkSurface.h"
+#include "include/utils/SkBase64.h"
+#include "src/utils/SkJSONWriter.h"
+#include "src/utils/SkMultiPictureDocument.h"
+#include "tools/SkSharingProc.h"
+#include "tools/UrlDataManager.h"
+#include "tools/debugger/DebugCanvas.h"
+
+#include <emscripten.h>
+#include <emscripten/bind.h>
+
+#if SK_SUPPORT_GPU
+#include "include/gpu/GrBackendSurface.h"
+#include "include/gpu/GrContext.h"
+#include "include/gpu/gl/GrGLInterface.h"
+#include "include/gpu/gl/GrGLTypes.h"
+
+#include <GL/gl.h>
+#include <emscripten/html5.h>
+#endif
+
+using JSColor = int32_t;
+using Uint8Array = emscripten::val;
+
+// file signature for SkMultiPictureDocument
+// TODO(nifong): make public and include from SkMultiPictureDocument.h
+static constexpr char kMultiMagic[] = "Skia Multi-Picture Doc\n\n";
+
+struct SimpleImageInfo {
+  int width;
+  int height;
+  SkColorType colorType;
+  SkAlphaType alphaType;
+};
+
+SkImageInfo toSkImageInfo(const SimpleImageInfo& sii) {
+  return SkImageInfo::Make(sii.width, sii.height, sii.colorType, sii.alphaType);
+}
+
+SimpleImageInfo toSimpleImageInfo(const SkImageInfo& ii) {
+  return (SimpleImageInfo){ii.width(), ii.height(), ii.colorType(), ii.alphaType()};
+}
+
+class SkpDebugPlayer {
+  public:
+    SkpDebugPlayer() :
+    udm(UrlDataManager(SkString("/data"))){}
+
+    /* loadSkp deserializes a skp file that has been copied into the shared WASM memory.
+     * cptr - a pointer to the data to deserialize.
+     * length - length of the data in bytes.
+     * The caller must allocate the memory with M._malloc where M is the wasm module in javascript
+     * and copy the data into M.buffer at the pointer returned by malloc.
+     *
+     * uintptr_t is used here because emscripten will not allow binding of functions with pointers
+     * to primitive types. We can instead pass a number and cast it to whatever kind of
+     * pointer we're expecting.
+     */
+    void loadSkp(uintptr_t cptr, int length) {
+      const uint8_t* data = reinterpret_cast<const uint8_t*>(cptr);
+      char magic[8];
+      // Both traditional and multi-frame skp files have a magic word
+      SkMemoryStream stream(data, length);
+      SkDebugf("make stream at %p, with %d bytes\n",data, length);
+      // Why -1? I think it's got to do with using a constexpr, just a guess.
+      const size_t magicsize = sizeof(kMultiMagic) - 1;
+      if (memcmp(data, kMultiMagic, magicsize) == 0) {
+        SkDebugf("Try reading as a multi-frame skp\n");
+        loadMultiFrame(&stream);
+      } else {
+        SkDebugf("Try reading as single-frame skp\n");
+        frames.push_back(loadSingleFrame(&stream));
+      }
+    }
+
+    /* drawTo asks the debug canvas to draw from the beginning of the picture
+     * to the given command and flush the canvas.
+     */
+    void drawTo(SkSurface* surface, int32_t index) {
+      int cmdlen = frames[fp]->getSize();
+      if (cmdlen == 0) {
+        SkDebugf("Zero commands to execute");
+        return;
+      }
+      if (index >= cmdlen) {
+        SkDebugf("Constrained command index (%d) within this frame's length (%d)\n", index, cmdlen);
+        index = cmdlen-1;
+      }
+      frames[fp]->drawTo(surface->getCanvas(), index);
+      surface->getCanvas()->flush();
+    }
+
+    const SkIRect& getBounds() { return fBounds; }
+
+    void setOverdrawVis(bool on) {
+      frames[fp]->setOverdrawViz(on);
+    }
+    void setGpuOpBounds(bool on) {
+      frames[fp]->setDrawGpuOpBounds(on);
+    }
+    void setClipVizColor(JSColor color) {
+      frames[fp]->setClipVizColor(SkColor(color));
+    }
+    void deleteCommand(int index) {
+      frames[fp]->deleteDrawCommandAt(index);
+    }
+    void setCommandVisibility(int index, bool visible) {
+      frames[fp]->toggleCommand(index, visible);
+    }
+    int getSize() const {
+      return frames[fp]->getSize();
+    }
+    int getFrameCount() const {
+      return frames.size();
+    }
+
+    // Return the command list in JSON representation as a string
+    std::string jsonCommandList(sk_sp<SkSurface> surface) {
+      SkDynamicMemoryWStream stream;
+      SkJSONWriter writer(&stream, SkJSONWriter::Mode::kFast);
+      writer.beginObject(); // root
+      frames[fp]->toJSON(writer, udm, getSize(), surface->getCanvas());
+      writer.endObject(); // root
+      writer.flush();
+      auto skdata = stream.detachAsData();
+      // Convert skdata to string_view, which accepts a length
+      std::string_view data_view(reinterpret_cast<const char*>(skdata->data()), skdata->size());
+      // and string_view to string, which emscripten understands.
+      return std::string(data_view);
+    }
+
+    // Gets the clip and matrix of the last command drawn
+    std::string lastCommandInfo() {
+      SkMatrix vm = frames[fp]->getCurrentMatrix();
+      SkIRect clip = frames[fp]->getCurrentClip();
+
+      SkDynamicMemoryWStream stream;
+      SkJSONWriter writer(&stream, SkJSONWriter::Mode::kFast);
+      writer.beginObject(); // root
+
+      writer.appendName("ViewMatrix");
+      DrawCommand::MakeJsonMatrix(writer, vm);
+      writer.appendName("ClipRect");
+      DrawCommand::MakeJsonIRect(writer, clip);
+
+      writer.endObject(); // root
+      writer.flush();
+      auto skdata = stream.detachAsData();
+      // Convert skdata to string_view, which accepts a length
+      std::string_view data_view(reinterpret_cast<const char*>(skdata->data()), skdata->size());
+      // and string_view to string, which emscripten understands.
+      return std::string(data_view);
+    }
+
+    void changeFrame(int index) {
+      fp = index;
+    }
+
+    // Return the png file at the requested index in
+    // the skp file's vector of shared images. this is the set of images referred to by the
+    // filenames like "\\1" in DrawImage commands.
+    // Return type is the PNG data as a base64 encoded string with prepended URI.
+    std::string getImageResource(int index) {
+      sk_sp<SkData> pngData = fImages[index]->encodeToData();
+      size_t len = SkBase64::Encode(pngData->data(), pngData->size(), nullptr);
+      SkString dst;
+      dst.resize(len);
+      SkBase64::Encode(pngData->data(), pngData->size(), dst.writable_str());
+      dst.prepend("data:image/png;base64,");
+      return std::string(dst.c_str());
+    }
+
+    int getImageCount() {
+      return fImages.size();
+    }
+
+    // Get the image info of one of the resource images.
+    SimpleImageInfo getImageInfo(int index) {
+      return toSimpleImageInfo(fImages[index]->imageInfo());
+    }
+
+  private:
+
+      // Loads a single frame (traditional) skp file from the provided data stream and returns
+      // a newly allocated DebugCanvas initialized with the SkPicture that was in the file.
+      std::unique_ptr<DebugCanvas> loadSingleFrame(SkMemoryStream* stream) {
+        // note overloaded = operator that actually does a move
+        sk_sp<SkPicture> picture = SkPicture::MakeFromStream(stream);
+        if (!picture) {
+          SkDebugf("Unable to deserialze frame.\n");
+          return nullptr;
+        }
+        SkDebugf("Parsed SKP file.\n");
+        // Make debug canvas using bounds from SkPicture
+        fBounds = picture->cullRect().roundOut();
+        std::unique_ptr<DebugCanvas> debugDanvas = std::make_unique<DebugCanvas>(fBounds);
+        SkDebugf("DebugCanvas created.\n");
+
+        // Only draw picture to the debug canvas once.
+        debugDanvas->drawPicture(picture);
+        SkDebugf("Added picture with %d commands.\n", debugDanvas->getSize());
+        return debugDanvas;
+      }
+
+      void loadMultiFrame(SkMemoryStream* stream) {
+
+          // Attempt to deserialize with an image sharing serial proc.
+          auto deserialContext = std::make_unique<SkSharingDeserialContext>();
+          SkDeserialProcs procs;
+          procs.fImageProc = SkSharingDeserialContext::deserializeImage;
+          procs.fImageCtx = deserialContext.get();
+
+          int page_count = SkMultiPictureDocumentReadPageCount(stream);
+          if (!page_count) {
+            SkDebugf("Not a MultiPictureDocument");
+            return;
+          }
+          SkDebugf("Expecting %d frames\n", page_count);
+
+          std::vector<SkDocumentPage> pages(page_count);
+          if (!SkMultiPictureDocumentRead(stream, pages.data(), page_count, &procs)) {
+            SkDebugf("Reading frames from MultiPictureDocument failed");
+            return;
+          }
+
+          for (const auto& page : pages) {
+            // Make debug canvas using bounds from SkPicture
+            fBounds = page.fPicture->cullRect().roundOut();
+            std::unique_ptr<DebugCanvas> debugDanvas = std::make_unique<DebugCanvas>(fBounds);
+            // Only draw picture to the debug canvas once.
+            debugDanvas->drawPicture(page.fPicture);
+            SkDebugf("Added picture with %d commands.\n", debugDanvas->getSize());
+
+            if (debugDanvas->getSize() <=0 ){
+              SkDebugf("Skipped corrupted frame, had %d commands \n", debugDanvas->getSize());
+              continue;
+            }
+            debugDanvas->setOverdrawViz(false);
+            debugDanvas->setDrawGpuOpBounds(false);
+            debugDanvas->setClipVizColor(SK_ColorTRANSPARENT);
+            frames.push_back(std::move(debugDanvas));
+          }
+          fImages = deserialContext->fImages;
+      }
+
+      // A vector of DebugCanvas, each one initialized to a frame of the animation.
+      std::vector<std::unique_ptr<DebugCanvas>> frames;
+      // The index of the current frame (into the vector above)
+      int fp = 0;
+      // The width and height of the animation. (in practice the bounds of the last loaded frame)
+      SkIRect fBounds;
+      // SKP version of loaded file.
+      uint32_t fFileVersion;
+      // image resources from a loaded file
+      std::vector<sk_sp<SkImage>> fImages;
+
+      // The URLDataManager here is a cache that accepts encoded data (pngs) and puts
+      // numbers on them. We have our own collection of images (fImages) that was populated by the
+      // SkSharingDeserialContext when mskp files are loaded. It would be nice to have the mapping
+      // indices between these two caches so the urls displayed in command info match the list
+      // in the resource tab, and to make cross linking possible. One way to do this would be to
+      // look up all of fImages in udm but the exact encoding of the PNG differs and we wouldn't
+      // find anything. TODO(nifong): Unify these two numbering schemes in CollatingCanvas.
+      UrlDataManager udm;
+
+};
+
+#if SK_SUPPORT_GPU
+sk_sp<GrContext> MakeGrContext(EMSCRIPTEN_WEBGL_CONTEXT_HANDLE context)
+{
+    EMSCRIPTEN_RESULT r = emscripten_webgl_make_context_current(context);
+    if (r < 0) {
+        SkDebugf("failed to make webgl context current %d\n", r);
+        return nullptr;
+    }
+    // setup GrContext
+    auto interface = GrGLMakeNativeInterface();
+    // setup contexts
+    sk_sp<GrContext> grContext(GrContext::MakeGL(interface));
+    return grContext;
+}
+
+sk_sp<SkSurface> MakeOnScreenGLSurface(sk_sp<GrContext> grContext, int width, int height) {
+    glClearColor(0, 0, 0, 0);
+    glClearStencil(0);
+    glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
+
+
+    // Wrap the frame buffer object attached to the screen in a Skia render
+    // target so Skia can render to it
+    GrGLint buffer;
+    glGetIntegerv(GL_FRAMEBUFFER_BINDING, &buffer);
+    GrGLFramebufferInfo info;
+    info.fFBOID = (GrGLuint) buffer;
+    SkColorType colorType;
+
+    info.fFormat = GL_RGBA8;
+    colorType = kRGBA_8888_SkColorType;
+
+    GrBackendRenderTarget target(width, height, 0, 8, info);
+
+    sk_sp<SkSurface> surface(SkSurface::MakeFromBackendRenderTarget(grContext.get(), target,
+                                                                    kBottomLeft_GrSurfaceOrigin,
+                                                                    colorType, nullptr, nullptr));
+    return surface;
+}
+
+sk_sp<SkSurface> MakeRenderTarget(sk_sp<GrContext> grContext, int width, int height) {
+    SkImageInfo info = SkImageInfo::MakeN32(width, height, SkAlphaType::kPremul_SkAlphaType);
+
+    sk_sp<SkSurface> surface(SkSurface::MakeRenderTarget(grContext.get(),
+                             SkBudgeted::kYes,
+                             info, 0,
+                             kBottomLeft_GrSurfaceOrigin,
+                             nullptr, true));
+    return surface;
+}
+
+sk_sp<SkSurface> MakeRenderTarget(sk_sp<GrContext> grContext, SimpleImageInfo sii) {
+    sk_sp<SkSurface> surface(SkSurface::MakeRenderTarget(grContext.get(),
+                             SkBudgeted::kYes,
+                             toSkImageInfo(sii), 0,
+                             kBottomLeft_GrSurfaceOrigin,
+                             nullptr, true));
+    return surface;
+}
+#endif
+
+using namespace emscripten;
+EMSCRIPTEN_BINDINGS(my_module) {
+
+  // The main class that the JavaScript in index.html uses
+  class_<SkpDebugPlayer>("SkpDebugPlayer")
+    .constructor<>()
+    .function("loadSkp",              &SkpDebugPlayer::loadSkp, allow_raw_pointers())
+    .function("drawTo",               &SkpDebugPlayer::drawTo, allow_raw_pointers())
+    .function("getBounds",            &SkpDebugPlayer::getBounds)
+    .function("setOverdrawVis",       &SkpDebugPlayer::setOverdrawVis)
+    .function("setClipVizColor",      &SkpDebugPlayer::setClipVizColor)
+    .function("getSize",              &SkpDebugPlayer::getSize)
+    .function("deleteCommand",        &SkpDebugPlayer::deleteCommand)
+    .function("setCommandVisibility", &SkpDebugPlayer::setCommandVisibility)
+    .function("setGpuOpBounds",       &SkpDebugPlayer::setGpuOpBounds)
+    .function("jsonCommandList",      &SkpDebugPlayer::jsonCommandList, allow_raw_pointers())
+    .function("lastCommandInfo",      &SkpDebugPlayer::lastCommandInfo)
+    .function("changeFrame",          &SkpDebugPlayer::changeFrame)
+    .function("getFrameCount",        &SkpDebugPlayer::getFrameCount)
+    .function("getImageResource",     &SkpDebugPlayer::getImageResource)
+    .function("getImageCount",        &SkpDebugPlayer::getImageCount)
+    .function("getImageInfo",         &SkpDebugPlayer::getImageInfo);
+
+  // Structs used as arguments or returns to the functions above
+  value_object<SkIRect>("SkIRect")
+      .field("fLeft",   &SkIRect::fLeft)
+      .field("fTop",    &SkIRect::fTop)
+      .field("fRight",  &SkIRect::fRight)
+      .field("fBottom", &SkIRect::fBottom);
+
+  // Symbols needed by cpu.js to perform surface creation and flushing.
+  enum_<SkColorType>("ColorType")
+    .value("RGBA_8888", SkColorType::kRGBA_8888_SkColorType);
+  enum_<SkAlphaType>("AlphaType")
+      .value("Opaque",   SkAlphaType::kOpaque_SkAlphaType)
+      .value("Premul",   SkAlphaType::kPremul_SkAlphaType)
+      .value("Unpremul", SkAlphaType::kUnpremul_SkAlphaType);
+  value_object<SimpleImageInfo>("SkImageInfo")
+    .field("width",     &SimpleImageInfo::width)
+    .field("height",    &SimpleImageInfo::height)
+    .field("colorType", &SimpleImageInfo::colorType)
+    .field("alphaType", &SimpleImageInfo::alphaType);
+  constant("TRANSPARENT", (JSColor) SK_ColorTRANSPARENT);
+  function("_getRasterDirectSurface", optional_override([](const SimpleImageInfo ii,
+                                                           uintptr_t /* uint8_t*  */ pPtr,
+                                                           size_t rowBytes)->sk_sp<SkSurface> {
+    uint8_t* pixels = reinterpret_cast<uint8_t*>(pPtr);
+    SkImageInfo imageInfo = toSkImageInfo(ii);
+    SkDebugf("Made raster direct surface.\n");
+    return SkSurface::MakeRasterDirect(imageInfo, pixels, rowBytes, nullptr);
+  }), allow_raw_pointers());
+  class_<SkSurface>("SkSurface")
+    .smart_ptr<sk_sp<SkSurface>>("sk_sp<SkSurface>")
+    .function("width", &SkSurface::width)
+    .function("height", &SkSurface::height)
+    .function("_flush", select_overload<void()>(&SkSurface::flush))
+    .function("getCanvas", &SkSurface::getCanvas, allow_raw_pointers());
+  class_<SkCanvas>("SkCanvas")
+    .function("clear", optional_override([](SkCanvas& self, JSColor color)->void {
+      // JS side gives us a signed int instead of an unsigned int for color
+      // Add a optional_override to change it out.
+      self.clear(SkColor(color));
+    }));
+
+  #if SK_SUPPORT_GPU
+    class_<GrContext>("GrContext")
+        .smart_ptr<sk_sp<GrContext>>("sk_sp<GrContext>");
+    function("currentContext", &emscripten_webgl_get_current_context);
+    function("setCurrentContext", &emscripten_webgl_make_context_current);
+    function("MakeGrContext", &MakeGrContext);
+    function("MakeOnScreenGLSurface", &MakeOnScreenGLSurface);
+    function("MakeRenderTarget", select_overload<sk_sp<SkSurface>(
+      sk_sp<GrContext>, int, int)>(&MakeRenderTarget));
+    function("MakeRenderTarget", select_overload<sk_sp<SkSurface>(
+      sk_sp<GrContext>, SimpleImageInfo)>(&MakeRenderTarget));
+    constant("gpu", true);
+  #endif
+}
diff --git a/src/third_party/skia/experimental/wasm-skp-debugger/externs.js b/src/third_party/skia/experimental/wasm-skp-debugger/externs.js
new file mode 100644
index 0000000..0446d15
--- /dev/null
+++ b/src/third_party/skia/experimental/wasm-skp-debugger/externs.js
@@ -0,0 +1,61 @@
+// TODO(nifong): Complete this before turning on clojure optimizations in compile.sh
+
+var DebuggerView = {
+	MakeSWCanvasSurface: function() {},
+	_getRasterDirectSurface: function() {},
+	_malloc: function() {},
+	_free: function() {},
+	onRuntimeInitialized: function() {},
+	SkpFilePlayer: function() {},
+	MakeWebGLCanvasSurface: function() {},
+	MakeGrContext: function() {},
+	MakeOnScreenGLSurface: function() {},
+	MakeCanvasSurface: function() {},
+
+	ColorType: {
+		RGBA_8888: {},
+	},
+
+	AlphaType: {
+		Unpremul: {},
+	},
+
+	TRANSPARENT: {},
+
+	SkSurface: {
+		// public API (from C++ bindings)
+		/** @return {DebuggerView.SkCanvas} */
+		getCanvas: function() {},
+
+		// private API
+		_flush: function() {},
+		delete: function() {},
+	},
+
+	SkpDebugPlayer: {
+		SkpDebugPlayer: function() {},
+		loadSkp: function() {},
+		drawTo: function() {},
+		getBounds: function() {},
+		setOverdrawVis: function() {},
+		setGpuOpBounds: function() {},
+		setClipVizColor: function() {},
+		getSize: function() {},
+		deleteCommand: function() {},
+		setCommandVisibility: function() {},
+		jsonCommandList: function() {},
+		lastCommandInfo: function() {},
+	},
+
+	/**
+	 * @type {Uint8Array}
+	 */
+	HEAPU8: {},
+};
+
+// Public API things that are newly declared in the JS should go here.
+// It's not enough to declare them above, because closure can still erase them
+// unless they go on the prototype.
+
+DebuggerView.SkSurface.prototype.flush = function() {};
+DebuggerView.SkSurface.prototype.dispose = function() {};
\ No newline at end of file
diff --git a/src/third_party/skia/experimental/wasm-skp-debugger/fonts/NotoMono-Regular.ttf b/src/third_party/skia/experimental/wasm-skp-debugger/fonts/NotoMono-Regular.ttf
new file mode 100644
index 0000000..3560a3a
--- /dev/null
+++ b/src/third_party/skia/experimental/wasm-skp-debugger/fonts/NotoMono-Regular.ttf
Binary files differ
diff --git a/src/third_party/skia/experimental/wasm-skp-debugger/gpu.js b/src/third_party/skia/experimental/wasm-skp-debugger/gpu.js
new file mode 100644
index 0000000..5549c9c
--- /dev/null
+++ b/src/third_party/skia/experimental/wasm-skp-debugger/gpu.js
@@ -0,0 +1,74 @@
+// Adds compile-time JS functions to augment the DebuggerView interface.
+// Specifically, anything that should only be on the GPU version of DebuggerView.
+(function(DebuggerView){
+    function makeWebGLContext(canvas, attrs) {
+      // These defaults come from the emscripten _emscripten_webgl_create_context
+      // TODO(nifong): All these settings appear to be ignored. investigate.
+      var contextAttributes = {
+        alpha: 1,
+        depth: 1,
+        stencil: 0,
+        antialias: 1,
+        premultipliedAlpha: 1,
+        // for the zoom to be able to access the pixels. Incurs performance penalty
+        preserveDrawingBuffer: 1,
+        preferLowPowerToHighPerformance: 0,
+        failIfMajorPerformanceCaveat: 0,
+        majorVersion: 1,
+        minorVersion: 0,
+        enableExtensionsByDefault: 1,
+        explicitSwapControl: 0,
+        renderViaOffscreenBackBuffer: 0,
+      };
+      if (!canvas) {
+        console.log('null canvas passed into makeWebGLContext');
+        return 0;
+      }
+      // This check is from the emscripten version
+      if (contextAttributes['explicitSwapControl']) {
+        console.log('explicitSwapControl is not supported');
+        return 0;
+      }
+      // GL is an enscripten provided helper
+      // See https://github.com/emscripten-core/emscripten/blob/incoming/src/library_webgl.js
+      var context = GL.createContext(canvas, contextAttributes);
+      if (!context) {
+        console.log('Could not get a WebGL context from the canvas element.');
+      }
+      console.log('Made Web Gl Canvas Surface');
+      return context
+    }
+
+    DebuggerView.GetWebGLContext = function(canvas, attrs) {
+      return makeWebGLContext(canvas, attrs);
+    };
+
+    // canvas - a canvas element to use for this surface.
+    DebuggerView.MakeWebGLCanvasSurface = function(canvas) {
+      // we are ok with all the defaults
+      var ctx = DebuggerView.GetWebGLContext(canvas);
+
+      if (!ctx || ctx < 0) {
+        throw 'failed to create webgl context: err ' + ctx;
+      }
+
+      var grcontext = this.MakeGrContext(ctx);
+      if (!grcontext) {
+        throw (
+          'failed to create grcontext. Open GL driver may not support all needed functions: err '
+          + grcontext);
+      }
+
+      // Maybe better to use clientWidth/height.  See:
+      // https://webglfundamentals.org/webgl/lessons/webgl-anti-patterns.html
+      var surface = this.MakeOnScreenGLSurface(grcontext, canvas.width, canvas.height);
+      if (!surface) {
+        // Don't fall back silently in the debugger, the user explicitly controls which backend he
+        // wants via the UI. Calling function may catch this and show the user an error.
+        throw ('Failed to create OpenGL surface. GPU Backend unavailable.');
+      }
+      return surface;
+    };
+    // Default to trying WebGL first.
+    DebuggerView.MakeCanvasSurface = DebuggerView.MakeWebGLCanvasSurface;
+}(Module)); // When this file is loaded in, the high level object is "Module";
diff --git a/src/third_party/skia/experimental/wasm-skp-debugger/helper.js b/src/third_party/skia/experimental/wasm-skp-debugger/helper.js
new file mode 100644
index 0000000..9e2a202
--- /dev/null
+++ b/src/third_party/skia/experimental/wasm-skp-debugger/helper.js
@@ -0,0 +1,24 @@
+// Adds compile-time JS functions to augment the DebuggerView interface.
+(function(DebuggerView){
+
+    DebuggerView.SkpFilePlayer = function(file_arraybuf) {
+    // Create the instance of SkpDebugPlayer
+    var player = new this.SkpDebugPlayer();
+    // Convert file (an ArrayBuffer) into a typedarray,
+    // otherwise fileMem.set() below seems to have no effect.
+    var fileContents = new Uint8Array(file_arraybuf);
+    var size = fileContents.byteLength;
+    // Allocate memory in wasm to hold the skp file selected by the user.
+    var fileMemPtr = this._malloc(size);
+    // Make a typed array view of that memory
+    var fileMem = new Uint8Array(DebuggerView.HEAPU8.buffer, fileMemPtr, size);
+    // Copy the file into it
+    fileMem.set(fileContents);
+    // Hand off pointer to wasm
+    player.loadSkp(fileMemPtr, size);
+    // Free the memory that was used to hold the file, since it is now represented as an SkPicture
+    this._free(fileMemPtr)
+    return player;
+  }
+
+}(Module)); // When this file is loaded in, the high level object is "Module";
diff --git a/src/third_party/skia/experimental/wasm-skp-debugger/karma.conf.js b/src/third_party/skia/experimental/wasm-skp-debugger/karma.conf.js
new file mode 100644
index 0000000..5a9eb12
--- /dev/null
+++ b/src/third_party/skia/experimental/wasm-skp-debugger/karma.conf.js
@@ -0,0 +1,75 @@
+const isDocker = require('is-docker')();
+
+module.exports = function(config) {
+  // Set the default values to be what are needed when testing the
+  // WebAssembly build locally.
+  let cfg = {
+    // frameworks to use
+    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
+    frameworks: ['jasmine'],
+
+    // list of files / patterns to load in the browser
+    files: [
+      { pattern: 'debugger/bin/debugger.wasm', included:false, served:true},
+      { pattern: 'debugger/sample.skp', included:false, served:true},
+      { pattern: 'debugger/anim.mskp', included:false, served:true},
+      '../../modules/pathkit/tests/testReporter.js',
+      'debugger/bin/debugger.js',
+      'tests/debuggerinit.js',
+      'tests/*.spec.js'
+    ],
+
+    proxies: {
+      '/debugger/': '/base/debugger/',
+    },
+
+    // test results reporter to use
+    // possible values: 'dots', 'progress'
+    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
+    reporters: ['progress'],
+
+    // web server port
+    port: 4444,
+
+    // enable / disable colors in the output (reporters and logs)
+    colors: true,
+
+    // level of logging
+    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
+    logLevel: config.LOG_INFO,
+
+    // enable / disable watching file and executing tests whenever any file changes
+    autoWatch: true,
+
+    browserDisconnectTimeout: 15000,
+    browserNoActivityTimeout: 15000,
+
+    // start these browsers
+    browsers: ['Chrome'],
+
+    // Continuous Integration mode
+    // if true, Karma captures browsers, runs the tests and exits
+    singleRun: false,
+
+    // Concurrency level
+    // how many browser should be started simultaneous
+    concurrency: Infinity,
+  };
+
+  if (isDocker) {
+    // See https://hackernoon.com/running-karma-tests-with-headless-chrome-inside-docker-ae4aceb06ed3
+    cfg.browsers = ['ChromeHeadlessNoSandbox'],
+    cfg.customLaunchers = {
+        ChromeHeadlessNoSandbox: {
+            base: 'ChromeHeadless',
+            flags: [
+            // Without this flag, we see an error:
+            // Failed to move to new namespace: PID namespaces supported, Network namespace supported, but failed: errno = Operation not permitted
+                '--no-sandbox'
+            ],
+        },
+    };
+  }
+
+  config.set(cfg);
+}
diff --git a/src/third_party/skia/experimental/wasm-skp-debugger/package.json b/src/third_party/skia/experimental/wasm-skp-debugger/package.json
new file mode 100644
index 0000000..be52f2e
--- /dev/null
+++ b/src/third_party/skia/experimental/wasm-skp-debugger/package.json
@@ -0,0 +1,21 @@
+{
+  "name": "debugger-local",
+  "version": "0.0.0",
+  "description": "private",
+  "private": true,
+  "main": "index.js",
+  "dependencies": {},
+  "devDependencies": {
+    "is-docker": "~1.1.0",
+    "jasmine-core": "~3.1.0",
+    "karma": "~3.0.0",
+    "karma-chrome-launcher": "~2.2.0",
+    "karma-jasmine": "~1.1.2",
+    "requirejs": "~2.3.5"
+  },
+  "scripts": {
+    "test": "make test-continuous"
+  },
+  "author": "",
+  "license": "BSD-3-Clause"
+}
diff --git a/src/third_party/skia/experimental/wasm-skp-debugger/ready.js b/src/third_party/skia/experimental/wasm-skp-debugger/ready.js
new file mode 100644
index 0000000..60f2486
--- /dev/null
+++ b/src/third_party/skia/experimental/wasm-skp-debugger/ready.js
@@ -0,0 +1,16 @@
+// See https://github.com/kripken/emscripten/issues/5820#issuecomment-385722568
+// for context on why the .then() that comes with Module breaks things (e.g. infinite loops)
+// and why the below fixes it.
+Module['ready'] = function() {
+  return new Promise(function (resolve, reject) {
+    Module['onAbort'] = reject;
+    if (runtimeInitialized) {
+      resolve(Module);
+    } else {
+      addOnPostRun(function() {
+        resolve(Module);
+      });
+    }
+  });
+}
+delete Module['then'];
\ No newline at end of file
diff --git a/src/third_party/skia/experimental/wasm-skp-debugger/serve.py b/src/third_party/skia/experimental/wasm-skp-debugger/serve.py
new file mode 100644
index 0000000..8c6541f
--- /dev/null
+++ b/src/third_party/skia/experimental/wasm-skp-debugger/serve.py
@@ -0,0 +1,20 @@
+# Copyright 2018 Google LLC
+
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import SimpleHTTPServer
+import SocketServer
+
+PORT = 8000
+
+class Handler(SimpleHTTPServer.SimpleHTTPRequestHandler):
+    pass
+
+Handler.extensions_map['.js'] = 'application/javascript'
+# Without the correct MIME type, async compilation doesn't work
+Handler.extensions_map['.wasm'] = 'application/wasm'
+
+httpd = SocketServer.TCPServer(("", PORT), Handler)
+
+httpd.serve_forever()
diff --git a/src/third_party/skia/experimental/wasm-skp-debugger/tests/debuggerinit.js b/src/third_party/skia/experimental/wasm-skp-debugger/tests/debuggerinit.js
new file mode 100644
index 0000000..bd2097f
--- /dev/null
+++ b/src/third_party/skia/experimental/wasm-skp-debugger/tests/debuggerinit.js
@@ -0,0 +1,15 @@
+jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;
+
+let Debugger = null;
+const LoadDebugger = new Promise(function(resolve, reject) {
+    if (Debugger) {
+        resolve();
+    } else {
+        DebuggerInit({
+            locateFile: (file) => '/debugger/bin/'+file,
+        }).ready().then((_Debugger) => {
+            Debugger = _Debugger;
+            resolve();
+        });
+    }
+});
\ No newline at end of file
diff --git a/src/third_party/skia/experimental/wasm-skp-debugger/tests/mskp_playback.spec.js b/src/third_party/skia/experimental/wasm-skp-debugger/tests/mskp_playback.spec.js
new file mode 100644
index 0000000..3ba937f
--- /dev/null
+++ b/src/third_party/skia/experimental/wasm-skp-debugger/tests/mskp_playback.spec.js
@@ -0,0 +1,65 @@
+// The increased timeout is especially needed with larger binaries
+// like in the debug/gpu build
+jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;
+
+describe('Debugger\'s Playback Behavior', function() {
+    const container = document.createElement('div');
+    document.body.appendChild(container);
+
+    beforeEach(function() {
+        container.innerHTML = `<canvas id=debugger_view width=720 height=1280></canvas>`;
+    });
+
+    afterEach(function() {
+        container.innerHTML = '';
+    });
+
+    it('can switch to the second frame of an animated skp', function(done) {
+        const filename = '/debugger/anim.mskp'
+        const fetchSkpPromise = fetch(filename);
+
+        Promise.all([LoadDebugger, fetchSkpPromise]).then((values) => {
+
+            const response = values[1];
+            if (!response.ok) {
+                throw new Error("HTTP error, status = " + response.status);
+            }
+            response.arrayBuffer().then((buffer) => {
+                catchException(done, () => {
+                    const canvasElement = document.getElementById('debugger_view');
+                    const fileContents = new Uint8Array(buffer);
+                    console.log('fetched '+filename);
+                    const player = Debugger.SkpFilePlayer(fileContents);
+                    const bounds = player.getBounds();
+                    canvasElement.width = bounds.fRight - bounds.fLeft;
+                    canvasElement.height = bounds.fBottom - bounds.fTop;
+                    expect(canvasElement.width).toBe(1080);
+                    expect(canvasElement.height).toBe(1920);
+                    const surface = Debugger.MakeWebGLCanvasSurface(canvasElement);
+                    expect(surface).toBeTruthy();
+                    const numFrames = player.getFrameCount();
+                    expect(numFrames).toBe(10);
+
+                    let cmd = JSON.parse(player.jsonCommandList(surface));
+                    expect(cmd).toBeTruthy();
+
+                    // Move to last command in first frame
+                    player.drawTo(surface, cmd.commands.length);
+                    surface.flush();
+
+                    // Move to frame two
+                    player.changeFrame(1);
+                    cmd = JSON.parse(player.jsonCommandList(surface));
+                    expect(cmd).toBeTruthy();
+                    // move to command 100 in frame 2
+                    player.drawTo(surface, 100);
+                    surface.flush();
+
+                    console.log('drew picture to canvas element');
+                    surface.dispose();
+                    done();
+                })();
+            });
+        });
+    });
+});
diff --git a/src/third_party/skia/experimental/wasm-skp-debugger/tests/startup.spec.js b/src/third_party/skia/experimental/wasm-skp-debugger/tests/startup.spec.js
new file mode 100644
index 0000000..c69597e
--- /dev/null
+++ b/src/third_party/skia/experimental/wasm-skp-debugger/tests/startup.spec.js
@@ -0,0 +1,67 @@
+// The increased timeout is especially needed with larger binaries
+// like in the debug/gpu build
+jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;
+
+describe('Debugger\'s Startup Behavior', function() {
+    let container = document.createElement('div');
+    document.body.appendChild(container);
+
+    beforeEach(function() {
+        container.innerHTML = `<canvas id=debugger_view width=720 height=1280></canvas>`;
+    });
+
+    afterEach(function() {
+        container.innerHTML = '';
+    });
+
+    it('can load and draw a skp file on an Canvas2D', function(done) {
+        LoadDebugger.then(catchException(done, () => {
+            const surface = Debugger.MakeSWCanvasSurface(document.getElementById('debugger_view'));
+
+            fetch('/debugger/sample.skp').then(function(response) {
+                // Load test file
+                if (!response.ok) {
+                  throw new Error("HTTP error, status = " + response.status);
+                }
+                response.arrayBuffer().then(function(buffer) {
+                    const fileContents = new Uint8Array(buffer);
+                    console.log('fetched /debugger/sample.skp');
+                    const player = Debugger.SkpFilePlayer(fileContents);
+                    // Draw picture
+                    player.drawTo(surface, 789); // number of commands in sample file
+                    surface.flush();
+
+                    console.log('drew picture to canvas element');
+                    surface.dispose();
+                    done();
+                });
+              });
+        }));
+    });
+
+    it('can load and draw a skp file on a Web GL canvas', function(done) {
+        LoadDebugger.then(catchException(done, () => {
+            const surface = Debugger.MakeWebGLCanvasSurface(
+                document.getElementById('debugger_view'));
+
+            fetch('/debugger/sample.skp').then(function(response) {
+                // Load test file
+                if (!response.ok) {
+                  throw new Error("HTTP error, status = " + response.status);
+                }
+                response.arrayBuffer().then(function(buffer) {
+                    const fileContents = new Uint8Array(buffer);
+                    console.log('fetched /debugger/sample.skp');
+                    const player = Debugger.SkpFilePlayer(fileContents);
+                    // Draw picture
+                    player.drawTo(surface, 789); // number of commands in sample file
+                    surface.flush();
+
+                    console.log('drew picture to canvas element');
+                    surface.dispose();
+                    done();
+                });
+              });
+        }));
+    });
+});
diff --git a/src/third_party/skia/experimental/xform/SkShape.cpp b/src/third_party/skia/experimental/xform/SkShape.cpp
new file mode 100644
index 0000000..cd57b5e
--- /dev/null
+++ b/src/third_party/skia/experimental/xform/SkShape.cpp
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2019 Google LLC.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "experimental/xform/SkShape.h"
+#include "experimental/xform/SkXform.h"
+#include "include/core/SkCanvas.h"
+
+void GeoShape::draw(XContext* ctx) {
+    ctx->drawRect(fRect, fPaint, this->xform());
+}
+
+void GroupShape::draw(XContext* ctx) {
+    if (fArray.count() == 0) {
+        return;
+    }
+
+    ctx->push(this->xform());
+    for (auto s : fArray) {
+        s->draw(ctx);
+    }
+    ctx->pop();
+}
diff --git a/src/third_party/skia/experimental/xform/SkShape.h b/src/third_party/skia/experimental/xform/SkShape.h
new file mode 100644
index 0000000..3106e26
--- /dev/null
+++ b/src/third_party/skia/experimental/xform/SkShape.h
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2019 Google LLC.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkShape_DEFINED
+#define SkShape_DEFINED
+
+#include "experimental/xform/SkXform.h"
+#include "include/core/SkPaint.h"
+
+class SkCanvas;
+
+class XContext {
+public:
+    virtual ~XContext() {}
+
+    void push(Xform* parentXform) { this->onPush(parentXform); }
+    void pop() { this->onPop(); }
+
+    void drawRect(const SkRect&, const SkPaint&, Xform* localXform);
+
+    static std::unique_ptr<XContext> Make(SkCanvas*);
+
+protected:
+    virtual void onPush(Xform*) = 0;
+    virtual void onPop() = 0;
+
+    virtual void onDrawRect(const SkRect&, const SkPaint&, Xform*) = 0;
+};
+
+class Shape : public SkRefCnt {
+    sk_sp<Xform>    fXform;
+
+public:
+    Shape(sk_sp<Xform> x = nullptr) : fXform(std::move(x)) {}
+
+    Xform* xform() const { return fXform.get(); }
+    void setXform(sk_sp<Xform> x) {
+        fXform = std::move(x);
+    }
+
+    virtual void draw(XContext*) {}
+};
+
+class GeoShape : public Shape {
+    SkRect  fRect;
+    SkPaint fPaint;
+
+    GeoShape(sk_sp<Xform> x, const SkRect& r, SkColor c) : Shape(std::move(x)), fRect(r) {
+        fPaint.setColor(c);
+    }
+
+public:
+    static sk_sp<Shape> Make(sk_sp<Xform> x, const SkRect& r, SkColor c) {
+        return sk_sp<Shape>(new GeoShape(std::move(x), r, c));
+    }
+
+    void draw(XContext*) override;
+};
+
+class GroupShape : public Shape {
+    SkTDArray<Shape*> fArray;
+
+    GroupShape(sk_sp<Xform> x) : Shape(std::move(x)) {}
+
+public:
+    static sk_sp<GroupShape> Make(sk_sp<Xform> x = nullptr) {
+        return sk_sp<GroupShape>(new GroupShape(std::move(x)));
+    }
+
+    static sk_sp<GroupShape> Make(sk_sp<Xform> x, sk_sp<Shape> s) {
+        auto g = sk_sp<GroupShape>(new GroupShape(std::move(x)));
+        g->append(std::move(s));
+        return g;
+    }
+
+    ~GroupShape() override {
+        fArray.unrefAll();
+    }
+
+    int count() const { return fArray.count(); }
+    Shape* get(int index) const { return fArray[index]; }
+    void set(int index, sk_sp<Shape> s) {
+        fArray[index] = s.release();
+    }
+
+    void append(sk_sp<Shape> s) {
+        *fArray.append() = s.release();
+    }
+    void insert(int index, sk_sp<Shape> s) {
+        *fArray.insert(index) = s.release();
+    }
+    void remove(int index) {
+        SkSafeUnref(fArray[index]);
+        fArray.remove(index);
+    }
+
+    void draw(XContext*) override ;
+};
+
+#endif
diff --git a/src/third_party/skia/experimental/xform/SkXform.cpp b/src/third_party/skia/experimental/xform/SkXform.cpp
new file mode 100644
index 0000000..ddab4f1
--- /dev/null
+++ b/src/third_party/skia/experimental/xform/SkXform.cpp
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2019 Google LLC.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "experimental/xform/SkXform.h"
+
+static std::atomic<uint32_t> gGenID{1};
+Xform::GenID Xform::NextGenID() {
+    return gGenID++;
+}
+
+#ifdef SK_DEBUG
+void Xform::debugValidate() const {
+    if (this->isCached() && fParent) {
+        SkASSERT(fParent->isCached());
+    }
+    for (auto c : fChildren) {
+        SkASSERT(c->parent() == this);
+        c->debugValidate();
+    }
+}
+#endif
+
+void Xform::setParent(sk_sp<Xform> parent) {
+    if (parent == fParent) {
+        return;
+    }
+
+    if (fParent) {
+        fParent->internalRemoveChild(this);
+    }
+    if (parent) {
+        parent->internalAddChild(this);
+    }
+    fParent = std::move(parent);
+
+    // Potentially we could skip this if knew that our old and new parents
+    // were both cached, and they started us in the same state...
+    // For now, we conservatively always inval
+    this->invalidateCaches();
+
+    this->debugValidate();
+}
+
+void Xform::internalAddChild(Xform* child) {
+    SkASSERT(fChildren.find(child) < 0);
+    fChildren.push_back(child);
+}
+
+void Xform::internalRemoveChild(Xform* child) {
+    int index = fChildren.find(child);
+    SkASSERT(index >= 0);
+    fChildren.removeShuffle(index);
+}
+
+void Xform::invalidateCaches() {
+    fGenID = 0;
+    if (this->isCached()) {
+        this->internalInvalidateCaches();
+        for (auto c : fChildren) {
+            c->invalidateCaches();
+        }
+    }
+}
+
+void Xform::visit(XformResolver* resolver) {
+    this->onVisit(resolver);
+}
+
+void Xform::setCache(const SkMatrix& ctm, sk_sp<ClipCache> clip) {
+    fCTM = ctm;
+    fClip = std::move(clip);
+    fGenID = NextGenID();
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////
+
+void MatrixXF::onVisit(XformResolver* resolver) {
+    resolver->concat(fLocalMatrix);
+}
+
+void ClipXF::onVisit(XformResolver* resolver) {
+    resolver->clipRect(fRect, fOp);
+}
diff --git a/src/third_party/skia/experimental/xform/SkXform.h b/src/third_party/skia/experimental/xform/SkXform.h
new file mode 100644
index 0000000..c47a7be
--- /dev/null
+++ b/src/third_party/skia/experimental/xform/SkXform.h
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2019 Google LLC.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef SkXform_DEFINED
+#define SkXform_DEFINED
+
+#include "include/core/SkClipOp.h"
+#include "include/core/SkMatrix.h"
+#include "include/core/SkPath.h"
+#include "include/core/SkRRect.h"
+#include "include/core/SkRect.h"
+#include "include/core/SkRefCnt.h"
+
+#include "include/private/SkTDArray.h"
+
+class XformResolver {
+public:
+    virtual ~XformResolver() {}
+
+    virtual void concat(const SkMatrix&) = 0;
+    virtual void clipRect(const SkRect&, SkClipOp) = 0;
+    virtual void clipRRect(const SkRRect&, SkClipOp) = 0;
+    virtual void clipPath(const SkPath&, SkClipOp) = 0;
+};
+
+class ClipCache : public SkRefCnt {
+public:
+    ClipCache() {}
+};
+
+class Xform : public SkRefCnt {
+public:
+    typedef uint32_t GenID;
+
+    Xform* parent() const { return fParent.get(); }
+    void setParent(sk_sp<Xform> p);
+
+    void visit(XformResolver* resolver);
+
+    GenID genID() const { return fGenID; }
+
+    bool isCached() const { return !!fClip; }
+    void invalidateCaches();
+
+    const SkMatrix& ctm() const { return fCTM; }
+    ClipCache* clip() const { return fClip.get(); }
+
+    void setCache(const SkMatrix&, sk_sp<ClipCache>);
+
+protected:
+    Xform(sk_sp<Xform> parent = nullptr) {
+        if (parent) {
+            this->setParent(std::move(parent));
+        }
+    }
+
+    virtual void onVisit(XformResolver*) {}
+
+private:
+    sk_sp<Xform> fParent;
+
+    // unowned bare pointers
+    SkTDArray<Xform*> fChildren;
+
+    // cache
+    SkMatrix         fCTM;
+    sk_sp<ClipCache> fClip;
+
+    uint32_t fGenID = 0;
+
+    static GenID NextGenID();
+
+    void internalInvalidateCaches() { fClip = nullptr; }
+    void internalAddChild(Xform*);
+    void internalRemoveChild(Xform*);
+
+#ifdef SK_DEBUG
+    void debugValidate() const;
+#else
+    void debugValidate() const {}
+#endif
+};
+
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+class MatrixXF : public Xform {
+public:
+    static sk_sp<MatrixXF> Make(sk_sp<Xform> parent = nullptr) {
+        return sk_sp<MatrixXF>(new MatrixXF(std::move(parent)));
+    }
+
+    MatrixXF(sk_sp<Xform> parent) : Xform(std::move(parent)) {
+        fLocalMatrix.reset();
+    }
+
+    void setLocalMatrix(const SkMatrix& m) {
+        fLocalMatrix = m;
+    }
+    void setTranslate(SkScalar sx, SkScalar sy) {
+        fLocalMatrix.setTranslate(sx, sy);
+    }
+    void setScale(SkScalar sx, SkScalar sy) {
+        fLocalMatrix.setScale(sx, sy);
+    }
+    void setRotate(SkScalar degrees) {
+        fLocalMatrix.setRotate(degrees);
+    }
+
+protected:
+    void onVisit(XformResolver* resolver) override;
+
+private:
+    SkMatrix fLocalMatrix;
+};
+
+class ClipXF : public Xform {
+public:
+    ClipXF(sk_sp<Xform> parent = nullptr) : Xform(std::move(parent)) {}
+    ClipXF(sk_sp<Xform> parent, const SkRect& r, SkClipOp op = SkClipOp::kIntersect)
+        : Xform(std::move(parent))
+        , fRect(r)
+        , fOp(op)
+    {}
+
+    void setRect(const SkRect& r, SkClipOp op = SkClipOp::kIntersect) {
+        fRect = r;
+        fOp = op;
+    }
+
+protected:
+    void onVisit(XformResolver* resolver) override;
+
+private:
+    SkRect      fRect;
+    SkClipOp    fOp;
+};
+
+#endif
diff --git a/src/third_party/skia/experimental/xform/XContext.cpp b/src/third_party/skia/experimental/xform/XContext.cpp
new file mode 100644
index 0000000..d2a90774
--- /dev/null
+++ b/src/third_party/skia/experimental/xform/XContext.cpp
@@ -0,0 +1,172 @@
+/*
+ * Copyright 2019 Google LLC.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "experimental/xform/SkShape.h"
+#include "experimental/xform/SkXform.h"
+#include "include/core/SkCanvas.h"
+
+#include "src/core/SkRasterClip.h"
+
+class RasterClipCache : public ClipCache {
+public:
+    RasterClipCache(const SkRasterClip& rc) : fRC(std::move(rc)) {}
+
+    SkRasterClip fRC;
+};
+
+static const SkRasterClip& peek_rasterclip(ClipCache* clip) {
+    return ((RasterClipCache*)clip)->fRC;
+}
+
+class RasterXformResolver : public XformResolver {
+public:
+    RasterXformResolver(const SkIRect& bounds)
+        : fBounds(bounds)
+        , fCTM(SkMatrix::I())
+        , fRC(bounds)
+    {}
+
+    RasterXformResolver(Xform* parent) {
+        const SkRasterClip& rc = peek_rasterclip(parent->clip());
+        fBounds = rc.getBounds();
+        fCTM = parent->ctm();
+        fRC = rc;
+    }
+
+    void concat(const SkMatrix& m) override {
+        fCTM.preConcat(m);
+    }
+
+    void clipRect(const SkRect& r, SkClipOp op) override {
+        fRC.op(r, fCTM, fBounds, (SkRegion::Op)op, false);
+        fCache.reset(nullptr);
+    }
+
+    void clipRRect(const SkRRect& rr, SkClipOp op) override {
+        fRC.op(rr, fCTM, fBounds, (SkRegion::Op)op, false);
+        fCache.reset(nullptr);
+    }
+    void clipPath(const SkPath& p, SkClipOp op) override {
+        fRC.op(p, fCTM, fBounds, (SkRegion::Op)op, false);
+        fCache.reset(nullptr);
+    }
+
+    const SkMatrix& ctm() const { return fCTM; }
+
+    sk_sp<ClipCache> snapCache() {
+        if (!fCache) {
+            fCache = sk_sp<ClipCache>(new RasterClipCache(fRC));
+        }
+        return fCache;
+    }
+
+private:
+    SkIRect         fBounds;
+    SkMatrix        fCTM;
+    SkRasterClip    fRC;
+    sk_sp<ClipCache> fCache;
+};
+
+void XContext::drawRect(const SkRect& r, const SkPaint& p, Xform* x) {
+    this->onDrawRect(r, p, x);
+}
+
+class CanvasXContext : public XContext {
+public:
+    CanvasXContext(SkCanvas* canvas) : fCanvas(canvas) {
+        fBounds = {
+            0, 0, canvas->getBaseLayerSize().width(), canvas->getBaseLayerSize().height()
+        };
+    }
+
+protected:
+    static int count_nodes(const Xform* x) {
+        int n = 0;
+        for (; x; x = x->parent()) {
+            n += 1;
+        }
+        return n;
+    }
+
+    void onPush(Xform* x) override {
+        int n = count_nodes(x);
+        fCounts.push_back(n);
+        if (n) {
+            int prevCount = fStack.count();
+            // now push the x tree such that we get [... grandparent, parent, x] in the array
+            Xform** ptr = fStack.append(n) + n;
+            Xform* xx = x;
+            while (n --> 0) {
+                *--ptr = xx;
+                xx = xx->parent();
+            }
+            // init with the old tail
+            if (prevCount > 0) {
+                RasterXformResolver res(fStack[prevCount - 1]);
+                for (int i = prevCount; i < fStack.count(); ++i) {
+                    fStack[i]->visit(&res);
+                    fStack[i]->setCache(res.ctm(), res.snapCache());
+                }
+            } else if (!x->genID()) {
+                RasterXformResolver res(fBounds);
+                for (int i = 0; i < fStack.count(); ++i) {
+                    fStack[i]->visit(&res);
+                    fStack[i]->setCache(res.ctm(), res.snapCache());
+                }
+                SkASSERT(x->genID());
+            }
+        }
+    }
+
+    void onPop() override {
+        int n = fCounts.top();
+        fCounts.pop();
+        if (n) {
+            fStack.setCount(fStack.count() - n);
+        }
+    }
+
+    void onDrawRect(const SkRect& r, const SkPaint& p, Xform* x) override {
+        Xform* parent = this->parentOrNull();
+        Xform::GenID parentID = parent ? parent->genID() : 0;
+        SkASSERT(parent == nullptr || parentID != 0);
+
+        if (x) {
+            SkASSERT(x->genID() != parentID || (x->genID() == 0 && parentID == 0));
+            if (x->genID() <= parentID) {    // x is out of date
+                this->push(x);              // will update caches
+                this->pop();
+            }
+            SkASSERT(x->genID() > parentID);
+        } else {
+            x = parent;
+        }
+
+        SkAutoCanvasRestore acr(fCanvas, false);
+        if (x) {
+            fCanvas->save();
+            fCanvas->concat(x->ctm());
+            fCanvas->clipRegion(peek_rasterclip(x->clip()).bwRgn());
+        }
+        fCanvas->drawRect(r, p);
+    }
+
+private:
+    SkTDArray<Xform*> fStack;
+    SkTDArray<int>    fCounts;
+
+    SkCanvas* fCanvas;    // bare pointer
+    SkIRect   fBounds;
+
+    Xform* parentOrNull() {
+        return fStack.count() > 0 ? fStack.top() : nullptr;
+    }
+};
+
+std::unique_ptr<XContext> XContext::Make(SkCanvas* canvas) {
+    return std::unique_ptr<XContext>(new CanvasXContext(canvas));
+}