From d6e292e4829ae7499d677800aa7614018dbe04ba Mon Sep 17 00:00:00 2001 From: kangax Date: Sun, 5 May 2013 13:23:49 -0400 Subject: [PATCH] Fix text rendering. Closes #590. Version 1.1.12 --- HEADER.js | 2 +- dist/all.js | 55 +++++++++++++++++++++++++++++-------- dist/all.min.js | 8 +++--- dist/all.min.js.gz | Bin 47952 -> 48061 bytes package.json | 2 +- src/object.class.js | 5 ++-- src/object_origin.mixin.js | 31 +++++++++++++++++++++ src/text.class.js | 17 ++++++------ 8 files changed, 93 insertions(+), 27 deletions(-) diff --git a/HEADER.js b/HEADER.js index 6f654e12..f1f1d918 100644 --- a/HEADER.js +++ b/HEADER.js @@ -1,6 +1,6 @@ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.1.11" }; +var fabric = fabric || { version: "1.1.12" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; diff --git a/dist/all.js b/dist/all.js index 17efa112..d088f0ca 100644 --- a/dist/all.js +++ b/dist/all.js @@ -1,7 +1,7 @@ /* build: `node build.js modules=ALL exclude=gestures` */ /*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */ -var fabric = fabric || { version: "1.1.11" }; +var fabric = fabric || { version: "1.1.12" }; if (typeof exports !== 'undefined') { exports.fabric = fabric; @@ -10001,11 +10001,12 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati /** * Transforms context when rendering an object * @param {CanvasRenderingContext2D} ctx Context + * @param {Boolean} when true, context is transformed to object's top/left corner. This is used when rendering text on Node */ - transform: function(ctx) { + transform: function(ctx, fromLeft) { ctx.globalAlpha = this.opacity; - var center = this.getCenterPoint(); + var center = fromLeft ? this._getLeftTopCoords() : this.getCenterPoint(); ctx.translate(center.x, center.y); ctx.rotate(degreesToRadians(this.angle)); ctx.scale( @@ -10946,6 +10947,37 @@ fabric.util.object.extend(fabric.StaticCanvas.prototype, /** @lends fabric.Stati this.setCoords(); this.originX = to; + }, + + /** + * @private + */ + _getLeftTopCoords: function() { + var angle = degreesToRadians(this.angle); + + var hypotHalf = this.getWidth() / 2; + var xHalf = Math.cos(angle) * hypotHalf; + var yHalf = Math.sin(angle) * hypotHalf; + + var hypotFull = this.getWidth(); + var xFull = Math.cos(angle) * hypotFull; + var yFull = Math.sin(angle) * hypotFull; + + var x = this.left; + var y = this.top; + + if (this.originX === 'center') { + // move half left + x -= xHalf; + y -= yHalf; + } + else if (this.originX === 'right') { + // move full left + x -= xFull; + y -= yFull; + } + + return { x: x, y: y }; } }); @@ -16214,12 +16246,7 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { */ _renderViaNative: function(ctx) { - if (this.originX === 'left') { - ctx.translate(this.left, this.top); - } - else { - this.transform(ctx); - } + this.transform(ctx, fabric.isLikelyNode); this._setTextStyles(ctx); @@ -16383,11 +16410,17 @@ fabric.Image.filters.Pixelate.fromObject = function(object) { }, _getLeftOffset: function() { - return this.originX === 'left' ? 0 : -this.width / 2; + if (fabric.isLikelyNode && (this.originX === 'left' || this.originX === 'center')) { + return 0; + } + return -this.width / 2; }, _getTopOffset: function() { - return this.originY === 'top' ? 0 : -this.height / 2; + if (fabric.isLikelyNode && (this.originY === 'top' || this.originY === 'center')) { + return 0; + } + return -this.height / 2; }, /** diff --git a/dist/all.min.js b/dist/all.min.js index 842f9701..5318f5bc 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,6 +1,6 @@ -/* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.1.11"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)},toGrayscale:function(){return this.forEachObject(function(e){e.toGrayscale()})}},function(){function n(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function r(e,t){return Math.floor(Math.random()*(t-e+1))+e}function s(e){return e*i}function o(e){return e/i}function u(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)}function a(e,t){return parseFloat(Number(e).toFixed(t))}function f(){return!1}function l(e){e||(e={});var t=+(new Date),n=e.duration||500,r=t+n,i,s=e.onChange||function(){},o=e.abort||function(){return!1},u=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},a="startValue"in e?e.startValue:0,f="endValue"in e?e.endValue:100,l=e.byValue||f-a;e.onStart&&e.onStart(),function c(){i=+(new Date);var f=i>r?n:i-t;s(u(f,a,l,n));if(i>r||o()){e.onComplete&&e.onComplete();return}h(c)}()}function p(e,t,n){if(e){var r=fabric.util.createImage();r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function d(e,t){function n(e){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function r(){++s===o&&t&&t(i)}var i=[],s=0,o=e.length;e.forEach(function(e,t){if(!e.type)return;var s=n(e.type);s.async?s.fromObject(e,function(e,n){n||(i[t]=e),r()}):(i[t]=s.fromObject(e),r())})}function v(e,t,n){var r;return e.length>1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function m(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),n[d?"lineTo":"moveTo"](r,0),d=!d;n.restore()}function y(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function b(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")}function w(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}}function E(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function S(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]]}var e=Math.sqrt,t=Math.atan2;fabric.util={};var i=Math.PI/180,c=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},h=function(){return c.apply(fabric.window,arguments)};fabric.util.removeFromArray=n,fabric.util.degreesToRadians=s,fabric.util.radiansToDegrees=o,fabric.util.rotatePoint=u,fabric.util.toFixed=a,fabric.util.getRandomInt=r,fabric.util.falseFunction=f,fabric.util.animate=l,fabric.util.requestAnimFrame=h,fabric.util.loadImage=p,fabric.util.enlivenObjects=d,fabric.util.groupSVGElements=v,fabric.util.populateWithProperties=m,fabric.util.drawDashedLine=g,fabric.util.createCanvasElement=y,fabric.util.createImage=b,fabric.util.createAccessors=w,fabric.util.clipContext=E,fabric.util.multiplyTransformMatrices=S}(),function(){function t(t,n){var r=e.call(arguments,2),i=[];for(var s=0,o=t.length;s=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function e(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r"),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)},toGrayscale:function(){return this.forEachObject(function(e){e.toGrayscale()})}},function(){function n(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function r(e,t){return Math.floor(Math.random()*(t-e+1))+e}function s(e){return e*i}function o(e){return e/i}function u(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)}function a(e,t){return parseFloat(Number(e).toFixed(t))}function f(){return!1}function l(e){e||(e={});var t=+(new Date),n=e.duration||500,r=t+n,i,s=e.onChange||function(){},o=e.abort||function(){return!1},u=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},a="startValue"in e?e.startValue:0,f="endValue"in e?e.endValue:100,l=e.byValue||f-a;e.onStart&&e.onStart(),function c(){i=+(new Date);var f=i>r?n:i-t;s(u(f,a,l,n));if(i>r||o()){e.onComplete&&e.onComplete();return}h(c)}()}function p(e,t,n){if(e){var r=fabric.util.createImage();r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function d(e,t){function n(e){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function r(){++s===o&&t&&t(i)}var i=[],s=0,o=e.length;e.forEach(function(e,t){if(!e.type)return;var s=n(e.type);s.async?s.fromObject(e,function(e,n){n||(i[t]=e),r()}):(i[t]=s.fromObject(e),r())})}function v(e,t,n){var r;return e.length>1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function m(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),n[d?"lineTo":"moveTo"](r,0),d=!d;n.restore()}function y(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function b(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")}function w(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}}function E(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function S(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]]}var e=Math.sqrt,t=Math.atan2;fabric.util={};var i=Math.PI/180,c=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},h=function(){return c.apply(fabric.window,arguments)};fabric.util.removeFromArray=n,fabric.util.degreesToRadians=s,fabric.util.radiansToDegrees=o,fabric.util.rotatePoint=u,fabric.util.toFixed=a,fabric.util.getRandomInt=r,fabric.util.falseFunction=f,fabric.util.animate=l,fabric.util.requestAnimFrame=h,fabric.util.loadImage=p,fabric.util.enlivenObjects=d,fabric.util.groupSVGElements=v,fabric.util.populateWithProperties=m,fabric.util.drawDashedLine=g,fabric.util.createCanvasElement=y,fabric.util.createImage=b,fabric.util.createAccessors=w,fabric.util.clipContext=E,fabric.util.multiplyTransformMatrices=S}(),function(){function t(t,n){var r=e.call(arguments,2),i=[];for(var s=0,o=t.length;s=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function e(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t=0,n=0;do t+=e.offsetTop||0,n+=e.offsetLeft||0,e=e.offsetParent;while(e);return{left:n,top:t}}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t});var f;fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle?f=function(e){return fabric.document.defaultView.getComputedStyle(e,null).position}:f=function(e){var t=e.style.position;return!t&&e.currentStyle&&(t=e.currentStyle.position),t},function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.type="text/javascript",r.setAttribute("runat","server"),r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementPosition=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){m.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),m.has(e,function(r){r?m.get(e,function(e){var t=y(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function y(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 b(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)}function w(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function E(e){var t="";return e.backgroundColor&&e.backgroundColor.source&&(t=['',''].join("")),t}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.multiplyTransformMatrices,o={cx:"left",x:"left",cy:"top",y:"top",r:"radius","fill-opacity":"opacity","fill-rule":"fillRule","stroke-width":"strokeWidth",transform:"transformMatrix","text-decoration":"textDecoration","font-size":"fontSize","font-weight":"fontWeight","font-style":"fontStyle","font-family":"fontFamily"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function 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+)?(?: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(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}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+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;c']:this.type==="radial"&&(i=["']);for(var s=0;s');return i.push(this.type==="linear"?"":""),i.join("")}}),fabric.util.object.extend(fabric.Gradient,{fromElement:function(n,r){var i=n.getElementsByTagName("stop"),s=n.nodeName==="linearGradient"?"linear":"radial",o=n.getAttribute("gradientUnits")||"objectBoundingBox",u=[],a={};s==="linear"?a={x1:n.getAttribute("x1")||0,y1:n.getAttribute("y1")||0,x2:n.getAttribute("x2")||"100%",y2:n.getAttribute("y2")||0}:s==="radial"&&(a={x1:n.getAttribute("fx")||n.getAttribute("cx")||"50%",y1:n.getAttribute("fy")||n.getAttribute("cy")||"50%",r1:0,x2:n.getAttribute("cx")||"50%",y2:n.getAttribute("cy")||"50%",r2:n.getAttribute("r")||"50%"});for(var f=i.length;f--;)u.push(e(i[f]));return t(r,a),new fabric.Gradient({type:s,coords:a,gradientUnits:o,colorStops:u})},forObject:function(e,n){return n||(n={}),t(e,n),new fabric.Gradient(n)}}),fabric.getGradientDefs=r}(),fabric.Pattern=fabric.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,initialize:function(e){e||(e={}),e.source&&(this.source=typeof e.source=="string"?new Function(e.source):e.source),e.repeat&&(this.repeat=e.repeat),e.offsetX&&(this.offsetX=e.offsetX),e.offsetY&&(this.offsetY=e.offsetY)},toObject:function(){var e;return typeof this.source=="function"?e=String(this.source).match(/function\s+\w*\s*\(.*\)\s+\{([\s\S]*)\}/)[1]:typeof this.source.src=="string"&&(e=this.source.src),{source:e,repeat:this.repeat,offsetX:this.offsetX,offsetY:this.offsetY}},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;return e.createPattern(t,this.repeat)}}),fabric.Shadow=fabric.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,initialize:function(e){for(var t in e)this[t]=e[t]},toObject:function(){return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY}},toSVG:function(){}}),function(e){"use strict";function n(e,t){arguments.length>0&&this.init(e,t)}var t=e.fabric||(e.fabric={});if(t.Point){t.warn("fabric.Point is already defined");return}t.Point=n,n.prototype={constructor:n,init:function(e,t){this.x=e,this.y=t},add:function(e){return new n(this.x+e.x,this.y+e.y)},addEquals:function(e){return this.x+=e.x,this.y+=e.y,this},scalarAdd:function(e){return new n(this.x+e,this.y+e)},scalarAddEquals:function(e){return this.x+=e,this.y+=e,this},subtract:function(e){return new n(this.x-e.x,this.y-e.y)},subtractEquals:function(e){return this.x-=e.x,this.y-=e.y,this},scalarSubtract:function(e){return new n(this.x-e,this.y-e)},scalarSubtractEquals:function(e){return this.x-=e,this.y-=e,this},multiply:function(e){return new n(this.x*e,this.y*e)},multiplyEquals:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return new n(this.x/e,this.y/e)},divideEquals:function(e){return this.x/=e,this.y/=e,this},eq:function(e){return this.x===e.x&&this.y===e.y},lt:function(e){return this.xe.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){arguments.length>0&&this.init(e)}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={init:function(e){this.status=e,this.points=[]},appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n("No Intersection")}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n("No Intersection"),s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n("No Intersection"),i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n("No Intersection");return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t&&this.setSource(t)},getSource:function(){return this._source},setSource:function(e){this._source=e},toRgb:function(){var e=this.getSource();return"rgb("+e[0]+","+e[1]+","+e[2]+")"},toRgba:function(){var e=this.getSource();return"rgba("+e[0]+","+e[1]+","+e[2]+","+e[3]+")"},toHex:function(){var e=this.getSource(),t=e[0].toString(16);t=t.length===1?"0"+t:t;var n=e[1].toString(16);n=n.length===1?"0"+n:n;var r=e[2].toString(16);return r=r.length===1?"0"+r:r,t.toUpperCase()+n.toUpperCase()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(e){var t=this.getSource();return t[3]=e,this.setSource(t),this},toGrayscale:function(){var e=this.getSource(),t=parseInt((e[0]*.3+e[1]*.59+e[2]*.11).toFixed(0),10),n=e[3];return this.setSource([t,t,t,n]),this},toBlackWhite:function(e){var t=this.getSource(),n=(t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),r=t[3];return e=e||127,n=Number(n)',''),t.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),""),this.backgroundColor&&this.backgroundColor.source&&t.push('"),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');for(var n=0,r=this.getObjects(),i=r.length;n"),t.join("")},remove:function(e){return this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),fabric.Collection.remove.call(this,e)},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){var t=this._objects.indexOf(e),r=t;if(t!==0){for(var i=t-1;i>=0;--i){var s=e.intersectsWithObject(this._objects[i])||e.isContainedWithinObject(this._objects[i])||this._objects[i].isContainedWithinObject(e);if(s){r=i;break}}n(this._objects,e),this._objects.splice(r,0,e)}return this.renderAll&&this.renderAll()},bringForward:function(e){var t=this.getObjects(),r=t.indexOf(e),i=r;if(r!==t.length-1){for(var s=r+1,o=this._objects.length;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3,f=u.data.length;a0?0:-n),t.ey-(r>0?0:-r),i,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var u=t.ex+a-(n>0?0:i),f=t.ey+a-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,u,f,u+i,f,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f+o-1,u+i,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f,u,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,u+i-1,f,u+i-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+a-(n>0?0:i),t.ey+a-(r>0?0:o),i,o)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,a,f=new fabric.Point(o(n,i),o(r,s)),l=new fabric.Point(u(n,i),u(r,s));for(var c=0,h=this._objects.length;c1&&(t=new fabric.Group(t),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this._objects[o].visible&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(e);if(this.stroke||this.strokeDashArray)e.lineWidth=this.strokeWidth,this.stroke&&this.stroke.toLive?e.strokeStyle=this.stroke.toLive(e):e.strokeStyle=this.stroke;this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_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)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke&&!this.strokeDashArray)return;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)},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(){var e=t.util.createCanvasElement();e.width=this.getBoundingRectWidth(),e.height=this.getBoundingRectHeight(),t.util.wrapElement(e,"div");var n=new t.Canvas(e);n.backgroundColor="transparent",n.renderAll();var r={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set({active:!1,left:e.width/2,top:e.height/2}),n.add(this);var i=n.toDataURL();return this.set(r).setCoords(),n.dispose(),n=null,i},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},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;re.x&&i.xe.y&&s.y1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(this.currentHeight/this.currentWidth),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner,a),o=this._findCrossPoints(i,s,u);if(o%2===1&&o!==0)return this.__corner=a,a}return!1},_findCrossPoints:function(e,t,n){var r,i,s,o,u,a,f=0,l;for(var c in n){l=n[c];if(l.o.y=t&&l.d.y>=t)continue;l.o.x===l.d.x&&l.o.x>=e?(u=l.o.x,a=t):(r=0,i=(l.d.y-l.o.y)/(l.d.x-l.o.x),s=t-r*e,o=l.o.y-i*l.o.x,u=-(s-o)/(r-i),a=s+r*u),u>=e&&(f+=1);if(f===2)break}return f},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1},i=t.StaticCanvas.supports("setLineDash");if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath();var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):e.translate(this.left,this.top);if(!this.strokeDashArray||this.strokeDashArray&&i)e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2);e.lineWidth=this.strokeWidth;var n=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,this._renderStroke(e),e.strokeStyle=n},_renderDashedStroke:function(e){var n=this.width===1?0:-this.width/2,r=this.height===1?0:-this.height/2;e.beginPath(),t.util.drawDashedLine(e,n,r,-n,-r,this.strokeDashArray),e.closePath()},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){var e=[];return this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" "),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),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="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._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()},complexity:function(){return 1},toSVG:function(){var e=[],t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!0)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function r(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type!=="group";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(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._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},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[],t=[];for(var r=0,i=this.points.length;r'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[],t=[];for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;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(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},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,textShadow:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;ie.x&&i-ne.y},toSVG:function(){var e=[];for(var t=this._objects.length;t--;)e.push(this._objects[t].toSVG());return''+e.join("")+""},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','');if(this.stroke||this.strokeDashArray){var t=this.fill;this.fill=null,e.push("'),this.fill=t}return e.push(""),e.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=this._originalImage,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;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.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.width=t.width,r.height=t.height;if(fabric.isLikelyNode){var s=n.toDataURL("image/png").substring(22);r.src=new Buffer(s,"base64"),i._element=r,e&&e()}else r.src=n.toDataURL("image/png");return this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.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.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0];var t=fabric.util.createCanvasElement();this.tmpCtx=t.getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent= -t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.originX==="left"?e.translate(this.left,this.top):this.transform(e),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this.clipTo&&t.util.clipContext(this,e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.clipTo&&e.restore(),this.textShadow&&e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this._setBoundaries(e,n),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},getText:function(){return this.text},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in s&&(this._initDimensions(),this.setCoords())}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e);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 request_fs(e,t){var n=require("fs"),r=n.createReadStream(e),i="";r.on("data",function(e){i+=e}),r.on("end",function(){t(i)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&e.indexOf("data")===0?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t)}):request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +: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.StaticCanvas.prototype,{loadFromDatalessJSON:function(e,t){if(!e)return;var n=typeof e=="string"?JSON.parse(e):e;if(!n)return;n.objects||(n.objects=[]),this.clear();var r=this;this._enlivenDatalessObjects(n.objects,function(){r._setBgOverlayImages(n,t)})},_enlivenDatalessObjects:function(e,t){function s(e,s){n.insertAt(e,s,!0),e.setCoords(),++r===i&&t&&t()}function o(e,t){var n=e.paths?"paths":"path",r=e[n];delete e[n];if(typeof r!="string")if(e.type==="image"||e.type==="group")fabric[fabric.util.string.capitalize(e.type)].fromObject(e,function(e){s(e,t)});else{var i=fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e.type))];if(!i||!i.fromObject)return;r&&(e[n]=r),s(i.fromObject(e),t)}else if(e.type==="image")fabric.util.loadImage(r,function(n){var i=new fabric.Image(n);i.setSourcePath(r),fabric.util.object.extend(i,e),i.setAngle(e.angle),s(i,t)});else if(e.type==="text")if(e.useNative)s(fabric.Text.fromObject(e),t);else{e.path=r;var o=fabric.Text.fromObject(e),u=function(){Object.prototype.toString.call(fabric.window.opera)==="[object Opera]"?setTimeout(function(){s(o,t)},500):s(o,t)};fabric.util.getScript(r,u)}else fabric.loadSVGFromURL(r,function(n){var i=fabric.util.groupSVGElements(n,e,r);i instanceof fabric.PathGroup||(fabric.util.object.extend(i,e),typeof e.angle!="undefined"&&i.setAngle(e.angle)),s(i,t)})}var n=this,r=0,i=e.length;i===0&&t&&t();try{e.forEach(o,this)}catch(u){fabric.log(u)}},loadFromJSON:function(e,t){if(!e)return;var n=typeof e=="string"?JSON.parse(e):e,r=this;return this._enlivenObjects(n.objects,function(){r._setBgOverlayImages(n,t)}),this},_setBgOverlayImages:function(e,t){var n=this,r,i,s,o=function(){t&&i&&s&&r&&t()};e.backgroundImage?this.setBackgroundImage(e.backgroundImage,function(){n.backgroundImageOpacity=e.backgroundImageOpacity,n.backgroundImageStretch=e.backgroundImageStretch,n.renderAll(),i=!0,o()}):i=!0,e.overlayImage?this.setOverlayImage(e.overlayImage,function(){n.overlayImageLeft=e.overlayImageLeft||0,n.overlayImageTop=e.overlayImageTop||0,n.renderAll(),s=!0,o()}):s=!0,e.background?this.setBackgroundColor(e.background,function(){n.renderAll(),r=!0,o()}):r=!0,!e.backgroundImage&&!e.overlayImage&&!e.background&&t&&t()},_enlivenObjects:function(e,t){var n=this;fabric.util.enlivenObjects(e,function(e){e.forEach(function(e,t){n.insertAt(e,t,!0)}),t&&t()})},_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){var t=JSON.stringify(this);this.cloneWithoutData(function(n){n.loadFromJSON(t,function(){e&&e(n)})})},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:"center",originY:"center",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,cornerSize:12,transparentCorners:!0,padding:0,borderColor:"rgba(102,153,255,0.75)",cornerColor:"rgba(102,153,255,0.5)",fill:"rgb(0,0,0)",fillRule:"source-over",overlayFill:null,stroke:null,strokeWidth:1,strokeDashArray:null,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,transformMatrix:null,minScaleLimit:.01,selectable:!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 angle opacity cornerSize fill overlayFill originX originY stroke strokeWidth strokeDashArray fillRule borderScaleFactor transformMatrix selectable shadow visible".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))},_initShadow:function(e){e.shadow&&!(e.shadow instanceof t.Shadow)&&this.setShadow(e.shadow)},setOptions:function(e){for(var t in e)this.set(t,e[t]);this._initGradient(e),this._initPattern(e),this._initShadow(e)},transform:function(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,overlayFill:this.overlayFill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:this.strokeWidth,strokeDashArray:this.strokeDashArray,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),selectable:this.selectable,hasControls:this.hasControls,hasBorders:this.hasBorders,hasRotatingPoint:this.hasRotatingPoint,transparentCorners:this.transparentCorners,perPixelTargetFind:this.perPixelTargetFind,shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible};return this.includeDefaultValues||(i=this._removeDefaultValues(i)),t.util.populateWithProperties(this,i,e),i},toDatalessObject:function(e){return this.toObject(e)},getSvgStyles:function(){return["stroke: ",this.stroke?this.stroke:"none","; ","stroke-width: ",this.strokeWidth?this.strokeWidth:"0","; ","stroke-dasharray: ",this.strokeDashArray?this.strokeDashArray.join(" "):"","; ","fill: ",this.fill?this.fill&&this.fill.toLive?"url(#SVGID_"+this.fill.id+")":this.fill:"none","; ","opacity: ",typeof this.opacity!="undefined"?this.opacity:"1",";",this.visible?"":" visibility: hidden;"].join("")},getSvgTransform:function(){var e=this.getAngle(),n=this.getCenterPoint(),i=t.Object.NUM_FRACTION_DIGITS,s="translate("+r(n.x,i)+" "+r(n.y,i)+")",o=e!==0?" rotate("+r(e,i)+")":"",u=this.scaleX===1&&this.scaleY===1?"":" scale("+r(this.scaleX,i)+" "+r(this.scaleY,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("")},_removeDefaultValues:function(e){var n=t.Object.prototype.options;return n&&this.stateProperties.forEach(function(t){e[t]===n[t]&&delete e[t]}),e},toString:function(){return"#"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(e);if(this.stroke||this.strokeDashArray)e.lineWidth=this.strokeWidth,this.stroke&&this.stroke.toLive?e.strokeStyle=this.stroke.toLive(e):e.strokeStyle=this.stroke;this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_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)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke&&!this.strokeDashArray)return;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)},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(){var e=t.util.createCanvasElement();e.width=this.getBoundingRectWidth(),e.height=this.getBoundingRectHeight(),t.util.wrapElement(e,"div");var n=new t.Canvas(e);n.backgroundColor="transparent",n.renderAll();var r={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set({active:!1,left:e.width/2,top:e.height/2}),n.add(this);var i=n.toDataURL();return this.set(r).setCoords(),n.dispose(),n=null,i},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},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;re.x&&i.xe.y&&s.y1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(this.currentHeight/this.currentWidth),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner,a),o=this._findCrossPoints(i,s,u);if(o%2===1&&o!==0)return this.__corner=a,a}return!1},_findCrossPoints:function(e,t,n){var r,i,s,o,u,a,f=0,l;for(var c in n){l=n[c];if(l.o.y=t&&l.d.y>=t)continue;l.o.x===l.d.x&&l.o.x>=e?(u=l.o.x,a=t):(r=0,i=(l.d.y-l.o.y)/(l.d.x-l.o.x),s=t-r*e,o=l.o.y-i*l.o.x,u=-(s-o)/(r-i),a=s+r*u),u>=e&&(f+=1);if(f===2)break}return f},_getImageLines:function(e){return{topline:{o:e.tl,d:e.tr},rightline:{o:e.tr,d:e.br},bottomline:{o:e.br,d:e.bl},leftline:{o:e.bl,d:e.tl}}},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.strokeWidth/2,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r={x1:1,x2:1,y1:1,y2:1},i=t.StaticCanvas.supports("setLineDash");if(t.Line){t.warn("fabric.Line is already defined");return}t.Line=t.util.createClass(t.Object,{type:"line",initialize:function(e,t){t=t||{},e||(e=[0,0,0,0]),this.callSuper("initialize",t),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(t)},_setWidthHeight:function(e){e||(e={}),this.set("width",this.x2-this.x1||1),this.set("height",this.y2-this.y1||1),this.set("left","left"in e?e.left:this.x1+this.width/2),this.set("top","top"in e?e.top:this.y1+this.height/2)},_set:function(e,t){return this[e]=t,e in r&&this._setWidthHeight(),this},_render:function(e){e.beginPath();var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):e.translate(this.left,this.top);if(!this.strokeDashArray||this.strokeDashArray&&i)e.moveTo(this.width===1?0:-this.width/2,this.height===1?0:-this.height/2),e.lineTo(this.width===1?0:this.width/2,this.height===1?0:this.height/2);e.lineWidth=this.strokeWidth;var n=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,this._renderStroke(e),e.strokeStyle=n},_renderDashedStroke:function(e){var n=this.width===1?0:-this.width/2,r=this.height===1?0:-this.height/2;e.beginPath(),t.util.drawDashedLine(e,n,r,-n,-r,this.strokeDashArray),e.closePath()},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{x1:this.get("x1"),y1:this.get("y1"),x2:this.get("x2"),y2:this.get("y2")})},toSVG:function(){var e=[];return this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")}}),t.Line.ATTRIBUTE_NAMES="x1 y1 x2 y2 stroke stroke-width transform".split(" "),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),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="cx cy r fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._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()},complexity:function(){return 1},toSVG:function(){var e=[],t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!0)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!0)),e.push("'),e.join("")}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){var e=[];return this.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES="cx cy rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function r(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=0,this.y=0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type!=="group";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(r+t,i),e.lineTo(r+s-t,i),e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._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},complexity:function(){return 1},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0})},toSVG:function(){var e=[];return this +.fill&&this.fill.toLive&&e.push(this.fill.toSVG(this,!1)),this.stroke&&this.stroke.toLive&&e.push(this.stroke.toSVG(this,!1)),e.push("'),e.join("")}}),t.Rect.ATTRIBUTE_NAMES="x y width height rx ry fill fill-opacity opacity stroke stroke-width transform".split(" "),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[],t=[];for(var r=0,i=this.points.length;r'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n1&&(g=Math.sqrt(g),n*=g,i*=g);var y=d/n,b=p/n,w=-p/i,E=d/i,S=y*l+b*c,x=w*l+E*c,T=y*e+b*t,N=w*e+E*t,C=(T-S)*(T-S)+(N-x)*(N-x),k=1/C-.25;k<0&&(k=0);var L=Math.sqrt(k);a===u&&(L=-L);var A=.5*(S+T)-L*(N-x),O=.5*(x+N)+L*(T-S),M=Math.atan2(x-O,S-A),_=Math.atan2(N-O,T-A),D=_-M;D<0&&a===1?D+=2*Math.PI:D>0&&a===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B"},toObject:function(e){var t=h(this.callSuper("toObject",e),{path:this.path});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[],t=[];for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e){var n=u(e.paths);return new t.PathGroup(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;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(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},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,textShadow:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;ie.x&&i-ne.y},toSVG:function(){var e=[];for(var t=this._objects.length;t--;)e.push(this._objects[t].toSVG());return''+e.join("")+""},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','');if(this.stroke||this.strokeDashArray){var t=this.fill;this.fill=null,e.push("'),this.fill=t}return e.push(""),e.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this.setElement(this._originalImage),e&&e();return}var t=this._originalImage,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;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.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.width=t.width,r.height=t.height;if(fabric.isLikelyNode){var s=n.toDataURL("image/png").substring(22);r.src=new Buffer(s,"base64"),i._element=r,e&&e()}else r.src=n.toDataURL("image/png");return this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;e.width&&(n.width=e.width),e.height&&(n.height=e.height),n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},fabric.Image.ATTRIBUTE_NAMES="x y width height fill fill-opacity opacity stroke stroke-width transform xlink:href".split(" "),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.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.Grayscale=fabric.util.createClass({type:"Grayscale",applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;ao&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toJSON:function(){return{type:this.type,color:this.color}}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},fabric.Image.filters.Convolute=fabric.util.createClass({type:"Convolute",initialize:function(e){e||(e={}),this.opaque=e.opaque,this.matrix=e.matrix||[0,0,0,0,1,0,0,0,0];var t=fabric.util.createCanvasElement();this.tmpCtx=t.getContext("2d")},_createImageData:function(e,t){return this.tmpCtx.createImageData(e,t)},applyTo:function(e){var t=this.matrix,n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=Math.round(Math.sqrt(t.length)),s=Math.floor(i/2),o=r.data,u=r.width,a=r.height,f=u,l=a,c=this._createImageData(f,l),h=c.data,p=this.opaque?1:0;for(var d=0;d=0&&N=0&&C'},_render:function(e){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign +:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_renderViaNative:function(e){this.transform(e,t.isLikelyNode),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),this._setTextShadow(e),this.clipTo&&t.util.clipContext(this,e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.clipTo&&e.restore(),this.textShadow&&e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this._setBoundaries(e,n),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(this.textShadow){var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]}},_drawTextLine:function(e,t,n,r,i){if(this.textAlign!=="justify"){t[e](n,r,i);return}var s=t.measureText(n).width,o=this.width;if(o>s){var u=n.split(/\s+/),a=t.measureText(n.replace(/\s+/g,"")).width,f=o-a,l=u.length-1,c=f/l,h=0;for(var p=0,d=u.length;p-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},_initDummyElementForCufon:function(){var e=t.document.createElement("pre"),n=t.document.createElement("div");return n.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},getText:function(){return this.text},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in s&&(this._initDimensions(),this.setCoords())}}),t.Text.ATTRIBUTE_NAMES="x y fill fill-opacity opacity stroke stroke-width transform font-family font-style font-weight font-size text-decoration".split(" "),t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),function(){function request(e,t,n){var r=URL.parse(e);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 request_fs(e,t){var n=require("fs"),r=n.createReadStream(e),i="";r.on("data",function(e){i+=e}),r.on("end",function(){t(i)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&e.indexOf("data")===0?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t)}):request(e,"",function(e){fabric.loadSVGFromString(e,t)})},fabric.loadSVGFromString=function(e,t){var n=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(n.documentElement,function(e,n){t(e,n)})},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index cbe82963315638bd02ac09e9c512ad9132e52a7e..256394a2e9f3627eb35ecf345e849bd07a4fde6d 100644 GIT binary patch literal 48061 zcmV(zK<2+6iwFp3m4;CO17U1zE^TRUE^2cCj9UqN+c=W_D>66ZCM<}O($l-!q7iN4 zBz>&oWZLdYva&iuNsz^aA{7$!5lQpg_Z7ecl;tE}e~xgYP^fx!fZaW6P4Y0B4O;(- zlbJLX?_<_lCbK+}nRt47+LE`^D4$7jB{P+$GW%ESsM|d{XuS+3X*i|PC&}tA4X+le z^|;sj@6O|1|3}_>lZLShla~8?o`!d={|oL^Ca-zxRd5?FTPF*d#&^LdhQ+Rfv^Cd@ z3G=hrtgmI7g-JYc`X2s!>}-8?x01;m)U1+JWe38^beKuP{IJ2j@u~crhpBX(kJ&6)I?U6*u5*0w z{PoGj`!_FI3$=`%92ft}VD{v=Yknrl><*RUM-On=&b~X_dDBz|O1{;dE~`d|*+r61 z7w7qk*du4cNn%AUnF>@@r&qq{SRi75E?ET7M1`Zb;kyU(Y4 zKFQ}vEarJUg>1wwTbIRF>PohzAxfx4NH;l^Lh2u1H(W(`t3`$;Q{cMs2K5_LoCKLX z55GvU3erse7Asecuzjeq&Pt{oxpc<7-($R3eHlh~0wX|=>X@oC_Ed73+{p9j`dmkOQ{ zA1WD2s8rD6hjaHJWaTyHQRJs$Z6*x<-s|y60zm(-UT-@}u~x;flo&;mL$sIEsjT%f z6YKt<&wu`TK=c0A??L7gF&gun2Yx1msPq_Mn~C%Zc49mg;-_8@EvcZoKTlFuqj?L+ z5<XU#4s3zVj&lc{SZ42_!<6JMEW2+~DE(VMzUIs98 zD@IDLN?~-fp?s18g`T8Cd8`KV3I2|$;TR3NqS&y5qiz`wM+sDGyshOTvjIuj3%8^< zg@y-Vj2)^XWMDwGC5|bd7s&Z0$-+WF4*UOEFCLcw7X!0W83C_n7eNY{(0qtD8%Q;z zgvYG79zWC#Y}*9Md#xeKVkXr^xRgn5afYpFr&Ry{Hi2?n!bC3&l4JZs!fsc$jq zn`E@N#**@sG|xI3@m=9saIZkJ7uUFv(=fxT63TI}2@(_YgFZ>P5e?mYc-W}Aa44KM z+=N}TfU``4D8h~n$HkL0i)}6Gog0=I&A2MgU7M*wSch@|%wLeKL7Pn>n7~IJ5n9gV zS+JB%>pea^yemj0Mpi2c#ig}P0fXQVTyjPW*N|16YW3l#K~tUW~#D_o-~qpx#5%0!PzodTV?gRsk}dus+Yi z(#>5z5^EGLWcKXtBDkXaac#b@8aB8(M~rg-X0=|L9#H1W9Yn;U3Loxkk6nY>5x;@^1%lhVm2ORR! zCcI38EBb}YGv^WfKI8J;j`A_%Q$f4lB@Dv|4IMq1>`gn zxfg?y^AK)Md<9uP=<5s7+I@kjLWn-ZnH&gfIwMmY#)Vtdol3z@`s9H}NidT$c%bA=MN&z4Xb6SifTs4QIIAq3BTVg8lBIk?RHGuy#~<@+ zFyB$lT|)=vert&9;0PyRFSTh>;k1x(+_7%==dEy;*&?|q#xs7@!0|A3*}!rGcST;idTvGX{=N3XnAV2#g_NpEO?tQ9oj_R&)Xt}A0_*QY zat`~!LD_a1C~b+?UnLQu=8}il;1YL8KD6&>yLG!(Vkn2W`9W;(5WYEWi{(g?q<3$ zARH6b@X|_6>8hi8uWe)e%QRU&FsGVvR7Q~x$KtJebi1N{yX7UI4fbq7ekXih6S;y_ zwF5GUTzkCnk)V;WfB`yk-I4Rdn7O0N?DBkkG#vePc{yg6k2j;g__)n50uYt@H$V{S zl4m1t<&<0+wox%QTZ-PkW0d2?UKdpKzXw; zqitv8$s!VLdUb$uO-n}l2IOzIrN66XS*4KWE>Gadm{MDQ7Z5a6X-9Lk5@sfAnC<9` zIpKbwC|o{pa}~fi89FOpp28eEhCJvGT-}IB!}KXK7^Oeb*q7^cNp%a_MXg3U#5A3O zc82j2N=QiIw4AoYk&e?&pBmcK!niaWJeSi1J|Cr+chEpP=T+#|@XuqhCgM|wgdAu? zM^Q*!BUzChwMdivYT@X%Z6y?`03$35dw6KqY%j+z(?XVXXXNw7+5pDz=WA1Mv7$Z` zI1k*Ex3A}J#twvL08JCc=xGuqsYCGt6l+U4AvVGNee!oto(h}DIt(yOJYNI==N*_J z6TRz1>nxRp9~4+)?;bR)>;4D8bl&UyJZ^6YR>$p2*EGik<2dO!u$!Y7$(!bUwxjL(RF^CF^oa44a~!tb%E% z?rh@(JLq63*J;OXhdEnA6kW+h8pIidX1OEQRoY_>rIzUwNHcI$@+VaYb{rlN0+sC* z968&OC1KU-4kN2q8X{**c9t(m!y3u#0+9r6`bsA_5`L$DGd>|nxS_jwLI1!s8^76T zk`C_&0R1}7AFP7`e008|cO_~;jZ+3`s&ExerwUg7OC&d&X6wg)+;2@XOD}jC;|_{A z)7D?3t6P36*1B_`FON?bm@!o{%?6HBNi`wW%|6egFpL^uN#y4#EZFXohY}MlAW()L zpA_Q3c7lJk8}#puF(|iEr}NC7SLAl5FSH<82|!+FapIwSL&<^|<1-R#BXtht*#?bO zUIJn7B@tsSy(y}IuDEzb@~fmuM%g_2(ZfQeW}OT?nn2WM%4h%AniBVyn{VA=9wgObq5(xeidE zDpR%D6kDr$KL&)ab1(6IZ^^#u(7x(WU-jDLvgmTlgJt#V!x~Fduhe~*IEt+R@Yikz zHf^_+4C?`f{^UAQBkP!VtiwGC#WsDQrr}*(|Ek~jT@u4 zNUbf%F{{=V)#Ade-ki6z=1~r$oL5cTJL}e(HI0%?z6sPqPi&5p&Op}yS!zTxyk(hK zR9x4C%FPPxHxYeNO`w#!KxsWE`dGcOG_6}?ag3ZG9`;HX-*pg@KwE%GP8e%9b`mAi zPm~T82Xaq_L_d0|SM)i6aGnLzPba#;*=)M=G+0W=>_(Bhpx?rRs2iHB+@9|ZOjwpr zU>1IxG4j~H6otx<2Xb_IJ0 z&>i$z2jP;WGl|5cKWGnw3?pbL$nhzI6*p4aX_=^k;f)D-pDNgZ3CM>F z3~7UcRN_XDN_8aep^0P+ArobGw-0z|dmly|`trx2WKx5e*bdSuEZ`wM$XfvZ$l$_T z(2*veOrj3q^jmKND-aU~!6SR?861PpC8=i6&^nv&gL{E!V-dJ`_~16ZLJ--aSG^Q zg+uC1=xjk6!f8!waQKCyPn#Qv1Mbh&sgKPjZRDH$(sd!%albS+g(N4@dr&=h$7+G9 zG%>(F^I8*w<2f`jC^RvsH8C$VG5WS9K0x!X21UEFu8;AZIuk=@a-%bQ*3n1Y(UF)2 z#=Dv^wKXGnKr^OI%~+M1F|{<~_of!ucE*x|!m7L_L2L`FvSW&V_o@u4Ubiw#;5mKj zIdZE0PU%26@FXyG3I&_VVNw+MTQ)Ey0at$Mv@r^8CHA;vAFYei zdsjh`B>f%H>rMyP_<{Qg>?T|LY*iyS9NJA*LGBL?qkV@#h4ncbH!7QJOwETdo z_(laK2X|F|>&y5;6c`gp1$8>7WGUq#{DoNPG_?K>ci7YXsovV$>bt}RJ%+GC{Cj+c zzia$0b;>fdf_Z+2z}UZ!beZmbJ)gr@%qVt#Xh^2dM|yX~)(;Q5st{}f8g9f@iC~lC z8z9)k1bHvS)o3#2=VH&XOpf@4N11Kh!tFQ4yvOnHu$UN~^V_kxj|(eCY$Sf&`7rn3 zPY)|z(^_G9E1s}ei@r638_BG=#%}q~b7`Y!A|4qE?e)OLg zZdBb>Pd{tVI!ku+8{^MQr|KnN6}S1GKl4tNm#mQWdl@{zbU9_W2$a8&&f!fn40T6My$=>;nqvB*uwxaH&4y~bx`sP{`FVAWUcTeSp0Jj zISpIEC*rOFC;!wSOi+vf6MN}WAEmKxJ7CiwlI}bHu4zy^%TB-h?x+yr?&J3V^Y;AR zZQDrxefueF?ruVwkS%4q?Ji|n=S`f{_tH2QyJ>Qg>PJhI%|s$qkaFxu>Sy1X!4Co? zWvlJo^`#aGfWQD43}yy116MRps^)$nk1B>p@S$-W(A5gI;MTmgX@(CzJXXs^HpfbA zwxQ0N6*tM~GayCo44I`?_%As`Ff|v}`L&w>^8mZAHcQ3*LHcHtWAWdvCw9~AH_UF8 z=fbg*I?|tLz&-W~wnY+HEN(`rb6(j@&c^3UG@(#ZRaGT_JDWD^<16Oj@OI$#f_S!y z?^b{H{-Ttqh1YXB@yrPd+cyBeg%LTJ-x)>Kc4X}Pg%ZW2*$+`9QYiBUY?m{^*HLP> zAuUAndyZBCWg0W93X87PM9ai^au-h#>B?h7qck4I)f?d~LDPiY>b{Vob{W{bI9HZ{ z(l&9stqoBoMl1G`AlPpL9aP<$Ti+kSG>RR+ZZ~HX!{a|^L{siSjX^%TiDyyXnk6Hi z<=LcYjj~yQ`JS|qc&sN-HULsGM;*Ad1p*o2Cb~^B9zq*a_s`>a5-q01pWpxR+H;5% zLX|z9?jqML`=-yph;OU5`h_PzSDqeH{W}#+`;k(}w?& z)K>Vfqa6bpSYSB}$~;R@OR!#BI&-77JzE9d3`a%zy*@mkNj-Y%G0VnESbLL(Sx9At zWNEt-JoF4REur%u=-~LJl+w_Yx|T@C;-zFka$V{!KsqhG5KzKXtWsPG zdMN3Y6~2~o9!PnXXBw7ik_K7*)37Qa{`#veCvgDm##6E(8w*~29%djUW;I@Yz9p|d z-^8mEftVAcUO)@m)i$nk)+PE=bq2pYCfb)*x%k^Hx%k@+T>R~C;o{Mb-iGSdTSu$a ze2YpN37~NQnuT*I0$hh<`E=jF{(Hc5l}z=$2kgSt!96>XVj0NOf}`(VD`xbHU2kUY z&s(u(?%DMNeEkXJ&s3FVa;(5Anf|+tJW=kk3x(cNp$a1FCOI7zvniiH2i8ak=0xj{ z*%|vG%nkL1=36hJ)C>6kZTLnpQkREsfswlOj$U_}mX)hrj;n z9;1vMlZ;Jx_qs_s7UEm$#DDI)N=$z3fgD$k(f4~_JP_rKVf_~haNql|o%(8C*(v)a zbhzWc^qn+MCk}N7x}srUJ_bB(lEgX)2T2|yr4;V7oJID-FH$T`^4VqHGpIDgP;~ahCiSY#8>#~ z06TBsA64i6sCefO?ESU_0O$ww<^6t^0*B$S_tJ3kC-DpKLfi;{B$XC*lpa5_uYhnL zYA}3NFua!r0^@7}HzXTJYJNe?qq$AF5aCJF!f9$F58a5gt(h#Em?@E0)5ljD8cBsi3@7%0~%4VRnB zsZ6J8(cDznDzRR(?c#KZI1uz#%7W)-Z@Tyg7zg}8uUu0^au#{KgXUPH0v5O7J6hVd z9(LM2r|tOAsZuH;cLuW*$j@`!{PtlpD^Af$8i-w)N7;Y&yz3@7kBl8v(2u`G9aYQ(!1EmTU{Se=>VFOxK({GJ?;$O|0YC>-&@RhCU- zU`7J@Ib^7h^#`J)>~BC32IQ6_Yl2boLm{WI1*&(UOwCI~O^MVEL>{7gU(~vD%z1P_ zbkJ!rQhOxsH+Tq_9_HQD4?ErhJ%e$gQWzeL2ttjku7(S38yy1H_J>XYaKXbMb$oeL94&D zu}#CfT+88IK0dr?&$O%z@46h`wH%`ts5mn51sBb(y-FI(G`V?c%rE`7&L%+md&(Q* z$BXAL0e?Qm5qANemg7%cBku=bT5cet(~yTixF}FvR5HHLK*Xe+pjsU;KtKl@^Ui_z zr(==#KhnpA$+c4JsyJ?`r~gZ=UY^m*w{3d)7G5Ut1piJZm;^tQ;lXveJ7A-O zfit+nrtUhE!QFQgc=+e!{{aXj?viTZjuS4O!Igs>%N5}0f6x=~PKd?$nBwDv9w+$7 z>5-GkdGHka@DvgUln6g-2CG}yTjNCRi^J?33D-1Nq^HX_q7U5g(AF775im#z!S7lGUcT+UKDNo>Ex0=o(-vwYmisnnY-b zB+4Pt0r-~=a6Eu;$lQD(Kgko$0cOV@1P6WT%&{XyYty(5|Y@m`A^3yKXLj$WBGKz zhkMQnwUMhy1o*l_YPf3k24f%U9PAIqdtMJ~k57huf6y9Yj@QHbhGu+U~=F_1vlaUCC_N2f1?JEIvf@xDhBi}?F#jr9bd3?x3kPmAczL}kKD zL}SA{e41JQ#cS>89`V%9kYK>JkONh(GW>QfR$D1ymd@`Dnc73R8Yk;FcWYx4h&4Sq4~rt1N-Ya2Wr_3N2snTd zY=m2mTibv<{k;<+4$n310?PLi@r6f;=TD{0-K)irF}kh3$#}Nz(k+VuJV}Q z62Gy`=outhmKWJv&w3mkq~d@pr^AAg349ZrDtT+D1Xc!h zg+L7+2DqXfvW?hQu;-F7Z=t|TS*HrzJ8ESt#BmFd2Ebw<(-}XBMmOT)M$i2^c)UbQ z=~Ufnd9f1j5kr9qNv+9)Nh#u4Q#^@U^)T;HIzO4s3oEe0rt*g5wr05%ujA2=)=Y)w z+X^&eQjS`kwG2LUmuv|rkH-s`wPsIiKNL<9Ie+6nH8urf7R=vhKjL;iE+)iKo%#h6K>zkU$6AZ=%6jW$TvmD;K0PfVg5_`9o zwBr5yJNx%F(l*jn<%|T_jZ#F z!(K*L8857K-8x%9ejMR(hf$ysSfiEh>EVqJ_@0>Ex2FfsU`kWJShENvv4|J%Q6R_o z!Ep~wIaEr3HunxtBr9LN2Oa1N9volY(>nmtin`dNbF2Z;Pd>UO2emW8xKHNzbj8_p za>RRSkhF?!?k?O3i`W!HPLh~(#8<1#^+W{A=Q5;}s9(M5ZDM`nj*#;;L(@t8qi|D8 z%c+nU5^;`kI*YEU8mJZH6Pf&CfiA;DKyi2(#?g?4gvJDRBt8mbp&c^|n<4VX(&@7) z7N!8FZ$c#`QmAMaPw`~EF>g+0R9`8m$S%D;P zZ7qbhG?D>wIz1kms~%AM70(tl*(!^%$g>)zZPh*oZC-{rAg+qP@l2z&Jc`>2#v4aC-d zc;!|@aF`L&dw^%IjsUM9+b4qI1&?$jnO!@^Kzu0~OGBA#gv>w-F!)}oc#^n`nTag9 z;*qO`gf5?xHbrStbTk;(^SRWebTHC|1K98Q3D5xNnx48vKO+$mewviFxXxaxnh_GPkLXGax@g2o#LjFC0Wq@f;OV`mAg0I~Wd0 z>>`Sj==`J2)cp)9EDo*|pa92dG9#YnB?b_v#?JW?UwuwM9NMDjEc?1uxoo@I@=e7I zRJA`bVz0%l6aVetTV(ZbniNV>qFk8S*+kWe7Y-Lzj%01a$V!EU{EpcEQ@riM$|7Z`TCw58%8O_a<8W#>UXCyg zZg^v5BjZHGGn`xLaXL+IV<{=;;n)TcH}~`Ruaviacxz?Pv-x65cV-kfC0Pt-_K@=E z%Zn(#!GMTq9A2|J7btcN6=deVp@e|^sv+liG>Y>);}{jj$_4Tx_pk88%9$;uMFI$; z4ZUDpK_&oxzIL0{j)iN;Qc|kd2*#dyHL3$-UdQD@2X-VtM1PcPaStgqY#>Tq1aH9P z1}atP4KPZbK98;G+=x{~3z<^bSGsP!CuMJ=1O@R&9x%T>J3qZReSdO!`sU^7o70PrR_>dVSI3oHXvF15 z&^z>us%kT$s~lMeAxiS2Ftq^(uIVUj_jsUZpTvDQ!dxucN3=kCd?*CQjy5B3e~~s3BiuOag`oN>SfTpg<-{!&1YCuN0w_iHjxb zu*{-)100ZAfk84z!;03s3XGC!cnOS)a!qK1M0!U8sZ>-o02kjWO02{E<= zZFkc^c}lw?q1$aYK$mC8E7X9)Q2+t~{ z$zd)K-s zM$qDMwls$uL-C1m_Whv<>V@W3zMme2MH6vc3u3;jNJ4s8R2QME_hd56=Cz3|slI13 zQp5o+lk_(G90vv74i#{`^+}!oY(9as&J7FNXGFxk`jrXjE2hP87f*ZjF%>}}v>4%1 zgvk$LHkxKBfb$Rt_1N+5LCbgd>14b)N?)(A#Z!z(X&*tFm&9xkX=5$Y+5wjHdH*B0kSuyZwmcgMw-R2 z+;_+Ap?`n|0A+?w{|jYQkV>ct!==(8;)H6IAs`u9Ld73u(>jtpz>|P@sH6cSi0^&62q>jblx8mGmqVX!frxFGfRZB^FwP78GojjFbU(9EpX7!w(Om7;Ff z=N2fe)bnK`2()Q@m4=xL4DYdp(Nz$j@%4&cVv638qJ^0`#KzDsDnp-O{5Soz*uxfH zH3U&+h9E+f3_6x&{b*<$sV*$GT#W=^eRBrvHYPCUM1t&Y<-jnVV}HY(Egq5^SYa(h zdtK^te?Z)&(q`iwY9iQoSVn?wV2S8}**bCJWsQPI5Uhfs-qc!KBaL`xYhIC^_8lYG zxud)5;DK(h@^yo5u|mKeTo~O4@n92 zK+1(-q*hdv#-u{DSf=WlQoL4?4~13E!Ow0_AG5Cn^Ril`pVRD1>M8rcv}Ekp8jB5* zYH%jYnImEc1 zVK?&9&`e@zCQ+$cyZ$SssBA*t0x6FBCa6Ibo-=qSK~p_BByL-s@+WtCuIvWvw&A8q zu@F!jJzlF-V!dGnDxYF{B<2fL?PfmStzv&tCdp!w_MR5Xsux5lQYlg=+Y{YK5i=I2G+4^t3G15Bf(4`ytr9be3sM18raxsHhDDH!FGql{Bh;v8$ z5gvl@K$qvb@(GPs<;*4U2^uYm48@+YhWjg#4YcWZwGYN+y>t|uQ#1gen6O~sFREva zqd8blGF1`T>~KM6b-Bs_pcsh%`M%siVDWO=T8(*7z~xooSXqfs%%Y9N=mB`UQ}_S| z34fGH@$OUtzLXEBx0BXWebMr;o8xYhl;fAf_^He=Bj16wRp7Ca>(VZj40XLKDoxTisv2V3##96oFfHMCV#5#2 zyfUN`5=w?q_d}~qo6dF;ZoY1 zxSaglRee+!UW+bbxyVx<;@i;7(^;+P1t24{Pp7BM#01Ec7@F2Zy|QfJlx3WNcT*v| z@!?u)Teph(G)`_EI$BfSYhtuihyp#FcywSFk=p#SL=qlE)A>z=zDECU@6FrWMw0Zw z|9_uCMo-&-2vVY4?t>J}b=j_C)>Y-PUDf54)gFihC3H~$8vt!_B+h5wIPykd7{9!jKw}qa{UTkLs|JNSga0ba%Vfyd?|5w!9gQaF!0mA|_$&M$IaZ*~ zhO$YpsP>14hiF3;%RGtvp#-Hlc?6QdXp`7oO6E#Yh5NK5>wc4O9~1^)K)26;uh-ur zb3Mvh7fT+{?TaXj+^xXt8ZYMox<*p~Ke#|gyaUP#qb{1u#W!We5sqVoN^BnWcH>@F zLvqHai|?T;KE1CYvZ0_v7(|#!6Z2~l>@kvwshzFV#XAug2)wE$4j=hH^OBc!`owL> zQpAGyzyM1tTna7dX=yww_ke6=7CIt=9A`G_Vw|avmsGd7fGW!nhW9Vx2ClQsW~4C&-+l=O(UMoODkxGg= zNqOBSUSSI-QD(wb)Mcm9<{!&~JzbHOeG5;;j<&SaEj28tb0Qj#S6ue_Hd2+WL@8u- zX6_p&3R!>GFyu3v%wit9b)V8QYL_1h(zz%LfUqV(P??Io<*}`T888ZdDF5qcH-Q~C z3jRiFiLGR<;8E~@BMEIKbVGrn^n^fyVqe>S^otNt0OUh6c~PQ2P39n^RPaxPxn zw91z#L?92QmFcAEAL)lwM8}omU8he@$a0 z_y{`+IRRj=Y(-66T~H?)0RMv zA=N5D^P^Nh&23wJ(e=t&XvtSVnMxEhdGi$!dX?Pp{v=eT9Gj{00SoE8J*8hxt2b5xS)pzU=#N*rgRd zSmjevZa%o`fBg8dkGiG(RRyOxx|Kk@Y%B(DhiN1p58kKfL(v&6}4&WF3cFa@JRui=)rXHh4HV?9Pgbnr116Yop~+jpl6{vULWoN?c;# z$YLmJebq(bGV@RstSNNP=uvmRg+N<=fQ$VwJ4mW%KQs44B6jk`?V{@)+D9#<214VK zBQD17X1TS6b{ki|;j`MfpE(1N?$k)7`sbbX>ykoeLfm$7t9WkQDq)vKG()!GTzgF`OPz4omn+O2 zth3GulKIq9v+{l1w#1CN62)Y)=20t3E=uxCw?i?YlMA#DhMER{vb^0&Ds-MM&6l$h@;il!` zJ02b!4gUOSQtbbE@aRuRkHl$~9UsZ?P(;wY4jxf3wg&%jN)hO!JsKPtiU0bLle=mD zWF`8`SDZ{Y`$?NX9>Z`>pzHfbqMNvwn$Zgk=~qTrK@rxqFoT;+a*h9fU;M`^MWt)} z_-WP9R}*uT{4T`z)74o%9aSt+y zA74;zUrx%C?9_Y&NaahrR3k)yZ@4xjrXd2mlqfu3VJZ@r=k<^2k6|56@=;CFVw7-5sWyu8 z<0AY(&k@{Qk}vDZG87LKVHwXO>;7Pm7DMpkV+5KMgc6BH;{zf1?c@HClCUd*gLifB zK&thjDNvlVZR0f?dS#|Mrq;!jS|!z~bV(4C`*zY8xxN}1iiDsZ7b=HBl=sIYG%kz_>jou-|D+b}%&T%nZ#{K44&PCG+Wr{Io z6AU>dXc^MRRWV*lIoSv$qqtP?^`9rsHfKS(YZ_K@0mCK|wAS7jAMC7Ewh`v1*85;# z3RTHK&y?lc&SP_EQ{}d#hL+@nAO`%M*#uOF#)oijLK#i!Q7PxbzHgd#ahVU=0-u(I z{}`ls0{3%OE#8Gfpa`2*zUd1SphvNGlZ-x;&e1p?_V}}GUXyYX6y1YbKIB<7`^$a@O}zwB3uj_miR}cFulBge`$7@q+S@#I6jdT87}l&w~r=RuTS?U z@AlsvFwQG%=u)b(oc#UzbpPG8O0+pR=Vyh>bm?6lVvld|!K90RU>`;Kp)5H<^^fcD zDV*q~SFNZfNP zrAeCFZ8#}UqZ)_73W5MRB(*JhB7V@2$L8`N&Jl2FiLbD~{_tXauXf)@5spkeYgv-? z`}cLuH-xPO7x>!*{Lg;+0mqgJ2Jo8rC>_8zzL7z6XcuW1Ox}C;)6+L^Up|-XHGFp> ze!e@6_9u@Ia)wBzleg6e$q`Bh>6dSxi3DLQttMM^AHF2QpT*Y#0TozNZE-tbgIh=$ zH04hMfIBYPbLJ@DAc4kGfM5XGNenB}zrQPRZPVTn`|1)knoRsNydq96=`{1X8bMI3 zF)*3~iOmYXxMtJ<#+hiW2L|i}KZA`3xGC0;Uf9%)i?=2BkSrcIil{&-_W%deL5cAE z5I}FIHdGsoiW2u?8W?=>g$`p!djT;<lxhY&&lW5Q}h;vDn3rope9T}*(hi{Fmc7+RT3Nq zdu#ePpCy5l>m?@(_8!C!*dJ8zAnq!gJx0Y3f<57lYg=034Gj{DruiVd z#m}%DVVoWu=Lkz=HT8FF&eb9>ej8m>*?emTSPqc-@$msQ4*rU6Jbqx$oaAX(E{67J z;wKq}ApT5SuNf6%JHRl>kkHIQC*; zChl*HaC;UkFkip5dS@eTU~&TB>KJ6$vfd*;@#jKxsyN#(JCUE0Od?6 z@w<0*FNVN+|0c$NA!1GuVf|b7@z)5$-n|R)PZ;!8y+DLSkZ_?BzTKK|$_W`f&XW=% zgI?MT#HaZ?n&@IKM16>3eS0Zp&L!tmkfnFaJ>%S$v}HV5yV}0n??6}dfhr1mvtDo$ z^p^DR1^qjvf9Le?g4D?`McNO&Kr|hGMf(9oo+o(cfCggBWiOaetN#s1O=4Ut&e74S z@%AFQsG5ZD|=#C2*3l5#k=5T54L3J6AZn8wqH0eaXS z9Iww{l(k}L$pxdL9f6x97**bgx4|fHMer&LMrktL%vlhbs&U0Dtsdo#bfP>*GQ+yk zbB#qbmv9v@5VsvcD0M-Zshr#eJu0*rMlY=uR7vQcBN<9ead(8KGL4j(D?zyjT#EI- z4*nh@|8_IYtLY-US(c0Sd0Eh31OUFt7K?mYXEzm^-BSpi^Ec!X=-&?D;JyQus}koT zPP?|~1wGml@kDIEPYZ;gfAj2^f?<{|4gZjhygVR7R9|LJ^3S9g}BFh?2kKsSy;uj~=Q&?qF zNSG`(Ea;oJ_M&M!z&?_c91utVO6&+ZL2zR?aQCWVz9L~ry1cnrLNe)B&>WW!N#TfE zgwt@iBVD%Qn8%5L$hk4hNkY_`H73va&&T-r_ya8456K51->M>f$N9*z=I`O2^Z^OU z@Gy#>n_)*Bwl>2aa@d&}_7#O;!pn&vzP^k`Ye;x*hMh;FGwSo}Yz|bP(tXhWsG%oMoM`gIza0$%A*Ac8+ zQbfciUMANUY3;ZNX+pByhK8A*C^m8J1Z+?Q5nns+WTSa(wRW_OJx^1kDTk6BVy%N0 zSnbo-uc`N=S&X-3AYOP)|M}I6(YYBQ;AhTa);q^g;x>U8{*YF`t(K#YI_gz6mn{;J z&k-(Zi28CKNVf?B+C06##$zZi~$LSmf;S3`Vm zr(Z|%S9KJyF_Z^fITRP`{ptXnWE_dtI9c3U6}R4A2ooGt%EsFsDxklu83#u@G@+{m zZUYsuX;=b!4PDqBKUx8bdZlHMp8+%*hsYPz@86wxaSN?8pei{KDZE2PF*g zs<;Ri>}B>hbb|$0s9-b$0)~v1ECq<-YoMtFjHo`u^$L!CGzOBv*5E1w2=+241Sc(8 zoDqbzQnDvRv3r%_v zXI_Y3t<*=+sB59A%3oO<{tlH_Zd;tX?Zih0`XPH3cNc_wWRMTQRpO)|1bO_DxY2f$ zSTPcI*omZdHqIH~+siK0a-HRZbx84U-VDs;A6kkk_=2J|Q(#E|Q|a-mXFG^8#mMGh z1GCfGA~i6Z9X{klhx(29flf1pnW9Yxl9q^n5>_y?XnQWt%L=9zzt!mn367iuM`nV^ zvtJVBcGx5__wN^^j2C;iK%Sfg$M)g07sLK;R zMt`8qmNLb-?%Gx4sex&3aEuHzc7T_TYND}YYPn+=$>NXb9ej^2Fea-%@@C{M>MM~q z=p-1M9Q+6|9y$|`f-%;8@c4mt86h0a`W94hd|)r9$H54~?74ePudwR<(1GaiBHqZX z@wK6GG%{pA%G#kzq=Q{1O_D-M%XGsPyETzL8Oh~`CKC>mWG$s2@*nLhRKiS=->J<3 zN{NSYO9U1-63mPnwH8sp)wFUQQRT2gV12CH@oS1d+>B~_JNer%zrxgR=#)Z(M^uF; z)7qP9tus}_k+<*SH{r4)Ul>;oeFMa|<}KCt-)G{NkaEubT(2vL$@M z(xtya%p~Mjm;nCu7Jl8vr^lJ`a!ww+=u1Ji%5M#cV>tnn@ra2le#N9$0S%HR@>e2* zF@b2QOd&oM7|X9Z&09OoTb1T*%DYA@CSQJQA_$;6*-f_g1Nsokg-PvjlCB883!)($J;V=jfSm@p*e)^|Ha0$blY!`KHT0emi|cUm+W;a>4Jl@cE6eg=zI< zms(Ywk&$hOdUdU`PT}JCwkrF&$$jpq?Hswg*1pl(eyg{ycdlR69=UmUXo0R@)Gl8< zZ>x7-X5GhnWv<(5+*dX3s~TtdhkTaZR^Nflc!2eBp4)0WP_-SX+OmIkr$;AIgDbHq z*YvgC#0&2naE@am{jo^x?TSclmVeB}pKmGtv61|-NWG=_$7b=5MeDO_>Fj9V#sNZe z)#u;Qej|4SgswSs4WTsdj97*bLcSA7ZwZ0vPn$v>Fxu+8*>8HqKH{=m<};#8trBl* z<-w7!m2iLFkW-${qS${}F3SYw<0^{nz;%o}84F6UZYwCg@)RTkRYA&oLmU1?bS;R* zRc%dAf4{!HoeV=V95os~tC=#bA}_oY>W}HNbJEm=jlH?CcL*y9U&UtgNiTWZj>lUM z$DNMG?-69R&ZyMZ328>&a!{H{;k>j1%)`?;F2%?r^w6r7Q?;ZwSGY045lE<09rMNM z#I+`}64za+6EmmujT0fGVmCRLA1DnapPI(vs@O`3-Ywy38{!Vmkqpqj%3%Tb!&>~> zryYo~aQ{VF7w&Z{WhKr*Bjr3X^2lFjCFoDEl!x!eKnq~zT_7rpj% zUP^j9yYASfYI$9*EuKoaDAcIXnVp0+c0I>&@DF_m+W@K^S9af1x9^pw?^Rddt6Tg2 z3IPO*^M$)Pr7l862ULzGofRE1Ihq}sOS=S;jfY^ITER%&OAKz!wd`;W9nMhgts{OF zlN*3(_kg7sf6*16#x=$-JLgdDjb+Dji=Bu?SH!d{;=+h%PusF<+Lph^S(ou${C!ic zg%Xi?%#+vhta;7%bn;P-Udnem|EQGK!AGH<6K`N1d6bCGI<^cj4mr1(o`*StM=1Dy zjnda2(j^H&?4XnEG>RKkw4=@;@A6%CMfUXQYQ&1bhsrF{4=;L18djF#uP%P-J(om0 zlABTHJ03QX@*V!EYB`teYe z4Wo8@(J;~(=@kjqGaUXY8aJlS{csW-0@FEaq{ARmJTj9PO2I%SFGj^!T7Vxp$t7J> zN0G{fib0Mu$zI`nSN1o}GCdl0O|sEh7#x~wC%w(%w#R+1K^p_XsF_PlTo#-1+bUg? zvhq#?u2dL99QysiLz>9_!K1&@MD7oUHee(Ia=% zPKp@+SE;rlbjc!JqpNpY9&I^dB;hol3t1#pNls3sFJ7&o0O$PRk$izR`&hEVjhb7@ z1gwAwSRFqcuYd_?m=UDw85ux@^~vgVKO7=}Qi(tF$X*py*Q(ekB3WgxzWq8)4*rhY zck(U_-_5Rv@xu+;c*pD%!T*ga)+&e;t_Q4N9ZlY$Mz*d1wmOvmhY6en{lBLD`RVna zHaF@w6!mWhxk_#l+vGa^=PDfqe>gn+2L2Bvu!xp}-}rwdkM$cE%i#o>)-+aR% z=dkqQ^Dl?^Km5$Hf-?Mt@-OnsOcalwmuXd&1*PZmi}b@M&hBJ_$dC07-XIJ$Vhx-C;lo{hnAkBJcgr8Pe*Nkmh=geV9x@N zW(Qusg5_%rYC=v8K2amuVlDB`ES_b6h0Ui=NnxfJ<;>r^%T|>ou$0bMJc&A=1W_v}6k3RBMXzxE+DeFJ?GOjaFFu!L1 zoI515nDksr%paD=$tgbelrTui;QV`WSS3P$>>F;wU2WTU&#qZuIW2_n>eejRjw$ab z0E(`HzDN5WPtZ?7@nh&l027zNW**%;l&7{T!u%F)AI%_g{ut-Qbg`Oc&xET7^hsJ{ zVT8gxUoG%=1?wiOekz{KW`t6XVbevvd{dIo$r#Prt8!64IfL?l;wtbxuq?jL;7HG2 zBOCULOv-Fa31cpOLeuvG0|A)|4iK7w44H%jOS@4mi=P-Nfe!qE*;joR`N;?k?L_j? z6g&H5u^@NZ?2H+UbH-hl__ZAowvz5zt}vQ!m&bUalMoI-;l_o;Laa+D{Y|2(L{)y=%dIOW5jv}Gq=A_r zrX7vS6jx#Dd^m*|&@mbN`zg@S)W)zAO%l}!g1f7_2ft7;W`<^)TeL$* zxiODFd*00R&yMjCai2RAPr^8$&%RuxLX#IItjt=8W9mJ5Zs%O=7OLyyz(+2L@|Nc4 zNz^l(deMc!(JWv|5;Atbxg6wQeUx1kCVvr!3s3Wv%=l- z6hAV($lL<0K*}Ogvk%`&r&Iy{;*G|bjE}=5h4PHjH=nLGV+|1tHEHd4DXbAbtdZ_p zI7ybB$==VZ^ke&2yr+=ZkQ&R4<8s&P&_qDAugePhR?{sVKA(#8V>8l@BA-lROc)i{ zNLj>o+Dbxvsr1nJvfxpGD?v7E6E%5zKnN(9h1HVW{e+~)ihCRtdFhJ@4ABCfsCizY z?Jo~;ilqnfb(2lO;vO~lk9(bj(pKEmreV@n_VdLD(=r8|5nAf_fiy_ zI@RtiOWI^fA9h5G@y23a<0Wjjddx8QgZ2wc@Y=q8Mkw38UKNG+ikq84RwWXhRHv{e z3YuwHLxKr2ViA`^H%_W_n+e#1me4Uc5lc`Y+KMe`E_0(UL@Ch+NjziMOI*4n@ zRf@U`%f?hKEj$xySjU;%>yFH2fZ4@xy3y?ncz17y>b>qe2qpP}dgOuS?2U8|yV%|u z;_$U6+urOgKF&coLRGL!_G4nsh9j9E@`h<2(Hp1 z9>wX+O)E$U%{54=+Y^Ba(A^cMz*xymsv{ zXK9lnBF;AWgAA$WW!l`_1WWYyjyMpgpbp#m=4MD(uR={e&ngH}>Js$)X2v3-MAPc_y%L=747X(|k?_WlR=Hi#yu z+aa465Zc&5fW{fo$RA@}OFxN)GugDt8WDRWTe4Qe9A1hENY_Ay@NGS$C&>K*A=TmE zl|zISubTR)6T*|-fn-YgLRgdOyl6rR#SBOpB`gTLU#gL1mrK63h%F)4HNLoU1JY=; zl80PII}|QbFj&4Yxo22>Raug=+#PJWpcYAMX=bEDDJ0pV-NS<-hX2$dAi7zZ-OP2* z#4dKa^;6O6RBca$KNS7Lev$RHFi65JtIJ&0dT6ehQjD@#Q-o0y3u-Yc(EN0VX?2*5 zvdYiDGp^j3c>#|(o{JK4>A{))iZlCae;8ZQ39G2FIwBhMWm|Z}+pF4AGWC7y#5>)- z$Y+_+XBq_~$f>Q>wp)6#J?|_-RQJ7B#D?$wPcyvy`5;t)sd5R-!BLDj#v_Lm9UQ?4 zG^K*Lf#3Os1H^hW5V9|<`bE`ch zC*qB>$m;svU;p%DXGuDlhQRk&hPvWbnc@e6><_hrf!MD5?&a7yxjZMC2h*fTvX3Z>k{D5#k1*8j96T}aoc}1Og$~rncJjA?I7o{2z@V+nY z@UMUU>jA}5YNNYD*Asw%Y@MiI%#n?Z8~y{zW4Z)rXA)qj1{cTK{2TF}cdzmL_vC>< zsnO8_t7h*(&zG-<6|r)UZrKCz1KQiut-R_5dx7!2cD}^}sud<4Np&SS_@f%pn34cj zSyp|>*gM56tEZ2j(!1wu?;|YZy>EDZ|D%Sf6>D8g20E^w^Z{j@*N;_-F6h%x9*aWQ zkKk5rmKG!`E7@>uSV@-*b<2#PtV8S`1b6OqE8#6dKy@H|4E^e_192(oPFa+F0YKs> z%BHspXQAph#~$0{dU~AP zlZ@&6?L*iu&g`>Wp5d-UY?3GS5}&@%KgDgOvm?_{0Bbg@g0_>9&Qnx_TuJyTe`0xn z8V*SwbjXF>k$=!3y?a12;)#Wm4kPVZvd-47v9}U+Ib87{)mF#G9ub^LN5~1B62;|& z;3qm>k(VGmc0xoE7Z`EU&^$^N3h3>aJ zE~{OLrkYw6R;UMS*`QE_C}wX;^8f48aJPksEeYaaRWQn{9g9JkdbUPyMR3cH1!`j{d_RflP7cTYzOp0D zw2fws9G#dOTke^kMhJhI*HSVy!=!o9o!AZP%*!fbH9D`&*^$F$bL$uif0O8>JF{Pr zZlAkv$_fW`i@B8EZm9iWjBAc4yYmo5w2eaj)&mT;oZc`l{gQL^xY+9{ABJ7Sep26M zsO$Dn*S8HddQM1cW2pJDKn!Vq$05bt_@?ZD6xnea8>(}M4FN=CS=OCqoa%t?N9iq1#4H-*P|{jXJt?iA|Y7^Y73j%G24S zN{%Xf>5HKo%$ zs+Ic|zMkJyLYb&0twj|4;aHwGY!VYHxJ-1{cm-@o81;e(VKjs5Jt>uupqeJ(5St!u zD4WMYhmlBp{rrcQZ{EHqA=ZOy^-ez8J2{Q_j9V3i1Z3bAY##V+P;FFlOWTqBut6XV zI7*;Mv?@87OsNT>Y-k42XmBGU5kOP$G6;c?#&cp%QaC?S;5|~{J@9)D-}B>|d>NNX zy8qRF-J9=!h1em8FVTa4dPDwmbQ&Ezj4?D>#T+hv9KjECQMNJ~T95=75w!Su$r&^<9XQ*UI3*R%jxyow$Q;#RWWx>?)|guxUN|ty2om90T3@vD z8j+r?>fyl6*yuNfZQ0DXxe@x3R?K4SE$$!7>^wkCfP06+p>q{oZ=}Pa@r*@$BV&*@ zyX-(*^4^z3GZAkl0~GUX=*8C+a8Elz4esIpM?uVYsbO3bPT|)KJ;)!*Sc*S?Qh0>s zH=+`v@c~v%s!Mg31_XCPKNgW5J^~pU8c$R4%78Gje{)pAMex&fneeZF2WB0vz(fTY zy@1+v_g1K`3nWVQ9m`05(=cKwK)p+Hqpe{w6N?}x$=i04xANZcSv?U?ML}$J&269C zm_rMn(Xpv8ybE9Eg=5hu!qY2hO!6`-ruky~YIK)v+~qmJ=&VE^cyHiD87H*|wgN8g z=qn7k+Gkbzk$mY&Hfx$Lktq=2FVlvhq>NMCQ=T_dY|TgedDNXK*#er-tHe-C;AHW#@UpQ)4P) ziLRl8&B6{DqR`(NO+)K(sI(rf!6Bu`N@6#m+PMi67#3*n^v_i~tLP+IRc7&VEm4r1 z##ODx!R76A!*thZUMy)ijXDBL{PHb!8BfZti^y4drFd0LYrutvW|dk2;X_t63{CW= z6ct!0V_7Z|rz_(ty}GjE)>hn_AD*2yj9SlzXbhXmJNU_mbaUbMrG@Xu9`@2)TS5hHqlG4!j`^`Z1Dl41)3zN zr}v#kY)q4{l3^{*s?kI=G(n)dcpVK3ZSYDKIJC|9SP;<`+ujbxL!ZXvwAopwC|46khO^uoeYK9b`6xH1&wPV|4CCtalzh3~mE9B< zpH5Ez9=`K7w$nx@wRx92kDQ0C>Eca|MXq?3ERrX9dy5pNp$Yv)6%5U;z!$D7$s{xb z_6+YXF-T@?wU|o{yBOE@rgcFs#@iwjxKS&^O&HW7X^-`|IfgT@#^@dEx@M8@hM9d5-^}mLom2js2FQ905 zzT`U=n@SW&W<1*$%gbAjE;lXVd9XCQl8(uo=d#c?pHs=$;#ydM;_-$@TO}5Z_#163 zlQwIIZKDq_C0oSYHeMB_s6sgI^ZAAo1dm~-TM%iQOcOLZLhASOt%nD}suMzaF10Eg z;yI~yIC_S5-oCdar-Gh8(MU|Aj2QElzJ?okyav`=Y-QmI)}rfptCUmM-Du+ka|!%Q zbCJz)r~jTn@LgINVBbxTwQx_3-O*w)Tj-Oeb1a`cLwu zh01)3bPBg3-62#edtkUN?7?SbHm*|}pmmdU{8`b`Ae}&Q3RoS0F_7NX7;2^C{YTUV zGqGC2xg6LjgHD-p>tRUOPQYs0vMuAR=FVzI*IYP;)3^gpE zL@AV4|KpVMLOzMY9pC~LC7-UU8uPLa3jS+{i1%k1C_aOD4$DJ4jL5iYRo1|wp= z1dYV*wWFre@RI2MNKog#3Jzk}Z!hz!Z1INl8^6hm84hQozTT7z7+Ac=9LDZiX}+~~Dx%>A`(xJnJ zuDT>c1|B3oc0F~v)v3Ga_J7-@Y(`ood+J&aVfI0|Q_wTR%c!b^u(7uQg^Y(pORt2_3s;tp6jwbgGVNb(acAK`f zYqo(mDvn;^6#-u$lLBETkXYk{(!NG--6nL3Y-){8WBT;WHgDn_f6?j#j=BPlI^S&K zyynK!+QYYSXUrWdc4<@Nm>)GmSR|L4DDX5tK_66Uc&*32!N$ zY~mTyLoLbeO7plYdeZchuDB6hJ-f3OTe233Fjz0q#CZkF%~F-ai(XgW{Ud~N*cuxd zkEajgd9or6JNpGS`AT`WqS%x4bX+Ej>zSTY2BjzkQ<3q;9& ziZKc-W%rdU79#4*HLykj0 znT`cT0W7HV0C#VKK2R&kI9r;j(HIHCt@}8x$)P;C#J*evH#htXeV2=ah23ReHY)B+ z#=TW>n4CBUG;^W2fS1flQ`A)bBwcp9!bbf%TLjTco&pTHqLNoCx%zchQF1!6RJpn| z-E7DbrRqqq3qD&IoihrC^mxpTRWD(zyggE^h0Cf)6OSrRd5z^U59_EBr!;@RmEUib zEUg?|^(!WEQifLI^D)x8SR6W|mH72`l*ZW==83a4rjrjCl%L-)Fkf?#HR-4b;mV6{ zvmz;c;Jfp_YLq@}fz8y1w|2YTBUzW1U1GH%-pAji#caWw^F?{y zf;9K-WNBTa9XZRLDy?_iO;1Q-w6P->V-6Z}vAqf6W!YOWioKZGRC^UNAxenQ%WY66 z9}dP)9E(xZesK0dA{CKEmL{RJ3_|7BpO-TPhE!KJ8e|?7J;p^83wDp0^FX}!p>{gi zIt{lV7XrgnpiuV?wRIUgsh3}|or*XktEs|i+#!QBT}uSd_od7qGohox zlXlt|;b7%shS}RHiaTav$85>29~bnJ;l5=iebiodns>eZ{o)GbjIPmT4iWdKX#0P=NR`8 z4!l}74)5@AFM}?k4puAtEh}`Cz}K3`X9`KxP`@dEB4Q(*{wb6W4nR?#WbZ4*%g3l* z)RZqusE5bt&XpHpmOyb}_V8x( z+SjUs!fX46y@;$3xJpk2hJ7)iPF-PljFtE^3!0!g0Z`usbnfaPln>adslbr}&*4@T zji|`=mLg#mrZ`|&rZDU`3SHTSQfq-Ecei3oS-uAPD;O`t>M&L>5uS+-5=(vLS^id5 z&IoIFYL!Wg6sgcehsYH@@-1^KFXfEHOuj5@dJFt|&2%74y&DxpHpJcDnKVn^Yl4>1 z@|R*1HK(tHtW6#4;`4gegGc(-xa8;fT@*nQ+6ss?ESFtMWqxP8~IB$Kg$|eJg0RHj~Nc zlYrc0>36)!G#g82i4;&^LFv1o@3b*sFSN9HtKR}Ke7l3X-Z{hILtf`J6{-l)QCbwR05ib@V(pD$Yewq$Z=C&U<%N+3$}db(57_syub^ z%*)eVhTcdX8OX%#r#c0gZd9=Ahn6#^(Yk~kPf}tj-5o~Gfu^?$@?gkuhc@F5 z?KuMuXeZPl4dv6)&s!MxNp!pCbHhDF1rU{m)LYZt=GEy8HC7JZ?i zFe!hTphx=15=1qz3L@)6ce1aWY7`V%UqU^d!DnrJF5vT{`fT8{(4Uv^X?!&hslT8g zUC!khlq0`3E*8gZro4mu9E+>SmM*+td99<-QdI4n+iOFA&c6i&pn_p@dAH=ot&v55y_Kr${6`j5Ir9f5jcEb`mz90=%{* z(igQm~a~yj2VqecK14|hMGZXm>}w2EdzJ4 zbp8?OX_Y^@d==KcPwmc)AVfryxcO^KQFh>bn!)I+EdCW z&2(35K4nC|*i3)IUfi| zqwA*#h7XP7~DOb&TEtHoQYY{7#XFEn|jk=oW1HF>1+YwE`2-oQ~>BLAd3MDvn zpCq?GSdN=SJ{HE!fOI&Z1*BLlKa|Uh4)46G&o=T1_wuW}mh5 zT5^O-u4|uOq{VqQ3nLp=@HX>Fk79ld$ha5(XpL>6mWp=65z(Mzq zRjr@t1F?r|#y~&-1<{g`k~cY1Hf-sOQ;QJxnn2M<9paypbwyI21Pt z!*)asVwcfH>;CRxu1zZ;U0ER1Mfu)3hKM)$Wmc{X&qC34cX^xm(P7u7kjp}7jFGQH zBaz-X#ujfe4#J={L5R`m1+qigBpc8NJ}8ZVWn48)i5eS2#>BjTzl)N(UZyRQp>zRl zJAiI#;d3c0FOnXCN(WIPR;cj|A#-NCQWisdp=zr%!onMG>77p{n^d4Dp>Nq;XIGUG_}Us=zGwlG4BAnNQR=W5fYik|tTU+pm8Ma^11XO+d* zbdM+dGt&DYWG-_ATxC{k3|uu+iZosW9RVofM{nn4sUJ&h6PnIf#!^io08sh1^n@j<=Tqvwt?lF-|#~3eeMQR3w%E zH7;f?%*6W^*UwSwg48n;-=iGHug!J)rd&!Vu-dV!pS!Akk6knzV~?)4R`hmEL^Nvt zwkKkn%fk2J_5&_UK0PnTExBlIO_;?1uzt+elbw=WcTR|~34!^DQylboj=bNZn-^VZ zUQ~07hjF+VussD50Jb-|xoL&{>I-~JdXv&n5q>HQKEsd@^R>+jqnn$1I^)8tpu6yB z(khDDX~}@&033|jSYb{h3BRd-7_Q>f_d>!pyU5VBxE_(vNI?4;Wpm!j)H%;Xa;S`;i#39S}R9f1S(-W&(c&ZOES7j5U*`Kx;_6pa0~#!3M>@{Odp z>2wdIPS7=uzpANgRecrwPIbQRu5J;TW#tL04@={zdx{6ovnSQ-+?;zTu-NQy~ zy3UVV*nabrG4)>+H5=K2UW29e5p@d&zv`x-Kw-CC*~ptfik*)1|q1GE_&KE`A^VRllVDpQ*Jo?x?}5d~h%UkNfoOu~-cwxex$0ST6W zXahQSzddxIKU{zF>-%Rvzk2fK`=5RsJvuy$=T}cVyucEcMFMB;^+tF%FkgL0gBai6 z(Wga|-P{yprVJq@jlgelRh7<~&9|2#zeK+Nnq>6k+H;f%T1g7+G4zCks+bh>!*#FFU3Ct*StsQP1pVwGKtCtpQxY;_4vc@|NrG#xGtOH{p zH=jWR7G*j^GT!0;SXg7;%S>qn+bGxY$87{M5EZ7ulSvu zoJv(N_OfJ%Ld4r=RxDsV3){_ct&1?9lPfw4zdrxTaEAv;kj@$A*1?GW1~DES#pzhO z_{QIO2^Cm%_te;;S}TJ+An!tMR034Xk|Dy*m1p|I($b;=2GewzHv~H&%85?la#>zV zCtk66AFlaoB5XtX{M}acWkv<>RBgl>?tDJ$7RY6Shc^xbx^}L^+-hSa?@N20(TL32 zaY@tchn4PFA#vCZ4Ruab2yo}u1X)F94%M~|l_NAot}SvhX&jCiA!^|4R-)pWm_}fy zek29INP)n;f!J1GdH8wdB$cpn>dvq-38m1ZYU`S?lSAvFeSqGUQ?yPFPPn6cKVise zFzFC1houlAA4VhbVd+1ha^1AbmniO9i8&MTI5p_p7MhMOfqe60l|<5uU%r)YZDBW~ zd~BQp|HY73uu%+DcVY~I#N0A@l6vvPIWPF0nblKk*pS2SJtXiG2|)@Ycqr+>7=0jR z1GsZNPp20lTh~Ow-_Z)_j2w=0_}Xk@Nrk@@^%XKsOKnS1z)vQk;?(ve=rr*|OiM!E zFkcH{jPKvC@87SOWTN?%?VwdzoP2GEhpm)m(>tB0w{qR;LA{kjM8t)CRHJaEL@>J% z{md*^tg090P=$6HyZtQ(>sc%4=H}4jU_Em~IGNejTDP_4w(2f=#+$LB%|v!n&7vz^ zH2u8S8a~2yv3=`WiPZ5KJBze)VOa#nS=jb*rgx!TmUXl@gfqYw-;ntQ<+#k{PMKjT zi!3yWSA&+S%GVhx)>wt$gUSzZ!^@Y8+(CW93$w4#3fdS}gN`DoF;od<^XPaJNnrYr z&)2M=HP#hjaX{G#l*sHzF))b{T#-#K_x^o6FE_egqm*u6dba_UjvJ{0F77EpEj@0e zLb!~OO6h_SnqcOPO-I(d(?z~~BV@q*o7qg4%!GxH$oP_yTjkCTpoXPQQ6vrW6?!Wf z@?{cnK;uQFCWs~sd;t8#9?tr-3C7ZcBaaarjPfTzQlbH{2U)X{!A<#1ewEGWisfhP z@V3=~vxx|6)}2GTTnsHgg=~g5u-QQQEep5&@!{b&5)!jO;ovBgAqj`0q3MjLPGOaB zC=C)0CC<)J0_+UqIV_l85r7eYyu}~VoA@v$b^vlsNqqDg)nJB4aT}EkAuk0Q0Hi)^ zVO9B|;e_o`uv?&yy0su~YS;907tIPmaKpK5@*a51U7t_UR zmI*Z{y6IEFOeMIn79b2}vY=gLfJ7mX-x6NM`Bv$*%pXJOdHiLCtap<`6Hu(OhijBQ z#S35Xd%QaN&)Yp(ne^}5Jz9x-VrA~>^|*&CV$YcWJ+VW?-?w`_;d{m^*mKsvo?KOX ztqI<9rgu-z;~p=XJu#O7d13}4PtKYA&K3+sf}fTcShJ29CjST|4i%u9`&wofS*eWLd8= ztjF^CmsNw9wp;7qbnRL=T=kEU|6S+_3KaG6Y+ChkCZjsx{7R-~P-`)jR@n;Dp9SZt zx#;LiVMJN;Zs_so>97N3?WjENg99XKn~CesIwibkaLM5p5*0#{LRc)|ve4G1IUTZ4mzyJra3ZZvowsh`R-@1z|hCxSc)ndcfeR|m*5 zjz?2$CF8@X#0iwuaIkeo8sUsm;vShs0u`tL{LHz>L6AUxM)+F{XV#+9V0t8hh-lo1 zBhkx7a3*@CC=NwrFC}9cndhw7bn@FeX?dn}fO+o9IEnDuI)r5cE7Zpo@zQC9`_5`g z+76eT3HL>iE91kRWIIqzG6gHHgTlne#uAzM*ahICrE(2Rg>(Y% zNcya&DT-N$hNOxKvO6y&yK$rn&A%K>?SyAP&ZmMkMd^ zZniVgil4Xvqu|iVJA;K!9*v#+YC}wXfx?#{un6cdn+qf=Aq&9|O%!aB@dEDrlVDXX z!auzJ<=gL{y$^aiI-m7|DA1(C?y%f1SdH*=ZtNRNAUH8&M!^t^5RDT{W)cLWfZ3jW zL8V^gvsqS*gHz=zQBIi$^r>a^C^x{fX|1-*(6sXXezAk)X1KH%z5 zCI}sUI0^Q|*@f|$h{fqxB?jp-z$*nR6(Yk>&-sYM+$O10Rho28R4qRp~exr>2IA9eV@JhX=}0lEEn%+!34^N7j(RgeHxUw>Rba`Bo4I)0eHD zwX?EZWN8r?mxC<6*GMV8_2AWc>eMQU@c-3z_LZUhQtHmK7!Syb(1a7>I|{gG5=|-U zQBJ=Ml_BSjiLZj3m!5;@ev}zHZ51L>Rp?u~Iyu6B9^yY=;XjW~fsTr%G=>tK29Trk zNThHMr>KosXE1?V*i1T@d{A~~0(z$DN;7tu+er(Juf+=U0U5Runx~~3fQ?XLq&;qq zb79>D+Tu6ylNj? zV>TR1ta zhN!uSAQo##JpD(gC928~g}3KWVIoaQLGcPNylp%rG%73|WtJ`S3}}l--jAEKK!rhk zt(4QOW&Wd+)6KZz;V9@2DHm2l#NMxtCILD3Tfh|&*|-!<&??x>IP}T&)es>Ehw&Q! zu7~l}5q=-VYy7)D+A#FAEGv>3Atb@zSO*+ofcDjjs!4l=@iZY#oXo*B<4^KagtpfK zjKX@&ht?>M*~@S($6pEiSXw~dy74{U;PUme23}7Ma)h>pG}=O*-a4Y)_3D4J5QTVn zhgN<*Gi3>iBBP^RR>w6L4~%(Qos+6S4U8i!RKCubfyPBvEcBC8)S;jWpyvfMHSqAl z>A0F8M{TP*&c{`+7d1(CQX$?jT6*RZm-)R^8g62PVL@| zTf>mCCt%YuE-uFf5fMk*s>8fA$R=Qw{k} z5q?*bAPxco=r`llx!_aF=4!Mub`hVgWz5++&e9s?C)I#|Xie>EAbY^<1MGD*-;Yss54-sYVLwI>L4Koa| zC7J)1JLLbxlfN@Nw+_g^sE7T1+gkhH8ilGlRfXgNJ(;1ZO;#*uP ztXnxU>(+^_uAbrUc~gER&QcIjb1{Ee#{A4=K>bk6It)dir zM8zyX_X&}uDsfzd?N}nBG#`u+P=K7)I
  • oRUX}f7Ap%D{v@Pav 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 literal 47952 zcmV(rK<>XEiwFqTr-e}f17U1zE^TRUE^2cCj9UqN+c=W_D>66ZCM<}O($l-!q7iN4 zBz>&oWZLdYva&iuNsz^aA{7$!5lQpg_Z7ecl;tE}e~xgYP^fx!fZaW6P4Y0B4O;(- zlbJLX?_<_lCbK+}nRt47+LE`^D4$7jB{P+$GW%ESsM|d{XuS+3X*i|PC&}tA4X+le z^|;sj@6O|1|3}_>lZLShla~8?o`!d={|oL^Ca-zxRd5?FTPF*d#&^LdhQ+Rfv^Cd@ z3G=hrtgmI7g-JYc`X2u4J6m7ftzHLE05*@1BKcqZpzEN9N)p<6V2jdd6=Ce4y* zzLc@rnN{@Ogz+r7Y4iU~c4)gS{>l`0E ze|>WC{>_WlLM@{w$Hl)gm_0e}nx9EByF;b;(E}W|v+vG!-ZYhgl5cgV%c{{~c9G=M z#d*FW_Q;uVl2}norh-&CVcgnXs4TpQqCQ~uMY8JCHD|opIB}9LgUB(1u0whAEV;FhO$Wt1Z!$@4y=)bQ%I#ie z?Jnc7STDo)-Jm*!9Q6$0Xnt=u_lxG>wlVr~)!Z2Uqi){%se~5Ctr(ItQwtG$G{1u% zY|3MAVNR=?-<#(5XjaL&fJughGyDEP(m=rGjU~ zhf0PLDiyT&;oLn4S$U0l6#1!Gn+b!z_j-Ji0MP%d*V~R#tW_~AB}UQY5bfo3Dr>#W z#JWG|^Phhn(7eC(dyu(AjK)0Yfu9K>Dm@0+W+HupofuDr_^H=JODd@D&y&>EXx;*{ zgi!8U7w6^n2l-|*Kh9Y$=DHf7`Xpchs)@JCvxPfn+k(9GIM<8k*y>53ivi<_mjTS& zijk75QW)KAD4(Q2p(p839;<^8Y(P@>!Y%1d zq2WOoV~45;85mG)iDSy=1#-Sgvak@4!~TEPi^nCv#lWmoM!@UYMUX-!G#}#422u?v z;V~<&#}9P_+crV+UTa9Qm`QaJE@hHioMCI)X%zuOUB$0R{xH-_R@9sE1K@!M1tZ)_ z1=B?>pOR)L@iNIXiDSvsmV%)hfIW`xOkk`XP|dBTTu}?`V%?_Ka3J*7xJU-qlG>Pc z3yFOTnvVJo@_9HTRWl{gZY#F6G`Z*B*E40fo(d|K@F%r$xb#EHYVDrab_h#CwYGcK zj4PT*We+UAP<=r9T&uh`O8ca>m5wxU(2t1a4M3U3y5&Srg2Ajkr>RU|u zCK>Imv7|gD&9jb1d{?*@+$)gm#Wil^G|aH7gmT<#g2cr9pidHRL__x;9yY2j915om zH(}Q-;4IT1im+qDaq%S0Vp~gk=Y}OlGp>qr*Ji2^)}b5#^A{v*&}LHzCh$>5gqAaT z7A$4cdXEne?+Q|hk=05%r8XL`6TjWg02U%0Wn)5^7o)JkeJUF?sQ1vcz|pjt-Wp$rRe($u<)G&Bb*<0E{E8~reBJ5I!!%QR4L|pD0XfY? z?!}5TXxpCI`Zr&d3ypap4wqrxacktjWD;6l56*9%JiT zq6n6xbaT+*m$SFnuD1=Lm|;^f3)BUl;errU3sT~c8CNE4Y!8vTfzwxVH|1JVLWo=r z#Hsf(0+V~QKm}!3`^$&xWpon6*Fp9wh=Z$pag`g0pt9xN%d~sNoy*uUgak0nxc-V5 z+947%kPy`SN5kABKP6Ta#FcBAi;Q^A20PtLK&xWpZj5A8eJZr!ex7|J1Teh?cxgl|sUVmXo|>7AUP zi#7RIgQhQLLi8ZYi_F1G>}6ap>YxOIFtIPe!BQWhI|@2q{x&{()Mbbu5bm#Ti%=gb z2**S)loX`&LsS}JM(?YHbj z4C&EMF;V;Rw-n;%M&;*rhR({Dr!dEkArJZkS2rTkFnx*)M(K|<_T@TVQr&`fQLB*-F->Qn zonich5)x84EvGGUq~o;Hr-nAQFfPpo&*e0M&qpcd9W>C+c@?@f{PS3>iTD&EAqU#f zQ4~_wNLFM=Ez%^vS~$9GTM0!fzzEC29v<2?+spCGw2&p;8Tq`iHh?kw`P$T5tf+wQK+{AqdYVK@>QMXu#oAI%h)r;RpZwjEr@|((4g(Am&ldr}c?TxQ zMDIG$I!k5Y2L;yHy9W*Hy8i(%o%cFFkJ}r9)p7gM^^S&@tf;Y#+Zm27XWqD7pf20+ zZg^E8OI9IE3NXgj+!?wB$i&R-hP_}7fHm-U_2C6o2JvX*B=h+@Ou^54{7j-eb;hHx z-5!rI=5ZZLR|^tK={5G^V;w`PVy8L<)BP*Gngo|FosV(CP;)MJ$-3MU!=|Vwt6&25|XzS%weB3~%j44pW=xe#vw`DOQcXy8v(NJ=45LO^68U)w3%2{@p~OTB2$Z46 zCxv*ho#0>X2K{?u49cz4={&RN6}jE%3oS@i0+82PoOtNoP_iJ#_>9EbNS#A@wn1Z+ zmq6HiNyJ!7Z;C3QD=uD<{3@xEQ8tf$^sta|DpOEExKV6qrE~ZX&JXRZjenWhSs&6S z94HCW#mYSgB$$x1h%ZZMm1P8(di9lR7eZ?$S(&<>GU)cO*s3&o$TVy=6N7nHt^*XP z%2aJO#n!6cj{)K9+)I4lTe7b@w68kUSG_j5EV|tCU|GHTu*TBVD|H_xj$$hS{I#2b zP1|iHgL-J;lkCsHD$QF}y%ehlxTu<3R1b1dHMwY#Aw-S2woKfhOfry(7bpQ*Ul(b~ z`#J^E^wg}8&bFlaybxs!g2U$P$JHG*fU(zE1;Bn}S-qqzO=e+TsJnd(9xK7%eiE?a)27D1)IQ z6QzU2f!vcJ(T`s06@3mMoM*xG(}`|yHkV_sOx958U6PD!@ zn1$bFj6Ak)1s5h%^Pza;F>BYPJIyku$fEC`et}Ws#k!8C(}W$P7;Bo{A$K`e2>SkK zDQ98O$}mU9a5fSOA8~?pb5g;sfnk>4tQy|=tKuPWpdb6fYw1&{A0h_p1UkN1hO-$C z(stF*aR!cWz9FCtMSpec>y^x#Hq{;0cD4;7T1730R7Fo`nSAM#R3x|i3DXbrgPvb3 z4mAd0b2xy51t^m779`1GlTEGS;P(!-1?68K8BDSy$`wY^5uCPD@K}3tYt);pUBO-g zbO*iGLAWI83}Ut29o5>o2XbNV58A^Z!w4D*a(v2Q#f_A9S|+Mscw<7|rwTS;0`lPk zL)xGqmAKKPQXPqVXd)Ry$V8dl?E@a#-iHx~zWi}0nbaUAwu5vE3wTHm@)m$UGPv*- zbfn2Alc+;D{nnen3dDp#@W|eJ2FKuYNvat%bk9u9%yg}%nSZ!?#o!vPewp4dkTY6S zMh|*2_Cs$1wZB5J3vwya0ZNp!uw{F9sR2HlLrVy%ZI%V zY~fs#m*5A*S3L6Q9S_P6VD@wD-S_aQbH;PV_i=6hJuKT8)+pA59QL-(j@XJJ^vpEfku!Nx5{&j(1TWd#doB}#n z;gEV0I$My2a9YzE9Dbqb)8+=^fctZG>SMD>8~G-`bX~}G+%JtyA<0Sf9#qfWv09)i zO$@Nlyw=3vcn(br3QY`ZP0R~TjJ~aj574};LD8

    tlSU&cx7}+~~}nb@UN;bR?#M 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

    t=%jh#E2 zIZ4sU?2g_SR`;D>gEZ#WdJ9qvt~AZt@uatgR0Vzg1JG91dK(^q`sxAb;o-UK{e~=K zJWuKyHePd{J`BA>>@hwZO)z72$EPBt2K_KJZ$2s1s*G&r2I$_#y}c4J=lS^ z>_7FOLHp-VJ@b)ii)RQmt#GT7muKhF$nhV77mxS-?&wqR)1(vJ;;%`^XJ4aW|J;Of zhZQtcK#FP&C5N+Nf}%cceVru8J(Rs_mW@+?5Wu#{aKLk(Dee!yTx7GckVVZ%(kp zQ}IeW<=wstui)MY+lO3<^Q2RStSP3+^+ay%W9CCVelQ@{m1+ta57LV;32qkrO7tVL zgn3L7-q8exIGSi%Jn0TjVFQW8zhL5$C%(eOSMJ0pwr&g{IV^<@i3UoeyhD{Olt3_# zFa$ZvQQ5iDBY*TpWrQJIibo^z6FHb1^n)Rr#A$#aRebzHEm47qLY1hNgUlY{xn&cb z=L!6&G4~k1F5pj%5`ro4te5dcH$m?sXq%QGj3FVxN5HhgPlgvCVfyYR!!@X(<;x}cto76(XFMxaxqKq@SvzQ(eaun z{kTmX&wuVF2E%5*^4=tbf1$W4HhYvn+rr;MUntA3kdMq<4yOgnptOf7;?aODx=c}ui5E^QVxH9` z;N%KMF#12>IoMP&5;2>Uj6^!Onh|j#nzXvh44Oh*ijlXi>>6`cXuD=GEhlbcU&R(*uMLTJN&V8D48ooDH# z<+vraUNxGn2ad%9ejHfcO?>pj@Zok^SI8Sb_3ZmhgU<8wpHXqTDJU}ysVdgwuD8AU zGHU6({(5x%MgC#OQ9D2*;Vwq$B<$rNW+ z7GwHdBuFwo6l?p#)wINvuGc?aaHgyZEKMYl{TpH~{wws4b*_W)2#i0_bYhG62I0xy z07*rD@Ym=;Khy(`MSyUEAig=8`LEWuOs@dXA!Ie=Rj<`wu6wXYX3Vv*;4?Uju^nsi znT?jsUGVFwh?R$+WH3Yw9)dQH;dTke^ZzeZl5v{^xLY}gJruk^~qWGCJKD=1n!Jt~I?2sdr z0J$#1b<;(9>NJ#$8S{{tGqUSG5%028DJx_9zOr}Urs=FHic!8}Pd*piRr<5ZM0c)9 ztPMzxLl~1TzMjppbBa1k#=o7DJd$xH5BhBkcq)B6 zI{ISp**1yAK!TsQnQlpOfqj!~H%ZTAmaj9d;N?f$v_aHo^4lvX;8VW&+Sk0Taci!P z&Q{EO)fQJcO>y2HU70p^O`E8?6u>&D8x^3DCcB2FH(eVsnjfmU7DVT& zc*#LkeS-fBEFJ7j_fx%>YFTv!QxU=B_(V3~$z3RAO;b;a^Bj4a1acw(MKo)M|RO{7ikBb1cC8Pz-mtkSJh zgRPlKiW1z`+nM`7W$v1r%$~V~HLk3==*%=nLibQxgsgoqAaBg`Z%sAA%d}RJP(##e zGEz}p1QXrL!WwUp>zN3-+vS$D8SCxj8>s6%O68rLpVwXx4MMb6weH|LHkp|ouHp46 z7)t$59ue0<`;xIP>)wT=hhWr-q{lJmselIuy_R)4g@G@ATNoUGzI8$!b$;~+N8HOx3fmdPnntcu6B%T`foU>3~PvX2Y zWtKwXmJ(N;8HJ!MBd?PzXD*f35>}?-8z{8ea}A&~PyoN?)y7(sg7lT$`Y=V`$z`X0 zN^E>pd`)Ru2VcEA$~3aWBw}=# zv8CL^;}sI>5;!p3p&xu|?U$HojXoUa!IQLC@`;Tk-0@!cce+QAL~GMQ~b=~(Y z#1EKn1YT3?$(XWuI@}s*?Ta%{EX?usW{a~7&nO|5GDg%s$>b35dAuQd7;$rikkP?N z7$N))I*pRPZURLt?*=ru1;QX1TYM9J%5{2(`c`l#BMR2dP(Q4wEP-9gzIw@YN>>F< zN6P)k)_}=vy+Ikbrw8@dyvsGsy`A1hS%(a*$aZB)3-wre0q#0xS}InlIGuH{)jrMU zZ(+G!TS$qyjg(mGNQs$+l=uxsKwn7>gLbrqtUKr%Kr28)EnJ_OW$ZAx#rqb3S?^td z$i5xu;#zF24RW8V97m2rp$Fmi1%yR>hM163c&XEjAKO834AZr0iEc&2hlg}3?p(vV z`7OFA)2aP(T8{m@B3WqaiJcu|F_R019dkW*xPsyxQ3szM?o-pBKHL&oLg&a)=sA?X zn9ghwcAt8XF&1uobAusO>l*sAIPW+N3z5-H9(^(z+zF_PWuIhBgYs6Ct?tu$25vZ1p*~OV|ztDE0Rg9O>w4pzLJlO zN(XEeZ4_Y5tWK16CrGE24MkSH&VEa0%eTdZpKthF#`H&i{_xsoT>1VSy;1k7#TnBm z^A8SSPH>G9I_C2Quq5cv$vaD`^t;D+HEuSQN$q*AmMYAbd$*HWZMbzdIJ^%tzyz=@ zK7ZSJWU+K@FGw!m9;sHBb|-22Hq*9(zD}Xy=gXfa#B1r{$z;M`#T&O6odWb;eEj(N z#k04+Jo_kG!0reed>adOIi0oD9Ra7JG}pFI)fFkV_P%{-Qt_9`+$kTEyff<$Pkxfp z#lTd=gpISoiL)kA(yY2ieEy;)!R6kq`iA&PHvu1s33g-_{;&Gmc%^8Wwb&aI9qVS7 z=bo8J>4ZvVAYPLI*%xCZoe~eF+{@BViZP)AaDpj1=V5aKQn-Q*J>&z3%H_5tyBHse zv#r^Io;K-ROCR**#?c5u`JP64#acd6z(L2-HKJtXv8)Gwq=|kD?eCVPIJ4_lGwNIQ0K0dFl04ZL%Y7Rb7KV#%k+N5uBERJ<1HAFtO-{>t$s)+wI zD%lLod{6W#jUhGl#_cY;z%CUQ5>M_>B45*sVCWi1KRfZXMxhuSW`5)lg)zwHk|3M2 zz#g)DiR0SjZKj}0E#>g$vv>ge1)Vc~U*Ii0!5K;O_5+B&nEmO|cMaU<$6TOB~^thdK4-0 z7ep3oyc7^Efsl(NKc{cblkv70XI~CH1KeM3syZoaYMF)~&m0{B;mIdj)Y^`OlLc3W zptRrr`uXM0AD$ik^zLmaT4eII+S?`&LA;BqzC;GgW+*4IgdefhjZ~&Kh{mfAbZa%OcDG<#_r@~B1U z3hzl}&sGsL7b?qyUdY*Nhd?K7@bsis34v5AGO9i@_Cgw}PA^n;n?N*axe4DG;*=Aw zaP%OO#QkA%n2}i=eox_hdRPso@Lj~o-s8QhGu?X}E@DDe>%c#q0sC`s8tgv`3Hxdh zvT*+60DcVdrA=#SPTscgj`;5%-@R>aayBsR8VA2tZDX&-*vTlEhDvMmx6C2alKR_4 zR&Sg|Eor+0QrV)$hGZ%(e-A9nl0t zPI&U9ix>|AU5!2CTDFd*Y3mq24wAUU7h6OU9K-q`EWt6Xk1%A2U5VjR(P3uBuRWF|v9rx*8cBZ(oJl)Nf-kx1k8Swm1|0lwYM~y=ft` zRKGhd5%U{XH1QSCiVA2)g)@zK+q6pX2cmByIpE(o^Z4gLg&dszZUll2#yzP6%iJ;< zAJci3Y?=#7^e>!>uxL(35%(VL;Y4(LPyV{cW}wp>4EEU26F7Pd1iRlCGgWk+^u-(j z0e|x3cbgs>pL@;@vQ85d%Z`0ebia(_5S?b zUpvWOZ}6AD2K$5FqbCC~Wt8UeUop*hfBBBmeD@bjbI^YzrV`T}{P_UWJbCn((mVoA z{Gc~@{QFMu!Pm_2LCX|BCyVAht*TAatWs`!FrTTiQ|*JCg#T-fUsdUPhX9=fD$Zcv$cGRksNCzk2%H z*yFXgvBt39cU8E`YF{KrsD8g;QDB;F7r_{fNMKUwFUiLLr96T{3Q?^=$PfwQ>kqy| zWDuFm>tB1F1%Ld4+75ycQ%u`Z9EcRNwiJ(fiWX)CR$Evg4!2J%N+S4>sbDr{Uwu8J zUPo#G+SeV<4%C!VtSs{^R!cq#v^X z4fx;wsY8F#`IO8a0PD;7i~5=^M`MkmqPBWn#tE_>*mZF$E2U>;V0KPxc81m`5~Viw z3Ae-Cv`@HQ2on=4F#4MB8S?T#!P8j*t2IM)IpmaRZ!LtY2IQ)R)N2|qVCg5}m_O9p zJwuRo#M)s+a3caXQ=>uDw_F>{$ftnyzuftaEfaJnO{8$#187ufs3&3pOwOe#L$t;O~#@ z_apedT3wthPvf%?{@^bELO)=azoH*-@_a#GVNSjE2NVoMR0}ab7NQ8F`@%#4n@$Y`tNZD^C1;UywM##901uVJ+ zEV@M}Hd`AgNpUqy8nHJ;ydXhw0_zP$eFYQrA$Lk{Ly$Qo$05kED1(g{y&5b!W@*Fu z;bb^B_Er*J#)+Mb0h^(adQNp;LER*ao(fs?Ovs|gA?KAYR$qHL64gg$YuZ<KtG^ExgZ==i;1~?wZ%2@)fy#t|YXOLI=N+AI!wkHj=Wgg%XfhH*D9_jxmzz*R}% zfzf0(DRM;E3Na=S+ox}QlHkr z7HF+6E-#mSiGE*{tjXdgqg%4D#+2!NmW-vkS03KLeE^0k;_7HXM^d=nqP;p$GxXN2 z(K2hj>7-9av2UBm$%U-KbgCz#*|$alWek04q)=8!pE_A&11rA;iDa~bSzhS0QVVAW z8#d`=tcn@vB&M>hR)pYQP4!(}@ldKEvw4NHHkrMaJ&19E7$H0zcK=y5Mn$ZDt9$B; zN1tH}k`gF3l%PI@;wKF?bB=-ujBg{2imeb<36l-cMPnUHwN<2}TyH-$P0%2MYp?BpDo3C4eZ!BeR2#wqXv#^=&YTcEjZlr1iFiMc zjH%Y*<$8S}`YFhr9`TPwRcF(s#~|m0EtNGKG6xPB&TU$HBh{JxgGhaZ5@}lw&s~8d z8~tMt`L3P|`!gBWYJsLUc1z@4#>$06DVn5+i{4}yi|2Cj>k;-g>${e;k=tcZp>MM$ z47&|m$TcM8`g$!4$FM{MoRwHFJQBeags&#Sfv6f8(|vPc5n<#__iQ@IRG~A5cU-N4 z73-baMonGsd%1&HYw@<$P>#{gD#b*xm(1oD$yr)wV~@wNjbI%KDfL(l+V}7U3t^V< zm4K6IY~(dUJ2iHE-t0kCWwFDN3+&8&Gg7`=6=~1A!0xQ8d2}M$Q1^b8kP?2A`kQxWoz7 z-L8m)CY;+qXWm{g)TkUgPUv)uGx^Qd`L9a8PTo`p{lH3btfx3IQ#_w7NPBMxLJH{zRh~oLr;? zmJfG?i8rUXK`ntoousEeOKJ)gYGaY*fe>nGMy@EiD4ueBuLaDeI8v+5KE9+_Maapf z1m`&8qEtixNf7=+0`8+<#{F4%p^0(lKrkmVi4u~-0BZXzrR|35Hp?Ha=MC=mwm?8I5ZN7ja%E zH0PS#G!Rz`BPppD=@*Y~8ueApE@r5;T5&pQr9~Fc!^yd^fHY}>S&{hK$zV=yOx3U2 zRQ>9R!>n{ncXb-jd#7Wr7sgzd&52IJtW)ikYRXD&zPfq12+{UKyQ4PG3HOz=Rv1-7 zhY+Qg!SGzaoBAa4DzQ#4c-kH8?q=3;#w|rMiMAw#DyMxHMFLYBw5+Rd0C0IJQ0z-j&`&mAD ze(vLSk>DBiXg2p1L@GBSC09<+IyKtd%cvio+zJ1N&+YjK0uK~GDxr6X!8=}P?T8V* ze08Vv5r6U?dJTf@J^TcenVvcIaT-0OoTM_MlX;?A=xfBxfxAp(;V3a3Gq#zD?Ps3r zivXSJSn*~)b7zho;&*o<17iK@Po? zLneJ{_AylYEIifVZ_M>%A!##t*U70uFO3I7N%KF;cZCP`%~!xrmO`BpJuT~b6l=F2 z)((@QvTve%1{R0OuwYDoep2X6Klg5^)h965R0!l4Il}0PBI*xI0sK@~FjhN+Ta@{; z&a~qY1p#-7=yRlH7sq}3U2=o~M-L(!IihaB8V%a2ll@pXwR4C+P93bF8fUg#a8wW}2_~FLWu~2uq%(5W zNFrsd8-XQ2$czR4!QNGmhQ&!Zs!SvN zJWgR!@ksvcN3l;2_pzmjti`p-P#H`t<;CH2xFFw~CkwWaM}D%+B3_)1cx7fNducle zfOuDqm7K7pv2dcSkFDBYWFx7wIL>2(VX`)@8VSQJ4tgT*Duii2}- zQ5X&8{tipUC8JQwCGV^mYi;c`#;9faSOu+JO;%d>;#vvSJVE56D%4KnsNfO>v+E6w zhdf4*aJ935poSq zzm#rZ4+Tgzgy?DUAQUOdO$-Z1=d;C!^D|2Dkib?gpIeqRq>^5;#M38Xxgkkvlkeh4 zIo)J1A9YGWhwsFBqOg&aw`cO`D(_l;Z*LU%Cx8F6f4Ud=pNMPt)cZ#j?1$bT2f*ue zygxqjq`PpJKe~_*lqGcSW=$!EL_xYpZaA6yBFJc*+KytRb~Ns2N3vu)7T;rF&hW-< z*85}$efC5c;;JJUW|`ZCRl}~G;;y-a`V1U!sCK~CxW_3Nx)nqHeB@9J^>ad|DTRye zM$73XK1Z-1aY!=wkQ-t*vK|*X!Q!UhOm2nJA@oE?K}W^h54!Y|%a0%$ra4=MhFaUR z@i?ujqO62s>b)?kHNjh%{&NA>YJqjc2J+_*uh~$N7s4KvaeM2tA8@RZN-6LYN`Q1x z*YheOr2PKq@#9C)U;1LOc&<2x;L(pqNAEvI_%FI3?up88E{dwo5!b)$iJu{6i&$=U zmo3>v_A;$6ib>@C@ao7j^@3UBJyL=rM*^?%ae)v~1d7;$L>|nsr;h_dgs(&-DvWEf zHHok5q+V1niU|^lgFcx6brAU<{x_^xnTRaq87)bB5SSwy2V;dZ)_e8h-P^YxUVZ=b z$5$@}1QNrt(juZAIM(u1%*+&y<;hN6?06kDE*&_&J8W2jNGk}%uvLW!jVrtd;9?F| z_B4Nw$+1dDP8-NRL< z!f?g%z>j7q4h0j*sc^1f7laI@yb;bc*N3{vghUE!;EAzis$Qb~XdohG#$_4fYA!nhmyE!w58#AY+N@gTj(1(DWz?=Bf# z9b^fd7=5%hITeO5DudX_=jW&u0QppXhX4Qo diff --git a/package.json b/package.json index 726a4de0..0840baa1 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "fabric", "description": "Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.", - "version": "1.1.11", + "version": "1.1.12", "author": "Juriy Zaytsev ", "keywords": ["canvas", "graphic", "graphics", "SVG", "node-canvas", "parser", "HTML5", "object model"], "repository": "git://github.com/kangax/fabric.js", diff --git a/src/object.class.js b/src/object.class.js index 6928005f..3c865618 100644 --- a/src/object.class.js +++ b/src/object.class.js @@ -352,11 +352,12 @@ /** * Transforms context when rendering an object * @param {CanvasRenderingContext2D} ctx Context + * @param {Boolean} when true, context is transformed to object's top/left corner. This is used when rendering text on Node */ - transform: function(ctx) { + transform: function(ctx, fromLeft) { ctx.globalAlpha = this.opacity; - var center = this.getCenterPoint(); + var center = fromLeft ? this._getLeftTopCoords() : this.getCenterPoint(); ctx.translate(center.x, center.y); ctx.rotate(degreesToRadians(this.angle)); ctx.scale( diff --git a/src/object_origin.mixin.js b/src/object_origin.mixin.js index deab234f..e8ab8a59 100644 --- a/src/object_origin.mixin.js +++ b/src/object_origin.mixin.js @@ -192,6 +192,37 @@ this.setCoords(); this.originX = to; + }, + + /** + * @private + */ + _getLeftTopCoords: function() { + var angle = degreesToRadians(this.angle); + + var hypotHalf = this.getWidth() / 2; + var xHalf = Math.cos(angle) * hypotHalf; + var yHalf = Math.sin(angle) * hypotHalf; + + var hypotFull = this.getWidth(); + var xFull = Math.cos(angle) * hypotFull; + var yFull = Math.sin(angle) * hypotFull; + + var x = this.left; + var y = this.top; + + if (this.originX === 'center') { + // move half left + x -= xHalf; + y -= yHalf; + } + else if (this.originX === 'right') { + // move full left + x -= xFull; + y -= yFull; + } + + return { x: x, y: y }; } }); diff --git a/src/text.class.js b/src/text.class.js index a4ab9e21..cab681c7 100644 --- a/src/text.class.js +++ b/src/text.class.js @@ -262,12 +262,7 @@ */ _renderViaNative: function(ctx) { - if (this.originX === 'left') { - ctx.translate(this.left, this.top); - } - else { - this.transform(ctx); - } + this.transform(ctx, fabric.isLikelyNode); this._setTextStyles(ctx); @@ -431,11 +426,17 @@ }, _getLeftOffset: function() { - return this.originX === 'left' ? 0 : -this.width / 2; + if (fabric.isLikelyNode && (this.originX === 'left' || this.originX === 'center')) { + return 0; + } + return -this.width / 2; }, _getTopOffset: function() { - return this.originY === 'top' ? 0 : -this.height / 2; + if (fabric.isLikelyNode && (this.originY === 'top' || this.originY === 'center')) { + return 0; + } + return -this.height / 2; }, /**