<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,14 +1,14 @@
 /*
- * Raphael 0.6 - JavaScript Vector Library
+ * Raphael 0.6.4 - JavaScript Vector Library
  *
- * Copyright (c) 2008 Dmitry Baranovskiy (http://raphaeljs.com)
+ * Copyright (c) 2008 &#8211; 2009 Dmitry Baranovskiy (http://raphaeljs.com)
  * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
  */
 var Raphael = (function (type) {
         var r = function () {
             return r._create.apply(r, arguments);
         };
-        r.version = &quot;0.6&quot;;
+        r.version = &quot;0.6.4&quot;;
         r.type = type;
         var availableAttrs = {cx: 0, cy: 0, fill: &quot;#fff&quot;, &quot;fill-opacity&quot;: 1, font: '16px &quot;Arial&quot;', &quot;font-family&quot;: '&quot;Arial&quot;', &quot;font-size&quot;: &quot;16&quot;, gradient: 0, height: 0, opacity: 1, path: &quot;M0,0&quot;, r: 0, rotation: 0, rx: 0, ry: 0, scale: &quot;1 1&quot;, stroke: &quot;#000&quot;, &quot;stroke-dasharray&quot;: &quot;&quot;, &quot;stroke-linecap&quot;: &quot;butt&quot;, &quot;stroke-linejoin&quot;: &quot;butt&quot;, &quot;stroke-miterlimit&quot;: 0, &quot;stroke-opacity&quot;: 1, &quot;stroke-width&quot;: 1, translation: &quot;0 0&quot;, width: 0, x: 0, y: 0},
             availableAnimAttrs = {cx: &quot;number&quot;, cy: &quot;number&quot;, fill: &quot;colour&quot;, &quot;fill-opacity&quot;: &quot;number&quot;, &quot;font-size&quot;: &quot;number&quot;, height: &quot;number&quot;, opacity: &quot;number&quot;, path: &quot;path&quot;, r: &quot;number&quot;, rotation: &quot;number&quot;, rx: &quot;number&quot;, ry: &quot;number&quot;, scale: &quot;csv&quot;, stroke: &quot;colour&quot;, &quot;stroke-opacity&quot;: &quot;number&quot;, &quot;stroke-width&quot;: &quot;number&quot;, translation: &quot;csv&quot;, width: &quot;number&quot;, x: &quot;number&quot;, y: &quot;number&quot;},
@@ -234,10 +234,10 @@ var Raphael = (function (type) {
                     this.attrs.path += &quot;z&quot;;
                     return this;
                 };
-                if (typeof pathString == &quot;string&quot;) {
+                if (pathString) {
                     p.absolutely();
                     p.attrs.path = &quot;&quot;;
-                    C.pathfinder(p, pathString);
+                    C.pathfinder(p, &quot;&quot; + pathString);
                 }
                 p.setBox();
                 setFillAndStroke(p, params);
@@ -268,12 +268,16 @@ var Raphael = (function (type) {
                     var xy = params.scale.split(/[, ]+/);
                     o.scale(xy[0], xy[1]);
                 }
+                if (o.type == &quot;image&quot; &amp;&amp; params.opacity) {
+                    o.node.filterOpacity = &quot; progid:DXImageTransform.Microsoft.Alpha(opacity=&quot; + (params.opacity * 100) + &quot;)&quot;;
+                    o.node.style.filter = (o.node.filterMatrix || &quot;&quot;) + (o.node.filterOpacity || &quot;&quot;);
+                }
                 params[&quot;font-family&quot;] &amp;&amp; (s.fontFamily = params[&quot;font-family&quot;]);
                 params[&quot;font-size&quot;] &amp;&amp; (s.fontSize = params[&quot;font-size&quot;]);
                 params[&quot;font&quot;] &amp;&amp; (s.font = params[&quot;font&quot;]);
                 params[&quot;font-weight&quot;] &amp;&amp; (s.fontWeight = params[&quot;font-weight&quot;]);
                 if (typeof params.opacity != &quot;undefined&quot; || typeof params[&quot;stroke-width&quot;] != &quot;undefined&quot; || typeof params.fill != &quot;undefined&quot; || typeof params.stroke != &quot;undefined&quot;) {
-                    o = o.shape || o[0];
+                    o = o.shape || o.node;
                     var fill = (o.getElementsByTagName(&quot;fill&quot;) &amp;&amp; o.getElementsByTagName(&quot;fill&quot;)[0]) || document.createElement(&quot;rvml:fill&quot;);
                     if (&quot;fill-opacity&quot; in params || &quot;opacity&quot; in params) {
                         fill.opacity = ((params[&quot;fill-opacity&quot;] + 1 || 2) - 1) * ((params.opacity + 1 || 2) - 1);
@@ -437,11 +441,18 @@ var Raphael = (function (type) {
                         this.textpath.v = [&quot;m&quot;, Math.round(attr.x), &quot;, &quot;, Math.round(attr.y - 2), &quot;l&quot;, Math.round(attr.x) + 1, &quot;, &quot;, Math.round(attr.y - 2)].join(&quot;&quot;);
                         return;
                     case &quot;path&quot;:
-                        var dim = Raphael.pathDimensions(this.attrs.path),
-                        x = dim.x;
-                        y = dim.y;
-                        w = dim.width;
-                        h = dim.height;
+                        if (!this.attrs.path) {
+                            x = 0;
+                            y = 0;
+                            w = this.vml.width;
+                            h = this.vml.height;
+                        } else {
+                            var dim = Raphael.pathDimensions(this.attrs.path),
+                            x = dim.x;
+                            y = dim.y;
+                            w = dim.width;
+                            h = dim.height;
+                        }
                         break;
                     default:
                         x = 0;
@@ -519,6 +530,9 @@ var Raphael = (function (type) {
             };
             Element.prototype.attr = function () {
                 if (arguments.length == 1 &amp;&amp; typeof arguments[0] == &quot;string&quot;) {
+                    if (arguments[0] == &quot;translation&quot;) {
+                        return this.translate();
+                    }
                     return this.attrs[arguments[0]];
                 }
                 if (this.attrs &amp;&amp; arguments.length == 1 &amp;&amp; arguments[0] instanceof Array) {
@@ -576,6 +590,18 @@ var Raphael = (function (type) {
                 }
                 return this;
             };
+            Element.prototype.insertAfter = function (element) {
+                if (element.Group.nextSibling) {
+                    element.Group.parentNode.insertBefore(this.Group, element.Group.nextSibling);
+                } else {
+                    element.Group.parentNode.appendChild(this.Group);
+                }
+                return this;
+            };
+            Element.prototype.insertBefore = function (element) {
+                element.Group.parentNode.insertBefore(this.Group, element.Group);
+                return this;
+            };
             var theCircle = function (vml, x, y, r) {
                 var g = document.createElement(&quot;rvml:group&quot;);
                 var o = document.createElement(&quot;rvml:oval&quot;);
@@ -727,6 +753,7 @@ var Raphael = (function (type) {
                     document.createStyleSheet().addRule(&quot;rvml\\:*&quot;, &quot;behavior:url(#default#VML)&quot;);
                 }
                 var c = document.createElement(&quot;div&quot;),
+                    d = document.createElement(&quot;div&quot;),
                     r = C.canvas = document.createElement(&quot;rvml:group&quot;),
                     cs = c.style, rs = r.style;
                 C.width = width;
@@ -734,7 +761,11 @@ var Raphael = (function (type) {
                 width = width || &quot;320px&quot;;
                 height = height || &quot;200px&quot;;
                 cs.clip = &quot;rect(0 &quot; + width + &quot; &quot; + height + &quot; 0)&quot;;
+                cs.top = &quot;-2px&quot;;
+                cs.left = &quot;-2px&quot;;
                 cs.position = &quot;absolute&quot;;
+                rs.position = &quot;absolute&quot;;
+                d.style.position = &quot;relative&quot;;
                 rs.width  = width;
                 rs.height = height;
                 r.coordsize = (width == &quot;100%&quot; ? width : parseFloat(width)) + &quot; &quot; + (height == &quot;100%&quot; ? height : parseFloat(height));
@@ -748,8 +779,9 @@ var Raphael = (function (type) {
 
                 r.appendChild(b);
                 c.appendChild(r);
+                d.appendChild(c);
                 if (container == 1) {
-                    document.body.appendChild(c);
+                    document.body.appendChild(d);
                     cs.position = &quot;absolute&quot;;
                     cs.left = x + &quot;px&quot;;
                     cs.top = y + &quot;px&quot;;
@@ -765,9 +797,9 @@ var Raphael = (function (type) {
                     cs.width = container.style.width = width;
                     cs.height = container.style.height = height;
                     if (container.firstChild) {
-                        container.insertBefore(c, container.firstChild);
+                        container.insertBefore(d, container.firstChild);
                     } else {
-                        container.appendChild(c);
+                        container.appendChild(d);
                     }
                 }
                 for (var prop in C) {
@@ -787,7 +819,7 @@ var Raphael = (function (type) {
                 return container;
             };
             C.remove = function () {
-                C.canvas.parentNode.parentNode.removeChild(C.canvas.parentNode);
+                C.canvas.parentNode.parentNode.parentNode.removeChild(C.canvas.parentNode.parentNode);
             };
         }
         if (type == &quot;SVG&quot;) {
@@ -967,10 +999,10 @@ var Raphael = (function (type) {
                     this.attrs.path = oldD + &quot;Z &quot;;
                     return this;
                 };
-                if (typeof pathString == &quot;string&quot;) {
-                    p.attrs.path = pathString;
+                if (pathString) {
+                    p.attrs.path = &quot;&quot; + pathString;
                     p.absolutely();
-                    C.pathfinder(p, pathString);
+                    C.pathfinder(p, p.attrs.path);
                 }
                 if (params) {
                     setFillAndStroke(p, params);
@@ -1021,13 +1053,13 @@ var Raphael = (function (type) {
                     value = dasharray[value.toString().toLowerCase()];
                     if (value) {
                         var width = o.attrs[&quot;stroke-width&quot;] || &quot;1&quot;,
-                            butt = {round: width, square: width, butt: 0}[o.attrs[&quot;stroke-linecap&quot;]] || 0,
+                            butt = {round: width, square: width, butt: 0}[o.attrs[&quot;stroke-linecap&quot;] || params[&quot;stroke-linecap&quot;]] || 0,
                             dashes = [];
                         for (var i = 0, ii = value.length; i &lt; ii; i++) {
                             dashes.push(value[i] * width + ((i % 2) ? 1 : -1) * butt);
                         }
                         value = dashes.join(&quot;,&quot;);
-                        o[0].setAttribute(&quot;stroke-dasharray&quot;, value);
+                        o.node.setAttribute(&quot;stroke-dasharray&quot;, value);
                     }
                 };
                 for (var att in params) {
@@ -1036,34 +1068,34 @@ var Raphael = (function (type) {
                     switch (att) {
                         case &quot;path&quot;:
                             if (o.type == &quot;path&quot;) {
-                                o[0].setAttribute(&quot;d&quot;, &quot;M0,0&quot;);
+                                o.node.setAttribute(&quot;d&quot;, &quot;M0,0&quot;);
                                 C.pathfinder(o, value);
                             }
                         case &quot;rx&quot;:
                         case &quot;cx&quot;:
                         case &quot;x&quot;:
-                            o[0].setAttribute(att, value);
+                            o.node.setAttribute(att, value);
                             updatePosition(o);
                             break;
                         case &quot;ry&quot;:
                         case &quot;cy&quot;:
                         case &quot;y&quot;:
-                            o[0].setAttribute(att, value);
+                            o.node.setAttribute(att, value);
                             updatePosition(o);
                             break;
                         case &quot;width&quot;:
-                            o[0].setAttribute(att, value);
+                            o.node.setAttribute(att, value);
                             break;
                         case &quot;height&quot;:
-                            o[0].setAttribute(att, value);
+                            o.node.setAttribute(att, value);
                             break;
                         case &quot;gradient&quot;:
-                            addGrdientFill(o[0], value, o.svg);
+                            addGrdientFill(o.node, value, o.svg);
                             break;
                         case &quot;stroke-width&quot;:
-                            o[0].style.strokeWidth = value;
+                            o.node.style.strokeWidth = value;
                             // Need following line for Firefox
-                            o[0].setAttribute(att, value);
+                            o.node.setAttribute(att, value);
                             if (o.attrs[&quot;stroke-dasharray&quot;]) {
                                 addDashes(o, o.attrs[&quot;stroke-dasharray&quot;]);
                             }
@@ -1073,8 +1105,8 @@ var Raphael = (function (type) {
                             break;
                         case &quot;text&quot;:
                             if (o.type == &quot;text&quot;) {
-                                o[0].childNodes.length &amp;&amp; o[0].removeChild(o[0].firstChild);
-                                o[0].appendChild(document.createTextNode(value));
+                                o.node.childNodes.length &amp;&amp; o.node.removeChild(o.node.firstChild);
+                                o.node.appendChild(document.createTextNode(value));
                             }
                             break;
                         case &quot;rotation&quot;:
@@ -1117,8 +1149,8 @@ var Raphael = (function (type) {
                                 document.body.appendChild(img);
                                 img.src = isURL[1];
                                 o.svg.defs.appendChild(el);
-                                o[0].style.fill = &quot;url(#&quot; + el.id + &quot;)&quot;;
-                                o[0].setAttribute(&quot;fill&quot;, &quot;url(#&quot; + el.id + &quot;)&quot;);
+                                o.node.style.fill = &quot;url(#&quot; + el.id + &quot;)&quot;;
+                                o.node.setAttribute(&quot;fill&quot;, &quot;url(#&quot; + el.id + &quot;)&quot;);
                                 o.pattern = el;
                                 updatePosition(o);
                                 break;
@@ -1127,9 +1159,9 @@ var Raphael = (function (type) {
                             var cssrule = att.replace(/(\-.)/g, function (w) {
                                 return w.substring(1).toUpperCase();
                             });
-                            o[0].style[cssrule] = value;
+                            o.node.style[cssrule] = value;
                             // Need following line for Firefox
-                            o[0].setAttribute(att, value);
+                            o.node.setAttribute(att, value);
                             break;
                     }
                 }
@@ -1141,7 +1173,7 @@ var Raphael = (function (type) {
                 this.node = node;
                 this.svg = svg;
                 this.attrs = this.attrs || {};
-                this.transformations = []; // rotate, translate, scale, matrix
+                this.transformations = []; // rotate, translate, scale
                 this._ = {
                     tx: 0,
                     ty: 0,
@@ -1191,22 +1223,22 @@ var Raphael = (function (type) {
                 } else {
                     this.transformations[0] = &quot;&quot;;
                 }
-                this[0].setAttribute(&quot;transform&quot;, this.transformations.join(&quot; &quot;));
+                this.node.setAttribute(&quot;transform&quot;, this.transformations.join(&quot; &quot;));
                 return this;
             };
             Element.prototype.hide = function () {
-                this[0].style.display = &quot;none&quot;;
+                this.node.style.display = &quot;none&quot;;
                 return this;
             };
             Element.prototype.show = function () {
-                this[0].style.display = &quot;block&quot;;
+                this.node.style.display = &quot;block&quot;;
                 return this;
             };
             Element.prototype.remove = function () {
-                this[0].parentNode.removeChild(this[0]);
+                this.node.parentNode.removeChild(this.node);
             };
             Element.prototype.getBBox = function () {
-                return this[0].getBBox();
+                return this.node.getBBox();
             };
             Element.prototype.attr = function () {
                 if (arguments.length == 1 &amp;&amp; typeof arguments[0] == &quot;string&quot;) {
@@ -1232,15 +1264,27 @@ var Raphael = (function (type) {
                 return this;
             };
             Element.prototype.toFront = function () {
-                this[0].parentNode.appendChild(this[0]);
+                this.node.parentNode.appendChild(this.node);
                 return this;
             };
             Element.prototype.toBack = function () {
-                if (this[0].parentNode.firstChild != this[0]) {
-                    this[0].parentNode.insertBefore(this[0], this[0].parentNode.firstChild);
+                if (this.node.parentNode.firstChild != this.node) {
+                    this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild);
+                }
+                return this;
+            };
+            Element.prototype.insertAfter = function (element) {
+                if (element.node.nextSibling) {
+                    element.node.parentNode.insertBefore(this.node, element.node.nextSibling);
+                } else {
+                    element.node.parentNode.appendChild(this.node);
                 }
                 return this;
             };
+            Element.prototype.insertBefore = function (element) {
+                element.node.parentNode.insertBefore(this.node, element.node);
+                return this;
+            };
             var theCircle = function (svg, x, y, r) {
                 var el = document.createElementNS(svg.svgns, &quot;circle&quot;);
                 el.setAttribute(&quot;cx&quot;, x);
@@ -1456,12 +1500,6 @@ var Raphael = (function (type) {
             C.group = function () {
                 return theGroup(this);
             };
-            C.linerect = function (x, y, w, h, r) {
-                if (r &amp;&amp; parseInt(r, 10)) {
-                    return this.path({stroke: &quot;#000&quot;}).moveTo(x + r, y).lineTo(x + w - r, y).addRoundedCorner(r, &quot;rd&quot;).lineTo(x + w, y + h - r).addRoundedCorner(r, &quot;dl&quot;).lineTo(x + r, y + h).addRoundedCorner(r, &quot;lu&quot;).lineTo(x, y + r).addRoundedCorner(r, &quot;ur&quot;).andClose();
-                }
-                return this.path({stroke: &quot;#000&quot;}).moveTo(x, y).lineTo(x + w, y).lineTo(x + w, y + h).lineTo(x, y + h).andClose();
-            };
             C.drawGrid = function (x, y, w, h, wv, hv, color) {
                 color = color || &quot;#000&quot;;
                 var p = this.path({stroke: color, &quot;stroke-width&quot;: 1})
@@ -1477,7 +1515,7 @@ var Raphael = (function (type) {
                 return p;
             };
             C.safari = function () {
-                if (r.type == &quot;SVG&quot;) {
+                if (navigator.vendor == &quot;Apple Computer, Inc.&quot;) {
                     var rect = C.rect(-C.width, -C.height, C.width * 3, C.height * 3).attr({stroke: &quot;none&quot;});
                     setTimeout(function () {rect.remove();}, 0);
                 }
@@ -1508,16 +1546,18 @@ var Raphael = (function (type) {
                             cx = this.attr(&quot;cx&quot;) * dirx;
                             cy = this.attr(&quot;cy&quot;) * diry;
                         } else {
-                            s.filter = &quot;progid:DXImageTransform.Microsoft.Matrix(M11=&quot; + dirx +
+                            this.node.filterMatrix = &quot; progid:DXImageTransform.Microsoft.Matrix(M11=&quot; + dirx +
                                 &quot;, M12=0, M21=0, M22=&quot; + diry +
                                 &quot;, Dx=0, Dy=0, sizingmethod='auto expand', filtertype='bilinear')&quot;;
+                            s.filter = (this.node.filterMatrix || &quot;&quot;) + (this.node.filterOpacity || &quot;&quot;);
                         }
                     } else {
                         if (this.transformations) {
                             this.transformations[2] = &quot;&quot;;
                             this.node.setAttribute(&quot;transform&quot;, this.transformations.join(&quot; &quot;));
                         } else {
-                            s.filter = &quot;&quot;;
+                            this.node.filterMatrix = &quot;&quot;;
+                            s.filter = (this.node.filterMatrix || &quot;&quot;) + (this.node.filterOpacity || &quot;&quot;);
                         }
                     }
                     switch (this.type) {
@@ -1689,37 +1729,6 @@ var Raphael = (function (type) {
                 return this;
             };
             
-            // depricated
-            Element.prototype.animateTo = function (x, y, ms, callback) {
-                clearTimeout(this.animation_in_progress);
-                if (&quot;cx&quot; in this.attrs || &quot;x&quot; in this.attrs) {
-                    var is_round = (&quot;cx&quot; in this.attrs),
-                        X = this.attrs.cx || this.attrs.x,
-                        Y = this.attrs.cy || this.attrs.y;
-                    if (x == X &amp;&amp; y == Y) {
-                        return this;
-                    }
-                    var dy = y - Y,
-                        dx = x - X;
-                    var start = new Date(),
-                        that = this;
-                    (function () {
-                        var time = (new Date()).getTime() - start.getTime();
-                        if (time &lt; ms) {
-                            var x1 = X + time * dx / ms;
-                            var y1 = Y + time * dy / ms;
-                            that.attr(is_round ? {cx: x1, cy: y1} : {x: x1, y: y1});
-                            that.animation_in_progress = setTimeout(arguments.callee, 1);
-                            C.safari();
-                        } else {
-                            that.attr(is_round ? {cx: x, cy: y} : {x: x, y: y});
-                            C.safari();
-                            callback &amp;&amp; callback.call(that);
-                        }
-                    })();
-                }
-                return this;
-            };
             C.pathfinder = function (p, path) {
                 var commands = {
                     M: function (x, y) {
@@ -1773,7 +1782,8 @@ if (Raphael.vml &amp;&amp; window.CanvasRenderingContext2D) {
     Raphael.vml = Raphael.svg = false;
 }
 Raphael.toString = function () {
-    return &quot;Your browser supports &quot; + this.type + &quot;.\nYou are running &quot; + unescape(&quot;Rapha%EBl%20&quot;) + this.version;
+    return  &quot;Your browser &quot; + (this.vml ? &quot;doesn't &quot;: &quot;&quot;) + &quot;support&quot; + (this.svg ? &quot;s&quot;: &quot;&quot;) +
+            &quot; SVG.\nYou are running &quot; + unescape(&quot;Rapha%EBl%20&quot;) + this.version;
 };
 // generic utilities
 Raphael.hsb2rgb = function (hue, saturation, brightness) {
@@ -1939,9 +1949,19 @@ Raphael.getColor.reset = function () {
     this.start = undefined;
 };
 Raphael.parsePathString = function (pathString) {
-    var paramCounts = {a: 7, c: 6, h: 1, l: 2, m: 2, q: 4, s: 4, t: 2, v: 1, z: 0};
-    var data = [];
-    pathString.replace(/([achlmqstvz])\s*((-?\d*\.?\d*\s*,?\s*)+)/ig, function (a, b, c) {
+    var paramCounts = {a: 7, c: 6, h: 1, l: 2, m: 2, q: 4, s: 4, t: 2, v: 1, z: 0},
+        data = [],
+        toString = function () {
+            var res = &quot;&quot;;
+            for (var i = 0, ii = this.length; i &lt; ii; i++) {
+                res += this[i][0] + this[i].join(&quot;,&quot;).substring(2);
+            }
+            return res;
+        };
+    if (pathString.toString.toString() == toString.toString()) {
+        return pathString;
+    }
+    pathString.replace(/([achlmqstvz])[\s,]*((-?\d*\.?\d*\s*,?\s*)+)/ig, function (a, b, c) {
         var params = [], name = b.toLowerCase();
         c.replace(/(-?\d*\.?\d*)\s*,?\s*/ig, function (a, b) {
             b &amp;&amp; params.push(+b);
@@ -1953,6 +1973,7 @@ Raphael.parsePathString = function (pathString) {
             };
         }
     });
+    data.toString = toString;
     return data;
 };
 Raphael.pathDimensions = function (path) {
@@ -2042,6 +2063,7 @@ Raphael.pathToRelative = function (pathArray) {
                 y += res[i][res[i].length - 1];
         }
     }
+    res.toString = pathArray.toString;
     return res;
 };
 Raphael.pathToAbsolute = function (pathArray) {
@@ -2095,6 +2117,7 @@ Raphael.pathToAbsolute = function (pathArray) {
                 y = res[i][res[i].length - 1];
         }
     }
+    res.toString = pathArray.toString;
     return res;
 };
 Raphael.pathEqualiser = function (path1, path2) {</diff>
      <filename>vendor/raphael.js</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>943348629f967473526cb9a7ced2e56d83eb515e</id>
    </parent>
  </parents>
  <author>
    <name>Ben Askins</name>
    <email>ben.askins@gmail.com</email>
  </author>
  <url>http://github.com/benaskins/simplegraph/commit/1d1d5fdeb0af83f26b072bee210b76424b8da3eb</url>
  <id>1d1d5fdeb0af83f26b072bee210b76424b8da3eb</id>
  <committed-date>2009-02-03T15:32:31-08:00</committed-date>
  <authored-date>2009-02-03T15:32:31-08:00</authored-date>
  <message>Upgrade Raphael</message>
  <tree>8fb07ec89767c806775b1ca219c3a14dc100f6af</tree>
  <committer>
    <name>Ben Askins</name>
    <email>ben.askins@gmail.com</email>
  </committer>
</commit>
