From 922caa74c27f29908d247ee839169d3c52470c2f Mon Sep 17 00:00:00 2001 From: kangax Date: Thu, 31 Jul 2014 20:39:15 +0200 Subject: [PATCH] Version 1.4.10 --- HEADER.js | 2 +- bower.json | 2 +- dist/fabric.js | 226 ++++++++++++++++++++++++++++++++++------- dist/fabric.min.js | 14 +-- dist/fabric.min.js.gz | Bin 56458 -> 56848 bytes dist/fabric.require.js | 226 ++++++++++++++++++++++++++++++++++------- package.json | 2 +- 7 files changed, 388 insertions(+), 84 deletions(-) diff --git a/HEADER.js b/HEADER.js index 3386fcf4..39493e56 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.4.9" }; +var fabric = fabric || { version: "1.4.10" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } diff --git a/bower.json b/bower.json index 0b5208bd..577ea6bf 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "fabric.js", - "version": "1.4.9", + "version": "1.4.10", "homepage": "http://fabricjs.com", "authors": [ "kangax", "Kienz" diff --git a/dist/fabric.js b/dist/fabric.js index c7d87b71..9c788e51 100644 --- a/dist/fabric.js +++ b/dist/fabric.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.4.9" }; +var fabric = fabric || { version: "1.4.10" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -3151,10 +3151,9 @@ if (typeof console !== 'undefined') { if (!(matrix[0] !== 1 || matrix[3] !== 1 || matrix[4] !== 0 || matrix[5] !== 0)) return; // default is to preserve aspect ratio // preserveAspectRatio attribute to be implemented - var el = document.createElement('g'); + var el = doc.ownerDocument.createElement('g'); while (doc.firstChild != null) { - var node = doc.firstChild; - el.appendChild(node); + el.appendChild(doc.firstChild); } el.setAttribute('transform','matrix(' + matrix[0] + ' ' + matrix[1] + ' ' + matrix[2] + ' ' + matrix[3] + ' ' + matrix[4] + ' ' + matrix[5] + ')'); doc.appendChild(el); @@ -3254,8 +3253,8 @@ if (typeof console !== 'undefined') { heightAttr: heightAttr }; - fabric.gradientDefs = extend(fabric.getGradientDefs(doc), fabric.gradientDefs); - fabric.cssRules = extend(fabric.getCSSRules(doc), fabric.cssRules); + fabric.gradientDefs = fabric.getGradientDefs(doc); + fabric.cssRules = fabric.getCSSRules(doc); // Precedence of rules: style > class > attribute fabric.parseElements(elements, function(instances) { @@ -5847,36 +5846,65 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ /** * Sets width of this canvas instance - * @param {Number} width value to set width to + * @param {Number|String} width value to set width to + * @param {Object} [options] Options object + * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions + * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions * @return {fabric.Canvas} instance * @chainable true */ - setWidth: function (width) { - return this._setDimension('width', width); + setWidth: function (value, options) { + return this.setDimensions({ width: value }, options); }, /** * Sets height of this canvas instance - * @param {Number} height value to set height to + * @param {Number|String} height value to set height to + * @param {Object} [options] Options object + * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions + * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions * @return {fabric.Canvas} instance * @chainable true */ - setHeight: function (height) { - return this._setDimension('height', height); + setHeight: function (value, options) { + return this.setDimensions({ height: value }, options); }, /** - * Sets dimensions (width, height) of this canvas instance - * @param {Object} dimensions Object with width/height properties - * @param {Number} [dimensions.width] Width of canvas element - * @param {Number} [dimensions.height] Height of canvas element + * Sets dimensions (width, height) of this canvas instance. when options.cssOnly flag active you should also supply the unit of measure (px/%/em) + * @param {Object} dimensions Object with width/height properties + * @param {Number|String} [dimensions.width] Width of canvas element + * @param {Number|String} [dimensions.height] Height of canvas element + * @param {Object} [options] Options object + * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions + * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions * @return {fabric.Canvas} thisArg * @chainable */ - setDimensions: function(dimensions) { + setDimensions: function (dimensions, options) { + var cssValue; + + options = options || {}; + for (var prop in dimensions) { - this._setDimension(prop, dimensions[prop]); + cssValue = dimensions[prop]; + + if (!options.cssOnly) { + this._setBackstoreDimension(prop, dimensions[prop]); + cssValue += 'px'; + } + + if (!options.backstoreOnly) { + this._setCssDimension(prop, cssValue); + } } + + if (!options.cssOnly) { + this.renderAll(); + } + + this.calcOffset(); + return this; }, @@ -5888,27 +5916,40 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ * @return {fabric.Canvas} instance * @chainable true */ - _setDimension: function (prop, value) { + _setBackstoreDimension: function (prop, value) { this.lowerCanvasEl[prop] = value; - this.lowerCanvasEl.style[prop] = value + 'px'; if (this.upperCanvasEl) { this.upperCanvasEl[prop] = value; - this.upperCanvasEl.style[prop] = value + 'px'; } if (this.cacheCanvasEl) { this.cacheCanvasEl[prop] = value; } - if (this.wrapperEl) { - this.wrapperEl.style[prop] = value + 'px'; - } - this[prop] = value; - this.calcOffset(); - this.renderAll(); + return this; + }, + + /** + * Helper for setting css width/height + * @private + * @param {String} prop property (width|height) + * @param {String} value value to set property to + * @return {fabric.Canvas} instance + * @chainable true + */ + _setCssDimension: function (prop, value) { + this.lowerCanvasEl.style[prop] = value; + + if (this.upperCanvasEl) { + this.upperCanvasEl.style[prop] = value; + } + + if (this.wrapperEl) { + this.wrapperEl.style[prop] = value; + } return this; }, @@ -8417,6 +8458,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab bounds = upperCanvasEl.getBoundingClientRect(), cssScale; + this.calcOffset(); + pointer.x = pointer.x - this._offset.left; pointer.y = pointer.y - this._offset.top; if (!ignoreZoom) { @@ -8436,6 +8479,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab height: upperCanvasEl.height / bounds.height }; } + return { x: pointer.x * cssScale.width, y: pointer.y * cssScale.height @@ -18135,6 +18179,118 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag })(typeof exports !== 'undefined' ? exports : this); +(function(global){ + 'use strict'; + + var fabric = global.fabric; + + /** + * Color Blend filter class + * @class fabric.Image.filter.Blend + * @memberOf fabric.Image.filters + * @extends fabric.Image.filters.BaseFilter + * @example + * var filter = new fabric.Image.filters.Blend({ + * color: '#000', + * mode: 'multiply' + * }); + * + * var filter = new fabric.Image.filters.Blend({ + * image: fabricImageObject, + * mode: 'multiply', + * alpha: 0.5 + * }); + + * object.filters.push(filter); + * object.applyFilters(canvas.renderAll.bind(canvas)); + */ + fabric.Image.filters.Blend = fabric.util.createClass({ + type: 'Blend', + + initialize: function(options){ + options = options || {}; + this.color = options.color || '#000'; + this.image = options.image || false; + this.mode = options.mode || 'multiply'; + this.alpha = options.alpha || 1; + }, + + applyTo: function(canvasEl) { + var context = canvasEl.getContext('2d'), + imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), + data = imageData.data, + tr, tg, tb, + r, g, b, + source, + isImage = false; + + if(this.image){ + // Blend images + isImage = true; + + var _el = fabric.util.createCanvasElement(); + _el.width = this.image.width; + _el.height = this.image.height; + + var _tmp_canvas = new fabric.StaticCanvas(_el); + _tmp_canvas.add(this.image); + var context2 = _tmp_canvas.getContext('2d'); + source = context2.getImageData(0, 0, _tmp_canvas.width, _tmp_canvas.height).data; + } else { + // Blend color + source = new fabric.Color(this.color).getSource(); + + tr = source[0] * this.alpha; + tg = source[1] * this.alpha; + tb = source[2] * this.alpha; + } + + for (var i = 0, len = data.length; i < len; i += 4) { + + r = data[i]; + g = data[i + 1]; + b = data[i + 2]; + + if(isImage){ + tr = source[i] * this.alpha; + tg = source[i + 1] * this.alpha; + tb = source[i + 2] * this.alpha; + } + + switch(this.mode){ + case 'multiply': + data[i] = r * tr / 255; + data[i + 1] = g * tg / 255; + data[i + 2] = b * tb / 255; + break; + case 'screen': + data[i] = 1 - (1-r) * (1-tr); + data[i + 1] = 1 - (1-g) * (1-tg); + data[i + 2] = 1 - (1-b) * (1-tb); + break; + case 'add': + data[i] = Math.min(255, r + tr); + data[i + 1] = Math.min(255, g + tg); + data[i + 2] = Math.min(255, b + tb); + break; + case 'diff': + data[i] = Math.abs(r - tr); + data[i + 1] = Math.abs(g - tg); + data[i + 2] = Math.abs(b - tb); + break; + } + } + + context.putImageData(imageData, 0, 0); + } + }); + + fabric.Image.filters.Blend.fromObject = function(object) { + return new fabric.Image.filters.Blend(object); + }; +})(typeof exports !== 'undefined' ? exports : this); + + (function(global) { 'use strict'; @@ -21350,7 +21506,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot if (mouseOffset.y < height) { return this._getNewSelectionStartFromOffset( - mouseOffset, prevWidth, width, charIndex + i, jlen, j); + mouseOffset, prevWidth, width, charIndex + i, jlen); } } @@ -21363,7 +21519,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot /** * @private */ - _getNewSelectionStartFromOffset: function(mouseOffset, prevWidth, width, index, jlen, j) { + _getNewSelectionStartFromOffset: function(mouseOffset, prevWidth, width, index, jlen) { var distanceBtwLastCharAndCursor = mouseOffset.x - prevWidth, distanceBtwNextCharAndCursor = width - mouseOffset.x, @@ -21379,10 +21535,6 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot newSelectionStart = this.text.length; } - if (j === jlen) { - newSelectionStart--; - } - return newSelectionStart; } }); @@ -22326,8 +22478,8 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot }; var origSetWidth = fabric.StaticCanvas.prototype.setWidth; - fabric.StaticCanvas.prototype.setWidth = function(width) { - origSetWidth.call(this, width); + fabric.StaticCanvas.prototype.setWidth = function(width, options) { + origSetWidth.call(this, width, options); this.nodeCanvas.width = width; return this; }; @@ -22336,8 +22488,8 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot } var origSetHeight = fabric.StaticCanvas.prototype.setHeight; - fabric.StaticCanvas.prototype.setHeight = function(height) { - origSetHeight.call(this, height); + fabric.StaticCanvas.prototype.setHeight = function(height, options) { + origSetHeight.call(this, height, options); this.nodeCanvas.height = height; return this; }; diff --git a/dist/fabric.min.js b/dist/fabric.min.js index 9562abb2..2d173827 100644 --- a/dist/fabric.min.js +++ b/dist/fabric.min.js @@ -1,7 +1,7 @@ -/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.9"};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",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],fabric.DPI=96,function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},transformPoint:function(e,t,n){return n?new fabric.Point(t[0]*e.x+t[1]*e.y,t[2]*e.x+t[3]*e.y):new fabric.Point(t[0]*e.x+t[1]*e.y+t[4],t[2]*e.x+t[3]*e.y+t[5])},invertTransform:function(e){var t=e.slice(),n=1/(e[0]*e[3]-e[1]*e[2]);t=[n*e[3],-n*e[1],-n*e[2],n*e[0],0,0];var r=fabric.util.transformPoint({x:e[4],y:e[5]},t);return t[4]=-r.x,t[5]=-r.y,t},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},parseUnit:function(e){var t=/\D{0,2}$/.exec(e),n=parseFloat(e);switch(t[0]){case"mm":return n*fabric.DPI/25.4;case"cm":return n*fabric.DPI/2.54;case"in":return n*fabric.DPI;case"pt":return n*fabric.DPI/72;case"pc":return n*fabric.DPI/72*12;default:return n}},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;sr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(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))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=Math.sin(s),h=Math.cos(s),p=Math.sin(o),d=Math.cos(o),v=l*u,m=-f*a,g=f*u,y=l*a,b=.25*(o-s),w=8/3*Math.sin(b)*Math.sin(b)/Math.sin(b*2),E=e+h-w*c,S=i+c+w*h,x=e+d,T=i+p,N=x+w*p,C=T-w*d;return t[r]=[v*E+m*S,g*E+y*S,v*N+m*C,g*N+y*C,v*x+m*T,g*x+y*T],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>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 t(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&&(" "+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,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},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.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=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),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}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return et[3]?t[3]:t[0];if(t[0]===1&&t[3]===1&&t[4]===0&&t[5]===0)return;var n=document.createElement("g");while(e.firstChild!=null){var r=e.firstChild;n.appendChild(r)}n.setAttribute("transform","matrix("+t[0]+" "+t[1]+" "+t[2]+" "+t[3]+" "+t[4]+" "+t[5]+")"),e.appendChild(n)}function x(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 T(e,t,n){t[n]&&t[n].toSVG&&e.push('','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.parseUnit,u=t.util.multiplyTransformMatrices,a={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},f={stroke:"strokeOpacity",fill:"fillOpacity"};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 n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(u){var l=(new RegExp(v)).exec(u).filter(function(e){return e!==""&&e!=null}),c=l[1],h=l.slice(2).map(parseFloat);switch(c){case"translate":s(a,h);break;case"rotate":h[0]=t.util.degreesToRadians(h[0]),e(a,h);break;case"scale":n(a,h);break;case"skewX":r(a,h);break;case"skewY":i(a,h);break;case"matrix":a=h}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function o(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)$/,r="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",s=new RegExp("^\\s*("+r+"+)\\s*,?"+"\\s*("+r+"+)\\s*,?"+"\\s*("+r+"+)\\s*,?"+"\\s*("+r+"+)\\s*"+"$");return function(r,u,a){if(!r)return;var f=new Date;w(r);var l=r.getAttribute("viewBox"),c=parseFloat(r.getAttribute("width")),h=parseFloat(r.getAttribute("height")),p,d;if(l&&(l=l.match(s))){var v=parseFloat(l[1]),m=parseFloat(l[2]),g=1,y=1;p=parseFloat(l[3]),d=parseFloat(l[4]),c&&c!==p&&(g=c/p),h&&h!==d&&(y=h/d),E(r,[g,0,0,y,-v,-m])}var b=t.util.toArray(r.getElementsByTagName("*"));if(b.length===0&&t.isLikelyNode){b=r.selectNodes('//*[name(.)!="svg"]');var S=[];for(var x=0,T=b.length;x/i,"")));if(!s||!s.documentElement)return; -t.parseSVGDocument(s.documentElement,function(r,i){S.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),S.has(e,function(r){r?S.get(e,function(e){var t=x(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(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)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return T(t,e,"backgroundColor"),T(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.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){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={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}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,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,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;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])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}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]);if(e==="transparent"){this.setSource([255,255,255,0]);return}t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:[1,0,0,1,0,0],onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),this._setImageSmoothing(),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},_setImageSmoothing:function(){var e=this.getContext();e.imageSmoothingEnabled=this.imageSmoothingEnabled,e.webkitImageSmoothingEnabled=this.imageSmoothingEnabled,e.mozImageSmoothingEnabled=this.imageSmoothingEnabled,e.msImageSmoothingEnabled=this.imageSmoothingEnabled,e.oImageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t&&t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice()},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getZoom:function(){return Math.sqrt(this.viewportTransform[0]*this.viewportTransform[3])},setViewportTransform:function(e){this.viewportTransform=e,this.renderAll();for(var t=0,n=this._objects.length;t"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;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}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this -.canvas.contextTop,t=this.canvas.viewportTransform,n=this._points[0],r=this._points[1];e.save(),e.transform(t[0],t[1],t[2],t[3],t[4],t[5]),e.beginPath(),this._points.length===2&&n.x===r.x&&n.y===r.y&&(n.x-=.5,r.x+=.5),e.moveTo(n.x,n.y);for(var i=1,s=this._points.length;in.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e,!0))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e,!0),r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t,n,r){r||(r=this.upperCanvasEl);var i=e(t,r),s=r.getBoundingClientRect(),o;return i.x=i.x-this._offset.left,i.y=i.y-this._offset.top,n||(i=fabric.util.transformPoint(i,fabric.util.invertTransform(this.viewportTransform))),s.width===0||s.height===0?o={width:1,height:1}:o={width:r.width/s.width,height:r.height/s.height},{x:i.x*o.width,y:i.y*o.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&e.set("active",!0)},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center",canvas:this}),t.addWithUpdate(),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay -){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(!e||e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){this.group&&this.group.transform(e,t),e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,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},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;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._restoreFillRule(e),e.restore()},_transform:function(e,t){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)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_renderControls:function(e,n){var r=this.getViewportTransform();e.save();if(this.active&&!n){var i;this.group&&(i=t.util.transformPoint(this.group.getCenterPoint(),r),e.translate(i.x,i.y),e.rotate(s(this.group.angle))),i=t.util.transformPoint(this.getCenterPoint(),r,null!=this.group),this.group&&(i.x*=this.group.scaleX,i.y*=this.group.scaleY),e.translate(i.x,i.y),e.rotate(s(this.angle)),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){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),this.fillRule==="destination-over"?e.fill("evenodd"):e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke||this.strokeWidth===0)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},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()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",e?new t.Shadow(e):null)},setColor:function(e){return this.set("fill",e),this},setAngle:function(e){var t=(this.originX!=="center"||this.originY!=="center")&&this.centeredRotation;return t&&this._setOriginToCenter(),this.set("angle",e),t&&this._resetOrigin(),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),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,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/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,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},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},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var e=this.getCenterPoint();this.originX="center",this.originY="center",this.left=e.x,this.top=e.y},_resetOrigin:function(){var e=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=e.x,this.top=e.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,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){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_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}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=e(this.angle),r=this.getViewportTransform(),i=function(e){return fabric.util.transformPoint(e,r)},s=this.width,o=this.height,u=this.strokeLineCap==="round"||this.strokeLineCap==="square",a=this.type==="line"&&this.width===1,f=this.type==="line"&&this.height===1,l=u&&f||this.type!=="line",c=u&&a||this.type!=="line";a?s=t:f&&(o=t),l&&(s+=t),c&&(o+=t),this.currentWidth=s*this.scaleX,this.currentHeight=o*this.scaleY,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var h=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),p=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),d=Math.cos(p+n)*h,v=Math.sin(p+n)*h,m=Math.sin(n),g=Math.cos(n),y=this.getCenterPoint(),b=new fabric.Point(this.currentWidth,this.currentHeight),w=new fabric.Point(y.x-d,y.y-v),E=new fabric.Point(w.x+b.x*g,w.y+b.x*m),S=new fabric.Point(w.x-b.y*m,w.y+b.y*g),x=new fabric.Point(w.x+b.x/2*g,w.y+b.x/2*m),T=i(w),N=i(E),C=i(new fabric.Point(E.x-b.y*m,E.y+b.y*g)),k=i(S),L=i(new fabric.Point(w.x-b.y/2*m,w.y+b.y/2*g)),A=i(x),O=i(new fabric.Point(E.x-b.y/2*m,E.y+b.y/2*g)),M=i(new fabric.Point(S.x+b.x/2*g,S.y+b.x/2*m)),_=i(new fabric.Point(x.x,x.y)),D=Math.cos(p+n)*this.padding*Math.sqrt(2),P=Math.sin(p+n)*this.padding*Math.sqrt(2);return T=T.add(new fabric.Point(-D,-P)),N=N.add(new fabric.Point(P,-D)),C=C.add(new fabric.Point(D,P)),k=k.add(new fabric.Point(-P,D)),L=L.add(new fabric.Point((-D-P)/2,(-P+D)/2)),A=A.add(new fabric.Point((P-D)/2,-(P+D)/2)),O=O.add(new fabric.Point((P+D)/2,(P-D)/2)),M=M.add(new fabric.Point((D-P)/2,(D+P)/2)),_=_.add(new fabric.Point((P-D)/2,-(P+D)/2)),this.oCoords={tl:T,tr:N,br:C,bl:k,ml:L,mt:A,mr:O,mb:M,mtr:_},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getViewportTransform(),r=fabric.util.transformPoint(this.getCenterPoint(),n),i=fabric.Object.NUM_FRACTION_DIGITS,s="translate("+e(r.x,i)+" "+e(r.y,i)+")",o=t!==0?" rotate("+e(t,i)+")":"",u=this.scaleX===1&&this.scaleY===1&&n[0]===1&&n[3]===1?"":" scale("+e(this.scaleX*n[0],i)+" "+e(this.scaleY*n[3],i)+")",a=this.flipX?"matrix(-1 0 0 1 0 0) ":"",f=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[s,o,u,a,f].join("")},_createBaseSVGMarkup: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)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(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(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=function(){return typeof G_vmlCanvasManager!="undefined"};fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(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);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.getViewportTransform();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;var o=this.getWidth(),u=this.getHeight(),a=this.strokeWidth>1?this.strokeWidth:0,f=this.strokeLineCap==="round"||this.strokeLineCap==="square",l=this.type==="line"&&this.width===1,c=this.type==="line"&&this.height===1,h=f&&c||this.type!=="line",p=f&&l||this.type!=="line";l?o=a/i:c&&(u=a/s),h&&(o+=a/i),p&&(u+=a/s);var d=fabric.util.transformPoint(new fabric.Point(o,u),r,!0),v=d.x,m=d.y;this.group&&(v*=this.group.scaleX,m*=this.group.scaleY),e.strokeRect(~~(-(v/2)-t)-.5,~~(-(m/2)-t)-.5,~~(v+n)+1,~~(m+n)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var g=(-m-t*2)/2;e.beginPath(),e.moveTo(0,g),e.lineTo(0,g-this.rotatingPointOffset),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.getViewportTransform(),i=this.strokeWidth>1?this.strokeWidth:0,s=this.width,o=this.height,u=this.strokeLineCap==="round"||this.strokeLineCap==="square",a=this.type==="line"&&this.width===1,f=this.type==="line"&&this.height===1,l=u&&f||this.type!=="line",c=u&&a||this.type!=="line";a?s=i:f&&(o=i),l&&(s+=i),c&&(o+=i),s*=this.scaleX,o*=this.scaleY;var h=fabric.util.transformPoint(new fabric.Point(s,o),r,!0),p=h.x,d=h.y,v=-(p/2),m=-(d/2),g=this.padding,y=n,b=n-t,w=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1,e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,w,v-y-g,m-y-g),this._drawControl("tr",e,w,v+p-y+g,m-y-g),this._drawControl("bl",e,w,v-y-g,m+d+b+g),this._drawControl("br",e,w,v+p+b+g,m+d+b+g),this.get("lockUniScaling")||(this._drawControl("mt",e,w,v+p/2-y,m-y-g),this._drawControl("mb",e,w,v+p/2-y,m+d+b+g),this._drawControl("mr",e,w,v+p+b+g,m+d/2-y),this._drawControl("ml",e,w,v-y-g,m+d/2-y)),this.hasRotatingPoint&&this._drawControl("mtr",e,w,v+p/2-y,m-this.rotatingPointOffset-this.cornerSize/2-g),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize;this.isControlVisible(e)&&(t()||this.transparentCorners||n.clearRect(i,s,o,o),n[r](i,s,o,o))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".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",radius:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("radius",e.radius||0)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.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),this._renderFill(e),this.stroke&&this._renderStroke(e)},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=t.SHARED_ATTRIBUTES.concat("cx cy r".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=0),"top"in s||(s.top=0),"transformMatrix"in s||(s.left-=n.width?n.width/2:0,s.top-=n.height?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._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),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(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.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.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.save(),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top*this.rx/this.ry:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES);"left"in i||(i.left=0),"top"in i||(i.top=0),"transformMatrix"in i||(i.left-=n.width?n.width/2:0,i.top-=n.height?n.height/2:0);var s=new t.Ellipse(r(i,n));return s.cx=parseFloat(e.getAttribute("cx"))||0,s.cy=parseFloat(e.getAttribute("cy"))||0,s},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(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}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx?Math.min(this.rx,this.width/2):0,n=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0,f=.4477152502;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.bezierCurveTo(s+r-f*t,o,s+r,o+f*n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.bezierCurveTo(s+r,o+i-f*n,s+r-f*t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.bezierCurveTo(s+f*t,o+i,s,o+i-f*n,s,o+i-n),e.lineTo(s,o+n),a&&e.bezierCurveTo(s,o+f*n,s+f*t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},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",points:null,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(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.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'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});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(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var f=0,l,c=this.path.length;fv)for(var g=1,y=l.length;g"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(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;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),e&&(this._objects.push(e),e.group=this),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!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},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e){if(!this.visible)return;e.save(),this.clipTo&&t.util.clipContext(this,e);for(var n=0,r=this._objects.length;n'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())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._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&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),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0: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){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height 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,fabric.Image.pngCompression=1}(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.set("active",!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||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||0},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._setupFillRule(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._restoreFillRule(e),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_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(" ")},render:function(e,t){if(!this.visible)return;e.save(),this._transform(e,t);var n=this.transformMatrix,r=this.group&&this.group.type==="path-group";r&&e.translate(-this.group.width/2,-this.group.height/2),n&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),r&&e.translate(this.left,this.top),this._render(e),e.restore()},toObject:function(e){var t=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,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var 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;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_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 this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),t.Text.DEFAULT_SVG_FONT_SIZE=16,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),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE),n.originX||(n.originX="left");var i=new t.Text(e.textContent,n),s=0;return i.originX==="left"&&(s=i.getWidth()/2),i.originX==="right"&&(s=-i.getWidth()/2),i.set({left:i.getLeft()+s,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.__lastSelected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?to?0:1,f=r+a;return this.flipX&&(f=i-f),f>this.text.length&&(f=this.text.length),s===i&&f--,f}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(e){var t=this.getSelectedText(),n=this._getClipboardData(e);n&&n.setData("text",t),this.copiedText=t,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(e){var t=null,n=this._getClipboardData(e);n?t=n.getData("text"):t=this.copiedText,t&&this.insertChars(t)},cut:function(e){if(this.selectionStart===this.selectionEnd)return;this.copy(),this.removeChars(e)},_getClipboardData:function(e){return e&&(e.clipboardData||fabric.window.clipboardData)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode in this._keysMap)return;this.insertChars(String.fromCharCode(e.which)),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,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)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},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,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},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 +/* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` *//*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.4.10"};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",fabric.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"],fabric.DPI=96,function(){function e(e,t){if(!this.__eventListeners[e])return;t?fabric.util.removeFromArray(this.__eventListeners[e],t):this.__eventListeners[e].length=0}function t(e,t){this.__eventListeners||(this.__eventListeners={});if(arguments.length===1)for(var n in e)this.on(n,e[n]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(t);return this}function n(t,n){if(!this.__eventListeners)return;if(arguments.length===0)this.__eventListeners={};else if(arguments.length===1&&typeof arguments[0]=="object")for(var r in t)e.call(this,r,t[r]);else e.call(this,t,n);return this}function r(e,t){if(!this.__eventListeners)return;var n=this.__eventListeners[e];if(!n)return;for(var r=0,i=n.length;r-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)}},function(e){var t=Math.sqrt,n=Math.atan2,r=Math.PI/180;fabric.util={removeFromArray:function(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e},getRandomInt:function(e,t){return Math.floor(Math.random()*(t-e+1))+e},degreesToRadians:function(e){return e*r},radiansToDegrees:function(e){return e/r},rotatePoint:function(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)},transformPoint:function(e,t,n){return n?new fabric.Point(t[0]*e.x+t[1]*e.y,t[2]*e.x+t[3]*e.y):new fabric.Point(t[0]*e.x+t[1]*e.y+t[4],t[2]*e.x+t[3]*e.y+t[5])},invertTransform:function(e){var t=e.slice(),n=1/(e[0]*e[3]-e[1]*e[2]);t=[n*e[3],-n*e[1],-n*e[2],n*e[0],0,0];var r=fabric.util.transformPoint({x:e[4],y:e[5]},t);return t[4]=-r.x,t[5]=-r.y,t},toFixed:function(e,t){return parseFloat(Number(e).toFixed(t))},parseUnit:function(e){var t=/\D{0,2}$/.exec(e),n=parseFloat(e);switch(t[0]){case"mm":return n*fabric.DPI/25.4;case"cm":return n*fabric.DPI/2.54;case"in":return n*fabric.DPI;case"pt":return n*fabric.DPI/72;case"pc":return n*fabric.DPI/72*12;default:return n}},falseFunction:function(){return!1},getKlass:function(e,t){return e=fabric.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),fabric.util.resolveNamespace(t)[e]},resolveNamespace:function(t){if(!t)return fabric;var n=t.split("."),r=n.length,i=e||fabric.window;for(var s=0;sr)r+=u[p++%h],r>l&&(r=l),e[d?"lineTo":"moveTo"](r,0),d=!d;e.restore()},createCanvasElement:function(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e},createImage:function(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")},createAccessors:function(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))}},clipContext:function(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()},multiplyTransformMatrices:function(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]},getFunctionBody:function(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]},normalizePoints:function(e,t){var n=fabric.util.array.min(e,"x"),r=fabric.util.array.min(e,"y");n=n<0?n:0,r=n<0?r:0;for(var i=0,s=e.length;i0&&(t>r?t-=r:t=0,n>r?n-=r:n=0);var i=!0,s=e.getImageData(t,n,r*2||1,r*2||1);for(var o=3,u=s.data.length;o0&&f===0&&(E-=2*Math.PI);var S=Math.ceil(Math.abs(E/(Math.PI*.5+.001))),x=[];for(var T=0;T1&&(h=Math.sqrt(h),t*=h,n*=h);var p=f/t,d=a/t,v=-a/n,m=f/n;return{x0:p*r+d*i,y0:v*r+m*i,x1:p*s+d*o,y1:v*s+m*o,sinTh:a,cosTh:f}}function o(e,i,s,o,u,a,f,l){r=n.call(arguments);if(t[r])return t[r];var c=Math.sin(s),h=Math.cos(s),p=Math.sin(o),d=Math.cos(o),v=l*u,m=-f*a,g=f*u,y=l*a,b=.25*(o-s),w=8/3*Math.sin(b)*Math.sin(b)/Math.sin(b*2),E=e+h-w*c,S=i+c+w*h,x=e+d,T=i+p,N=x+w*p,C=T-w*d;return t[r]=[v*E+m*S,g*E+y*S,v*N+m*C,g*N+y*C,v*x+m*T,g*x+y*T],t[r]}var e={},t={},n=Array.prototype.join,r;fabric.util.drawArc=function(e,t,n,r){var s=r[0],u=r[1],a=r[2],f=r[3],l=r[4],c=r[5],h=r[6],p=i(c,h,s,u,f,l,a,t,n);for(var d=0;d=t})}function r(e,t){return i(e,t,function(e,t){return e>>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 t(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&&(" "+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,t){var n,r,i=0,s=0,o=fabric.document.documentElement,u=fabric.document.body||{scrollLeft:0,scrollTop:0};r=e;while(e&&e.parentNode&&!n)e=e.parentNode,e!==fabric.document&&fabric.util.getElementStyle(e,"position")==="fixed"&&(n=e),e!==fabric.document&&r!==t&&fabric.util.getElementStyle(e,"position")==="absolute"?(i=0,s=0):e===fabric.document?(i=u.scrollLeft||o.scrollLeft||0,s=u.scrollTop||o.scrollTop||0):(i+=e.scrollLeft||0,s+=e.scrollTop||0);return{left:i,top:s}}function f(e){var t,n=e&&e.ownerDocument,r={left:0,top:0},i={left:0,top:0},s,o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return{left:0,top:0};for(var u in o)i[o[u]]+=parseInt(l(e,u),10)||0;return t=n.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),s=fabric.util.getScrollLeftTop(e,null),{left:r.left+s.left-(t.clientLeft||0)+i.left,top:r.top+s.top-(t.clientTop||0)+i.top}}var e=Array.prototype.slice,n,r=function(t){return e.call(t,0)};try{n=r(fabric.document.childNodes)instanceof Array}catch(i){}n||(r=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var l;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?l=function(e,t){return fabric.document.defaultView.getComputedStyle(e,null)[t]}:l=function(e,t){var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n},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.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=r,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getScrollLeftTop=a,fabric.util.getElementOffset=f,fabric.util.getElementStyle=l}(),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}(),fabric.log=function(){},fabric.warn=function(){},typeof console!="undefined"&&["log","warn"].forEach(function(e){typeof console[e]!="undefined"&&console[e].apply&&(fabric[e]=function(){return console[e].apply(console,arguments)})}),function(){function e(e){n(function(t){e||(e={});var r=t||+(new Date),i=e.duration||500,s=r+i,o,u=e.onChange||function(){},a=e.abort||function(){return!1},f=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},l="startValue"in e?e.startValue:0,c="endValue"in e?e.endValue:100,h=e.byValue||c-l;e.onStart&&e.onStart(),function p(t){o=t||+(new Date);var c=o>s?i:o-r;if(a()){e.onComplete&&e.onComplete();return}u(f(c,l,h,i));if(o>s){e.onComplete&&e.onComplete();return}n(p)}(r)})}function n(){return t.apply(fabric.window,arguments)}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return et[3]?t[3]:t[0];if(t[0]===1&&t[3]===1&&t[4]===0&&t[5]===0)return;var n=e.ownerDocument.createElement("g");while(e.firstChild!=null)n.appendChild(e.firstChild);n.setAttribute("transform","matrix("+t[0]+" "+t[1]+" "+t[2]+" "+t[3]+" "+t[4]+" "+t[5]+")"),e.appendChild(n)}function x(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 T(e,t,n){t[n]&&t[n].toSVG&&e.push('','')}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.parseUnit,u=t.util.multiplyTransformMatrices,a={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"originX"},f={stroke:"strokeOpacity",fill:"fillOpacity"};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 n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(u){var l=(new RegExp(v)).exec(u).filter(function(e){return e!==""&&e!=null}),c=l[1],h=l.slice(2).map(parseFloat);switch(c){case"translate":s(a,h);break;case"rotate":h[0]=t.util.degreesToRadians(h[0]),e(a,h);break;case"scale":n(a,h);break;case"skewX":r(a,h);break;case"skewY":i(a,h);break;case"matrix":a=h}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),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*\\.\\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;w(n);var f=n.getAttribute("viewBox"),l=parseFloat(n.getAttribute("width")),c=parseFloat(n.getAttribute("height")),h,p;if(f&&(f=f.match(r))){var d=parseFloat(f[1]),v=parseFloat(f[2]),m=1,g=1;h=parseFloat(f[3]),p=parseFloat(f[4]),l&&l!==h&&(m=l/h),c&&c!==p&&(g=c/p),E(n,[m,0,0,g,-d,-v])}var y=t.util.toArray(n.getElementsByTagName("*"));if(y.length===0&&t.isLikelyNode){y=n.selectNodes('//*[name(.)!="svg"]');var b=[];for(var S=0,x=y.length;S/i,"")));if(!s||!s.documentElement)return;t.parseSVGDocument(s.documentElement +,function(r,i){S.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),S.has(e,function(r){r?S.get(e,function(e){var t=x(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})},loadSVGFromString:function(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)},createSVGFontFacesMarkup:function(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t},createSVGRefElementsMarkup:function(e){var t=[];return T(t,e,"backgroundColor"),T(t,e,"overlayColor"),t.join("")}})}(typeof exports!="undefined"?exports:this),fabric.ElementsParser=function(e,t,n,r){this.elements=e,this.callback=t,this.options=n,this.reviver=r},fabric.ElementsParser.prototype.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},fabric.ElementsParser.prototype.createObjects=function(){for(var e=0,t=this.elements.length;ee.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){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={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}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,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,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;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])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}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]);if(e==="transparent"){this.setSource([255,255,255,0]);return}t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(r=["']);for(var i=0;i');return r.push(this.type==="linear"?"":""),r.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;if(!t)return"";if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:[1,0,0,1,0,0],onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),this._setImageSmoothing(),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),t.overlayColor&&this.setOverlayColor(t.overlayColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return this.__setBgOverlayImage("overlayImage",e,t,n)},setBackgroundImage:function(e,t,n){return this.__setBgOverlayImage("backgroundImage",e,t,n)},setOverlayColor:function(e,t){return this.__setBgOverlayColor("overlayColor",e,t)},setBackgroundColor:function(e,t){return this.__setBgOverlayColor("backgroundColor",e,t)},_setImageSmoothing:function(){var e=this.getContext();e.imageSmoothingEnabled=this.imageSmoothingEnabled,e.webkitImageSmoothingEnabled=this.imageSmoothingEnabled,e.mozImageSmoothingEnabled=this.imageSmoothingEnabled,e.msImageSmoothingEnabled=this.imageSmoothingEnabled,e.oImageSmoothingEnabled=this.imageSmoothingEnabled},__setBgOverlayImage:function(e,t,n,r){return typeof t=="string"?fabric.util.loadImage(t,function(t){this[e]=new fabric.Image(t,r),n&&n()},this):(this[e]=t,n&&n()),this},__setBgOverlayColor:function(e,t,n){if(t&&t.source){var r=this;fabric.util.loadImage(t.source,function(i){r[e]=new fabric.Pattern({source:i,repeat:t.repeat,offsetX:t.offsetX,offsetY:t.offsetY}),n&&n()})}else this[e]=t,n&&n();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw r;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw r},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=this.width||parseInt(this.lowerCanvasEl.width,10)||0,this.height=this.height||parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.width=this.width,this.lowerCanvasEl.height=this.height,this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice()},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e,t){return this.setDimensions({width:e},t)},setHeight:function(e,t){return this.setDimensions({height:e},t)},setDimensions:function(e,t){var n;t=t||{};for(var r in e)n=e[r],t.cssOnly||(this._setBackstoreDimension(r,e[r]),n+="px"),t.backstoreOnly||this._setCssDimension(r,n);return t.cssOnly||this.renderAll(),this.calcOffset(),this},_setBackstoreDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.upperCanvasEl&&(this.upperCanvasEl[e]=t),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this[e]=t,this},_setCssDimension:function(e,t){return this.lowerCanvasEl.style[e]=t,this.upperCanvasEl&&(this.upperCanvasEl.style[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t),this},getZoom:function(){return Math.sqrt(this.viewportTransform[0]*this.viewportTransform[3])},setViewportTransform:function(e){this.viewportTransform=e,this.renderAll();for(var t=0,n=this._objects.length;t"),n.join("")},_setSVGPreamble:function(e,t){t.suppressPreamble||e.push('','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"):this[t]&&t==="overlayColor"&&e.push('")},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i=this._findNewLowerIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewLowerIndex:function(e,t,n){var r;if(n){r=t;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}}}else r=t-1;return r},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i=this._findNewUpperIndex(e,r,t);n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},_findNewUpperIndex:function(e,t,n){var r;if(n){r=t;for(var i=t+1;i"}}),e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles +(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop,t=this.canvas.viewportTransform,n=this._points[0],r=this._points[1];e.save(),e.transform(t[0],t[1],t[2],t[3],t[4],t[5]),e.beginPath(),this._points.length===2&&n.x===r.x&&n.y===r.y&&(n.x-=.5,r.x+=.5),e.moveTo(n.x,n.y);for(var i=1,s=this._points.length;in.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform;if(i.target.get("lockRotation"))return;var s=r(i.ey-i.top,i.ex-i.left),o=r(t-i.top,e-i.left),u=n(o-s+i.theta);u<0&&(u=360+u),i.target.angle=u},setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,o=i(n),u=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),o,u),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+s-(n>0?0:o),f=t.ey+s-(r>0?0:u);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+o,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+u-1,a+o,f+u-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+u,this.selectionDashArray),fabric.util.drawDashedLine(e,a+o-1,f,a+o-1,f+u,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+s-(n>0?0:o),t.ey+s-(r>0?0:u),o,u)},_isLastRenderedObject:function(e){return this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(this.getPointer(e,!0))},findTarget:function(e,t){if(this.skipTargetFind)return;if(this._isLastRenderedObject(e))return this.lastRenderedObjectWithControlsAboveOverlay;var n=this.getActiveGroup();if(n&&!t&&this.containsPoint(e,n))return n;var r=this._searchPossibleTargets(e);return this._fireOverOutEvents(r),r},_fireOverOutEvents:function(e){e?this._hoveredTarget!==e&&(this.fire("mouse:over",{target:e}),e.fire("mouseover"),this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout")),this._hoveredTarget=e):this._hoveredTarget&&(this.fire("mouse:out",{target:this._hoveredTarget}),this._hoveredTarget.fire("mouseout"),this._hoveredTarget=null)},_checkTarget:function(e,t,n){if(t&&t.visible&&t.evented&&this.containsPoint(e,t)){if(!this.perPixelTargetFind&&!t.perPixelTargetFind||!!t.isEditing)return!0;var r=this.isTargetTransparent(t,n.x,n.y);if(!r)return!0}},_searchPossibleTargets:function(e){var t,n=this.getPointer(e,!0),r=this._objects.length;while(r--)if(this._checkTarget(e,this._objects[r],n)){this.relatedTarget=this._objects[r],t=this._objects[r];break}return t},getPointer:function(t,n,r){r||(r=this.upperCanvasEl);var i=e(t,r),s=r.getBoundingClientRect(),o;return this.calcOffset(),i.x=i.x-this._offset.left,i.y=i.y-this._offset.top,n||(i=fabric.util.transformPoint(i,fabric.util.invertTransform(this.viewportTransform))),s.width===0||s.height===0?o={width:1,height:1}:o={width:r.width/s.width,height:r.height/s.height},{x:i.x*o.width,y:i.y*o.height}},_createUpperCanvas:function(){var e=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,"");this.upperCanvasEl=this._createCanvasElement(),fabric.util.addClass(this.upperCanvasEl,"upper-canvas "+e),this.wrapperEl.appendChild(this.upperCanvasEl),this._copyCanvasStyle(this.lowerCanvasEl,this.upperCanvasEl),this._applyCanvasStyle(this.upperCanvasEl),this.contextTop=this.upperCanvasEl.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=fabric.util.wrapElement(this.lowerCanvasEl,"div",{"class":this.containerClass}),fabric.util.setStyle(this.wrapperEl,{width:this.getWidth()+"px",height:this.getHeight()+"px",position:"relative"}),fabric.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(e){var t=this.getWidth()||e.width,n=this.getHeight()||e.height;fabric.util.setStyle(e,{position:"absolute",width:t+"px",height:n+"px",left:0,top:0}),e.width=t,e.height=n,fabric.util.makeElementUnselectable(e)},_copyCanvasStyle:function(e,t){t.style.cssText=e.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},_setActiveObject:function(e){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=e,e.set("active",!0)},setActiveObject:function(e,t){return this._setActiveObject(e),this.renderAll(),this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t}),this},getActiveObject:function(){return this._activeObject},_discardActiveObject:function(){this._activeObject&&this._activeObject.set("active",!1),this._activeObject=null},discardActiveObject:function(e){return this._discardActiveObject(),this.renderAll(),this.fire("selection:cleared",{e:e}),this},_setActiveGroup:function(e){this._activeGroup=e,e&&e.set("active",!0)},setActiveGroup:function(e,t){return this._setActiveGroup(e),e&&(this.fire("object:selected",{target:e,e:t}),e.fire("selected",{e:t})),this},getActiveGroup:function(){return this._activeGroup},_discardActiveGroup:function(){var e=this.getActiveGroup();e&&e.destroy(),this.setActiveGroup(null)},discardActiveGroup:function(e){return this._discardActiveGroup(),this.fire("selection:cleared",{e:e}),this},deactivateAll:function(){var e=this.getObjects(),t=0,n=e.length;for(;t1&&(t=new fabric.Group(t.reverse(),{originX:"center",originY:"center",canvas:this}),t.addWithUpdate(),this.setActiveGroup(t,e),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},_collectObjects:function(){var n=[],r,i=this._groupSelector.ex,s=this._groupSelector.ey,o=i+this._groupSelector.left,u=s+this._groupSelector.top,a=new fabric.Point(e(i,o),e(s,u)),f=new fabric.Point(t(i,o),t(s,u)),l=i===o&&s===u;for(var c=this._objects.length;c--;){r=this._objects[c];if(!r||!r.selectable||!r.visible)continue;if(r.intersectsWithRect(a,f)||r.isContainedWithinRect(a,f)||r.containsPoint(a)||r.containsPoint(f)){r.set("active",!0),n.push(r);if(l)break}}return n},_maybeGroupObjects:function(e){this.selection&&this._groupSelector&&this._groupSelectedObjects(e);var t=this.getActiveGroup();t&&(t.setObjectsCoords().setCoords(),t.isMoving=!1,this.setCursor(this.defaultCursor)),this._groupSelector=null,this._currentTransform=null}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{toDataURL:function(e){e||(e={});var t=e.format||"png",n=e.quality||1,r=e.multiplier||1,i={left:e.left,top:e.top,width:e.width,height:e.height};return r!==1?this.__toDataURLWithMultiplier(t,n,i,r):this.__toDataURL(t,n,i)},__toDataURL:function(e,t,n){this.renderAll(!0);var r=this.upperCanvasEl||this.lowerCanvasEl,i=this.__getCroppedCanvas(r,n);e==="jpg"&&(e="jpeg");var s=fabric.StaticCanvas.supports("toDataURLWithQuality")?(i||r).toDataURL("image/"+e,t):(i||r).toDataURL("image/"+e);return this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),i&&(i=null),s},__getCroppedCanvas:function(e,t){var n,r,i="left"in t||"top"in t||"width"in t||"height"in t;return i&&(n=fabric.util.createCanvasElement(),r=n.getContext("2d"),n.width=t.width||this.width,n.height=t.height||this.height,r.drawImage(e,-t.left||0,-t.top||0)),n},__toDataURLWithMultiplier:function(e,t,n,r){var i=this.getWidth(),s=this.getHeight(),o=i*r,u=s*r,a=this.getActiveObject(),f=this.getActiveGroup(),l=this.contextTop||this.contextContainer;r>1&&this.setWidth(o).setHeight(u),l.scale(r,r),n.left&&(n.left*=r),n.top&&(n.top*=r),n.width?n.width*=r:r<1&&(n.width=o),n.height?n.height*=r:r<1&&(n.height=u),f?this._tempRemoveBordersControlsFromGroup(f):a&&this.deactivateAll&&this.deactivateAll(),this.renderAll(!0);var c=this.__toDataURL(e,t,n);return this.width=i,this.height=s,l.scale(1/r,1/r),this.setWidth(i).setHeight(s),f?this._restoreBordersControlsOnGroup(f):a&&this.setActiveObject&&this.setActiveObject(a),this.contextTop&&this.clearContext(this.contextTop),this.renderAll(),c},toDataURLWithMultiplier:function(e,t,n){return this.toDataURL({format:e,multiplier:t,quality:n})},_tempRemoveBordersControlsFromGroup:function(e){e.origHasControls=e.hasControls,e.origBorderColor=e.borderColor,e.hasControls=!0,e.borderColor="rgba(0,0,0,0)",e.forEachObject(function(e){e.origBorderColor=e.borderColor,e.borderColor="rgba(0,0,0,0)"})},_restoreBordersControlsOnGroup:function(e){e.hideControls=e.origHideControls,e.borderColor=e.origBorderColor,e.forEachObject(function(e){e.borderColor=e.origBorderColor,delete e.origBorderColor})}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t,n){return this.loadFromJSON(e,t,n)},loadFromJSON:function(e,t,n){if(!e)return;var r=typeof e=="string"?JSON.parse(e):e;this.clear();var i=this;return this._enlivenObjects(r.objects,function(){i._setBgOverlay(r,t)},n),this},_setBgOverlay:function(e +,t){var n=this,r={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!e.backgroundImage&&!e.overlayImage&&!e.background&&!e.overlay){t&&t();return}var i=function(){r.backgroundImage&&r.overlayImage&&r.backgroundColor&&r.overlayColor&&(n.renderAll(),t&&t())};this.__setBgOverlay("backgroundImage",e.backgroundImage,r,i),this.__setBgOverlay("overlayImage",e.overlayImage,r,i),this.__setBgOverlay("backgroundColor",e.background,r,i),this.__setBgOverlay("overlayColor",e.overlay,r,i),i()},__setBgOverlay:function(e,t,n,r){var i=this;if(!t){n[e]=!0;return}e==="backgroundImage"||e==="overlayImage"?fabric.Image.fromObject(t,function(t){i[e]=t,n[e]=!0,r&&r()}):this["set"+fabric.util.string.capitalize(e,!0)](t,function(){n[e]=!0,r&&r()})},_enlivenObjects:function(e,t,n){var r=this;if(!e||e.length===0){t&&t();return}var i=this.renderOnAddRemove;this.renderOnAddRemove=!1,fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){r.insertAt(e,t,!0)}),r.renderOnAddRemove=i,t&&t()},null,n)},_toDataURL:function(e,t){this.clone(function(n){t(n.toDataURL(e))})},_toDataURLWithMultiplier:function(e,t,n){this.clone(function(r){n(r.toDataURLWithMultiplier(e,t))})},clone:function(e,t){var n=JSON.stringify(this.toJSON(t));this.cloneWithoutData(function(t){t.loadFromJSON(n,function(){e&&e(t)})})},cloneWithoutData:function(e){var t=fabric.document.createElement("canvas");t.width=this.getWidth(),t.height=this.getHeight();var n=new fabric.Canvas(t);n.clipTo=this.clipTo,this.backgroundImage?(n.setBackgroundImage(this.backgroundImage.src,function(){n.renderAll(),e&&e(n)}),n.backgroundImageOpacity=this.backgroundImageOpacity,n.backgroundImageStretch=this.backgroundImageStretch):e&&e(n)}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.toFixed,i=t.util.string.capitalize,s=t.util.degreesToRadians,o=t.StaticCanvas.supports("setLineDash");if(t.Object)return;t.Object=t.util.createClass({type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,hoverCursor:null,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"source-over",backgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:10,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,hasRotatingPoint:!0,rotatingPointOffset:40,perPixelTargetFind:!1,includeDefaultValues:!0,clipTo:null,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockUniScaling:!1,stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeLineJoin strokeMiterLimit angle opacity fill fillRule shadow clipTo visible backgroundColor".split(" "),initialize:function(e){e&&this.setOptions(e)},_initGradient:function(e){e.fill&&e.fill.colorStops&&!(e.fill instanceof t.Gradient)&&this.set("fill",new t.Gradient(e.fill))},_initPattern:function(e){e.fill&&e.fill.source&&!(e.fill instanceof t.Pattern)&&this.set("fill",new t.Pattern(e.fill)),e.stroke&&e.stroke.source&&!(e.stroke instanceof t.Pattern)&&this.set("stroke",new t.Pattern(e.stroke))},_initClipping:function(e){if(!e.clipTo||typeof e.clipTo!="string")return;var n=t.util.getFunctionBody(e.clipTo);typeof n!="undefined"&&(this.clipTo=new Function("ctx",n))},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initClipping(e)},transform:function(e,t){this.group&&this.group.transform(e,t),e.globalAlpha=this.opacity;var n=t?this._getLeftTopCoords():this.getCenterPoint();e.translate(n.x,n.y),e.rotate(s(this.angle)),e.scale(this.scaleX*(this.flipX?-1:1),this.scaleY*(this.flipY?-1:1))},toObject:function(e){var n=t.Object.NUM_FRACTION_DIGITS,i={type:this.type,originX:this.originX,originY:this.originY,left:r(this.left,n),top:r(this.top,n),width:r(this.width,n),height:r(this.height,n),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:r(this.strokeWidth,n),strokeDashArray:this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeLineJoin:this.strokeLineJoin,strokeMiterLimit:r(this.strokeMiterLimit,n),scaleX:r(this.scaleX,n),scaleY:r(this.scaleY,n),angle:r(this.getAngle(),n),flipX:this.flipX,flipY:this.flipY,opacity:r(this.opacity,n),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,clipTo:this.clipTo&&String(this.clipTo),backgroundColor:this.backgroundColor};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},_removeDefaultValues:function(e){var n=t.util.getKlass(e.type).prototype,r=n.stateProperties;return r.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},_setObject:function(e){for(var t in e)this._set(t,e[t])},set:function(e,t){return typeof e=="object"?this._setObject(e):typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t),this},_set:function(e,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,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},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:[1,0,0,1,0,0]},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save(),this._setupFillRule(e),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;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._restoreFillRule(e),e.restore()},_transform:function(e,t){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)},_setStrokeStyles:function(e){this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_renderControls:function(e,n){var r=this.getViewportTransform();e.save();if(this.active&&!n){var i;this.group&&(i=t.util.transformPoint(this.group.getCenterPoint(),r),e.translate(i.x,i.y),e.rotate(s(this.group.angle))),i=t.util.transformPoint(this.getCenterPoint(),r,null!=this.group),this.group&&(i.x*=this.group.scaleX,i.y*=this.group.scaleY),e.translate(i.x,i.y),e.rotate(s(this.angle)),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){if(!this.shadow)return;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),this.fillRule==="destination-over"?e.fill("evenodd"):e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke||this.strokeWidth===0)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center");var o=this.canvas;i.add(this);var u=i.toDataURL(e);return this.set(s).setCoords(),this.canvas=o,i.dispose(),i=null,u},isType:function(e){return this.type===e},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()})}return this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",e?new t.Shadow(e):null)},setColor:function(e){return this.set("fill",e),this},setAngle:function(e){var t=(this.originX!=="center"||this.originY!=="center")&&this.centeredRotation;return t&&this._setOriginToCenter(),this.set("angle",e),t&&this._resetOrigin(),this},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.canvas.centerObject(this),this},remove:function(){return this.canvas.remove(this),this},getLocalPointer:function(e,t){t=t||this.canvas.getPointer(e);var n=this.translateToOriginPoint(this.getCenterPoint(),"left","top");return{x:t.x-n.x,y:t.y-n.y}},_setupFillRule:function(e){this.fillRule&&(this._prevFillRule=e.globalCompositeOperation,e.globalCompositeOperation=this.fillRule)},_restoreFillRule:function(e){this.fillRule&&this._prevFillRule&&(e.globalCompositeOperation=this._prevFillRule)}}),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,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x+(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+o*this.scaleY)/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,o=this.stroke?this.strokeWidth:0;return n==="left"?i=t.x-(this.getWidth()+o*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+o*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+o*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+o*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s=this.stroke?this.strokeWidth:0,o,u;return n&&r?(n==="left"?o=i.x-(this.getWidth()+s*this.scaleX)/2:n==="right"?o=i.x+(this.getWidth()+s*this.scaleX)/2:o=i.x,r==="top"?u=i.y-(this.getHeight()+s*this.scaleY)/2:r==="bottom"?u=i.y+(this.getHeight()+s*this.scaleY)/2:u=i.y):(o=this.left,u=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(o,u))},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},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var e=this.getCenterPoint();this.originX="center",this.originY="center",this.left=e.x,this.top=e.y},_resetOrigin:function(){var e=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=e.x,this.top=e.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,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){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>=e.x&&n.left+n.width<=t.x&&n.top>=e.y&&n.top+n.height<=t.y},containsPoint:function(e){var t=this._getImageLines(this.oCoords),n=this._findCrossPoints(e,t);return n!==0&&n%2===1},_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}}},_findCrossPoints:function(e,t){var n,r,i,s,o,u,a=0,f;for(var l in t){f=t[l];if(f.o.y=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=e(this.angle),r=this.getViewportTransform(),i=function(e){return fabric.util.transformPoint(e,r)},s=this.width,o=this.height,u=this.strokeLineCap==="round"||this.strokeLineCap==="square",a=this.type==="line"&&this.width===1,f=this.type==="line"&&this.height===1,l=u&&f||this.type!=="line",c=u&&a||this.type!=="line";a?s=t:f&&(o=t),l&&(s+=t),c&&(o+=t),this.currentWidth=s*this.scaleX,this.currentHeight=o*this.scaleY,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var h=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),p=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),d=Math.cos(p+n)*h,v=Math.sin(p+n)*h,m=Math.sin(n),g=Math.cos(n),y=this.getCenterPoint(),b=new fabric.Point(this.currentWidth,this.currentHeight),w=new fabric.Point(y.x-d,y.y-v),E=new fabric.Point(w.x+b.x*g,w.y+b.x*m),S=new fabric.Point(w.x-b.y*m,w.y+b.y*g),x=new fabric.Point(w.x+b.x/2*g,w.y+b.x/2*m),T=i(w),N=i(E),C=i(new fabric.Point(E.x-b.y*m,E.y+b.y*g)),k=i(S),L=i(new fabric.Point(w.x-b.y/2*m,w.y+b.y/2*g)),A=i(x),O=i(new fabric.Point(E.x-b.y/2*m,E.y+b.y/2*g)),M=i(new fabric.Point(S.x+b.x/2*g,S.y+b.x/2*m)),_=i(new fabric.Point(x.x,x.y)),D=Math.cos(p+n)*this.padding*Math.sqrt(2),P=Math.sin(p+n)*this.padding*Math.sqrt(2);return T=T.add(new fabric.Point(-D,-P)),N=N.add(new fabric.Point(P,-D)),C=C.add(new fabric.Point(D,P)),k=k.add(new fabric.Point(-P,D)),L=L.add(new fabric.Point((-D-P)/2,(-P+D)/2)),A=A.add(new fabric.Point((P-D)/2,-(P+D)/2)),O=O.add(new fabric.Point((P+D)/2,(P-D)/2)),M=M.add(new fabric.Point((D-P)/2,(D+P)/2)),_=_.add(new fabric.Point((P-D)/2,-(P+D)/2)),this.oCoords={tl:T,tr:N,br:C,bl:k,ml:L,mt:A,mr:O,mb:M,mtr:_},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{sendToBack:function(){return this.group?fabric.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?fabric.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?fabric.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?fabric.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?fabric.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),fabric.util.object.extend(fabric.Object.prototype,{getSvgStyles:function(){var e=this.fill?this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none",t=this.stroke?this.stroke.toLive?"url(#SVGID_"+this.stroke.id+")":this.stroke:"none",n=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"",i=this.strokeLineCap?this.strokeLineCap:"butt",s=this.strokeLineJoin?this.strokeLineJoin:"miter",o=this.strokeMiterLimit?this.strokeMiterLimit:"4",u=typeof this.opacity!="undefined"?this.opacity:"1",a=this.visible?"":" visibility: hidden;",f=this.shadow&&this.type!=="text"?"filter: url(#SVGID_"+this.shadow.id+");":"";return["stroke: ",t,"; ","stroke-width: ",n,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",i,"; ","stroke-linejoin: ",s,"; ","stroke-miterlimit: ",o,"; ","fill: ",e,"; ","opacity: ",u,";",f,a].join("")},getSvgTransform:function(){var e=fabric.util.toFixed,t=this.getAngle(),n=this.getViewportTransform(),r=fabric.util.transformPoint(this.getCenterPoint(),n),i=fabric.Object.NUM_FRACTION_DIGITS,s="translate("+e(r.x,i)+" "+e(r.y,i)+")",o=t!==0?" rotate("+e(t,i)+")":"",u=this.scaleX===1&&this.scaleY===1&&n[0]===1&&n[3]===1?"":" scale("+e(this.scaleX*n[0],i)+" "+e(this.scaleY*n[3],i)+")",a=this.flipX?"matrix(-1 0 0 1 0 0) ":"",f=this.flipY?"matrix(1 0 0 -1 0 0)":"";return[s,o,u,a,f].join("")},_createBaseSVGMarkup: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)),this.shadow&&e.push(this.shadow.toSVG(this)),e}}),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this.get(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(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.degreesToRadians,t=function(){return typeof G_vmlCanvasManager!="undefined"};fabric.util.object.extend(fabric.Object.prototype,{_controlsVisibility:null,_findTargetCorner:function(e){if(!this.hasControls||!this.active)return!1;var t=e.x,n=e.y,r,i;for(var s in this.oCoords){if(!this.isControlVisible(s))continue;if(s==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||s!=="mt"&&s!=="mr"&&s!=="mb"&&s!=="ml"))continue;i=this._getImageLines(this.oCoords[s].corner),r=this._findCrossPoints({x:t,y:n},i);if(r!==0&&r%2===1)return this.__corner=s,s}return!1},_setCornerCoords:function(){var t=this.oCoords,n=e(this.angle),r=e(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);t.tl.corner={tl:{x:t.tl.x-o,y:t.tl.y-s},tr:{x:t.tl.x+s,y:t.tl.y-o},bl:{x:t.tl.x-s,y:t.tl.y+o},br:{x:t.tl.x+o,y:t.tl.y+s}},t.tr.corner={tl:{x:t.tr.x-o,y:t.tr.y-s},tr:{x:t.tr.x+s,y:t.tr.y-o},br:{x:t.tr.x+o,y:t.tr.y+s},bl:{x:t.tr.x-s,y:t.tr.y+o}},t.bl.corner={tl:{x:t.bl.x-o,y:t.bl.y-s},bl:{x:t.bl.x-s,y:t.bl.y+o},br:{x:t.bl.x+o,y:t.bl.y+s},tr:{x:t.bl.x+s,y:t.bl.y-o}},t.br.corner={tr:{x:t.br.x+s,y:t.br.y-o},bl:{x:t.br.x-s,y:t.br.y+o},br:{x:t.br.x+o,y:t.br.y+s},tl:{x:t.br.x-o,y:t.br.y-s}},t.ml.corner={tl:{x:t.ml.x-o,y:t.ml.y-s},tr:{x:t.ml.x+s,y:t.ml.y-o},bl:{x:t.ml.x-s,y:t.ml.y+o},br:{x:t.ml.x+o,y:t.ml.y+s}},t.mt.corner={tl:{x:t.mt.x-o,y:t.mt.y-s},tr:{x:t.mt.x+s,y:t.mt.y-o},bl:{x:t.mt.x-s,y:t.mt.y+o},br:{x:t.mt.x+o,y:t.mt.y+s}},t.mr.corner={tl:{x:t.mr.x-o,y:t.mr.y-s},tr:{x:t.mr.x+s,y:t.mr.y-o},bl:{x:t.mr.x-s,y:t.mr.y+o},br:{x:t.mr.x+o,y:t.mr.y+s}},t.mb.corner={tl:{x:t.mb.x-o,y:t.mb.y-s},tr:{x:t.mb.x+s,y:t.mb.y-o},bl:{x:t.mb.x-s,y:t.mb.y+o},br:{x:t.mb.x+o,y:t.mb.y+s}},t.mtr.corner={tl:{x:t.mtr.x-o+u*this.rotatingPointOffset,y:t.mtr.y-s-a*this.rotatingPointOffset},tr:{x:t.mtr.x+s+u*this.rotatingPointOffset,y:t.mtr.y-o-a*this.rotatingPointOffset},bl:{x:t.mtr.x-s+u*this.rotatingPointOffset,y:t.mtr.y+o-a*this.rotatingPointOffset},br:{x:t.mtr.x+o+u*this.rotatingPointOffset,y:t.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.getViewportTransform();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;var o=this.getWidth(),u=this.getHeight(),a=this.strokeWidth>1?this.strokeWidth:0,f=this.strokeLineCap==="round"||this.strokeLineCap==="square",l=this.type==="line"&&this.width===1,c=this.type==="line"&&this.height===1,h=f&&c||this.type!=="line",p=f&&l||this.type!=="line";l?o=a/i:c&&(u=a/s),h&&(o+=a/i),p&&(u+=a/s);var d=fabric.util.transformPoint(new fabric.Point(o,u),r,!0),v=d.x,m=d.y;this.group&&(v*=this.group.scaleX,m*=this.group.scaleY),e.strokeRect(~~(-(v/2)-t)-.5,~~(-(m/2)-t)-.5,~~(v+n)+1,~~(m+n)+1);if(this.hasRotatingPoint&&this.isControlVisible("mtr")&&!this.get("lockRotation")&&this.hasControls){var g=(-m-t*2)/2;e.beginPath(),e.moveTo(0,g),e.lineTo(0,g-this.rotatingPointOffset),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.getViewportTransform(),i=this.strokeWidth>1?this.strokeWidth:0,s=this.width,o=this.height,u=this.strokeLineCap==="round"||this.strokeLineCap==="square",a=this.type==="line"&&this.width===1,f=this.type==="line"&&this.height===1,l=u&&f||this.type!=="line",c=u&&a||this.type!=="line";a?s=i:f&&(o=i),l&&(s+=i),c&&(o+=i),s*=this.scaleX,o*=this.scaleY;var h=fabric.util.transformPoint(new fabric.Point(s,o),r,!0),p=h.x,d=h.y,v=-(p/2),m=-(d/2),g=this.padding,y=n,b=n-t,w=this.transparentCorners?"strokeRect":"fillRect";return e.save(),e.lineWidth=1,e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,this._drawControl("tl",e,w,v-y-g,m-y-g),this._drawControl("tr",e,w,v+p-y+g,m-y-g),this._drawControl("bl",e,w,v-y-g,m+d+b+g),this._drawControl("br",e,w,v+p+b+g,m+d+b+g),this.get("lockUniScaling")||(this._drawControl("mt",e,w,v+p/2-y,m-y-g),this._drawControl("mb",e,w,v+p/2-y,m+d+b+g),this._drawControl("mr",e,w,v+p+b+g,m+d/2-y),this._drawControl("ml",e,w,v-y-g,m+d/2-y)),this.hasRotatingPoint&&this._drawControl("mtr",e,w,v+p/2-y,m-this.rotatingPointOffset-this.cornerSize/2-g),e.restore(),this},_drawControl:function(e,n,r,i,s){var o=this.cornerSize;this.isControlVisible(e)&&(t()||this.transparentCorners||n.clearRect(i,s,o,o),n[r](i,s,o,o))},isControlVisible:function(e){return this._getControlsVisibility()[e]},setControlVisible:function(e,t){return this._getControlsVisibility()[e]=t,this},setControlsVisibility:function(e){e||(e={});for(var t in e)this.setControlVisible(t,e[t]);return this},_getControlsVisibility:function(){return this._controlsVisibility||(this._controlsVisibility={tl:!0,tr:!0,br:!0,bl:!0,ml:!0,mt:!0,mr:!0,mb:!0,mtr:!0}),this._controlsVisibility}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".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",radius:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("radius",e.radius||0)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.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),this._renderFill(e),this.stroke&&this._renderStroke(e)},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=t.SHARED_ATTRIBUTES.concat("cx cy r".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=0),"top"in s||(s.top=0),"transformMatrix"in s||(s.left-=n.width?n.width/2:0,s.top-=n.height?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._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),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(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.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.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.save(),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top*this.rx/this.ry:0,this.rx,0,n,!1),e.restore(),this._renderFill(e),this._renderStroke(e)},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES);"left"in i||(i.left=0),"top"in i||(i.top=0),"transformMatrix"in i||(i.left-=n.width?n.width/2:0,i.top-=n.height?n.height/2:0);var s=new t.Ellipse(r(i,n));return s.cx=parseFloat(e.getAttribute("cx"))||0,s.cy=parseFloat(e.getAttribute("cy"))||0,s},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(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}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){if(this.width===1&&this.height===1){e.fillRect(0,0,1,1);return}var t=this.rx?Math.min(this.rx,this.width/2):0,n=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,i=this.height,s=-r/2,o=-i/2,u=this.group&&this.group.type==="path-group",a=t!==0||n!==0,f=.4477152502;e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y),e.moveTo(s+t,o),e.lineTo(s+r-t,o),a&&e.bezierCurveTo(s+r-f*t,o,s+r,o+f*n,s+r,o+n),e.lineTo(s+r,o+i-n),a&&e.bezierCurveTo(s+r,o+i-f*n,s+r-f*t,o+i,s+r-t,o+i),e.lineTo(s+t,o+i),a&&e.bezierCurveTo(s+f*t,o+i,s,o+i-f*n,s,o+i-n),e.lineTo(s,o+n),a&&e.bezierCurveTo(s,o+f*n,s+f*t,o,s+t,o),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},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",points:null,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(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.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'),e?e(n.join("")):n.join("")},_render:function(e){var t;e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=i(this.callSuper("toObject",e),{path:this.path.map(function(e){return e.slice()}),pathOffset:this.pathOffset});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(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],t=[],n,r,i=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/ig,s,o;for(var f=0,l,c=this.path.length;fv)for(var g=1,y=l.length;g"];for(var r=0,i=t.length;r"),e?e(n.join("")):n.join("")},toString:function(){return"#"},isSameColor:function(){var e=(this.getObjects()[0].get("fill")||"").toLowerCase();return this.getObjects().every(function(t){return(t.get("fill")||"").toLowerCase()===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(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;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(),this.saveCoords()},_updateObjectsCoords:function(){this.forEachObject(this._updateObjectCoords,this)},_updateObjectCoords:function(e){var t=e.getLeft(),n=e.getTop();e.set({originalLeft:t,originalTop:n,left:t-this.left,top:n-this.top}),e.setCoords(),e.__origHasControls=e.hasControls,e.hasControls=!1},toString:function(){return"#"},addWithUpdate:function(e){return this._restoreObjectsState(),e&&(this._objects.push(e),e.group=this),this.forEachObject(this._setObjectActive,this),this._calcBounds(),this._updateObjectsCoords(),this},_setObjectActive:function(e){e.set("active",!0),e.group=this},removeWithUpdate:function(e){return this._moveFlippedObject(e),this._restoreObjectsState(),this.forEachObject(this._setObjectActive,this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!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},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e){if(!this.visible)return;e.save(),this.clipTo&&t.util.clipContext(this,e);for(var n=0,r=this._objects.length;n'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.join("")},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','");if(this.stroke||this.strokeDashArray){var n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.join("")},getSrc:function(){if(this.getElement())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._originalElement)return;if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){this._element&&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),this._element&&this.crossOrigin&&(this._element.crossOrigin=this.crossOrigin)},_initFilters:function(e,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement()?this.getElement().width||0:0,this.height="height"in e?e.height:this.getElement()?this.getElement().height||0: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){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})},null,e.crossOrigin)},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))},null,n&&n.crossOrigin)},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height 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,fabric.Image.pngCompression=1}(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.set("active",!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||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||0},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;sa||C<0||C>u)continue;var k=(N*u+C)*4,L=t[x*i+T];b+=o[k]*L,w+=o[k+1]*L,E+=o[k+2]*L,S+=o[k+3]*L}h[y]=b,h[y+1]=w,h[y+2]=E,h[y+3]=S+p*(255-S)}n.putImageData(c,0,0)},toObject:function(){return n(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),t.Image.filters.Convolute.fromObject=function(e){return new t.Image.filters.Convolute(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.GradientTransparency=t.util.createClass(t.Image.filters.BaseFilter,{type:"GradientTransparency",initialize:function(e){e=e||{},this.threshold=e.threshold||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.threshold,s=r.length;for(var o=0,u=r.length;o-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_render:function(e){typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){var n=this.text.split(this._reNewline);this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),this._renderText(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_renderText:function(e,t){e.save(),this._setShadow(e),this._setupFillRule(e),this._renderTextFill(e,t),this._renderTextStroke(e,t),this._restoreFillRule(e),this._removeShadow(e),e.restore()},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize*this.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_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(" ")},render:function(e,t){if(!this.visible)return;e.save(),this._transform(e,t);var n=this.transformMatrix,r=this.group&&this.group.type==="path-group";r&&e.translate(-this.group.width/2,-this.group.height/2),n&&e.transform(n[0],n[1],n[2],n[3],n[4],n[5]),r&&e.translate(this.left,this.top),this._render(e),e.restore()},toObject:function(e){var t=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,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(this._reNewline),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._wrapSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var 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;return{textLeft:n,textTop:r,lineTop:t}},_wrapSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},_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 this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size text-decoration text-anchor".split(" ")),t.Text.DEFAULT_SVG_FONT_SIZE=16,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),"dx"in r&&(n.left+=r.dx),"dy"in r&&(n.top+=r.dy),"fontSize"in n||(n.fontSize=t.Text.DEFAULT_SVG_FONT_SIZE),n.originX||(n.originX="left");var i=new t.Text(e.textContent,n),s=0;return i.originX==="left"&&(s=i.getWidth()/2),i.originX==="right"&&(s=-i.getWidth()/2),i.set({left:i.getLeft()+s,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,caching:!0,_skipFillStrokeCheck:!0,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,_charWidthsCache:{},initialize:function(e,t){this.styles=t?t.styles||{}:{},this.callSuper("initialize",e,t),this.initBehavior(),fabric.IText.instances.push(this),this.__lineWidths={},this.__lineHeights={},this.__lineOffsets={}},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart!==e&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})),this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd!==e&&(this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})),this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(e,t){if(arguments.length===2){var n=[];for(var r=e;r=r.charIndex&&(a!==o||hs&&a-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0,this.fontSize/20),u.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,o/2,a/20),u.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction,this.fontSize/20)},_renderCharDecorationAtOffset:function(e,t,n,r,i,s){e.fillRect(t,n-i,r,s)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;r-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this +._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n0&&nr;s?this.removeStyleObject(s,n+1):this.removeStyleObject(this.get2DCursorLocation(n).charIndex===0,n)}this.text=this.text.slice(0,e)+this.text.slice(t)},insertChars:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd&&this.insertStyleObjects(e,t,this.copiedStyles),this.selectionStart+=e.length,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n,r){var i=this.styles[t],s=e(i);n===0&&!r&&(n=1);for(var o in s){var u=parseInt(o,10);u>=n&&(i[u+1]=s[u])}this.styles[t][n]=r||e(i[n-1])},insertStyleObjects:function(e,t,n){if(this.isEmptyStyles())return;var r=this.get2DCursorLocation(),i=r.lineIndex,s=r.charIndex;this.styles[i]||(this.styles[i]={}),e==="\n"?this.insertNewlineStyleObject(i,s,t):n?this._insertStyles(n):this.insertCharStyleObject(i,s)},_insertStyles:function(e){for(var t=0,n=e.length;tt&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u?u.length:0;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChars("\n")}})}(),fabric.util.object.extend(fabric.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+(new Date),this.__lastLastClickTime=+(new Date),this.__lastPointer={},this.on("mousedown",this.onMouseDown.bind(this))},onMouseDown:function(e){this.__newClickTime=+(new Date);var t=this.canvas.getPointer(e.e);this.isTripleClick(t)?(this.fire("tripleclick",e),this._stopEvent(e.e)):this.isDoubleClick(t)&&(this.fire("dblclick",e),this._stopEvent(e.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=t,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected},isDoubleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y&&this.__lastIsEditing},isTripleClick:function(e){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===e.x&&this.__lastPointer.y===e.y},_stopEvent:function(e){e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation()},initCursorSelectionHandlers:function(){this.initSelectedHandler(),this.initMousedownHandler(),this.initMousemoveHandler(),this.initMouseupHandler(),this.initClicks()},initClicks:function(){this.on("dblclick",function(e){this.selectWord(this.getSelectionStartFromPointer(e.e))}),this.on("tripleclick",function(e){this.selectLine(this.getSelectionStartFromPointer(e.e))})},initMousedownHandler:function(){this.on("mousedown",function(e){var t=this.canvas.getPointer(e.e);this.__mousedownX=t.x,this.__mousedownY=t.y,this.__isMousedown=!0,this.hiddenTextarea&&this.canvas&&this.canvas.wrapperEl.appendChild(this.hiddenTextarea),this.selected&&this.setCursorByClick(e.e),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.initDelayedCursor(!0))})},initMousemoveHandler:function(){this.on("mousemove",function(e){if(!this.__isMousedown||!this.isEditing)return;var t=this.getSelectionStartFromPointer(e.e);t>=this.__selectionStartOnMouseDown?(this.setSelectionStart(this.__selectionStartOnMouseDown),this.setSelectionEnd(t)):(this.setSelectionStart(t),this.setSelectionEnd(this.__selectionStartOnMouseDown))})},_isObjectMoved:function(e){var t=this.canvas.getPointer(e);return this.__mousedownX!==t.x||this.__mousedownY!==t.y},initMouseupHandler:function(){this.on("mouseup",function(e){this.__isMousedown=!1;if(this._isObjectMoved(e.e))return;this.__lastSelected&&(this.enterEditing(),this.initDelayedCursor(!0)),this.selected=!0})},setCursorByClick:function(e){var t=this.getSelectionStartFromPointer(e);e.shiftKey?ts?0:1,a=r+u;return this.flipX&&(a=i-a),a>this.text.length&&(a=this.text.length),a}}),fabric.util.object.extend(fabric.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=fabric.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.style.cssText="position: absolute; top: 0; left: -9999px",fabric.document.body.appendChild(this.hiddenTextarea),fabric.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),fabric.util.addListener(this.hiddenTextarea,"keypress",this.onKeyPress.bind(this)),fabric.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),fabric.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(fabric.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},_keysMap:{8:"removeChars",13:"insertNewline",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown",46:"forwardDelete"},_ctrlKeysMap:{65:"selectAll",88:"cut"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(e){if(!this.isEditing)return;if(e.keyCode in this._keysMap)this[this._keysMap[e.keyCode]](e);else{if(!(e.keyCode in this._ctrlKeysMap&&(e.ctrlKey||e.metaKey)))return;this[this._ctrlKeysMap[e.keyCode]](e)}e.stopPropagation(),this.canvas&&this.canvas.renderAll()},forwardDelete:function(e){this.selectionStart===this.selectionEnd&&this.moveCursorRight(e),this.removeChars(e)},copy:function(e){var t=this.getSelectedText(),n=this._getClipboardData(e);n&&n.setData("text",t),this.copiedText=t,this.copiedStyles=this.getSelectionStyles(this.selectionStart,this.selectionEnd)},paste:function(e){var t=null,n=this._getClipboardData(e);n?t=n.getData("text"):t=this.copiedText,t&&this.insertChars(t)},cut:function(e){if(this.selectionStart===this.selectionEnd)return;this.copy(),this.removeChars(e)},_getClipboardData:function(e){return e&&(e.clipboardData||fabric.window.clipboardData)},onKeyPress:function(e){if(!this.isEditing||e.metaKey||e.ctrlKey||e.keyCode in this._keysMap)return;this.insertChars(String.fromCharCode(e.which)),e.stopPropagation()},getDownCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.text.split(this._reNewline),i,s,o=this.text.slice(0,n),u=this.text.slice(n),a=o.slice(o.lastIndexOf("\n")+1),f=u.match(/(.*)\n?/)[1],l=(u.match(/.*\n(.*)\n?/)||{})[1]||"",c=this.get2DCursorLocation(n);if(c.lineIndex===r.length-1||e.metaKey)return this.text.length-n;var h=this._getWidthOfLine(this.ctx,c.lineIndex,r);s=this._getLineLeftOffset(h);var p=s,d=c.lineIndex;for(var v=0,m=a.length;vn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=gthis.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd){this.selectionStart+=e,this._selectionDirection="left";return}this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length)},getUpCursorOffset:function(e,t){var n=t?this.selectionEnd:this.selectionStart,r=this.get2DCursorLocation(n);if(r.lineIndex===0||e.metaKey)return n;var i=this.text.slice(0,n),s=i.slice(i.lastIndexOf("\n")+1),o=(i.match(/\n?(.*)\n.*$/)||{})[1]||"",u=this.text.split(this._reNewline),a,f=this._getWidthOfLine(this.ctx,r.lineIndex,u),l=this._getLineLeftOffset(f),c=l,h=r.lineIndex;for(var p=0,d=s.length;pn){f=!0;var d=u-p,v=u,m=Math.abs(d-n),g=Math.abs(v-n);a=g=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},removeChars:function(e){this.selectionStart===this.selectionEnd?this._removeCharsNearCursor(e):this._removeCharsFromTo(this.selectionStart,this.selectionEnd),this.selectionEnd=this.selectionStart,this._removeExtraneousStyles(),this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("changed"),this.canvas&&this.canvas.fire("text:changed",{target:this})},_removeCharsNearCursor:function(e){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}}),fabric.util.object.extend(fabric.IText.prototype,{_setSVGTextLineText:function(e,t,n,r,i,s){this.styles[t]?this._setSVGTextLineChars(e,t,n,r,i,s):this.callSuper("_setSVGTextLineText",e,t,n,r,i)},_setSVGTextLineChars:function(e,t,n,r,i,s){var o=t===0||this.useNative?"y":"dy",u=e.split(""),a=0,f=this._getSVGLineLeftOffset(t),l=this._getSVGLineTopOffset(t),c=this._getHeightOfLine(this.ctx,t);for(var h=0,p=u.length;h'].join("")},_createTextCharSpan:function(e,t,n,r,i,s){var o=this.getSvgStyles.call(fabric.util.object.extend({visible:!0,fill:this.fill,stroke:this.stroke,type:"text"},t));return['',fabric.util.string.escapeXml(e),""].join("")}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,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)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function requestFs(e,t){var n=require("fs");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=require("xmldom").DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){function r(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)}var i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?requestFs(e,r):e?request(e,"binary",r):t&&t.call(n,e)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?requestFs(e,function(e){fabric.loadSVGFromString(e.toString(),t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t&&t(e,n)},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,function(e){r.filters=e||[],t&&t(r)})})},fabric.createCanvasForNode=function(e,t,n,r){r=r||n;var i=fabric.document.createElement("canvas"),s=new Canvas(e||600,t||600,r);i.style={},i.width=s.width,i.height=s.height;var o=fabric.Canvas||fabric.StaticCanvas,u=new o(i,n);return u.contextContainer=s.getContext("2d"),u.nodeCanvas=s,u.Font=Canvas.Font,u},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,t){return origSetWidth.call(this,e,t),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,t){return origSetHeight.call(this,e,t),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/fabric.min.js.gz b/dist/fabric.min.js.gz index 4ac8a645de8487614928c14cd1d11497b095313a..be240267fa7f39d4f660082868ff0a141c7d76d0 100644 GIT binary patch literal 56848 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 z z*!2XEb3v`hfS^UVSkbYJZd5BPg>f-1q*g=fsHahz#(+ z7%{XFp$&!B2O{l&(nM&3p`)kMpk)hEH*ICW|9&@TYqKk}jnNf2>?n{^V6isGv)CBp zfj(=ZFb;>~_^`T$1eq9jyI#&Wm~)6^7Y=|g9o0o$>O7u`b;W(G!if(}6A^5Zi$P;S z3N_Zq_wU3Rn{;2WCq!@>GY8HX+a4S}Ropr;jK&4!91iT|bmRmOXV2XcQtMh~9yab< z-sqMsn~}He#&+?>z|WqyR`cc##|bop8#}l@uv6tGYd8^9V;`+?eMMvW18v)x z4?M4;%+a#SlxhcGkJV{S<>DxslEjRoEvJS=T8(2tH5OGLeR0FZ0Tns5tyOJPl|0HC z=a+eF$UIbnQc8>!zru}fx+V1eJ40k#FDAokecY<^m@Uzp6=X1t+Eo;lCvvd`aw(wc z`w9_mVHqOG8;*E1f8r-d_pHn{oP>Bu3Rd=FOG1>i(DOgjx`s2ndI}RC%+1bcQ_WJ( z;i{j&eOXV6TBZCTUdaPEsT{kJdCD$O*$bMk9_r><$e*IoycoZ2G&Wjt-552W!Z=$y z@tCtEgaFp`>-c;D{suQE{&fal4-uI1RA{Cv>AhZXg*?LutB5ijwClu*W4j+kt3PD( zjjqd9YvZpPyh?WZz^ zMWPNUn63!}jNDWr&oEM2MC_(r(*j~Q?;CuB`#CB8-G3eVdZKUypR zF`RJQfcqmj0cOc+&Rz+}%xFipK&$sHCxb-sO}qXx*UY7!(#yETpJ9Z@l`m>}u#}ZE zW$T;OG}>Jdd|=$CJQvImcbr6C4&pkl4A+M004MdH55Lp+XY^+X z5$am7pQ2S!#8HYf0&9klQ8hbm)YsryF!VUSvMUmG^ZDMJH{#lP z6SAe6crikL3-&Y10TDX-8_md2HXU-PH5H~|*g&cjAiQeUJ>U@JIJSO}BQha)Htbx_ zTC{qy_~O$G=JDt5n2QdPff%)WlmMtD1VkXQ!CHKF3Zg0Y6OO|VoOxhKb`#*Z{ z*%q&3jd=L@QM317GwS1i?Frp+NBQ_Q zhwzmQb5es+S1f*1VMbmhzi~CR(vQft#Ty~{6>|1$#iT*tI7SrR5dv~QZCW_MOd@RL zXghhyxAkI`knb6QIm_RtFX!`*1Wb&aCGqk!*rV}S~J8|r_53Yws~8)RWXQWCn#C?kqmX(7TgSo zHff-J7M4@+;?5%kvx$4-KzP#=xSE{zTvc7lu=PK~@_J+So~&b0iX@obV}eRVq`dYy81ZaBEo~TkkPPjrDpt%cqugcfIB+s|{b)XlB}39bxGx zneokxuOvFuDyS`3u!47&==pq|NU_Swj8t5pRqDfu{^8P^LC2gx$LFP}+RC(iea)3w zv?@2j*uuD}*UN!!8#v*{B>ehxe{HQ*dn%&h`rc@l{UrlqYna?I>o;NpVcVc7$!EeZ z^qa3Qc%A+8TS^t*P$>J_G62E)+GuywCoiRj6})Cvq`2c~ zF9xp6T#5v_l^T{sZP6ovi1x$;-$n=@5bLX@pEagdOoq{{zRF9n#3SxS>pY=6!&Y+_tBsC z_gX@=hOLET4RKqgba6*BzIWFkd~fh7^y8DAi9m0?MKyH8=(OM3klC@OT+~vnzAjvj zo%ZbYs*M6QGAV41)^Y}QI;XD4WObuTV3Qvt1^_k5CVN4dbd#OZbS9hi<0}$T&h?DG zL&2WhKGG%-AOTJo3wq;ov|J_|UW)9Dwh{uUoGxu#MzF@keb1f*T7JxajZCm}6YOMDa*KXojW$8rbZmv_b>(3SOXfc_(|m}6n_+RJaet$NQcKFSDWB_KYd5OezOQ4G>NUcU zm@UJhw6!5GQ}P+JJOo6FDnn)>tQWis9Mcz8lf^$!BS3I6Ewq8_}$#upO!YqE!94scEhy4?&Z>0Nj=L8%CdnhoAybG z!=V%fs7^|JSdh$$Jt^^yNhzw!v4UHSNi$^ycm(pSeI{3SbWvo<3STnPM=U#Zd86%7 zHGu+?cYxtvx;Ar`M0mbb`)-257+)O}J!S2uX{3Hnnf+-RsmD*824b@nrE&kTKKS#6<(sK3POYL(M)puO-*D z=(rX+34B_Kz(pH%WtKD7IJT=iCVWu)%*z~$WHMOuIZHVVUe4!iUSE5XxrHw1UG%3t28@buf=N`9A}%h3{NH^a|SCB#8T5v z0gz%2v_(RXT2+#o6DP)DSgXrk^i}dr^q`$HWMP6(bijfV?E^tb))OT38UWi=#s;|w z9k;RnHdT6>$&R#^ge=y4@fE8lvyIMBF)jMf=j2y>D4I7&?1`gWM#tfm0XS2Mb#26A zW7PTp)jE9ggkR7;BU5R4LeYwmxEl;iTuAI(7I?(o;iFdsATh6>Jh3jx5N9@|44VoJ zqq$~oB}Ll7EtP<-NHC$H6J_IN6~)QwIC4|1G-1B_EXlP9NL%4T8xqk1GTVSagCgb- zn#eFe7a|dO&KhEi)iV}_7Q5Y4oUzysNfD_7m%O(l!{w{0(xq{w5IA7riQA%Cx4a9s zwXH_mc>Ku&PLZGIf`1_l_KS^ei(IMBps$ZqnM}j8>@zuL5zRY#X~^E8akSdfsvi$E zroDI_=U&~Lvh=x3%w$KJvK3V2^Ygk1SvM9JJT=9eX-+>=>2*Z!RSTML9M;rTvgqlP zFHAL9*$)wQK$+3@5%ivoVN}y>ZlKG z3GjQrwEBjbW=<~}`Gsr!%PN~7TgIj72&32zueNUFPNpAuC?apYX_A*C{LWn*# zNPh^O^rj@gIXc`Q$rXbPV(6lU30fLysVnC|YFJA31MW_f2#w^7SmAXVh(o50LXuaw z#yYpw*lHAqh-joY%vKwd+y;`Pjb1`&H9M|K3{s>~cO!kFyKK~9##j}wX7x;46*x6q zu<$jC1}1*}=|j$<>x+cpN;TwZAmy(tLQ0?(Uy(dWn|!%6=I1ZUR(>v7Vds}yOgph? zZMfFdM<@CqipN0Bil+Gj6n+=^bbM_`jPyMIL_0b-5aqq(~ zKfHZ&yyx@=gTFmH9t>WczS@I6?v47R!Qk~fXAep^S7o^j27}w%+y3pdewJSjglK6o zfV>0D3*~Ugqfvie&Yh!A=~F#mKIheiq*N=R7tmW6U|NI?O&tt}L#&#*Lb(D`8feNp z`paMbGN4q-Z2)XU5mGM!04Ch&PSh7C(*uKIe@bPP-a=y`;a1fk?s>6h9JRme68BVS zi|S;dGrA`vg)8Myj`%5;%F{i2Dn7WLh3w_J>!8l43U4Z5@lI{UX&nvG2m(JSP%Aog zaGkOo&Q9|0G-t)^=$Iag=X#MdO7Z3fV9w0=`Q+7zDeZa(2v7fSABHHCzu`iVKL6TT~Dn2_&g`O zkiY)q!j%wPc^o;E+OR+*^L3<-hQ$sMBq2alPWj;R35EKKoOGp5tYY1!N}FWPYL#;F zo{2(r=;NCdlzf>(O7{pIrAqvn*r$4Li)5khhPs*b)!R7yUTi0(Sx;yzPV6oIo9$jjpG)$$ARt;Wl1FUsO zjT@q@p5Sw0IzP>j!PV%C!e-*>^ItLqS1I>h&#D(hfSb4lDBJ?R>!#1Rjxe?2;}g20Xg2WTawUugPF-xdr1x-cXt{M zRn71YHuN9Ubz69&)@;jd0j;khoNOwwAvFVCaZky zslVOuSJk(1QL+?Z>uP>gn_iytheK(rfveTH$_NN*q^{#~<9b~<5rBwu?)D@*N16(; zxD0%ff!^C5IjE4tnlyW~(v>8(-d`ZihZ4+>E&?Z!;1)l+h|ptxO-f1lXxdoLzkB`j zhtspq#MXOyrygH|z4NKRXVB0P`1_JwIw&)=Kh$n61v1+ojpv**6c|9- z8pcGLmkhLm^B+ExiLZRamcfPYY|sfMIawX zODI5#&WQatxc}>DAdu^d#+GGsu6S(_{Yt@E^2t#mA3IOaT}9ht5C?;P6B$ zCSJPGpvm8=V$eJq1|@7PnBx?QIJRmk#)+#yWu!u=NRQGq$GfZBl=)a|cJc_-dmj8j zDRhctQaqKZ?@bL(kwM-o>^x@;dCurTvT;aX(RatOJ6r8rwI4&v0zgIk!1m%%(UVl3 zKcoW22bRv_WcQMw=K_c;aRmiYWfK0Z~UrkSYte&fy6 z2WUA#l2TO_B;=ZWQjV`k7oj#A-v9+;+)6H>c?bTlI!L5{5s^?6T2x}Be3U4)nAFfFevVFG`!76FXrsAJ(FGy`N7L~mB@%2kpd^BYF|D+3`mluK7smCERW#4( z)Li9e^?oM(epTQT*WeR(N7F4o4vg;k^0aX+0Z*8~OU?ubxFChlMn7L|A8}*&wH?|z{mZL7Uoft0VFk4|1 zCx>o#INpH4grmdJGx&-<^cebEP*Pm9J`1?9XTKSY%~whejQZw9%h~H5Dv-d(rk7Hm z>$yfU*NEqmkZ^w9b9_~aBLk2H1ExXm5qjiPM!gSL+A$$od9wgr=<5FiYK&o#I`q4t z-$;Zb9`>5YmB}7wVq95wbSOIjd$w_ykVh5kilKUy8FSv&`$SIvly#to&?Z0Tw5=%O z)rpq@VM@iI_hej+;wx<;uZiv}E0kUn_2(M|l;UY~a>}#@6z-#0UVUJggdrNI_ZyDZ zub{kU30%)P`ZeX0D)1zJ1(s4}h z0(T@O1v8c{(KP(SaupWk0Vgx!lDIBB|1GqZK|1&?ptj<Wr-uFZpibWt>XFBsB<=oQN1an8+Fw z8Gg!08Z!RUDqCr;MZ-SIcxP(3KT__xn(V>a^jecGSV3f^Q~MO<3);Qoa}&gJ zl4v{QQGy#9kCF$sw2$)!S@CBpNN$O`ix%wc3twS{w-uyi^@*~4l#tdqGnH_}cMZd2 zkKOj!_Wv68G3S)EVJ9;3UcYTUaLcLKFoNUhW0cObYgBnxUfNAb;@*KYUC*EGAxI}l z-JY*L^G(CPt*s4x^p=T^8MNtNO;hj{MqXKoyvR+ACtiffr;KLWE%Rve%}95SddB4@ zIDpSgXi$&T=dV#7qm?9x%4q=ah4t(Gk)JKg_!^Kke}!Hy$rjPqVDSPwetfk`zdVAY zVPyW-<1$!KC#wF+d*y@7kVh8&AI5ogcr_wEBO97;G@Nt$nU<(14m0hidu47i65JQ7 zDLyZzg2WY%?M4honHXMoM;vcrU;}|iB2T@|st9!T00LbBokH;qOP0(XDw6fR$T0uN zrE-NI$mp9gvHmV|WR z<^#(Rjk@3Tz3l9VV6m)WV5GehhIeQ?o{>4^PwqkD>SLZoKnIM`du#x50e8h02jO$sa)w zjO?<##+oV(bel5;V#;O0xJJ_n_N$*F#m41^q+vJn?1gE~`6YW?^Pf~%J7Ar+lTBwq4~-BTd;D1$l)j* zPKB&nqRK+Uwufl*dY04mi~-3f|5a~hxpgzk)y+&YImHO2`T7PHtZ9wiD&r~3#*XeF z${Ig4Jd$)F=$VbR3Q5!$85MijG}R;}Cj>^U&cK+YvjK1Cv#4kcK)YH3>El$gI<4<1 zwFgt(K3OZ=#hW4$>}mFj=Y!=<%PuOT^Z*bk4_p**QSHBw?~V`HPi++J_-31`I`)kgxKWQU zQm8|j{xR4?JM6En(wJR|bcF(=$E&=+ zvPfY$Bt&J$2+<4~DS|-z!YU9idopd7X9bYBF`$H8z@Z^&CiPKi5d;EZ_Efav!-n|~ zuUT?RDpo(n=^VjXs?cec0ATU@2Y~z%FYSEQB~X9Ttm<+JUO6YWO~qF;0c-u6v+HGNzeUK@6*!C_nq ztv1daE^y(KeMP!IL`k2=`1EsDOE?osw>p~ZeWHS{j)S1u!o?L@W#(F?+MpBjWk0-0 zN!v2xt`x}*u<+=BNSrHxo@PQVRh0@{*&f>RmbV^q4Je|iIMg%MHCJ_pRb6CdnO&>8&MI}CRqOgq)ugLeQD*l;18^eBC{atqmrQA>pxxS* zIz#w507?5pPrd7=Fa?BuWikb$b5cXN*{^Pm_i--O3mo}z*mF2-t2k5{=MXA5g2 z&w>6g!W3oM@k)VHKpWJ-_j1D|gP*C}7LuWL>NVwSF(n;jKig&9E8~l^E-OG#>V^0= z9^(%_uC9aJ-vse?>&FF$0Od#7kF-T06Wszv1;^V3T|rA-gu|~Gn|T^@g!?1Y%!DAn zxWYdkaz2?>GAhaa#%f}5kF_kU6~-VMs>aI`#WtYiiY=H{t2kJZ=aW1eM*^5r85j7v zrDDZP9Y)a)l-Vp{wLE#UZ>*RSjd-AFH$;)C+r=jklIFlpKaAk>~$jD_Ll1FB5^#F zni1&R_Vat4s{-olA{PY^0XV8|UE_6W6!K6EN8)q4@(W$!!mb=jphr42gB%DiX~Yiz z!GYa-sogxG>`z!3`!%|06tf;wdJH|8$jO&!m|e_hAXX6F{yvidv>n8OFy^demB+SG z0d-uEfJ6h*Z#-8#C7sj&5;yf@Px>!xS~!$p+(NZUdu6H5mvT_}f@Dc6lu9ZI6lpU$ z@2`8}NRUROa}>@XR-fdbk`R<&odUM^*&56Fu-ef`BY!&ABn~fIUa>L?@VtrAOO%x7 zENF4x@2HMx8UyHXO(X=PZHplSb<~G<%`HDT^yX1*O+IXOad5#vIyKOgL!)huU06*V z5MyG5xK5JIzTjI063@S(1EiE|C(_RJS+8y6(&I`)HD^XOxCi}mcP(ecDnN+rvYF6^ zq~kCbLn6IS)f<6SVN8D35P!y{OMo=V%&mp~D-~={GrsmY4HDN(y7;-mmARt!$f0GK zz0IJV7DJtMHEt?9R%A34r?((C@^j-cii3#mznJ0|eujoS;zlzptHxG1+A%7s*}3N}B$_LlNl%Ik{d4FH<^(Sz&(bL~NXpB6!?`VoH6MAf{ zzrnVI{&l6X+-~g5Z0yXVo5SOJ{pc2V5AUH4iM6yy;-%CDt873qHLaxbrpxFi;3~I) zmi(FrD7A76?Yh$K-~%~-1H7c6RZH#UgV;|EIMrIB9HkAN)PzoHgT|-~p`f8+-O!n? z;c&?9cIZnhp~{Jl5@b-o>Ni`fC@+YHJ#-(e+UXvP7<8gzBpnp6hRd#1mP$$;aE(uz zj|#ob>$h>3><+&<8)^F1P08jBy>oz%E;JJRB5#H~;}&mT*I{*8jh$5++o;CQRAU>n zu`{c&GtpR#{q&B~{xX`QH1UMGh=0+>vxp4v$;b}kizK#c7u`_Nja_tO7u|$Ik=sgHzlvtT=>57*kf~qE&GEA zWH&t;PKE&r9+wDzH|JqEuQPw;)wQ_l9ACdd1+0mWJeDs1>a1t+4tz9{lGfO_ZXtV@ zdHw>UHWG>niss*a4YSg;i!=WAJvnwF!X-fD|3b(?``;78G*opTm{-#l&{zy)O`jrG5 z=L&k9UYnSJPU(~^sY!TuuB)NUwy`Fwy;Z4Pwz;@06L z2>FXp@UP{oM+vJHaw~Dki0X@obooX$8SA8uvbxBT^$QfJEt z+-CXhg`1sjHD%RwalFP&X`zWoUr#wU)_#rXhheVck=a)Wea#lhNJoF&ZfRUp4R3#FrmYes#CttF1LJfhwAjoH^`3q$7b>jQi8jo%$qG~v zY7lw$G8Ai52Fvi}!4gb9&!$Z#&LG;8^bB09v(@bCgxj~nd%azSVGixH;;y5V1+i;F zW4CIOO%Mg4RS_xG*NpRD6ET#dBtsq?_!oKb%)h<}p8FR`@WQ`Ng75t@3I4RLnyH%4 zrC4lL*xa&@Xi;q(xP2gFU`pCX>EH23fuEygaPFkNoE7mu0gE^()8EEtVSXE*xBA=o zOx5?)Z;SW~jow-B4%q7DPES1g|NBZV6bJY zo0_?VBXgA-jr_zTJb!mNlF(9xUP0)g5?PM?82);u3clBo$5&B$`Cz-n72Fzh`4bG% z6RTcM^`&NjJFLa@v7{+IZbCY&#k6MsWf@k&O z&(bJEhsB7^iBkim{Jt-EbUnH|WWxzq#5U`L^E zLIxbnb$r0%zX>JmDB6w{b`<(L#IU2HR@|V5&|r7J{~3}MTUO+gx5v(pFsOFe=fJx~dwO+G?z2G%Bv8>G}zVZFN$jQ4fVH!)&p5X(kg*DYv{- zAQfw#p@G;6T5Zq$EgSeN%j|B4D`aq?A+^mX-+-n9w_%J_Vzqo6Kz0t!n4n*pxD7gy zOfh{;R~j)i@LecT(Y_5=KTnJ(FWFt~5Bpuh zOCxZ@05vJLiFn7ARs(CY?4IAI_o(y+MFuVK!C#Rr%^h>r-O`tnskI}dWc78lx!{v7 znO=-II&P`vHY7`Gb^ikLsXt2RiBQLVDQJFq=rpA@o?i9)KBXFCYT2!6YuT;;LRxPy z6S5;U23W*Lhl0(5tDky?w5PIdq*Tpis$Slzvd4E=&ld)P` zL}HW(?f4(wEBIn7(AqRw6G3e?nabVH-$>PZDb`EdYzUfeVIyz(-q81`wx^9yz1fWR zueSiyNK7wkGUP-Q{xunMdW+&_)=nwn(ZVLOtaHJ0r8kcj!WzXmpJ+G@Js6XFxs9ik z2GMBRbS1H;hJ+*ja+EF_M+|AU)bgBh4atX`-poDQRNS_D6SC{CePEd`Tl3idm+CfM zxt6JI0f{3X>4=9T( ztJ$?|)c8~R!+ zV(O(&;*w+E+Lv}NRH%52d>cedcOGmTB~!e7E?G2UpwLOB-35#5nTjPR2WU6dLJ$%K zkXu&9k4!=01&MN>*$UYuqy#pph*Nh&AzLF#k=bfs8&7TWys%OO6+>k1qTM(h z6)c+t@|Q(P_HjG%S!->RCXL>t@#EX{W|9k2R7C41Jrt>wa;Hr0ENl$FCl2cl?j(&3 z_=NY8-Y4(-siIe0vV>6@8Ww|@7MY+{dZJM?rA(!XY)j*y1S&_2m$c)T6qM%>{r>}< z6`i#*+fvPTuk*h_OR)2wtDRemdRoqcRxMu9MRbc%4%3^cq<+HE$ImU-M}d14PSi;Y ziztFMouLW9N#No9!boCAJo0W`PFPqNNvif1=Bb_L*ugqEl!?=ejt75cxZh@|Jtf@k zv__gGSNqm*smklixjBZtH_|#SF-XU~Ft?-9nY2+m{TW(}L31($%?T1l84)6QfJCyG z791o$jK>ZvzXn2Fq;V)P;0zxkjC?iMu=p#I{o-95q)R)(Y$Dk!&FL&d#c*M@cJM z`e=qb^4Biy!CM*;X=8t7Z0sDdKKvbW+GtL2%kHZ4Ade)Lbr(uigOG(4L^4_nZ3s!y zy)DkPPg8?*Ceq86mRd23wSLIJ{N$QoA>?;4a!azzPsDaZ9i=q%4GqGx2- zgp@-CJdzkRGy+#i^_@Iosf+g;dS5CVSCF0u{Oxl3CTF-BJ zpFJ}JPZr8$KmH@kaX&_F#HjrD_>YpESE@y)L{~wHJ-<^V0@JdLKN31rn9L9TetAC`7o=~>%g2Z(v5PC3P|^8+>~ATOe0kT z!ZT?C3dnPh@^*8wS`2F)z4uhVM)7b5f{2P%y53W_cP;wTt@`pUD$p&xz4NK6^Copr z=|(dew&`=?3A=zZyliZ1IM)b{zNC|R6-v+a3<0q5{OfT} zV8nc$De(mAErv&1r&d4lG5Y+j)Pl7iLiszim;bYAGIdC{LL_@}m2FpS?bJ_;Tlib; zO56q&`1mnM5e!^Q6|uquNQ>SYSz5F#`MYpU{_*2DLL{kc=t;I-Wod~anZ(gc4UQg3 z&!pL3Y8xCYyS_V3B0kbb*4dfm5dAA%4H%H5GC0$ zWl^mxm!~CO`08j9ttsdflkM0*SpvujR&|M^iDN)6l<~)5Okp*yrGWm*5E|c^g5`|M zNqI7+Bw{j(P>=mg{otwOv_S0_N~oM(uZ5c;3An5bgitggx_uE&64@E+vB($Jw6awD zU)`kaG!X}ewTVPGGH$dUS9++%M`Z;689GOdY{o~nGJTT|)lSF0$s65rs5gJ8aVzzS z8+~yX?YFLNQ%5syx8ly2q>;HBCUqq54JoJGJ+ThL7!sR*Npvy+_pQFH-$gvoht2aS z<*E;Gy$c(M6h*4!h^IHhtiyGJ><#cj$^#$nmVo>CwJl`RdmmnZkaP~;aE0{FP+kP5^6q6BEN&&R;{2q!#k-xVh?K1sStOq z6U3jEoXosw^e)c6JF+=Fua`FYEFpsbO+_* zM+&yOJChrfzJ?dDiL|PO5%0n(#^RxJQA>o=h2D^e>^=p?yzcca;1AkW!$q>rYSKRy zvdK9wRkvA}1|7F|R0njlSjUJvqU9SS|H5RKTEoSr&$p&^m^nK{{t=Q*JD}*wo}Ep0BprKIU`2Xb_tLHGNGR zSScR4*q*-RrnO=c9J;*L41z9;rxoIN=UNP7FZ9UAzO z4y$ru?H=oRq+!WJ5(hgOrSrhpSE!6@W_nx0CR$v1Gs!r(CS|4EBN_~RZ&RfQIRA^f zXM_hdMkrH|KgrJ+3Syg713mi*h1KFsc9Sm2PmTX%Ax#Cpdo@&CXkoAsLm9Xq1PK+$ z@%2#3ekGxxzE$DesoE{l4-@$o-_x-F5@cUXLIqepQyi0mkC762jFd-#v2rB3m)OF4uqaCmliVPG zyGnB*$eRp5lToA%@FqbK9kfR)3w@Qq61@>+TxUYTKvXasjUyv##i5ZPk@!;d4MpVntV2Daq^bsi`8bCN+YfBlhr1rg2gE%+HJX!z)Y4y2o=CR z@o^sw&bLl)R3k8ilvlqk3utAXK@)Jl9NHpzk5BI3{c1KJ++@B0I}@8sY2 z2hI!}hzUMm%jUpYGzZptIj|SXfxAEsX#X9^{dj=r#2_BX$vkjL#9;-O zDBL;+y|B$&dTLmD^tN2&63_*c{~29G+A0`Cg=8q<5PyY((6=y_6%g%#2t3H7%SB*% z>Y*ydyhlTeFj+6c%giK@xkFWb!`W!FcCnw^YL*4GR;>JTs(Lk6Ga*#bFRKPQ!#nE` z>6*2OaNWO`FnP{1yksBc75?#~;v8kbBh5fMy7k%<=o?wo=f!dxsBEF~-kiH$n;E@8 zl!eL;gi3wWLp=}z=8`MJkLY77nBb$@X+2k3_k0*7|pW0=R{0ghFBsM!QzI*ZV-51|{efH{$ zKY#J=Exv^i(I9AH6n!YFK@5acL{_u|3zRM&<#Um6u@@3qQ7X!MjUf`vHQ=)CP@}m9 zT&NAP& zfiioc2=`DCEuu2|t!9Eg+?lWg^-NH(ra~x8ekjU-olTD)a|hP)P;1a{4(}l3g_Z=( zM~e_ZvXY7;n{34f8Mzvv<8@uEH@Nwc0W^e!upG=#l^|2%YZNW+0Akbwk_xeGqh{}x zSI7K+5@R52_CqG%#P=wN(9!RkP3ZxgrFd4yah$`S$B&iJ6>-ks1jF8lac?3Z_I`IF zxzJue3-mD)_IuBJgrC^f@zZq9JxJ}mQqI_&LU&OMGNci)NmDNT8GF1(!R4F~7 zgwzv@isi!M_0}QVrHK{CC900gJ&EjXX)~uxjoE%>lrQaYzryt*3HSglzIXwTALl2d z8M{E@M{M`z==28oV^)Wo;XTXn-pU}}LS+l(Tc{WYi=BweKpkW|o!P1hs3dy5p!}MC3q{1|!q= z#6ih%P;wlU90w)GLCJAYBBhYP=2`0H^BMMNK1rG^Xu2(8q?L#S+K5Lfa!EuYS>(nN zsgw?{H95o+Fe1t44oOjhUuGZDSu-d|E!t4_)hya(PXz@VG~7K&+SSy<0(33JXwrqx zkx4!Ghp~-roG`?Sh`p+f_k40XKL*wEzk5?vx~J5eiMC*dwpu=pM`V|L zPZ)Jq)u@D?A|A!2B)K(o%gH~SsYjB%8F_MZg5U4iV#TA;2P)i1d6(Xo9CsJjzr82* zfze>x8EMN-Rr(eW-JB#|$VYPV`T1&NN1sE0juk?-AFKq@iK>(4y(i6kO<_K?-MyaO zP`6!f8%BDG<4*F|M_WOOzn%R;`%7L&&3i!J0DY57j)l;aGPj*4&3mCkrGxRNXJ6fmK@Xfr)iPBS zCr@g2zS66t_d0iY*I6)r>lm+xFvyV#*0cQTX@(-kwZP!8p2qd&-mskp8wc`XD(knMb$DIA7C{BzFT)U zcOJ1CI+N-uP~MJ&pQEW#)hk_HN#z_!G2+~FN-i9wD5V+EZuv5rlT$|02;-`;DoAR` zMs}K%5@oI+A@2R|;^IQ<)82{;S4#@DDtRd6XDS>ei-C}zsUR|FztgsG9w!ezXUtNT zEL=is8aQW^uQr9ywyD%s^(ah3GR-tNacDeNv-f;UT!O8u91U|*R$RdCy3DF|K{gsf zK{wjmMZyrQUGgDt22)tS#r1lX-k_MN$ux~{u{j!69U>HHr02N;HzvBk%Jt$b<6HA& zF*%*zO-s?Doc>_iVL3(*=0**1@SX)+PDE`RV%ZhTREf+V22R!~Xo5RGh0Aa~+ zD{j0=7E#OuN9?=HbJX;e!aX4tL;*SJ!?<&gw!LalagVT*C@SUCfE435u6egC|HF$c z#6y-e@=GB?l+G+E0UndWHwG=!mE&W!r5Pz>{Yfn95h+N)r_XZSL|De-in(_lrCmo7 zO)wW`p9IGNwnsG4GQE}ufoi#^Ap9qPD2yv3j$52?rxy0O>dDw4^l@wMWHP!A!|_pH?&*K{sS~T~>Nh z$FVN_7mGz&RR!=2xHucrJ|~|{6LofQP(qAd~Bl6&NkT+ z_>w?Lif>3Y$9fQ*$-s$NaSa=A%R#WC{j=K`ywQi|3cG%8i}>s}1_@;qwjp?x|`F`W}Pl9rQgW z>(d9_K2n=#uuU6O%x=KGY6Ro7Xg}}PQEpx>Y%_ULhsI5-BC0!40PMH_mb&@f0cSMn z+Si4-q1u*}_nN78EHU&2u9w;4$Aqq>7h6G|VH?Y)>R4V^!h{LDornlpRZ#F^hr}f%)JhBdLDkpxs5u^1nBgZZuneYJFP+!I*J5`@mFY z0^wv)AP0R|!n&mI3b|1HE*eV98!JZ^D(Ua4#FKl&awpB)Ru^SayoVds!^BLu&5diU!ETsH zjp#@5$;v{Bw80?lB=30=f%%xWoRU_1v^;`mcS0qqYHi%pgLoUo!?xic{nE5=A^SkxZh}3uU(GTj zs=By`c0R0Eq?ZSOwj`1Aq$ouS^mhuO?0C4>3Ne z9G|-MCMiV{>fE`vlygyv7@>1-Dd(aT8lt;9Ieh`2K)QP%rT)zJ8c6vkIK^3}iKLmJ z37bc!C5Dz5T4HF4p?Z+BjzM-YMOra9)28G)$~^?Eq+SKd;#sUBLBCd-GjvHP>mQro z^aGwCJ?Uw9_wH#*-4#Je&3TTe6{1B`+oYWN1UV86gcf3gt^D0r(q~MtMR6`eS!sm~ zf)>!T0zL;-&Wcd-1q2y;Sr(NjN;odn4Sf{HBWS_DA0x()I2KKT9^v0DG!@0SliLCT zK~~Wc|CDzT-M%cQq?mJv5hSaLI+sy!3gf`A2wB?d?oN2W;LUDBrHCq|m7fkm@3?PgjJNb1^K2+Y=h@i{VoIv_Ntwft(OZLBCBBjK6_F!nhku0-rR&Ga#+$ z3l6W8NbMZjQpN$5GN5w9Bl^0buN&N*DGIp`Q{spz$)G$Gr4;cX$OaW;$p{B zEa32z%PC0uu>d?vpgG49T1U=jLVOutl!D!9x!f8HSgg@TA%eZwzZ8iE;}+APpX6Fq zZ?A?JlZ4SJPbJP32kj(E!roJtqF>6&xBqn zB)1LSPyN%@@Jva=lNlKNAhi}{$Mu)PPRItnE1bb^Xj(RQEbxvFUuZujiryTV$vZ-6 ziLA|?x6bO6=s?$}ZDd<3l+UEKdM9$}XI2@LxjY~H#4znVv`1AdVo(KUt~;Ehq;#!I zS&*O&B*QHq!8ab=If0W6Bh<5$LRf6|_f3L+F{LSta`uK-nNo{Y8lz(c^5aXS)kw$D zD&D}YqVxqJ?IV>oT3}S-i<%}VuAE%Jf`)E|5vtNvef+h+Ao@kQB=nfjYq3O9R=k+{ z*b-Sb3oskVD%Kp8Zd54FbD5<2dsz$Z=XLROGx5=JbR71*@qdxe^N=8n*0Mt21cI!3 zg9cBjFLkpuvwc!cMq#uxk{F=R!o#cRgOSC^kZUfTi7vV9Cfc^hCeK?$w7h=LyoAxu z&5T>1Dwfd}2#611^tu`U^YEsBKD;@+jD8+&>DP4_z4fLWoDa8$*D~Gq@G^{UTFW~+ zHYLJuDDz#M1wV(;*YM|c7`=o)jl8dQ9j|pAVe}IueH%t!`f|utVGXKXSTp2$0m*@q z`lh2E%JtgH^_4IATh^twtV>~Z=1YD96aZmBp1;NoI{1rTIqQR_OxkK6nzeo$M&CN? zrZuHHbl=7ANV%j@``}eH_%_6G{@S15+i37A#0hxmkAD??ON0JXOZneMnElK6OMg5x z0P2T52r2uo@I3?P;zdj1ZwHtp8U#A+H}N-ZX(>r0^U!2{)sj>-;Z^@zk@PG++q(sv z7K@R!e}~Nb*T{RnL>~R8=z2BzGP_!6z8H|pyu7#KfJ)6kTH9y(V{&zPDg1*!6l-z2s)10R-r zEb?|XV2`%&a`tEqPj0mbn~9D5Ik8BO^kJi;OY$~JgJ`oM(m5;}202b|iW1{Ksad?B zy;{XHIE_NRk9Wlo-g z;eW%KMgRl|uaS93*I6@2BWd{TK-}~e$cFVwZwy0b-q1-8o*0l|+K zL4?pkM$!U>AF2FSV+OxB5Cr29C3CqVdg47Ec1wqoSc^@P&^!zvS=lpp@?YgX9w}{N zH)q1=4kP;tCQ(}^^!jOlf}AYu!)m9GEq#QvDp6=T>m5it6pXKBEba@%(g{8tcq^rV zFIaU7K)WsV>nZ&b3s11QRH7;4kgU9PTUcR-Wbh>$CKs|mBuVINqe1@YA`)!Z*PJl(hvZxbg@n zR2<-s#)@F_!vr)-&{4iJ^tZ zw~|QaJ}os7aG!@zl-V{b6!*)Y&puqQ1eNktk|&pGY27k+4|zmISs@vzeQ$0bdQfdR zCi2@6G2|y@6fBGpq!E$ymL%S=b9%fkqfEb9RP<)ScoSB1rb_-^+>!z868?BWk8tQ# zNSR1AJPYyEk7TJ{w^tuOR>DUSlqG(Z`q#Pswd(N(?0k$mt>!}kN~Q&Tjb|y;0gez= z7|v7jS|FaLO7S#hxkfrW6NSZ9RNbk;wfr}Ai6qsVcT@712A@3}@Su!Itd0*InUn@{ zLva+am{pt|YI#5@5WqFpUux04loTagQZ%jcDM5A$SyEDn#`lgvK^oEc&@e!Yq0&V4 zD-%`RA?IpxnW#QS@m!|BKI}<+DlMBem!{^@skt;Ym$GIaWpec^)~M1ns-#9?&F9TN zpPN3P%RZm;s7goij-8v1or{j?_MV%OIu|2FHM2gegr;NXr9GtQruFBgQ?u#wx$JYz zbD5}t813t3pRY}yubp|mHm$#Q=K0zT$F(yY*Je1b%{*V%&6;adbM4ezo0@B<=GxR; zJ2ls)=GxTUTw&K{aIT#dc5No&+L?%JGZEL$L|mJRxGqi2=gpeWP0i;{&F7}(bEoEW zQ}ek~^SP<{oQ<}p(_&xsH$wjBLH?5?MIE*c`F>k$yWjwz%xI-8zc|~UD@VNWQY06Be8yINHL5$#P+dwDBJ}3nS5!_bF|SQ7i9L+GGTA2Ol)Ubqg?q7)MgK_{TqjLGa<|I2_dBVE8Pe?`!M(Lq8AuWBheZ zzYNrcODM|GY!IA8U4|MAMNy8*Do>m1F(OzHU6*k%xE{bZ0}=@q=6Q-LlnJdhB~}bZ z(PbzBOT^cpZU1Ak#j2=MU4*hUR~j%bc7Ql9JlG(9%DwHxVALKQ8b>=04O=$Xv1k6j z{W6`&m+4HuOlSIK8h%xWTv8Ji{PVqhF}}|xtI*M!*ktSY3O3mi{@ucc8w6{#ySauR zOZ;(Z-vZk>$0ylA9sSJIp)FMASsuJPZ{o351U`s=~A-<9&*F0sGtpZ8l*nldqsleUHF3_Jw^52^|} zIv#908V8)IowB2O*Ujc(9)DW5)09#sZ8DZ+sm!}TZ3z0dN%Xma; z^U^bJd6G@bem|_^6mBA*$x&RK4WyseGc{{<#EV5o_2wHv8$;pb+sed1xlC&J#BU6P z$GuZjP0|LMbI{ z+d0)NJH_Fdi{XjuNv7a<#503}c+2&HfEGFGcl);Dc{A&@%GqHf%aUKT`#L@DX!Em* zTN|bFjg1`jCO26%roDi_@ZBLDE;CrA6%HHv%|Ub}AR3W{l%O%l4-PM2dafW`A9L)C z_&KW=R|cUu55wC<0_`d$Tx}oi6LgxAQS=$CN=m=kJAHrn?9eP=nLV+yD?DUR_B&w+ z_W6Ri?>ud!Sw;wNEpV z&*zm$A*)2vJ&|Cqp`jye;|ND#q5S4pFi1D! z5FJ!=DTSSID-&*6Lb4s!{)^L@aBDr$jD#=+me#|{#u-hFm7inGqH*WW1n`{7@LmC# zwsR|zDG~Q#315!y5bvOAhR1Qo*HSQ zuQHZalX%J2dB+IJ2HsaEu}q%q!lx-$$~5x7*=SN8njmPUBl?2`(pH2+f=e;2r>wzvcX29>8H6s3 zYf0)@!mw#8Ff~qtmXmqZmMkz>j%X@MDl}XyM?P)C0&R?b=^uS13+6+W+v8Nl&5LFb zWQ!qiZLu`Rn1+YI`9Pi^N%^bQ#@VCm#^G0qQRtoE8an7jPj1F>?@8pe>`Cun>x6G* z_|37C{#d4W!nZQKqNT#3w2E?o@kh^}z$njv^U&&gKs__ny-t|Uv4DTW$sE3T_wKtd zKL6{x*Joe9`0DjrBv1bG;=9+c&UD0Eguh)R)Jf)2Op9wB7jLtyAy3GdA80YWU@RCNCnDm8sRAMK<(i6Hs*3-Pw> zp+W@_`7$dPt0oyKf<1)fkW-Q()jqW3f>QP((fT$L60XxYB?7XGUQ9X7Cr2kz1A}1T zy9gm(FsAH9!oL{3Y>D!WUy<)9AkeNwx{j-I$8jZlZ#J~7?H4EAb5nJy2Ke0i`);E*rsgYy(J zUnT+ye5%F%_{xAfl4(bCK0DZSNPm!PKr4tKj3u@o403Pq_$0obNof?g|Yh z&nfzL#g_p=88Xe60soYdT;HYj&}^QQ_h4mItIN(-xA7bUe0YYYmn}R;TRzHydGD7E za}3(EH8`Am-|SKMs2~W;ASYX(GU|=s&jI#B1Slh&sMjPA)>`DTFntyyMND{f4x_ zK9`Kzk9(arD)H_U=a)Ee_NJ>}uU6T*Y92{4d>3UclkIaNr6MWN);Dm0l-pmDxV|C6 z`UZ(=9=xUCtrIK{GDf<l1_hf=iv|h>pJ?DaI~L%A(A)y?{2=^sx#sSZ76XjgrFU5 zDd7u_NR_aGG+5p!-StvpE0hwQNnK#&R;Rd8_*QUa%eWTO-}MhWZm3V=39ZzH1L1FW zY)xpbnlZDV%*z}07J76X5>}e(fs=I0pISuPl53V{mS%Ys4@#h8i+GU1pUpkq%utQs z5nW;g92#B3!_PkZ!ym@aj-QR1Ob)+_HhbSd;_k3dx5tk+D1S9iY7(ipgl zqJMFi%U`)&0)%A9Ec(l!SeaLp*UutZZ$Gn2k|Ex5bWT&As@Iet+UCoz+pl^g$Kh9H zXf3CfunTMtmeymO{qD9Ww~L%-4r6j}ww3bGzx}q?xz4nM`v= zEqskQb9cRNHrN`xZ5o^n2J(c+h43`Q{MhKz`C_$MrmxbAWU~^=ati)dddak+=@*0LSE34+chSF=^aC&H`#roKNM=Fw zT6WUq9H`j#H&~RHE0Bl-q?tOU?!GpL(<(-ZyCtO-xaL7Qt3Ar5WjF!itK!n@j;#+x z3t_bG$u2tmJLyXDHxUcf7O0V+vk}^U<*E@sw#Ve&+g%A=53S@6>YLz~T z5!IT*<4R^!!^wo%d;hfcLT#fK$&?&-eaA@DpAz4=lsjfo zFgow@nWUg73XOa3+#zYzB1+}t+loWF9`rGX<^7g-l&g$hJMjNB>^AH_`Aqa*aB%i| z?>BsA+I_uU7Or#g*4qt|KJ0Rn$7lMh+-e-rgX%#$prDS34zI*dBuWb)j%4UY{Djac z6WkPo+|?=H3@ROTO)jPM@Aq+qQ=s-6O?_g$8TNHHWn*uP2e6PSKg)bLZRzl45GSbm zHi$1Y(A=k}Y|07b6{};W>y74gu6@aLU(&)x%X3C+Yb|lZR@N<5vP-%V)3~Jb&gax$ z^^VTj9i2buj{fAwnSYr}UIU0I&1>&{*)Hq(7o!X8@%uC)Vd{ufc9RTN!ws!~l=TBh z1zrNLB0Z$Oh zmo`&`hiZ^IDN1*qz8(q3oO!IYQGBr_Gt?tkXekwjrB_;d1{-ApO-jboM=*nr@>!4x zu>qL3g>u;qXn%@6Y`x!*i5%~OH+YcglZF(j0))iACE?FG$ zk?^z!|E=J^MRXOdqa{HsHR)f|P4szpt!n`Mz?;V6R+@-eeJP z`uXXzd2|&g@Z%Kb}*0SXci#x`2-r{9VA`E2sq4Ar{o8LI(-!S(d+EjB_nK{kM@hfGv;YsGdy-2tRQ8jC?Xp7RR-?(enR)O7gwO|mS> zgx;ySYqI{Q+Z|6i4{dp^T0T}Shjy08A*nm|fByYlJwL+x84tQy0NuhKg_BYeU+9Be z4DebG@X|#79bJq&!;j!|7tu0a-Dg0W!^ykxP7Kjl4AHS~#ve5FNpDiXX)jlLbV^lF z1vDQt8?=pZ6ZJPV1AmzJA?+N>>x;cbhsPhR_P)4Rxw2F$Qx@4M@&CXG;NSm+J3E5} zmGf{77uB6l|1xJVkJ816qLs9&WA4)hu?@G)-NWp!9sXrn>T*bSfQtkc+Zg|$W%m^S z`3(Pg27S#r{ks**K4#DK8 z7H|UIBG+Rl+K*vCnVc~1I+q#=uaY`}RamtSg&a%~k0PUv#;(21T&4(`bHMx3r48{Q zIVGbT9Vw-u9kp4ci^bXh~ibH_yrUiJXma`e0h4LZ7f-s={B?jheYgADA3=0|-VYa%g? z2xS=`1*e1ld=>;hF8eSTZKD#EVn#dH7raxb0=zJs2hUrbZ2#Qckw2`NnuHw^txVTEn z7j-ZS=eik?6^H^=&h+YJJ-vd;OAA!%^a?J8tol0nIw-@BA6KH_QlU++@HY7nZ%&u! zcBl9m$U9iwK{yA-Dmh)wKYpZlp_P^pJ^v6IK4}bm(u(s(m;LyILRo{{N`|3o2suq`-Ajd}^`CX$VlPw0!4LLOCtk6#4bk5%MOq71g8w{qQ2|mr|g4__G zrcIGH%pjd{xE7SqQ@YDzF-NtMjMkEBXrzB1^Qa^BVbpSsBiwt+m;JUDoqXJs4Ufy3 z*C6 zU|-%`9JpQvy+;f>l4%D$!=Cq|10v{D7-!DeGH%kN%{7E{6RGUcZUA})T5c0k);#m9 z!}LR1ZVeHupJHGEbQg&P+uh!*69PCdHw*5glA$W4{Q!3`8@5?(jo}1e$43J7Mz+1P zHbYs_yzEI{RlDh{%0pnu7@M@JG>=WED&1vJnxt<~X)r}6fjJOXcc|n~snUFveMoaP zJH9IIN+M3;P*<_wP^dz&{{PF-IlI&ZIW;8c9YO0bb+rOGqGIvWS8#9Okp6&v19-rD z6`&masBh`A;|J$kr#D_b&<(f3a5R%v8k(!Yf(hJNN7kGXJJ{pPw zfYwnVaJzddXxP3=Zd+bl&4x*Tn6z@8BHa@8bw%1hXeUA!6@9%c*1}yH9DTQH{Jtc< zJ5ryJW|BvO86W7Qo7nJtppN%D0_J2LPlsn`Si)b7pC){rH(!zU6{9oIeeNDwo0GPS z2QQOkx%^vJU;UMaq}`{9q_^ZWD6hAvqLuX$q??l{G_&61y!s}oQU~@6au5));WZgk~(65#=qhfN)x>R}}bp0Sos{a-FU8*WZNbNq(XK z9{n5XK00mT-ua78hAhXcbWxQ0w8oGZtL&0K&XdJYmn7O1gwdl>D`%kH5PMp0aRu(d zih+c4?Xn2^oCPjHGYQ)70%iF$y=Gbdq_Vf0%N{(4tGqX##}sbe5z;ER>=n#f^Jbv1 z#8$S?X7EHg9uIePQMyc+om%i?_isC!QKv+%(%YC(?$N+?pC$C{n$zH>gVUV`fcRr_ z2-rxGQwtiWO{+sD)m0^y_MBH#06T-AhQ?9Xc1;Evq+Q>Yfrd>dztcYGadwUVV6f3; zHWNU1De5ER9a;{z+V4|cTwbn31JU_Ns?>X_GOFhDt$=eUpgHErj#pgk8s)W}$*MA4 z6%2)4R}&EP0%CrE+Yse&m=ahc4C#fD8t0frXL_l&yU4I1?X@u$AU5rl-r4Ll@040C^Ft=q zGi;!*Y}%`%nn!V?BBf!=YO+#MU4-V_%0%(%Y)Z93L~G8>qPsa`*OW;$C4V(N=gm?r zo6?@fCS$rm9KjP;9I?~K(A7J7&k>U?BjQ?V77MbuO_>7CvwfB}E^&aiHvN7E&9LLi z+=h>fF04Q@vm6#8LOrAFfYV}*I>WgqcpKg+&N$G=l%)Rg@s*y_OqlH<(|E@egj|-x zNHWj8YA!rJeaSa=t0UT4`k*a^m$e*{7vws7XO4_sKUI#4_*OhWC&Qb;Mu1$&cj#oe zg%AR|(tvCqKL!^vCSeaI9Z5fuLgX{tlu76P{-5K8Y*o{_TV{RGL+pUm$?G%}4E zPCGV)%XL$@+=l0Inbs~LPrOT^QMrJ#;O?B^(>VEzHJVm~jXBAuHMCh7xas!Rb5r1> zk!rLoC!BS_9vQjy5K>O=3#--I{{vnmYzo>ab2d%7ZrMgpoOl;e z;$CYq-5Xj>iY61qQ7tWq)H$u}hP?X7^(Vb!Yp?TrIk+l!V%+)NQbqTCE%zxhm+g3c z4p!mLw{>f$dK8(tG{rcPpt2OAqxc#o7Z=3V+5RQ$$8%oV9vaHdTYJ-b*_I>uRJ&b8 zY~yLZQx%=VYq1CyV9zHj>NK^k9SFVLh0tq9mYm+VvwUhB#@0y80rwc?Ey#7Tqk9T>gG)^7PQ7Wrru35&x|0uXR$2bjXf05!@F9g6U8953F54=>7-x zM(9fo>igo|tzo9q@$9uA-AheIMEQ85K~+d=P%7JbpG z>pwwNlqYu)LG5`3@{Al~d5@i#%v-9Ors;{`sv#0ju+qY*gUwr-ji?^x;g7fL}ddzfm zxymVb39Q5Q%(!>0);aKTJZ@suw&w97TuW#cGj$G;86T5|_(3tC)?h21(r*j3UV z9PpT6hnr}#o;bY3Os<1TV@_txLtc7%8Yx#4>KbE!6f?DW_9{^Mhk_FK0hw)CC2?;- z=j9-~zU(=tgjQnLlug``04X_ZguTL}T1!!A3h~?!yE`2cEvOB1bUL>#zHlVWNt9X= zCq27yNs3uQh>Q{^UL^VOoYL%PBz+>XC3Ti*qf2m@S^bIf)*jjGFlaOYMQN&D6pD3K z?HXvv$ZmvSjt$HxRvRX`(Zeotj!aeDwCU(-ZaDRgW00NpSgX+dt`16Ti+iwxv(OzI zB`)l`JOBOnia^pXTj%jC>3H_ou%f>38twBjII% zv}S@J9gM@HKaIk}KaD0VJe6U0=={P{kEJ87D$>suEe#Fy)qHW|Yrb)xp`@y&!aI5( zD)N_f64l5ykcI(-TqXG>ecR-gb-m?49{~S@u0KkFLC)aJh4(!mOYg-6g+(?xq zO8e%AvsZup?!~(=zWF**EwYJPGfMQ30&C3l#iIDFr|?`Pe2cAaq_VZL)YIJE9?J`# zJF|tLWcea9bKTCUlOV^819e{zS})+N^i6PASv*~EtB1}mb$FgZ+iB}GduiRbu`iG` zYJCwyG^7?seXHDDO3F>jo=1$Kv5F|MV0Ylx9dcd&@%Edq+jb6r`5b4XA%7EkM*x({6#_>R(DSB!F-~ueYE<* z=+-oA;xzM4?BUjF+YA4%E%R@US>L@DVS+ytE4bJnwiI>t{Z?YJPX4}0@vfjB67N<3 zL8S5r5OSkP{C_O}j^^scqJ#Yx%v*iEep%ndP4*qN5sX9tS5U`;lPG2AWDshl9b1NV zN2%f28>kcw+qHqRnBD(EKj-gd9Vja*0>q@?ixpf?L56P}xSMFxZDJ`?Ks$9UL=d1u z3aG#xir^wzh0#^K5JgB$88Jz-@nod;?J^!smnW;~vftOX{~sXi!^y?;1EL*Zz;(Qg zF5?f;HV&4D7yS?6;b+k~Z1|tyzt`~J+t?I%1HW%hvgr*g@EwG`gRpn1z^~)${>`9@ zUdEUGcLRb({`zF}@#ELelaC)?;;)y_HzCl&b(U{ZS}Q-r!PkeI{!6U;%eX$hIn4U+ z=F{_jT%7(iKm0QKnSQ|`1HWI3-^cj-t@!;Ee&1c4Zs+lN1b-l1{4@PHp2x50$J2TI zw!c0Mj-Ndn01KYmr_6E+c%SXmRc%KQhF-jokGr*z(btz+uX=Z({R(M_NFO0piNNC;W<+T_5q6>uE>1SnLR_c? zuGFj#%k(g)21R&O{o*&NZrQ|csDF9-X5axU)mO}KvuJ&*b4yB+4_=ZYd+*m?M^f&6 zsN~&nI1(kMU}sLUu!sX9!XyPI$gl9|DH3AyxR8{Y{BevwkZ@~RQvTT&o%K%nt{E3u z{~2@q1?llUY=TAJUwwAf?vDhW4KoXbb!G_b7_Tb)p(as&_s4TJn=0gZzW5tU;06sfUSMe#*yT{Sf`4Cv_^yV8>N|SNn z^TBwgza}mBjef1evbiblr;(zPtgK>Pw*4qkbW-KY`KN4qlmICz>C?kfpF-0@%G}jk zPNAgc`q{VWdXTG#P0&skRqLtutJssZ(ep-LAeC3tbJ|M@?4<-~+ywVhcADUwx`02M z`P3o&%1^yaafByktc_qIQuEIT)PKd|a@?uY$tChsl_i!Z={hY|wslc~Q!Fp8+u5u; z&}yEZcKy?>-5dM<>msWjcz09Q{dRs%wWQ+jZzg=9+M;SFp;*Pi@R_hj0fK5-pg#H` zieHL(Kd$gE31q}C6v+JYWF$3pVp{EA+ce@2pcg6MzZO^XZFZBQGSI`8p31$a5D>8w zDoBDdK=u3M$IpKCRj6o9xIuDtxdK0YUO|*>j`eZp>Tat|gu@Bv3 zA5N}G*ipo5s`~@fjWx#?a+|~}xl7_jBpI-)yI)*V5wd+7FI1$+|!|5QHnFSDvn@&)cM_4DJ$<9~u|z-kSUXGqg$aOTt5o}5==>*>9) zfD7TuTnLL3_zy3H1UAiLPMd1cAB%0Zz}=KQN0n*(XNCW4f@E+Jo>b!3O8&Z#zXHqz z>wg^nW>SYp^?hQEgnwVKRq%kV!E*nTL=SJ%b(TDA15noAkSUd@xfWYm#KWhDBySi# z`_rM6ISj|+L&1bfp+kQ>8fn2p|Jg{(9#E>aKch+=zQ5Rkvi;NM_V^Pf_xLxRUA)wN zGfWbPO)LcsNzA7&G8?OG0n55pHZ5pPR=^6tO$In)qJjP;Cn=yIP5B{l>f{(8=y-Yig#;X# zTFe%GitdM|%eb?J0%eq>9m~_v+;U<7D}H%8cET23q)c=VY3XM0!JK?`|ahW~f zy2Wh&T2$y)n^m2`qI{s#Q0D%$9rv5=i|J;+ozPsoxJD1-4Q!7ixV7av#elI1IHrJO z3i#F6Ym4Yi&dCFor^@QD|V1o<$w>)OBQw2&q`2Cu9a^$c8@{CG>&%spJx@{a)~lL3TF zrjny+5d1cHW-`&|Hf9-w!svgU2u(iW*%22A_Osg+ua)W7>Cc#Ja`a<4`!PR?#E~P$Otd&%GTPs1nL#LRubAY-c34Y7U$ggqcnH$d#uoa4|Zw%t;Q8*_;j4K zC353%-xCp;Hg2c4B3vcL>FbBH9FBAuCsU_-&q@md%n`vq;CpJMSIXSF~|)#V zgTbp}%_-pNT{B}P5p$9t*sYxD>9-DZ{g zhC}!YGq@KfM%m-@IO>G2xGqe5@6(3WCmD%=TGAD5rna7`QIG<++)zs0 zTY_;i7mIYLlL~MA0fD{myR+VCvaW6rJ^gIRHNwT|moamY@;rq7;vCohH?$OzEVkfj|f5 z;$u%5vN5phu@A{#`hIZ>Dd#GG^&Bk*^SIJ(8*&3FdX+dffy%d0eVWb#@!L8KaM^e= zAnaB)h^;|6`b^s=dv}vs2dpVpfi4xxJDAJfDfI@?Rj6+Bybwc@pr0?gV~&2T`bUVn z2F=e7@ySXgEQ`|K)go8{5OGUSyjvsky~cf3eP&iUO2d4neZ z3Y3M&EV0LNL%+OA7g{mKcfQH9ZI|;38=Isn;*O4e8DxU*48rw3Bi?~* z)WkCKbhYj9@$k00d*sQqi_*e-4G1c{&3d0ocI_I#e$}#Q54%aSEb5HM1@A0zyKSxD zYhFT^;eQR%P!YRUQnJ9}B=I0cRZ45fx@>}YS&D{WrA-_XNM5JbGGbyA$5LK?9b_;i zx3-mBZClC7vkG;%nzLQa$vvfSsyEhDm(6)jqJR7&$okb`={o_@lgI$b*G+^LuGWe- zy|OP2KNnnw8sTf|DMD+%l7OJZ1=B?1ZSL4WfWFfg>{Z>?0;awolv0_Gj)DAGckjOq5JX^rz#29z$B;?kev|oSWzSu-p5IJhoF%o;6pJIOkSMDRgf#dDiu${g?#z>B^=zCAJRr8 zm5(`5l2%#ig;=U$sg3^ykq^S8Hsu*k;fo4y(wQ4@^vpfD6spbH&tVFyY;?~i6!i~Vu=9RX3R`G|Ta7<|x+oLxS9g1-kB^bt3Y zeIvW*q2%I8k09xu&|?rE4OtH99rIG?ifQJ+b3|p47=L{`wwXzsSTfho3NoWp z(C58K;u-3_CHKAsORrpH!`VcdTJdRSl8vF(Ox^7;FE_$Pt<LcAlA8Yo$RT4|y}iJzYwVc(uVF(dN1$K#YEh-xkuB>(R*R<0z>jFSz3 zX${R@-oUMSz^K3jLzW#dTI)a)cn1y@CBBnpyzAzs_d8$|Fd@kvuS1xG!}8;sbR2=pM1;oFcYtU)Zk4dRmw4xbd`t>RxhD(DS?Z&steK~OZ|y!I1I#3)F7O6JL!&$))0n%o?ay%GPnW_ zJ|ZpqEEo1@mGM}ml?+!(m|tm!;380LAvaWtPayOTm%{bB-n!Z@Ox7woV%$qHfKm}< zd{^Nem1;BCoIZg}(jlb^!RICArb^xNBXXnj)?VNqRBRp({6%Wq43+qzs^TXL0-{{@ z^tFmAkqVYt=q`&aB=v0OgRPg8=*tUp+=coY<@GC-(5q~@Omm#41a`J+ksaE|8rmIx z?Ywo`)j{k(v9nP7!@5ctrDFuseMhrOiuR!a8@#lcKY(LJF)}T(GES%ENlnl1Idk9E ztRg6l|2CnIlWAbx<5yzCe_1S~CZa9d6-)axBhlX%_*f$)51t74z>`9J$Q|!4=7utv z_Mu^~3h4oo51>@d5rl^9nI|iPRTHmoT*-M-P3x0J1>{xES4m_K3ed$o-m4YXHNJfO zayEYGl&mF+VbC`t;e(HRYav!TDzP13cds(I!a{S;Hl14cv~KRAzEK-VU&3;mN|h;b zYn6KG1o|Fu1){K{8?KmYMNZ>6G2L_d%>t%%DB57DA&K9j=dHZ(s&z5RjjEkq zACvsl1kdHKJLyP@uY_-0*T4~g>mQK$WzbamiJ z@7bfH85jKI14ECH$~pv7d34__gBh0SZ^CB-OGzP(xqhRjr(I8EzxnQrY@2ttHDY>y z<))Yg##jR(A97ED`&}gZ!L93=)Plm*#}C(AK}OdRgB9%um3m=S@=VJecSh`MMOx%i z38@fFenB_Lm(t6)j)UKK{-J2TY$^e&adeFDDJXIup%-6LW)cVROt;?B!BO{4Gztf5 zP(4dCV7FbwF1wJy_+Frr>xt($onD~CA048eUd*vcKf-B#i|9N8O0DV#R!hf|QK(^g zXdIBgTAGK?UpV(fXPgRNx&vj^Cw;gOhSJ5emWQC8-i9vHmgwBc#86I!&|gc&4?*~)TZWL%51!o zjhc0EW2T&X#eMFZoA#5y(@vq?(`=p`*hc$Ic&lC`xm)2BOq+@U^kZ6k+@iJ}SbTFK zww2yqN&%x~Q=%aQVsyvkfi^RbiQbi6nrG^kgE5?>Lvu_`Ygeh%b5V#k)WgeFah|M5 zUM|P)EUUgMHdVSTe$Ho7&A}^u5k7&124N~sMzoG8)_wX{v?gM=1x@ggIB5{N^#?RR zsJWVxLnXGa9Gt3LDTw86hi!qGk_Wd*?G}%BDlN3Rf{SJyZ%z|M$xg3M*3&Df z_UbwGMXzKawUbA2Tzvd^b;20p5W*KNhj$)fv8Pw_D2WiB{_4ao?_$4vg6+kIKd&A? zPELw&;k{bKsUgPVnaKpbEkfHmhP7WC$n5CE5*xD&r#aJ$7EApCH8EhR*KDaT5ICO& z^yAfC?olFdvveZEB`HC$M0k#ONnXsGq^g;%l;r=o2^yL*mjlQ2tlKWITUB}@2!LWY z!M16+G{lvjwB2PQ`l9tf--NK{bH?^AqN^BR7W?r9ZU}vb8;HMAw2W73sjp9Bf$ev@ zh?#3nmyH9OVlD205599$r|FN4^VGAeq@oA`yc3}U^6NC91p434nmtlQ2-jw`Ix^e2zMA}efjIP zNA^g1va3I2Of2pN2AYvn!R`uSM%6W(L^v)N z(MB9I%%YlU7GEGP3Y~(xCJT)!Wwl*vgC*N@RCaVjfHjDo*loAX5VKI*C&Pkq_LZNU z6*diUU)6GIQ_U`mK+Q_0K1m0q@ybS0N4B9;av4a<1RA&@Cicj;>@%(LG;4OqBh>M#YbSAl*^RggW;k@j6{P&NQ4-8e zyJbiF+IgYQe^S@7^+yF&*?2jGK8|c9)T84O+)JINAis1AilgHwaqD#~ME0!{CvC7- zy^UVCtcw>-6Dv-SaEq`gA7rQ}x4#v3-?hSSYQxwCv1`Jur`29+ACk#mBS#8q7%V>A z%ukupT92%bJ&QM6u#Y{UVogU%WVT}^XevkunzRL3c2Z5V-PW!d^5bMr^Rc-f@jdhtLzbIic6IL;J+h*lF|GPg+bC`z73@MHo871#~lHqA|SRAxOK}Ia!fd ztdYm2NwWFrg)hiEpOQ?eMUrWw*SiYXV+i^_CZ~E)(+pi0fD_LcdD){BNN$m_KZY^9 z!xhoA;Up#v)!15Y>ps6C`{n}a^V_k{u0!}O6sMv579zw{#m*tI!YfSx(s-861eJ3b z;%PA};xs72Nns>=RMi{Rhzeq-&Z5^n1;(*3E6O>M)G_a9pqy^znsz2_8JpQ_rk=`I zu|kf9QMZImqXU`aVF^s5qC(OBBrX~hu!d_eYcK(Z_DfVhRzHF|oFq}9Dak;QA0oYp zP`^|G&Nr5$f{+l@;znIW%S%jDcf+O#|InJ8)~G--TrYPy+)9(H zJGy516NOdI7k!UXCME9|5hXC`!iS3Dbl=oY?g_6DAoN`nR{H*bE%kk# zJP@L$2r0nuu0CIMw@#*G^3 ziD|S`7HsVAJl_YkK@>eCMl1EY^uLr3Qghi z_Nf8%qH%P)+;H)*Z4(mVGdvom)s}t@3{H{1gZ8ON+#HaUIsZ9EUrY)lO zdko%Ef7kA4VC<^BxXfMS!p2b&_>@j=$noRHv?SI3^d-@Zq7@pq?dn}~FzTKI)PrlA z1zaP)<=E4iL?;qi5v9vcrJN{_5iXMV33E-g(S)}mJZ04xY;Fc=mwXxwREt(gkRu>9a;rphp`~4^%45WkcqaWWMwI_c3IDbAE>nw)! zZ+7RqhGHe_&#&B@et+NIoVd$M7huHUqHhGZu-{aPx*r|=m_K|dd3D`Gxo>Uzbrsh8 z*PCnLqUoXSi@a^|Giw)Tiy*ztxK;5amNLB{i} zW^-;!Dgy?*IYyI*vTBBJ9!Dv+0zmygw6(T{D#j4`!(YWxm?;3O%{1sG$rn*1GjiC1= zO>owd*HY288MgRH$DH^B;wPF@%x8$~QfnT92j{_A%1we7Q!FVizGb5^afc^jV>)pM zIkLuR(i}D`!TV-{_YqqW6L*P3)(V)kZW1e5WEMwz4wFWp#goLaZNT(IvO%+Fk*#Vs z;gEI5zw~%wKJfk(%~PMd%i6PKd3t+lJS)00$NT$jRbGreK`lGEk;}w|*16Wk2Jqv` zy%ffr3lQ79mCy094=x%&b7eW(be$lthp@my0g?I=h?%7iL?HCl5R*zMMflh{=4`03 zbc22PP3Ibvg-)+BnW(z14qFf4lVUQ9NHL4PD$G3{!S zCui7Co6T%+@m`=3k72)D$)b;JRE3qRSmnh!OC{Wcx7>c5TB48rPK_NzVUs{);AMQD z-cPX7Dozn2Aa@oU2uDFoiG{AR3*s;|N`?{-s(scUyJ!>`M83M&&S3f~gE2nz-rk`E zq719k(L7FrtXXPYk=2q0`Y)Wlk61f|WcEc~2L;Nvp2zr@U7gyYgM99`p_oVBBLgCA z;11D_JH9u%hRoMt=qq+_nhUGOM+ANrkJ&O>KW#1yzzkFt(~yTFi;8*v?X7~E#s{5%iOh*2}qJuo(VIyDVs}@>?`VUl1nR4 z)-ify&R?fhh9<{Evf2xtq34S$n2gP**tU;n**c55$Y%QfsxHoFU@-#W+?O_ zvm$Pls`FuYFGP1&z6-*OKrJ#0f4=*Ek}J)3rYKAP6VhxeYvT{hA^O2;~4Ds)8;=p)QpI@6*2zS|F)vN`)^R zai3gizXJZ+AizO_FZW6GZIPjzL~AVT$7_6c?x`?(h<*hj!}CmPeuVVyrz1R$5znAP zZ~Yu=M_$XYPh?Aibf~0jS@o{W)^a>xQ_MKlSxr$3j52UaXF%nzUw=R+w^)oi|0*`F zP>v0nwme_$D5ZT+ebW(n=g2c8zG=LV}lS3(VYbc_vI5n{o4V*gd zhTIzAZ_KUG&hmNRLF~C;YqNbWFp)hMMhwYEP`#Vz)^kF>j`v$D)B1V5tIIP*`8HmL zc4TaMI1-R~Ek(BF*;SQPnyUo)ijvFLcRbH}c0qQ`q9%jl8|Cwet!s+dvdPtlOZ(JX z+H;1gu+`$sBfZrdv9&E9t=4s^)-Hc{vve>UOVi#a_^2W9TCHu;Hi+FT3q9%)+5DgB zcIM)7QgY9t((~-X&$O-;Newj@*!|a+!fQgFX7ycB168+_-MP;?0=|+d_)>U4$Kr5H zAW4llEXeVFmRV}OCACGQMjJjJw@fd~G_Bqh-zCc|$t&sgAjvORX=tx$)ivEzf}ZG_ z#kOv@j1qfc?qctR7Ci%bV|YKK=)!neNlq>V@=w*KU@s=2zKN1hsP+?%()%gnyjl^u z62yUDw3_0s!f6&SSgG>SGblWg9Tl_~+zWvN5Ws^P-S-UO z7YY@g7pU_AORelD))rBddl6@Y3*dL3yA7c@H&D1(${s(y7!0C|yH4ocE=JkbSZKbV z+mA%Dq-C)nKxqlLFMUD?X)vbid7qfbD~R$05%iKx4cmF0)e^0}S6p1QWkeyza8Xql z68F|cl@ULGkepY=3QC(EAhzJaXnH{Cf(L^?!T-=GI;$PPLymbcsnX>VbV@OlOP5X_1k7orrb26WaRlY-D03~%*SvYy=janfUt zcD-o)bkehARK4iwA0|EXDvT#Jg#D3+{S|1dr+?xhq}bGpJ{$4CSF}Pt`~9Q`XYg95A`pvHz zBt6>44q?1r7E9(PM-Cu~HczdfQ=NJ~4kFTW8qN2shzQ5?3o&a->eUEY1sTYEmaS!~!!p zt?657IE8wvXQGhU^X%v&s9PcM8y$vD(Ej&1!$nPk&Nj~=5!TEa4K#J^G&-uShg30o z_;?IE;-QHDoRPsv2wEnn(Qcn`EfwpQC;RwOo@zhCsf1_;JW}mII?Q)$LADL>C)*sY z`;qsJ57}GcW)AHG1@`DNg=YVJl`Rk&(knT`xq)LsYI1ZS$j%x=Jn=1`eSoDA3Cr_Z zpNBSjCk5vSXj90KVn|X^h3bTF2mLW3rEP}SNxirtKVjjI`Rph}-_WZ#&=JGKA9Edv z4kj?g$BzX6r?!XZ*$EHEg?V>^l~!t4dVYSjP?iHBEVHk60acPo@0nfjdFipYY|CV>G zy=~jTzv2i(ZB?=pcf~NsQ4DlVx(!@qgbPj}%FXvgNeh zmwicOK98s4-I2P78-t=P{orSOI%nw2X+u?dG$AkZpZPqE&(vS{SMJ7N z1KL@{>xT>jp`?@{2-PnYA^8G7;P4uthzTX9O7Jv?AY#Zuo7wyv&E)aBGp z%Pq5uRpr{Qy6b!5<4QfplZ;EMU%TjX5C{A{Di+sRk5?oO_3640O`0x`>?#7(eumFx z29P>rD!W*i3HCEGi>cIy8ZM4N43RV% zJpHC3kM>8fb^|qBuaQ-%wi0VCY-)vR&hVBhb{DF3MJ1ANE+hF;Am6~x@vDDRG-u@w zY*C5ntH=gWjW!JC%uU@104bzNDrD!z$+ZibO2;-rrT;$>Dqh?l?i4EMMWl(9o7LA4 zD*AT)Y>{%a+9gn^_E2%6jQLr~#PoK3KP=C{E!JGmOxNGZmZ_V@muvHzice1(gxHC_ zPYBd;)+~VAoSIEw0Mtg4*u7x4vypALxSG>vBPEKlKAM#(70Kz~(oXXGMmV#KnvG;OSf z^$5jLBZqciEBS<5s*U3vkVCa4K7Q^)Qj4{#4z&j8Z0S2}U>^MgS%*dgb>D0Awm+*W zrUoWZZ}b&e0)u=PPbeF-V+u_pw6_2|(s3M0~e1cowq*hFA> zlySb;Nyd!iFLs`7$T+zl&F%P)v~^I=c|zlB3@Xqw4F5>{85dnw%Y>DA-Pfos(!@cl z9OV*omC;TS`>gK%)$$tsAkD?>4%&Oe444RX)c9hI z9$;p2+KOaGLLJf~P?&b@@L$2=lml-D)QuPpzx)vZh zLv##yjOhXkDE-?jkt0BlSE89?(6qvXX)IW&+M9p&QF;kSZW%MRK3^r9j$z211|kLB zCb5aud3YIMcHy!0$?~k}C%o@bgQ$>^62U%a6ICuG3hg$B*UK1}g=TeRHfJiTc0=n1 zqahumw+oh;d!%Lz|3G#jhz#a`vW3_PPO;Z8O$MPU^hB&^ZBW5c1C3Ju+wLi98XXL(>RVmcn6bz0 zS{;@@2%ug1mP{qob!m2<*37j!maD?!WUggf*!?38UN|{Ef5K->dH~O?C;pD`7xluQ zSb27OjIf<`-UpHawptE(k#04BbQ17NVn z*74l6x|Z$W0G?&JGMxh-A;(DcWq+3Eq0$zyAR4ncyRtRQ{-8If0QJ26KjQu9xg%r` zM1)NDGVbE<{ISCbi(d0`OdlVBD8v5fI(W1Su|B%fIdfo!#4 zw&Jmqg@3O@k;6~89p1e8Wx#yhn4R`u1*f%#haNrn8406F8q0J-i=tTNo@KLKqR*dy z>wSMx#x18_z7NIYAK$*cy7urd`#K;dzh9(zkp#=o%Ld}n#cm$;c2_~Mz-Rd9f@ZWx zr=Iod{4J1Hm3L&AiI4ftV0@fpl1|Yon*}RIqi`T(Eu3lsQhzHdr$G@YwFQgIQv}62 zN5cVF!ZURH>1Du$(D>aRk)e5*Wof3HnTG=?Oj76qxSF8-+W8N!FE8JmU))@uzZ8r! zPUk&Kt?)XNG)Y47W@c!j-YL?KG%>Ta>4*SQfJ7P#KgX3DkdZFie)hOWvo;KGdm-))ZR=V#9z4b> zkz~+rESZCV8q3x3LK#3CaRQ9I>z+`RDJ7{C3oGGJ;; z=Iyo*Ohc?<1r9R*!Jxz`f3ztng6%0wGe$f%jKaH`7EDcQYbJ(7POE}?ZQ`uzz_y?* zRs%!6d~X;!9`zi;0G6saKs#Z0 zU7H}L$Fj?lC*rB6qJa^qF$6nfHO6fNuLNjQ&ROD0jn&Q?qC&@mcBjcKVqAw80IMp( ztV#tLsw7zMhYt_8?-}(oCa-`@suJ;mi!{T?L4H+N;@LUG7w$dg-z5*p*%D~z9zgKj z37iq>UuKUYIy|7KbVSObFCyzlTs8ECj>vPe@QG=}(#8(XkVQ11LNv99In!RGsK4t0 zx*ni12>$|Lw3$yCWT~`gJ;Pg$^&o+@bA|{54KNvvPruo-yDpKYPN{?fCq!Ibz5;3v zgQc$sSM@L<=c)GS+3lwI`RcqjN4RGa*#}J<38PswzvgEyfA_pOZ#HVz%mkJ?o6IFq zdWkCl6E%c9rjz#8rNQ`)xm$r~t0T1^ diff --git a/dist/fabric.require.js b/dist/fabric.require.js index c139dae1..194c1d71 100644 --- a/dist/fabric.require.js +++ b/dist/fabric.require.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures,cufon,json minifier=uglifyjs` */ /*! Fabric.js Copyright 2008-2014, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.4.9" }; +var fabric = fabric || { version: "1.4.10" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; } @@ -3151,10 +3151,9 @@ if (typeof console !== 'undefined') { if (!(matrix[0] !== 1 || matrix[3] !== 1 || matrix[4] !== 0 || matrix[5] !== 0)) return; // default is to preserve aspect ratio // preserveAspectRatio attribute to be implemented - var el = document.createElement('g'); + var el = doc.ownerDocument.createElement('g'); while (doc.firstChild != null) { - var node = doc.firstChild; - el.appendChild(node); + el.appendChild(doc.firstChild); } el.setAttribute('transform','matrix(' + matrix[0] + ' ' + matrix[1] + ' ' + matrix[2] + ' ' + matrix[3] + ' ' + matrix[4] + ' ' + matrix[5] + ')'); doc.appendChild(el); @@ -3254,8 +3253,8 @@ if (typeof console !== 'undefined') { heightAttr: heightAttr }; - fabric.gradientDefs = extend(fabric.getGradientDefs(doc), fabric.gradientDefs); - fabric.cssRules = extend(fabric.getCSSRules(doc), fabric.cssRules); + fabric.gradientDefs = fabric.getGradientDefs(doc); + fabric.cssRules = fabric.getCSSRules(doc); // Precedence of rules: style > class > attribute fabric.parseElements(elements, function(instances) { @@ -5847,36 +5846,65 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ /** * Sets width of this canvas instance - * @param {Number} width value to set width to + * @param {Number|String} width value to set width to + * @param {Object} [options] Options object + * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions + * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions * @return {fabric.Canvas} instance * @chainable true */ - setWidth: function (width) { - return this._setDimension('width', width); + setWidth: function (value, options) { + return this.setDimensions({ width: value }, options); }, /** * Sets height of this canvas instance - * @param {Number} height value to set height to + * @param {Number|String} height value to set height to + * @param {Object} [options] Options object + * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions + * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions * @return {fabric.Canvas} instance * @chainable true */ - setHeight: function (height) { - return this._setDimension('height', height); + setHeight: function (value, options) { + return this.setDimensions({ height: value }, options); }, /** - * Sets dimensions (width, height) of this canvas instance - * @param {Object} dimensions Object with width/height properties - * @param {Number} [dimensions.width] Width of canvas element - * @param {Number} [dimensions.height] Height of canvas element + * Sets dimensions (width, height) of this canvas instance. when options.cssOnly flag active you should also supply the unit of measure (px/%/em) + * @param {Object} dimensions Object with width/height properties + * @param {Number|String} [dimensions.width] Width of canvas element + * @param {Number|String} [dimensions.height] Height of canvas element + * @param {Object} [options] Options object + * @param {Boolean} [options.backstoreOnly=false] Set the given dimensions only as canvas backstore dimensions + * @param {Boolean} [options.cssOnly=false] Set the given dimensions only as css dimensions * @return {fabric.Canvas} thisArg * @chainable */ - setDimensions: function(dimensions) { + setDimensions: function (dimensions, options) { + var cssValue; + + options = options || {}; + for (var prop in dimensions) { - this._setDimension(prop, dimensions[prop]); + cssValue = dimensions[prop]; + + if (!options.cssOnly) { + this._setBackstoreDimension(prop, dimensions[prop]); + cssValue += 'px'; + } + + if (!options.backstoreOnly) { + this._setCssDimension(prop, cssValue); + } } + + if (!options.cssOnly) { + this.renderAll(); + } + + this.calcOffset(); + return this; }, @@ -5888,27 +5916,40 @@ fabric.Pattern = fabric.util.createClass(/** @lends fabric.Pattern.prototype */ * @return {fabric.Canvas} instance * @chainable true */ - _setDimension: function (prop, value) { + _setBackstoreDimension: function (prop, value) { this.lowerCanvasEl[prop] = value; - this.lowerCanvasEl.style[prop] = value + 'px'; if (this.upperCanvasEl) { this.upperCanvasEl[prop] = value; - this.upperCanvasEl.style[prop] = value + 'px'; } if (this.cacheCanvasEl) { this.cacheCanvasEl[prop] = value; } - if (this.wrapperEl) { - this.wrapperEl.style[prop] = value + 'px'; - } - this[prop] = value; - this.calcOffset(); - this.renderAll(); + return this; + }, + + /** + * Helper for setting css width/height + * @private + * @param {String} prop property (width|height) + * @param {String} value value to set property to + * @return {fabric.Canvas} instance + * @chainable true + */ + _setCssDimension: function (prop, value) { + this.lowerCanvasEl.style[prop] = value; + + if (this.upperCanvasEl) { + this.upperCanvasEl.style[prop] = value; + } + + if (this.wrapperEl) { + this.wrapperEl.style[prop] = value; + } return this; }, @@ -8417,6 +8458,8 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab bounds = upperCanvasEl.getBoundingClientRect(), cssScale; + this.calcOffset(); + pointer.x = pointer.x - this._offset.left; pointer.y = pointer.y - this._offset.top; if (!ignoreZoom) { @@ -8436,6 +8479,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab height: upperCanvasEl.height / bounds.height }; } + return { x: pointer.x * cssScale.width, y: pointer.y * cssScale.height @@ -18135,6 +18179,118 @@ fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Imag })(typeof exports !== 'undefined' ? exports : this); +(function(global){ + 'use strict'; + + var fabric = global.fabric; + + /** + * Color Blend filter class + * @class fabric.Image.filter.Blend + * @memberOf fabric.Image.filters + * @extends fabric.Image.filters.BaseFilter + * @example + * var filter = new fabric.Image.filters.Blend({ + * color: '#000', + * mode: 'multiply' + * }); + * + * var filter = new fabric.Image.filters.Blend({ + * image: fabricImageObject, + * mode: 'multiply', + * alpha: 0.5 + * }); + + * object.filters.push(filter); + * object.applyFilters(canvas.renderAll.bind(canvas)); + */ + fabric.Image.filters.Blend = fabric.util.createClass({ + type: 'Blend', + + initialize: function(options){ + options = options || {}; + this.color = options.color || '#000'; + this.image = options.image || false; + this.mode = options.mode || 'multiply'; + this.alpha = options.alpha || 1; + }, + + applyTo: function(canvasEl) { + var context = canvasEl.getContext('2d'), + imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), + data = imageData.data, + tr, tg, tb, + r, g, b, + source, + isImage = false; + + if(this.image){ + // Blend images + isImage = true; + + var _el = fabric.util.createCanvasElement(); + _el.width = this.image.width; + _el.height = this.image.height; + + var _tmp_canvas = new fabric.StaticCanvas(_el); + _tmp_canvas.add(this.image); + var context2 = _tmp_canvas.getContext('2d'); + source = context2.getImageData(0, 0, _tmp_canvas.width, _tmp_canvas.height).data; + } else { + // Blend color + source = new fabric.Color(this.color).getSource(); + + tr = source[0] * this.alpha; + tg = source[1] * this.alpha; + tb = source[2] * this.alpha; + } + + for (var i = 0, len = data.length; i < len; i += 4) { + + r = data[i]; + g = data[i + 1]; + b = data[i + 2]; + + if(isImage){ + tr = source[i] * this.alpha; + tg = source[i + 1] * this.alpha; + tb = source[i + 2] * this.alpha; + } + + switch(this.mode){ + case 'multiply': + data[i] = r * tr / 255; + data[i + 1] = g * tg / 255; + data[i + 2] = b * tb / 255; + break; + case 'screen': + data[i] = 1 - (1-r) * (1-tr); + data[i + 1] = 1 - (1-g) * (1-tg); + data[i + 2] = 1 - (1-b) * (1-tb); + break; + case 'add': + data[i] = Math.min(255, r + tr); + data[i + 1] = Math.min(255, g + tg); + data[i + 2] = Math.min(255, b + tb); + break; + case 'diff': + data[i] = Math.abs(r - tr); + data[i + 1] = Math.abs(g - tg); + data[i + 2] = Math.abs(b - tb); + break; + } + } + + context.putImageData(imageData, 0, 0); + } + }); + + fabric.Image.filters.Blend.fromObject = function(object) { + return new fabric.Image.filters.Blend(object); + }; +})(typeof exports !== 'undefined' ? exports : this); + + (function(global) { 'use strict'; @@ -21350,7 +21506,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot if (mouseOffset.y < height) { return this._getNewSelectionStartFromOffset( - mouseOffset, prevWidth, width, charIndex + i, jlen, j); + mouseOffset, prevWidth, width, charIndex + i, jlen); } } @@ -21363,7 +21519,7 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot /** * @private */ - _getNewSelectionStartFromOffset: function(mouseOffset, prevWidth, width, index, jlen, j) { + _getNewSelectionStartFromOffset: function(mouseOffset, prevWidth, width, index, jlen) { var distanceBtwLastCharAndCursor = mouseOffset.x - prevWidth, distanceBtwNextCharAndCursor = width - mouseOffset.x, @@ -21379,10 +21535,6 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot newSelectionStart = this.text.length; } - if (j === jlen) { - newSelectionStart--; - } - return newSelectionStart; } }); @@ -22326,8 +22478,8 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot }; var origSetWidth = fabric.StaticCanvas.prototype.setWidth; - fabric.StaticCanvas.prototype.setWidth = function(width) { - origSetWidth.call(this, width); + fabric.StaticCanvas.prototype.setWidth = function(width, options) { + origSetWidth.call(this, width, options); this.nodeCanvas.width = width; return this; }; @@ -22336,8 +22488,8 @@ fabric.util.object.extend(fabric.IText.prototype, /** @lends fabric.IText.protot } var origSetHeight = fabric.StaticCanvas.prototype.setHeight; - fabric.StaticCanvas.prototype.setHeight = function(height) { - origSetHeight.call(this, height); + fabric.StaticCanvas.prototype.setHeight = function(height, options) { + origSetHeight.call(this, height, options); this.nodeCanvas.height = height; return this; }; diff --git a/package.json b/package.json index 518d28d2..4daa0c33 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", "homepage": "http://fabricjs.com/", - "version": "1.4.9", + "version": "1.4.10", "author": "Juriy Zaytsev ", "keywords": [ "canvas",