From d881340120de23060c48c78f14569f55846b4317 Mon Sep 17 00:00:00 2001 From: kangax Date: Sun, 10 Mar 2013 21:06:29 +0100 Subject: [PATCH] Version 1.1.0 --- HEADER.js | 2 +- dist/all.js | 629 ++++++++++++++++++++++++++++++++++++--------- dist/all.min.js | 11 +- dist/all.min.js.gz | Bin 44645 -> 45867 bytes package.json | 2 +- 5 files changed, 510 insertions(+), 134 deletions(-) diff --git a/HEADER.js b/HEADER.js index a880408e..83e69dd9 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.0.13" }; +var fabric = fabric || { version: "1.1.0" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; diff --git a/dist/all.js b/dist/all.js index 70976e85..9ad7628b 100644 --- a/dist/all.js +++ b/dist/all.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures` */ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.0.13" }; +var fabric = fabric || { version: "1.1.0" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; @@ -2254,6 +2254,16 @@ fabric.Observable.trigger = fabric.Observable.fire; } } + /** + * @method clipContext + */ + function clipContext(receiver, ctx) { + ctx.save(); + ctx.beginPath(); + receiver.clipTo(ctx); + ctx.clip(); + } + fabric.util.removeFromArray = removeFromArray; fabric.util.degreesToRadians = degreesToRadians; fabric.util.radiansToDegrees = radiansToDegrees; @@ -2270,6 +2280,7 @@ fabric.Observable.trigger = fabric.Observable.fire; fabric.util.drawDashedLine = drawDashedLine; fabric.util.createCanvasElement = createCanvasElement; fabric.util.createAccessors = createAccessors; + fabric.util.clipContext = clipContext; })(); (function() { @@ -2297,7 +2308,7 @@ fabric.Observable.trigger = fabric.Observable.fire; if (n !== n) { // shortcut for verifying if it's NaN n = 0; } - else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0)) { + else if (n !== 0 && n !== Number.POSITIVE_INFINITY && n !== Number.NEGATIVE_INFINITY) { n = (n > 0 || -1) * Math.floor(Math.abs(n)); } } @@ -4496,8 +4507,13 @@ fabric.util.string = { (function() { - function getColorStopFromStyle(el) { - var style = el.getAttribute('style'); + function getColorStop(el) { + var style = el.getAttribute('style'), + offset = el.getAttribute('offset'), + color, opacity; + + // convert percents to absolute values + offset = parseFloat(offset) / (/%$/.test(offset) ? 100 : 1); if (style) { var keyValuePairs = style.split(/\s*;\s*/); @@ -4513,10 +4529,29 @@ fabric.util.string = { value = split[1].trim(); if (key === 'stop-color') { - return value; + color = value; + } + else if (key === 'stop-opacity') { + opacity = value; } } } + + if (!color) { + color = el.getAttribute('stop-color'); + } + if (!opacity) { + opacity = el.getAttribute('stop-opacity'); + } + + // convert rgba color to rgb color - alpha value has no affect in svg + color = new fabric.Color(color).toRgb(); + + return { + offset: offset, + color: color, + opacity: opacity + }; } /** @@ -4529,19 +4564,46 @@ fabric.util.string = { /** * Constructor * @method initialize - * @param [options] Options object with x1, y1, x2, y2 and colorStops + * @param {Object} [options] Options object with type, coords, gradientUnits and colorStops * @return {fabric.Gradient} thisArg */ initialize: function(options) { - options || (options = { }); - this.x1 = options.x1 || 0; - this.y1 = options.y1 || 0; - this.x2 = options.x2 || 0; - this.y2 = options.y2 || 0; + var coords = { }; - this.colorStops = options.colorStops; + this.id = fabric.Object.__uid++; + this.type = options.type || 'linear'; + + coords = { + x1: options.coords ? options.coords.x1 : 0, + y1: options.coords ? options.coords.y1 : 0, + x2: options.coords ? options.coords.x2 : 0, + y2: options.coords ? options.coords.y2 : 0 + }; + + if (this.type === 'radial') { + coords.r1 = options.coords.r1 || 0; + coords.r2 = options.coords.r2 || 0; + } + + this.coords = coords; + this.gradientUnits = options.gradientUnits || 'objectBoundingBox'; + this.colorStops = fabric.util.object.clone(options.colorStops); + }, + + /** + * Adds another colorStop + * @method add + * @param {Object} colorStop Object with offset and color + * @return {fabric.Gradient} thisArg + */ + addColorStop: function(colorStop) { + for (var position in colorStop) { + var color = new fabric.Color(colorStop[position]); + this.colorStops.push({offset: position, color: color.toRgb(), opacity: color.getAlpha()}); + } + return this; }, /** @@ -4551,10 +4613,9 @@ fabric.util.string = { */ toObject: function() { return { - x1: this.x1, - x2: this.x2, - y1: this.y1, - y2: this.y2, + type: this.type, + coords: this.coords, + gradientUnits: this.gradientUnits, colorStops: this.colorStops }; }, @@ -4566,15 +4627,98 @@ fabric.util.string = { * @return {CanvasGradient} */ toLive: function(ctx) { - var gradient = ctx.createLinearGradient( - this.x1, this.y1, this.x2 || ctx.canvas.width, this.y2); + var gradient; - for (var position in this.colorStops) { - var colorValue = this.colorStops[position]; - gradient.addColorStop(parseFloat(position), colorValue); + if (!this.type) return; + + if (this.type === 'linear') { + gradient = ctx.createLinearGradient( + this.coords.x1, this.coords.y1, this.coords.x2 || ctx.canvas.width, this.coords.y2); + } + else if (this.type === 'radial') { + gradient = ctx.createRadialGradient( + this.coords.x1, this.coords.y1, this.coords.r1, this.coords.x2, this.coords.y2, this.coords.r2); + } + + for (var i = 0; i < this.colorStops.length; i++) { + var color = this.colorStops[i].color, + opacity = this.colorStops[i].opacity, + offset = this.colorStops[i].offset; + + if (opacity) { + color = new fabric.Color(color).setAlpha(opacity).toRgba(); + } + gradient.addColorStop(parseFloat(offset), color); } return gradient; + }, + + /** + * Returns SVG representation of an gradient + * @method toSVG + * @param {Object} object Object to create a gradient for + * @param {Boolean} normalize Whether coords should be normalized + * @return {String} SVG representation of an gradient (linear/radial) + */ + toSVG: function(object, normalize) { + var coords = fabric.util.object.clone(this.coords), + markup; + + // colorStops must be sorted ascending + this.colorStops.sort(function(a, b) { + return a.offset - b.offset; + }); + + if (normalize && this.gradientUnits === 'userSpaceOnUse') { + coords.x1 += object.width / 2; + coords.y1 += object.height / 2; + coords.x2 += object.width / 2; + coords.y2 += object.height / 2; + } + else if (this.gradientUnits === 'objectBoundingBox') { + _convertValuesToPercentUnits(object, coords); + } + + if (this.type === 'linear') { + markup = [ + '' + ]; + } + else if (this.type === 'radial') { + markup = [ + '' + ]; + } + + for (var i = 0; i < this.colorStops.length; i++) { + markup.push( + '' + ); + } + + markup.push((this.type === 'linear' ? '' : '')); + + return markup.join(''); } }); @@ -4586,52 +4730,78 @@ fabric.util.string = { * @static * @memberof fabric.Gradient * @see http://www.w3.org/TR/SVG/pservers.html#LinearGradientElement + * @see http://www.w3.org/TR/SVG/pservers.html#RadialGradientElement */ fromElement: function(el, instance) { /** * @example: * - * + * * * * * * OR * - * - * - * + * + * + * * * + * OR + * + * + * + * + * + * + * + * OR + * + * + * + * + * + * + * */ var colorStopEls = el.getElementsByTagName('stop'), - offset, - colorStops = { }, - coords = { - x1: el.getAttribute('x1') || 0, - y1: el.getAttribute('y1') || 0, - x2: el.getAttribute('x2') || '100%', - y2: el.getAttribute('y2') || 0 - }; + type = (el.nodeName === 'linearGradient' ? 'linear' : 'radial'), + gradientUnits = el.getAttribute('gradientUnits') || 'objectBoundingBox', + colorStops = [], + coords = { }; + + if (type === 'linear') { + coords = { + x1: el.getAttribute('x1') || 0, + y1: el.getAttribute('y1') || 0, + x2: el.getAttribute('x2') || '100%', + y2: el.getAttribute('y2') || 0 + }; + } + else if (type === 'radial') { + coords = { + x1: el.getAttribute('fx') || el.getAttribute('cx') || '50%', + y1: el.getAttribute('fy') || el.getAttribute('cy') || '50%', + r1: 0, + x2: el.getAttribute('cx') || '50%', + y2: el.getAttribute('cy') || '50%', + r2: el.getAttribute('r') || '50%' + }; + } for (var i = colorStopEls.length; i--; ) { - el = colorStopEls[i]; - offset = el.getAttribute('offset'); - - // convert percents to absolute values - offset = parseFloat(offset) / (/%$/.test(offset) ? 100 : 1); - colorStops[offset] = getColorStopFromStyle(el) || el.getAttribute('stop-color'); + colorStops.push(getColorStop(colorStopEls[i])); } _convertPercentUnitsToValues(instance, coords); return new fabric.Gradient({ - x1: coords.x1, - y1: coords.y1, - x2: coords.x2, - y2: coords.y2, + type: type, + coords: coords, + gradientUnits: gradientUnits, colorStops: colorStops }); }, @@ -4640,8 +4810,8 @@ fabric.util.string = { * Returns {@link fabric.Gradient} instance from its object representation * @method forObject * @static - * @param obj - * @param [options] + * @param {Object} obj + * @param {Object} [options] Options object * @memberof fabric.Gradient */ forObject: function(obj, options) { @@ -4651,11 +4821,15 @@ fabric.util.string = { } }); + /** + * @private + * @method _convertPercentUnitsToValues + */ function _convertPercentUnitsToValues(object, options) { for (var prop in options) { if (typeof options[prop] === 'string' && /^\d+%$/.test(options[prop])) { var percents = parseFloat(options[prop], 10); - if (prop === 'x1' || prop === 'x2') { + if (prop === 'x1' || prop === 'x2' || prop === 'r2') { options[prop] = fabric.util.toFixed(object.width * percents / 100, 2); } else if (prop === 'y1' || prop === 'y2') { @@ -4672,6 +4846,29 @@ fabric.util.string = { } } + /** + * @private + * @method _convertValuesToPercentUnits + */ + function _convertValuesToPercentUnits(object, options) { + for (var prop in options) { + // normalize rendering point (should be from center rather than top/left corner of the shape) + if (prop === 'x1' || prop === 'x2') { + options[prop] += fabric.util.toFixed(object.width / 2, 2); + } + else if (prop === 'y1' || prop === 'y2') { + options[prop] += fabric.util.toFixed(object.height / 2, 2); + } + // convert to percent units + if (prop === 'x1' || prop === 'x2' || prop === 'r2') { + options[prop] = fabric.util.toFixed(options[prop] / object.width * 100, 2) + '%'; + } + else if (prop === 'y1' || prop === 'y2') { + options[prop] = fabric.util.toFixed(options[prop] / object.height * 100, 2) + '%'; + } + } + } + /** * Parses an SVG document, returning all of the gradient declarations found in it * @static @@ -5389,7 +5586,14 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { * @method _tryParsingColor */ _tryParsingColor: function(color) { - var source = Color.sourceFromHex(color); + var source; + + if (color in Color.colorNameMap) { + color = Color.colorNameMap[color]; + } + + source = Color.sourceFromHex(color); + if (!source) { source = Color.sourceFromRgb(color); } @@ -5549,6 +5753,30 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { */ fabric.Color.reHex = /^#?([0-9a-f]{6}|[0-9a-f]{3})$/i; + /** + * Map of the 16 basic color names with HEX code + * @static + * @field + */ + fabric.Color.colorNameMap = { + 'aqua': '#00FFFF', + 'black': '#000000', + 'blue': '#0000FF', + 'fuchsia': '#FF00FF', + 'gray': '#808080', + 'green': '#008000', + 'lime': '#00FF00', + 'maroon': '#800000', + 'navy': '#000080', + 'olive': '#808000', + 'purple': '#800080', + 'red': '#FF0000', + 'silver': '#C0C0C0', + 'teal': '#008080', + 'white': '#FFFFFF', + 'yellow': '#FFFF00' + }; + /** * Returns new color object, when given a color in RGB format * @method fromRgb @@ -6199,7 +6427,7 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { this.fire('before:render'); if (this.clipTo) { - this._clipCanvas(canvasToDrawOn); + fabric.util.clipCanvas(this, canvasToDrawOn); } if (this.backgroundColor) { @@ -6252,17 +6480,6 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { return this; }, - /** - * @private - * @method _clipCanvas - */ - _clipCanvas: function(canvasToDrawOn) { - canvasToDrawOn.save(); - canvasToDrawOn.beginPath(); - this.clipTo(canvasToDrawOn); - canvasToDrawOn.clip(); - }, - /** * @private * @method _drawBackroundImage @@ -7147,7 +7364,7 @@ fabric.Shadow = fabric.util.createClass(/** @scope fabric.Shadow.prototype */ { * @param {Array} points Array of points * @return {String} SVG path */ - convertPointsToSVGPath: function(points, minX, maxX, minY, maxY) { + convertPointsToSVGPath: function(points, minX, maxX, minY) { var path = []; var p1 = new fabric.Point(points[0].x - minX, points[0].y - minY); var p2 = new fabric.Point(points[1].x - minX, points[1].y - minY); @@ -9432,6 +9649,13 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati */ includeDefaultValues: true, + /** + * Function that determines clipping of an object (context is passed as a first argument) + * @property + * @type Function + */ + clipTo: null, + /** * List of properties to consider when checking if state of an object is changed (fabric.Object#hasStateChanged); * as well as for history (undo/redo) purposes @@ -9588,7 +9812,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati "stroke: ", (this.stroke ? this.stroke : 'none'), "; ", "stroke-width: ", (this.strokeWidth ? this.strokeWidth : '0'), "; ", "stroke-dasharray: ", (this.strokeDashArray ? this.strokeDashArray.join(' ') : "; "), - "fill: ", (this.fill ? this.fill : 'none'), "; ", + "fill: ", (this.fill ? (this.fill && this.fill.toLive ? 'url(#SVGID_' + this.fill.id + ')' : this.fill) : 'none'), "; ", "opacity: ", (this.opacity ? this.opacity : '1'), ";", (this.visible ? '' : " visibility: hidden;") ].join(""); @@ -9771,7 +9995,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati */ render: function(ctx, noTransform) { - // do not render if width or height are zeros + // do not render if width/height are zeros or object is not visible if (this.width === 0 || this.height === 0 || !this.visible) return; ctx.save(); @@ -9810,7 +10034,9 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati } this._setShadow(ctx); + this.clipTo && fabric.util.clipContext(this, ctx); this._render(ctx, noTransform); + this.clipTo && ctx.restore(); this._removeShadow(ctx); if (this.active && !noTransform) { @@ -10015,12 +10241,35 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati }, /** - * Sets gradient fill of an object - * @method setGradientFill - * @param {Object} options + * Sets gradient (fill or stroke) of an object + * @method setGradient + * @param {String} property Property name 'stroke' or 'fill' + * @param {Object} [options] Options object */ - setGradientFill: function(options) { - this.set('fill', fabric.Gradient.forObject(this, options)); + setGradient: function(property, options) { + options || (options = { }); + + var gradient = {colorStops: []}; + + gradient.type = options.type || (options.r1 || options.r2 ? 'radial' : 'linear'); + gradient.coords = { + x1: options.x1, + y1: options.y1, + x2: options.x2, + y2: options.y2 + }; + + if (options.r1 || options.r2) { + gradient.coords.r1 = options.r1; + gradient.coords.r2 = options.r2; + } + + for (var position in options.colorStops) { + var color = new fabric.Color(options.colorStops[position]); + gradient.colorStops.push({offset: position, color: color.toRgb(), opacity: color.getAlpha()}); + } + + this.set(property, fabric.Gradient.forObject(this, gradient)); }, /** @@ -10228,6 +10477,12 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati */ fabric.Object.NUM_FRACTION_DIGITS = 2; + /** + * @static + * @type Number + */ + fabric.Object.__uid = 0; + })(typeof exports !== 'undefined' ? exports : this); (function() { @@ -11378,15 +11633,23 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati * @return {String} svg representation of an instance */ toSVG: function() { - return [ + var markup = []; + + if (this.stroke && this.stroke.toLive) { + markup.push(this.stroke.toSVG(this, true)); + } + + markup.push( '' - ].join(''); + 'x1="', this.get('x1'), + '" y1="', this.get('y1'), + '" x2="', this.get('x2'), + '" y2="', this.get('y2'), + '" style="', this.getSvgStyles(), + '"/>' + ); + + return markup.join(''); } }); @@ -11490,12 +11753,25 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati * @return {String} svg representation of an instance */ toSVG: function() { - return (''); + var markup = []; + + if (this.fill && this.fill.toLive) { + markup.push(this.fill.toSVG(this, false)); + } + if (this.stroke && this.stroke.toLive) { + markup.push(this.stroke.toSVG(this, false)); + } + + markup.push( + '' + ); + + return markup.join(''); }, /** @@ -11689,8 +11965,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati * @return {String} svg representation of an instance */ toSVG: function() { - - var widthBy2 = this.width / 2, + var markup = [], + widthBy2 = this.width / 2, heightBy2 = this.height / 2; var points = [ @@ -11699,11 +11975,22 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati widthBy2 + " " + heightBy2 ].join(","); - return ''; + if (this.fill && this.fill.toLive) { + markup.push(this.fill.toSVG(this, true)); + } + if (this.stroke && this.stroke.toLive) { + markup.push(this.stroke.toSVG(this, true)); + } + + markup.push( + '' + ); + + return markup.join(''); } }); @@ -11746,6 +12033,20 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati */ type: 'ellipse', + /** + * Horizontal radius + * @property + * @type Number + */ + rx: 0, + + /** + * Vertical radius + * @property + * @type Number + */ + ry: 0, + /** * Constructor * @method initialize @@ -11783,14 +12084,25 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati * @return {String} svg representation of an instance */ toSVG: function() { - return [ + var markup = []; + + if (this.fill && this.fill.toLive) { + markup.push(this.fill.toSVG(this, false)); + } + if (this.stroke && this.stroke.toLive) { + markup.push(this.stroke.toSVG(this, false)); + } + + markup.push( '' - ].join(''); + 'rx="', this.get('rx'), + '" ry="', this.get('ry'), + '" style="', this.getSvgStyles(), + '" transform="', this.getSvgTransform(), + '"/>' + ); + + return markup.join(''); }, /** @@ -12127,13 +12439,26 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati * @return {String} svg representation of an instance */ toSVG: function() { - return ''; + var markup = []; + + if (this.fill && this.fill.toLive) { + markup.push(this.fill.toSVG(this, false)); + } + if (this.stroke && this.stroke.toLive) { + markup.push(this.stroke.toSVG(this, false)); + } + + markup.push( + '' + ); + + return markup.join(''); } }); @@ -12251,18 +12576,29 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati * @return {String} svg representation of an instance */ toSVG: function() { - var points = []; + var points = [], + markup = []; + for (var i = 0, len = this.points.length; i < len; i++) { points.push(toFixed(this.points[i].x, 2), ',', toFixed(this.points[i].y, 2), ' '); } - return [ + if (this.fill && this.fill.toLive) { + markup.push(this.fill.toSVG(this, false)); + } + if (this.stroke && this.stroke.toLive) { + markup.push(this.stroke.toSVG(this, false)); + } + + markup.push( '' - ].join(''); + 'points="', points.join(''), + '" style="', this.getSvgStyles(), + '" transform="', this.getSvgTransform(), + '"/>' + ); + + return markup.join(''); }, /** @@ -12435,18 +12771,29 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati * @return {String} svg representation of an instance */ toSVG: function() { - var points = []; + var points = [], + markup = []; + for (var i = 0, len = this.points.length; i < len; i++) { points.push(toFixed(this.points[i].x, 2), ',', toFixed(this.points[i].y, 2), ' '); } - return [ + if (this.fill && this.fill.toLive) { + markup.push(this.fill.toSVG(this, false)); + } + if (this.stroke && this.stroke.toLive) { + markup.push(this.stroke.toSVG(this, false)); + } + + markup.push( '' - ].join(''); + 'points="', points.join(''), + '" style="', this.getSvgStyles(), + '" transform="', this.getSvgTransform(), + '"/>' + ); + + return markup.join(''); }, /** @@ -13082,14 +13429,16 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati ? this.stroke.toLive(ctx) : this.stroke; } - ctx.beginPath(); - this._setShadow(ctx); + this.clipTo && fabric.util.clipContext(this, ctx); + + ctx.beginPath(); this._render(ctx); if (this.fill) { ctx.fill(); } + this.clipTo && ctx.restore(); this._removeShadow(ctx); if (this.stroke) { @@ -13155,20 +13504,33 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati * @return {String} svg representation of an instance */ toSVG: function() { - var chunks = []; + var chunks = [], + markup = []; + for (var i = 0, len = this.path.length; i < len; i++) { chunks.push(this.path[i].join(' ')); } var path = chunks.join(' '); - return [ + if (this.fill && this.fill.toLive) { + markup.push(this.fill.toSVG(this, true)); + } + if (this.stroke && this.stroke.toLive) { + markup.push(this.stroke.toSVG(this, true)); + } + + markup.push( '', '', + 'd="', path, + '" style="', this.getSvgStyles(), + '" transform="translate(', (-this.width / 2), ' ', (-this.height/2), ')', + '" stroke-linecap="round" ', + '/>', '' - ].join(''); + ); + + return markup.join(''); }, /** @@ -13389,6 +13751,10 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati * @param {CanvasRenderingContext2D} ctx Context to render this instance on */ render: function(ctx) { + + // do not render if object is not visible + if (!this.visible) return; + ctx.save(); var m = this.transformMatrix; @@ -13399,9 +13765,11 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati this.transform(ctx); this._setShadow(ctx); + this.clipTo && fabric.util.clipContext(this, ctx); for (var i = 0, l = this.paths.length; i < l; ++i) { this.paths[i].render(ctx, true); } + this.clipTo && ctx.restore(); this._removeShadow(ctx); if (this.active) { @@ -13809,6 +14177,8 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati var groupScaleFactor = Math.max(this.scaleX, this.scaleY); + this.clipTo && fabric.util.clipContext(this, ctx); + //The array is now sorted in order of highest first, so start from end. for (var i = this.objects.length; i > 0; i--) { @@ -13824,6 +14194,7 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati object.borderScaleFactor = originalScaleFactor; object.hasRotatingPoint = originalHasRotatingPoint; } + this.clipTo && ctx.restore(); if (!noTransform && this.active) { this.drawBorders(ctx); @@ -14235,7 +14606,9 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @scope fabric.Stati } this._setShadow(ctx); + this.clipTo && fabric.util.clipContext(this, ctx); this._render(ctx); + this.clipTo && ctx.restore(); this._removeShadow(ctx); if (this.active && !noTransform) { @@ -15740,10 +16113,12 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { } this._setTextShadow(ctx); + this.clipTo && fabric.util.clipContext(this, ctx); this._renderTextFill(ctx, textLines); + this._renderTextStroke(ctx, textLines); + this.clipTo && ctx.restore(); this.textShadow && ctx.restore(); - this._renderTextStroke(ctx, textLines); if (this.textAlign !== 'left' && this.textAlign !== 'justify') { ctx.restore(); } @@ -16533,7 +16908,7 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { var origSetWidth = fabric.StaticCanvas.prototype.setWidth; fabric.StaticCanvas.prototype.setWidth = function(width) { - origSetWidth.call(this); + origSetWidth.call(this, width); this.nodeCanvas.width = width; return this; }; @@ -16543,7 +16918,7 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { var origSetHeight = fabric.StaticCanvas.prototype.setHeight; fabric.StaticCanvas.prototype.setHeight = function(height) { - origSetHeight.call(this); + origSetHeight.call(this, height); this.nodeCanvas.height = height; return this; }; diff --git a/dist/all.min.js b/dist/all.min.js index cc5f2505..811cfcf8 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,5 +1,6 @@ -/* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.0.13"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_r?n:i-t;s(u(f,a,l,n));if(i>r||o()){e.onComplete&&e.onComplete();return}h(c)}()}function p(e,t,n){if(e){var r=new Image;r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function d(e,t){function n(e){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function r(){++s===o&&t&&t(i)}var i=[],s=0,o=e.length;e.forEach(function(e,t){if(!e.type)return;var s=n(e.type);s.async?s.fromObject(e,function(e,n){n||(i[t]=e),r()}):(i[t]=s.fromObject(e),r())})}function v(e,t,n){var r;if(e.length>1){var i=e.some(function(e){return e.type==="text"});i?(r=new fabric.Group([],t),e.reverse().forEach(function(e){e.cx&&(e.left=e.cx),e.cy&&(e.top=e.cy),r.addWithUpdate(e)})):r=new fabric.PathGroup(e,t)}else r=e[0];return typeof n!="undefined"&&r.setSourcePath(n),r}function m(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),n[d?"lineTo":"moveTo"](r,0),d=!d;n.restore()}function y(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function b(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}}var e=Math.sqrt,t=Math.atan2;fabric.util={};var i=Math.PI/180,c=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},h=function(){return c.apply(fabric.window,arguments)};fabric.util.removeFromArray=n,fabric.util.degreesToRadians=s,fabric.util.radiansToDegrees=o,fabric.util.rotatePoint=u,fabric.util.toFixed=a,fabric.util.getRandomInt=r,fabric.util.falseFunction=f,fabric.util.animate=l,fabric.util.requestAnimFrame=h,fabric.util.loadImage=p,fabric.util.enlivenObjects=d,fabric.util.groupSVGElements=v,fabric.util.populateWithProperties=m,fabric.util.drawDashedLine=g,fabric.util.createCanvasElement=y,fabric.util.createAccessors=b}(),function(){function t(t,n){var r=e.call(arguments,2),i=[];for(var s=0,o=t.length;s=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==1/0&&r!==-1/0&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function e(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+ -t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t=0,n=0;do t+=e.offsetTop||0,n+=e.offsetLeft||0,e=e.offsetParent;while(e);return{left:n,top:t}}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var f;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?f=function(e){return fabric.document.defaultView.getComputedStyle(e,null).position}:f=function(e){var t=e.style.position;return!t&&e.currentStyle&&(t=e.currentStyle.position),t},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.type="text/javascript",r.setAttribute("runat","server"),r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementPosition=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){d.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),d.has(e,function(r){r?d.get(e,function(e){var t=m(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function m(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function g(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)}function y(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function b(e){var t="";return e.backgroundColor&&e.backgroundColor.source&&(t=['',''].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function t(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function n(e,t){e[2]=t[0]}function r(e,t){e[1]=t[0]}function i(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var s=[1,0,0,1,0,0],o="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",u="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",f="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+")"+u+"("+o+"))?\\s*\\))",c="(?:(scale)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",h="(?:(translate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",p="(?:(matrix)\\s*\\(\\s*("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+"\\s*\\))",d="(?:"+p+"|"+h+"|"+c+"|"+l+"|"+a+"|"+f+")",v="(?:"+d+"(?:"+u+d+")*"+")",m="^\\s*(?:"+v+"?)\\s*$",g=new RegExp(m),y=new RegExp(d);return function(o){var u=s.concat();return!o||o&&!g.test(o)?u:(o.replace(y,function(s){var o=(new RegExp(d)).exec(s).filter(function(e){return e!==""&&e!=null}),a=o[1],f=o.slice(2).map(parseFloat);switch(a){case"translate":i(u,f);break;case"rotate":e(u,f);break;case"scale":t(u,f);break;case"skewX":n(u,f);break;case"skewY":r(u,f);break;case"matrix":u=f}}),u)}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,p=f.length;c0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n("No Intersection")}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n("No Intersection");return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t=n.sourceFromHex(e);t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)',''),t.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),""),this.backgroundColor&&this.backgroundColor.source&&t.push('"),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');for(var n=0,r=this.getObjects(),i=r.length;n"),t.join("")},isEmpty:function(){return this._objects.length===0},remove:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared"));var t=this._objects,n=t.indexOf(e);return n!==-1&&(t.splice(n,1),this.fire("object:removed",{target:e})),this.renderAll(),e},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll()},sendBackwards:function(e){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3;a0?0:-n),t.ey-(r>0?0:-r),i,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var u=t.ex+a-(n>0?0:i),f=t.ey+a-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,u,f,u+i,f,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f+o-1,u+i,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f,u,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,u+i-1,f,u+i-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+a-(n>0?0:i),t.ey+a-(r>0?0:o),i,o)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,a,f=new fabric.Point(o(n,i),o(r,s)),l=new fabric.Point(u(n,i),u(r,s));for(var c=0,h=this._objects.length;c1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t})),this.renderAll()},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,t){if(this.width===0||this.height===0||!this.visible)return;e.save();var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e);if(this.stroke||this.strokeDashArray)e.lineWidth=this.strokeWidth,this.stroke&&this.stroke.toLive?e.strokeStyle=this.stroke.toLive(e):e.strokeStyle=this.stroke;this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),n&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(n[0],n[1],n[2],n[3],n[4],n[5])),this._setShadow(e),this._render(e,t),this._removeShadow(e),this.active&&!t&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow -:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){if(t.Image){var n=new o;n.onload=function(){e&&e(new t.Image(n),r),n=n.onload=null};var r={angle:this.getAngle(),flipX:this.getFlipX(),flipY:this.getFlipY()};this.set({angle:0,flipX:!1,flipY:!1}),this.toDataURL(function(e){n.src=e})}return this},toDataURL:function(e){function i(t){t.left=n.width/2,t.top=n.height/2,t.setActive(!1),r.add(t);var i=r.toDataURL();r.dispose(),r=t=null,e&&e(i)}var n=t.util.createCanvasElement();n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);r.backgroundColor="transparent",r.renderAll(),this.constructor.async?this.clone(i):i(this.clone())},hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){this.originalState={},this.saveState()},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradientFill:function(e){this.set("fill",t.Gradient.forObject(this,e))},setPatternFill:function(e){this.set("fill",new t.Pattern(e))},setShadow:function(e){this.set("shadow",new t.Shadow(e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object")for(var e in arguments[0])this._animate(e,arguments[0][e],arguments[1]);else this._animate.apply(this,arguments);return this},_animate:function(e,n,r){var i=this,s;n=n.toString(),r?r=t.util.object.clone(r):r={},~e.indexOf(".")&&(s=e.split("."));var o=s?this.get(s[0])[s[1]]:this.get(e);"from"in r||(r.from=o),~n.indexOf("=")?n=o+parseFloat(n.replace("=","")):n=parseFloat(n),t.util.animate({startValue:r.from,endValue:n,byValue:r.by,easing:r.easing,duration:r.duration,onChange:function(t){s?i[s[0]][s[1]]=t:i.set(e,t),r.onChange&&r.onChange()},onComplete:function(){i.setCoords(),r.onComplete&&r.onComplete()}})},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.canvas.sendToBack(this),this},bringToFront:function(){return this.canvas.bringToFront(this),this},sendBackwards:function(){return this.canvas.sendBackwards(this),this},bringForward:function(){return this.canvas.bringForward(this),this}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x+this.getWidth()/2:n==="right"&&(i=t.x-this.getWidth()/2),r==="top"?s=t.y+this.getHeight()/2:r==="bottom"&&(s=t.y-this.getHeight()/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x-this.getWidth()/2:n==="right"&&(i=t.x+this.getWidth()/2),r==="top"?s=t.y-this.getHeight()/2:r==="bottom"&&(s=t.y+this.getHeight()/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){return this.translateToCenterPoint(new fabric.Point(this.left,this.top),this.originX,this.originY)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s,o;return n!==undefined&&r!==undefined?(n==="left"?s=i.x-this.getWidth()/2:n==="right"?s=i.x+this.getWidth()/2:s=i.x,r==="top"?o=i.y-this.getHeight()/2:r==="bottom"?o=i.y+this.getHeight()/2:o=i.y):(s=this.left,o=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(s,o))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){return this.isContainedWithinRect(e.oCoords.tl,e.oCoords.br)},isContainedWithinRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y);return r.x>e.x&&i.xe.y&&s.y1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(this.currentHeight/this.currentWidth),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords(),this}})}(),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner,a),o=this._findCrossPoints(i,s,u);if(o%2===1&&o!==0)return this.__corner=a,a}return!1},_findCrossPoints:function(e,t,n){var r,i,s,o,u,a,f=0,l;for(var c in n){l=n[c];if(l.o.y=t&&l.d.y>=t)continue;l.o.x===l.d.x&&l.o.x>=e?(u=l.o.x,a=t):(r=0,i=(l.d.y-l.o.y)/(l.d.x-l.o.x),s=t-r*e,o=l.o.y-i*l.o.x,u=-(s-o)/(r-i),a=s+r*u),u>=e&&(f+=1);if(f===2)break}return f},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return;var t=this.cornerSize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1};if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath(),this.group&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top),e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2),e.lineWidth=this.strokeWidth;var t=e.strokeStyle;e.strokeStyle=e.fillStyle,e.stroke(),e.strokeStyle=t},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){return[""].join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" "),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){return'"},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this.fill&&e.fill(),this._removeShadow(e),this.stroke&&e.stroke()},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this.fill&&e.fill(),this.stroke&&e.stroke()},complexity:function(){return 1},toSVG:function(){var e=this.width/2,t=this.height/2,n=[-e+" "+t,"0 "+ -t,e+" "+t].join(",");return'"}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){return[""].join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this.stroke&&e.stroke(),this._removeShadow(e),this.fill&&e.fill(),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function r(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height;e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&this.group&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this.fill&&e.fill(),this._removeShadow(e),this.strokeDashArray?this._renderDashedStroke(e):this.stroke&&e.stroke()},_renderDashedStroke:function(e){function u(u,a){var f=0,l=0,c=(a?i.height:i.width)+s*2;while(fc&&(l=f-c),u?n+=h*u-(l*u||0):r+=h*a-(l*a||0),e[1&t?"moveTo":"lineTo"](n,r),t>=o&&(t=0)}}1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray);var t=0,n=-this.width/2,r=-this.height/2,i=this,s=this.padding,o=this.strokeDashArray.length;e.save(),e.beginPath(),u(1,0),u(0,1),u(-1,0),u(0,-1),e.stroke(),e.closePath(),e.restore()},_normalizeLeftTopProperties:function(e){return e.left&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),e.top&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){return'"}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[];for(var t=0,r=this.points.length;t"].join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"].join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[];for(var t=0,n=this.path.length;t',"',""].join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n,r,i;for(var s=0,o,u=this.path.length;sc)for(var h=1,p=o.length;h"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke,o=t.util.removeFromArray;if(t.Group)return;var u={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,{type:"group",initialize:function(e,t){t=t||{},this.objects=e||[],this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this.objects},addWithUpdate:function(e){return this._restoreObjectsState(),this.objects.push(e),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),o(this.objects,e),e.setActive(!1),this._calcBounds(),this._updateObjectsCoords(),this},add:function(e){return this.objects.push(e),this},remove:function(e){return o(this.objects,e),this},size:function(){return this.getObjects().length},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textShadow:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this.objects.length;this[e]=t;while(n--)this.objects[n].set(e,t)}else this[e]=t},contains:function(e){return this.objects.indexOf(e)>-1},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this.objects,"toObject",e)})},render:function(e,t){e.save(),this.transform(e);var n=Math.max(this.scaleX,this.scaleY);for(var r=this.objects.length;r>0;r--){var i=this.objects[r-1],s=i.borderScaleFactor,o=i.hasRotatingPoint;i.borderScaleFactor=n,i.hasRotatingPoint=!1,i.render(e),i.borderScaleFactor=s,i.hasRotatingPoint=o}!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore(),this.setCoords()},item:function(e){return this.getObjects()[e]},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=typeof t.complexity=="function"?t.complexity():0,e},0)},_restoreObjectsState:function(){return this.objects.forEach(this._restoreObjectState,this),this},_restoreObjectState:function(e){var t=this.get("left"),n=this.get("top"),r=this.getAngle()*(Math.PI/180),i=Math.cos(r)*e.get("top")+Math.sin(r)*e.get("left"),s=-Math.sin(r)*e.get("top")+Math.cos(r)*e.get("left");return e.setAngle(e.getAngle()+this.getAngle()),e.set("left",t+s*this.get("scaleX")),e.set("top",n+i*this.get("scaleY")),e.set("scaleX",e.get("scaleX")*this.get("scaleX")),e.set("scaleY",e.get("scaleY")*this.get("scaleY")),e.setCoords(),e.hasControls=e.__origHasControls,delete e.__origHasControls,e.setActive(!1),e.setCoords(),this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){return this._originalLeft=this.get("left"),this._originalTop=this.get("top"),this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){return this.forEachObject(function(e){e.setCoords()}),this},activateAllObjects:function(){return this.forEachObject(function(e){e.setActive()}),this},forEachObject:t.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var e=this.getObjects(),t=e[0]?e[0].get("opacity"):1,n=e.every(function(e){return e.get("opacity")===t});n&&(this.opacity=t)},_calcBounds:function(){var e=[],t=[],n,s,o,u,a,f,l,c=0,h=this.objects.length;for(;ce.x&&i-ne.y},toGrayscale:function(){var e=this.objects.length;while(e--)this.objects[e].toGrayscale();return this},toSVG:function(){var e=[];for(var t=this.objects.length;t--;)e.push(this.objects[t].toSVG());return''+e.join("")+""},get:function(e){if(e in u){if(this[e])return this[e];for(var t=0,n=this.objects.length;t'+'"+""},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=typeof Buffer!="undefined"&&typeof window=="undefined",n=this._originalImage,r=fabric.util.createCanvasElement(),i=t?new(require("canvas").Image):fabric.document.createElement("img"),s=this;r.width=n.width,r.height=n.height,r.getContext("2d").drawImage(n,0,0,n.width,n.height),this.filters.forEach(function(e){e&&e.applyTo(r)}),i.onload=function(){s._element=i,e&&e(),i.onload=r=n=null},i.width=n.width,i.height=n.height;if(t){var o=r.toDataURL("image/png").substring(22);i.src=new Buffer(o,"base64"),s._element=i,e&&e()}else i.src=r.toDataURL("image/png");return this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){var r=fabric.document.createElement("img");r.onload=function(){t&&t(new fabric.Image(r,n)),r=r.onload=null},r.src=e},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.setActive(!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters={},fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0];var t=fabric.util.createCanvasElement();this.tmpCtx=t.getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e),this._setTextStyles(e);var t=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,t),this.height=this._getTextHeight(e,t),this._renderTextBackground(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this._renderTextFill(e,t),this.textShadow&&e.restore(),this._renderTextStroke(e,t),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,t),this._setBoundaries(e,t),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},getText:function(){return this.text},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in s&&(this._initDimensions(),this.setCoords())}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e),i=HTTP.request({hostname:r.hostname,port:r.port,path:r.pathname,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});i.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)})}function request_fs(e,t){var n=require("fs"),r=n.createReadStream(e),i="";r.on("data",function(e){i+=e}),r.on("end",function(){t(i)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&e.indexOf("data")===0?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +/* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.1.0"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_r?n:i-t;s(u(f,a,l,n));if(i>r||o()){e.onComplete&&e.onComplete();return}h(c)}()}function p(e,t,n){if(e){var r=new Image;r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function d(e,t){function n(e){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function r(){++s===o&&t&&t(i)}var i=[],s=0,o=e.length;e.forEach(function(e,t){if(!e.type)return;var s=n(e.type);s.async?s.fromObject(e,function(e,n){n||(i[t]=e),r()}):(i[t]=s.fromObject(e),r())})}function v(e,t,n){var r;if(e.length>1){var i=e.some(function(e){return e.type==="text"});i?(r=new fabric.Group([],t),e.reverse().forEach(function(e){e.cx&&(e.left=e.cx),e.cy&&(e.top=e.cy),r.addWithUpdate(e)})):r=new fabric.PathGroup(e,t)}else r=e[0];return typeof n!="undefined"&&r.setSourcePath(n),r}function m(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),n[d?"lineTo":"moveTo"](r,0),d=!d;n.restore()}function y(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function b(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}}function w(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}var e=Math.sqrt,t=Math.atan2;fabric.util={};var i=Math.PI/180,c=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},h=function(){return c.apply(fabric.window,arguments)};fabric.util.removeFromArray=n,fabric.util.degreesToRadians=s,fabric.util.radiansToDegrees=o,fabric.util.rotatePoint=u,fabric.util.toFixed=a,fabric.util.getRandomInt=r,fabric.util.falseFunction=f,fabric.util.animate=l,fabric.util.requestAnimFrame=h,fabric.util.loadImage=p,fabric.util.enlivenObjects=d,fabric.util.groupSVGElements=v,fabric.util.populateWithProperties=m,fabric.util.drawDashedLine=g,fabric.util.createCanvasElement=y,fabric.util.createAccessors=b,fabric.util.clipContext=w}(),function(){function t(t,n){var r=e.call(arguments,2),i=[];for(var s=0,o=t.length;s=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function e(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&& +(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t=0,n=0;do t+=e.offsetTop||0,n+=e.offsetLeft||0,e=e.offsetParent;while(e);return{left:n,top:t}}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var f;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?f=function(e){return fabric.document.defaultView.getComputedStyle(e,null).position}:f=function(e){var t=e.style.position;return!t&&e.currentStyle&&(t=e.currentStyle.position),t},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.type="text/javascript",r.setAttribute("runat","server"),r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementPosition=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){d.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),d.has(e,function(r){r?d.get(e,function(e){var t=m(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function m(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function g(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)}function y(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function b(e){var t="";return e.backgroundColor&&e.backgroundColor.source&&(t=['',''].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function t(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function n(e,t){e[2]=t[0]}function r(e,t){e[1]=t[0]}function i(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var s=[1,0,0,1,0,0],o="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",u="(?:\\s+,?\\s*|,\\s*)",a="(?:(skewX)\\s*\\(\\s*("+o+")\\s*\\))",f="(?:(skewY)\\s*\\(\\s*("+o+")\\s*\\))",l="(?:(rotate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+")"+u+"("+o+"))?\\s*\\))",c="(?:(scale)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",h="(?:(translate)\\s*\\(\\s*("+o+")(?:"+u+"("+o+"))?\\s*\\))",p="(?:(matrix)\\s*\\(\\s*("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+u+"("+o+")"+"\\s*\\))",d="(?:"+p+"|"+h+"|"+c+"|"+l+"|"+a+"|"+f+")",v="(?:"+d+"(?:"+u+d+")*"+")",m="^\\s*(?:"+v+"?)\\s*$",g=new RegExp(m),y=new RegExp(d);return function(o){var u=s.concat();return!o||o&&!g.test(o)?u:(o.replace(y,function(s){var o=(new RegExp(d)).exec(s).filter(function(e){return e!==""&&e!=null}),a=o[1],f=o.slice(2).map(parseFloat);switch(a){case"translate":i(u,f);break;case"rotate":e(u,f);break;case"scale":t(u,f);break;case"skewX":n(u,f);break;case"skewY":r(u,f);break;case"matrix":u=f}}),u)}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,p=f.length;c']:this.type==="radial"&&(i=["']);for(var s=0;s');return i.push(this.type==="linear"?"":""),i.join("")}}),fabric.util.object.extend(fabric.Gradient,{fromElement:function(n,r){var i=n.getElementsByTagName("stop"),s=n.nodeName==="linearGradient"?"linear":"radial",o=n.getAttribute("gradientUnits")||"objectBoundingBox",u=[],a={};s==="linear"?a={x1:n.getAttribute("x1")||0,y1:n.getAttribute("y1")||0,x2:n.getAttribute("x2")||"100%",y2:n.getAttribute("y2")||0}:s==="radial"&&(a={x1:n.getAttribute("fx")||n.getAttribute("cx")||"50%",y1:n.getAttribute("fy")||n.getAttribute("cy")||"50%",r1:0,x2:n.getAttribute("cx")||"50%",y2:n.getAttribute("cy")||"50%",r2:n.getAttribute("r")||"50%"});for(var f=i.length;f--;)u.push(e(i[f]));return t(r,a),new fabric.Gradient({type:s,coords:a,gradientUnits:o,colorStops:u})},forObject:function(e,n){return n||(n={}),t(e,n),new fabric.Gradient(n)}}),fabric.getGradientDefs=r}(),fabric.Pattern=fabric.util.createClass({repeat:"repeat",initialize:function(e){e||(e={}),e.source&&(this.source=typeof e.source=="string"?new Function(e.source):e.source),e.repeat&&(this.repeat=e.repeat)},toObject:function(){var e;return typeof this.source=="function"?e=String(this.source).match(/function\s+\w*\s*\(.*\)\s+\{([\s\S]*)\}/)[1]:typeof this.source.src=="string"&&(e=this.source.src),{source:e,repeat:this.repeat}},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;return e.createPattern(t,this.repeat)}}),fabric.Shadow=fabric.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,initialize:function(e){for(var t in e)this[t]=e[t]},toObject:function(){return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY}},toSVG:function(){}}),function(e){"use strict";function n(e,t){arguments.length>0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n("No Intersection")}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n("No Intersection");return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)',''),t.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),""),this.backgroundColor&&this.backgroundColor.source&&t.push('"),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');for(var n=0,r=this.getObjects(),i=r.length;n"),t.join("")},isEmpty:function(){return this._objects.length===0},remove:function(e){this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared"));var t=this._objects,n=t.indexOf(e);return n!==-1&&(t.splice(n,1),this.fire("object:removed",{target:e})),this.renderAll(),e},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll()},sendBackwards:function(e){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3;a0?0:-n),t.ey-(r>0?0:-r),i,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var u=t.ex+a-(n>0?0:i),f=t.ey+a-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,u,f,u+i,f,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f+o-1,u+i,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f,u,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,u+i-1,f,u+i-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+a-(n>0?0:i),t.ey+a-(r>0?0:o),i,o)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,a,f=new fabric.Point(o(n,i),o(r,s)),l=new fabric.Point(u(n,i),u(r,s));for(var c=0,h=this._objects.length;c1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t})),this.renderAll()},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(e);if(this.stroke||this.strokeDashArray)e.lineWidth=this.strokeWidth,this.stroke&&this.stroke.toLive?e.strokeStyle=this.stroke.toLive(e):e.strokeStyle=this.stroke;this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){if(t.Image){var n=new o;n.onload=function(){e&&e(new t.Image(n),r),n=n.onload=null};var r={angle:this.getAngle(),flipX:this.getFlipX(),flipY:this.getFlipY()};this.set({angle:0,flipX:!1,flipY:!1}),this.toDataURL(function(e){n.src=e})}return this},toDataURL:function(e){function i(t){t.left=n.width/2,t.top=n.height/2,t.setActive(!1),r.add(t);var i=r.toDataURL();r.dispose(),r=t=null,e&&e(i)}var n=t.util.createCanvasElement();n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);r.backgroundColor="transparent",r.renderAll(),this.constructor.async?this.clone(i):i(this.clone())},hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){this.originalState={},this.saveState()},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){this.set("fill",new t.Pattern(e))},setShadow:function(e){this.set("shadow",new t.Shadow(e))},animate:function(){if(arguments[0]&&typeof arguments[0]=="object")for(var e in arguments[0])this._animate(e,arguments[0][e],arguments[1]);else this._animate.apply(this,arguments);return this},_animate:function(e,n,r){var i=this,s;n=n.toString(),r?r=t.util.object.clone(r):r={},~e.indexOf(".")&&(s=e.split("."));var o=s?this.get(s[0])[s[1]]:this.get(e);"from"in r||(r.from=o),~n.indexOf("=")?n=o+parseFloat(n.replace("=","")):n=parseFloat(n),t.util.animate({startValue:r.from,endValue:n,byValue:r.by,easing:r.easing,duration:r.duration,onChange:function(t){s?i[s[0]][s[1]]=t:i.set(e,t),r.onChange&&r.onChange()},onComplete:function(){i.setCoords(),r.onComplete&&r.onComplete()}})},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.canvas.sendToBack(this),this},bringToFront:function(){return this.canvas.bringToFront(this),this},sendBackwards:function(){return this.canvas.sendBackwards(this),this},bringForward:function(){return this.canvas.bringForward(this),this}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x+this.getWidth()/2:n==="right"&&(i=t.x-this.getWidth()/2),r==="top"?s=t.y+this.getHeight()/2:r==="bottom"&&(s=t.y-this.getHeight()/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x-this.getWidth()/2:n==="right"&&(i=t.x+this.getWidth()/2),r==="top"?s=t.y-this.getHeight()/2:r==="bottom"&&(s=t.y+this.getHeight()/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){return this.translateToCenterPoint(new fabric.Point(this.left,this.top),this.originX,this.originY)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s,o;return n!==undefined&&r!==undefined?(n==="left"?s=i.x-this.getWidth()/2:n==="right"?s=i.x+this.getWidth()/2:s=i.x,r==="top"?o=i.y-this.getHeight()/2:r==="bottom"?o=i.y+this.getHeight()/2:o=i.y):(s=this.left,o=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(s,o))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){return this.isContainedWithinRect(e.oCoords.tl,e.oCoords.br)},isContainedWithinRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y);return r.x>e.x&&i.xe.y&&s.y1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(this.currentHeight/this.currentWidth),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords(),this}})}(),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner,a),o=this._findCrossPoints(i,s,u);if(o%2===1&&o!==0)return this.__corner=a,a}return!1},_findCrossPoints:function(e,t,n){var r,i,s,o,u,a,f=0,l;for(var c in n){l=n[c];if(l.o.y=t&&l.d.y>=t)continue;l.o.x===l.d.x&&l.o.x>=e?(u=l.o.x,a=t):(r=0,i=(l.d.y-l.o.y)/(l.d.x-l.o.x),s=t-r*e,o=l.o.y-i*l.o.x,u=-(s-o)/(r-i),a=s+r*u),u>=e&&(f+=1);if(f===2)break}return f},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return;var t=this.cornerSize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1};if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath(),this.group&&e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top),e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2),e.lineWidth=this.strokeWidth;var t=e.strokeStyle;e.strokeStyle=e.fillStyle,e.stroke(),e.strokeStyle=t},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){var e=[];return this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" "),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this.fill&&e.fill(),this._removeShadow(e),this.stroke&&e.stroke()},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this.fill&&e.fill(),this.stroke&&e.stroke()},complexity:function(){return 1},toSVG:function(){var e=[],t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!0)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this.stroke&&e.stroke(),this._removeShadow(e),this.fill&&e.fill(),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function r(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height;e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&this.group&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this.fill&&e.fill(),this._removeShadow(e),this.strokeDashArray?this._renderDashedStroke(e):this.stroke&&e.stroke()},_renderDashedStroke:function(e){function u(u,a){var f=0,l=0,c=(a?i.height:i.width)+s*2;while(fc&&(l=f-c),u?n+=h*u-(l*u||0):r+=h*a-(l*a||0),e[1&t?"moveTo":"lineTo"](n,r),t>=o&&(t=0)}}1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray);var t=0,n=-this.width/2,r=-this.height/2,i=this,s=this.padding,o=this.strokeDashArray.length;e.save(),e.beginPath(),u(1,0),u(0,1),u(-1,0),u(0,-1),e.stroke(),e.closePath(),e.restore()},_normalizeLeftTopProperties:function(e){return e.left&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),e.top&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[],t=[];for(var r=0,i=this.points.length;r'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[],t=[];for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n,r,i;for(var s=0,o,u=this.path.length;sc)for(var h=1,p=o.length;h"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke,o=t.util.removeFromArray;if(t.Group)return;var u={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,{type:"group",initialize:function(e,t){t=t||{},this.objects=e||[],this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this.objects},addWithUpdate:function(e){return this._restoreObjectsState(),this.objects.push(e),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),o(this.objects,e),e.setActive(!1),this._calcBounds(),this._updateObjectsCoords(),this},add:function(e){return this.objects.push(e),this},remove:function(e){return o(this.objects,e),this},size:function(){return this.getObjects().length},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textShadow:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this.objects.length;this[e]=t;while(n--)this.objects[n].set(e,t)}else this[e]=t},contains:function(e){return this.objects.indexOf(e)>-1},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this.objects,"toObject",e)})},render:function(e,n){e.save(),this.transform(e);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=this.objects.length;i>0;i--){var s=this.objects[i-1],o=s.borderScaleFactor,u=s.hasRotatingPoint;s.borderScaleFactor=r,s.hasRotatingPoint=!1,s.render(e),s.borderScaleFactor=o,s.hasRotatingPoint=u}this.clipTo&&e.restore(),!n&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore(),this.setCoords()},item:function(e){return this.getObjects()[e]},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=typeof t.complexity=="function"?t.complexity():0,e},0)},_restoreObjectsState:function(){return this.objects.forEach(this._restoreObjectState,this),this},_restoreObjectState:function(e){var t=this.get("left"),n=this.get("top"),r=this.getAngle()*(Math.PI/180),i=Math.cos(r)*e.get("top")+Math.sin(r)*e.get("left"),s=-Math.sin(r)*e.get("top")+Math.cos(r)*e.get("left");return e.setAngle(e.getAngle()+this.getAngle()),e.set("left",t+s*this.get("scaleX")),e.set("top",n+i*this.get("scaleY")),e.set("scaleX",e.get("scaleX")*this.get("scaleX")),e.set("scaleY",e.get("scaleY")*this.get("scaleY")),e.setCoords(),e.hasControls=e.__origHasControls,delete e.__origHasControls,e.setActive(!1),e.setCoords(),this},destroy:function(){return this._restoreObjectsState()},saveCoords:function(){return this._originalLeft=this.get("left"),this._originalTop=this.get("top"),this},hasMoved:function(){return this._originalLeft!==this.get("left")||this._originalTop!==this.get("top")},setObjectsCoords:function(){return this.forEachObject(function(e){e.setCoords()}),this},activateAllObjects:function(){return this.forEachObject(function(e){e.setActive()}),this},forEachObject:t.StaticCanvas.prototype.forEachObject,_setOpacityIfSame:function(){var e=this.getObjects(),t=e[0]?e[0].get("opacity"):1,n=e.every(function(e){return e.get("opacity")===t});n&&(this.opacity=t)},_calcBounds:function(){var e=[],t=[],n,s,o,u,a,f,l,c=0,h=this.objects.length;for(;ce.x&&i-ne.y},toGrayscale:function(){var e=this.objects.length;while(e--)this.objects[e].toGrayscale();return this},toSVG:function(){var e=[];for(var t=this.objects.length;t--;)e.push(this.objects[t].toSVG());return''+e.join("")+""},get:function(e){if(e in u){if(this[e])return this[e];for(var t=0,n=this.objects.length;t'+'"+""},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=typeof Buffer!="undefined"&&typeof window=="undefined",n=this._originalImage,r=fabric.util.createCanvasElement(),i=t?new(require("canvas").Image):fabric.document.createElement("img"),s=this;r.width=n.width,r.height=n.height,r.getContext("2d").drawImage(n,0,0,n.width,n.height),this.filters.forEach(function(e){e&&e.applyTo(r)}),i.onload=function(){s._element=i,e&&e(),i.onload=r=n=null},i.width=n.width,i.height=n.height;if(t){var o=r.toDataURL("image/png").substring(22);i.src=new Buffer(o,"base64"),s._element=i,e&&e()}else i.src=r.toDataURL("image/png");return this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){var r=fabric.document.createElement("img");r.onload=function(){t&&t(new fabric.Image(r,n)),r=r.onload=null},r.src=e},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.setActive(!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters={},fabric.Image.filters.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0];var t=fabric.util.createCanvasElement();this.tmpCtx=t.getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this.clipTo&&t.util.clipContext(this,e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.clipTo&&e.restore(),this.textShadow&&e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this._setBoundaries(e,n),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,strokeStyle:this.strokeStyle,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},getText:function(){return this.text},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in s&&(this._initDimensions(),this.setCoords())}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e),i=HTTP.request({hostname:r.hostname,port:r.port,path:r.pathname,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});i.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+ +r.hostname+":"+r.port):fabric.log(e.message)})}function request_fs(e,t){var n=require("fs"),r=n.createReadStream(e),i="";r.on("data",function(e){i+=e}),r.on("end",function(){t(i)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&e.indexOf("data")===0?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index 2a84ef5f08fbecb4a4f16621d3c71d25a82b7529..6b3be75c2b11b8a4f1a06d4af3b15768253e0bc8 100644 GIT binary patch delta 45692 zcmV($K;ysV+yblS0tX+92nhS;Jdp>_fA@OM)>n5cnan}VDoIs#Ae=m&$$1#dnR9sP z7R_E`8ODoAvt*htWvq5)6}>lMJWFmGeM8r*;FU8)S>Q#7nIy~)8{8Y8%FlV2O4s?A z&61_VJpJoB#|O_}pIp3u^P;s-%jn5*@mB`3C&yj$Gf8H5s1!eXfWvn7-Pz8Yf2J}} z@~!T4Sv5M$E|Pq@IL}wa9yt?E5-V!SRFEnsj9a@4m4z3Pw2vERr{O0V-JL;7M8UUb z`Ft+ZuklpaeLh|DNj^_vG0)>EL?d?Dx-7O*SF$w?Q9><3y2+^&Qvdk6;VQaYEiyEj z0@sZ_(h6UkY@6?e^|L{gzZC>byhO%$fYyp{T}1R>dP>?6Bq${RL4}E zv8R&LTvFV_g z=S?Qbt(UE$P`Ta9tleci7VBjgzZ+DikfWX<9L?|T=6=x}+%`r(u9_R8e}B}?TR)Xh z;@Cb`b@O}E{2t9JIako^d!nZF#&c860F&(wI(tZ$(pmT{C%qOwm>kDoF2Gi?;3A+e+5L>IT+ZuEaW- zMB(RL4xCU0Q8;zD`5ib#e+R*jUUW9A8KBr2Y*j`CaOYM9%QA+Vk(IGfTSMWMRQ3Fr zr-q79$We?1Fdx5E@QnCS$xuS2f)+oVy9XgFuQ87zKNV{;Vet1}k53Zd`G56#+fj3Zt71<&zXB^due1V>OUZ@b8!!j?thiiVZtB>Xz|v zlt8t{+gdI%8<3Q}e{f5BQ)qY)#@L}MLIws@TjH4Vd4Zg7k}NC)7YN_fnQ>+wU~z_v}0yw@6%EM`(&giD#^7H8O+c3MTiP*?FQ zl0OXfk`?u4`~Y~MLBR;OQo(dl%crE-NxV$*OyXEFwWVO_e+FQWqdODWY6nzvt0`C1 z0=rnZ=`|b(y)`b9!L_6|X5B(!--4#2zJq)o&PdfvNwnLFZ7ogi`S-iY5F> ztsE}>kg{64=d~Tel2EPfo;Bl&CQ{i0i!W3kkUrNcuZ_|^X>Fw=4IK0%VtE5lrm=20 z5tLvsD^`-Xe@e!)#{HD~7L&e7Mtf^4DNjlBtfLX%6|M#M3M6}RjT<=)Gps719QT?a zF)=^rlY|@5(7lI;jj9WW!fC@z*fk3{%QT20?AUNzJV~?I){@@2VTsXJ zCdH;f3=cOTw2>l_I;Pz?z?Dj5oE7# z;x}mmcS7Bv3s+}Y?ggt=gcg7?hem4{$l!%huf_kVIjN#~u&^W=WG+Ae^9vF6KIaK= zf$jjuC0=OH;-&FVSo4H{unKZB(F0(oUL@lyweYj!#BaAVfQ3j$*_aUK#VD+BpUMUe z>OC|qe{eLdrnkn|VHF_L3G4GLEZyAoBe6!|LT1nIE`lq%AJ^vls$qkxbHq3YP`+eh zd7k(<#d%^z!xTw-H3BSVu$*IIx1e5WdcEaL%YVv4p7F%&o{P}SB;XrpOiaq*vc^da zJ`~e$Mxh51pxfj9x2$h2c)%eqZNkemxT0UUe>`&@!S6FJ-|Z+LGd>lx>rIl*GRL1D z9xh?%x_@0}T~A3819o^Ad3l^I!a42*Hv~`dQKM6vP4v_jcmX!9L{zeGal8Wi7Hlr8 z^MD)EAzV8E%hM>lirr|m7=t|vzG8!-tXah|z0(Kjhlc?%0Wfs3K%fXqU2-|7xqMyg ze{(Uvq6#)&cY5zfv~1C zGR0wBxJBJ5g%<^Da&H<1Sw@1#*t(V|f+Z>49CY~Q>@BwIZ9^z#*i_5{b-`!2AOzKd zlsII@l}Q`hL!@rt^p)IAxt5d=B9{Ykf9k!Az~tU6P(c~i{_^2^8Jz_2b&$OZ;^69D zT;&ELsBC%nGVNY*=Q4H-ApuM?uD>FNc8J6bBn0*T(J=SOPl*);aphX(A|sx&!A|!Q z5NmpK*hizP_hG(TXuo!lQI_8G*RKR71hc!ry%^}APab%b1T#5<2TIOVB$b4Re}+&9 z4rpp`inGenIl|OlC0WWRL^UeHeEeg64dy$lxohaa+;0tW9US2V?4>qMDx4NFjyu-v z{=60LGFv1!#dyXKnls3lz_Z;YKr`!H0YcDMpI?n09ylJRE*n^G;I7DPSI@0T-oMvg z7}MHtzK~KisY&nFyAvpDf!g^re@$Thok-4MKR77cP6MSa@%pPILeyOH5F1?L4#|i1 z9c{O6*GdfK5H~-F4IaWbr){wuNs{zV&dyw;4tNqEi0`2qInbY~-z+lB=W4^`xU8!MSwQA6G_1At-wo zCGMlaHxYn`;`QXCoMOu~e^CixEtRzY_FMKMhV*DBatP~bayM+SHnM~`m}dg*utuMp znna^5?mYr~J3dSzD&Iv3a!GisU9y-RC~p>KwC#*MSwwG%Tt(R$B+m8 zfvX!4X_!7m2BY*x8vAmcE~#!oyQtMjhnS`l(9SS^LJ0{eoR-s;IMQ+2=~F|SS{RpR zgXeOZz~`e3^9~wl=e!Et8vc1K)?k&pvz=qL)QYa}bOqZVnBUo9NnwylIB6<~yA zVGj@On(gKIWm?FRf9{NY-dG#J82)^1>Md5(X9DMeoAUPc+|Ag5&6J(-yooJnFhIQTl0GQ5u zou9|;4Z-TTed&5f!%J4w*v9P)N0&2i+%8a;ZFo1ls*okCe~={w7-MVh4BY}`VrF*3 zUa$th8u+{V@PaCXcr98Dpt8M!BWF9ZB&=H9VPy46L*$If&hjN` zSRF|C4(68hC!8#bgN9QYgR-zWv zIAxHg3Rlr|s$k{6L~^rfwtoCaF4H^9gQ<<6>7w{_e|OR>`IsCY(qDw;7_-~|=+WK< zA3fT)*aKr5Ln}np+npB&d>Tc2=YDIFS$e_C7KMq zX*O`2N~#H|ZuWT|g<;ePOCmo{VZnBvJd~Jd0f92~_@odIwiEoT-JpMOj6u1TI-O_s zydt+de|@0^$w~n7I*Stz-5W|4#2BBESR1KxD9<)%tnv~FdoPI?Yw1l<1$4#5E0SL& zRWi!v(T^S$GEQX*3J5of4Xtzz|H1j8owf0onVt0^ZNh<)AYH87b3lR#Ig9wRgjQKb zkf~Q+sdgc>W|Ebu+bM%?4~wlzqlZkxW-~FEe`n=7K!K`E)n-#{t?K<45Wdd6#P_`= z`>I3xszZI%Ym>{O%PkL<)vFI{EKR*q_hI5FwgSLkyBXND-BvQFhZa7`{tT?ryj9gp zv3h`us>wz5AQx4WizXRD)R=3_#0|LgSPvh~{H*SpHBDJ<4$E;dgRErC%-$e99HGxv@ z0;Tnw=wtQ9(zI@o#W8Y%c-SjleAhup0&M{%Ibp2b*h!R3KT$eZ9LPNx68-3`3!-jlvT}RAH!xvYK7m>IZN|uB`&MvaLNy>3zm`OT`~oxds`0tfoBe=oe2K85-rVz5r2FX*&gvwI{bmy~)}Y>?J^V&}$upe@l|iAXeMm zQLUYOAQ$HTpgjySjG&<)$EOTd+(>DsWugj(HzwqLs$c^qARjI;qzwvEi5opC)seV| zCXz9POqAK(KH#D4eHd}*%O8i5NeyCRJ4mOnfQR%TZvprtg9~p#N1A*xi8_SSZ@meu zKuj0}kL;~ya11_|q?$oPfA`GP%uLsMn)!#TR}8Mv>X+#a139BLW%QsYV?XpJQ2Q$c zyC9b$9iT)x3(L;KC^F>S8;D*F4fF&Kn##{T%2|IvuJT`2GUj$5>+L z8Sdi#Gu+(0AiogHQ`UYRx7)rkqSf)LLieYmP~Xw7T0eP!K(u_=>%bPyMR^H+P<+KB zkKXa1`~YS@$KHJpk2+^OXM7*m=HJ7zoyBAa!$C3Fwr5qt%=r!{2h9~|Vp@I{!Xbyv zXB2u$GoOQvh`n&Xf0efkvkdt03pHz(Ich$POvPEgoXFITyc-&S!`c|9&-3hi1$xim z?-lAP3H81kY6`Ty+LRb2+hPj8Oe8v+(~t;D2%7C*7YMescI3t>po0|-sW+js1!)MU zHLbzn7m7Y@ZXgc0KUb$dHk-7OZ}Lmmg@M;~!VM`9Wn?`p=>){Ni* z&6qYdV^wO#)Y6RKn_6Jo8A}QZtMZlvu`R61jw$-xt1_s1-O4b5=k%%P$f^1}r32xN z+ul!>-CBKne=u!S=4PAwRGP4}q}`6$qh>C5e2>^djrLGx_1NaMsowwFw!|#Rs!|D$?=;s^S|JlpNeu z`K>SG3sGQ9Bo)-@oRX!Khwv9-q0`X%JKSMU^QU@ibF1$X7xWmy3i0pp8U9`4-%_V6 zLo1l)cL{OuwukU;@6!Ia}WOXfO6Dj zh!02j478q@3;cxQsp#{k#INRAF7BO0qw%ChC_7=LO^|C!#P32?7% zfSWu3aIb5CJ8O%R65n3e__npTcm;K!51-vnfBekI#H;2Zo>m9wbbR)TC_n2w#SiUv zQiyQl)nnEck+IL66TYMheJZWj{=lEpv^o1Aa{gS{pSAch%H;aP_r0?55A~NWFe`L% zEjtWyFaTF3Vr=q_1&ax^q#cJmHy;jrRqovg;hXQH&wq1|J_^Yk{-*gc(buE)nC(*a zf2K%i{3G3$gx1Ve_n zKPjMs@jt|8v)Z55Ayq*e<6nepJ1(6*e>5g=k^K?&-N>mV?Rz!&}Tn^n|i=F=9zg8>jld%E%id?`cF^onO^=FAv$x{5;>6@XN zU2nxcH#DZ|X7ikk#EGf7&SS*d{2gw+6pK9!AanE7{I7$OU+}NL>LqK1FTvuUe|yMj z*a|)ocMUlCrv_nyVg#7jOPBg6jeXkzn+B0|-|=@%gW6ek`rUU&g%Eci|37a}+upW~ z@6(c10&^Qk0dJS7}Yth;^!v`O}RLfbmz)Ebk zq0X8W*U9)3AVuzs0!yv%Z#hITHD}iOwVMF*0K2a?OU3;``eu}4@n5bdcGJgin7t~` zg<~gmq(9Sud%^dxEt0@uaWhJt^S#aFY<<2!6AC3&RaNpg^I5Y#zG5B@e{TnFKVRr-7GB@!vbhr$wr>D_3nOx{xHF2X?a0{o3nhw4vmc^Jq)_Hd*e>USucOpn zLt2F9_Z+PP%Cx|&Dk^$X6D<=L$sL;^(v`=EMrk~Zt2e@f1WglmtNTKV+GSw#SgtGq zrETKlwl+i=hF0t)L9pKhe>$kTx3}IN!!(K=ziu~Y6vN{`XG~M>K#gHOzGm|{Z_Sf2 z&+=?qw8q&y#C%WMNPMX$P&NcovOpcUv;_hg;X1xaG9E!2GxskOHjS6F;xF%ieC0XB z3Zcp#Pj``PmVMJ_V8pjoTfOB8(3K~LRR2yz(|#mXs{qO)^yn)De|b0*KnLXu5W|%M zJgmX3mDfUR9Rq>@1&H&o;K0w-)ys8|YGrx^q|m-2k{REu{)`UasK-<~*V`w>U8~!H ze@SX9{5SEA0Szp$90p~PC8#CXY%HC*(b~SP0&j++qWs<*9?+y7J@Ep|#!6UwlZIJH zWrbvEds960j56dSe?6%#VTPEN(0LGaaPm@0X=qAaOQd7*QnDbqE_Ih6ot9n*DB&qq ziIsvLN_u65ucVv@Ql90RhGm+h!Jz(WR22|^`^}bjhfEFHC+oaA}m*`K`8T|5uXkT9C;%^?wf5qQy;o@(84;PPi^fpvC z-X>nJ7muiwBYD_SBe?E z46e2__wQOvGxx#O1AP4p$e*h!%Veg&Dw+Pftvpfg1!oGqr9u@%)@^b+EM`+ae+I0P z5X_0z9|xzwe~(das5dmYoFJRb$8#=76z zJGHzd%sljbJpDcUIILuI0h|K9oJy_QByy$>yy@*5L{Isa@dOyk=p=g4`b6XL4ssSS zQV|UQq>q|F`1PGT=7bKOzCyx@|0{K4HWTKFXEX_Kqf=?D`&J5MzXWgf8o;snQBaGY zq94%+f8sOzbb*~W@Q+4-i5dk{X{A) z>L@*)2cH4qKGb0NtYCOA4Fo3H63Csd`Dyf_QuWj5b6NLip%ueSX?ppydRnhP?CpIh z-?}iA=DfZ4HlO?o_6NTITuBdeQ^$acrX~shf7w1-4uNpCFlC4uL1^$7FwB!#+cpV~ zWGn{CbxOnKrgAFNsaiBQ6}C!jHo@cKbci?*^jFG)?@nL$@DDH!_=8@#rikP$bGC!# zSmOc~x8XZl+O{5cJAJ3)_|U0RDk66VvlPhB3*7wLu$dJnXeABAu1qDNiFtiA%`2_V ze{_COxA>j2A|9~PP`G9j*Dpe6I9xiu>mc6;0JhP#@);17>;WTM6El=oX7Vg2b~sUwMXK9gNJbGVctvqsOv4!GZ-f-h2g=7Ak?_(YP8h0f6)7F$B00V9$^{-ochQx$Szj zp|;(s1yaQU_n_6^+t{|@U2Wv>f3ChfylBs~stoU@9Nvu_qvxnNGVui$&91#l8p|}f zd1=fq{kKl1K>GX28{?<5XD1$mllYArLMKRA-fpA2JXz zDJQH}2MiFX8*$op^U;}XcVQtPTXZmFk#C)V+!#>O6!jo2;5e|OQrV7Nqb zihtt?{QbJqY0=MD@b{a}bhzw(bNLnh{l{?mw9^^4=x2(5pZ=3xp3=+L9eVj1UZ!k{ zf2UJSf}iQ=;Hummu+ibr8Qx)2cirjm?wct*d^`Pr00N1-q*}P+L@Q@_>EOn42{`&6 z^aQ*UVlh6Z_&BA)W_BJ#M`m zt-jiz-MjNI$16W^1|P9}I^?5$XN}s(^)v>2T_ZJIxBA104|NXP!^yta$J*J8(ZCC52GXhuxD@6*I0 z{{FJTdct1}Bz||F7V({l%7mAQ#)fzJEVKNJH`>uX=Bb?_!GLWc2dZ9W`0ZS*wo<~# z5zJO;Y+ivujz#SQSEiU@2fPYc1oxJfF{|2iwVRc;%TF2`*Q0oPnKOPvTgNJ+=SJ`I ziwkB(4am_4f3+zcg(8agP;q>ZFg8Xt7!X!KVa6D(UqMitY863O zkQdoP^cHQm|70JxwucDSmt(sul9^P%puU!v@~yo9Fv6{!kb{WPu%-$B^D`vQ*0wb# zqJ8P}CG8%Jt~aS-&G}&hd!p~913q#KG-p5$%Nkapf6AmGQD9nA@#(aoyft?XUjc!= zx?;THOB}9;4l>m#qw+>B18~7&B)?>)`~lOTi+)?x<4jqc^d!?+2BRf3fpLoAG`)Sd zXffb>J>U2=H|70(+l$5stzcvdRR_%h>#m9AR{;hMEsj0#qxK*g26f0gd*;bjMWU(D{ClY^%)rKw+Rf*5(f zm>2I+1i*-;tdAJ0QbM%ybyzyF^3{9Tg|6UH)#W|C10b!qhdp|SH6Z%QN4L~A?Tj(f zj5$6%aT=B!@qQX6t)iE^OLrQ?!3=}k5o315*XsXT+iOh_c4@Y2Ef37uH+o0!(oT; zNs>Qwk>oEha+^(yk#sUr>Y8W&c?8)af3=5^Kkw6VKW|TAQxNR1%PjADZGM= z5t_ye#jE`h}*A+S!JNm2e){aE%{g&5~CbZ4%Xbj>2z;zyNXTVWuu1e3%g@6 z!2OY89^!A=_LZx(qJj2G&08F3Mb=7?BDnE>>`(Wn7=8_-lg4o#+8i8BncL7W^3}klf7p@1DP~991IczdSor?mFrM1cjN~pf*dI*#$}Ls< znPSi|s0>=3^isq2NcZdBL?@!>kFIK@Us!|OwYtOzcwc>{2%W&^U zYZU-bilYfD@e^>O>D+U=c zxbV}YV8WH~QYAkzwN7-@DwOZu6Cl`}LOSN6vi!@HIi$970;|%ztTfo60;+B!Qsk{< zJr(v9mJa}|>{+q^)I+~@dUjP5RKdCY%8NjrM8`#(KJ6KV8Y7elN~N~i?ms~`SBNAd zRbcpXK)>TOnG;j+5`B8Bf8i`{+2yCCc>9>5^X&7Z%4LtME#Fqm4327jVuV9tL6`mg z;A>>}ubX5%DcIQ&$PDqW_kaKrrGc3{VON~7{49GLPZA&>QEp{(k$RRr7v-YN&L)yV z%wn{(awP8;#a1fd>s#WBPcQ(zl|}jqg_zOQ%8O|bSv0d7FGrXLe>b|evXRpu<|JBJ z=`5WkAn^!lpGOlLK-^{Cz5iZ0z(zM#_99y>XB5W1xGqARD& zllLz!PF}w}d3|zrZsopy@%?cn7aDQ-5%dmS4XVO=e3|3^CL|?(6s0!cu(cmWojwn> zRYck{zEe(}f4$@|?IpN$K-@wd7jiL!1bv5eG#n*tw=lkYb$TQh-7s-7rxGHj5|s!y zZ(|ZL=0=Jd8Uh6}QP`6w;`mA-{{j)Iy$;JfUNpb~sTCMR`vy4?oNyHw#Srrn7#CUM z$OegHNM8b})Wb9YhjPb#19+7FhXx5Twghc=+dz3re|aFG+wC+!hvHQOaG3nR0Na;9 z>-4mOqXEN`S;2S{f>Fknxed6UT@e$n3Tbkf3&b~OSM&$aKhO}Pz(cU^?a4rn{NZ`# zY_c3Tjit!2=$N2N705(Th$f9R$iqeyZ=g4V7EiL3IoufAN{qAbk3^Ilv|sT3^e8Ht zh~q{OfAd{M64Jw>x(HppCzGWkuT5l0^*x&nBK~caq&L|o78ZEjO33jVl`!3GV+B|R z(FhFMXG93AdJJ-OzR(h!i^nG*-WgB`0XSNTxYHpE#%tbfi)p#bj$m53^P&#ie;yuh?Zxv&&pKA4R5b6flAnmei!8U2 z4=H(Omp!7yD@@$fjS_e=2V`$d-xf=^4Bd!vZtspeBmV$T)XEH<{#VMVAeGRHMJuH; z!wJ|P*r+9fIi~ zF+Q&#_4f5I)_o~USDsj*mL?%IGpjYme?-PJq%gMixdjRw~5J?=8d1~IgyiTl!G z%hgB#);DLsZes#tP9#X)Rt^l)JM1rr^2>+hhM=$(qP;FvhZrF4N-09|QX&yOe>W;a zt2VGit{2#>1Rkeo4nk}}^keAYw8GCwBi`AXS7fJs$A}*6=5iEP>?zwfB9PB+V$N# zie2Y;$&M!2LAni+$}ylisckB(H6sOG9EOT$wXAbKmKrb8;L{9Xz|=CGj5UdNG~C&+ zUaxYxv*8tm77N77S+>AH_(|=P>NSx_`7;sODTw9iM@n*t5%7FB_R`2q3eXCmQnmJ_ zRVq!{guYfyoD@w_|0zt-e=*2+Q$0B(KDIjLpy~8o*$vojqivO9A)q#Tyw>Z)dcz7- zJ~_!J<_lEqWTdOapCw3aF>`-pa{MCO$WeK8he=;Tf7);%$-SGe>FxSYBw8C`ur~= z))WKOLMEqrjfxXELeFlef}qQ)7ll0b(;$8nAmvSGP|<{yZ;fqlFO5O_HUS>K1mobk zx9q#)n(^%RE7+`q3SGLPU-|W|!atDFM%V}#h=0O3MSAh%4N`zt-O#;Rbz}uU_2QWzZqpb3FXA=M%rz2JIBle{L$ZHI=aIQzX~%1e%)@ynJ$jGSC=_>;x0Wu|8cZc`OvY}I!aYEiph3Ljd8?9`8R1}p-a^uj+ zn(_t_qorJa^>E_Jfn7u@^UD%RbP&%L*D>1eyYNTW0Z$QK^73)$$xB}H#`OgZRX?{j zcw_C^e_#~>+k~9%U~W20Pl=mPfxA5j_jmUv$Xti4CRmCQeHe?Fe^*@#0-P2mMDj81ceZp?*F{+GAVHzj`cWuQzBh@RNraXvQ`$&%u9)X+-z%(uM z6$%l^C17cKJ^4raJ{8e%>A0&Xf7eBdf(SAOLXn5E5WpYgnTZr_nF)5amU7lz5=TG3 zg-SoMmS-e83a<(5%-0_${rgHbb)1t2;IN_N$pTN)uEE=CGImhb4spYohr_SGqOlTu zgdK&P0Pt6~nx#*v(^wmhJ||p~gvre-47o=bP<)SyDov6BThR4&|)!gJxn94*Rk+ZtFUJO4oTkm17-<}l{)%8jY*H+7;e`?L!)TsTBT$Q-R z0Lfx(SAEw-;WG13C9Em*cIHu5-g7`(jx~$pFgr=g=r}X?MC~z96Y0XNJ9PGsTP7wv z8OGV^U{ah6k25TL)Wx4+x0`VZ-GNm|xuaor({f+R5Ln-n5|u77wOw>|K>MhL)Iexl zGUQ_HZZ3DW&~D?}e>Z$q8;>(*0Mdh6X^f<9=&?H^^F2+q8@t#$pq@dU9@t#pzZ1)J?Z-l=`O0v$k=4jJYu1VFRMm=X$54j5THiN&PY65ERjzxr{16V~K_7=5N72fC z?af_I>P`Xq!>&<67mC38ozcH+tzVZEIuqiyi(AEW<5mf~e>9>QvTd%KYg*aagoCbJ zVeVjEv`&!Br8)mS4nx?dl<#bQ>Cn3MEEjVAV}277tsj+gkl1I`d;XTr({=svW((xxNJ^N z0<)u+ahM&Kf89JfR)w5YIC-YU^Q-?6eX)8%i+4{ia4(zPxcQWB;F^H%q1%z;0lKC6 z-QcVf71NGLTrr2K^c#GkK9ptEk}j?;7V{W8}nBURTLYieHi8)+*weGx$<9p zbb%&8kcD<~cSk+_xNhAt8-Kf7lY6qWs!Cb-K^PvYW+y3N_O{ zchmCloeoZhy+1vg6vuz+J^FI^NKmuvbST3^5kd3Xdqlz58vMg4MWB;**c%#&|MHNN zyJ^0(68-rLPNtjvq&HXUOG~p{j!K!9KXaX!1FBdRT*AgMN`}w1RWt;oDs^7eqq$Cv zp9?cJ224f3D+Kbql8NbSrPI>)OniTRvs#Yc%cS&mt&`ICrR-l`PDdNnJ^Z>bdWYX1 zWT^=A1fBg_6)XZ?8D)#08xe%=^G2^_2KsuTe^b-`{eJJ%H@J30Y_)qDDXkRE4Tpu5^4UNM$q6tqTbDSh;T}VvY6!zpW$ZE!Mvb*Z5Lr;gHbN>DHmp(PxMp)QtP(n5$0H8 zo5@5euU@1t!YZ2NBQ$l}#wdJ{TGB}org0Ij=%s**B+;)fF2kEUg2<;fe2P7H3^$GM z1gPyFN(>Z@OoKp=kGlg(!m!yVZ>!FUf7G}`E1fuJv%_1q!OBccNv$R+6+TMK1GX^8 zxxE<~vxE=MQM|E(2ImMlK`0D6DgtugEfVW>iiDsJ7b=HBl=sIW+Wp0ab$^m_dD2*R zR+)0VY&}EQ4!oayhDKFCWhF6Y>j*g{Xtd!2wNS5^oNPpkvVbuW(*~nq^sJ1~f3`m? z@ZFx{Z99}mF0MS9l%sqr3_`6JyTTN6(t0$d>$ZPHtMYy;e*F6{~j|^X_Td zr)54I1bpHVjuCJN3qZSdxp*52!5*9!@^M|5;yjAA|4(!da)~D9aJ)Rr<`pRkQK6M8 z6gJhjA_-xiNSSjZC!>g2+Nx7he@4ntugutZ(QUW8PRO7XSk9$*@AcxL++*o&6feRh z?%}0C^Iv-3!q)aiU`U=ms?!+}r|=){!YPd2{9L&8tIyD-WzCZJh!mGs_wTRF4wLi= z!x=s%vLeH&--^oA6-L!FdJm14QjLl@t|*2f0kSlQwQHzD%o4W-h@~>7fAP#HV-97^ zL>VmpdXM_ei{&LcPN3yXai%~)Kdt#+9>gw&{e8P_+8(-E%u;8NHd%I43qj`?=T?I# zp1eIqL#S8h$CJ0mZ%-J$5RZAOQF8Y8+wE`Z(D=c*u#v9MhQ?u1ww+LL_#cnqKgeD%J|6xdxwviE zpSy=o3-$5#*)GK9yP9Ac`AY zL6D=E88PX!5+G?QpiaH0uLAle}DV77j)owf8ldx8QtCGZjwI) z2)V2i*s(#U(2=;~)=Hlfk#O%+0`~k<7j|3s(?Rj)Od3=&H@+T45Mjs?ADtV#5e)~)$2pehjp+&dS86Eps ze9PKt)u=Y?UVCiz3Mqqn`J=#fpW%}MYeZY!G|p~Me@BjIFbS6boZ2NH{>{9NR9 zCA3Y@%ifR0&#)X}oF1I!2ufr%^>=K}%_1*;9bJ{#d}jt&4v_ls=?OIs{)%oqeqhg> zcj=H`Z3*%;OJikvHV+( z0=xpOE0bM07cE^HRMOa0j>KX4N|C@w%M5-Mp*a}HU~p~$%VxldCS5z^p_RvZmNv_$SyvEB z!wGV@BVBR9Wf|~G;`pRWFiijp~EUqc>+qYGJCx*c4_%6nOAtI%Su=+Lo@JobY zZ{LRaCnRqjA|!%@bDi+b&V&n2$mnXGln@zo)}26nn!lroE@mp~Lw~&cOEGg^aZUv& z`Ej{doco%#j3;Yb+YkF4=!#}kQP5d+g1ew|MgLCe-v#}f(!X=k*nTh4&N_i;I{b=` z1B$$VPVhnj4aAuDonS(({lTIkd3k7RD1QJt(9icHuE#=@!`0YVYVg;v@zlX>g-A(gyy2$QU%f;q$SLV&X_WB?zpsPicZj>1sPAo^8d6z2>Q36xn>K0 zhM=`T-&w{l;icobB-29QFf3XmH^%|r3+En4JffGFvzP!mNlN9uEtYfkQZmu^JEVHjOWQ>D~$OXyTVkCXRjJczy{k8 zMPURDAQ+uHxYkrKUy-nsoZa2cAlXcR3iph0d7l)H6hpX~h3m(4BaS(Y2u~6xhMBa0 z4i!`hyx>0{;;+Z=VcEV<-V4!D8R6T^2bS%A4_A=)xTOdEDE`_E8*Ifv^W{)nmj_@`iJ>qYT5abxN$RxRc;%_Qm zE}d{@-L|#fHeM%zS42cqwG6vy3@0dRd%c4DRUW>QM}sivyoF1>>lz^><78;q$T%yu zapeST@pd2II&WX2b!@eEG>ttEJfk^>lBHdxgHx>b>8n@N`_Wa57g0F8@CN+z%jcu_ zW`Mv~xr|w{8bgWKn`YGyY5D7adIbZoqF!cm*&-2nfp|bW{2ER~;E2&0TNp%3EZclk z@jSP%NejwR<9u9Lj}OsFc=AV$uQ3_)`=dc5-lv!utDBa0?)18DS%#H>Qt)i5&5 zgtdvVdW-;yd$w$qXG*ybi#4U3BjxwT<*LixYA0nfAL&4Ohal<092S~?gk^(kPgBNe zlmmN4Q2r{10bBccuzy2wXFV=Y(8NFJ^-=H$z{ZA?ESLKwy7s zGy_)~%?TM}_R2w`l9mHBiiEJC5jI3bnOHz(VNk*tr;5v9nObIlLpND=gc>$8IN*>G zlcm6+`3lb5${KxtQ`Cf(rYaRM3TPiAzpd#|HUaFrN(ed{r*}rE&Q9$@4MH5|wK&WR zbW6r-=fD^Kdq(%SS+R&lVN?48Nke`y^NA5nSfw#BL2PCPUK0oi-4yC9^*U%tkciIajr)yV;P?u!yDMk4V#k+jan zIb&XX8H`G)Yu{wu&0hI z9d&!-4s~mP@dLfD3ClhEWJntF_DNX6%%VBAq_8DSEq*I{2?>Tyf}xop^6ZyHxwbS9 zo%{C-QptWEE9R=|Ne5HV~{QlXy2eCNcQEYEl7d-F)PC&809E2p@A7C8z z5x+L#YeQc*LlHNmIPtZ?ug4G0+cpa|({)irEkLb!{UJgdyjJ!pCCGrNH z1Y?uuA0g~PYvNHb#=1`)KhRzjg!@9@f(lMg?B(=07(tjlcaP~wR6XW7s1;rm7@0M` zHPnAbhO|f-e*m-zfw0S@)=?<=nr^sa&?d4cBf0$0iojv3tfdr0eqxV4(&3^998zTt zP)b~nTOu&U5i%c}X4FPR0gKbfHKfX6g~0mQG~+iE-`|cZdpr5tFu%dnZs?RkgGW?_ zC)388X`?fhf@#}XuqWCqq8VMPSVOgFuGNa>$QKLGf9F}4pUuxTf_crZ(JcpJg7`Aq zQb~3tb(oZ;$&;+NXuP>BT^1-aAV3NNtsvK&6z;9GFt>mstrDi0%HtSH1>3pyGF!nH zEM5AGuB3N!@o{E6S(BF~`cjCc@>?UqSdN-xJVL^XU*vxcE0-nmS0aNWKhsE3ZO3hz z*&x$Ne{ZI|CF=x{)Mt~)-d3HrAC3uGsCWD}!p~c&>qhEr^zhfHh|J+FaEHW+jpAGW z7-g{-Zlj+&7}I1=w~X*mkazwvP>E=+#VQcK7Sy=vCG_eloh?7KuM#F5K?!U=K0EfK zAih|vOW3ANa(+?2-oUSxHRN19$Xft<1|&4ge;xM%u3Xa_uA08_mudq0;pGq28YA${ zw!!eB#Pkp|2EobsoW3Xsa8{SusaQZ#L-t9EGGg>?4CkTYsq`qXj?x9$-XAIbB??&W6@2Y&KWdEtYtRhol zf8>JSo0xBX_@$9eYE zcA{!KQMG0NY)_9Kih4IvbBr$+iyk=ol8k=!i*l#9RIQT$^g`D2lK zNAZu%;vb9FXXVP-(Y}oX2hB~Fe@Dl)+zk-A;m{3)(zr8R7CzSaD30C|0#Kedg(N82 zyegMv0{?Im#dhE(#+{4>f2BA3 z3QBK01<62Fka8W+#NH5H3u198+R(GyFK_lA!;lO|jfT%^rcA4j7hVe0hji6CX==j8 z-rU$b1T}=OV!QpMSGHZ`aW8Q^h%|nW5T8{>r8X#}8M%j0nn{6P+5slI3(1>6lQ@#~m&AjZN?6QxSH*R7PLpo2!rd1B<3dAdeDG7qUt+#_8H zR)Scc%;Ra2p3KMn(`0e~{^B$l+`kXMr}ytq;Wrt}(`F3J{-Q>_HJ+@Rf6m_Aq4Lf` zw*!|ne{&n)|3<3N7t15NTvpE}v#GngluZ0p;-^sj6sQuuy67T)O3QSy$QD}TWVw5K zeqz;{hT{++Y-nki>DRyjk{&NlD?*Q!_9KYCox-1R*%?HCtWYJ&vplFywA38uJ#!s~ zb1|$+3YyDtHvAaoatFARf0DQNT=d%4dDG3hx9g7OrIw84+R$eS7X|3;8vcY8c0I>& z@DF_m+W@K^mv-M%x9_E=?`2!x%e{SniRg93<-*;ZQcs{H0+qwsCTpx4{JBodrM-kB z8;M|?TETd_FEO|=*RsPEbQrGEi?;Z6Oc?aj_5n*V{;DlLjVp{_f3?n`+#9Qw4~o4m~6_e=9QaR~tX|j!PmQ$xSIqs7RA!$euxc4e=0DS5=qNVI@IE&_M-m zV%tz7Tl^TFqav*+F#V_!(;Y?9kB6#k7`6RH!$@bO^CMW#aPVa`u1#(9!6fJd(>bc8 zw;ECkGLskT@n0n`M#Wf~JrAAa@?2D;NaaGM9mkVlr)YSGf49DAmg#w}ZIX@7!r;(c zJLzp6w>j=dHEQ1rM$KGe;<8vTzb(@Zsq`K+;7YwP#Gya#J*0^|?mhYoP2_QJKrR?r zHKZSrQX-D~Lk$t^?0>k5A%x1gZqZkZbo%SxuJYO|@^jl%Bw;O@Qp={)zNVleh;9b# zio3hP@K2CmfA}OWqEqoJizfZi@X;f8)Xs_+|5vKEBJRW@-Jq9nTN-S60VL5d(}gUO zY943j(h;oI1pqqVdnDg_%|0$!8Ai>mWCGT}1guXVj@Q5h)XWId^^EL(!s={&ejE-E zy=RF(^T=KmW!tLQszb8OUVi&knwdhbP=fAX((e5H_RH;^`VB?>+exmHn}=<3oBng1j)Fh*``^I- zp~MxTTJRhHk0h{}_{8Y>dU{pmnBkjmIOGzRK79VUkN?BZEGsC(pDF($zs^MQ_<5a{ z%Vk07f4Tf3eZLXqWA-Jwn-|4l^lDwM7MVzo3Ce6HD#z$5U%={tfTw-@Ul7+>x)8Nv z>JPL5Fg^EflPwm@4*E+|q=uZQ~RLaZn+IyOHC6k<&X4NtD;OdSig z)L1q`hK&%Rtz4gdaXzs$5x+Q(MuYQ4*N~4De?P4#Tst4rYbM6tUb{u1ZKly>h>i@P za7IV>aVxZ0gG3daJ6xo5TgDkYAai;CEl6EGYqh> zfBEz&=>|o&5~bN>1(#;n;t=MKp%COwQ2^M~bea*B^VCG=9Vv;JNX zt3(KpeZy_|N^N?M*_-9oF-IK*a6GG^fA7(d#uN0T(3cpv5x|jUuro*Z`jP~zBFt~$ zK+p^#H-d3qOc(1}_DnbpK<}0n7Djl^^YsFMm#_%3^2g%IY({w37&cwxtJh2NUKpck zcDY69F+K_CJ7LF<90CUjg*wLdf5CyJ zt)=GpN4EAS>fJN@sxKBl8lj<`NWOStXP+z<#x>}l+YLwYJv+r%wI1gpXUsrHEo7!g1P6>=7WdE#+l&v zR--V4iobt9aMvyR5Gdq}zZ(hUf6xtz8l}KeZ!HAkoH8JU@1i(rd>*U5JCps{-FKFX z7yMCOGJPA#GDAa;hMEGBP^d)!Abe^~=+CLDs0 zjE7b5q~}7^dnlJ5j&ke1NC%x&H=co+I80j_l_?g%RM>C|G2l-!_8e27MW>CuCYmIw z69?|0x*Po5#JCTd2X34-Lf0AiVp5sMcmV*hE0X|#;9Oc!+fGCyZ0T)#;zbK}V>`i0 zD%ksyi^drZr3`AN81$+sf0?ohbQvw-2TJoriYS!$2OWR z>3CY`WOB;OTw!8XKZDzDQDLMoWsOPQqFKl8yu#R3W>ztKw~JFye;u=lg?$K_N&IjA z%>hQVw7PX2Q>?Mn*DRmoB$7T@fkt^&xLcm$N2XVqTc8z4Sww2~23zWsD!^a7(HN8Q zak!*V(kOk6XAnR@vT9BCZdRrrnq={wLKDN&SZ*AbyH-RK zLA}0Ome99~uH5kXe^jI&n~`=DdG`@x!XU0j$|APYmJ+5)rFWFV9B!S2Z#_B~LMtLx z&;D9$mnE()z&InnBbujY;47639~LZv=-y70ha-2!jpF?8_;}wz;3Zf$>lL}W2}y|+ zPbJjYr7u1b>Ga~IHP1^l3+8fRV1P=-x9kdjl#v!Jr{E~Gf8s9Swpc%@+nC2}lik|=2L#|;g%^+$o3)_OPKc(_L_va}S(wC^ZHM~09BUpPqvRG-r( zDK~0vlx5fK5)RRVeGQe;C((deUQN?-X6#Hc7|jTIW|$ofy-l%68{8X2nXNhbYN1yR zFQyTtC-*}wfAgb4TAl&U(Awah)}m2#dJ^cGgHhmiAUGfUd%(~YddckWQ6?A^JC)Vb z3z7tkxFd=nkPtyRL1f+(!o=O4_n1iAxF^Gf7{RUB2dOVfkCmk-JK~^`BVTmPW$#hmhq(^5A5+4dfA+0!f}ZYl$|$^7+}+9PQfEhb ze*gZxf+h|!|G=w=3#5Hv&e#`KX}c~n3>k}NvQJDtOp zvsbqufARK&+izpNDt*s1=5n#TNEh_@<*sG(8t-le^C~{c+<|cAP&-!g=#b28e<7wq z9!js5tCr_deL~3N!8v`#%|k;{F8BO-hfP_r*GDBJqw#$uQ!4y;|5nnVjuz+BTu+UW z_`LPBV||$GX~+An-4A+eQY%MU`#_}OHdkTze@P#?#N^R(WG)YCv6pjZO|Ff}&Y+#% z(+2@OJDozXuGZO6oZsCwf`ph|qj|bL5f=XKU2zK3{Etz|;T;v1p|q-B(%fV-ZUDYx zKlPjhiCY&Liabl}6!C3#ff;0YXkMrF-CeLk|Ky13fGX{+`IH5T#&o ze~+9ZQMK<>RoK2CRPvA=uZ-MOe5S@mh)>L}*^PUBiyT>ZI}l|aqBGOqWOXf!17XkFG8eTTnp-|6e@0oX z&x8Lps$+3jj0&_2Jz!QHR%2P_m){xJ`pmrK#~jZ^3E6k=LVv}XEk5YSR&>HTZLGhD z7Ju0e4sm}~J4&X$@0@w3+gJH4Gx|)UU<5g}HQKhPC%f~`GDJT=YD8>Vu=zB@dzug3 z1XwEfd^s7$2njrLPNI_`5TGd)f5Z*^&VMB*#+xyPWeHq;81)wPX4Z1^G|T?$j+eRsa6##}}<7>0}xz-eXGYigaa)9|+n$)Ij{P zUH8YAW9Q`ZoMaxjks{Hq0xX8i0?LaEyhmGe>@1=|&#M@q6cV6S# zo>RS<^iyl|vJ%=)*GVIZXk+8q+<%X0JcKvX5!EvVHml`ojnKJB?0zbjz%tf(CWJQy zif@W0cutc&K0C*&05Fblf4Emam05ayfsdj>mGi;r9a5N#PdFkiisCs{S^wZB@J^%jcQP4d(`P;*%CnwKdKRbe!91VJdlasGs5Da~A zRoAQ0$;pQgA9^1i!dZQJ@@<)}uJUPh0%=b$E#y0a@&<$6teypre;*L2r$AeQYJ&Iy zG_R-jGgHM-{>mB>~Q5R=&^JSHdi-rjMV}3+C+T11y%K zZ+I2`qk;hxD@t@3f88ih`hYUdtH&xu8(L^6iH{IuBf68DrGX;K>M~p#R?;SG+%Z@v zPY`Pq@sL}c9C(Wm_!WqsLchA3Kyd!;DT`%SAaMAPKGS!?$X+PUD%snbo8PQ80zubV zoG4>W0(8mo2fy2j2%3s68gOJiv!f({Vgh!%nb;*e)8pjQe+xcE_YYySIJ3`gd4}^0 zu}Pj(E9m4)bf~beboLNA3SiAG^#kSf4;t6)tf_KuacyXf>yleHQy{7@&!aOkgw&|vx^d^s;4IFiIQ*m=0lj0 zSQuqB3yCa|t9s|fcWJ2)u4OmHy(H-l=-oy(Gt<#YGBluF;m7pOJ_w1 zXbc+M@!*n9F5GVN_7ls@((sRLfm(LZnV>3fVt&9it&bbJ&!A^o-r~Ih`{q{x7qb(L zvfGU^`S^hjU*j?^92F`!@K(#J)vS~bIe7wFf2wa`>CuIXgX`tG%4W+CMIcvo@dE}u zgCJ;PdmcRQoIF235ayAF9poV{2EL4ZEUC0F={r&njvO!O>NgHvg?xt~dWvh4)xAlQ z6c?_H`=lNt%$ib$Jhp)3{KgH+LNsZNY4C?rX`;*)DWSrJ)Qg}KM2Hs|+#X38heVIG ze^wdKbSF64J`P%JG~(N@fB5P3n|CAq{AV}jmu^}lO;wkVLDexHhJ%{i4 zX+{2Xmq~j3#c|b{AAf<+9SHBxfqyy!fBrK(k4_%O7@DkO4i`U$@B@8kt&N5jBu_;E zD}Jl-^mm`eFl#B-_{wLDjOE)~YN@#cXFIE=q{1UlCOq<(qZ*8C?7qSpbIXp3o#`lH zx|_4sa`s)>%-5KG)9oSKe+bvD z_ifEg#5;l@9NVx64s>3}?nbZkLOZS#LFo;{4SZ8(*|Rc*gXppWI$*@@0oyTB%6bj~ zhUbHV74O6o{5u0`=UqB$1KN4#BJJQ2X7>%w*wka-k=L(2q_dCC^970V5!&MQTIsxM&a<&ap?;WrX>k|Dx zEjDtz@AYFdiI?3sS%tC2dpF>82;^$4Uf{Hbt(t^TzTh>+t%ro}^)f6Ffr{Ys-c8dL zEDbplaO=Nn97H>tU{p$Ti>+@{NAXPKMRu7NSgWl(B31)>*DLIh0g5R_e>Z9b&BCT= zEvJ(u@s-}( zSaBOGZo^MyP8&SL3dnknfB#ejgn=*tXnws023dKyhS`~G^q}-~PE=N)PgVAmEXfZp z9vW-JjS{~X_&b;38})mEzp>_&Yfd{<_hM^H1S%st&FC$T#R&a&A&lK-M2J5)BBPSR zp#ShIN02Z75L>vwCVtQvHpJRD2oG}8MIV&#W7BQm2@xO&Cm3*of3Y|=gCEGHuE-zA z4@iO^(SZZJvUIvNMCRy- z4yqfbY{~OxOJH8Nv4Y0kaXR6GH-sIeKg!A@2$A1I6O(v-^4AI4z zCQph^XdM+@D-vJDODp}xPQS6zBVy#Zg*2t*6mj0;hrkyTaL7;J9}i>w6V@ zoL;_f=~=#r@zK8A+N2Mt6Yl8TG9mCcKq{Mv@TSg*o53!~e|=t8Ylj4D=*@A&jYqK> zeWFkH&v&6VM?3D1#t)!PnUxN5z$`=95jfn)XGu}H&;cC!dijjg!Ff*;1xv6P!s*K& z7Zn^865$h$IEm32r%CV8*t&v#BxryR{ayO2TL(c6xZ!N| zDwM2l*F{dofA-2lGMeGD%7hhUh%?C8UrBb&kEaUBI}Op9)e-%JU_eLx-oq%+DW9d) z6`?(hkOIq4L*qr1LV5K+PATee8vz}0jz~ zzeyWB+xV1M|Ib>sWtpXZ{hs_@dQl1Z67kgOQL9kg?fMu!oZ=|577~eWehCo$q0BFl zJhE=#e=o?wH4?sQCVb;26gpEnnb4N960!1=PD5%>Sub7G|2x}ARZe>sPC}Xf7j$6E zvFtTW1k*b#S&&ZPzJNl(UtZ;xMbaINtnWdjs(#}y>J1ikv8?OmwJPh4Q`Q@|tY1_~ zx_A{7jf{309T!1Hjz;90Xe&2NY$^Ui&`EQ^eM zv$Ft}mT@$>*N5#4YuRnu&aT-Sz$kaQ!P_I=_>uz65b$`%38gKKu9i&G8s&8l#nD|7 ze}B*GILBYK`flM45tGwQI8Z8XJuNe8Dp{PdEl{KjURGKTQbmV2MV6gNR>* zRl}Nf%+DeS!dEv4&U*Cv z3MV96v#(b>sDK7V4qyRY2Dn`l^rKNqPS<)^fy*V#%-)R~SLFVS92i|Mg1bBZe}$f= z1SMhTM%T59yO42jR2(LkKH`N-cwQoFeT1g!C%uZ=71rw4#UhB-^4M2CNM);Ja`o$? zq~t`SRJpn|-E7DbrHTgF1z#+T&KU(mdZcS()l0fndwQgp0GBP1@AqY#^18}n9@bGQ z$TEMwk>78WgBG}jcS}Cgq)e~@=kv2zs*Dl=M(UvEZfoZVoaINM-4R+Sd{>0(Ct z>Z`0yM@3ln2zoh+S>dOYK6_=OG;sx%Qd7s#VB6ADMdOlNf6aTl-RzO9%gZ0JD4X~0 zcWE(O@a}uQylfz8`G}4b_iE=qaw|&h5qDRUX({d8$h8oLhFtA#f{+S$e+velwt2Y3 z_xkE_sqO*!0!kPPIv7PwVS&#`u86F2XF}M8cmcr2ou5}TwC-28IvQji6+On}x?P!x zpjUMi(g1ZQMVrA6`*C283cUP(L{)8?HtNzY_EHgNq_R_(E$g$v-mQd;c$eDtF89RX zTj3_ux@krjo;B0P%EfDCe-CxpN(Z*J-NG#{ATsuok`PpP#}Po~;eD_D%`L~{F{Zab zVAGe=U-8WxZzaF5(>Q~D&$?~X{9JJ0bj zhOkq{;5V;E=2xT}U|oRb=#R*#?2TL5MpgDkRkkrJdt+7hhASJ(cLZ_7Pvy@y$~k$4 zCR~dR)N&7I=-!%_f5cS+#dn}T@hYj5=XdvB+Nl(ka;~-zvx2h*X8(BDtxPHM@vt)( zFOo)%!tKn7^jo8Whjv`?erZ`|&roh@V3SHZUQfuKbZg0hof3kcH^j9!mh}B`NUOIRt zI!G+_k!Sf^Sve!D-KkY3EmAy%COSl}=#g)kTX`vGBxdrbWkp~xUv2mt2vhGyMbQi~ zwI6*nOW5vr(knA8eSR9~e`UDtE)jhf3oz}F_2o8*tSk8TbGl;G&B!` zxPi;ae$BTmlyIQ2>})3d-K^tzyzb=iZ%YIA=kF}L11^JpeR4Tm)~Dw0-eH*siS_b zFA|r3e~ON8T-Ib67BTwL3CkG4aTm=LYfiD|6iNy+P5SYbUk`YCdNuBJrqONcU_wmK z>FSbdjEgXJl!R%R=Ri;H?$V}~uZnG4weH_f#RpfB!bt_dg%0G3+w5NO&hio*28sp*`da ztSOt80;9uAi9WjC{bDMmCz*U?(Q#qEUi)szIa&g?^gK5z&P7oK0i}J8d3VMV0sPce zRBnsq`K|#rl0^oXO!M7LS}qzHJgK7FB5{++HHUW~G2BTZ)aR=++4}QFzOCV6B*vSR zf9U4=G$n5%x89}6Qd;o_)|9`KN0JzyEK1=E@7^36O~E@FxSK$qZP)l3JjDze?7g*7c-BFz0ywfe*)F|l4_RAgM#CMsBJ#|d$e#2jMM$&U?rzx zSG%ScfV4aY`1^o75{Q-(n(&L(Q%~Y4$J5*9D{!N`YHlq34Ge9ECXRzy{vL=#K+_(K z%%eg)tZ!{@2;FPwnN)Sgw}u&~HfLa5Thk=d0N3EimADw8hkMw2a8L$LmDlO7e-gp_ z=R)s5rv*4l?sD5oq825Y3?2rT3fkl|(%$&$&{H^JlpCcxW6{WGdvo(51Tq9*h8Lnu=x2R#1kgdYiHp@< zi#AiEcW2vy>9{^E#x<}Ji1BTYy@gTI4pZB1x9hYJxx{BVFd*nJ=CCmlf4VE}4@Y7J zeY~-;11V+~+JBH#&^>*>`iHowYdZV^VCwWJC)r%9R0w6D`NN}QsJRgh&KBq#f}E=NI;b)`Mw z1$`yDK zwbwSa##9yT+}dl4gpU3e=}$vfpwlM#02)0DqHr+wJbi)7DL70F5#{R%vE5>eAe6Jr&gCN=GuH?)55g z7gOs5drP5-g1zD?=Hpw_I^iGPqSlhy8&!OQW%WlEwzFw^wtrsjnCqWcyJx!iO=j9t z$|ucqTWdaLM1QlHfBuBMxN8M|#!Ua<0kui8jj!MWK8|djtoT zu5`;fW53)|;+9uJdHaXuO!?_)+W&|e488E4$Dqi*-Oxyna6#UZ7K*gnQNlj=DRB2g z;TXNQ2`z`ZN4gWFiyrC^1v=P*KdsRoY_VN=Zra?8QHcnKKAQ^^EWL90LGDh--N)0b zw7AS>VPu2oh)dn|a+c3?N0d#T0(fjhtdwq}x$gTMMvR|Xf01Rjsj>jE`^UPIZe$(- zsgsRlFMrOjv*p^ra*b}=%iG3}`fZy)E(4*HMcDF2BE3$+Z|X2gJT6Yk${J0e}*LDpHIRPAiN`sOjvurt@r4$Ndt+ik}w0*@4P zR)-!KhB83u(>l(_?Va!{GouUh(6_d3vzt-PDu1J>bWfr%As5?vE~)12nKb;IQ>3J~ zFzGcY%n#8&mXAdqN2y_HcgofBB$a5{F<1YRB2B02j&fpouSFYk7vQ)1e26;y#%^n> zZ&NFFi_5GPqO^s1H^~8ApS8+Ro0+Ng|&d zT7Pq+TAgv0G`J9PmbC8w7G3~xWDh$UJbPZjJsjZl$Sg`Y;c!!W--0X^9JeSwwVTU| zxj6gaF=(279MEGZYzrc!MN;}7%VJh>OuSEJ-5gaKNcS=Ey_sSB#@r6jUFm8=yU*~m zP?hg3ibiGZGtOY;X^m*M>!sFaobZ{p`G3M{JAE`FY=LEEO_4?54KJ&$l$LauTgP6Q zR3LarisL)py;U^B*S8*H8`^3Mw1f}mJ+@K6bA@d*kW!+w_9G3_rePoE zYue~VcX#)6#<^Gfb?#A9Rs3nIbpZCN-+E5z9tgV?Nk~kMzi=I=UU){*+(Xt*@qa(N zCPMN?J12`PP$frETbb@8O+szEAcWNo8|X#l_*&=*`tkWJ>uf@QL}UCaQ~tfN~2B6$>(P`=Afmb3;w7MylL;i z=KpX9M7tb|h_+35EpAsI-z?`Arhm=j4{NuoIP=4@ZrjN4p1YDstWD)yMIuJFsMok4 z_=uu~FITpcrC6Y#wA^zErmw-q!|8i3hod{!21W()@}8vHqaJho)UYbDTV$XXXwy7) z2doliXVtkf@~Q3#?iU(Sp!DLUI5~-TJFwe!v<+_{0qpt&5n?MrcwbstKw&Fxzxn0e zv!7o+dHwy5FGi30{dj)!w8dEoL2xAX-QDe0Adi`ET%_KN>IDcES!Z{51=&hN2#IX) zTioxZQz7%EsmQPKN_9(*8RUUtlnGUI(zcJGCmbwSf#n<}o~=uh7ib=6YZj{CD#ZYM z;Qso5eBj8UV8^(jF7Brd8{1m_R-^XP#m@deGh701-5j$1&hdGLMKpS;dF}1aF_hJP z)Hqh+;g!G^j8WWv#{OR{(-|J&EiQVb)9cKX`@mIHU=ktOrsw)#f*E_OlbvW9e=J}O z3)}rp6{=Fq*Yc9+BIwdeH zIS@#Eq=>evfTd}Bll2hBshSYDQx%NpZ-9OT&x-T0bUlT?Q5e7jTHaFwiVC_6F@ekx zVVMS~W+p>~u`N&UnWc3`1@xxre=4u(wLp{;ox`Pkc`Y%jElkpiFL=UCl?m>yqOUV5 z_@HVd*0*PZtXm)#15#@o26Q=8g}K$nNZvY+Jfjhrwc|Qwm!PHYSRpY943&9KR0wpi zSLFSI#3bdeU6dmpMy~CHGHIcX$Ruju>{g<{L`);_PcKMeF{i4A^b9{IcqS$z>fBcCRtA1RrC&qOlSw+8H}5v~^Wk zr;W3!ZCa+cpk09_>uWWT>;OumLT z1?=~&i)S)9+aot$N!MRV!PoouJeLYJIDdL+g_hWM5VMD9pdFMJj5s$IH@^w%t%9kx|0;#IxMd>_l_Userb+V6*20 zxa!|4-hB?h1qF)wcs8y2IFnHw2dLEK22D<-e^s`8v#wbJu9{oNXd)vWKbZ5bpVy4( zumff7=(D*6vg2~Gyhs;M7ON{^(Jyw434QKjC5;#4Y{B&p*8T=H-*8C`^3!?E7!OfBg!mF4HP1 zf0Cqgl2~zXg+`1dSVrI*fu|?THpx+N#OQV$L?|r^PEVLavMpmIX`2WZK93-rsE2qh z!mXlyIgW*F8mR@f0T`b zF{Ba6yS$z4Otj=DZonw$J9%fY^2vjglV9zKi7!w%k^nYf#HG<0AxppyeI(ci#&fu@ zPuP?2tG|Bx{j+z%ZyZJEvrZ5N`rxp8D>sX*Mto1qk5Mqd1FxTncsC1l+Q&U65);z1E2R(DxeVcI?#nf``CG#Z8lZzr7e-<0w6awMv z8!#v^J_Y=_e_uVp)aP6BR-0G+eAnEe_gLeOwd@S5>ek)QDU*BmG9f^f!uV#{+VNu0 z$wNi_VM5S(q7AoWRYLwhs|Fm8eoaDIvAFj}%7wDQw4qQJrR!(Kxp=>jUicuREL6A+ zr?iwD$*^O@RS>3+lrzlCF!QJV zNH5vsoFS^ z*%1GEi2rsIHZ=S+o*fZ2k;0*HQ4>JVU?q1jt3=>@$a-c1dZ%eiGj>_z zNdp|P!B8`y4I2qff2!*SU?Wr*sqvfR9GW+#u8!eZJ{iVl7|-;{Fp|yz4wxH5&rMzW zq=GsMRZ#DYrFigZs;g^n)Iu{oiwh?wT>Et@OmjEn2U5`X+f@V)D9E0rSY8UoF;lfAj?es92U({bD5$2+2;G zH=ZaGR_Gg8e@zOyJG_-5nk?PjMbY$8Y_nyaVuT|SEo=V?f~m3&D!di+dOxX(mp zBKc$_uXQG_RlzV;lJf8ziV-hi%svr&#gHf0#jo;eI{yqj;8YsDSm^_K7FBYOt zt3*%G=T)MZn)S-*ny--LR+tSMc7VwAqw|9HYdkCSWLv-QarcfW>y}FNc$Wy#FoW+K22@iZ*y9>~qv;_?ATE9EsVm2rf8duV23xPLrZH;x_{+J+gdx*8p$YfY% zRcsFA6uPeFa)D7!%S(EgN7u=)H2LCS270cH_)uY`5w}OFO`FALBy3gVd!TNXW|khI zfA8@iskH9xvC#qYper@TC~q|`$ek8nt&!eLO6Q52&)pIgRbc!7ch<|{{J!~d9tJ(K z(n4=o;&BTCr01w=qBb;j_zZh;J~ED=ae#~p8iSXx5twaBmQnoQg{~n9qDhe~JEWrZ z4e$*$`8ZiE(rJdVaS#xqz8SBmmQPoif2+|N%0+y!kuevWI7=&(FqA$1q1BgxB#WPZ zrQ~XopJ6}Gxt|Ga1i84$M}x?N_P+9WyOy%;OtmzWwMBmMMGDMY;r#NuHZmyPs+vX# zp?Ugq%wInu|6e`%TeEZP;6N7jV82U8W!+n&P}P>yH$zWisCcp`n@(u8@&Xt5f9vHp z<+2@wQIudNwaUPvvEUCWOw9q!P-&Yj`DR&S%poliNzF30YLPPs_+&cGs%lwQT7e|? z$o*Iv>XQgc<;}PVo3T_>m6h)ai#OgSqfLf7`rW&AK7)(Rr}^J)dfaX3%j{LzZ*=6= za1mpOo-M;GXRXR_fSqRC{?$S3fX$;?1Cy#1xd~u zN-Awv7nH8sOlRv{^9;ARugPOvKXGO~*^1ZVhTEJ^9g}8nePhxbxyG1y`sy7M&)9wb znAlGfZM)RJnwphRVhxK>E3^O$qd~hRF})DA&BK-N0i}wUYF^+zqxKole+~0<5*o8s zCHcNt<20VtPT|JHE#Z6b#BnO$lBbAh6bdK+_Klb5F*|rxm7YQ#ckQX|RqKly-42rl za@EX=PErNa>3EUZp=Xt9Q{wS)22U?swm327?w#H;*qeq{e8E}&~G~~W*e2kM8?rJ1JZWO|# z`tVX%#M~&RDP-h9l<$cKsv)0aXJ#rMRXe0~LoS*jkn7yVe`h9*9DHpiXV0Ff^oISi z6IDwuD)h*PQ`u0SVm+D<@~5rYkfCOSslNJ)c;1(aLz$maiw3@4I)mR(N$|YXoH#6( zrLD)Z?(9TQ-U-^6irUxF?CJooi=#f78f9b?6mh)vV6~H!70vdCUa= zv#eR4Wwrd!ObqVwLFzRTw zt#gzJtmVI5PLtc45geo4WxRpEo9=oWUt!o(UJlK69M2)uR9^I~m~-N2<;RBu|%hqI7e83>tZV=z?TRw zuH*n)xPe9WPW2?0;%kw`g44T`h67b?vN4gAGe&H-X!xbi!SLN(%IHc^7XK>MuM72S z5k$JkwFH#RYPPfn{(;s8G_mleChLp*>gUb6%5KMq;(c8RLG zf04P?-o4|3k~B^wOw&L(<1`BM%VW@TUTVuG{di$}I)PM+q!11)VVxkieE&YICj4QI zAVoe-WGwvB(HM6Ft;d)fOaPyclWY>M6Z(x>z=%OhPzNF9?^1cu34Ptr*A1TSb+ModXD7ZAg;I~{c)q83}SoG~IqX^ZVvfSef{zvbCq zUZT|9Q_HBrFCKNxAd|KZj~(i%?Ea8&0{N_x{MaOHOZhFx-rAH_Ns`F2tTElbM8!J9 zLl2HozLyjA8S*rv_=6r4D^aGz8cLO;<+~o!*UJ-(E;Y2#VH`N;? zDOxdJq;Hs%D+^kDm>e6x*4Cp-eZ{{|>w1@?;owfx7@!-fU{8_b8_LwJ-jS zj9+#N;5e*4Lg?BFeG_Su0GAzA#s`uEeJS8K18FgBFxAWrq={(^ytb?Az~UHn*Ig^H z3xPoB5h*Fd_cZDH9Ti7jFT*~vqCD#S)iEn*ThXI#TTHaW$-EReIr{UwIh56Df7|X* z1JT?b23G?+Sr=Zkv}wCHSeuD>8>=d!!%l$}q?t849CciuxOA60K>ChPsk+`BHY zAr*Zx?5;j-Fl5fp?GTi6^=Sincup}A%>&jN1mj@CUbP)z=5FiGPlnj}QPq0lxqrzI zA7{(h$1CpnjgXg6H<}cpNjrLgD$#>2V=3YN7p*fsq-7BXLJWj~M|pLWF5ucc+Z@SL zKsnIhd_E*3soE9`NF+QZ0zaIKfx#Q2qIZ^@5rRBK3}& zK>(wwvQXHD!Uk5@%@D(eb~*}sD1XE7Do!Vw;2CORfn|i*=1kP++pSro>6!gz$cyG? zaCbK_6IrgO~u+Q{73kM;>Rm4vt!dTosSe==wFcw-?~H<9h=;F?PnXtqNJOx z{De7!q`(^+)|+VWW%3++SV=?6o%Vm+OcDY5ECD&1^qmwVqep{m)BA!&QGez}y5Cm3 zX;~0uUn=-$HkL$l^ z6KLTqLkpb@&2uue&4FJ-U$F%&!|f+&MY|N!utHSppUjBX6&;Uc&P$(<``dlwmDt>$ zzUM2rhtx7jeVUg*`5Q!)gFR%mXVO(pbqHmhQpy(E3TJPU5oOhMLG(J79fm30O=pGo zM*|K(mJuBf4Yf;2^M4|Ty0yVnNfn(vrx4dQYF2*ux#EY2vCk9{p-+^7WG6r4R2rD4 z63-N#OVgVq=m$sB4gGl#KPc59!ks(daM4GClSbnf_|6~?fsSjJM0;*&M0qDx1dA7> z(VF=I1*GLP6c*P4-co!qDh|pa}n2{^wCD zOT!~o;JMC@(tl!hG);k+EbF6-3^HF5Bt9Imijl6+EJ7#|D|>W03?nLn zA#D_fpVa=aL?Rd|9iU|oHo0MJN3K6q&qJ7sAc~NxLc-0?gd3S~Ymd2yx>^)ewClH` zpgV~oQ@qz@&To${&65#(E|W6ZA!M%>X%8cOt(48P?|*nHz$L8TcQ>F|1RUqT>ll<$ zUKI*cQr9km?UDh6A%pFjpCa<06Vi7U?!PCr5Yl*eZ-50l>(+$wRm4Fb{v36SSOiE6 zt~iK3pC0#r1A1)T5>~8ujRbi`Y7$6D%ioXm($Or}_(5A(CjQrK;)6NcuNRAaRW-M{ z2;axsihpE>?DCA0261@UnfkQi2U`$UWd zfx92d;NK|bzJ)ODV(A^yW+7r7!Uc^iR#XjqY;N+gYvf~5Mi8%&QC-rnt<&XwbWE20n@e*_(}01Y zrGNMjHj^aY3H?i-d*wRq6c1l-qFdBhSOV#`h#p4m;cH*ExQlS9T}g-j$B{Y)G`E3{ z!hP}_BkRkXmm8V>CK3B~gCJ|Zk{k9&4#ZO83q;teDco$%i00x^elF4EvGzup<&D&c zCyPfKyt;?dQyi>VHd4mS{cjJN83Cp4blq!qcO8VPBd|aD$=$ z*Pr0ld&x~~wVVUtXutPy1-HJ(IF+@(%rsh{?mA_sj&tL7Q+BGZ2>Itaot5N2a$SnF zh=@)9!WBdOwev#Al5b1?+?{1CYA}CUWvGy537m`Tkblj*vOT_>F_j#v{(iQE%YVVl z77HCiv)L;qs+omXZ(jpF>HU_sYjQSCn}(Fb;lF7TrjuOE>L}-R5Ou2K;rPQ<4!4x~ z>6CL^CAr(&v%1qcAJ03|du=9xypa;0u%a!kJ zcWJ7LE61i+YSok!UWW*i@T_!t(NneSyt=dfFaZ%_q=~Ij) zjGFo0qto;b;-}AYSU^>d?yU+uyX`P9l0#3RNf>}-PB!+?OXowjM>ORtO{Q-Y(=I-S z(@x4gjV{`E^M8QnlKi#p1La7ch&p z8F^Nm8_yU5Zfg8V%OMH z-4{aHLG}vcBO`6S)qhi3!IUnOQch%bx*S(9k>yzhOTiW_#T2-4gh{scj;s(7yZm0V z;l_kcaowS6RT;{}YHFzm{dQw{|4I_n;@DIHlW5nb3Xnv*G;Po?IA*=%3ty=AQ!hw$ zDDi@%htn=`YGuC*(K0QYs2&*GGOXhO8O(}*B2T$Yav8ejpMRS`oFL3=!iD_qZeZzT zuDg{Ax<=@)Lj8V|kONuE=Xq*Ba?YJ6Tl1{*p@?U=NmA5f>n3vrgZ??!5Uy-wRxHG5 zyPtb(db{_e7WB3X?E_oW+eXa)bb8x((f$9)?WdF5u+50;Ao6RqR?}T%D1S$?i^aEV z#5SoeVQM#DW`7Q+x^0)YmcHtVUBbk!>0yVab9uTRFJU_Kvn3JT(j>YRxWT}kL>GbN zfVhST2yYTtIVk(Ca>yHZKw z%jEs>`+t+LI4+{j_3`ydm>)w)myZXqr!Ng)h)dvSj+4tchkv-HO)@(v;)`Sj|9(ii ztCKwb8iMlpRkAr=bS{pk@lEmpetiwUUPD+0VRifh!ZHY}qce${;v#qZ3}7ZCayL!Tw@x<8DcVLMVX;CR+a1WLwF z-;bU>7U9^;XI&k`&G|{pU6wCGHB-+{RDnX+*5Sdj$Z!GQ;-)+js6 z#Cg*l8d=_Zvi!A~WpFN@qi?TA!*~Jzp~L(4@ZWUwWn7KEi2n)y)exSJ{ z|5S;1w@@M(q03 z!udSo5jmonI1j}20GnS-GQ@&N>woDLa$58wJUP4muf^5-Y4y)KJwN-q@o{`|nRByL z5%N}o!T?<^^J>hP5HDuF;qx$1IC(SBJ{1j*>nbcX6Uc{nU4-X`CbZwsP6lphQqhe* z%S0O{!unL^hU0rM3HORg$eep@wBNWOVlU+TJ>TSn_AO8)87}T~Quj8BMt@;0hX(aK ztczL{moko&LCi~?95NhFHrbVkmvBQRU(7$L7_6d{w^t|5hZ1!&%A^G#Y2sLy$&HRg zB^;~4+Z|U2M9M{fW;w8lET2Jku`k&XJh45m|GIk!o3(PG4H}6y78eC)zDl6Dsnhr4 zPG?3tOU3~sHLgD7xVme!x_`Z$rd1X!f>GW{YUJrE{5v$RB6;Tu0$0(PFu2B){yC%< z$qz_54S&_a(_Ox>9uV7K(?Gbw)W2zo&1k~zOK(tkjCQ4H$m72>`^o-1t*2R z19*fNVuYtU@}B`AJy_$9%+3PYYS{`fvqjb?{e+&yDV_S|J8ntU7^`- z&&-o%kfXG<-*2(xlRbWmJ#Y)ki}4Pvvyb#^yuY_QArM65(-bvy@z=k@EhY)b8){$* z8smFX|44dL{(n?2%JP=d6jug+I5n>+VIXjRm4q{lIuD}J(d`j2xTB*73VNdRAU
  • 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 E019{#Y5)KL delta 44406 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

    Q}e$LN`Aq={;HR(6}|+Ee}C>F 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 SU>KwE{|9Q-q0sFEbpimT@V_en diff --git a/package.json b/package.json index cdf5c99b..eb590af2 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", - "version": "1.0.13", + "version": "1.1.0", "author": "Juriy Zaytsev ", "keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"], "repository": "git://github.com/kangax/fabric.js",