/* CindyJS - (C) 2014-2016 The CindyJS Project * Mostly licensed under the Apache License 2.0, but subprojects may use different licensing. * See https://github.com/CindyJS/CindyJS/tree/a578a6389991b86a1b9f4e54197acf99bc1adec0 * for corresponding sources and their respective licensing conditions. */ (function(){function q(b,d,e){h.biginteger_used=1;null!=b&&("number"==typeof b&&"undefined"==typeof d?this.fromInt(b):"number"==typeof b?this.fromNumber(b,d,e):null==d&&"string"!=typeof b?this.fromString(b,256):this.fromString(b,d))}function H(){return new q(null)}function oa(b,d,e,l,h,r){for(;0<=--r;){var k=d*this[b++]+e[l]+h;h=Math.floor(k/67108864);e[l++]=k&67108863}return h}function ib(b,d,e,l,h,r){var k=d&32767;for(d>>=15;0<=--r;){var E=this[b]&32767,B=this[b++]>>15,q=d*E+B*k,E=k*E+((q&32767)<< 15)+e[l]+(h&1073741823);h=(E>>>30)+(q>>>15)+d*B+(h>>>30);e[l++]=E&1073741823}return h}function Ia(b,d,e,l,h,r){var k=d&16383;for(d>>=14;0<=--r;){var E=this[b]&16383,B=this[b++]>>14,q=d*E+B*k,E=k*E+((q&16383)<<14)+e[l]+h;h=(E>>28)+(q>>14)+d*B;e[l++]=E&268435455}return h}function Ja(b,d){var e=Ya[b.charCodeAt(d)];return null==e?-1:e}function Ba(b){var d=H();d.fromInt(b);return d}function k(b){var d=1,e;0!=(e=b>>>16)&&(b=e,d+=16);0!=(e=b>>8)&&(b=e,d+=8);0!=(e=b>>4)&&(b=e,d+=4);0!=(e=b>>2)&&(b=e,d+=2); 0!=b>>1&&(d+=1);return d}function Ra(b){this.m=b}function L(b){this.m=b;this.mp=b.invDigit();this.mpl=this.mp&32767;this.mph=this.mp>>15;this.um=(1<=K;++K)Ya[da++]=K;da=97;for(K=10;36>K;++K)Ya[da++]= K;da=65;for(K=10;36>K;++K)Ya[da++]=K;Ra.prototype.convert=function(b){return 0>b.s||0<=b.compareTo(this.m)?b.mod(this.m):b};Ra.prototype.revert=function(b){return b};Ra.prototype.reduce=function(b){b.divRemTo(this.m,null,b)};Ra.prototype.mulTo=function(b,d,e){b.multiplyTo(d,e);this.reduce(e)};Ra.prototype.sqrTo=function(b,d){b.squareTo(d);this.reduce(d)};L.prototype.convert=function(b){var d=H();b.abs().dlShiftTo(this.m.t,d);d.divRemTo(this.m,null,d);0>b.s&&0>15)*this.mpl&this.um)<<15)&b.DM,e=d+this.m.t;for(b[e]+=this.m.am(0,l,b,d,0,this.m.t);b[e]>=b.DV;)b[e]-=b.DV,b[++e]++}b.clamp();b.drShiftTo(this.m.t,b);0<=b.compareTo(this.m)&&b.subTo(this.m,b)};L.prototype.mulTo=function(b,d,e){b.multiplyTo(d,e);this.reduce(e)};L.prototype.sqrTo= function(b,d){b.squareTo(d);this.reduce(d)};q.prototype.copyTo=function(b){for(var d=this.t-1;0<=d;--d)b[d]=this[d];b.t=this.t;b.s=this.s};q.prototype.fromInt=function(b){this.t=1;this.s=0>b?-1:0;0b?this[0]=b+this.DV:this.t=0};q.prototype.fromString=function(b,d){var e;if(16==d)e=4;else if(8==d)e=3;else if(256==d)e=8;else if(2==d)e=1;else if(32==d)e=5;else if(4==d)e=2;else{this.fromRadix(b,d);return}this.s=this.t=0;for(var l=b.length,h=!1,r=0;0<=--l;){var k=8==e?b[l]&255:Ja(b,l);0> k?"-"==b.charAt(l)&&(h=!0):(h=!1,0==r?this[this.t++]=k:r+e>this.DB?(this[this.t-1]|=(k&(1<>this.DB-r):this[this.t-1]|=k<=this.DB&&(r-=this.DB))}8==e&&0!=(b[0]&128)&&(this.s=-1,0>l|k,k=(this[E]&h)<=this.t)d.t=0;else{var l=b%this.DB, h=this.DB-l,r=(1<>l;for(var k=e+1;k>l;0>=this.DB;if(b.t>=this.DB;l+=this.s}else{for(l+=this.s;e>=this.DB;l-=b.s}d.s=0>l?-1:0;-1>l?d[e++]=this.DV+l:0=d.DV&&(b[e+d.t]-=d.DV,b[e+d.t+1]=1)}0=l.t)){var h=this.abs();if(h.t>this.F2:0),L=this.FV/B,B=(1<w&&q.ZERO.subTo(e,e)}}}};q.prototype.invDigit=function(){if(1>this.t)return 0;var b=this[0];if(0==(b&1))return 0;var d=b&3,d=d*(2-(b&15)*d)&15,d=d*(2-(b&255)*d)&255,d=d*(2-((b&65535)*d&65535))&65535,d=d*(2-b*d%this.DV)%this.DV;return 0< d?this.DV-d:-d};q.prototype.isEven=function(){return 0==(0b)return q.ONE;var e=H(),l=H(),h=d.convert(this),r=k(b)-1;for(h.copyTo(e);0<=--r;)if(d.sqrTo(e,l),0<(b&1<this.s)return"-"+this.negate().toString(b);if(16==b)b=4;else if(8==b)b=3;else if(2==b)b=1;else if(32==b)b=5;else if(4==b)b=2;else return this.toRadix(b);var d=(1<>k)&&(l=!0,h="0123456789abcdefghijklmnopqrstuvwxyz".charAt(e));0<=r;)k>(k+=this.DB-b)):(e=this[r]>>(k-=b)&d,0>=k&&(k+=this.DB,--r)),0this.s?this.negate():this};q.prototype.compareTo=function(b){var d= this.s-b.s;if(0!=d)return d;var e=this.t,d=e-b.t;if(0!=d)return 0>this.s?-d:d;for(;0<=--e;)if(0!=(d=this[e]-b[e]))return d;return 0};q.prototype.bitLength=function(){return 0>=this.t?0:this.DB*(this.t-1)+k(this[this.t-1]^this.s&this.DM)};q.prototype.mod=function(b){var d=H();this.abs().divRemTo(b,null,d);0>this.s&&0b||d.isEven()?new Ra(d):new L(d);return this.exp(b,e)};q.ZERO=Ba(0);q.ONE=Ba(1);xb.prototype.convert= Fc;xb.prototype.revert=Fc;xb.prototype.mulTo=function(b,d,e){b.multiplyTo(d,e)};xb.prototype.sqrTo=function(b,d){b.squareTo(d)};ka.prototype.convert=function(b){if(0>b.s||b.t>2*this.m.t)return b.mod(this.m);if(0>b.compareTo(this.m))return b;var d=H();b.copyTo(d);this.reduce(d);return d};ka.prototype.revert=function(b){return b};ka.prototype.reduce=function(b){b.drShiftTo(this.m.t-1,this.r2);b.t>this.m.t+1&&(b.t=this.m.t+1,b.clamp());this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);for(this.m.multiplyLowerTo(this.q3, this.m.t+1,this.r2);0>b.compareTo(this.r2);)b.dAddOffset(1,this.m.t+1);for(b.subTo(this.r2,b);0<=b.compareTo(this.m);)b.subTo(this.m,b)};ka.prototype.mulTo=function(b,d,e){b.multiplyTo(d,e);this.reduce(e)};ka.prototype.sqrTo=function(b,d){b.squareTo(d);this.reduce(d)};var la=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311, 313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],qb=67108864/la[la.length-1];q.prototype.chunkSize=function(b){return Math.floor(Math.LN2* this.DB/Math.log(b))};q.prototype.toRadix=function(b){null==b&&(b=10);if(0==this.signum()||2>b||36B?"-"==b.charAt(E)&&0==this.signum()&& (h=!0):(k=d*k+B,++r>=e&&(this.dMultiply(l),this.dAddOffset(k,0),k=r=0))}0b)this.fromInt(1);else for(this.fromNumber(b,e),this.testBit(b-1)||this.bitwiseTo(q.ONE.shiftLeft(b-1),Y,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(d);)this.dAddOffset(2,0),this.bitLength()>b&&this.subTo(q.ONE.shiftLeft(b-1),this);else{e=[];var l=b&7;e.length= (b>>3)+1;d.nextBytes(e);e[0]=0>=this.DB;if(b.t>=this.DB;l+=this.s}else{for(l+=this.s;e>=this.DB;l+=b.s}d.s=0>l?-1:0;0l&&(d[e++]=this.DV+l);d.t=e;d.clamp()};q.prototype.dMultiply=function(b){this[this.t]=this.am(0,b-1,this,0,0,this.t);++this.t;this.clamp()};q.prototype.dAddOffset=function(b,d){if(0!=b){for(;this.t<=d;)this[this.t++]=0;for(this[d]+=b;this[d]>=this.DV;)this[d]-= this.DV,++d>=this.t&&(this[this.t++]=0),++this[d]}};q.prototype.multiplyLowerTo=function(b,d,e){var l=Math.min(this.t+b.t,d);e.s=0;for(e.t=l;0=b)return 0;var d=this.DV%b,e=0>this.s?b-1:0;if(0=e)return!1;var l=d.shiftRight(e);b=b+1>>1;b>la.length&&(b=la.length);for(var h=H(),r=0;rthis.s){if(1==this.t)return this[0]-this.DV;if(0==this.t)return-1}else{if(1==this.t)return this[0];if(0==this.t)return 0}return(this[1]&(1<<32-this.DB)-1)<>24};q.prototype.shortValue=function(){return 0== this.t?this.s:this[0]<<16>>16};q.prototype.signum=function(){return 0>this.s?-1:0>=this.t||1==this.t&&0>=this[0]?0:1};q.prototype.toByteArray=function(){var b=this.t,d=[];d[0]=this.s;var e=this.DB-b*this.DB%8,l,h=0;if(0>e)!=(this.s&this.DM)>>e&&(d[h++]=l|this.s<e?(l=(this[b]&(1<>(e+=this.DB-8)):(l=this[b]>>(e-=8)&255,0>=e&&(e+=this.DB,--b)),0!=(l&128)&&(l|=-256),0==h&&(this.s&128)!=(l&128)&&++h,0this.compareTo(b)?this:b};q.prototype.max=function(b){return 0b?this.rShiftTo(-b,d):this.lShiftTo(b,d);return d};q.prototype.shiftRight=function(b){var d=H();0>b?this.lShiftTo(-b,d):this.rShiftTo(b,d);return d};q.prototype.getLowestSetBit=function(){for(var b=0;b>=16,e+=16);0==(b&255)&&(b>>=8,e+=8);0==(b&15)&&(b>>=4,e+=4);0==(b&3)&&(b>>=2,e+=2); 0==(b&1)&&++e;b=e}return d+b}return 0>this.s?this.t*this.DB:-1};q.prototype.bitCount=function(){for(var b=0,d=this.s&this.DM,e=0;e=this.t?0!=this.s:0!=(this[d]&1<=e)return h;l=18>e?1:48>e?3:144>e?4:768>e?5:6;r=8>e?new Ra(d):d.isEven()?new ka(d):new L(d);var w=[],E=3,B=l-1,q=(1<=B?na=b[pa]>>e-B&q:(na=(b[pa]&(1<>this.DB+e-B));for(E=l;0==(na&1);)na>>=1,--E;0>(e-=E)&&(e+=this.DB,--pa);if(fa)w[na].copyTo(h),fa=!1;else{for(;1--e&&(e=this.DB-1,--pa)}return r.revert(h)};q.prototype.modInverse=function(b){var d=b.isEven();if(this.isEven()&&d||0==b.signum())return q.ZERO;for(var e=b.clone(),l=this.clone(),h=Ba(1),r=Ba(0),k=Ba(0),E=Ba(1);0!=e.signum();){for(;e.isEven();)e.rShiftTo(1,e),d?(h.isEven()&&r.isEven()||(h.addTo(this,h),r.subTo(b,r)),h.rShiftTo(1,h)):r.isEven()||r.subTo(b,r),r.rShiftTo(1,r);for(;l.isEven();)l.rShiftTo(1,l), d?(k.isEven()&&E.isEven()||(k.addTo(this,k),E.subTo(b,E)),k.rShiftTo(1,k)):E.isEven()||E.subTo(b,E),E.rShiftTo(1,E);0<=e.compareTo(l)?(e.subTo(l,e),d&&h.subTo(k,h),r.subTo(E,r)):(l.subTo(e,l),d&&k.subTo(h,k),E.subTo(r,E))}if(0!=l.compareTo(q.ONE))return q.ZERO;if(0<=E.compareTo(b))return E.subtract(b);if(0>E.signum())E.addTo(b,E);else return E;return 0>E.signum()?E.add(b):E};q.prototype.pow=function(b){return this.exp(b,new xb)};q.prototype.gcd=function(b){var d=0>this.s?this.negate():this.clone(); b=0>b.s?b.negate():b.clone();if(0>d.compareTo(b)){var e=d,d=b;b=e}var e=d.getLowestSetBit(),l=b.getLowestSetBit();if(0>l)return d;eb.compareTo(d)?!0:!1};q.op_Addition=function(b,d){return(new q(b)).add(new q(d))};q.op_Subtraction=function(b,d){return(new q(b)).subtract(new q(d))};q.Int128Mul=function(b,d){return(new q(b)).multiply(new q(d))};q.op_Division=function(b,d){return b.divide(d)};q.prototype.ToDouble=function(){return parseFloat(this.toString())};if("undefined"==typeof Yb)var Yb=function(b,d){var e;if("undefined"==typeof Object.getOwnPropertyNames)for(e in d.prototype){if("undefined"== typeof b.prototype[e]||b.prototype[e]==Object.prototype[e])b.prototype[e]=d.prototype[e]}else for(var l=Object.getOwnPropertyNames(d.prototype),h=0;hb||2147483647b?Math.ceil(b):Math.floor(b):~~b}:La&&"function"==typeof Number.toInteger?function(b){return Number.toInteger(b)}:pb||jb?function(b){return parseInt(b, 10)}:S?function(b){return-2147483648>b||2147483647b?Math.ceil(b):Math.floor(b):b|0}:function(b){return 0>b?Math.ceil(b):Math.floor(b)};h.Clear=function(b){b.length=0};h.PI=3.141592653589793;h.PI2=6.283185307179586;h.IntPoint=function(){var b;b=arguments;var d=b.length;this.Y=this.X=0;2==d?(this.X=b[0],this.Y=b[1]):1==d?b[0]instanceof h.DoublePoint?(b=b[0],this.X=h.Clipper.Round(b.X),this.Y=h.Clipper.Round(b.Y)):(b=b[0],this.X=b.X,this.Y=b.Y):this.Y=this.X=0};h.IntPoint.op_Equality=function(b, d){return b.X==d.X&&b.Y==d.Y};h.IntPoint.op_Inequality=function(b,d){return b.X!=d.X||b.Y!=d.Y};h.IntPoint0=function(){this.Y=this.X=0};h.IntPoint1=function(b){this.X=b.X;this.Y=b.Y};h.IntPoint1dp=function(b){this.X=h.Clipper.Round(b.X);this.Y=h.Clipper.Round(b.Y)};h.IntPoint2=function(b,d){this.X=b;this.Y=d};h.IntRect=function(){var b=arguments,d=b.length;4==d?(this.left=b[0],this.top=b[1],this.right=b[2],this.bottom=b[3]):1==d?(this.left=b[0].left,this.top=b[0].top,this.right=b[0].right,this.bottom= b[0].bottom):this.bottom=this.right=this.top=this.left=0};h.IntRect0=function(){this.bottom=this.right=this.top=this.left=0};h.IntRect1=function(b){this.left=b.left;this.top=b.top;this.right=b.right;this.bottom=b.bottom};h.IntRect4=function(b,d,e,l){this.left=b;this.top=d;this.right=e;this.bottom=l};h.ClipType={ctIntersection:0,ctUnion:1,ctDifference:2,ctXor:3};h.PolyType={ptSubject:0,ptClip:1};h.PolyFillType={pftEvenOdd:0,pftNonZero:1,pftPositive:2,pftNegative:3};h.JoinType={jtSquare:0,jtRound:1, jtMiter:2};h.EndType={etOpenSquare:0,etOpenRound:1,etOpenButt:2,etClosedLine:3,etClosedPolygon:4};h.EdgeSide={esLeft:0,esRight:1};h.Direction={dRightToLeft:0,dLeftToRight:1};h.TEdge=function(){this.Bot=new h.IntPoint;this.Curr=new h.IntPoint;this.Top=new h.IntPoint;this.Delta=new h.IntPoint;this.Dx=0;this.PolyTyp=h.PolyType.ptSubject;this.Side=h.EdgeSide.esLeft;this.OutIdx=this.WindCnt2=this.WindCnt=this.WindDelta=0;this.PrevInSEL=this.NextInSEL=this.PrevInAEL=this.NextInAEL=this.NextInLML=this.Prev= this.Next=null};h.IntersectNode=function(){this.Edge2=this.Edge1=null;this.Pt=new h.IntPoint};h.MyIntersectNodeSort=function(){};h.MyIntersectNodeSort.Compare=function(b,d){return d.Pt.Y-b.Pt.Y};h.LocalMinima=function(){this.Y=0;this.Next=this.RightBound=this.LeftBound=null};h.Scanbeam=function(){this.Y=0;this.Next=null};h.OutRec=function(){this.Idx=0;this.IsOpen=this.IsHole=!1;this.PolyNode=this.BottomPt=this.Pts=this.FirstLeft=null};h.OutPt=function(){this.Idx=0;this.Pt=new h.IntPoint;this.Prev= this.Next=null};h.Join=function(){this.OutPt2=this.OutPt1=null;this.OffPt=new h.IntPoint};h.ClipperBase=function(){this.m_CurrentLM=this.m_MinimaList=null;this.m_edges=[];this.PreserveCollinear=this.m_HasOpenPaths=this.m_UseFullRange=!1;this.m_CurrentLM=this.m_MinimaList=null;this.m_HasOpenPaths=this.m_UseFullRange=!1};h.ClipperBase.horizontal=-9007199254740992;h.ClipperBase.Skip=-2;h.ClipperBase.Unassigned=-1;h.ClipperBase.tolerance=1E-20;h.ClipperBase.loRange=47453132;h.ClipperBase.hiRange=0xfffffffffffff; h.ClipperBase.near_zero=function(b){return b>-h.ClipperBase.tolerance&&bd.X==b.Xd.Y==b.Yd.X==b.Xd.Y==b.Yh.ClipperBase.hiRange||b.Y>h.ClipperBase.hiRange||-b.X>h.ClipperBase.hiRange||-b.Y>h.ClipperBase.hiRange)&&h.Error("Coordinate outside allowed range in RangeTest().");else if(b.X>h.ClipperBase.loRange||b.Y>h.ClipperBase.loRange||-b.X>h.ClipperBase.loRange||-b.Y>h.ClipperBase.loRange)d.Value=!0,this.RangeTest(b,d)};h.ClipperBase.prototype.InitEdge=function(b,d,e,l){b.Next=d;b.Prev=e;b.Curr.X=l.X;b.Curr.Y=l.Y;b.OutIdx=-1};h.ClipperBase.prototype.InitEdge2=function(b,d){b.Curr.Y>= b.Next.Curr.Y?(b.Bot.X=b.Curr.X,b.Bot.Y=b.Curr.Y,b.Top.X=b.Next.Curr.X,b.Top.Y=b.Next.Curr.Y):(b.Top.X=b.Curr.X,b.Top.Y=b.Curr.Y,b.Bot.X=b.Next.Curr.X,b.Bot.Y=b.Next.Curr.Y);this.SetDx(b);b.PolyTyp=d};h.ClipperBase.prototype.FindNextLocMin=function(b){for(var d;;){for(;h.IntPoint.op_Inequality(b.Bot,b.Prev.Bot)||h.IntPoint.op_Equality(b.Curr,b.Top);)b=b.Next;if(b.Dx!=h.ClipperBase.horizontal&&b.Prev.Dx!=h.ClipperBase.horizontal)break;for(;b.Prev.Dx==h.ClipperBase.horizontal;)b=b.Prev;for(d=b;b.Dx== h.ClipperBase.horizontal;)b=b.Next;if(b.Top.Y!=b.Prev.Bot.Y){d.Prev.Bot.Xl.Next.Top.X&&(l=G.Prev)}for(;b!=l;)b.NextInLML=b.Next,b.Dx==h.ClipperBase.horizontal&&b!=e&&b.Bot.X!=b.Prev.Top.X&&this.ReverseHorizontal(b),b=b.Next;b.Dx==h.ClipperBase.horizontal&&b!=e&&b.Bot.X!=b.Prev.Top.X&&this.ReverseHorizontal(b);l=l.Next}else{for(;l.Top.Y==l.Prev.Bot.Y&&l.Prev.OutIdx!=h.ClipperBase.Skip;)l=l.Prev;if(l.Dx==h.ClipperBase.horizontal&&l.Prev.OutIdx!=h.ClipperBase.Skip){for(G=l;G.Next.Dx==h.ClipperBase.horizontal;)G=G.Next; G.Next.Top.X==l.Prev.Top.X?d||(l=G.Next):G.Next.Top.X>l.Prev.Top.X&&(l=G.Next)}for(;b!=l;)b.NextInLML=b.Prev,b.Dx==h.ClipperBase.horizontal&&b!=e&&b.Bot.X!=b.Next.Top.X&&this.ReverseHorizontal(b),b=b.Prev;b.Dx==h.ClipperBase.horizontal&&b!=e&&b.Bot.X!=b.Next.Top.X&&this.ReverseHorizontal(b);l=l.Prev}if(l.OutIdx==h.ClipperBase.Skip){b=l;if(d){for(;b.Top.Y==b.Next.Bot.Y;)b=b.Next;for(;b!=l&&b.Dx==h.ClipperBase.horizontal;)b=b.Prev}else{for(;b.Top.Y==b.Prev.Bot.Y;)b=b.Prev;for(;b!=l&&b.Dx==h.ClipperBase.horizontal;)b= b.Next}b==l?l=d?b.Next:b.Prev:(b=d?l.Next:l.Prev,e=new h.LocalMinima,e.Next=null,e.Y=b.Bot.Y,e.LeftBound=null,e.RightBound=b,e.RightBound.WindDelta=0,l=this.ProcessBound(e.RightBound,d),this.InsertLocalMinima(e))}return l};h.ClipperBase.prototype.AddPath=function(b,d,e){e||d!=h.PolyType.ptClip||h.Error("AddPath: Open paths must be subject.");var l=b.length-1;if(e)for(;0l||!e&&1>l)return!1;for(var G= [],r=0;r<=l;r++)G.push(new h.TEdge);var k=!0;try{for(G[1].Curr.X=b[1].X,G[1].Curr.Y=b[1].Y,function(){var d={Value:this.m_UseFullRange},e=this.RangeTest(b[0],d);this.m_UseFullRange=d.Value;return e}.call(this),function(){var d={Value:this.m_UseFullRange},e=this.RangeTest(b[l],d);this.m_UseFullRange=d.Value;return e}.call(this),this.InitEdge(G[0],G[1],G[l],b[0]),this.InitEdge(G[l],G[0],G[l-1],b[l]),r=l-1;1<=r;--r)(function(){var d={Value:this.m_UseFullRange},e=this.RangeTest(b[r],d);this.m_UseFullRange= d.Value;return e}).call(this),this.InitEdge(G[r],G[r+1],G[r-1],b[r])}catch(q){return!1}var E=G[0];e||(E.Prev.OutIdx=h.ClipperBase.Skip);for(var B=E,L=E;;)if(h.IntPoint.op_Equality(B.Curr,B.Next.Curr)){if(B==B.Next)break;B==E&&(E=B.Next);L=B=this.RemoveEdge(B)}else{if(B.Prev==B.Next)break;else if(e&&h.ClipperBase.SlopesEqual(B.Prev.Curr,B.Curr,B.Next.Curr,this.m_UseFullRange)&&(!this.PreserveCollinear||!this.Pt2IsBetweenPt1AndPt3(B.Prev.Curr,B.Curr,B.Next.Curr))){B==E&&(E=B.Next);B=this.RemoveEdge(B); L=B=B.Prev;continue}B=B.Next;if(B==L)break}if(!e&&B==B.Next||e&&B.Prev==B.Next)return!1;e||(this.m_HasOpenPaths=!0);B=E;do this.InitEdge2(B,d),B=B.Next,k&&B.Curr.Y!=E.Curr.Y&&(k=!1);while(B!=E);if(k){if(e)return!1;B.Prev.OutIdx=h.ClipperBase.Skip;B.Prev.Bot.Xb.X==d.Xb.Y==d.Y=this.m_MinimaList.Y)b.Next=this.m_MinimaList, this.m_MinimaList=b;else{for(var d=this.m_MinimaList;null!==d.Next&&b.Ythis.m_Scanbeam.Y){var d=new h.Scanbeam;d.Y=b;d.Next=this.m_Scanbeam;this.m_Scanbeam=d}else{for(var e=this.m_Scanbeam;null!==e.Next&&b<=e.Next.Y;)e=e.Next;b!=e.Y&&(d=new h.Scanbeam,d.Y=b,d.Next=e.Next,e.Next=d)}};h.Clipper.prototype.Execute=function(){var b=arguments, d=b.length,e=b[1]instanceof h.PolyTree;if(4!=d||e){if(4==d&&e){e=b[0];d=b[1];l=b[2];b=b[3];if(this.m_ExecuteLocked)return!1;this.m_ExecuteLocked=!0;this.m_SubjFillType=l;this.m_ClipFillType=b;this.m_ClipType=e;this.m_UsingPolyTree=!0;(b=this.ExecuteInternal())&&this.BuildResult2(d);this.m_ExecuteLocked=!1;return b}if(2==d&&!e||2==d&&e)return e=b[0],d=b[1],this.Execute(e,d,h.PolyFillType.pftEvenOdd,h.PolyFillType.pftEvenOdd)}else{var e=b[0],d=b[1],l=b[2],b=b[3];if(this.m_ExecuteLocked)return!1;this.m_HasOpenPaths&& h.Error("Error: PolyTree struct is need for open path clipping.");this.m_ExecuteLocked=!0;h.Clear(d);this.m_SubjFillType=l;this.m_ClipFillType=b;this.m_ClipType=e;this.m_UsingPolyTree=!1;(b=this.ExecuteInternal())&&this.BuildResult(d);this.m_ExecuteLocked=!1;return b}};h.Clipper.prototype.FixHoleLinkage=function(b){if(null!==b.FirstLeft&&(b.IsHole==b.FirstLeft.IsHole||null===b.FirstLeft.Pts)){for(var d=b.FirstLeft;null!==d&&(d.IsHole==b.IsHole||null===d.Pts);)d=d.FirstLeft;b.FirstLeft=d}};h.Clipper.prototype.ExecuteInternal= function(){try{this.Reset();if(null===this.m_CurrentLM)return!1;var b=this.PopScanbeam();do{this.InsertLocalMinimaIntoAEL(b);h.Clear(this.m_GhostJoins);this.ProcessHorizontals(!1);if(null===this.m_Scanbeam)break;var d=this.PopScanbeam();if(!this.ProcessIntersections(b,d))return!1;this.ProcessEdgesAtTopOfScanbeam(d);b=d}while(null!==this.m_Scanbeam||null!==this.m_CurrentLM);for(var b=0,e=this.m_PolyOuts.length;bb.Top.Y?d.Top.Xh.Clipper.TopX(d,b.Top.Y):d.Curr.Xb.WindCnt2}case h.ClipType.ctUnion:switch(e){case h.PolyFillType.pftEvenOdd:case h.PolyFillType.pftNonZero:return 0===b.WindCnt2;case h.PolyFillType.pftPositive:return 0>=b.WindCnt2;default:return 0<=b.WindCnt2}case h.ClipType.ctDifference:if(b.PolyTyp== h.PolyType.ptSubject)switch(e){case h.PolyFillType.pftEvenOdd:case h.PolyFillType.pftNonZero:return 0===b.WindCnt2;case h.PolyFillType.pftPositive:return 0>=b.WindCnt2;default:return 0<=b.WindCnt2}else switch(e){case h.PolyFillType.pftEvenOdd:case h.PolyFillType.pftNonZero:return 0!==b.WindCnt2;case h.PolyFillType.pftPositive:return 0b.WindCnt2}case h.ClipType.ctXor:if(0===b.WindDelta)switch(e){case h.PolyFillType.pftEvenOdd:case h.PolyFillType.pftNonZero:return 0===b.WindCnt2; case h.PolyFillType.pftPositive:return 0>=b.WindCnt2;default:return 0<=b.WindCnt2}}return!0};h.Clipper.prototype.SetWindingCount=function(b){for(var d=b.PrevInAEL;null!==d&&(d.PolyTyp!=b.PolyTyp||0===d.WindDelta);)d=d.PrevInAEL;if(null===d)b.WindCnt=0===b.WindDelta?1:b.WindDelta,b.WindCnt2=0,d=this.m_ActiveEdges;else{if(0===b.WindDelta&&this.m_ClipType!=h.ClipType.ctUnion)b.WindCnt=1;else if(this.IsEvenOddFillType(b))if(0===b.WindDelta){for(var e=!0,l=d.PrevInAEL;null!==l;)l.PolyTyp==d.PolyTyp&&0!== l.WindDelta&&(e=!e),l=l.PrevInAEL;b.WindCnt=e?0:1}else b.WindCnt=b.WindDelta;else 0>d.WindCnt*d.WindDelta?1d.WindDelta*b.WindDelta?d.WindCnt:d.WindCnt+b.WindDelta:b.WindCnt=0===b.WindDelta?1:b.WindDelta:b.WindCnt=0===b.WindDelta?0>d.WindCnt?d.WindCnt-1:d.WindCnt+1:0>d.WindDelta*b.WindDelta?d.WindCnt:d.WindCnt+b.WindDelta;b.WindCnt2=d.WindCnt2;d=d.NextInAEL}if(this.IsEvenOddAltFillType(b))for(;d!=b;)0!==d.WindDelta&&(b.WindCnt2=0===b.WindCnt2?1:0),d=d.NextInAEL;else for(;d!= b;)b.WindCnt2+=d.WindDelta,d=d.NextInAEL};h.Clipper.prototype.AddEdgeToSEL=function(b){null===this.m_SortedEdges?(this.m_SortedEdges=b,b.PrevInSEL=null,b.NextInSEL=null):(b.NextInSEL=this.m_SortedEdges,b.PrevInSEL=null,this.m_SortedEdges=this.m_SortedEdges.PrevInSEL=b)};h.Clipper.prototype.CopyAELToSEL=function(){var b=this.m_ActiveEdges;for(this.m_SortedEdges=b;null!==b;)b.PrevInSEL=b.PrevInAEL,b=b.NextInSEL=b.NextInAEL};h.Clipper.prototype.SwapPositionsInAEL=function(b,d){if(b.NextInAEL!=b.PrevInAEL&& d.NextInAEL!=d.PrevInAEL){if(b.NextInAEL==d){var e=d.NextInAEL;null!==e&&(e.PrevInAEL=b);var l=b.PrevInAEL;null!==l&&(l.NextInAEL=d);d.PrevInAEL=l;d.NextInAEL=b;b.PrevInAEL=d;b.NextInAEL=e}else d.NextInAEL==b?(e=b.NextInAEL,null!==e&&(e.PrevInAEL=d),l=d.PrevInAEL,null!==l&&(l.NextInAEL=b),b.PrevInAEL=l,b.NextInAEL=d,d.PrevInAEL=b,d.NextInAEL=e):(e=b.NextInAEL,l=b.PrevInAEL,b.NextInAEL=d.NextInAEL,null!==b.NextInAEL&&(b.NextInAEL.PrevInAEL=b),b.PrevInAEL=d.PrevInAEL,null!==b.PrevInAEL&&(b.PrevInAEL.NextInAEL= b),d.NextInAEL=e,null!==d.NextInAEL&&(d.NextInAEL.PrevInAEL=d),d.PrevInAEL=l,null!==d.PrevInAEL&&(d.PrevInAEL.NextInAEL=d));null===b.PrevInAEL?this.m_ActiveEdges=b:null===d.PrevInAEL&&(this.m_ActiveEdges=d)}};h.Clipper.prototype.SwapPositionsInSEL=function(b,d){if(null!==b.NextInSEL||null!==b.PrevInSEL)if(null!==d.NextInSEL||null!==d.PrevInSEL){if(b.NextInSEL==d){var e=d.NextInSEL;null!==e&&(e.PrevInSEL=b);var l=b.PrevInSEL;null!==l&&(l.NextInSEL=d);d.PrevInSEL=l;d.NextInSEL=b;b.PrevInSEL=d;b.NextInSEL= e}else d.NextInSEL==b?(e=b.NextInSEL,null!==e&&(e.PrevInSEL=d),l=d.PrevInSEL,null!==l&&(l.NextInSEL=b),b.PrevInSEL=l,b.NextInSEL=d,d.PrevInSEL=b,d.NextInSEL=e):(e=b.NextInSEL,l=b.PrevInSEL,b.NextInSEL=d.NextInSEL,null!==b.NextInSEL&&(b.NextInSEL.PrevInSEL=b),b.PrevInSEL=d.PrevInSEL,null!==b.PrevInSEL&&(b.PrevInSEL.NextInSEL=b),d.NextInSEL=e,null!==d.NextInSEL&&(d.NextInSEL.PrevInSEL=d),d.PrevInSEL=l,null!==d.PrevInSEL&&(d.PrevInSEL.NextInSEL=d));null===b.PrevInSEL?this.m_SortedEdges=b:null===d.PrevInSEL&& (this.m_SortedEdges=d)}};h.Clipper.prototype.AddLocalMaxPoly=function(b,d,e){this.AddOutPt(b,e);0==d.WindDelta&&this.AddOutPt(d,e);b.OutIdx==d.OutIdx?(b.OutIdx=-1,d.OutIdx=-1):b.OutIdxd.Dx?(l=this.AddOutPt(b,e),d.OutIdx=b.OutIdx,b.Side=h.EdgeSide.esLeft,d.Side=h.EdgeSide.esRight,G=b,b=G.PrevInAEL==d?d.PrevInAEL:G.PrevInAEL):(l=this.AddOutPt(d,e), b.OutIdx=d.OutIdx,b.Side=h.EdgeSide.esRight,d.Side=h.EdgeSide.esLeft,G=d,b=G.PrevInAEL==b?b.PrevInAEL:G.PrevInAEL);null!==b&&0<=b.OutIdx&&h.Clipper.TopX(b,e.Y)==h.Clipper.TopX(G,e.Y)&&h.ClipperBase.SlopesEqual(G,b,this.m_UseFullRange)&&0!==G.WindDelta&&0!==b.WindDelta&&(e=this.AddOutPt(b,e),this.AddJoin(l,e,G.Top));return l};h.Clipper.prototype.CreateOutRec=function(){var b=new h.OutRec;b.Idx=-1;b.IsHole=!1;b.IsOpen=!1;b.FirstLeft=null;b.Pts=null;b.BottomPt=null;b.PolyNode=null;this.m_PolyOuts.push(b); b.Idx=this.m_PolyOuts.length-1;return b};h.Clipper.prototype.AddOutPt=function(b,d){var e=b.Side==h.EdgeSide.esLeft;if(0>b.OutIdx){var l=this.CreateOutRec();l.IsOpen=0===b.WindDelta;var G=new h.OutPt;l.Pts=G;G.Idx=l.Idx;G.Pt.X=d.X;G.Pt.Y=d.Y;G.Next=G;G.Prev=G;l.IsOpen||this.SetHoleState(b,l);b.OutIdx=l.Idx}else{var l=this.m_PolyOuts[b.OutIdx],k=l.Pts;if(e&&h.IntPoint.op_Equality(d,k.Pt))return k;if(!e&&h.IntPoint.op_Equality(d,k.Prev.Pt))return k.Prev;G=new h.OutPt;G.Idx=l.Idx;G.Pt.X=d.X;G.Pt.Y=d.Y; G.Next=k;G.Prev=k.Prev;G.Prev.Next=G;k.Prev=G;e&&(l.Pts=G)}return G};h.Clipper.prototype.SwapPoints=function(b,d){var e=new h.IntPoint(b.Value);b.Value.X=d.Value.X;b.Value.Y=d.Value.Y;d.Value.X=e.X;d.Value.Y=e.Y};h.Clipper.prototype.HorzSegmentsOverlap=function(b,d,e,l){return b.X>e.X==b.Xe.X==d.Xb.X==e.Xb.X==l.X=k&&l>=e||G>=k&&G>=e};h.Clipper.prototype.GetBottomPt=function(b){for(var d=null,e=b.Next;e!=b;)e.Pt.Y>b.Pt.Y?(b=e,d=null):e.Pt.Y==b.Pt.Y&& e.Pt.X<=b.Pt.X&&(e.Pt.Xl.Pt.Y?b:e.Pt.Yl.Pt.X?d:e.Next==e?d:l.Next==l?b:this.FirstIsBottomPt(e, l)?b:d};h.Clipper.prototype.Param1RightOfParam2=function(b,d){do if(b=b.FirstLeft,b==d)return!0;while(null!==b);return!1};h.Clipper.prototype.GetOutRec=function(b){for(b=this.m_PolyOuts[b];b!=this.m_PolyOuts[b.Idx];)b=this.m_PolyOuts[b.Idx];return b};h.Clipper.prototype.AppendPolygon=function(b,d){var e=this.m_PolyOuts[b.OutIdx],l=this.m_PolyOuts[d.OutIdx],G;G=this.Param1RightOfParam2(e,l)?l:this.Param1RightOfParam2(l,e)?e:this.GetLowermostRec(e,l);var k=e.Pts,w=k.Prev,E=l.Pts,B=E.Prev;b.Side==h.EdgeSide.esLeft? (d.Side==h.EdgeSide.esLeft?(this.ReversePolyPtLinks(E),E.Next=k,k.Prev=E,w.Next=B,B.Prev=w,e.Pts=B):(B.Next=k,k.Prev=B,E.Prev=w,w.Next=E,e.Pts=E),k=h.EdgeSide.esLeft):(d.Side==h.EdgeSide.esRight?(this.ReversePolyPtLinks(E),w.Next=B,B.Prev=w,E.Next=k,k.Prev=E):(w.Next=E,E.Prev=w,k.Prev=B,B.Next=k),k=h.EdgeSide.esRight);e.BottomPt=null;G==l&&(l.FirstLeft!=e&&(e.FirstLeft=l.FirstLeft),e.IsHole=l.IsHole);l.Pts=null;l.BottomPt=null;l.FirstLeft=e;G=b.OutIdx;w=d.OutIdx;b.OutIdx=-1;d.OutIdx=-1;for(E=this.m_ActiveEdges;null!== E;){if(E.OutIdx==w){E.OutIdx=G;E.Side=k;break}E=E.NextInAEL}l.Idx=e.Idx};h.Clipper.prototype.ReversePolyPtLinks=function(b){if(null!==b){var d,e;d=b;do e=d.Next,d.Next=d.Prev,d=d.Prev=e;while(d!=b)}};h.Clipper.SwapSides=function(b,d){var e=b.Side;b.Side=d.Side;d.Side=e};h.Clipper.SwapPolyIndexes=function(b,d){var e=b.OutIdx;b.OutIdx=d.OutIdx;d.OutIdx=e};h.Clipper.prototype.IntersectEdges=function(b,d,e,l){var G=!l&&null===b.NextInLML&&b.Top.X==e.X&&b.Top.Y==e.Y;l=!l&&null===d.NextInLML&&d.Top.X== e.X&&d.Top.Y==e.Y;var k=0<=b.OutIdx,w=0<=d.OutIdx;if(0===b.WindDelta||0===d.WindDelta)0===b.WindDelta&&0===d.WindDelta?(G||l)&&k&&w&&this.AddLocalMaxPoly(b,d,e):b.PolyTyp==d.PolyTyp&&b.WindDelta!=d.WindDelta&&this.m_ClipType==h.ClipType.ctUnion?0===b.WindDelta?w&&(this.AddOutPt(b,e),k&&(b.OutIdx=-1)):k&&(this.AddOutPt(d,e),w&&(d.OutIdx=-1)):b.PolyTyp!=d.PolyTyp&&(0!==b.WindDelta||1!=Math.abs(d.WindCnt)||this.m_ClipType==h.ClipType.ctUnion&&0!==d.WindCnt2?0!==d.WindDelta||1!=Math.abs(b.WindCnt)||this.m_ClipType== h.ClipType.ctUnion&&0!==b.WindCnt2||(this.AddOutPt(d,e),w&&(d.OutIdx=-1)):(this.AddOutPt(b,e),k&&(b.OutIdx=-1))),G&&(0>b.OutIdx?this.DeleteFromAEL(b):h.Error("Error intersecting polylines")),l&&(0>d.OutIdx?this.DeleteFromAEL(d):h.Error("Error intersecting polylines"));else{if(b.PolyTyp==d.PolyTyp)if(this.IsEvenOddFillType(b)){var E=b.WindCnt;b.WindCnt=d.WindCnt;d.WindCnt=E}else b.WindCnt=0===b.WindCnt+d.WindDelta?-b.WindCnt:b.WindCnt+d.WindDelta,d.WindCnt=0===d.WindCnt-b.WindDelta?-d.WindCnt:d.WindCnt- b.WindDelta;else this.IsEvenOddFillType(d)?b.WindCnt2=0===b.WindCnt2?1:0:b.WindCnt2+=d.WindDelta,this.IsEvenOddFillType(b)?d.WindCnt2=0===d.WindCnt2?1:0:d.WindCnt2-=b.WindDelta;var B,q,L;b.PolyTyp==h.PolyType.ptSubject?(B=this.m_SubjFillType,L=this.m_ClipFillType):(B=this.m_ClipFillType,L=this.m_SubjFillType);d.PolyTyp==h.PolyType.ptSubject?(q=this.m_SubjFillType,E=this.m_ClipFillType):(q=this.m_ClipFillType,E=this.m_SubjFillType);switch(B){case h.PolyFillType.pftPositive:B=b.WindCnt;break;case h.PolyFillType.pftNegative:B= -b.WindCnt;break;default:B=Math.abs(b.WindCnt)}switch(q){case h.PolyFillType.pftPositive:q=d.WindCnt;break;case h.PolyFillType.pftNegative:q=-d.WindCnt;break;default:q=Math.abs(d.WindCnt)}if(k&&w)G||l||0!==B&&1!=B||0!==q&&1!=q||b.PolyTyp!=d.PolyTyp&&this.m_ClipType!=h.ClipType.ctXor?this.AddLocalMaxPoly(b,d,e):(this.AddOutPt(b,e),this.AddOutPt(d,e),h.Clipper.SwapSides(b,d),h.Clipper.SwapPolyIndexes(b,d));else if(k){if(0===q||1==q)this.AddOutPt(b,e),h.Clipper.SwapSides(b,d),h.Clipper.SwapPolyIndexes(b, d)}else if(w){if(0===B||1==B)this.AddOutPt(d,e),h.Clipper.SwapSides(b,d),h.Clipper.SwapPolyIndexes(b,d)}else if(!(0!==B&&1!=B||0!==q&&1!=q||G||l)){switch(L){case h.PolyFillType.pftPositive:k=b.WindCnt2;break;case h.PolyFillType.pftNegative:k=-b.WindCnt2;break;default:k=Math.abs(b.WindCnt2)}switch(E){case h.PolyFillType.pftPositive:w=d.WindCnt2;break;case h.PolyFillType.pftNegative:w=-d.WindCnt2;break;default:w=Math.abs(d.WindCnt2)}if(b.PolyTyp!=d.PolyTyp)this.AddLocalMinPoly(b,d,e);else if(1==B&& 1==q)switch(this.m_ClipType){case h.ClipType.ctIntersection:0=k&&0>=w&&this.AddLocalMinPoly(b,d,e);break;case h.ClipType.ctDifference:(b.PolyTyp==h.PolyType.ptClip&&0=k&&0>=w)&&this.AddLocalMinPoly(b,d,e);break;case h.ClipType.ctXor:this.AddLocalMinPoly(b,d,e)}else h.Clipper.SwapSides(b,d)}G!=l&&(G&&0<=b.OutIdx||l&&0<=d.OutIdx)&&(h.Clipper.SwapSides(b,d),h.Clipper.SwapPolyIndexes(b,d)); G&&this.DeleteFromAEL(b);l&&this.DeleteFromAEL(d)}};h.Clipper.prototype.DeleteFromAEL=function(b){var d=b.PrevInAEL,e=b.NextInAEL;if(null!==d||null!==e||b==this.m_ActiveEdges)null!==d?d.NextInAEL=e:this.m_ActiveEdges=e,null!==e&&(e.PrevInAEL=d),b.NextInAEL=null,b.PrevInAEL=null};h.Clipper.prototype.DeleteFromSEL=function(b){var d=b.PrevInSEL,e=b.NextInSEL;if(null!==d||null!==e||b==this.m_SortedEdges)null!==d?d.NextInSEL=e:this.m_SortedEdges=e,null!==e&&(e.PrevInSEL=d),b.NextInSEL=null,b.PrevInSEL= null};h.Clipper.prototype.UpdateEdgeIntoAEL=function(b){null===b.Value.NextInLML&&h.Error("UpdateEdgeIntoAEL: invalid call");var d=b.Value.PrevInAEL,e=b.Value.NextInAEL;b.Value.NextInLML.OutIdx=b.Value.OutIdx;null!==d?d.NextInAEL=b.Value.NextInLML:this.m_ActiveEdges=b.Value.NextInLML;null!==e&&(e.PrevInAEL=b.Value.NextInLML);b.Value.NextInLML.Side=b.Value.Side;b.Value.NextInLML.WindDelta=b.Value.WindDelta;b.Value.NextInLML.WindCnt=b.Value.WindCnt;b.Value.NextInLML.WindCnt2=b.Value.WindCnt2;b.Value= b.Value.NextInLML;b.Value.Curr.X=b.Value.Bot.X;b.Value.Curr.Y=b.Value.Bot.Y;b.Value.PrevInAEL=d;b.Value.NextInAEL=e;h.ClipperBase.IsHorizontal(b.Value)||this.InsertScanbeam(b.Value.Top.Y)};h.Clipper.prototype.ProcessHorizontals=function(b){for(var d=this.m_SortedEdges;null!==d;)this.DeleteFromSEL(d),this.ProcessHorizontal(d,b),d=this.m_SortedEdges};h.Clipper.prototype.GetHorzDirection=function(b,d,e,l){b.Bot.X=l){0<= b.OutIdx&&0!=b.WindDelta&&this.PrepareHorzJoins(b,d);if(B==w&&E){e==h.Direction.dLeftToRight?this.IntersectEdges(b,B,B.Top,!1):this.IntersectEdges(B,b,B.Top,!1);0<=w.OutIdx&&h.Error("ProcessHorizontal error");return}if(e==h.Direction.dLeftToRight){var L=new h.IntPoint(B.Curr.X,b.Curr.Y);this.IntersectEdges(b,B,L,!0)}else L=new h.IntPoint(B.Curr.X,b.Curr.Y),this.IntersectEdges(B,b,L,!0);this.SwapPositionsInAEL(b,B)}else if(e==h.Direction.dLeftToRight&&B.Curr.X>=k||e==h.Direction.dRightToLeft&&B.Curr.X<= l)break;B=q}0<=b.OutIdx&&0!==b.WindDelta&&this.PrepareHorzJoins(b,d);if(null!==b.NextInLML&&h.ClipperBase.IsHorizontal(b.NextInLML))(function(){b={Value:b};var d=this.UpdateEdgeIntoAEL(b);b=b.Value;return d}).call(this),0<=b.OutIdx&&this.AddOutPt(b,b.Bot),function(){e={Value:e};l={Value:l};k={Value:k};var d=this.GetHorzDirection(b,e,l,k);e=e.Value;l=l.Value;k=k.Value;return d}.call(this);else break}null!==b.NextInLML?0<=b.OutIdx?(r=this.AddOutPt(b,b.Top),function(){b={Value:b};var d=this.UpdateEdgeIntoAEL(b); b=b.Value;return d}.call(this),0!==b.WindDelta&&(w=b.PrevInAEL,q=b.NextInAEL,null!==w&&w.Curr.X==b.Bot.X&&w.Curr.Y==b.Bot.Y&&0!==w.WindDelta&&0<=w.OutIdx&&w.Curr.Y>w.Top.Y&&h.ClipperBase.SlopesEqual(b,w,this.m_UseFullRange)?(q=this.AddOutPt(w,b.Bot),this.AddJoin(r,q,b.Top)):null!==q&&q.Curr.X==b.Bot.X&&q.Curr.Y==b.Bot.Y&&0!==q.WindDelta&&0<=q.OutIdx&&q.Curr.Y>q.Top.Y&&h.ClipperBase.SlopesEqual(b,q,this.m_UseFullRange)&&(q=this.AddOutPt(q,b.Bot),this.AddJoin(r,q,b.Top)))):function(){b={Value:b};var d= this.UpdateEdgeIntoAEL(b);b=b.Value;return d}.call(this):null!==w?0<=w.OutIdx?(e==h.Direction.dLeftToRight?this.IntersectEdges(b,w,b.Top,!1):this.IntersectEdges(w,b,b.Top,!1),0<=w.OutIdx&&h.Error("ProcessHorizontal error")):(this.DeleteFromAEL(b),this.DeleteFromAEL(w)):(0<=b.OutIdx&&this.AddOutPt(b,b.Top),this.DeleteFromAEL(b))};h.Clipper.prototype.GetNextInAEL=function(b,d){return d==h.Direction.dLeftToRight?b.NextInAEL:b.PrevInAEL};h.Clipper.prototype.IsMinima=function(b){return null!==b&&b.Prev.NextInLML!= b&&b.Next.NextInLML!=b};h.Clipper.prototype.IsMaxima=function(b,d){return null!==b&&b.Top.Y==d&&null===b.NextInLML};h.Clipper.prototype.IsIntermediate=function(b,d){return b.Top.Y==d&&null!==b.NextInLML};h.Clipper.prototype.GetMaximaPair=function(b){var d=null;h.IntPoint.op_Equality(b.Next.Top,b.Top)&&null===b.Next.NextInLML?d=b.Next:h.IntPoint.op_Equality(b.Prev.Top,b.Top)&&null===b.Prev.NextInLML&&(d=b.Prev);return null===d||-2!=d.OutIdx&&(d.NextInAEL!=d.PrevInAEL||h.ClipperBase.IsHorizontal(d))? d:null};h.Clipper.prototype.ProcessIntersections=function(b,d){if(null==this.m_ActiveEdges)return!0;try{this.BuildIntersectList(b,d);if(0==this.m_IntersectList.length)return!0;if(1==this.m_IntersectList.length||this.FixupIntersectionOrder())this.ProcessIntersectList();else return!1}catch(e){this.m_SortedEdges=null,this.m_IntersectList.length=0,h.Error("ProcessIntersections error")}this.m_SortedEdges=null;return!0};h.Clipper.prototype.BuildIntersectList=function(b,d){if(null!==this.m_ActiveEdges){var e= this.m_ActiveEdges;for(this.m_SortedEdges=e;null!==e;)e.PrevInSEL=e.PrevInAEL,e.NextInSEL=e.NextInAEL,e.Curr.X=h.Clipper.TopX(e,d),e=e.NextInAEL;for(var l=!0;l&&null!==this.m_SortedEdges;){l=!1;for(e=this.m_SortedEdges;null!==e.NextInSEL;){var k=e.NextInSEL,r=new h.IntPoint;e.Curr.X>k.Curr.X?(r={Value:r},l=this.IntersectPoint(e,k,r),r=r.Value,!l&&e.Curr.X>k.Curr.X+1&&h.Error("Intersection error"),r.Y>b&&(r.Y=b,Math.abs(e.Dx)>Math.abs(k.Dx)?r.X=h.Clipper.TopX(k,b):r.X=h.Clipper.TopX(e,b)),l=new h.IntersectNode, l.Edge1=e,l.Edge2=k,l.Pt.X=r.X,l.Pt.Y=r.Y,this.m_IntersectList.push(l),this.SwapPositionsInSEL(e,k),l=!0):e=k}if(null!==e.PrevInSEL)e.PrevInSEL.NextInSEL=null;else break}this.m_SortedEdges=null}};h.Clipper.prototype.EdgesAdjacent=function(b){return b.Edge1.NextInSEL==b.Edge2||b.Edge1.PrevInSEL==b.Edge2};h.Clipper.IntersectNodeSort=function(b,d){return d.Pt.Y-b.Pt.Y};h.Clipper.prototype.FixupIntersectionOrder=function(){this.m_IntersectList.sort(this.m_IntersectNodeComparer);this.CopyAELToSEL();for(var b= this.m_IntersectList.length,d=0;db?Math.ceil(b-.5):Math.round(b)};La=function(b){return 0>b?Math.ceil(b-.5):Math.floor(b+.5)};$a=function(b){return 0>b?-Math.round(Math.abs(b)):Math.round(b)};jb=function(b){if(0>b)return b-=.5,-2147483648>b?Math.ceil(b):b|0;b+=.5;return 2147483647b.Bot.Y?(e.Value.X=d.Bot.X,e.Value.Y=d.Bot.Y):(e.Value.X=b.Bot.X,e.Value.Y=b.Bot.Y),!1;if(0===b.Delta.X)e.Value.X=b.Bot.X,h.ClipperBase.IsHorizontal(d)?e.Value.Y=d.Bot.Y:(k=d.Bot.Y-d.Bot.X/d.Dx,e.Value.Y=h.Clipper.Round(e.Value.X/d.Dx+k));else if(0===d.Delta.X)e.Value.X=d.Bot.X,h.ClipperBase.IsHorizontal(b)? e.Value.Y=b.Bot.Y:(l=b.Bot.Y-b.Bot.X/b.Dx,e.Value.Y=h.Clipper.Round(e.Value.X/b.Dx+l));else{l=b.Bot.X-b.Bot.Y*b.Dx;k=d.Bot.X-d.Bot.Y*d.Dx;var r=(k-l)/(b.Dx-d.Dx);e.Value.Y=h.Clipper.Round(r);Math.abs(b.Dx)d.Top.Y)return e.Value.Y=b.Top.Y,e.Value.X=h.Clipper.TopX(d,b.Top.Y),e.Value.Xl.Top.Y&&h.ClipperBase.SlopesEqual(d,l,this.m_UseFullRange)&&0!==d.WindDelta&&0!==l.WindDelta?(l=this.AddOutPt(l,d.Bot),this.AddJoin(e,l,d.Top)):null!==k&&k.Curr.X==d.Bot.X&&k.Curr.Y==d.Bot.Y&&null!==e&&0<=k.OutIdx&&k.Curr.Y>k.Top.Y&&h.ClipperBase.SlopesEqual(d,k,this.m_UseFullRange)&&0!==d.WindDelta&&0!==k.WindDelta&&(l=this.AddOutPt(k,d.Bot),this.AddJoin(e, l,d.Top))}d=d.NextInAEL}};h.Clipper.prototype.DoMaxima=function(b){var d=this.GetMaximaPair(b);if(null===d)0<=b.OutIdx&&this.AddOutPt(b,b.Top),this.DeleteFromAEL(b);else{for(var e=b.NextInAEL;null!==e&&e!=d;)this.IntersectEdges(b,e,b.Top,!0),this.SwapPositionsInAEL(b,e),e=b.NextInAEL;-1==b.OutIdx&&-1==d.OutIdx?(this.DeleteFromAEL(b),this.DeleteFromAEL(d)):0<=b.OutIdx&&0<=d.OutIdx?this.IntersectEdges(b,d,b.Top,!1):0===b.WindDelta?(0<=b.OutIdx&&(this.AddOutPt(b,b.Top),b.OutIdx=-1),this.DeleteFromAEL(b), 0<=d.OutIdx&&(this.AddOutPt(d,b.Top),d.OutIdx=-1),this.DeleteFromAEL(d)):h.Error("DoMaxima error")}};h.Clipper.ReversePaths=function(b){for(var d=0,e=b.length;dk)){for(var r=Array(k),w=0;wk||!l.IsOpen&&3>k)){this.FixHoleLinkage(l);var r=new h.PolyNode;b.m_AllPolys.push(r);l.PolyNode=r;r.m_polygon.length=k;for(var l=l.Pts.Prev,w=0;wd.Pt.X?h.Direction.dRightToLeft:h.Direction.dLeftToRight;l=e.Pt.X>l.Pt.X?h.Direction.dRightToLeft:h.Direction.dLeftToRight;if(w==l)return!1;if(w==h.Direction.dLeftToRight){for(;b.Next.Pt.X<=k.X&&b.Next.Pt.X>=b.Pt.X&&b.Next.Pt.Y==k.Y;)b=b.Next;r&&b.Pt.X!=k.X&&(b=b.Next);d= this.DupOutPt(b,!r);h.IntPoint.op_Inequality(d.Pt,k)&&(b=d,b.Pt.X=k.X,b.Pt.Y=k.Y,d=this.DupOutPt(b,!r))}else{for(;b.Next.Pt.X>=k.X&&b.Next.Pt.X<=b.Pt.X&&b.Next.Pt.Y==k.Y;)b=b.Next;r||b.Pt.X==k.X||(b=b.Next);d=this.DupOutPt(b,r);h.IntPoint.op_Inequality(d.Pt,k)&&(b=d,b.Pt.X=k.X,b.Pt.Y=k.Y,d=this.DupOutPt(b,r))}if(l==h.Direction.dLeftToRight){for(;e.Next.Pt.X<=k.X&&e.Next.Pt.X>=e.Pt.X&&e.Next.Pt.Y==k.Y;)e=e.Next;r&&e.Pt.X!=k.X&&(e=e.Next);l=this.DupOutPt(e,!r);h.IntPoint.op_Inequality(l.Pt,k)&&(e=l, e.Pt.X=k.X,e.Pt.Y=k.Y,l=this.DupOutPt(e,!r))}else{for(;e.Next.Pt.X>=k.X&&e.Next.Pt.X<=e.Pt.X&&e.Next.Pt.Y==k.Y;)e=e.Next;r||e.Pt.X==k.X||(e=e.Next);l=this.DupOutPt(e,r);h.IntPoint.op_Inequality(l.Pt,k)&&(e=l,e.Pt.X=k.X,e.Pt.Y=k.Y,l=this.DupOutPt(e,r))}w==h.Direction.dLeftToRight==r?(b.Prev=e,e.Next=b,d.Next=l,l.Prev=d):(b.Next=e,e.Prev=b,d.Prev=l,l.Next=d);return!0};h.Clipper.prototype.JoinPoints=function(b,d,e){var l=b.OutPt1,k;new h.OutPt;var r=b.OutPt2,w;new h.OutPt;if((w=b.OutPt1.Pt.Y==b.OffPt.Y)&& h.IntPoint.op_Equality(b.OffPt,b.OutPt1.Pt)&&h.IntPoint.op_Equality(b.OffPt,b.OutPt2.Pt)){for(k=b.OutPt1.Next;k!=l&&h.IntPoint.op_Equality(k.Pt,b.OffPt);)k=k.Next;k=k.Pt.Y>b.OffPt.Y;for(w=b.OutPt2.Next;w!=r&&h.IntPoint.op_Equality(w.Pt,b.OffPt);)w=w.Next;if(k==w.Pt.Y>b.OffPt.Y)return!1;k?(k=this.DupOutPt(l,!1),w=this.DupOutPt(r,!0),l.Prev=r,r.Next=l,k.Next=w,w.Prev=k):(k=this.DupOutPt(l,!0),w=this.DupOutPt(r,!1),l.Next=r,r.Prev=l,k.Prev=w,w.Next=k);b.OutPt1=l;b.OutPt2=k;return!0}if(w){for(k=l;l.Prev.Pt.Y== l.Pt.Y&&l.Prev!=k&&l.Prev!=r;)l=l.Prev;for(;k.Next.Pt.Y==k.Pt.Y&&k.Next!=l&&k.Next!=r;)k=k.Next;if(k.Next==l||k.Next==r)return!1;for(w=r;r.Prev.Pt.Y==r.Pt.Y&&r.Prev!=w&&r.Prev!=k;)r=r.Prev;for(;w.Next.Pt.Y==w.Pt.Y&&w.Next!=r&&w.Next!=l;)w=w.Next;if(w.Next==r||w.Next==l)return!1;var q,B;q={Value:q};B={Value:B};d=this.GetOverlap(l.Pt.X,k.Pt.X,r.Pt.X,w.Pt.X,q,B);q=q.Value;B=B.Value;if(!d)return!1;d=new h.IntPoint;l.Pt.X>=q&&l.Pt.X<=B?(d.X=l.Pt.X,d.Y=l.Pt.Y,e=l.Pt.X>k.Pt.X):r.Pt.X>=q&&r.Pt.X<=B?(d.X= r.Pt.X,d.Y=r.Pt.Y,e=r.Pt.X>w.Pt.X):k.Pt.X>=q&&k.Pt.X<=B?(d.X=k.Pt.X,d.Y=k.Pt.Y,e=k.Pt.X>l.Pt.X):(d.X=w.Pt.X,d.Y=w.Pt.Y,e=w.Pt.X>r.Pt.X);b.OutPt1=l;b.OutPt2=r;return this.JoinHorz(l,k,r,w,d,e)}for(k=l.Next;h.IntPoint.op_Equality(k.Pt,l.Pt)&&k!=l;)k=k.Next;if(q=k.Pt.Y>l.Pt.Y||!h.ClipperBase.SlopesEqual(l.Pt,k.Pt,b.OffPt,this.m_UseFullRange)){for(k=l.Prev;h.IntPoint.op_Equality(k.Pt,l.Pt)&&k!=l;)k=k.Prev;if(k.Pt.Y>l.Pt.Y||!h.ClipperBase.SlopesEqual(l.Pt,k.Pt,b.OffPt,this.m_UseFullRange))return!1}for(w= r.Next;h.IntPoint.op_Equality(w.Pt,r.Pt)&&w!=r;)w=w.Next;if(B=w.Pt.Y>r.Pt.Y||!h.ClipperBase.SlopesEqual(r.Pt,w.Pt,b.OffPt,this.m_UseFullRange)){for(w=r.Prev;h.IntPoint.op_Equality(w.Pt,r.Pt)&&w!=r;)w=w.Prev;if(w.Pt.Y>r.Pt.Y||!h.ClipperBase.SlopesEqual(r.Pt,w.Pt,b.OffPt,this.m_UseFullRange))return!1}if(k==l||w==r||k==w||d==e&&q==B)return!1;q?(k=this.DupOutPt(l,!1),w=this.DupOutPt(r,!0),l.Prev=r,r.Next=l,k.Next=w,w.Prev=k):(k=this.DupOutPt(l,!0),w=this.DupOutPt(r,!1),l.Next=r,r.Prev=l,k.Prev=w,w.Next= k);b.OutPt1=l;b.OutPt2=k;return!0};h.Clipper.GetBounds=function(b){for(var d=0,e=b.length;dl.right&&(l.right=b[d][k].X),b[d][k].Yl.bottom&&(l.bottom=b[d][k].Y);return l};h.Clipper.prototype.GetBounds2=function(b){var d=b,e=new h.IntRect; e.left=b.Pt.X;e.right=b.Pt.X;e.top=b.Pt.Y;e.bottom=b.Pt.Y;for(b=b.Next;b!=d;)b.Pt.Xe.right&&(e.right=b.Pt.X),b.Pt.Ye.bottom&&(e.bottom=b.Pt.Y),b=b.Next;return e};h.ClipperBase.prototype.PointInPolygon=h.Clipper.prototype.PointInPolygon=function(){var b=arguments,d=b.length;if(2==d){for(var d=b[0],e=b[1],b=0,l=e;;){var h=e.Pt.X,k=e.Pt.Y,w=e.Next.Pt.X,E=e.Next.Pt.Y;if(E==d.Y&&(w==d.X||k==d.Y&&w>d.X==h= d.X)if(w>d.X)b=1-b;else{h=(h-d.X)*(E-d.Y)-(w-d.X)*(k-d.Y);if(0==h)return-1;0k&&(b=1-b)}else if(w>d.X){h=(h-d.X)*(E-d.Y)-(w-d.X)*(k-d.Y);if(0==h)return-1;0k&&(b=1-b)}e=e.Next;if(l==e)break}return b}if(3==d){d=b[0];e=b[1];l=b[2];k=e;b=!1;if(l){do k.Pt.Y>d.Y!=k.Prev.Pt.Y>d.Y&&q.op_LessThan(new q(d.X-k.Pt.X),q.op_Division(q.Int128Mul(k.Prev.Pt.X-k.Pt.X,d.Y-k.Pt.Y),new q(k.Prev.Pt.Y-k.Pt.Y)))&&(b=!b),k=k.Next;while(k!=e)}else{do k.Pt.Y>d.Y!=k.Prev.Pt.Y>d.Y&&d.X-k.Pt.X<(k.Prev.Pt.X-k.Pt.X)* (d.Y-k.Pt.Y)/(k.Prev.Pt.Y-k.Pt.Y)&&(b=!b),k=k.Next;while(k!=e)}return b}};h.Clipper.prototype.Poly2ContainsPoly1=function(b,d){var e=b;do{var l=this.PointInPolygon(e.Pt,d);if(0<=l)return 0!=l;e=e.Next}while(e!=b);return!0};h.Clipper.prototype.FixupFirstLefts1=function(b,d){for(var e=0,l=this.m_PolyOuts.length;ed)return 0;for(var e=0,h=0,k=d-1;he&&(e=0);for(var r=Array(e),k=0;kl)){var k=new h.PolyNode;k.m_jointype=d;k.m_endtype=e;if(e==h.EndType.etClosedLine||e==h.EndType.etClosedPolygon)for(;0k.m_polygon[d].Y||b[w].Y==k.m_polygon[d].Y&&b[w].Xr||e!=h.EndType.etClosedPolygon&&0>r)&&(this.m_polyNodes.AddChild(k),e==h.EndType.etClosedPolygon))if(0>this.m_lowest.X)this.m_lowest=new h.IntPoint(0,d);else if(b=this.m_polyNodes.Childs()[this.m_lowest.X].m_polygon[this.m_lowest.Y], k.m_polygon[d].Y>b.Y||k.m_polygon[d].Y==b.Y&&k.m_polygon[d].X=this.ArcTolerance?h.ClipperOffset.def_arc_tolerance:this.ArcTolerance>Math.abs(b)*h.ClipperOffset.def_arc_tolerance?Math.abs(b)*h.ClipperOffset.def_arc_tolerance:this.ArcTolerance,l=3.14159265358979/Math.acos(1- d/Math.abs(b));this.m_sin=Math.sin(h.ClipperOffset.two_pi/l);this.m_cos=Math.cos(h.ClipperOffset.two_pi/l);this.m_StepsPerRad=l/h.ClipperOffset.two_pi;0>b&&(this.m_sin=-this.m_sin);for(d=0;d=b&&(3>k||e.m_endtype!=h.EndType.etClosedPolygon))){this.m_destPoly=[];if(1==k)if(e.m_jointype==h.JoinType.jtRound)for(var e=1,k=0,r=1;r<=l;r++){this.m_destPoly.push(new h.IntPoint(h.ClipperOffset.Round(this.m_srcPoly[0].X+ e*b),h.ClipperOffset.Round(this.m_srcPoly[0].Y+k*b)));var w=e,e=e*this.m_cos-this.m_sin*k,k=w*this.m_sin+k*this.m_cos}else for(k=e=-1,r=0;4>r;++r)this.m_destPoly.push(new h.IntPoint(h.ClipperOffset.Round(this.m_srcPoly[0].X+e*b),h.ClipperOffset.Round(this.m_srcPoly[0].Y+k*b))),0>e?e=1:0>k?k=1:e=-1;else{for(r=this.m_normals.length=0;rthis.m_sinA&&-5E-5this.m_sinA&&(this.m_sinA=-1);if(0>this.m_sinA*this.m_delta)this.m_destPoly.push(new h.IntPoint(h.ClipperOffset.Round(this.m_srcPoly[b].X+this.m_normals[d].X*this.m_delta),h.ClipperOffset.Round(this.m_srcPoly[b].Y+this.m_normals[d].Y*this.m_delta))),this.m_destPoly.push(new h.IntPoint(this.m_srcPoly[b])),this.m_destPoly.push(new h.IntPoint(h.ClipperOffset.Round(this.m_srcPoly[b].X+ this.m_normals[b].X*this.m_delta),h.ClipperOffset.Round(this.m_srcPoly[b].Y+this.m_normals[b].Y*this.m_delta)));else switch(e){case h.JoinType.jtMiter:e=1+(this.m_normals[b].X*this.m_normals[d].X+this.m_normals[b].Y*this.m_normals[d].Y);e>=this.m_miterLim?this.DoMiter(b,d,e):this.DoSquare(b,d);break;case h.JoinType.jtSquare:this.DoSquare(b,d);break;case h.JoinType.jtRound:this.DoRound(b,d)}return b};h.ClipperOffset.prototype.DoSquare=function(b,d){var e=Math.tan(Math.atan2(this.m_sinA,this.m_normals[d].X* this.m_normals[b].X+this.m_normals[d].Y*this.m_normals[b].Y)/4);this.m_destPoly.push(new h.IntPoint(h.ClipperOffset.Round(this.m_srcPoly[b].X+this.m_delta*(this.m_normals[d].X-this.m_normals[d].Y*e)),h.ClipperOffset.Round(this.m_srcPoly[b].Y+this.m_delta*(this.m_normals[d].Y+this.m_normals[d].X*e))));this.m_destPoly.push(new h.IntPoint(h.ClipperOffset.Round(this.m_srcPoly[b].X+this.m_delta*(this.m_normals[b].X+this.m_normals[b].Y*e)),h.ClipperOffset.Round(this.m_srcPoly[b].Y+this.m_delta*(this.m_normals[b].Y- this.m_normals[b].X*e))))};h.ClipperOffset.prototype.DoMiter=function(b,d,e){e=this.m_delta/e;this.m_destPoly.push(new h.IntPoint(h.ClipperOffset.Round(this.m_srcPoly[b].X+(this.m_normals[d].X+this.m_normals[b].X)*e),h.ClipperOffset.Round(this.m_srcPoly[b].Y+(this.m_normals[d].Y+this.m_normals[b].Y)*e)))};h.ClipperOffset.prototype.DoRound=function(b,d){for(var e=Math.atan2(this.m_sinA,this.m_normals[d].X*this.m_normals[b].X+this.m_normals[d].Y*this.m_normals[b].Y),e=h.Cast_Int32(h.ClipperOffset.Round(this.m_StepsPerRad* Math.abs(e))),l=this.m_normals[d].X,k=this.m_normals[d].Y,r,w=0;wd)return b;e||(b=[b]);for(var l=b.length,k,r,w,q,B,L,H,K=[],fa=0;fak)w=r,K.push(w);else{w=r;q=d*d;B=r[0];for(H=L=1;Hd)return h.JS.Clone(b);b[0]instanceof Array||(b=[b]);var e,l,k,r,w,q,B,L,H,K,fa,Q,Y,S,X,da=b.length,la=d*d,ka=[];for(e=0;er;r++){w=[];q=k.length;k[q-1].X!=k[0].X||k[q-1].Y!=k[0].Y?(fa=1,k.push({X:k[0].X,Y:k[0].Y}),q=k.length):fa=0;K=[];for(l=0;lL)return 0;for(d&&(b[L]=b[0], L++);--L;)r=b[L],q=r.X,r=r.Y,w=b[L-1],B=w.X,w=w.Y,k+=h((q-B)*(q-B)+(r-w)*(r-w));d&&b.pop();return k/e};h.JS.PerimeterOfPaths=function(b,d,e){e||(e=1);for(var k=0,q=0;qoa&&(oa=0);++oa;return function(){--oa;0>oa&&console.error("Wait count mismatch: "+k);if(0===oa)for(var q=0,H=ib.length;q=oa?q.startup():!1!==k.autostart&&ib.push(q);return q}var oa=-1,ib=[];"undefined"===typeof document||"undefined"===typeof window||"undefined"===typeof document.addEventListener||"undefined"!== typeof window.cindyDontWait&&!0===window.cindyDontWait||document.addEventListener("DOMContentLoaded",q("DOMContentLoaded"));var Ia=null,Ja=null,Ba={};H.getBaseDir=function(){if(null!==Ia)return Ia;for(var k=document.getElementsByTagName("script"),q=0;q tag for Cindy.js");return Ia=Ja=!1};H.addNewScript=function(k, q){q||console.error.bind(console);var Y=H.getBaseDir();if(!1===Y)return!1;var Q=document.createElement("script");Q.src=Y+k;var Y=Ja.nextSibling,X=Ja.parentElement;Y?X.insertBefore(Q,Y):X.appendChild(Q);return Q};H.loadScript=function(k,q,Y,Q){if(window[k])return Y(),!0;Q||(Q=console.error.bind(console));var X=Ba[k];if(!X){X=H.addNewScript(q,Q);if(!1===X)return Q("Can't load additional components."),!1;Ba[k]=X}X.addEventListener("load",Y);X.addEventListener("error",Q);return null};H._autoLoadingPlugin= {};H.autoLoadPlugin=function(k,q,Y){if(H._pluginRegistry[k])return Y(),!0;var Q=H._autoLoadingPlugin[k];if(!Q){q||(q=k+"-plugin.js");Q=H._autoLoadingPlugin[k]=[];k=H.addNewScript(q);if(!1===k)return!1;k.addEventListener("error",console.error.bind(console))}Q.push(Y);return null};var k={ctype:"undefined"};H.waitFor=q;H._pluginRegistry={};H.instances=[];H.registerPlugin=function(k,q,Y){if(1!==k)return console.error("Plugin API version "+k+" not supported"),!1;H._pluginRegistry[q]=Y;(H._autoLoadingPlugin[q]|| []).forEach(function(k){k()})};var Ra=0;H.dumpState=function(k){k=H.instances[k||0].saveState();console.log(JSON.stringify(k))};H.debugState=function(k){H.instances.map(function(k){var q=k.config,q=JSON.parse(JSON.stringify(q)),L=k.saveState();console.log(JSON.stringify(L));for(var H in L)q[H]=L[H];k.shutdown();return q}).forEach(function(k){H(k)})};H.newInstance=function(q){function H(){ga.width=W=ga.clientWidth;ga.height=V=ga.clientHeight;z.setTransform(1,0,0,1,0,0);x.setMat(25,0,0,25,250.5,250.5); if(yb)for(var a=0;aq.cinderella.version[2]?oa(.5*q.animation.speed):oa(q.animation.speed)),q.animation&&Sa(q.animation.accuracy)&&(Lb=q.animation.accuracy));q.statusbar&&(cc="string"===typeof q.statusbar?document.getElementById(q.statusbar):q.statusbar);var c=q.scripts,p=null;"string"===typeof c&&c.search(/\*/)&&(p=c);"object"!==typeof c&&(c=null);"move keydown mousedown mouseup mousedrag mousemove mouseclick init tick draw simulationstep simulationstart simulationstop ondrop".split(" ").forEach(function(a){var g; if(null!==c&&c[a])g=c[a];else{g=a+"script";if(q[g])g=document.getElementById(q[g]);else if(p){if(g=document.getElementById(p.replace(/\*/,a)),!g)return}else return;g=g.text}g=Ma(g,!1);"error"===g.ctype?console.error("Error compiling "+a+" script: "+g.message):ia[a]=g});Sa(q.grid)&&0=g.HAVE_METADATA?(c.width=g.videoWidth,c.height=g.videoHeight):(c.ready=!1,g.addEventListener("loadedmetadata",function(){c.width=g.videoWidth;c.height=g.videoHeight;c.ready=!0;c.whenReady=ka;p.forEach(ka);b()}),c.whenReady=p.push.bind(p));else if("canvas"===a)c.width=g.width,c.height=g.height;else return console.error("Not a valid image element", a,g),k;return{ctype:"image",value:c}}function Ba(a){function g(a,c){var g=document.createElement("button"),p=document.createElement("img");g.appendChild(p);k.appendChild(g);Ab(p,a);g.addEventListener("click",c);Na[a]=function(a){a?g.classList.add("CindyJS-active"):g.classList.remove("CindyJS-active")}}function c(a){if(h){var c=e.getBoundingClientRect();oa(f*(a.clientX-c.left-e.clientLeft+.5)/c.width+b)}}var p=document.createElement("div");p.className="CindyJS-animcontrols";ga.parentNode.appendChild(p); var b=0,d=1,f=1;a.animation&&a.animation.speedRange&&Sa(a.animation.speedRange[0])&&Sa(a.animation.speedRange[1])&&(b=a.animation.speedRange[0],d=a.animation.speedRange[1],f=d-b);var e=document.createElement("div");e.className="CindyJS-animspeed";p.appendChild(e);var m=document.createElement("div");e.appendChild(m);K(e,"mousedown",function(a){h=!0;c(a)});K(e,"mousemove",c);K(ga.parentNode,"mouseup",function(a){h=!1},!0);var k=document.createElement("div");k.className="CindyJS-animbuttons";p.appendChild(k); g("play",S);g("pause",Za);g("stop",Ja);Na.stop(!0);fc=function(a){a=(a-b)/f;a=Math.max(0,Math.min(1,a));a=.1*Math.round(1E3*a);m.style.width=a+"%"};var h=!1}function oa(a){Nc=a;fc&&fc(a)}function ka(a){return a()}function h(a,g){var c=null;q.plugins&&(c=q.plugins[a]);c||(c=va._pluginRegistry[a]);c?t.use$1([v.wrap(a)],{}):(++Oc,va.autoLoadPlugin(a,g,function(){t.use$1([v.wrap(a)],{});Ia()}))}function Ia(){0===--Oc&&(A(ia.init),(q.animation||q).autoplay&&S(),qa.canvas&&la(qa.canvas,q))}function da(){null!== Bb&&(ma.set(Bb.state),Object.keys(Bb.speeds).forEach(function(a){var g=u.csnames[a];"undefined"!==typeof g.behavior&&(a=Bb.speeds[a],g.behavior.vx=a[0],g.behavior.vy=a[1],g.behavior.vz=a[2],g.behavior.fx=0,g.behavior.fy=0,g.behavior.fz=0)}),Id())}function S(){if(!Ua){if(Nb){var a=bb.backup;a.set(ma);for(var g={},c=0;c
';document.body.appendChild(c);g=document.getElementById("cmd");p=document.getElementById("log");g.onkeydown=function(c){13===c.keyCode&&""!==g.value&&(a["in"](g.value),c= t.parse$1([v.wrap(g.value)],[]),c=A(c),console.log(w(c)),"undefined"!==c.ctype&&ha.out(w(c)),g.value="",p.scrollTop=p.scrollHeight)};this.append=function(a){p.appendChild(a)};this.clear=function(){p.innerHTML=""}}function pb(a){var g=a;"string"===typeof a&&(g=document.getElementById(a));this.append=function(a){g.appendChild(a)};this.clear=function(){g.innerHTML=""}}function Ya(){this.append=function(a){};this.clear=function(){}}function K(a,g,c,p){void 0===p&&(p=!1);kb.push(function(){a.removeEventListener(g, c,p)});a.addEventListener(g,c,p)}function la(a,g){function c(c){var g=a.getBoundingClientRect();c=x.to(c.clientX-g.left-a.clientLeft+.5,c.clientY-g.top-a.clientTop+.5);U.prevx=U.x;U.prevy=U.y;U.x=c[0];U.y=c[1];sa[0]=U.x;sa[1]=U.y;b()}function p(a){U.down=!1;aa=void 0;lb();A(ia.mouseup);sb("mouseup");b();a.preventDefault()}var ba=null;"undefined"!==typeof MutationObserver&&(ba=MutationObserver);ba||"undefined"===typeof WebKitMutationObserver||(ba=WebKitMutationObserver);ba?(ba=new ba(function(c){document.body.contains(a)|| La()}),ba.observe(document.documentElement,{childList:!0,subtree:!0}),kb.push(function(){ba.disconnect()})):(K(a,"DOMNodeRemovedFromDocument",La),K(a,"DOMNodeRemoved",La));!0===g.keylistener?K(document,"keydown",function(a){l(a);return!1}):ia.keydown&&(a.setAttribute("tabindex","0"),K(a,"mousedown",function(){a.focus()}),K(a,"keydown",function(a){9!==a.keyCode&&(l(a),a.preventDefault())}));K(a,"mousedown",function(a){U.button=a.which;c(a);A(ia.mousedown);sb("mousedown");U.down=!0;a.preventDefault()}); K(a,"mouseup",function(a){U.down=!1;aa=void 0;lb();A(ia.mouseup);sb("mouseup");b();a.preventDefault()});K(a,"mousemove",function(a){c(a);U.down?A(ia.mousedrag):A(ia.mousemove);sb("mousemove");a.preventDefault()});K(a,"click",function(a){c(a);A(ia.mouseclick);a.preventDefault()});K(a,"dragenter",function(a){a.preventDefault()});K(a,"dragover",function(a){a.preventDefault()});K(a,"drop",function(c){function g(a,c,R){ba[a]=f.turnIntoCSList([c,v.string(R||c.ctype),v.string(p[a].type),v.string(p[a].name)]); 0===--d&&(a=m,jc=f.turnIntoCSList(ba),kc=a,A(ia.ondrop),kc=jc=k,b())}c.preventDefault();var p=c.dataTransfer.files,ba=Array(p.length),d=p.length,e=c.currentTarget.getBoundingClientRect(),m=f.realVector(x.to(c.clientX-e.left-a.clientLeft+.5,c.clientY-e.top-a.clientTop+.5));Array.prototype.forEach.call(p,function(a,c){var p=new FileReader;/^text\//.test(a.type)?(p.onload=function(){var a=v.string(p.result);g(c,a)},p.readAsText(a)):/^image\//.test(a.type)?(p.onload=function(){var a=new Image;a.onload= function(){g(c,X(a))};a.src=p.result},p.readAsDataURL(a)):g(c,k)})});K(a,"touchstart",function(a){c(a.targetTouches[0]);A(ia.mousedown);U.down=!0;sb("mousedown");a.preventDefault()},!1);K(a,"touchmove",function(a){c(a.targetTouches[0]);U.down?A(ia.mousedrag):A(ia.mousemove);sb("mousemove");a.preventDefault()},!0);K(a,"touchend",p,!1);"undefined"!==typeof document&&document.body&&K(document.body,"touchcancel",p,!1);"undefined"!==typeof window&&K(window,"resize",function(){Ob(function(){H();b()})}, !1);ib(a.parentNode);b()}function qb(a,g){var c=document.createElement("div");c.setAttribute("style",g);a.appendChild(c);return c}function ib(a){function g(){p.scrollLeft=p.scrollTop=ba.scrollLeft=ba.scrollTop=1E5}function c(){if(d!==a.clientWidth||f!==a.clientHeight)d=a.clientWidth,f=a.clientHeight,e||(e=!0,Ob(function(){e=!1;H();b()}));g()}if("undefined"!==typeof document){var p=qb(a,"position: absolute; transition: 0s; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden; z-index: -1; visibility: hidden;"); qb(p,"position: absolute; transition: 0s; left: 0; top: 0; width: 100000px; height: 100000px");var ba=qb(a,"position: absolute; transition: 0s; left: 0; top: 0; right: 0; bottom: 0; overflow: hidden; z-index: -1; visibility: hidden;");qb(ba,"position: absolute; transition: 0s; left: 0; top: 0; width: 200%; height: 200%");g();var d=a.clientWidth,f=a.clientHeight,e=!1;p.addEventListener("scroll",c);ba.addEventListener("scroll",c)}}function b(){lc||(lc=Ob(d))}function d(){lc=null;if(!ic){if(Ua){var a= Date.now(),g=Math.min(50,a-gc)*Nc*Kd;gc=a;a=Cb+g;hc&&"undefined"!==typeof ra&&ra.tick(g);Cb=a;Ua&&A(ia.tick)}e();Ua&&b()}}function e(){x.reset();z.save();z.clearRect(0,0,W,V);var a=x.drawingstate.matrix,g,c,p,b,d;if(0!==Ta){z.beginPath();z.strokeStyle="rgba(0,0,0,0.1)";z.lineWidth=1;z.lineCap="butt";g=Ta*a.a;for(b=Math.ceil(-a.tx/g);(d=b*g+a.tx)c[0]&&(c=[h.value.real,k]),l.value.realp[0]&&(p=[l.value.real,k])))}c[0]-b[0]>p[0]-d[0]?(b=b[1],c=c[1]):(b=d[1],c=p[1]);if(b!==c){t.draw$2([b,c],{dashtype:g.dashtype,size:g.size,color:g.color, alpha:g.alpha,overhang:g.overhang});break a}}t.draw$1([g.homog],{dashtype:g.dashtype,size:g.size,color:g.color,alpha:g.alpha})}for(a=0;a"+w(a.value):"shape"===a.ctype?a.type:"error"===a.ctype?"Error: "+a.message:"variable"===a.ctype?w(J.getvar(a.name)):"geo"===a.ctype?a.value.name:"image"===a.ctype?"IMAGE":"_?_"}function E(a,g){var c="undefined"===a[0].ctype,p="undefined"===a[1].ctype,b=A(a[1]);if(c||p)return k;"variable"===a[0].ctype?J.setvar(a[0].name,b):"infix"===a[0].ctype?"_"===a[0].oper?D.assigntake(a[0],b):console.error("Can't use infix expression as lvalue"): "field"===a[0].ctype?D.assigndot(a[0],b):"function"===a[0].ctype&&"genList"===a[0].oper?"list"===b.ctype?D.assignlist(a[0].args,b.value):console.error("Expected list in rhs of assignment"):console.error("Left hand side of assignment is not a recognized lvalue");return b}function B(a,g){var c=A(a[0]),p=A(a[1]);if(c.ctype===p.ctype){if("number"===c.ctype)return v.bool(c.value.real===p.value.real&&c.value.imag===p.value.imag);if("string"===c.ctype||"boolean"===c.ctype)return v.bool(c.value===p.value); if("list"===c.ctype)return f.equals(c,p);if("geo"===c.ctype)return v.bool(c.value===p.value)}return{ctype:"boolean",value:!1}}function Ec(a,g){return v.not(B(a,g))}function pa(a,g){var c=C(a[0]),p=C(a[1]);return"number"===c.ctype&&"number"===p.ctype?{ctype:"boolean",value:m._helper.isAlmostEqual(c,p)}:"string"===c.ctype&&"string"===p.ctype||"boolean"===c.ctype&&"boolean"===p.ctype?{ctype:"boolean",value:c.value===p.value}:"list"===c.ctype&&"list"===p.ctype?f.almostequals(c,p):{ctype:"boolean",value:!1}} function na(a,g){var c=C(a[0]),p=C(a[1]);return"boolean"===c.ctype&&"boolean"===p.ctype?{ctype:"boolean",value:c.value&&p.value}:k}function Gc(a,g){var c=C(a[0]),p=C(a[1]);return"boolean"===c.ctype&&"boolean"===p.ctype?{ctype:"boolean",value:c.value||p.value}:k}function Hc(a,g){var c=a[0];"void"!==c.ctype&&(c=C(c));var p=C(a[1]),b=v.add(c,p);"Angle"===c.usage&&"Angle"===p.usage&&(b=v.withUsage(b,"Angle"));return b}function Xb(a,g){var c=a[0];"void"!==c.ctype&&(c=C(c));var p=C(a[1]),b=v.sub(c,p);"Angle"=== c.usage&&"Angle"===p.usage&&(b=v.withUsage(b,"Angle"));return b}function Ic(a,g){var c=C(a[0]),p=C(a[1]),b=v.mult(c,p);"Angle"!==c.usage||p.usage?"Angle"!==p.usage||c.usage||(b=v.withUsage(b,"Angle")):b=v.withUsage(b,"Angle");return b}function Jc(a,g){var c=C(a[0]),p=C(a[1]);"number"===p.ctype&&m._helper.isZero(p)&&ha.err("WARNING: Division by zero!");var b=v.div(c,p);"Angle"!==c.usage||p.usage?"Angle"!==p.usage||c.usage||(b=v.withUsage(b,"Angle")):b=v.withUsage(b,"Angle");return b}function Kc(a, g){var c=C(a[0]),p=C(a[1]);return"number"===c.ctype&&"number"===p.ctype?m.pow(c,p):k}function Lc(a,g){var c=M(a[0]),p=M(a[1]);if(c!==k&&p!==k){var b=f.cross(c,p);"Point"===c.usage&&"Point"===p.usage&&(b=v.withUsage(b,"Line"));"Line"===c.usage&&"Line"===p.usage&&(b=v.withUsage(b,"Point"));return b}return k}function Zb(a){var g=a.length;if(0===g)return[];if(1===g)return[0];if(2===g)return a[0][0]+a[1][1]<=a[0][1]+a[1][0]?[0,1]:[1,0];if(4a[f][e]&&(m[f].cost=a[f][e]);for(;;){for(f=0;fh[f][e]&&(l=h[f][e]);for(f=0;fp&&(p=c.value.length+p+1);if(0g.left&&(e=g.left);mg.top&&(k=g.top);h"===m.oper){var k=m.args[0];if("variable"!==k.ctype)throw ea("Modifier name must be an identifier",m.start);f[k.name]=m.args[1]}else p.push(m)}d.oper=d.name.toLowerCase()+"$"+d.args.length}else if("||"===f)if(1===b.length)c.push({ctype:"function",oper:"abs_infix", args:b,modifs:{}});else if(2===b.length)c.push({ctype:"function",oper:"dist_infix",args:b,modifs:{}});else throw ea("Don't support |\u2026| with "+b.length+" arguments",p.start);else{if("{}"===f)throw ea("{\u2026} reserved for future use",p.start);"[]"!==f&&1===b.length?c.push({ctype:"paren",args:b}):0===b.length?c.push({ctype:"list",value:[]}):c.push({ctype:"function",oper:"genList",args:b,modifs:{}})}break;case "EOF":break a}for(c.length&1||c.push(null);3<=c.length;)Pb(c);return{expr:c[0],closedBy:p}} function Db(a){this.usedFunctions={};this.usedVariables={}}function A(a){if(void 0===a)return k;if("infix"===a.ctype)return a.impl(a.args,{},a);if("variable"===a.ctype)return A(J.getvar(a.name));if("function"===a.ctype)return D.evaluate(a.oper,a.args,a.modifs);if("void"===a.ctype)return k;if("field"===a.ctype){var g=A(a.obj);return"geo"===g.ctype?xa.getField(g.value,a.key):"list"===g.ctype?f.getField(g,a.key):k}return a}function C(a){a=A(a);if("geo"===a.ctype){var g=a.value;if("P"===g.kind)return xa.getField(g, "xy");if("V"===g.kind)return g.value}return a}function M(a){a=A(a);if("geo"===a.ctype){var g=a.value;if("P"===g.kind||"L"===g.kind)return xa.getField(g,"homog")}return f._helper.isNumberVecN(a,3)?a:f._helper.isNumberVecN(a,2)?(g=f.turnIntoCSList([a.value[0],a.value[1],m.real(1)]),a.usage&&(g=v.withUsage(g,a.usage)),g):k}function Ma(a){var g=new Db;g.usedFunctions=Mc;g.infixmap=P;a=g.parse(a);for(var c in g.usedVariables)J.create(c);return a}function bd(){this._path=[];this._defs=[""];this._imgcache= [];this._body=[];this._saveStack=[""];this._clipIndex=0;this._stroke=this._fill="#000";this._strokeOpacity=this._fillOpacity=null;this.height=this.width=0;this.lineWidth=1;this.lineCap="butt";this.lineJoin="miter";this.miterLimit=10;this.globalAlpha=1}function cd(){this._body=[];this._yPos=this._xPos=NaN;this._extGState={Af255:"<< /ca 1 >>",As255:"<< /CA 1 >>"};this._objects=[["%PDF-1.4\n"]];this._offset=this._objects[0][0].length;this._nextIndex=5;this._imgcache=[];this._xobjects={};this._pathUsed= -1;this._fillAlpha=this._strokeAlpha=this._globalAlpha=1;this.height=this.width=0;this.lineWidth=1;this.lineCap="butt";this.lineJoin="miter";this.miterLimit=10}function dd(a,g){var c=a.width,p=a.height,b=document.createElement("canvas");b.setAttribute("width",c);b.setAttribute("height",p);b.setAttribute("style","display:none;");var d=qa.canvas;d.parentNode.insertBefore(b,d.nextSibling);try{return b.getContext("2d").drawImage(a,0,0,c,p),b.toDataURL(g||"image/png")}finally{b.parentNode.removeChild(b)}} function Rd(a){a=a.replace(RegExp("[^ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/]+","g"),"");var g=new Uint8Array(3*a.length>>2),c,p,b,d,f,e;for(p=c=0;c+3>4,g[p++]=d<<4|f>>2,g[p++]=f<<6|e;switch(a.length-c){case 0:break;case 2:b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c));d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c+1));g[p++]=b<<2|d>>4;break;case 3:b="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c));d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c+1));f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".indexOf(a.charAt(c+ 2));g[p++]=b<<2|d>>4;g[p++]=d<<4|f>>2;break;default:throw Error("Malformed Base64 input: "+(a.length-c)+" chars left: "+a.substr(c));}if(p!==g.length)throw Error("Failed assertion: "+p+" should be "+g.length);return g}function Sd(a){function g(c){return(a[c]<<24|a[c+1]<<16|a[c+2]<<8|a[c+3])>>>0}if(57>a.length)throw Error("Too short to be a PNG file");if(2303741511!==g(0)||218765834!==g(4))throw Error("PNG signature missing");for(var c=[],p=8;pa.length)throw Error("Incomplete chunk at offset 0x"+ p.toString(16));var b=g(p);if(2147483648<=b)throw Error("Chunk too long");var d=p+12+b;if(d>a.length)throw Error("Incomplete chunk at offset 0x"+p.toString(16));var f=a.subarray(p+4,p+8),f=String.fromCharCode.apply(String,f);c.push({len:b,type:f,data:a.subarray(p+8,p+8+b),crc:g(p+8+b)});p=d}return c}function Qb(a,g){var c;if(c=/^rgba\(([0-9]+), *([0-9]+), *([0-9]+), *([0-9]+)\)$/.exec(a))g(+c[1],+c[2],+c[3],+c[4]);else if(c=/^rgb\(([0-9]+), *([0-9]+), *([0-9]+)\)$/.exec(a))g(+c[1],+c[2],+c[3],1); else throw Error("Can't handle color style "+a);}function Td(a){var g=1;Object.keys(ab).forEach(function(c){var p=ab[c].value.img;if(void 0===p.cachedDataURL&&p.src)if("data:"===p.src.substr(0,5))p.cachedDataURL=p.src;else{++g;p.cachedDataURL=null;var b=new XMLHttpRequest;b.responseType="blob";b.onreadystatechange=function(){if(b.readyState===XMLHttpRequest.DONE)if(200===b.status){var c=new FileReader;c.onloadend=function(){p.cachedDataURL=c.result;console.log("Cached data for image "+p.src);0=== --g&&a()};c.readAsDataURL(b.response)}else console.error("Failed to load "+p.src+": "+b.statusText),0===--g&&a()};b.open("GET",p.src,!0);b.send()}});0===--g&&a()}function nb(a,g,c){for(c||(c="0");a.length20/l&&(h=1E4)}else if("C"===d.kind)k=u.csnames[d.args[0]],h=0,"undefined"!==typeof d.radius&&(h=d.radius.value.real),e=m.div(k.homog.value[0],k.homog.value[2]).value.real,k=m.div(k.homog.value[1],k.homog.value[2]).value.real, e-=a.x,k-=a.y,h=Math.sqrt(e*e+k*k)-h,k=e=0,0>h&&(h=-h),h+=30/l;else if("L"===d.kind||"S"===d.kind)e=d.homog,h=m,k=h.add(h.mult(e.value[0],h.conjugate(e.value[0])),h.mult(e.value[1],h.conjugate(e.value[1]))),k=f.scaldiv(h.sqrt(k),e),h=k.value[0].value.real*a.x+k.value[1].value.real*a.y+k.value[2].value.real,e=k.value[0].value.real*h,k=k.value[1].value.real*h,0>h&&(h=-h),h+=1;hMath.abs(a.offset.x)&&.5>Math.abs(a.offset.y)&&!a.mover.tmp}function gd(a){return pc(a)&&"P"===a.mover.kind}function hd(a){return pc(a)&&("L"===a.mover.kind||"S"===a.mover.kind)}function qc(a){aa={mover:a,offset:{x:0,y:0},prev:{x:U.x,y:U.y}}}function ob(){var a=Fb(U);gd(a)?ta[Qa]=a.mover:(ta[Qa]={type:"Free",name:Pa(),labeled:!0,pos:[sa[0],sa[1],1]},Da(ta[Qa]));Qa++}function id(){var a= Fb(U);return hd(a)?(ta[Qa]=a.mover,Qa++,!0):!1}function jd(){var a=Fb(U),g;(g=hd(a))||(g=pc(a)&&"C"===a.mover.kind);return g?(ta[Qa]=a.mover,Qa++,!0):!1}function ub(){var a=Fb(U);if(gd(a))for(Gb.args[1]=a.mover.name,a=0;ad*d):!1}function rc(a,g){a.isshowing= !0;if(a.args)for(var c=0;c1E12*g(ya[c+1])&&(ya[c+1]=0)}function Ub(){if(vb)Ga=!0;else throw td;}function ud(a,g,c,p,b){return v.add(p,v.mult(c,v.sub(b,p)))}function Ld(){I&&(I.currentMouseAndScripts=[]);tc=!0;Ga=!1;ma.set(ya); if(aa){var a=aa.mover,g=f.realVector([U.x+aa.offset.x,U.y+aa.offset.y,1]);uc(a,g,"mouse");aa.prev.x=U.x;aa.prev.y=U.y}A(ia.move);A(ia.draw);Ga||lb();tc=!1;I&&(I.fullLog.push(f.turnIntoCSList([f.turnIntoCSList(I.currentMouseAndScripts)])),I.length>I.logLength&&I.splice(0,I.length-I.logLength),I.currentMouseAndScripts=null,I.postMouseHooks.forEach(function(a){a()}))}function Ea(a,g,c){tc?uc(a,g,c):(lb(),Ga=!1,uc(a,g,c),lb())}function uc(a,g,c){I&&I.currentMouseAndScripts&&(I.currentMover=[]);Fa.set(ma); var p=1E4,b;b=Tb[a.name];if(!b){var d={},e=0;b=[];d[a.name]=a;for(var k=u.gslp,h=0;hq?(r=[g,a],n=q):r=[a,g];q=function(){};if(I&&I.currentStep){var t=[I.labelTracing2,v.wrap(I.currentElement.name),f.turnIntoCSList(r),f.turnIntoCSList([c,p]),f.realMatrix([[b,d],[e,m]]),v.wrap(n),v.wrap(h),v.wrap(l),k];I.currentStep.push(f.turnIntoCSList(t));q=function(a){I.hasOwnProperty(a)||(I[a]=v.wrap(a));t[t.length-1]=I[a]}}f._helper.isNaN(a)||f._helper.isNaN(g)?(q("Tracing failed due to NaNs."), Ga=!0):h>3*n&&l>3*n?q("Normal case, everything all right."):1E-5>l?1E-5>h?q("Staying inside singularity."):(q("Moved into singularity."),Ga=!0):1E-5>h?q("Moved out of singularity."):(vb?q("Reached refinement limit, giving up."):q("Need to refine."),Ub());return r}function vc(a,g,c,p){var b=Z(3),d=Z(3),e=Z(3),m=Z(3);a=ce(a,g,c,p,b,d,e,m);T(a[0]);T(a[1]);T(a[2]);T(a[3]);return f.turnIntoCSList(a)}function ce(a,g,c,p,b,d,e,m){var h=function(){};b=[b,d,e,m];a=[a,g,c,p];if(eb)return a;d=0;p=Array(4);for(c= 0;4>c;c++)for(p[c]=Array(4),m=0;4>m;m++)e=f.projectiveDistMinScal(b[c],a[m]),p[c][m]=e;e=Zb(p);g=Array(4);for(c=0;4>c;++c)g[c]=a[e[c]],d+=p[c][e[c]];var l=1*d,n=Infinity,q=Infinity;for(c=0;4>c;c++){if(f._helper.isNaN(a[c]))return h("Tracing failed due to NaNs."),Ga=!0,g;for(m=c+1;4>m;m++)e=f.projectiveDistMinScal(b[c],b[m]),n>e&&(n=e),e=f.projectiveDistMinScal(g[c],g[m]),q>e&&(q=e)}if(I&&I.currentStep){var r=[I.labelTracing4,v.wrap(I.currentElement.name),f.turnIntoCSList(g),f.turnIntoCSList(b),f.realMatrix(p), v.wrap(d),v.wrap(n),v.wrap(q),k];I.currentStep.push(f.turnIntoCSList(r));h=function(a){I.hasOwnProperty(a)||(I[a]=v.wrap(a));r[r.length-1]=I[a]}}n>l&&q>l||(1E-5>q?1E-5>n?h("Staying inside singularity."):(h("Moved into singularity."),Ga=!0):1E-5>n?h("Moved out of singularity."):(vb?h("Reached refinement limit, giving up."):h("Need to refine."),Ub()));return g}function wd(a){var g=a.length,c,p;if(eb){for(c=0;c1-n&&(m=1-n),n=f.sesquilinearproduct(a[c],a[p]).value,n=(n.real*n.real+n.imag*n.imag)/(e[c]*e[p]),h>1-n&&(h=1-n)}n=Zb(l); p=Array(g);d=0;e=!1;for(c=0;c3*d&&h>3*d?a("Normal case, everything all right."):1E-5> h?1E-5>m?a("Staying inside singularity."):(a("Moved into singularity."),Ga=!0):1E-5>m?a("Moved out of singularity."):(vb?a("Reached refinement limit, giving up."):a("Need to refine."),Ub());return p}function fb(a){if(fb.hasOwnProperty(a.kind))fb[a.kind](a)}function xd(a,g){return function(){a.incidences.push(g.name);g.incidences.push(a.name)}}function yd(a,g){return{toString:function(){return"point "+a.name+" incident line "+g.name},apply:xd(a,g),holds:function(){var c=f.scaldiv(f.abs(a.homog),a.homog), p=f.scaldiv(f.abs(g.homog),g.homog);return 1E-13>m.abs(f.scalproduct(c,p)).value.real}}}function zd(a,g){return{toString:function(){return"point "+a.name+" incident conic "+g.name},apply:xd(a,g),holds:function(){var c=v.mult(g.matrix,a.homog),c=v.mult(a.homog,c),c=m.abs(c);1E-13>c.value.real&&(a.incidences.push(g.name),g.incidences.push(a.name))}}}function md(){if(0!==hb.length){for(var a=0;aa&&(p+=2*Math.PI);0===a&&0>g&&(p=Math.PI);p>Math.PI&&(p-=2*Math.PI);return m.snap({ctype:"number",value:{real:Math.log(c),imag:p}})};m.pow=function(a,g){return m._helper.isZero(g)?m.one:m._helper.isZero(a)?m.zero:m._helper.isReal(g)?m.powRealExponent(a,g.value.real):m.exp(m.mult(m.log(a),g))};m.mod=function(a,g){var c=a.value.real,p=g.value.real,b=a.value.imag,d=g.value.imag,c=c-Math.floor(c/p)*p,b=b-Math.floor(b/d)*d;0===p&&(c=0);0===d&&(b=0);return m.snap({ctype:"number",value:{real:c, imag:b}})};m._helper.seed="NO";m._helper.seedrandom=function(a){a-=Math.floor(a);m._helper.seed=.8*a+.1};m._helper.rand=function(){if("NO"===m._helper.seed)return Math.random();var a=m._helper.seed,a=1E3*Math.sin(1E3*a),a=a-Math.floor(a);return m._helper.seed=a};m._helper.randnormal=function(){var a=m._helper.rand(),g=m._helper.rand();return Math.sqrt(-2*Math.log(a))*Math.cos(2*Math.PI*g)};m._helper.isEqual=function(a,g){return a.value.real===g.value.real&&a.value.imag===g.value.imag};m._helper.isLessThan= function(a,g){return a.value.real-p&&a-p};m._helper.isZero=function(a){return 0===a.value.real&&0===a.value.imag};m._helper.isAlmostZero=function(a){var g=a.value.real;a=a.value.imag; return g-m.eps&&a-m.eps};m._helper.isReal=function(a){return 0===a.value.imag};m._helper.isAlmostReal=function(a){a=a.value.imag;return a-m.epsbig};m._helper.isNaN=function(a){return isNaN(a.value.real)||isNaN(a.value.imag)};m._helper.isFinite=function(a){return isFinite(a.value.real)&&isFinite(a.value.imag)};m._helper.isAlmostImag=function(a){a=a.value.real;return a-m.epsbig};m._helper.z3a=m.complex(-.5,.5*Math.sqrt(3));m._helper.z3b=m.complex(-.5,-.5* Math.sqrt(3));m._helper.cub1={ctype:"list",value:[m.one,m.one,m.one]};m._helper.cub2={ctype:"list",value:[m._helper.z3a,m.one,m._helper.z3b]};m._helper.cub3={ctype:"list",value:[m._helper.z3b,m.one,m._helper.z3a]};m.solveCubic=function(a,g,c,p){a=m._helper.solveCubicHelper(a,g,c,p);return[f.scalproduct(m._helper.cub1,a),f.scalproduct(m._helper.cub2,a),f.scalproduct(m._helper.cub3,a)]};m._helper.solveCubicHelper=function(a,g,c,p){var b=a.value.real;a=a.value.imag;var d=g.value.real;g=g.value.imag; var e=c.value.real,k=c.value.imag,h=p.value.real,l=p.value.imag,n=b*e-a*k;c=b*k+a*e;p=4*n-(d*d-g*g);var q=4*c-2*d*g,r=b*d-a*g,t=b*g+a*d,u=p*e-q*k-18*(r*h-t*l),q=p*k+q*e-18*(r*l+t*h);p=27*(b*b-a*a);var v=54*a*b,w=p*h-v*l,y=p*l+v*h,x=d*d-g*g,z=2*d*g,A=x*d-z*g,B=x*g+z*d,C=w+4*A,v=y+4*B;p=27*(u*e-q*k+C*h-v*l);q=27*(u*k+q*e+C*l+v*h);C=Math.sqrt(Math.sqrt(p*p+q*q));v=Math.atan2(q,p);q=C*Math.sin(v/2);p=C*Math.cos(v/2);A=-2*A+9*(r*e-t*k)-w+(p*b-q*a);B=-2*B+9*(r*k+t*e)-y+(p*a+q*b);p=Math.exp(Math.log(Math.sqrt(A* A+B*B))/3);e=Math.atan2(B,A);v=p*Math.sin(e/3);q=p*Math.cos(e/3);p*=p;e*=2;n=2*x-6*n;c=2*z-6*c;z=-1.5874010519681996*(d*q-g*v);d=-1.5874010519681996*(d*v+g*q);g=1.2599210498948732*p*Math.cos(e/3);e=1.2599210498948732*p*Math.sin(e/3);p=4.762203155904599*(q*b-v*a);q=4.762203155904599*(q*a+v*b);b=p*p+q*q;v=(-n*q+c*p)/b;n=(n*p+c*q)/b;c=v;v=(-z*q+d*p)/b;z=(z*p+d*q)/b;d=v;v=(-g*q+e*p)/b;g=(g*p+e*q)/b;e=v;return f.turnIntoCSList([m.complex(n,c),m.complex(z,d),m.complex(g,e)])};var f={_helper:{},turnIntoCSList:function(a){return{ctype:"list", value:a}}};f.EMPTY=f.turnIntoCSList([]);f.asList=function(a){return"list"===a.ctype?a:"number"===a.ctype||"boolean"===a.ctype||"geo"===a.ctype?f.turnIntoCSList([a]):f.EMPTY};f.realVector=function(a){for(var g=[],c=0;c=c||b>=p)&&v.isEqual(a.value[b],g.value[b]);)b++;return b===c&&bb&&(c=p,b=d)}return c};f.normalizeMax=function(a){var g=m.inv(f.maxval(a));return m._helper.isFinite(g)?f.scalmult(g,a):a};f.normalizeZ=function(a){var g=m.inv(a.value[2]);return f.scalmult(g,a)};f.dehom=function(a){a=a.value.slice();var g=a.length-1,c=m.inv(a[g]);a.length=g;for(var p=0;pg&&(c=a.value[p],g=b.value.real)}return f.scaldiv(c,a)};f.recursive=function(a,g){for(var c=[],p=0;pf.abs(l).value.real&&0===q&&(l=f._helper.inverseIteration(a, b.value[c])),h.value[c]=f._helper.isAlmostZeroVec(l)?l:f.scaldiv(f.abs(l),l),cm.abs(m.sub(b.value[c],b.value[c+1])).value.real)?q++:q=0);h=f.transpose(h)}return f.turnIntoCSList([b,h])};f._helper.isNormalMatrix=function(a){return 1E-10>f.abs(f.sub(a,f.transjugate(a))).value.real};f._helper.QRIteration=function(a,g){var c,b=a;c=m.real(b.value.length);var d=c.value.real,e=c.value.real;m.real(0);var k;f.idMatrix(c,c);var h=f.zeromatrix(c,c),l=f.idMatrix(c,c),n=g?g:2500,q,r,t,u=0,w=Array(e); for(c=0;cm.abs2(b.value[b.value.length-1].value[b.value[0].value.length-2]).value.real&&1e;e++)b=f.scaldiv(f.abs(b),b),b=f.LUsolve(f.sub(a,f.scalmult(d,c)),JSON.parse(JSON.stringify(b)));return f.scaldiv(f.abs(b),b)};f._helper.toHessenberg=function(a){var g=JSON.parse(JSON.stringify(a)),c=g.value.length,b=m.real(c-1),d=m.real(c); m.real(1);if(f._helper.isUpperTriangular(g))return[f.idMatrix(b,b),a];var e;a=f.idMatrix(d,d);for(var k,d=1;dc&&u++;break}e=m.sub(e,k);h.value=h.value.splice(0,h.value.length-1)}return{Q:l,R:n,P:f.turnIntoCSList(q),rank:m.real(u)}};f._helper.getHouseHolder= function(a){var g=m.real(a.value.length);if(1E-16>f.abs2(a))return f.idMatrix(g,g);var c,b=m.real(1),d=f._helper.unitvector(m.real(a.value.length),b);c=f._helper.QRgetAlpha(a,0);c=f.sub(a,f.scalmult(c,d));c=f.scaldiv(f.abs(c),c);a=m.div(f.sesquilinearproduct(a,c),f.sesquilinearproduct(c,a));g=f.idMatrix(g,g);return g=f.sub(g,f.scalmult(m.add(b,a),f._helper.transposeMult(c,f.conjugate(c))))};f._helper.reOrderbyPivots=function(a,g){for(var c=a.value.length.length,b=f.transpose(a),c=Array(c),d=0;da.value[g].value.real?f.abs(a):m.neg(f.abs(a))}; f.LUdecomp=function(a){a=JSON.parse(JSON.stringify(a));var g,c,b,d,f,e=0,k,h=a.value.length,l=h-1,n=Array(h);for(b=0;b=l&&console.log("CG did not converge");return e};f.det=function(a){if(1===a.value.length)return a.value[0].value[0];if(2===a.value.length)return f.det2(a.value[0],a.value[1]);if(3===a.value.length)return f.det3(a.value[0],a.value[1],a.value[2]);if(4===a.value.length)return f.det4m(a); var g=a.value.length,c=m.real(1),b,d,e=JSON.parse(JSON.stringify(a)),k,h,l,n;for(a=0;am.abs(e.value[d].value[a]).value.real&&(d=b);d!==a&&(b=e.value[d],e.value[d]=e.value[a],e.value[a]=b,c=m.neg(c));k=e.value[a];for(b=a+1;b"]=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?{ctype:"boolean",value:c.value.real-b.value.real>=m.eps}:k};P["=:="]=r("=:=");P[">="]=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?{ctype:"boolean",value:c.value.real>= b.value.real}:"string"===c.ctype&&"string"===b.ctype?{ctype:"boolean",value:c.value>=b.value}:k};P["<="]=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?{ctype:"boolean",value:c.value.real<=b.value.real}:"string"===c.ctype&&"string"===b.ctype?{ctype:"boolean",value:c.value<=b.value}:k};P["~>="]=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)? {ctype:"boolean",value:c.value.real-b.value.real>-m.eps}:k};P["~<="]=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?{ctype:"boolean",value:c.value.real-b.value.real"]=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?{ctype:"boolean",value:c.value.real>b.value.real}:"string"===c.ctype&&"string"===b.ctype?{ctype:"boolean", value:c.value>b.value}:k};P["<"]=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===c.ctype&&"number"===b.ctype&&m._helper.isAlmostReal(c)&&m._helper.isAlmostReal(b)?{ctype:"boolean",value:c.value.real"]=Ec;P["\u2208"]=function(a,g){var c=A(a[0]),b=A(a[1]);return"list"===b.ctype?f.contains(b,c):k};P["\u2209"]=function(a,g){var c=A(a[0]),b=A(a[1]);return"list"===b.ctype?v.not(f.contains(b,c)): k};P["&"]=na;P["%"]=Gc;P["!="]=Ec;P["~!="]=function(a,g){return v.not(pa(a,g))};P[".."]=function(a,g){var c=A(a[0]),b=A(a[1]);return"number"===c.ctype&&"number"===b.ctype?f.sequence(c,b):k};P["++"]=Rc;P["--"]=Tc;P["~~"]=Sc;P[":>"]=Uc;P["<:"]=Vc;P["="]=E;P[":="]=function(a,g,c){g="undefined"===a[1].ctype;if("undefined"===a[0].ctype||g)return k;if("function"===a[0].ctype){g=a[0].oper;var b=a[0].args,d=a[1],f=1;if(Wa.hasOwnProperty(g)){f=Wa[g];if(f.definer===c)return k;f=f.generation+1}Wa[g]={oper:g, body:d,arglist:b,definer:c,generation:f}}"variable"===a[0].ctype&&J.setvar(a[0].name,a[1]);return k};P[":=_"]=function(a,g){if("void"!==a[1].ctype)return k;"function"===a[0].ctype&&delete Wa[a[0].oper];return k};P["::="]=r("::=");P[";"]=function(a,g){var c="void"===a[0].ctype,b="void"===a[1].ctype;if(c&&b)return k;if(!c&&b)return A(a[0]);c||b||A(a[0]);return b?k:A(a[1])};var t={},D={evaluate:function(a,g,c){if(Wa.hasOwnProperty(a)){a=Wa[a];if(void 0===a)g=k;else{var b=[];for(c=0;c "+w(g[a]))};J.vstack=[];J.pushVstack=function(a){this.vstack.push(a)};J.popVstack=function(){this.vstack.pop()};J.cleanVstack=function(){for(var a=this.vstack;0 "+w(A(b));ha.err(b);return k};t.errc$1=function(a,g){var c;"variable"===a[0].ctype?(c=A(J.getvar(a[0].name)),console.log(a[0].name+" ===> "+w(c))):(c=A(a[0]),console.log(" ===> "+w(c)));return k};t.print$1=function(a,g){ha.out(w(A(a[0])), !0);return k};t.println$1=function(a,g){ha.out(w(A(a[0])));return k};t.dump$1=function(a,g){console.log(JSON.stringify(a[0]));return k};t.repeat$2=function(a,g){return t.repeat$3([a[0],null,a[1]],g)};t.repeat$3=function(a,g){var c=C(a[0]),b="#";null!==a[1]&&"variable"===a[1].ctype&&(b=a[1].name);if("number"!==c.ctype)return k;var c=Math.round(c.value.real),d=1,f=1,e=c+1,h=!1,m=!1,l=!1,n;void 0!==g.start&&(n=A(g.start),"number"===n.ctype&&(h=!0,f=n.value.real));void 0!==g.step&&(n=A(g.step),"number"=== n.ctype&&(l=!0,d=n.value.real));void 0!==g.stop&&(n=A(g.stop),"number"===n.ctype&&(m=!0,e=n.value.real));!h||m||l||(e=d*c+f);h||!m||l||(f=-d*(c-1)+e,e+=d);h||m||!l||(e=d*c+f);h&&m&&!l&&(d=(e-f)/(c-1),e+=d);h&&!m&&l&&(e=d*c+f);!h&&m&&l&&(f=-d*(c-1)+e,e+=d);h&&m&&l&&(e+=d);(f<=e&&0=e&&0>d)&&h&&m&&l&&(c=Math.floor((e-f)/d));J.newvar(b);e=k;for(h=0;hd&&(d=b.value.length+d+1),0=b)return f.turnIntoCSList([]);if(m._helper.isZero(a.value[b]))return g=D.roots(f.turnIntoCSList(a.value.slice(0,b))),f.append(g,m.infinity);if(1===b)g[0]=m.neg(m.div(a.value[0],a.value[1]));else if(2===b)g=D.quadratic_roots(a);else{for(var d=0;df.value.real)return console.log("grade cant be < 1"),k;f=m.add(f,m.real(1));return O.autodiff(b,c,d,f)};t.cos$1=function(a,g){var c=C(a[0]);return"number"===c.ctype?m.cos(c):k};t.tan$1=function(a,g){var c=C(a[0]);return"number"===c.ctype?m.tan(c):k};t.arccos$1=function(a,g){var c=C(a[0]);return"number"===c.ctype?m.arccos(c):k};t.arcsin$1=function(a,g){var c=C(a[0]);return"number"===c.ctype?m.arcsin(c):k};t.arctan$1=function(a,g){var c=C(a[0]);return"number"===c.ctype? m.arctan(c):k};t.arctan2$2=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===c.ctype&&"number"===b.ctype?m.arctan2(c,b):k};t.arctan2$1=function(a,g){var c=C(a[0]);if("list"===c.ctype&&2===c.value.length){if(c=c.value,"number"===c[0].ctype&&"number"===c[1].ctype)return t.arctan2$2(c,g)}else if("number"===c.ctype)return m.arctan2(c);return k};t.log$1=function(a,g){var c=C(a[0]);return"number"===c.ctype?m.log(c):k};D.recursiveGen=function(a){var g=m[a],c=f[a];t[a+"$1"]=function(a,b){var d=C(a[0]); return"number"===d.ctype?g(d):"list"===d.ctype?c(d):k}};D.recursiveGen("im");D.recursiveGen("re");D.recursiveGen("conjugate");D.recursiveGen("round");D.recursiveGen("ceil");D.recursiveGen("floor");D.recursiveGen("abs");t.abs_infix=t.abs$1;t.random$0=function(a,g){return m.real(m._helper.rand())};t.random$1=function(a,g){var c=C(a[0]);return"number"===c.ctype?m.complex(c.value.real*m._helper.rand(),c.value.imag*m._helper.rand()):k};t.seedrandom$1=function(a,g){var c=C(a[0]);"number"===c.ctype&&m._helper.seedrandom(c.value.real); return k};t.randomnormal$0=function(a,g){return m.real(m._helper.randnormal())};t.randominteger$1=function(a,g){var c=C(a[0]);if("number"===c.ctype){var b=c.value.real|0,c=c.value.imag|0,b=b*m._helper.rand()|0,c=c*m._helper.rand()|0;return m.complex(b,c)}return k};t.randomint$1=t.randominteger$1;t.randombool$0=function(a,g){return.5h)return m.real(0);if(0===h)return m.real(1);if(1===h)return b;for(var q=d=1,r=1;r<=h;++r)var t=e-h+r|0,u=r|0,v=nc(t,u)|0,t=t/v|0,u=u/v|0,v=nc(d,u)|0,d=d/v|0,u=u/v| 0,v=nc(t,q)|0,t=t/v|0,q=q/v|0,d=d*t|0,q=q*u|0;return m.real(d/q)}if("list"===b.ctype){e=b.value.length;if(0>h||h>e)return f.turnIntoCSList([]);if(0===h)return f.turnIntoCSList([f.turnIntoCSList([])]);if(h===e)return f.turnIntoCSList([b]);n=[];l=Array(h);c(0,0);return f.turnIntoCSList(n)}}return k};t.zeromatrix$2=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===c.ctype&&"number"===b.ctype?f.zeromatrix(c,b):k};t.zerovector$1=function(a,g){var c=C(a[0]);return"number"===c.ctype?f.zerovector(c): k};t.transpose$1=function(a,g){var c=C(a[0]);return"list"===c.ctype&&-1!==f._helper.colNumb(c)?f.transpose(c):k};t.row$2=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===b.ctype&&"list"===c.ctype&&-1!==f._helper.colNumb(c)?f.row(c,b):k};t.column$2=function(a,g){var c=C(a[0]),b=C(a[1]);return"number"===b.ctype&&"list"===c.ctype&&-1!==f._helper.colNumb(c)?f.column(c,b):k};t.dict$0=function(a,g){var c=Oa.create(),b;for(b in g)g.hasOwnProperty(b)&&Oa.put(c,v.string(b),A(g[b]));return c};t.put$3= function(a,g){var c=A(a[0]),b=A(a[1]),d=A(a[2]);return"dict"===c.ctype?(c=Oa.clone(c),Oa.put(c,b,d),c):k};t.get$2=function(a,g){var c=A(a[0]),b=A(a[1]);return"dict"===c.ctype?Oa.get(c,b,k):k};t.red$1=function(a,g){var c=A(a[0]);return"number"===c.ctype?f.realVector([Math.min(1,Math.max(0,c.value.real)),0,0]):k};t.green$1=function(a,g){var c=A(a[0]);return"number"===c.ctype?f.realVector([0,Math.min(1,Math.max(0,c.value.real)),0]):k};t.blue$1=function(a,g){var c=A(a[0]);return"number"===c.ctype?f.realVector([0, 0,Math.min(1,Math.max(0,c.value.real))]):k};t.gray$1=function(a,g){var c=A(a[0]);return"number"===c.ctype?(c=Math.min(1,Math.max(0,c.value.real)),f.realVector([c,c,c])):k};t.grey$1=t.gray$1;D.HSVtoRGB=function(a,g,c){var b,d,e,h,k,m;a&&void 0===g&&void 0===c&&(g=a.s,c=a.v,a=a.h);h=Math.floor(6*a);k=6*a-h;a=c*(1-g);m=c*(1-k*g);g=c*(1-(1-k)*g);switch(h%6){case 0:b=c;d=g;e=a;break;case 1:b=m;d=c;e=a;break;case 2:b=a;d=c;e=g;break;case 3:b=a;d=m;e=c;break;case 4:b=g;d=a;e=c;break;case 5:b=c,d=a,e=m}return f.realVector([b, d,e])};t.hue$1=function(a,g){var c=A(a[0]);return"number"===c.ctype?(c=c.value.real,c-=Math.floor(c),D.HSVtoRGB(c,1,1)):k};D.shapeconvert=function(a){var g,c;if("circle"===a.type){g=a.value.value[0];g=v.div(g,g.value[2]);var b=g.value[0].value.real,d=g.value[1].value.real;a=a.value.value[1].value.real;c=Array(125);var e=2*Math.PI/125;for(g=0;125>g;g++)c[g]={X:b+Math.cos(g*e)*a,Y:d+Math.sin(g*e)*a};return[c]}if("polygon"===a.type){b=[];for(g=0;g=c?c=String.fromCharCode(c):(c-=65536,c=String.fromCharCode((c>>10)+55296,(c&1023)+56320));return v.string(c)};t.international$1=function(a,g){return t.international$2([a[0],null],g)};t.international$2=function(a,g){var c=A(a[0]);if("string"!==c.ctype)return k;var b=(q.translations|| {})[q.language||"en"]||{};if(!b.hasOwnProperty(c.value))return c;var d=b[c.value];if("string"===typeof d)return v.string(d);if(null===a[1])return c;var e=A(a[1]),e="number"===e.ctype?e.value.real:0,b=(b._pluralFormFunction||Qd)(e);return bl&&(l=a.length)});for(var n=[],q=0;qe.length)for(q=e.length;q(c.x-b.x)*(c.x-b.x)+(c.y-b.y)*(c.y-b.y)||1E-12>q||1E-12>h)return k;0>f.crossratio3(d,a,e,f.cross(f.cross(d,e), f.linfty),f.ii).value.real?y.drawsegcore(c,l):y.drawRaySegment(d,a)}return k};D.drawcircle=function(a,b,c){var d=C(a[0]);a=C(a[1]);var e=D.extractPoint(d);if(!e.ok||"number"!==a.ctype||!m._helper.isAlmostReal(a))return k;var d=x.drawingstate.matrix,f=e.x*d.a-e.y*d.b+d.tx,e=e.x*d.c-e.y*d.d-d.ty;y.handleModifs(b,y.conicModifs);y.preDrawCurve();z.lineJoin="miter";z.beginPath();z.arc(f,e,Math.abs(a.value.real)*d.sdet,0,2*Math.PI);z.closePath();"D"===c&&z.stroke();"F"===c&&(z.fillStyle=y.lineColor,z.fill()); "C"===c&&z.clip();return k};t.drawconic$1=function(a,b){var c;c=C(a[0]);if("list"!==c.ctype||3!==c.value.length&&6!==c.value.length)return console.error("could not parse conic"),k;if(6===c.value.length){for(var d=0;6>d;d++)if("number"!==c.value[d].ctype)return console.error("could not parse conic"),k;var e=m.real(.5),d=c.value[0],h=c.value[2],h=m.mult(h,e),l=c.value[1],n=c.value[3],n=m.mult(n,e),q=c.value[4],q=m.mult(q,e);c=c.value[5];c=f.turnIntoCSList([f.turnIntoCSList([d,h,n]),f.turnIntoCSList([h, l,q]),f.turnIntoCSList([n,q,c])])}else{for(d=0;3>d;d++)for(h=0;3>h;h++)if("number"!==c.value[d].value[h].ctype)return console.error("could not parse conic"),k;f.equals(c,f.transpose(c)).value||(d=v.mult(c,m.real(.5)),c=v.mult(f.transpose(c),m.real(.5)),c=f.add(d,c))}c=f.normalizeMax(c);return D.drawconic(c,b)};D.drawconic=function(a,b){y.handleModifs(b,y.conicModifs);if(0!==y.lsize){y.preDrawCurve();for(var c=f.normalizeMax(a),d=c,e=0;2>e;e++)for(var h=0;2>h;h++)if(Math.abs(c.value[e].value[h].value.imag)> m.eps)return;e=f.turnIntoCSList([f.realVector([-1,-1,1]),f.realVector([1,0,0]),f.realVector([0,1,0])]);h=x.from(0,0,1);h[2]=1;var l=x.from(1,0,1);l[2]=1;var q=x.from(0,1,1);q[2]=1;var h=f.turnIntoCSList([f.realVector(h),f.realVector(l),f.realVector(q)]),h=f.transpose(h),e=v.mult(h,e),e=f.inverse(e),c=v.mult(f.transpose(e),c),c=v.mult(c,e),e=c.value[0].value[0].value.real,h=c.value[1].value[0].value.real,l=c.value[1].value[1].value.real,q=c.value[2].value[0].value.real,r=c.value[2].value[1].value.real, u=c.value[2].value[2].value.real,c=[[e,h,q],[h,l,r],[q,r,u]],w=1E-14>Math.abs(e*l*u-e*r*r-h*h*u+2*h*q*r-l*q*q);if(w&&"Circle"===a.usage){var A=v.mult(f.adjoint3(d),f.linfty);m.abs(A.value[2]).value.real>m.eps&&(w=!1)}var A=W>V?W:V,B=-1.5*A,C=1.5*A,D=-1.5*A,ec=1.5*A,E=1;w&&(E=0);if(E)var q=0,q=1E-14Math.abs(a)?"parabola": 1E-14q||100>Math.abs(b-c)?.5:0>R|| R>V?10:3;d=-p*k*R*R-2*p*l*R-p*a+h*h*R*R+2*h*m*R+m*m;d=Math.sqrt(d);g=1/p*(-h*R-m+d);d=-1/p*(h*R+m+d);var r,Ca;E?(r=[g,R,1],Ca=[d,R,1],r=v.mult(F,f.realVector(r)),Ca=v.mult(F,f.realVector(Ca)),g=r.value[0].value.real,d=Ca.value[0].value.real,r=r.value[1].value.real,Ca=Ca.value[1].value.real):Ca=r=R;isNaN(g)||"ellipsoid"!==e?!isNaN(g)&&g>=B&&g<=C&&(I.push(g),K.push(r)):(I.push(g),K.push(r));isNaN(d)||"ellipsoid"!==e?!isNaN(d)&&d>=B&&d<=C&&(J.push(d),L.push(Ca)):(J.push(d),L.push(Ca))}}},h=function(a){var c, b,g;G(a);if(6!==a.length)console.error("Conic needs 6 Parameters");else{g=a[0];var d=a[1],e=a[2],f=a[3],p=a[4],h=a[5];c=-g*p+d*f;b=Math.sqrt(g*(-g*e*h+g*Math.pow(p,2)+Math.pow(d,2)*h-2*d*f*p+e*Math.pow(f,2)));e=g*e-Math.pow(d,2);1E-14D&&gD&&bb?g:b;Q(a,D,c);M=I.concat(J.reverse());N=K.concat(L.reverse());P(M,N);O();Q(a,b,ec);P(I,K);if(H(I[0],K[1])||H(J[0],L[0]))z.beginPath(), z.moveTo(I[0],K[0]),z.lineTo(J[0],L[0]),z.stroke();P(J,L);O();Q(a,c,b);P(I,K);z.beginPath();z.moveTo(I[0],K[0]);z.lineTo(J[0],L[0]);z.stroke();z.beginPath();z.moveTo(I[I.length-1],K[K.length-1]);z.lineTo(J[J.length-1],L[L.length-1]);z.stroke();P(J,L);O()}};w?e():h(c)}};t.drawall$1=function(a,b){var c=A(a[0]);if("list"===c.ctype){y.handleModifs(b,y.pointAndLineModifs);for(var d=0;dh&&(h=d[m].value.length);-1===h?(d=d.map(function(a){return[a]}),h=1):d=d.map(function(a){return f.asList(a).value}); var l=100,n=null,q=!0,r=x.drawingstate.textcolor;y.handleModifs(b,{size:!0,color:function(a){f._helper.isNumberVecN(a,3)&&(r=y.makeColor([a.value[0].value.real,a.value[1].value.real,a.value[2].value.real]))},alpha:!0,bold:!0,italics:!0,family:!0,align:!0,x_offset:!0,y_offset:!0,offset:!0,width:function(a){"number"===a.ctype&&(l=a.value.real)},height:function(a){"number"===a.ctype&&(n=a.value.real)},border:function(a){"boolean"===a.ctype&&(q=a.value)}});var t=x.drawingstate.textsize;null===t&&(t=ja.textsize); null!==y.size&&(t=y.size);null===n&&(n=1.6*t);z.font=y.bold+y.italics+Math.round(10*t)/10+"px "+y.family;m=x.drawingstate.matrix;var u=h*l,v=c*n,t=e.x*m.a-e.y*m.b+m.tx+y.xOffset,A=e.x*m.c-e.y*m.d-m.ty-y.yOffset-v;if(q){y.preDrawCurve();z.strokeStyle=y.lineColor;z.beginPath();for(m=1;mk)!h&&q&&(z.stroke(),q=!1);else if(n||r){var t=m.real((a.value.real+b.value.real)/2);J.setvar(B,t);var u=A(w),v=c(u);if(n&&r&&v){var Mb=g.value.real,r=u.value.real,v=f.value.real;if(n=1>Math.abs(Mb+v-2*r)/l){var x=m.real((a.value.real+t.value.real)/2);J.setvar(B,x);var x=A(w),y=m.real((t.value.real+b.value.real)/2);J.setvar(B, y);y=A(w);Mb=Math.abs(Mb+r-2*x.value.real)/l;r=Math.abs(r+v-2*y.value.real)/l;n=n&&1>Mb&&1>r}n?(d(a,t,g,u,k/2),d(t,b,u,f,k/2)):(e(a,t,g,u,k/2),e(t,b,u,f,k/2))}else e(a,t,g,u,k/2),e(t,b,u,f,k/2)}}var h=!1,l=.2/Jb,n=0,q=!1,r=-10,t=10,u=.1,v=1E3,w=a[0],B;if(null!==a[1]&&"variable"===a[1].ctype)B=a[1].name;else{var C=D.plotvars(w);B="#";-1!==C.indexOf("t")&&(B="t");-1!==C.indexOf("z")&&(B="z");-1!==C.indexOf("y")&&(B="y");-1!==C.indexOf("x")&&(B="x")}J.newvar(B);var E=x.drawingstate.matrix;y.handleModifs(b, {color:!0,alpha:!0,size:!0,dashpattern:!0,dashtype:!0,dashing:!0,lineCap:!0,lineJoin:!0,miterLimit:!0,connect:function(a){"boolean"===a.ctype&&(h=a.value)},start:function(a){"number"===a.ctype&&(r=a.value.real)},stop:function(a){"number"===a.ctype&&(t=a.value.real)},steps:function(a){"number"===a.ctype&&(v=a.value.real)}});z.strokeStyle=y.lineColor;z.lineWidth=y.lsize;var F,G,H,I,q=!1,C=m.real(14.32);J.setvar(B,C);H=A(w);if("number"!==H.ctype){if(f.isNumberVector(H).value&&2===H.value.length){q=!1; u=(t-r)/v;for(C=r;Cr&&e(F,C,G,H,u),F=C,G=H;J.removevar(B);q&&z.stroke();return k};t.plotX$1=function(a,b){var c=a[0],d=D.plotvars(c),e="#";-1!==d.indexOf("t")&&(e="t");-1!==d.indexOf("z")&& (e="z");-1!==d.indexOf("y")&&(e="y");-1!==d.indexOf("x")&&(e="x");J.newvar(e);d=x.drawingstate.matrix;z.fillStyle=x.drawingstate.linecolor;z.lineWidth=1;z.lineCap=y.lineCap;z.lineJoin=y.lineJoin;z.miterLimit=y.miterLimit;for(var f=!1,h=-10;10>h;h+=.01){J.setvar(e,m.real(h));var l=A(c);if("number"===l.ctype){var n=+l.value.real,l=h*d.a-n*d.b+d.tx,n=h*d.c-n*d.d-d.ty;f?z.lineTo(l,n):(z.beginPath(),z.moveTo(l,n),f=!0)}}z.stroke();J.removevar(e);return k};D.plotvars=function(a){function b(a,c){var g={}, d;for(d=a.length-1;0<=d;--d)g[a[d]]=a[d];for(d=c.length-1;0<=d;--d)g[c[d]]=c[d];d=[];for(var e in g)g.hasOwnProperty(e)&&d.push(g[e]);return d}function c(a,c){for(var b=0;b","\u2260"],lt:["<"],gt:[">"],le:["<=","\u2264","\u2266"],ge:[">=","\u2265","\u2267"],aeq:["~=","\u2248"],ane:["~!=","\u2249"],alt:["~<","\u2a89"],agt:["~>","\u2a8a"],ale:["~<=","\u2a85"],age:["~>=","\u2a86"],"in":["\u2208"],nin:["\u2209"]},{and:["&","\u2227"],or:["%","\u2228"]},{rassoc:!0,prepend:["<:"]},{concat:["++","\u222a"],remove:["--","\u2216"],common:["~~","\u2229"],append:[":>"]},{rassoc:!0,assign:["="],define:[":="],undefine:[":=_"],bdefine:["::="]},{seq:[";"]},{modif:["->", "\u2192"]},{rassoc:!0,list:[","]}],ne=["+","-"],oe=["!","\u221a"],pe=["\u00b0",":=_"],qe=[";",","],Ac=[],wa={},ad;(function(){var a=0;me.forEach(function(b){a+=2;var c=!!b.rassoc;b.functionCall&&(ad=a);for(var d in b){var e=b[d];if("boolean"!==typeof e)for(var f={name:d,sym:e[0],symbols:e,rassoc:c,precedence:a,prefix:!1,postfix:!1,infix:!0,bare:!1},h=0;h &%C( / . $$!L! %5%;( D#!*!* 4'&*$W + !#&]F %6&]% !#% !#!(# & ! !#% # %1!#$ !/#L!S( @?$\u00817-!*''#$!$%+ ',6!:= !&!#7 \u0090 ##& ! ##D ##B ##& ! ##9 K ##^Y2*V#'$\u009d#5 4&p((+, #2*2*2, 5OC!'!Uy.D !&_)0J<#$,E'4Q/1Pv!|8:&K<9%)E>@7 )@\u0080# #$%1gT\u008e#'#=#'#( ! ! ! 0#P & !$ &$##'',& &d!9!*,b!'!#. !$$(! ! ! # 1##&$'!G%\u00a58 8 \u0084(#$%6= !&!#Q+!*/1& & & & & & & &t!\u0097%E$&%'V( z #&D${:Aj2\u0099\u00a6q\u00a9E\u00a4UZ#\u008d$2)%-8*0#_J+#b#M#(S1 # /0O2[R'$! !6>)/A?+8?G)-):9*\ud803!`KJ9J\ud804#PriL3>@7M$!6F2#/! !C* 3V& ! # 9 .+8N(#%#- & % $$!;!6$\ud805eF-% !\u008987#=F-!k7x4\ud806\u0087RB!\u0095K\ud808!\u00a2\ud809e\u008a\ud80d!8\ud811!\u009c\ud81a!\u009b+0c<;F*#BH&:\ud81b\u00a0U,!l,\ud82c!%\ud82f!\"&,$++.\ud835!w m %#!#%## ) ! & S ##( & > # $ !$& \u0091#3 3 0 3 0 3 0 3 0 3 (\ud83a!\u008b\ud83b\u0098# A % !#! . # ! !(!'! ! ! % !#! ! ! ! ! % !## & # # ! . 5& $ 5\ud869!\u009f7\u008c\ud86d!\u00a1,g\ud86e!<#\u00a3\ud873!\u009e\ud87e!\u009a", "\ud80c\ud840-\ud868\ud86a-\ud86c\ud86f-\ud872"),ue=("#(?: [1-9])?|(?:'|"+Bc+")(?: (?:[0-9']|"+Bc+"))*").replace(/ /g,"[ \t]*"),Yc=["([ \t\n]+)|(//.*)|(/\\*)","("+re+")","("+Ac.map(Xc).join("|")+")","("+"[](){}||".split("").map(Xc).join("|")+")","("+te+")","("+se+")","("+ue+")",'("[^"]*")|($)'].join("|"),ve=new RegExp("[ \t]*".replace(/\*$/,"+"),"g"),Cc="ANY WS COMMENT START_COMMENT NUM OP BRA SUB SUP ID STR EOF".split(" ");(function(){var a=(new RegExp(Yc,"g")).exec("");if(a.hasOwnProperty(Cc.length))throw Error("RE has more groups than expected"); if(!a.hasOwnProperty(Cc.length-1))throw Error("RE has fewer groups than expected");})();mb.prototype.advanceBy=function(a){this.advanceTo(this.pos+a)};mb.prototype.advanceTo=function(a){for(this.pos=a;this.bols[0]<=a;)this.bol=this.bols.shift(),this.line++};mb.prototype.curPos=function(){return{row:this.line,col:this.pos-this.bol,pos:this.pos}};mb.prototype.nextInternal=function(){var a=this.re.exec(this.input);if(a.index!==this.pos)throw ea("Invalid token",this.curPos(),this.input.substring(this.pos, a.index));var b=this.curPos();this.advanceBy(a[0].length);var c=this.curPos(),d;for(d=1;null==a[d];++d);return{start:b,end:c,raw:a[0],text:a[0].replace(ve,""),toktype:Cc[d]}};mb.prototype.next=function(){var a;do if(a=this.nextInternal(),"START_COMMENT"===a.toktype){var b=/\*\/|\/\*/g;b.lastIndex=a.start.pos+2;for(var c=1,d;0d&&(d=0),10b.value.real||b.value.real!==Math.floor(b.value.real))return O.root(a,b);for(var c=a,d=1;d=y.psize&&(y.psize=0);0>=y.lsize&&(y.lsize=0);y.overhang=1;y.dashing=!1;y.isArrow=!1;y.arrowSides="==>";y.arrowposition=1;y.headlen=10;y.arrowShape= y.arrowShapes.line;y.alpha=x.drawingstate.alpha;y.fillalpha=0;y.bold="";y.italics="";y.family="sans-serif";y.align=0;y.xOffset=0;y.yOffset=0;y.lineCap="round";y.lineJoin="round";y.miterLimit=10;var c,d;for(c in a){var e=a[c];e&&((d=b[c])?(!0===d&&(d=y.modifHandlers[c]),d(A(e))):console.log("Modifier not supported: "+c))}null!==y.size?y.psize=y.lsize=y.size:(y.psize=x.drawingstate.pointsize,y.lsize=x.drawingstate.linesize);y.dashing&&y.dashing(y.lsize);null!==y.colorraw?y.pointColor=y.lineColor=y.textColor= y.makeColor(y.colorraw):1===y.alpha?(y.pointColor=x.drawingstate.pointcolor,y.lineColor=x.drawingstate.linecolor,y.textColor=x.drawingstate.textcolor):(y.pointColor=y.makeColor(x.drawingstate.pointcolorraw),y.lineColor=y.makeColor(x.drawingstate.linecolorraw),y.textColor=y.makeColor(x.drawingstate.textcolorraw));y.black=1===y.alpha?"rgb(0,0,0)":"rgba(0,0,0,"+y.alpha+")";y.fillColor=y.fillcolorraw&&0y.size&&(y.size=0),1E3"!==a.value&&"<==>"!==a.value&&"<=="!==a.value?console.error("arrowsides is unknows"):(y.arrowSides=a.value,y.isArrow=!0)},arrowposition:function(a){"number"!==a.ctype?console.error("arrowposition is not of type number"):0>a.value.real?console.error("arrowposition has to be positive"):1a.value.real?console.error("arrowsize has to be positive"):y.headlen*=a.value.real},bold:function(a){"boolean"===a.ctype&&a.value&&(y.bold="bold ")},italics:function(a){"boolean"===a.ctype&&a.value&&(y.italics="italic ")},family:function(a){"string"===a.ctype&&(y.family=a.value)},align:function(a){"string"=== a.ctype&&(a=a.value,"left"===a&&(y.align=0),"right"===a&&(y.align=1),"mid"===a&&(y.align=.5))},x_offset:function(a){"number"===a.ctype&&(y.xOffset=a.value.real)},y_offset:function(a){"number"===a.ctype&&(y.yOffset=a.value.real)},offset:function(a){"list"===a.ctype&&2===a.value.length&&"number"===a.value[0].ctype&&"number"===a.value[1].ctype&&(y.xOffset=a.value[0].value.real,y.yOffset=a.value[1].value.real)},lineCap:function(a){"string"!==a.ctype||"round"!==a.value&&"square"!==a.value&&"butt"!==a.value|| (y.lineCap=a.value)},lineJoin:function(a){"string"!==a.ctype||"round"!==a.value&&"bevel"!==a.value&&"miter"!==a.value||(y.lineJoin=a.value)},miterLimit:function(a){"number"===a.ctype&&0m&&(f=a);1c&&(e=a);1d||d>W||0>n||n>V||0>q||q>W||0>k||k>V){k=y.clipSegment({x:d,y:n},{x:q,y:k});if(2!==k.length||.01>y.lsize)return;d=k[0].x;n=k[0].y;q=k[1].x;k=k[1].y}y.preDrawCurve();if(!y.isArrow||e===f&&h===m).01>y.lsize||(z.beginPath(),z.moveTo(d,n),z.lineTo(q,k),z.stroke());else{var e=h-e,f=m-f,h=y.headlen/Math.sqrt(e*e+f*f),r=e*h,t=f*h,m=y.arrowposition,l=1-m,f=m*d+l*q,e=m*n+l*k,h=m*q+l*d,m=m*k+l*n,l=y.arrowSides;z.beginPath();y.arrowShape.close? ("<==>"===l||"<=="===l?(1>y.arrowposition&&(z.moveTo(d,n),z.lineTo(f,e)),z.moveTo(f+r,e+t)):z.moveTo(d,n),"==>"===l||"<==>"===l?(z.lineTo(h-r,m-t),1>y.arrowposition&&(z.moveTo(h,m),z.lineTo(q,k))):z.lineTo(q,k)):(z.moveTo(d,n),z.lineTo(q,k));z.stroke();"==>"!==l&&"<==>"!==l||c(h,m,1,y.arrowShape.ratio);"<=="!==l&&"<==>"!==l||c(f,e,-1,-y.arrowShape.ratio)}};y.drawpoint=function(a){var b=x.drawingstate.matrix,c=a.x*b.a-a.y*b.b+b.tx;a=a.x*b.c-a.y*b.d-b.ty;z.lineWidth=.3*y.psize;z.beginPath();z.arc(c, a,y.psize,0,2*Math.PI);z.fillStyle=y.pointColor;z.fill();z.beginPath();z.arc(c,a,1.15*y.psize,0,2*Math.PI);z.fillStyle=y.black;z.strokeStyle=y.black;z.stroke()};y.clipLineCore=function(a,b,c){var d=Math.SQRT1_2*y.lsize,e=0-d,f=W+d,h=0-d,d=V+d,m=0>e*a+h*b+c,k=0>f*a+h*b+c,l=0>e*a+d*b+c,n=0>f*a+d*b+c,q=[];m!==k&&q.push({x:(-c-b*h)/a,y:h});k!==n&&q.push({x:f,y:(-c-a*f)/b});l!==n&&q.push({x:(-c-b*d)/a,y:d});m!==l&&q.push({x:e,y:(-c-a*e)/b});return q};y.clipLine=function(a){a=f.normalizeMax(f.productVM(a, x.toMat()));return y.clipLineCore(a.value[0].value.real,a.value[1].value.real,a.value[2].value.real)};y.drawline=function(a){f._helper.isAlmostReal(a)&&(a=y.clipLine(a),2===a.length&&.01<=y.lsize&&(y.preDrawCurve(),z.beginPath(),z.moveTo(a[0].x,a[0].y),z.lineTo(a[1].x,a[1].y),z.stroke()))};y.drawRaySegment=function(a,b){var c=D.extractPoint(a),d=D.extractPoint(b);if(c.ok&&d.ok){var e=c.x-d.x,f=c.y-d.y,h=25E3/x.drawingstate.matrix.sdet/Math.sqrt(e*e+f*f),e=e*h,f=f*h;y.drawsegcore(c,{x:c.x+e,y:c.y+ f});y.drawsegcore(d,{x:d.x-e,y:d.y-f})}};y.dashTypes={solid:[],dashed:[10,10],tightdash:[10,4],dotted:[1,3],dashdot:[10,5,1,5],"dashvalue.solid":[],"dashvalue.dashed":[10,10],"dashvalue.tightdash":[10,4],"dashvalue.dotted":[1,3],"dashvalue.dashdot":[10,5,1,5],0:[],1:[10,10],2:[10,4],3:[1,3],4:[10,5,1,5]};y.setDash=function(a,b){var c=Math.sqrt(b);a=a.slice();for(var d=0;d=2*Math.PI?this._pathcmd(this._path.length?"L":"M",h,m,"A",c,c,0,0,f?1:0,a-c*Math.cos(d),b-c*Math.sin(d),"A",c,c,0,0,f?1:0,h,m):this._pathcmd(this._path.length?"L": "M",h,m,"A",c,c,0,e>Math.PI?1:0,f?1:0,k,l)},rect:function(a,b,c,d){this._pathcmd("M",a,b,"h",c,"v",d,"h",-c,"z")},_cmd:function(a){1!==this.globalAlpha?(this._body.push(''),this._body.push(a),this._body.push("")):this._body.push(a)},_attrs:function(a){var b="",c;for(c in a)null!==a[c]&&(b+=" "+c+'="'+a[c]+'"');return b},fill:function(){this._cmd("")},stroke:function(){this._cmd("")},clip:function(){++this._clipIndex;this._body.push('','');this._saveStack[this._saveStack.length-1]+=""},save:function(){this._saveStack.push("")}, restore:function(){this._body.push(this._saveStack.pop());0===this._saveStack.length&&this._saveStack.push("")},_transform:function(a){this._body.push('');this._saveStack[this._saveStack.length-1]+=""},translate:function(a,b){this._transform("translate("+a+" "+b+")")},rotate:function(a){this._transform("rotate("+Math.PI/180*a+")")},scale:function(a,b){this._transform("scale("+a+" "+b+")")},transform:function(a,b,c,d,e,f){this._transform("matrix("+[a,b,c,d,e,f].join(" ")+")")}, drawImage:function(a,b,c){if(3!==arguments.length)throw Error("SvgWriterContext only supports 3-argument version of drawImage");var d=this._imgcache.indexOf(a);if(-1===d){var d=this._imgcache.length,e;e=a.cachedDataURL?a.cachedDataURL:dd(a);this._defs.push('');this._imgcache.push(a)}this._cmd('')},toBlob:function(){for(;1\n'+this._defs.join("\n")+'\n\n\n'+this._body.join("\n")+"\n\n\n";return new Blob([a],{type:"image/svg+xml"})}};cd.prototype={_cmd:function(){this._body.push(Array.prototype.join.call(arguments," "))},_setAlpha:function(a,b,c){var d=Math.round(255* a*this._globalAlpha);b+=d;this._extGState[b]="<< /"+c+" "+d/255+" >>";this._cmd("/"+b,"gs");return a},set globalAlpha(a){this._globalAlpha=a;this._setAlpha(this._strokeAlpha,"As","CA");this._setAlpha(this._fillAlpha,"Af","ca")},set fillStyle(a){var b=this;Qb(a,function(a,d,e,f){b._cmd(a/255,d/255,e/255,"rg");b._setAlpha(b._fillAlpha=f,"Af","ca")})},set strokeStyle(a){var b=this;Qb(a,function(a,d,e,f){b._cmd(a/255,d/255,e/255,"RG");b._setAlpha(b._strokeAlpha=f,"As","CA")})},set lineWidth(a){this._cmd(a, "w")},set lineCap(a){this._cmd({butt:0,round:1,square:2}[a],"J")},set lineJoin(a){this._cmd({miter:0,round:1,bevel:2}[a],"j")},set miterLimit(a){this._cmd(a,"M")},clearRect:function(){},beginPath:function(){this._pathUsed=!1},closePath:function(){this._cmd("h")},moveTo:function(a,b){this._cmd(this._xPos=a,this._yPos=-b,"m")},lineTo:function(a,b){this._cmd(this._xPos=a,this._yPos=-b,"l")},bezierCurveTo:function(a,b,c,d,e,f){this._cmd(a,-b,c,-d,this._xPos=e,this._yPos=-f,"c")},quadraticCurveTo:function(a, b,c,d){this.bezierCurveTo((2*a+this._xPos)/3,(2*b-this._yPos)/3,(c+2*a)/3,(d+2*b)/3,c,d)},_kappa:.5522847498307935,arc:function(a,b,c,d,e,f){if(0===d&&e===2*Math.PI)d=this._kappa*c,this.moveTo(a+c,b),this.bezierCurveTo(a+c,b+d,a+d,b+c,a,b+c),this.bezierCurveTo(a-d,b+c,a-c,b+d,a-c,b),this.bezierCurveTo(a-c,b-d,a-d,b-c,a,b-c),this.bezierCurveTo(a+d,b-c,a+c,b-d,a+c,b);else throw Error("PdfWriterContext.arc only supports full circles");},rect:function(a,b,c,d){this._cmd(a,-b,c,-d,"re")},_usePath:function(a){if(this._pathUsed){var b= this._body[this._pathUsed],c={"S + f":"B","f + S":"B","W n + S":"W S","W n + f":"W f","S + W n":"W S","f + W n":"W f","B + W n":"W B","W S + f":"W B","W f + S":"W B"}[b+" + "+a];if(!c)throw Error("Don't know how to combine '"+b+"' and '"+a+"'");this._body.splice(this._pathUsed,1);a=c}this._pathUsed=this._body.length;this._cmd(a)},fill:function(){this._usePath("f")},stroke:function(){this._usePath("S")},clip:function(){this._usePath("W n")},save:function(){this._cmd("q")},restore:function(){this._cmd("Q")}, translate:function(a,b){this.transform(1,0,0,1,a,b)},rotate:function(a){var b=Math.cos(a);a=Math.sin(a);this.transform(b,a,-a,b,0,0)},scale:function(a,b){this.transform(a,0,0,b,0,0)},transform:function(a,b,c,d,e,f){this._cmd(a,-b,-c,d,e,-f,"cm")},_png:function(a){if("data:image/png;base64,"!==a.substr(0,22))return{error:"Not a base64-encoded PNG file"};a=Rd(a.substr(22));var b=Sd(a);console.log("PNG chunks:",b.map(function(a){return a.type}));if("IHDR"!==b[0].type)throw Error("Image does not start with an IHDR"); var c=b[0].data;a=(c[0]<<24|c[1]<<16|c[2]<<8|c[3])>>>0;var d=(c[4]<<24|c[5]<<16|c[6]<<8|c[7])>>>0,e=c[8],f=c[9],h=0===(f&2),m=0!==(f&4),k=c[10],l=c[11],c=c[12];if(0!==k)throw Error("Unsupported PNG compression method: "+k);if(0!==l)throw Error("Unsupported PNG filter method: "+l);if(0!==c)return{error:"Interlaced image not supported"};if(0!==(f&1))return{error:"Indexed PNG image not supported"};l=null;f=h?1:3;k=b.filter(function(a){return"IDAT"===a.type}).map(function(a){return a.data});if(m){m=window.pako; l=new m.Inflate;for(b=0;b>>3;if(l.length!==d*(a*(f+1)*c+1))throw Error("Data length mismatch");for(var n=f*c,k=new Uint8Array(d*(a*n+1)),q=new Uint8Array(d*(a*c+1)),r=0,t=0,u=0,v=0;v>"},_obj:function(a,b){b||(b=this._nextIndex++);Array.isArray(a)||(a=[this._dict(a)]);a.index=b;a.ref=b+" 0 R";a.offset=this._offset;var c=0;a.unshift(b+" 0 obj\n");a.push("\nendobj\n");for(var d=0;d("number"===typeof h.narrow?h.narrow:20)/q)continue}else if("C"=== h.kind)l=u.csnames[h.args[0]],n=h.radius,k=m.div(l.homog.value[0],l.homog.value[2]).value.real,l=m.div(l.homog.value[1],l.homog.value[2]).value.real,k-=a.x,l-=a.y,n=Math.sqrt(k*k+l*l)-n.value.real,l=k=0,0>n&&(n=-n),n+=30/q;else if("L"===h.kind)k=h.homog,n=m,l=n.add(n.mult(k.value[0],n.conjugate(k.value[0])),n.mult(k.value[1],n.conjugate(k.value[1]))),l=f.scaldiv(n.sqrt(l),k),n=l.value[0].value.real*a.x+l.value[1].value.real*a.y+l.value[2].value.real,k=-l.value[0].value.real*n,l=-l.value[1].value.real* n,0>n&&(n=-n),n+=25/q;else if("Text"===h.kind){if(!h._bbox)continue;l=x.from(a.x,a.y,1);k=Math.max(0,l[0]-h._bbox.right,h._bbox.left-l[0]);l=Math.max(0,l[1]-h._bbox.bottom,h._bbox.top-l[1]);n=Math.sqrt(k*k+l*l);if(20Math.abs(d-a)&&.2>Math.abs(e-c)&&(b=f.realVector([d,e,1]))}return f.normalizeMax(b)};n.Free.getParamFromState=function(a){return Z(3)};n.Free.putParamToState=function(a,b){T(b)};n.Free.updatePosition=function(a){var b=Z(3);T(b);a.homog=v.withUsage(b,"Point")};n.Free.stateSize=6;n._helper.projectPointToLine=function(a,b){var c=f.turnIntoCSList([b.value[0],b.value[1],m.zero]),c=f.cross(c,a);return f.normalizeMax(f.cross(c,b))};n.PointOnLine={};n.PointOnLine.kind= "P";n.PointOnLine.signature=["L"];n.PointOnLine.isMovable=!0;n.PointOnLine.initialize=function(a){var b=n._helper.initializePoint(a);a=u.csnames[a.args[0]].homog;var b=n._helper.projectPointToLine(b,a),b=f.normalizeMax(b),c=f.cross(f.linfty,b);f.normalizeMax(c);T(b);T(a);eb=!1};n.PointOnLine.updatePosition=function(a,b){var c,d=u.csnames[a.args[0]].homog;c=Z(3);Z(3);if(!b){ua=a.stateIdx;var e=ma;ma=ya;var h=Z(3),m=Z(3);ma=e;e=f.cross(m,d);f._helper.isAlmostZero(e)&&(e=f.cross(f.linfty,d));h=n._helper.CircleMP(e, h);h=n._helper.IntersectLC(d,h);e=n._helper.pointReflection(e,c);c=vd(h[0],h[1],c,e)[0]}c=f.normalizeMax(c);T(c);T(d);a.homog=v.withUsage(c,"Point")};n.PointOnLine.getParamForInput=function(a,b,c){return b=n._helper.projectPointToLine(b,u.csnames[a.args[0]].homog)};n.PointOnLine.getParamFromState=function(a){return Z(3)};n.PointOnLine.putParamToState=function(a,b){return T(b)};n.PointOnLine.stateSize=12;n.PointOnCircle={};n.PointOnCircle.kind="P";n.PointOnCircle.signature=["C"];n.PointOnCircle.isMovable= !0;n.PointOnCircle.initialize=function(a){var b=u.csnames[a.args[0]];a=f.normalizeZ(n._helper.initializePoint(a));var c=f.normalizeZ(n._helper.CenterOfConic(b.matrix)),d=f.sub(a,c),d=f.turnIntoCSList([d.value[1],m.neg(d.value[0]),m.zero]),c=f.cross(a,c),b=n._helper.IntersectLC(c,b.matrix),c=f.projectiveDistMinScal(a,b[0]);f.projectiveDistMinScal(a,b[1])m.sub(m.mult(a.value[0],c.value[1]),m.mult(a.value[1],c.value[0])).value.real&&(b=f.neg(b));return f.turnIntoCSList([b.value[1],m.neg(b.value[0]),m.zero])};n.PointOnCircle.parameterPath=function(a,b,c,d,e){d=f.normalizeAbs(d);e=f.normalizeAbs(e);var h=f.scalproduct(d,e);if(0<=h.value.real)return ud(a,b,c,d,e); a=f.turnIntoCSList([m.sub(d.value[1],e.value[1]),m.sub(e.value[0],d.value[0]),m.zero]);h=f.scalproduct(d,a);0>h.value.real&&(a=f.neg(a));0>b?(b=2*b+1,c=b*b,h=.25/(1+c),c=m.complex(2*b*h+.25,(1-c)*h)):(b=2*b-1,c=b*b,h=.25/(1+c),c=m.complex(2*b*h+.75,(1-c)*h));var k=m.sub(m.real(1),c);b=m.mult(c,c);h=m.mult(k,k);c=m.mult(c,k);d=f.scalmult(h,d);d=f.add(d,f.scalmult(c,a));return d=f.add(d,f.scalmult(b,e))};n.PointOnCircle.updatePosition=function(a){var b=Z(3);T(b);var c=u.csnames[a.args[0]],b=f.productMV(c.matrix, b),c=n._helper.IntersectLC(b,c.matrix),c=Ha(c[0],c[1]),b=f.normalizeMax(c.value[0]);a.homog=v.withUsage(b,"Point");a.antipodalPoint=c.value[1]};n.PointOnCircle.stateSize=6+Ha.stateSize;n.OtherPointOnCircle={};n.OtherPointOnCircle.kind="P";n.OtherPointOnCircle.signature=["P"];n.OtherPointOnCircle.signatureConstraints=function(a){return"PointOnCircle"===u.csnames[a.args[0]].type};n.OtherPointOnCircle.updatePosition=function(a){var b=u.csnames[a.args[0]].antipodalPoint,b=f.normalizeMax(b);a.homog=v.withUsage(b, "Point")};n.PointOnSegment={};n.PointOnSegment.kind="P";n.PointOnSegment.signature=["S"];n.PointOnSegment.isMovable=!0;n.PointOnSegment.initialize=function(a){var b=n._helper.initializePoint(a);a=n.PointOnSegment.getParamForInput(a,b);Va(a)};n.PointOnSegment.getParamForInput=function(a,b){var c=u.csnames[a.args[0]],d=c.homog,d=f.turnIntoCSList([d.value[0],d.value[1],m.zero]),e=f.sub(c.startpos,c.endpos),c=f.crossratio3(e,c.startpos,c.endpos,b,d);0>c.value.real&&(c=m.complex(0,c.value.imag));1m.abs(f.det(a)).value.real)return"degenerate";var b=m.mult(a.value[0].value[0],a.value[1].value[1]),b=m.sub(b,m.pow(a.value[0].value[1],m.real(2))),b=b.value.real;return 1E-16>Math.abs(b)?"parabola":1E-16d;d++)e=m.abs2(b.value[d].value[d]).value.real,e>h&&(c=d,h=e);d=m.sqrt(m.mult(m.real(-1),b.value[c].value[c]));if(1E-16>m.abs2(d).value.real)return a=f.turnIntoCSList([m.zero,m.zero,m.zero]),[a,a];c=m.real(c+1);e=f.column(b,c);e=f.scaldiv(d,e);d=e.value[0];h=e.value[1];e=e.value[2];d=f.turnIntoCSList([f.turnIntoCSList([m.real(0),e,m.mult(m.real(-1),h)]),f.turnIntoCSList([m.mult(m.real(-1),e),m.real(0),d]),f.turnIntoCSList([h, m.mult(m.real(-1),d),m.real(0)])]);a=f.add(a,d);var k=0;for(d=h=b=0;3>d;d++)for(c=0;3>c;c++)e=m.abs2(a.value[d].value[c]).value.real,e>h&&(k=d,b=c,h=e);d=a.value[k];a=f.transpose(a);a=a.value[b];d=f.normalizeMax(d);a=f.normalizeMax(a);d=v.withUsage(d,"Line");a=v.withUsage(a,"Line");return[d,a]};n.SelectConic={};n.SelectConic.kind="C";n.SelectConic.signature=["Cs"];n.SelectConic.initialize=function(a){if(void 0!==a.index)return a.index-1;var b=m._helper.input(a.pos.xx),c=m._helper.input(a.pos.yy), d=m._helper.input(a.pos.zz),e=m.realmult(.5,m._helper.input(a.pos.xy)),h=m.realmult(.5,m._helper.input(a.pos.xz)),k=m.realmult(.5,m._helper.input(a.pos.yz)),b=f.turnIntoCSList([f.turnIntoCSList([b,e,h]),f.turnIntoCSList([e,c,k]),f.turnIntoCSList([h,k,d])]);a=u.csnames[a.args[0]].results;c=f.conicDist(b,a[0]);d=0;for(e=1;er;++r){var u=(r&2)-1,v=d(m.real(((r&1)<<1)-1),n),w=d(m.real(u),q),x=h(e,v,k,w),y=h(b,w,a, v),u=h(a,e,b,k),z=m.add(m.add(h(b,k,a,e),h(k,w,e,v)),h(w,b,v,a)),v=d(x,x),w=d(y,y),A=d(z,z),B=d(x,y),x=d(x,z),y=d(y,z),B=m.sub(B,d(m.real(.5),d(u,u))),u=f.turnIntoCSList([f.turnIntoCSList([v,B,x]),f.turnIntoCSList([B,w,y]),f.turnIntoCSList([x,y,A])]),u=f.productMM(l,f.productMM(u,c)),u=f.turnIntoCSList([u.value[0].value[0],u.value[0].value[1],u.value[0].value[2],u.value[1].value[1],u.value[1].value[2],u.value[2].value[2]]);t[r]=u}return t};n.ConicBy3p2l={};n.ConicBy3p2l.kind="Cs";n.ConicBy3p2l.signature= ["P","P","P","L","L"];n.ConicBy3p2l.updatePosition=function(a){for(var b=n._helper.ConicBy3p2l(u.csnames[a.args[0]].homog,u.csnames[a.args[1]].homog,u.csnames[a.args[2]].homog,u.csnames[a.args[3]].homog,u.csnames[a.args[4]].homog),b=wd(b),c=Array(4),d=0;4>d;++d){var e=b[d].value;c[d]=f.turnIntoCSList([f.turnIntoCSList([e[0],e[1],e[2]]),f.turnIntoCSList([e[1],e[3],e[4]]),f.turnIntoCSList([e[2],e[4],e[5]])])}a.results=c};n.ConicBy3p2l.stateSize=48;n.ConicBy2p3l={};n.ConicBy2p3l.kind="Cs";n.ConicBy2p3l.signature= ["P","P","L","L","L"];n.ConicBy2p3l.updatePosition=function(a){for(var b=n._helper.ConicBy3p2l(u.csnames[a.args[2]].homog,u.csnames[a.args[3]].homog,u.csnames[a.args[4]].homog,u.csnames[a.args[0]].homog,u.csnames[a.args[1]].homog),b=wd(b),c=Array(4),d=0;4>d;++d){var e=b[d].value,e=f.turnIntoCSList([f.turnIntoCSList([e[0],e[1],e[2]]),f.turnIntoCSList([e[1],e[3],e[4]]),f.turnIntoCSList([e[2],e[4],e[5]])]);c[d]=f.normalizeMax(f.adjoint3(e))}a.results=c};n.ConicBy2p3l.stateSize=48;n.ConicBy1p4l={};n.ConicBy1p4l.kind= "Cs";n.ConicBy1p4l.signature=["P","L","L","L","L"];n.ConicBy1p4l.updatePosition=function(a){var b=n._helper.ConicBy4p1l(a,u.csnames[a.args[1]].homog,u.csnames[a.args[2]].homog,u.csnames[a.args[3]].homog,u.csnames[a.args[4]].homog,u.csnames[a.args[0]].homog),c=b[0],b=b[1],c=f.adjoint3(c),b=f.adjoint3(b),b=[c,b];a.results=b};n.ConicBy1p4l.stateSize=Ha.stateSize;n.ConicParabolaPL={};n.ConicParabolaPL.kind="C";n.ConicParabolaPL.signature=["P","L"];n.ConicParabolaPL.updatePosition=function(a){var b=u.csnames[a.args[0]].homog.value, c=u.csnames[a.args[1]].homog.value,d=m.mult,e=m.neg,h=m.add,k=m.sub,l=b[0],q=b[1],r=b[2],t=c[0],b=c[1],c=c[2],w=d(r,r),x=d(t,t),y=d(b,b),z=d(r,c),A=e(r),r=h(x,y),y=d(w,y),x=d(w,x),e=d(e(w),d(t,b)),t=d(A,h(d(l,r),d(z,t))),b=d(A,h(d(q,r),d(z,b))),d=k(d(h(d(l,l),d(q,q)),r),d(w,d(c,c))),d=n._helper.buildConicMatrix([y,e,x,t,b,d]),d=f.normalizeMax(d);a.matrix=v.withUsage(d,"Conic")};n.ConicBy2Foci1P={};n.ConicBy2Foci1P.kind="Cs";n.ConicBy2Foci1P.signature=["P","P","P"];n.ConicBy2Foci1P.updatePosition= function(a){var b=u.csnames[a.args[0]].homog,c=u.csnames[a.args[1]].homog,d=u.csnames[a.args[2]].homog,e=f.ii,h=f.jj,k=f.normalizeMax(f.cross(b,d)),l=f.normalizeMax(f.cross(c,d)),q=f.normalizeMax(f.cross(d,e)),d=f.normalizeMax(f.cross(d,h)),l=n._helper.coHarmonic(q,d,k,l),k=f.normalizeMax(l[0]),l=f.normalizeMax(l[1]),e=f.turnIntoCSList([e]),q=f.turnIntoCSList([h]),d=f.turnIntoCSList([b]),r=f.turnIntoCSList([c]),h=n._helper.conicFromTwoDegenerates(e,q,d,r,k),h=f.normalizeMax(h),e=n._helper.conicFromTwoDegenerates(e, q,d,r,l),e=f.normalizeMax(e),h=f.normalizeMax(f.adjoint3(h)),e=f.normalizeMax(f.adjoint3(e));"ellipsoid"!==n._helper.getConicType(h)&&(k=h,h=e,e=k);f.almostequals(b,c).value&&(b=m.real(3),e=f.zeromatrix(b,b));a.results=[h,e]};n.ConicBy2Pol1P={};n.ConicBy2Pol1P.kind="C";n.ConicBy2Pol1P.signature=["P","L","P","L","P"];n.ConicBy2Pol1P.updatePosition=function(a){var b=u.csnames[a.args[0]].homog,c=u.csnames[a.args[1]].homog,d=u.csnames[a.args[2]].homog,e=u.csnames[a.args[3]].homog,h=u.csnames[a.args[4]].homog, k=f.scalproduct,l=f.scalmult,n=f.sub,q=f.productMM,r=m.realmult,t=f.transpose,w=f.turnIntoCSList,x=n(l(k(c,b),h),l(r(2,k(c,h)),b)),y=n(l(k(e,d),h),l(r(2,k(e,h)),d)),z=w([f.cross(b,h)]),h=w([f.cross(d,h)]),y=q(t(z),w([f.cross(b,y)])),w=q(t(h),w([f.cross(d,x)])),q=q(t(z),h),b=k(b,e),c=k(d,c),d=f.add(l(c,y),l(b,w)),d=n(d,l(r(2,m.mult(b,c)),q)),d=f.add(d,t(d)),d=f.normalizeMax(d),d=v.withUsage(d,"Conic");a.matrix=d};n.ConicBy2Pol1L={};n.ConicBy2Pol1L.kind="C";n.ConicBy2Pol1L.signature=["P","L","P","L", "L"];n.ConicBy2Pol1L.updatePosition=function(a){var b=u.csnames[a.args[0]].homog,c=u.csnames[a.args[1]].homog,d=u.csnames[a.args[2]].homog,e=u.csnames[a.args[3]].homog,h=u.csnames[a.args[4]].homog,k=f.scalproduct,l=f.scalmult,n=f.productMM,q=m.mult,r=f.transpose,t=f.turnIntoCSList,w=k(c,b),x=k(c,d),y=k(e,b),z=k(e,d),A=k(h,b),k=k(h,d),B=t([f.sub(l(q(y,k),c),l(q(x,A),e))]),b=f.add(n(r(t([l(q(y,x),h)])),t([f.sub(f.add(l(m.sub(q(w,k),q(x,A)),e),l(m.sub(q(z,A),q(y,k)),c)),l(f.det3(c,e,h),f.cross(b,d)))])), n(r(B),B)),b=f.add(b,r(b)),b=f.normalizeMax(b),b=v.withUsage(b,"Conic");a.matrix=b};n._helper.conic1Pol3Inc=function(a,b,c,d,e){var h=f.scalproduct,k=f.scalmult,l=f.productMM,n=f.cross,q=m.realmult,r=m.mult,t=f.transpose,u=f.turnIntoCSList,v=f.det3,w=v(a,c,d),x=u([n(c,e)]),y=u([n(a,e)]),z=u([n(c,d)]),A=h(b,a),B=h(b,c);b=h(b,e);n=u([n(d,f.sub(k(A,e),k(q(2,b),a)))]);x=k(w,l(t(x),n));a=q(2,m.add(r(v(a,d,e),B),r(w,b)));a=m.sub(r(v(c,d,e),A),a);x=f.add(x,k(a,l(t(y),z)));x=f.add(x,t(x));return x=f.normalizeMax(x)}; n.ConicBy1Pol3P={};n.ConicBy1Pol3P.kind="C";n.ConicBy1Pol3P.signature=["P","L","P","P","P"];n.ConicBy1Pol3P.updatePosition=function(a){var b=n._helper.conic1Pol3Inc(u.csnames[a.args[0]].homog,u.csnames[a.args[1]].homog,u.csnames[a.args[2]].homog,u.csnames[a.args[3]].homog,u.csnames[a.args[4]].homog),b=v.withUsage(b,"Conic");a.matrix=b};n.ConicBy1Pol3L={};n.ConicBy1Pol3L.kind="C";n.ConicBy1Pol3L.signature=["P","L","L","L","L"];n.ConicBy1Pol3L.updatePosition=function(a){var b=n._helper.conic1Pol3Inc(u.csnames[a.args[1]].homog, u.csnames[a.args[0]].homog,u.csnames[a.args[2]].homog,u.csnames[a.args[3]].homog,u.csnames[a.args[4]].homog),b=f.normalizeMax(f.adjoint3(b)),b=v.withUsage(b,"Conic");a.matrix=b};n._helper.coHarmonic=function(a,b,c,d){var e=f.realVector([100*Math.random(),100*Math.random(),1]),h=f.det3(e,c,a),k=f.det3(e,c,b);c=f.det3(e,d,a);d=f.det3(e,d,b);d=m.sqrt(m.mult(d,k));h=m.sqrt(m.mult(c,h));a=v.mult(a,d);h=v.mult(b,h);b=f.add(a,h);a=f.sub(a,h);return[b,a]};n.ConicInSquare={};n.ConicInSquare.kind="C";n.ConicInSquare.signature= ["P","P","P","P"];n.ConicInSquare.updatePosition=function(a){var b=D.basismap(u.csnames[a.args[0]].homog,u.csnames[a.args[1]].homog,u.csnames[a.args[2]].homog,u.csnames[a.args[3]].homog),c=m.one,c=n._helper.buildConicMatrix([c,c,c,m.real(-3),c,c]),b=f.adjoint3(b),b=f.productMM(f.productMM(f.transpose(b),c),b),b=f.normalizeMax(b);a.matrix=v.withUsage(b,"Conic")};n.ConicBy5lines={};n.ConicBy5lines.kind="C";n.ConicBy5lines.signature=["L","L","L","L","L"];n.ConicBy5lines.updatePosition=function(a){var b= n._helper.ConicBy5(a,u.csnames[a.args[0]].homog,u.csnames[a.args[1]].homog,u.csnames[a.args[2]].homog,u.csnames[a.args[3]].homog,u.csnames[a.args[4]].homog),b=f.adjoint3(b);a.matrix=b;a.matrix=f.normalizeMax(a.matrix);a.matrix=v.withUsage(a.matrix,"Conic")};n.ConicFromPrincipalDirections={};n.ConicFromPrincipalDirections.kind="C";n.ConicFromPrincipalDirections.signature=["P","P","P"];n.ConicFromPrincipalDirections.updatePosition=function(a){var b=u.csnames[a.args[0]].homog,c=u.csnames[a.args[1]].homog, d=u.csnames[a.args[2]].homog,e=n._helper.pointReflection(b,c),h=f.cross(c,b),b=f.turnIntoCSList([h.value[0],h.value[1],m.zero]),h=f.turnIntoCSList([h]),c=f.turnIntoCSList([f.cross(c,b)]),e=f.turnIntoCSList([f.cross(e,b)]);a.matrix=n._helper.conicFromTwoDegenerates(h,h,c,e,d);a.matrix=f.normalizeMax(a.matrix);a.matrix=v.withUsage(a.matrix,"Conic")};n.CircleBy3={};n.CircleBy3.kind="C";n.CircleBy3.signature=["P","P","P"];n.CircleBy3.updatePosition=function(a){var b=n._helper.ConicBy5(a,u.csnames[a.args[0]].homog, u.csnames[a.args[1]].homog,f.ii,f.jj,u.csnames[a.args[2]].homog);a.matrix=f.normalizeMax(b);a.matrix=v.withUsage(a.matrix,"Circle")};n.ArcBy3={};n.ArcBy3.kind="C";n.ArcBy3.signature=["P","P","P"];n.ArcBy3.updatePosition=function(a){n.CircleBy3.updatePosition(a);a.startPoint=u.csnames[a.args[0]].homog;a.viaPoint=u.csnames[a.args[1]].homog;a.endPoint=u.csnames[a.args[2]].homog};n.ArcBy3.initialize=function(a){a.startPoint=u.csnames[a.args[0]].homog;a.viaPoint=u.csnames[a.args[1]].homog;a.endPoint=u.csnames[a.args[2]].homog; a.isArc=!0};n.PolarOfPoint={};n.PolarOfPoint.kind="L";n.PolarOfPoint.signature=["P","C"];n.PolarOfPoint.updatePosition=function(a){var b=v.mult(u.csnames[a.args[1]].matrix,u.csnames[a.args[0]].homog),b=f.normalizeMax(b);a.homog=v.withUsage(b,"Line")};n.PolarOfLine={};n.PolarOfLine.kind="P";n.PolarOfLine.signature=["L","C"];n.PolarOfLine.updatePosition=function(a){var b=u.csnames[a.args[0]],c=f.adjoint3(u.csnames[a.args[1]].matrix),b=v.mult(c,b.homog),b=f.normalizeMax(b);a.homog=v.withUsage(b,"Point")}; n.AngleBisector={};n.AngleBisector.kind="Ls";n.AngleBisector.signature=["L","L","P"];n.AngleBisector.updatePosition=function(a){var b=u.csnames[a.args[0]].homog,c=u.csnames[a.args[1]].homog,d=u.csnames[a.args[2]].homog,e=f.add,h=f.sub,k=f.abs,l=f.cross,m=f.scalmult,n=f.normalizeMax,q=f._helper.isAlmostZero,r=f.linfty,t=m(k(l(l(r,c),r)),b),b=m(k(l(l(r,b),r)),c),h=h(t,b),e=e(t,b);q(h)&&(h=l(l(l(r,e),r),d));q(e)&&(e=l(l(l(r,h),r),d));a.results=Ha(n(h),n(e))};n.AngleBisector.stateSize=Ha.stateSize;n._helper.IntersectLC= function(a,b){var c=m,d=f.crossOperator(a),e=f.transpose(d),e=v.mult(e,v.mult(b,d)),h=f.maxIndex(a,m.abs2),k,l,n,q;0===h?(h=e.value[1].value[1],k=e.value[1].value[2],l=e.value[2].value[1],n=e.value[2].value[2],q=a.value[0]):1===h?(h=e.value[0].value[0],k=e.value[0].value[2],l=e.value[2].value[0],n=e.value[2].value[2],q=a.value[1]):(h=e.value[0].value[0],k=e.value[0].value[1],l=e.value[1].value[0],n=e.value[1].value[1],q=a.value[2]);c=c.div(c.sqrt(c.sub(c.mult(k,l),c.mult(h,n))),q);c=f.add(e,f.scalmult(c, d));h=f.maxIndex(c,f.abs2);d=c.value[h];d=f.normalizeMax(d);d=v.withUsage(d,"Point");c=f.transpose(c);h=f.maxIndex(c,f.abs2);c=c.value[h];c=f.normalizeMax(c);c=v.withUsage(c,"Point");return[d,c]};n.IntersectLC={};n.IntersectLC.kind="Ps";n.IntersectLC.signature=["L","C"];n.IntersectLC.updatePosition=function(a){var b=n._helper.IntersectLC(u.csnames[a.args[0]].homog,u.csnames[a.args[1]].matrix);a.results=Ha(b[0],b[1])};n.IntersectLC.stateSize=Ha.stateSize;n.OtherIntersectionCL={};n.OtherIntersectionCL.kind= "P";n.OtherIntersectionCL.signature=["C","L","P"];n.OtherIntersectionCL.updatePosition=function(a){var b=u.csnames[a.args[2]].homog,c=n._helper.IntersectLC(u.csnames[a.args[1]].homog,u.csnames[a.args[0]].matrix),d=c[0],c=c[1],e=f.projectiveDistMinScal(d,b),b=f.projectiveDistMinScal(c,b);a.homog=el?(q=a,c=b):(r=m.solveCubic(q,r,c,h),c=m.abs2(m.sub(r[0],r[1])).value.real,h=m.abs2(m.sub(r[0],r[2])).value.real,k=m.abs2(m.sub(r[1],r[2])).value.real,c>h?(q= r[1],r=c>k?r[0]:r[2]):(q=r[2],r=h>k?r[0]:r[1]),q=f.add(f.scalmult(q,a),b),c=f.add(f.scalmult(r,a),b));r=n._helper.splitDegenConic(q);q=r[0];r=r[1];c=n._helper.splitDegenConic(c);k=c[0];h=c[1];c=f.cross(q,k);k=f.cross(r,k);q=f.cross(q,h);r=f.cross(r,h);c=f.normalizeMax(c);k=f.normalizeMax(k);q=f.normalizeMax(q);r=f.normalizeMax(r);c=v.withUsage(c,"Point");k=v.withUsage(k,"Point");q=v.withUsage(q,"Point");r=v.withUsage(r,"Point");return[c,k,q,r]};n.IntersectConicConic={};n.IntersectConicConic.kind= "Ps";n.IntersectConicConic.signature=["C","C"];n.IntersectConicConic.updatePosition=function(a){var b=n._helper.IntersectConicConic(u.csnames[a.args[0]].matrix,u.csnames[a.args[1]].matrix),b=vc(b[0],b[1],b[2],b[3]);a.results=b};n.IntersectConicConic.stateSize=vc.stateSize;n.SelectP={};n.SelectP.kind="P";n.SelectP.signature=["Ps"];n.SelectP.initialize=function(a){if(void 0!==a.index)return a.index-1;var b=u.csnames[a.args[0]].results.value;a=n._helper.initializePoint(a);for(var c=f.projectiveDistMinScal(a, b[0]),d=0,e=1;ea&&c>.999*a;)b=ra.oneRKStep(b),c+=b,b=Math.min(2*b,a-c),b=Math.max(b,1E-16),ra.restorePosition(),ra.doCollisions(),ra.calculateForces(), ra.moveToFinalPos();return!0};ra.restorePosition=function(){Aa.forEach(function(a){N[a.type].restorePos(a,9)})};ra.doCollisions=function(){Aa.forEach(function(a){N[a.type].doCollisions(a)})};ra.calculateForces=function(){Aa.forEach(function(a){N[a.type].calculateForces(a)})};ra.moveToFinalPos=function(){Aa.forEach(function(a){N[a.type].move(a)})};ra.oneRKStep=function(a){for(var b=function(a){Aa.forEach(function(b){N[b.type].initRK(b,a);N[b.type].storePosition(b)})},c=function(a){Aa.forEach(function(b){N[b.type].setToTimestep(b, Hb[a])})},d=function(a){Aa.forEach(function(b){N[b.type].proceedMotion(b,Hb[a],a,Ed[a])})},e=function(){Aa.forEach(function(a){N[a.type].resetForces(a)})},f=function(a){Aa.forEach(function(b){N[b.type].calculateDelta(b,a)})},h=function(b){var c=0;Aa.forEach(function(a){N[a.type].proceedMotion(a,Hb[6],7,Fd);N[a.type].savePos(a,8);N[a.type].proceedMotion(a,Hb[6],7,Gd);N[a.type].savePos(a,9);c+=N[a.type].sqDist(a,8,9)});return c=Math.sqrt(c)/a},k=function(a){Aa.forEach(function(a){N[a.type].recallPosition(a)})}, l=!1;!l;){b(a);for(var m=0;7>m;m++)c(m),d(m),e(),ra.calculateForces(),f(m);h(a)>N.env.errorbound&&a>N.env.lowestdeltat?(a/=N.env.slowdownfactor,k()):l=!0}return a};var N={Mass:{reset:function(a,b){a.vel=[0,0,0];a.pos=[0,0,0,0];a.el=b;"undefined"===typeof a.mass&&(a.mass=1);"undefined"===typeof a.charge&&(a.charge=0);"undefined"===typeof a.friction&&(a.friction=0);a.lnfrict=0;"undefined"===typeof a.limitspeed&&(a.limitspeed=!1);"undefined"===typeof a.fixed&&(a.fixed=!1);"undefined"===typeof a.radius&& (a.radius=1);a.internalmove=!1;a.fx=0;a.fy=0;a.fz=0;a.vx=a.vx||0;a.vy=a.vy||0;a.vz=a.vz||0;a.mtype=0;a.env=N.env;a.deltat=0;a.mx=0;a.my=0;a.mz=0;a.mvx=0;a.mvy=0;a.mvz=0;a.dx=[0,0,0,0,0,0,0,0,0,0];a.dy=[0,0,0,0,0,0,0,0,0,0];a.dz=[0,0,0,0,0,0,0,0,0,0];a.dvx=[0,0,0,0,0,0,0,0,0,0];a.dvy=[0,0,0,0,0,0,0,0,0,0];a.dvz=[0,0,0,0,0,0,0,0,0,0];a.midx=0;a.midy=0;a.midz=0;a.lx=0;a.ly=0;a.lz=0},resetForces:function(a){a.fx=0;a.fy=0;a.fz=0},getBlock:!1,setToTimestep:function(a,b,c){},initRK:function(a,b){var c=D.extractPoint(a.el.homog); a.x=c.x;a.y=c.y;a.z=0;a.xo=a.x;a.yo=a.y;a.zo=a.z;a.vxo=a.vx;a.vyo=a.vy;a.vzo=a.vz;a.deltat=b;a.fx=0;a.fy=0;a.fz=0},setVelocity:function(a,b,c,d){d||(d=0);a.vx=b;a.vy=c;a.vz=d},move:function(a){a.pos=[a.x,a.y,1];a.internalmove=!0;aa&&U.down&&a.el===aa.mover||Ea(a.el,f.realVector(a.pos),"homog");a.el.sx=a.x;a.el.sy=a.y;a.internalmove=!1},proceedMotion:function(a,b,c,d){if(!a.fixed)for(a.x=a.mx,a.y=a.my,a.z=a.mz,a.vx=a.mvx,a.vy=a.mvy,a.vz=a.mvz,b=0;bN.det(d,b,e,c,w,x)*N.det(d,b,e,c,y.value.real,y.value.imag)&&0>N.det(d,b,w,x,y.value.real,y.value.imag)*N.det(e,c,w,x,y.value.real,y.value.imag)&&(v=t.behavior.mvx+a.deltat*(-y.value.real+t.behavior.xo),w=t.behavior.mvy+a.deltat*(-y.value.imag+t.behavior.yo),u=q*v+n*w,v=n*v-q*w,t.behavior.x=y.value.real,t.behavior.y=y.value.imag,t.behavior.vx=q*u*(1-a.xdamp),t.behavior.vy=n*u*(1-a.xdamp),t.behavior.vx+=-n*v*(1-a.ydamp),t.behavior.vy+= q*v*(1-a.ydamp))}a.x1o=d;a.y1o=b;a.x2o=e;a.y2o=c}},Environment:{init:function(a){"undefined"===typeof a.gravity&&(a.gravity=0);"undefined"===typeof a.friction&&(a.friction=0);"undefined"===typeof a.springstrength&&(a.springstrength=1);"undefined"!==typeof a.accuracy&&(Lb=a.accuracy);"undefined"!==typeof a.deltat&&oa(a.deltat/.6);"undefined"===typeof a.charges&&(a.charges=!1);"undefined"===typeof a.balls&&(a.balls=!1);"undefined"===typeof a.newton&&(a.newton=!1);"undefined"===typeof a.ballInteractionBoosting&& (a.ballInteractionBoosting=1);N.env=a;a.errorbound=.001;a.lowestdeltat=1E-7;a.slowdownfactor=2},reset:function(a){},resetForces:function(a){},getBlock:!1,setToTimestep:function(a,b,c){},initRK:function(a,b){},setVelocity:function(a,b,c,d){},move:function(a){},proceedMotion:function(a,b,c,d){},calculateForces:function(a){var b,c,d,e,f,h,k,l,m,n;if(a.newton)for(b=0;bm?0:(n-m)*(n-m)),l=(e-l)/(n*n*n)*(n>m?0:(n-m)*(n-m))):1===a.ballInteractionBoosting?(k=(d-k)/(n*n*n*n)*(n>m?0:(n-m)*(n-m)),l=(e-l)/(n*n*n*n)*(n>m?0:(n-m)* (n-m))):(k=(d-k)/(n*n*n*n*n)*(n>m?0:(n-m)*(n-m)),l=(e-l)/(n*n*n*n*n)*(n>m?0:(n-m)*(n-m))),c.behavior.fx+=k,c.behavior.fy+=l,h.behavior.fx-=k,h.behavior.fy-=l);for(b=0;b