jsxgraph 1.9.0 → 1.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -0
- package/distrib/docs.zip +0 -0
- package/distrib/geogebra.min.js +2 -2
- package/distrib/geonext.min.js +3 -3
- package/distrib/index.d.ts +1 -1
- package/distrib/intergeo.min.js +2 -2
- package/distrib/jsxgraph.css +1 -1
- package/distrib/jsxgraph.zip +0 -0
- package/distrib/jsxgraphcore.js +3 -3
- package/distrib/jsxgraphcore.mjs +3 -3
- package/distrib/jsxgraphcore.mjs.map +1 -1
- package/distrib/jsxgraphsrc.js +7680 -6865
- package/distrib/jsxgraphsrc.mjs +7964 -7150
- package/distrib/jsxgraphsrc.mjs.map +1 -1
- package/distrib/sketch.min.js +3 -3
- package/distrib/themes/mono_thin.js +1 -1
- package/package.json +4 -4
- package/src/3d/box3d.js +6 -3
- package/src/3d/circle3d.js +11 -10
- package/src/3d/curve3d.js +3 -1
- package/src/3d/element3d.js +1 -1
- package/src/3d/linspace3d.js +20 -57
- package/src/3d/point3d.js +7 -1
- package/src/3d/polygon3d.js +2 -1
- package/src/3d/sphere3d.js +48 -44
- package/src/3d/surface3d.js +2 -1
- package/src/3d/view3d.js +1505 -1068
- package/src/base/board.js +177 -56
- package/src/base/chart.js +5 -6
- package/src/base/circle.js +4 -2
- package/src/base/composition.js +1 -1
- package/src/base/constants.js +2 -2
- package/src/base/coords.js +1 -1
- package/src/base/coordselement.js +1 -1
- package/src/base/curve.js +2 -1
- package/src/base/element.js +39 -31
- package/src/base/foreignobject.js +1 -1
- package/src/base/group.js +1 -1
- package/src/base/image.js +1 -1
- package/src/base/line.js +94 -106
- package/src/base/point.js +1 -1
- package/src/base/polygon.js +2 -2
- package/src/base/text.js +6 -2
- package/src/base/ticks.js +1 -1
- package/src/base/transformation.js +1 -1
- package/src/base/turtle.js +1 -1
- package/src/element/arc.js +1 -1
- package/src/element/button.js +63 -13
- package/src/element/checkbox.js +7 -3
- package/src/element/comb.js +1 -1
- package/src/element/composition.js +1 -1
- package/src/element/conic.js +1 -1
- package/src/element/grid.js +7 -7
- package/src/element/input.js +10 -7
- package/src/element/locus.js +1 -1
- package/src/element/measure.js +1 -1
- package/src/element/sector.js +1 -1
- package/src/element/slider.js +43 -40
- package/src/element/slopetriangle.js +1 -1
- package/src/element/smartlabel.js +1 -1
- package/src/element/vectorfield.js +1 -1
- package/src/index.d.ts +1 -1
- package/src/jsxgraph.js +6 -4
- package/src/jxg.js +1 -1
- package/src/math/bqdt.js +1 -1
- package/src/math/clip.js +1 -1
- package/src/math/complex.js +1 -1
- package/src/math/extrapolate.js +1 -1
- package/src/math/geometry.js +87 -65
- package/src/math/ia.js +12 -12
- package/src/math/implicitplot.js +1 -1
- package/src/math/math.js +48 -6
- package/src/math/metapost.js +1 -1
- package/src/math/nlp.js +1 -1
- package/src/math/numerics.js +1 -1
- package/src/math/plot.js +25 -26
- package/src/math/poly.js +1 -1
- package/src/math/probfuncs.js +1 -1
- package/src/math/qdt.js +1 -1
- package/src/math/statistics.js +1 -1
- package/src/math/symbolic.js +1 -1
- package/src/options.js +49 -4
- package/src/options3d.js +82 -5
- package/src/parser/datasource.js +1 -1
- package/src/parser/geonext.js +1 -1
- package/src/parser/jessiecode.js +12 -11
- package/src/parser/jessiescript.js +1 -1
- package/src/parser/prefix.js +9 -2
- package/src/reader/cinderella.js +1 -1
- package/src/reader/file.js +1 -1
- package/src/reader/geogebra.js +1 -1
- package/src/reader/geonext.js +1 -1
- package/src/reader/graph.js +1 -1
- package/src/reader/intergeo.js +1 -1
- package/src/reader/sketch.js +107 -1
- package/src/renderer/abstract.js +1 -1
- package/src/renderer/canvas.js +1 -1
- package/src/renderer/no.js +1 -1
- package/src/renderer/svg.js +17 -7
- package/src/renderer/vml.js +1 -1
- package/src/server/server.js +1 -1
- package/src/themes/mono_thin.js +1 -1
- package/src/unused/bst.js +1 -1
- package/src/unused/heap.js +1 -1
- package/src/utils/base64.js +1 -1
- package/src/utils/color.js +1 -1
- package/src/utils/dump.js +1 -1
- package/src/utils/env.js +3 -3
- package/src/utils/event.js +1 -1
- package/src/utils/expect.js +1 -1
- package/src/utils/type.js +30 -18
- package/src/utils/xml.js +1 -1
- package/src/utils/zip.js +1 -1
package/distrib/jsxgraphcore.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
|
-
JSXGraph 1.9.
|
|
2
|
+
JSXGraph 1.9.2
|
|
3
3
|
|
|
4
|
-
Copyright 2008-
|
|
4
|
+
Copyright 2008-2024
|
|
5
5
|
Matthias Ehmann,
|
|
6
6
|
Michael Gerhaeuser,
|
|
7
7
|
Carsten Miller,
|
|
@@ -52,4 +52,4 @@
|
|
|
52
52
|
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
53
53
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
54
54
|
*/
|
|
55
|
-
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.JXG=e():t.JXG=e()}("undefined"!=typeof self?self:this,(function(){return function(){"use strict";var __webpack_modules__={351:function(t,e,i){var r,s=i(765),o="1.9.0";r={version:o,licenseText:"JSXGraph v1.9.0 Copyright (C) see https://jsxgraph.org",COORDS_BY_USER:1,COORDS_BY_SCREEN:2,OBJECT_TYPE_ARC:1,OBJECT_TYPE_ARROW:2,OBJECT_TYPE_AXIS:3,OBJECT_TYPE_AXISPOINT:4,OBJECT_TYPE_TICKS:5,OBJECT_TYPE_CIRCLE:6,OBJECT_TYPE_CONIC:7,OBJECT_TYPE_CURVE:8,OBJECT_TYPE_GLIDER:9,OBJECT_TYPE_IMAGE:10,OBJECT_TYPE_LINE:11,OBJECT_TYPE_POINT:12,OBJECT_TYPE_SLIDER:13,OBJECT_TYPE_CAS:14,OBJECT_TYPE_GXTCAS:15,OBJECT_TYPE_POLYGON:16,OBJECT_TYPE_SECTOR:17,OBJECT_TYPE_TEXT:18,OBJECT_TYPE_ANGLE:19,OBJECT_TYPE_INTERSECTION:20,OBJECT_TYPE_TURTLE:21,OBJECT_TYPE_VECTOR:22,OBJECT_TYPE_OPROJECT:23,OBJECT_TYPE_GRID:24,OBJECT_TYPE_TANGENT:25,OBJECT_TYPE_HTMLSLIDER:26,OBJECT_TYPE_CHECKBOX:27,OBJECT_TYPE_INPUT:28,OBJECT_TYPE_BUTTON:29,OBJECT_TYPE_TRANSFORMATION:30,OBJECT_TYPE_FOREIGNOBJECT:31,OBJECT_TYPE_VIEW3D:32,OBJECT_TYPE_POINT3D:33,OBJECT_TYPE_LINE3D:34,OBJECT_TYPE_PLANE3D:35,OBJECT_TYPE_CURVE3D:36,OBJECT_TYPE_SURFACE3D:37,OBJECT_TYPE_MEASUREMENT:38,OBJECT_TYPE_INTERSECTION_LINE3D:39,OBJECT_TYPE_SPHERE3D:40,OBJECT_TYPE_CIRCLE3D:41,OBJECT_TYPE_INTERSECTION_CIRCLE3D:42,OBJECT_CLASS_POINT:1,OBJECT_CLASS_LINE:2,OBJECT_CLASS_CIRCLE:3,OBJECT_CLASS_CURVE:4,OBJECT_CLASS_AREA:5,OBJECT_CLASS_OTHER:6,OBJECT_CLASS_TEXT:7,OBJECT_CLASS_3D:8},s.Z.extendConstants(s.Z,r),e.Z=r},705:function(t,e,i){var r=i(765),s=i(351),o=i(88),n=i(109),a=i(275);r.Z.Coords=function(t,e,i,r){this.board=i,this.usrCoords=[],this.scrCoords=[],this.emitter=!n.Z.exists(r)||r,this.emitter&&o.Z.eventify(this),this.setCoordinates(t,e,!1,!0)},r.Z.extend(r.Z.Coords.prototype,{normalizeUsrCoords:function(){Math.abs(this.usrCoords[0])>a.Z.eps&&(this.usrCoords[1]/=this.usrCoords[0],this.usrCoords[2]/=this.usrCoords[0],this.usrCoords[0]=1)},usr2screen:function(t){var e=Math.round,i=this.board,r=this.usrCoords,s=i.origin.scrCoords;!0===t?(this.scrCoords[0]=e(r[0]),this.scrCoords[1]=e(r[0]*s[1]+r[1]*i.unitX),this.scrCoords[2]=e(r[0]*s[2]-r[2]*i.unitY)):(this.scrCoords[0]=r[0],this.scrCoords[1]=r[0]*s[1]+r[1]*i.unitX,this.scrCoords[2]=r[0]*s[2]-r[2]*i.unitY)},screen2usr:function(){var t=this.board.origin.scrCoords,e=this.scrCoords,i=this.board;this.usrCoords[0]=1,this.usrCoords[1]=(e[1]-t[1])/i.unitX,this.usrCoords[2]=(t[2]-e[2])/i.unitY},distance:function(t,e){var i,r,o=this.usrCoords,n=this.scrCoords;return t===s.Z.COORDS_BY_USER?(i=e.usrCoords,(r=o[0]-i[0])*r>a.Z.eps*a.Z.eps?Number.POSITIVE_INFINITY:a.Z.hypot(o[1]-i[1],o[2]-i[2])):(i=e.scrCoords,a.Z.hypot(n[1]-i[1],n[2]-i[2]))},setCoordinates:function(t,e,i,r){var o=this.usrCoords,n=this.scrCoords,a=[o[0],o[1],o[2]],h=[n[0],n[1],n[2]];return t===s.Z.COORDS_BY_USER?(2===e.length?(o[0]=1,o[1]=e[0],o[2]=e[1]):(o[0]=e[0],o[1]=e[1],o[2]=e[2],this.normalizeUsrCoords()),this.usr2screen(i)):(2===e.length?(n[1]=e[0],n[2]=e[1]):(n[1]=e[1],n[2]=e[2]),this.screen2usr()),!this.emitter||r||h[1]===n[1]&&h[2]===n[2]||this.triggerEventHandlers(["update"],[a,h]),this},copy:function(t,e){return void 0===e&&(e=0),this[t].slice(e)},isReal:function(){return!isNaN(this.usrCoords[1]+this.usrCoords[2])&&Math.abs(this.usrCoords[0])>a.Z.eps},__evt__update:function(t,e){},__evt:function(){}}),e.Z=r.Z.Coords},218:function(t,e,i){var r=i(765),s=i(275),o=i(922),n=i(336),a=i(309),h=i(705),l=i(351),c=i(109);r.Z.CoordsElement=function(t,e){var i;for(c.Z.exists(t)||(t=[1,0,0]),i=0;i<t.length;++i)t[i]=parseFloat(t[i]);this.coords=new h.Z(l.Z.COORDS_BY_USER,t,this.board),this.initialCoords=new h.Z(l.Z.COORDS_BY_USER,t,this.board),this.position=null,this.isConstrained=!1,this.onPolygon=!1,this.slideObject=null,this.slideObjects=[],this.needsUpdateFromParent=!0,this.groups=[],this.Xjc=null,this.Yjc=null,this.methodMap=c.Z.deepCopy(this.methodMap,{move:"moveTo",moveTo:"moveTo",moveAlong:"moveAlong",visit:"visit",glide:"makeGlider",makeGlider:"makeGlider",intersect:"makeIntersection",makeIntersection:"makeIntersection",X:"X",Y:"Y",Coords:"Coords",free:"free",setPosition:"setGliderPosition",setGliderPosition:"setGliderPosition",addConstraint:"addConstraint",dist:"Dist",Dist:"Dist",onPolygon:"onPolygon",startAnimation:"startAnimation",stopAnimation:"stopAnimation"}),c.Z.exists(this.element)&&this.addAnchor(t,e),this.isDraggable=!0},r.Z.extend(r.Z.CoordsElement.prototype,{updateConstraint:function(){return this},updateCoords:function(t){return this.needsUpdate?(c.Z.exists(t)||(t=!1),c.Z.evaluate(this.visProp.frozen)||this.updateConstraint(),this.type===l.Z.OBJECT_TYPE_GLIDER&&(this.isConstrained&&(t=!1),t?this.updateGliderFromParent():this.updateGlider()),this.updateTransform(t),this):this},updateGlider:function(){var t,e,i,r,n,a,d,u,p,f,_,m,g,b,v,Z,C,y,P,E,O=2*Math.PI,x=!1,S=this.slideObject,M=[];if(this.needsUpdateFromParent=!1,S.elementClass===l.Z.OBJECT_CLASS_CIRCLE)c.Z.evaluate(this.visProp.isgeonext)&&(O=1),b=o.Z.projectPointToCircle(this,S,this.board),v=o.Z.rad([S.center.X()+1,S.center.Y()],S.center,this)/O;else if(S.elementClass===l.Z.OBJECT_CLASS_LINE){if(this.onPolygon){if(r=S.point1.coords.usrCoords,e=(n=S.point2.coords.usrCoords)[t=1]-r[t],Math.abs(e)<s.Z.eps&&(e=n[t=2]-r[t]),d=(o.Z.projectPointToLine(this,S,this.board).usrCoords[t]-r[t])/e,a=S.parentPolygon,d<0){for(t=0;t<a.borders.length;t++)if(S===a.borders[t]){S=a.borders[(t-1+a.borders.length)%a.borders.length];break}}else if(d>1)for(t=0;t<a.borders.length;t++)if(S===a.borders[t]){S=a.borders[(t+1+a.borders.length)%a.borders.length];break}S.id!==this.slideObject.id&&(this.slideObject=S)}r=S.point1.coords,n=S.point2.coords,(e=r.distance(l.Z.COORDS_BY_USER,n))<s.Z.eps?(b=r,x=!0,v=0):(b=o.Z.projectPointToLine(this,S,this.board),r=r.usrCoords.slice(0),n=n.usrCoords.slice(0),Math.abs(n[0])<s.Z.eps?(e=n[t=1],Math.abs(e)<s.Z.eps&&(e=n[t=2]),v=((e=(b.usrCoords[t]-r[t])/e)>=0?1:-1)*(e=Math.abs(e))/(e+1)):Math.abs(r[0])<s.Z.eps?(e=r[t=1],Math.abs(e)<s.Z.eps&&(e=r[t=2]),v=(e=(b.usrCoords[t]-n[t])/e)<0?(1-2*e)/(1-e):1/(e+1)):(e=n[t=1]-r[t],Math.abs(e)<s.Z.eps&&(e=n[t=2]-r[t]),v=(b.usrCoords[t]-r[t])/e)),null!==(C=this.findClosestSnapValue(v))?(v=(c.Z.evaluate(this.visProp.snapvalues)[C]-this._smin)/(this._smax-this._smin),this.update(!0)):(Z=c.Z.evaluate(this.visProp.snapwidth),c.Z.evaluate(Z)>0&&Math.abs(this._smax-this._smin)>=s.Z.eps&&(i=(v=Math.max(Math.min(v,1),0))*(this._smax-this._smin)+this._smin,v=((i=Math.round(i/Z)*Z)-this._smin)/(this._smax-this._smin),this.update(!0))),r=S.point1.coords,!c.Z.evaluate(S.visProp.straightfirst)&&Math.abs(r.usrCoords[0])>s.Z.eps&&v<0&&(b=r,x=!0,v=0),n=S.point2.coords,!c.Z.evaluate(S.visProp.straightlast)&&Math.abs(n.usrCoords[0])>s.Z.eps&&v>1&&(b=n,x=!0,v=1)}else if(S.type===l.Z.OBJECT_TYPE_TURTLE)this.updateConstraint(),b=(y=o.Z.projectPointToTurtle(this,S,this.board))[0],v=y[1];else if(S.elementClass===l.Z.OBJECT_CLASS_CURVE)if(S.type===l.Z.OBJECT_TYPE_ARC||S.type===l.Z.OBJECT_TYPE_SECTOR)b=o.Z.projectPointToCircle(this,S,this.board),u=o.Z.rad(S.radiuspoint,S.center,this),p=0,f=o.Z.rad(S.radiuspoint,S.center,S.anglepoint),v=u,("minor"===(Z=c.Z.evaluate(S.visProp.selection))&&f>Math.PI||"major"===Z&&f<Math.PI)&&(p=f,f=2*Math.PI),(u<p||u>f)&&(v=f,(u<p&&u>.5*p||u>f&&u>.5*f+Math.PI)&&(v=p),this.needsUpdateFromParent=!0,this.updateGliderFromParent()),O=f-p,this.visProp.isgeonext&&(O=1),Math.abs(O)>s.Z.eps&&(v/=O);else if(this.updateConstraint(),S.transformations.length>0){for(E=!1,(y=S.getTransformationSource())[0]&&(E=y[0],M.push(S),M.push(y[1]));y[0]&&c.Z.exists(y[1]._transformationSource);)y=y[1].getTransformationSource(),M.push(y[1]);if(P=this.coords.usrCoords,E){for(t=0;t<M.length;t++)M[t].updateTransformMatrix(),g=s.Z.inverse(M[t].transformMat),P=s.Z.matVecMult(g,P);for(_=new h.Z(l.Z.COORDS_BY_USER,P,this.board).usrCoords,P=(m=o.Z.projectCoordsToCurve(_[1],_[2],this.position||0,M[M.length-1],this.board))[0].usrCoords,t=M.length-2;t>=0;t--)P=s.Z.matVecMult(M[t].transformMat,P);m[0]=new h.Z(l.Z.COORDS_BY_USER,P,this.board)}else S.updateTransformMatrix(),g=s.Z.inverse(S.transformMat),P=s.Z.matVecMult(g,P),_=new h.Z(l.Z.COORDS_BY_USER,P,this.board).usrCoords,m=o.Z.projectCoordsToCurve(_[1],_[2],this.position||0,S,this.board);b=m[0],v=m[1]}else b=(y=o.Z.projectPointToCurve(this,S,this.board))[0],v=y[1];else c.Z.isPoint(S)&&(b=o.Z.projectPointToPoint(this,S,this.board),v=this.position);this.coords.setCoordinates(l.Z.COORDS_BY_USER,b.usrCoords,x),this.position=v},findClosestSnapValue:function(t){var e,i,r,o,n=null;if(r=c.Z.evaluate(this.visProp.snapvalues),o=c.Z.evaluate(this.visProp.snapvaluedistance),c.Z.isArray(r)&&Math.abs(this._smax-this._smin)>=s.Z.eps&&o>0)for(e=0;e<r.length;e++)(i=Math.abs(t*(this._smax-this._smin)+this._smin-r[e]))<o&&(o=i,n=e);return n},updateGliderFromParent:function(){var t,e,i,r,n,a,d,u,p,f,_,m,g=this.slideObject,b=[],v=2*Math.PI;if(this.needsUpdateFromParent){if(g.elementClass===l.Z.OBJECT_CLASS_CIRCLE)i=g.Radius(),c.Z.evaluate(this.visProp.isgeonext)&&(v=1),n=[g.center.X()+i*Math.cos(this.position*v),g.center.Y()+i*Math.sin(this.position*v)];else if(g.elementClass===l.Z.OBJECT_CLASS_LINE)t=g.point1.coords.usrCoords,e=g.point2.coords.usrCoords,0===t[0]&&0===t[1]&&0===t[2]||0===e[0]&&0===e[1]&&0===e[2]?n=[0,0,0]:Math.abs(e[0])<s.Z.eps?(r=Math.min(Math.abs(this.position),1-s.Z.eps),r/=1-r,this.position<0&&(r=-r),n=[t[0]+r*e[0],t[1]+r*e[1],t[2]+r*e[2]]):Math.abs(t[0])<s.Z.eps?(r=Math.max(this.position,s.Z.eps),r=(r=Math.min(r,2-s.Z.eps))>1?(r-1)/(r-2):(1-r)/r,n=[e[0]+r*t[0],e[1]+r*t[1],e[2]+r*t[2]]):(r=this.position,n=[t[0]+r*(e[0]-t[0]),t[1]+r*(e[1]-t[1]),t[2]+r*(e[2]-t[2])]);else if(g.type===l.Z.OBJECT_TYPE_TURTLE)this.coords.setCoordinates(l.Z.COORDS_BY_USER,[g.Z(this.position),g.X(this.position),g.Y(this.position)]),this.updateConstraint(),n=o.Z.projectPointToTurtle(this,g,this.board)[0].usrCoords;else if(g.elementClass===l.Z.OBJECT_CLASS_CURVE){for(u=!1,(a=g.getTransformationSource())[0]&&(u=a[0],b.push(g),b.push(a[1]));a[0]&&c.Z.exists(a[1]._transformationSource);)a=a[1].getTransformationSource(),b.push(a[1]);if(u?this.coords.setCoordinates(l.Z.COORDS_BY_USER,[b[b.length-1].Z(this.position),b[b.length-1].X(this.position),b[b.length-1].Y(this.position)]):this.coords.setCoordinates(l.Z.COORDS_BY_USER,[g.Z(this.position),g.X(this.position),g.Y(this.position)]),g.type===l.Z.OBJECT_TYPE_ARC||g.type===l.Z.OBJECT_TYPE_SECTOR)p=o.Z.rad([g.center.X()+1,g.center.Y()],g.center,g.radiuspoint),f=0,m=o.Z.rad(g.radiuspoint,g.center,g.anglepoint),("minor"===g.visProp.selection&&m>Math.PI||"major"===g.visProp.selection&&m<Math.PI)&&(f=m,m=2*Math.PI),v=m-f,c.Z.evaluate(this.visProp.isgeonext)&&(v=1),((_=this.position*v)<f||_>m)&&(((_=m)<f&&_>.5*f||_>m&&_>.5*m+Math.PI)&&(_=f),this.position=_,Math.abs(v)>s.Z.eps&&(this.position/=v)),i=g.Radius(),n=[g.center.X()+i*Math.cos(this.position*v+p),g.center.Y()+i*Math.sin(this.position*v+p)];else if(this.updateConstraint(),u)for(n=o.Z.projectPointToCurve(this,b[b.length-1],this.board)[0].usrCoords,d=b.length-2;d>=0;d--)n=new h.Z(l.Z.COORDS_BY_USER,s.Z.matVecMult(b[d].transformMat,n),this.board).usrCoords;else n=o.Z.projectPointToCurve(this,g,this.board)[0].usrCoords}else c.Z.isPoint(g)&&(n=o.Z.projectPointToPoint(this,g,this.board).usrCoords);this.coords.setCoordinates(l.Z.COORDS_BY_USER,n,!1)}else this.needsUpdateFromParent=!0},updateRendererGeneric:function(t){return this.needsUpdate&&this.board.renderer?(this.visPropCalc.visible&&(this.isReal=!isNaN(this.coords.usrCoords[1]+this.coords.usrCoords[2]),this.isReal=Math.abs(this.coords.usrCoords[0])>s.Z.eps&&this.isReal,this.isReal||this.updateVisibility(!1)),this.visPropCalc.visible&&this.board.renderer[t](this),this.hasLabel&&this.visPropCalc.visible&&this.label&&this.label.visPropCalc.visible&&this.isReal&&(this.label.update(),this.board.renderer.updateText(this.label)),this.setDisplayRendNode(),this.needsUpdate=!1,this):this},X:function(){return this.coords.usrCoords[1]},Y:function(){return this.coords.usrCoords[2]},Z:function(){return this.coords.usrCoords[0]},Coords:function(t){return t?this.coords.usrCoords.slice():this.coords.usrCoords.slice(1)},XEval:function(){return this.coords.usrCoords[1]},YEval:function(){return this.coords.usrCoords[2]},ZEval:function(){return this.coords.usrCoords[0]},Dist:function(t){return this.isReal&&t.isReal?this.coords.distance(l.Z.COORDS_BY_USER,t.coords):NaN},snapToGrid:function(t){return this.handleSnapToGrid(t)},handleSnapToPoints:function(t){var e,i,r,s,n,a,h,d,u=0,p=1/0,f=null,_=c.Z.evaluate(this.visProp.ignoredsnaptopoints),m=!1;if(s=this.board.objectsList.length,_&&(h=_.length),c.Z.evaluate(this.visProp.snaptopoints)||t){for(n=c.Z.evaluate(this.visProp.attractorunit),a=c.Z.evaluate(this.visProp.attractordistance),e=0;e<s;e++){if(i=this.board.objectsList[e],_){for(m=!1,d=0;d<h;d++)if(i===this.board.select(_[d])){m=!0;break}if(m)continue}c.Z.isPoint(i)&&i!==this&&i.visPropCalc.visible&&(r=o.Z.projectPointToPoint(this,i,this.board),(u="screen"===n?r.distance(l.Z.COORDS_BY_SCREEN,this.coords):r.distance(l.Z.COORDS_BY_USER,this.coords))<a&&u<p&&(p=u,f=r))}null!==f&&this.coords.setCoordinates(l.Z.COORDS_BY_USER,f.usrCoords)}return this},snapToPoints:function(t){return this.handleSnapToPoints(t)},handleAttractors:function(){var t,e,i,r,s=0,n=c.Z.evaluate(this.visProp.attractorunit),a=c.Z.evaluate(this.visProp.attractordistance),d=c.Z.evaluate(this.visProp.snatchdistance),u=c.Z.evaluate(this.visProp.attractors),p=u.length;if(0!==a){for(t=0;t<p;t++)if(e=this.board.select(u[t]),c.Z.exists(e)&&e!==this){if(c.Z.isPoint(e)?i=o.Z.projectPointToPoint(this,e,this.board):e.elementClass===l.Z.OBJECT_CLASS_LINE?(r=o.Z.projectCoordsToSegment(this.coords.usrCoords,e.point1.coords.usrCoords,e.point2.coords.usrCoords),i=!c.Z.evaluate(e.visProp.straightfirst)&&r[1]<0?e.point1.coords:!c.Z.evaluate(e.visProp.straightlast)&&r[1]>1?e.point2.coords:new h.Z(l.Z.COORDS_BY_USER,r[0],this.board)):e.elementClass===l.Z.OBJECT_CLASS_CIRCLE?i=o.Z.projectPointToCircle(this,e,this.board):e.elementClass===l.Z.OBJECT_CLASS_CURVE?i=o.Z.projectPointToCurve(this,e,this.board)[0]:e.type===l.Z.OBJECT_TYPE_TURTLE?i=o.Z.projectPointToTurtle(this,e,this.board)[0]:e.type===l.Z.OBJECT_TYPE_POLYGON&&(i=new h.Z(l.Z.COORDS_BY_USER,o.Z.projectCoordsToPolygon(this.coords.usrCoords,e),this.board)),(s="screen"===n?i.distance(l.Z.COORDS_BY_SCREEN,this.coords):i.distance(l.Z.COORDS_BY_USER,this.coords))<a){this.type===l.Z.OBJECT_TYPE_GLIDER&&(e===this.slideObject||this.slideObject&&this.onPolygon&&this.slideObject.parentPolygon===e)||this.makeGlider(e);break}s>=d&&(e===this.slideObject||this.slideObject&&this.onPolygon&&this.slideObject.parentPolygon===e)&&this.popSlideObject()}return this}},setPositionDirectly:function(t,e){var i,r,o,n,d=this.coords;if(this.relativeCoords)return r=new h.Z(t,e,this.board),c.Z.evaluate(this.visProp.islabel)?(o=a.Z.subtract(r.scrCoords,d.scrCoords),this.relativeCoords.scrCoords[1]+=o[1],this.relativeCoords.scrCoords[2]+=o[2]):(o=a.Z.subtract(r.usrCoords,d.usrCoords),this.relativeCoords.usrCoords[1]+=o[1],this.relativeCoords.usrCoords[2]+=o[2]),this;for(this.coords.setCoordinates(t,e),this.handleSnapToGrid(),this.handleSnapToPoints(),this.handleAttractors(),i=this.transformations.length-1;i>=0;i--)t===l.Z.COORDS_BY_SCREEN?n=new h.Z(t,e,this.board).usrCoords:(2===e.length&&(e=[1].concat(e)),n=e),this.initialCoords.setCoordinates(l.Z.COORDS_BY_USER,s.Z.matVecMult(s.Z.inverse(this.transformations[i].matrix),n));return this.prepareUpdate().update(),this.board.isSuspendedUpdate&&this.type===l.Z.OBJECT_TYPE_GLIDER&&this.updateGlider(),this},setPositionByTransform:function(t,e){var i;return e=new h.Z(t,e,this.board),i=this.board.create("transform",e.usrCoords.slice(1),{type:"translate"}),this.transformations.length>0&&this.transformations[this.transformations.length-1].isNumericMatrix?this.transformations[this.transformations.length-1].melt(i):this.addTransform(this,i),this.prepareUpdate().update(),this},setPosition:function(t,e){return this.setPositionDirectly(t,e)},setGliderPosition:function(t){return this.type===l.Z.OBJECT_TYPE_GLIDER&&(this.position=t,this.board.update()),this},makeGlider:function(t){var e,i,s,o=this.board.select(t),n=!1;if(o.type===l.Z.OBJECT_TYPE_POLYGON){for(e=Number.MAX_VALUE,i=0;i<o.borders.length;i++)(s=r.Z.Math.Geometry.distPointLine(this.coords.usrCoords,o.borders[i].stdform))<e&&(e=s,t=o.borders[i]);o=this.board.select(t),n=!0}if(!c.Z.exists(o))throw new Error("JSXGraph: slide object undefined.");if(o.type===l.Z.OBJECT_TYPE_TICKS)throw new Error("JSXGraph: gliders on ticks are not possible.");return this.slideObject=this.board.select(t),this.slideObjects.push(this.slideObject),this.addParents(t),this.type=l.Z.OBJECT_TYPE_GLIDER,this.elType="glider",this.visProp.snapwidth=-1,this.slideObject.addChild(this),this.isDraggable=!0,this.onPolygon=n,this.generatePolynomial=function(){return this.slideObject.generatePolynomial(this)},this.updateGlider(),this.needsUpdateFromParent=!0,this.updateGliderFromParent(),this},popSlideObject:function(){this.slideObjects.length>0&&(this.slideObjects.pop(),this.slideObject.removeChild(this),0===this.slideObjects.length?(this.type=this._org_type,this.type===l.Z.OBJECT_TYPE_POINT?this.elType="point":this.elementClass===l.Z.OBJECT_CLASS_TEXT?this.elType="text":this.type===l.Z.OBJECT_TYPE_IMAGE?this.elType="image":this.type===l.Z.OBJECT_TYPE_FOREIGNOBJECT&&(this.elType="foreignobject"),this.slideObject=null):this.slideObject=this.slideObjects[this.slideObjects.length-1])},free:function(){var t,e;if(this.type!==l.Z.OBJECT_TYPE_GLIDER){if(this.transformations.length=0,delete this.updateConstraint,this.isConstrained=!1,this.isDraggable)return;this.isDraggable=!0,this.elementClass===l.Z.OBJECT_CLASS_POINT&&(this.type=l.Z.OBJECT_TYPE_POINT,this.elType="point"),this.XEval=function(){return this.coords.usrCoords[1]},this.YEval=function(){return this.coords.usrCoords[2]},this.ZEval=function(){return this.coords.usrCoords[0]},this.Xjc=null,this.Yjc=null}for(t in this.board.objects)this.board.objects.hasOwnProperty(t)&&(e=this.board.objects[t]).descendants&&(delete e.descendants[this.id],delete e.childElements[this.id],this.hasLabel&&(delete e.descendants[this.label.id],delete e.childElements[this.label.id]));this.ancestors={},this.parents=[],this.slideObject=null,this.slideObjects=[],this.elementClass===l.Z.OBJECT_CLASS_POINT?(this.type=l.Z.OBJECT_TYPE_POINT,this.elType="point"):this.elementClass===l.Z.OBJECT_CLASS_TEXT?(this.type=this._org_type,this.elType="text"):this.elementClass===l.Z.OBJECT_CLASS_OTHER&&(this.type=this._org_type,this.elType="image")},addConstraint:function(t){var e,i,r=[],s=["X","Y"],o=function(t){return function(){return t}},n=function(t){return function(){return t.Value()}};for(this.elementClass===l.Z.OBJECT_CLASS_POINT&&(this.type=l.Z.OBJECT_TYPE_CAS),this.isDraggable=!1,e=0;e<t.length;e++)i=t[e],c.Z.isString(i)?(r[e]=this.board.jc.snippet(i,!0,null,!0),this.addParentsFromJCFunctions([r[e]]),2===t.length&&(this[s[e]+"jc"]=t[e])):c.Z.isFunction(i)?r[e]=i:c.Z.isNumber(i)?r[e]=o(i):c.Z.isObject(i)&&c.Z.isFunction(i.Value)&&(r[e]=n(i)),r[e].origin=i;return 1===t.length?this.updateConstraint=function(){var t=r[0]();return c.Z.isArray(t)?this.coords.setCoordinates(l.Z.COORDS_BY_USER,t):this.coords=t,this}:2===t.length?(this.XEval=r[0],this.YEval=r[1],this.addParents([r[0].origin,r[1].origin]),this.updateConstraint=function(){return this.coords.setCoordinates(l.Z.COORDS_BY_USER,[this.XEval(),this.YEval()]),this}):(this.ZEval=r[0],this.XEval=r[1],this.YEval=r[2],this.addParents([r[0].origin,r[1].origin,r[2].origin]),this.updateConstraint=function(){return this.coords.setCoordinates(l.Z.COORDS_BY_USER,[this.ZEval(),this.XEval(),this.YEval()]),this}),this.isConstrained=!0,this.prepareUpdate().update(),this.board.isSuspendedUpdate||(this.updateVisibility().updateRenderer(),this.hasLabel&&this.label.fullUpdate()),this},addAnchor:function(t,e){this.relativeCoords=e?new h.Z(l.Z.COORDS_BY_SCREEN,t.slice(0,2),this.board):new h.Z(l.Z.COORDS_BY_USER,t,this.board),this.element.addChild(this),e&&this.addParents(this.element),this.XEval=function(){var t,e,i;return c.Z.evaluate(this.visProp.islabel)?(i=c.Z.evaluate(this.visProp.offset),t=parseFloat(i[0]),e=this.element.getLabelAnchor(),new h.Z(l.Z.COORDS_BY_SCREEN,[t+this.relativeCoords.scrCoords[1]+e.scrCoords[1],0],this.board).usrCoords[1]):(e=this.element.getTextAnchor(),this.relativeCoords.usrCoords[1]+e.usrCoords[1])},this.YEval=function(){var t,e,i;return c.Z.evaluate(this.visProp.islabel)?(i=c.Z.evaluate(this.visProp.offset),t=-parseFloat(i[1]),e=this.element.getLabelAnchor(),new h.Z(l.Z.COORDS_BY_SCREEN,[0,t+this.relativeCoords.scrCoords[2]+e.scrCoords[2]],this.board).usrCoords[2]):(e=this.element.getTextAnchor(),this.relativeCoords.usrCoords[2]+e.usrCoords[2])},this.ZEval=c.Z.createFunction(1,this.board,""),this.updateConstraint=function(){this.coords.setCoordinates(l.Z.COORDS_BY_USER,[this.ZEval(),this.XEval(),this.YEval()])},this.isConstrained=!0,this.updateConstraint()},updateTransform:function(t){var e;if(0===this.transformations.length)return this;for(e=0;e<this.transformations.length;e++)this.transformations[e].update();return this},addTransform:function(t,e){var i,r=c.Z.isArray(e)?e:[e],s=r.length;for(0===this.transformations.length&&(this.baseElement=t),i=0;i<s;i++)this.transformations.push(r[i]);return this},startAnimation:function(t,e,i){var r=c.Z.evaluate(t),s=c.Z.evaluate(e),o=this;return i=c.Z.evaluate(i)||250,this.type!==l.Z.OBJECT_TYPE_GLIDER||c.Z.exists(this.intervalCode)||(this.intervalCode=window.setInterval((function(){o._anim(r,s)}),i),c.Z.exists(this.intervalCount)||(this.intervalCount=0)),this},stopAnimation:function(){return c.Z.exists(this.intervalCode)&&(window.clearInterval(this.intervalCode),delete this.intervalCode),this},moveAlong:function(t,e,i){i=i||{};var r,s,o,a,h,d=[],u=[],p=e/this.board.attr.animationdelay,f=function(e,i){return function(){return t[e][i]}};if(c.Z.isArray(t)){for(o=t.length,r=0;r<o;r++)c.Z.isPoint(t[r])?u[r]=t[r]:u[r]={elementClass:l.Z.OBJECT_CLASS_POINT,X:f(r,0),Y:f(r,1)};if(0===(e=e||0))return this.setPosition(l.Z.COORDS_BY_USER,[u[u.length-1].X(),u[u.length-1].Y()]),this.board.update(this);if(!c.Z.exists(i.interpolate)||i.interpolate)for(s=n.Z.Neville(u),r=0;r<p;r++)d[r]=[],d[r][0]=s[0]((p-r)/p*s[3]()),d[r][1]=s[1]((p-r)/p*s[3]());else{for(o=t.length-1,r=0;r<p;++r)h=r/p*o-(a=Math.floor(r/p*o)),d[r]=[],d[r][0]=(1-h)*u[a].X()+h*u[a+1].X(),d[r][1]=(1-h)*u[a].Y()+h*u[a+1].Y();d.push([u[o].X(),u[o].Y()]),d.reverse()}this.animationPath=d}else c.Z.isFunction(t)&&(this.animationPath=t,this.animationStart=(new Date).getTime());return this.animationCallback=i.callback,this.board.addAnimation(this),this},moveTo:function(t,e,i){i=i||{},t=new h.Z(l.Z.COORDS_BY_USER,t,this.board);var r,o=this.board.attr.animationdelay,n=Math.ceil(e/o),a=[],d=this.coords.usrCoords[1],u=this.coords.usrCoords[2],p=t.usrCoords[1]-d,f=t.usrCoords[2]-u,_=function(t){return i.effect&&"<>"===i.effect?Math.pow(Math.sin(t/n*Math.PI/2),2):t/n};if(!c.Z.exists(e)||0===e||Math.abs(t.usrCoords[0]-this.coords.usrCoords[0])>s.Z.eps)return this.setPosition(l.Z.COORDS_BY_USER,t.usrCoords),this.board.update(this);if(!c.Z.exists(i.callback)&&Math.abs(p)<s.Z.eps&&Math.abs(f)<s.Z.eps)return this;for(r=n;r>=0;r--)a[n-r]=[t.usrCoords[0],d+p*_(r),u+f*_(r)];return this.animationPath=a,this.animationCallback=i.callback,this.board.addAnimation(this),this},visit:function(t,e,i){t=new h.Z(l.Z.COORDS_BY_USER,t,this.board);var r,s,o,n=this.board.attr.animationdelay,a=[],d=this.coords.usrCoords[1],u=this.coords.usrCoords[2],p=t.usrCoords[1]-d,f=t.usrCoords[2]-u,_=function(t){var e=t<o/2?2*t/o:2*(o-t)/o;return i.effect&&"<>"===i.effect?Math.pow(Math.sin(e*Math.PI/2),2):e};for(c.Z.isNumber(i)?i={repeat:i}:(i=i||{},c.Z.exists(i.repeat)||(i.repeat=1)),o=Math.ceil(e/(n*i.repeat)),s=0;s<i.repeat;s++)for(r=o;r>=0;r--)a[s*(o+1)+o-r]=[t.usrCoords[0],d+p*_(r),u+f*_(r)];return this.animationPath=a,this.animationCallback=i.callback,this.board.addAnimation(this),this},_anim:function(t,e){var i,r,s,n,a,h,c,d,u;return this.intervalCount+=1,this.intervalCount>e&&(this.intervalCount=0),this.slideObject.elementClass===l.Z.OBJECT_CLASS_LINE?(c=this.slideObject.point1.coords.scrCoords,d=this.slideObject.point2.coords.scrCoords,i=Math.round((d[1]-c[1])*this.intervalCount/e),r=Math.round((d[2]-c[2])*this.intervalCount/e),t>0?n=this.slideObject.point1:(n=this.slideObject.point2,i*=-1,r*=-1),this.coords.setCoordinates(l.Z.COORDS_BY_SCREEN,[n.coords.scrCoords[1]+i,n.coords.scrCoords[2]+r])):this.slideObject.elementClass===l.Z.OBJECT_CLASS_CURVE?(a=t>0?Math.round(this.intervalCount/e*this.board.canvasWidth):Math.round((e-this.intervalCount)/e*this.board.canvasWidth),this.coords.setCoordinates(l.Z.COORDS_BY_SCREEN,[a,0]),u=o.Z.projectPointToCurve(this,this.slideObject,this.board),this.coords=u[0],this.position=u[1]):this.slideObject.elementClass===l.Z.OBJECT_CLASS_CIRCLE&&(s=2*Math.PI,s*=t<0?this.intervalCount/e:(e-this.intervalCount)/e,h=this.slideObject.Radius(),this.coords.setCoordinates(l.Z.COORDS_BY_USER,[this.slideObject.center.coords.usrCoords[1]+h*Math.cos(s),this.slideObject.center.coords.usrCoords[2]+h*Math.sin(s)])),this.board.update(this),this},getTextAnchor:function(){return this.coords},getLabelAnchor:function(){return this.coords},getParents:function(){var t=[this.Z(),this.X(),this.Y()];return 0!==this.parents.length&&(t=this.parents),this.type===l.Z.OBJECT_TYPE_GLIDER&&(t=[this.X(),this.Y(),this.slideObject.id]),t}}),r.Z.CoordsElement.create=function(t,e,i,r,s,o){var n,a,h=!1;for(a=0;a<i.length;a++)(c.Z.isFunction(i[a])||c.Z.isString(i[a]))&&(h=!0);if(h)(n=new t(e,[0,0],r,s,o)).addConstraint(i);else if(c.Z.isNumber(i[0])&&c.Z.isNumber(i[1]))n=new t(e,i,r,s,o),c.Z.exists(r.slideobject)?n.makeGlider(r.slideobject):n.baseElement=n,n.isDraggable=!0;else{if(!c.Z.isObject(i[0])||!c.Z.isTransformationOrArray(i[1]))return!1;(n=new t(e,[0,0],r,s,o)).addTransform(i[0],i[1]),n.isDraggable=!1}return n.handleSnapToGrid(),n.handleSnapToPoints(),n.handleAttractors(),n.addParents(i),n},e.Z=r.Z.CoordsElement},958:function(t,e,i){var r=i(765),s=i(351),o=i(705),n=i(275),a=i(309),h=i(766),l=i(88),c=i(327),d=i(109);r.Z.GeometryElement=function(t,e,i,r){var o,n,a;if(this.needsUpdate=!0,this.isDraggable=!1,this.isReal=!0,this.childElements={},this.hasLabel=!1,this.highlighted=!1,this.notExistingParents={},this.traces={},this.numTraces=0,this.transformations=[],this.baseElement=null,this.descendants={},this.ancestors={},this.parents=[],this.symbolic={},this.rendNode=null,this.elType="",this.dump=!0,this.subs={},this.inherits=[],this._pos=-1,this.stdform=[1,0,0,0,1,1,0,0],this.methodMap={setLabel:"setLabel",label:"label",setName:"setName",getName:"getName",Name:"getName",addTransform:"addTransform",setProperty:"setAttribute",setAttribute:"setAttribute",addChild:"addChild",animate:"animate",on:"on",off:"off",trigger:"trigger",addTicks:"addTicks",removeTicks:"removeTicks",removeAllTicks:"removeAllTicks",Bounds:"bounds"},this.quadraticform=[[1,0,0],[0,1,0],[0,0,1]],this.visProp={},this.visPropCalc={visible:!1},l.Z.eventify(this),this.mouseover=!1,this.lastDragTime=new Date,arguments.length>0){for(n in this.board=t,this.type=i,this._org_type=i,this.elementClass=r||s.Z.OBJECT_CLASS_OTHER,this.id=e.id,o=e.name,d.Z.exists(o)||(o=this.board.generateName(this)),""!==o&&(this.board.elementsByName[o]=this),this.name=o,this.needsRegularUpdate=e.needsregularupdate,d.Z.clearVisPropOld(this),a=this.resolveShortcuts(e))a.hasOwnProperty(n)&&this._set(n,a[n]);this.visProp.draft=a.draft&&a.draft.draft}},r.Z.extend(r.Z.GeometryElement.prototype,{addChild:function(t){var e,i;for(e in this.childElements[t.id]=t,this.addDescendants(t),t.ancestors[this.id]=this,this.descendants)if(this.descendants.hasOwnProperty(e))for(i in this.descendants[e].ancestors[this.id]=this,this.ancestors)this.ancestors.hasOwnProperty(i)&&(this.descendants[e].ancestors[this.ancestors[i].id]=this.ancestors[i]);for(e in this.ancestors)if(this.ancestors.hasOwnProperty(e))for(i in this.descendants)this.descendants.hasOwnProperty(i)&&(this.ancestors[e].descendants[this.descendants[i].id]=this.descendants[i]);return this},addDescendants:function(t){var e;for(e in this.descendants[t.id]=t,t.childElements)t.childElements.hasOwnProperty(e)&&this.addDescendants(t.childElements[e]);return this},addParents:function(t){var e,i,r;for(i=(r=d.Z.isArray(t)?t:arguments).length,e=0;e<i;++e)d.Z.exists(r[e])&&(d.Z.isId(this.board,r[e])?this.parents.push(r[e]):d.Z.exists(r[e].id)&&this.parents.push(r[e].id));this.parents=d.Z.uniqueArray(this.parents)},setParents:function(t){this.parents=[],this.addParents(t)},addParentsFromJCFunctions:function(t){var e,i,r;for(e=0;e<t.length;e++)for(i in t[e].deps)r=t[e].deps[i],this.addParents(r),r.addChild(this);return this},removeChild:function(t){return delete this.childElements[t.id],this.removeDescendants(t),delete t.ancestors[this.id],this},removeDescendants:function(t){var e;for(e in delete this.descendants[t.id],t.childElements)t.childElements.hasOwnProperty(e)&&this.removeDescendants(t.childElements[e]);return this},countChildren:function(){var t,e,i=0;for(t in e=this.childElements)e.hasOwnProperty(t)&&t.indexOf("Label")<0&&i++;return i},getName:function(){return this.name},addTransform:function(t){return this},draggable:function(){return this.isDraggable&&!d.Z.evaluate(this.visProp.fixed)&&this.type!==s.Z.OBJECT_TYPE_GLIDER},setPosition:function(t,e){var i,r,o,n,a=[];if(!d.Z.exists(this.parents))return this;for(o=this.parents.length,r=0;r<o;++r)if(i=this.board.select(this.parents[r]),d.Z.isPoint(i)){if(!i.draggable())return this;a.push(i)}for(3===e.length&&(e=e.slice(1)),n=this.board.create("transform",e,{type:"translate"}),(o=a.length)>0?n.applyOnce(a):this.transformations.length>0&&this.transformations[this.transformations.length-1].isNumericMatrix?this.transformations[this.transformations.length-1].melt(n):this.addTransform(n),r=0;r<o;++r)a[r].type===s.Z.OBJECT_TYPE_GLIDER&&a[r].updateGlider();return this},setPositionDirectly:function(t,e,i){var r=new o.Z(t,e,this.board,!1),n=new o.Z(t,i,this.board,!1),h=a.Z.subtract(r.usrCoords,n.usrCoords);return this.setPosition(s.Z.COORDS_BY_USER,h),this},generatePolynomial:function(){return[]},animate:function(t,e,i){i=i||{};var r,s,o,n=this.board.attr.animationdelay,a=Math.ceil(e/n),h=this,l=function(t,e,i){var r,s,n,l,d;for(r=c.Z.rgb2hsv(t),n=((s=c.Z.rgb2hsv(e))[0]-r[0])/a,l=(s[1]-r[1])/a,d=(s[2]-r[2])/a,h.animationData[i]=[],o=0;o<a;o++)h.animationData[i][a-o-1]=c.Z.hsv2rgb(r[0]+(o+1)*n,r[1]+(o+1)*l,r[2]+(o+1)*d)},u=function(t,e,i,r){var s,n;if(t=parseFloat(t),e=parseFloat(e),!isNaN(t)&&!isNaN(e))for(n=(e-t)/a,h.animationData[i]=[],o=0;o<a;o++)s=t+(o+1)*n,h.animationData[i][a-o-1]=r?Math.floor(s):s};for(r in this.animationData={},t)if(t.hasOwnProperty(r))switch(s=r.toLowerCase()){case"strokecolor":case"fillcolor":l(this.visProp[s],t[r],s);break;case"size":if(!d.Z.isPoint(this))break;u(this.visProp[s],t[r],s,!0);break;case"strokeopacity":case"strokewidth":case"fillopacity":u(this.visProp[s],t[r],s,!1)}return this.animationCallback=i.callback,this.board.addAnimation(this),this},update:function(){return d.Z.evaluate(this.visProp.trace)&&this.cloneToBackground(),this},updateRenderer:function(){return this},fullUpdate:function(t){return this.prepareUpdate().update().updateVisibility(t).updateRenderer()},setDisplayRendNode:function(t){var e,i,r,s,o;if(void 0===t&&(t=this.visPropCalc.visible),t===this.visPropOld.visible)return this;for(this.board.renderer.display(this,t),i=this.inherits.length,r=0;r<i;r++)if(o=this.inherits[r],d.Z.isArray(o))for(s=o.length,e=0;e<s;e++)d.Z.exists(o[e])&&d.Z.exists(o[e].rendNode)&&"inherit"===d.Z.evaluate(o[e].visProp.visible)&&o[e].setDisplayRendNode(t);else d.Z.exists(o)&&d.Z.exists(o.rendNode)&&"inherit"===d.Z.evaluate(o.visProp.visible)&&o.setDisplayRendNode(t);return this.hasLabel&&d.Z.exists(this.label)&&d.Z.exists(this.label.rendNode)&&"inherit"===d.Z.evaluate(this.label.visProp.visible)&&this.label.setDisplayRendNode(t),this},hide:function(){return this.setAttribute({visible:!1}),this},hideElement:function(){return this.hide(),this},show:function(){return this.setAttribute({visible:!0}),this},showElement:function(){return this.show(),this},updateVisibility:function(t){var e,i,r,s,o,n;if(this.needsUpdate){for(void 0!==t?this.visPropCalc.visible=t:(n=d.Z.evaluate(this.visProp.visible),d.Z.exists(this.hiddenByParent)&&this.hiddenByParent&&(n=!1),"inherit"!==n&&(this.visPropCalc.visible=n)),i=this.inherits.length,r=0;r<i;r++)if(o=this.inherits[r],d.Z.isArray(o))for(s=o.length,e=0;e<s;e++)d.Z.exists(o[e])&&"inherit"===d.Z.evaluate(o[e].visProp.visible)&&o[e].prepareUpdate().updateVisibility(this.visPropCalc.visible);else d.Z.exists(o)&&"inherit"===d.Z.evaluate(o.visProp.visible)&&o.prepareUpdate().updateVisibility(this.visPropCalc.visible);d.Z.exists(this.label)&&d.Z.exists(this.label.visProp)&&d.Z.evaluate(this.label.visProp.visible)&&this.label.prepareUpdate().updateVisibility(this.visPropCalc.visible)}return this},_set:function(t,e){var i;if(t=t.toLocaleLowerCase(),this.visProp.hasOwnProperty(t)&&t.indexOf("color")>=0&&d.Z.isString(e)&&9===e.length&&"#"===e.charAt(0))e=c.Z.rgba2rgbo(e),this.visProp[t]=e[0],this.visProp[t.replace("color","opacity")]=e[1];else if(null===e||!d.Z.isObject(e)||d.Z.exists(e.id)||d.Z.exists(e.name))this.visProp[t]=e;else for(i in this.visProp[t]={},e)e.hasOwnProperty(i)&&(this.visProp[t][i.toLocaleLowerCase()]=e[i])},resolveShortcuts:function(t){var e,i,r,s=["traceattributes","traceAttributes"];for(e in h.Z.shortcuts)if(h.Z.shortcuts.hasOwnProperty(e)){if(d.Z.exists(t[e]))for(i=0;i<h.Z.shortcuts[e].length;i++)d.Z.exists(t[h.Z.shortcuts[e][i]])||(t[h.Z.shortcuts[e][i]]=t[e]);for(r=0;r<s.length;r++)d.Z.isObject(t[s[r]])&&(t[s[r]]=this.resolveShortcuts(t[s[r]]))}return t},setLabel:function(t){this.hasLabel||this.setAttribute({withlabel:!0}),this.setLabelText(t)},setLabelText:function(t){return d.Z.exists(this.label)&&(t=t.replace(/</g,"<").replace(/>/g,">"),this.label.setText(t)),this},setName:function(t){t=t.replace(/</g,"<").replace(/>/g,">"),"slider"!==this.elType&&this.setLabelText(t),this.setAttribute({name:t})},setProperty:function(){r.Z.deprecated("setProperty()","setAttribute()"),this.setAttribute.apply(this,arguments)},setAttribute:function(t){var e,i,o,n,a,h,l,u,p,f={};for(e=0;e<arguments.length;e++)h=arguments[e],d.Z.isString(h)?(u=h.split(":"),f[d.Z.trim(u[0])]=d.Z.trim(u[1])):d.Z.isArray(h)?f[h[0]]=h[1]:r.Z.extend(f,h);for(e in f=this.resolveShortcuts(f))if(f.hasOwnProperty(e)){if(n=e.replace(/\s+/g,"").toLowerCase(),a=f[e],d.Z.isObject(a)&&d.Z.exists(this.visProp[n])){if(this.visProp[n]=d.Z.merge(this.visProp[n],a),this.type===s.Z.OBJECT_TYPE_TICKS&&d.Z.exists(this.labels))for(o=this.labels.length,i=0;i<o;i++)this.labels[i].setAttribute(a);else if(d.Z.exists(this[n]))if(d.Z.isArray(this[n]))for(i=0;i<this[n].length;i++)this[n][i].setAttribute(a);else this[n].setAttribute(a);continue}switch(p=this.visProp[n],n){case"checked":d.Z.exists(this.rendNodeTag)&&(this.rendNodeCheckbox.checked=!!a);break;case"disabled":d.Z.exists(this.rendNodeTag)&&(this.rendNodeTag.disabled=!!a);break;case"face":d.Z.isPoint(this)&&(this.visProp.face=a,this.board.renderer.changePointStyle(this));break;case"generatelabelvalue":this.type===s.Z.OBJECT_TYPE_TICKS&&d.Z.isFunction(a)&&(this.generateLabelValue=a);break;case"gradient":this.visProp.gradient=a,this.board.renderer.setGradient(this);break;case"gradientsecondcolor":a=c.Z.rgba2rgbo(a),this.visProp.gradientsecondcolor=a[0],this.visProp.gradientsecondopacity=a[1],this.board.renderer.updateGradient(this);break;case"gradientsecondopacity":this.visProp.gradientsecondopacity=a,this.board.renderer.updateGradient(this);break;case"infoboxtext":d.Z.isString(a)?this.infoboxText=a:this.infoboxText=!1;break;case"labelcolor":l=(a=c.Z.rgba2rgbo(a))[1],a=a[0],0===l&&d.Z.exists(this.label)&&this.hasLabel&&this.label.hideElement(),d.Z.exists(this.label)&&this.hasLabel&&(this.label.visProp.strokecolor=a,this.board.renderer.setObjectStrokeColor(this.label,a,l)),this.elementClass===s.Z.OBJECT_CLASS_TEXT&&(this.visProp.strokecolor=a,this.visProp.strokeopacity=l,this.board.renderer.setObjectStrokeColor(this,a,l));break;case"layer":this.board.renderer.setLayer(this,d.Z.evaluate(a)),this._set(n,a);break;case"maxlength":d.Z.exists(this.rendNodeTag)&&(this.rendNodeTag.maxlength=!!a);break;case"name":p=this.name,delete this.board.elementsByName[this.name],this.name=a,this.board.elementsByName[this.name]=this;break;case"needsregularupdate":this.needsRegularUpdate=!("false"===a||!1===a),this.board.renderer.setBuffering(this,this.needsRegularUpdate?"auto":"static");break;case"onpolygon":this.type===s.Z.OBJECT_TYPE_GLIDER&&(this.onPolygon=!!a);break;case"radius":this.type!==s.Z.OBJECT_TYPE_ANGLE&&this.type!==s.Z.OBJECT_TYPE_SECTOR||this.setRadius(a);break;case"rotate":(this.elementClass===s.Z.OBJECT_CLASS_TEXT&&"internal"===d.Z.evaluate(this.visProp.display)||this.type===s.Z.OBJECT_TYPE_IMAGE)&&this.addRotation(a);break;case"tabindex":d.Z.exists(this.rendNode)&&(this.rendNode.setAttribute("tabindex",a),this._set(n,a));break;case"trace":"false"===a||!1===a?(this.clearTrace(),this.visProp.trace=!1):this.visProp.trace="pause"!==a;break;case"visible":this.visProp.visible="false"!==a&&("true"===a||a),this.setDisplayRendNode(d.Z.evaluate(this.visProp.visible)),d.Z.evaluate(this.visProp.visible)&&d.Z.exists(this.updateSize)&&this.updateSize();break;case"withlabel":this.visProp.withlabel=a,d.Z.evaluate(a)?(this.label||this.createLabel(),this.label.setAttribute({visible:"inherit"})):this.label&&this.hasLabel&&this.label.setAttribute({visible:!1}),this.hasLabel=a;break;case"straightfirst":case"straightlast":for(i in this._set(n,a),this.childElements)this.childElements.hasOwnProperty(i)&&"glider"===this.childElements[i].elType&&this.childElements[i].fullUpdate();break;default:d.Z.exists(this.visProp[n])&&(!r.Z.Validator[n]||r.Z.Validator[n]&&r.Z.Validator[n](a)||r.Z.Validator[n]&&d.Z.isFunction(a)&&r.Z.Validator[n](a()))&&(a=(!a.toLowerCase||"false"!==a.toLowerCase())&&a,this._set(n,a))}this.triggerEventHandlers(["attribute:"+n],[p,a,this])}return this.triggerEventHandlers(["attribute"],[f,this]),d.Z.evaluate(this.visProp.needsregularupdate)?this.board.update(this):this.board.fullUpdate(),this.elementClass===s.Z.OBJECT_CLASS_TEXT&&this.updateSize(),this},getProperty:function(){r.Z.deprecated("getProperty()","getAttribute()"),this.getProperty.apply(this,arguments)},getAttribute:function(t){var e;switch(t=t.toLowerCase()){case"needsregularupdate":e=this.needsRegularUpdate;break;case"labelcolor":e=this.label.visProp.strokecolor;break;case"infoboxtext":e=this.infoboxText;break;case"withlabel":e=this.hasLabel;break;default:e=this.visProp[t]}return e},setDash:function(t){return this.setAttribute({dash:t}),this},prepareUpdate:function(){return this.needsUpdate=!0,this},remove:function(){return this.board.renderer.remove(this.rendNode),this.hasLabel&&this.board.renderer.remove(this.board.renderer.getElementById(this.label.id)),this},getTextAnchor:function(){return new o.Z(s.Z.COORDS_BY_USER,[0,0],this.board)},getLabelAnchor:function(){return new o.Z(s.Z.COORDS_BY_USER,[0,0],this.board)},setArrow:function(t,e){return this.visProp.firstarrow=t,this.visProp.lastarrow=e,e&&(this.type=s.Z.OBJECT_TYPE_VECTOR,this.elType="arrow"),this.prepareUpdate().update().updateVisibility().updateRenderer(),this},createGradient:function(){var t=d.Z.evaluate(this.visProp.gradient);"linear"!==t&&"radial"!==t||this.board.renderer.setGradient(this)},createLabel:function(){var t,e=this;return r.Z.elements.text?((t=d.Z.deepCopy(this.visProp.label,null)).id=this.id+"Label",t.isLabel=!0,t.anchor=this,t.priv=this.visProp.priv,this.visProp.withlabel&&(this.label=r.Z.elements.text(this.board,[0,0,function(){return d.Z.isFunction(e.name)?e.name():e.name}],t),this.label.needsUpdate=!0,this.label.dump=!1,this.label.fullUpdate(),this.hasLabel=!0)):r.Z.debug("JSXGraph: Can't create label: text element is not available. Make sure you include base/text"),this},highlight:function(t){return t=d.Z.def(t,!1),!d.Z.evaluate(this.visProp.highlight)||this.highlighted&&!t||(this.highlighted=!0,this.board.highlightedObjects[this.id]=this,this.board.renderer.highlight(this)),this},noHighlight:function(){return this.highlighted&&(this.highlighted=!1,delete this.board.highlightedObjects[this.id],this.board.renderer.noHighlight(this)),this},clearTrace:function(){var t;for(t in this.traces)this.traces.hasOwnProperty(t)&&this.board.renderer.remove(this.traces[t]);return this.numTraces=0,this},cloneToBackground:function(){return this},bounds:function(){return[0,0,0,0]},normalize:function(){return this.stdform=n.Z.normalize(this.stdform),this},toJSON:function(){var t,e,i=['{"name":',this.name];for(e in i.push(', "id":'+this.id),t=[],this.visProp)this.visProp.hasOwnProperty(e)&&d.Z.exists(this.visProp[e])&&t.push('"'+e+'":'+this.visProp[e]);return i.push(', "visProp":{'+t.toString()+"}"),i.push("}"),i.join("")},addRotation:function(t){var e,i,r,o,n,a=this;return this.elementClass!==s.Z.OBJECT_CLASS_TEXT&&this.type!==s.Z.OBJECT_TYPE_IMAGE||0===t||(e=this.board.create("transform",[function(){return-a.X()},function(){return-a.Y()}],{type:"translate"}),i=this.board.create("transform",[function(){return a.X()},function(){return a.Y()}],{type:"translate"}),r=this.board.create("transform",[function(){return a.board.unitX/a.board.unitY},function(){return 1}],{type:"scale"}),o=this.board.create("transform",[function(){return a.board.unitY/a.board.unitX},function(){return 1}],{type:"scale"}),n=this.board.create("transform",[function(){return d.Z.evaluate(t)*Math.PI/180}],{type:"rotate"}),e.bindTo(this),r.bindTo(this),n.bindTo(this),o.bindTo(this),i.bindTo(this)),this},highlightStrokeColor:function(t){return r.Z.deprecated("highlightStrokeColor()","setAttribute()"),this.setAttribute({highlightStrokeColor:t}),this},strokeColor:function(t){return r.Z.deprecated("strokeColor()","setAttribute()"),this.setAttribute({strokeColor:t}),this},strokeWidth:function(t){return r.Z.deprecated("strokeWidth()","setAttribute()"),this.setAttribute({strokeWidth:t}),this},fillColor:function(t){return r.Z.deprecated("fillColor()","setAttribute()"),this.setAttribute({fillColor:t}),this},highlightFillColor:function(t){return r.Z.deprecated("highlightFillColor()","setAttribute()"),this.setAttribute({highlightFillColor:t}),this},labelColor:function(t){return r.Z.deprecated("labelColor()","setAttribute()"),this.setAttribute({labelColor:t}),this},dash:function(t){return r.Z.deprecated("dash()","setAttribute()"),this.setAttribute({dash:t}),this},visible:function(t){return r.Z.deprecated("visible()","setAttribute()"),this.setAttribute({visible:t}),this},shadow:function(t){return r.Z.deprecated("shadow()","setAttribute()"),this.setAttribute({shadow:t}),this},getType:function(){return this.elType},getParents:function(){return d.Z.isArray(this.parents)?this.parents:[]},snapToGrid:function(){return this},snapToPoints:function(){return this},getAttributes:function(){var t,e=d.Z.deepCopy(this.visProp),i=[],r=i.length;for(e.id=this.id,e.name=this.name,t=0;t<r;t++)delete e[i[t]];return e},hasPoint:function(t,e){return!1},addTicks:function(t){return""!==t.id&&d.Z.exists(t.id)||(t.id=this.id+"_ticks_"+(this.ticks.length+1)),this.board.renderer.drawTicks(t),this.ticks.push(t),t.id},removeAllTicks:function(){var t;if(d.Z.exists(this.ticks)){for(t=this.ticks.length-1;t>=0;t--)this.removeTicks(this.ticks[t]);this.ticks=[],this.board.update()}},removeTicks:function(t){var e,i;if(d.Z.exists(this.defaultTicks)&&this.defaultTicks===t&&(this.defaultTicks=null),d.Z.exists(this.ticks))for(e=this.ticks.length-1;e>=0;e--)if(this.ticks[e]===t){if(this.board.removeObject(this.ticks[e]),this.ticks[e].ticks)for(i=0;i<this.ticks[e].ticks.length;i++)d.Z.exists(this.ticks[e].labels[i])&&this.board.removeObject(this.ticks[e].labels[i]);delete this.ticks[e];break}},getSnapSizes:function(){var t,e,i;return t=d.Z.evaluate(this.visProp.snapsizex),e=d.Z.evaluate(this.visProp.snapsizey),t<=0&&this.board.defaultAxes&&this.board.defaultAxes.x.defaultTicks&&(t=(i=this.board.defaultAxes.x.defaultTicks).ticksDelta*(d.Z.evaluate(i.visProp.minorticks)+1)),e<=0&&this.board.defaultAxes&&this.board.defaultAxes.y.defaultTicks&&(e=(i=this.board.defaultAxes.y.defaultTicks).ticksDelta*(d.Z.evaluate(i.visProp.minorticks)+1)),[t,e]},handleSnapToGrid:function(t,e){var i,o,n,a,h,l,c,u,p,f,_,m=d.Z.evaluate(this.visProp.attracttogrid),g=d.Z.evaluate(this.visProp.attractorunit),b=d.Z.evaluate(this.visProp.attractordistance);return!d.Z.exists(this.coords)||d.Z.evaluate(this.visProp.fixed)||(d.Z.evaluate(this.visProp.snaptogrid)||m||!0===t)&&(i=this.coords.usrCoords[1],o=this.coords.usrCoords[2],f=(p=this.getSnapSizes())[0],_=p[1],f>0&&_>0&&(u=this.board.getBoundingBox(),n=Math.round(i/f)*f,a=Math.round(o/_)*_,h=new r.Z.Coords(s.Z.COORDS_BY_USER,[n,a],this.board),(!m||h.distance("screen"===g?s.Z.COORDS_BY_SCREEN:s.Z.COORDS_BY_USER,this.coords)<b)&&(i=n,o=a,e||(l=Math.min(u[0],u[2]),c=Math.max(u[0],u[2]),i<l&&i>l-f?i+=f:i>c&&i<c+f&&(i-=f),l=Math.min(u[1],u[3]),c=Math.max(u[1],u[3]),o<l&&o>l-_?o+=_:o>c&&o<c+_&&(o-=_)),this.coords.setCoordinates(s.Z.COORDS_BY_USER,[i,o])))),this},getBoundingBox:function(){var t,e,i,r,o,n=[1/0,1/0,-1/0,-1/0];if(this.type===s.Z.OBJECT_TYPE_POLYGON){if((e=this.vertices.length-1)<=0)return n;for(t=0;t<e;t++)i=this.vertices[t].X(),n[0]=i<n[0]?i:n[0],n[2]=i>n[2]?i:n[2],i=this.vertices[t].Y(),n[1]=i<n[1]?i:n[1],n[3]=i>n[3]?i:n[3]}else if(this.elementClass===s.Z.OBJECT_CLASS_CIRCLE)r=this.center.X(),o=this.center.Y(),n=[r-this.radius,o+this.radius,r+this.radius,o-this.radius];else if(this.elementClass===s.Z.OBJECT_CLASS_CURVE){if(0===(e=this.vertices.length))return n;for(t=0;t<e;t++)i=this.points[t].coords.usrCoords[1],n[0]=i<n[0]?i:n[0],n[2]=i>n[2]?i:n[2],i=this.points[t].coords.usrCoords[1],n[1]=i<n[1]?i:n[1],n[3]=i>n[3]?i:n[3]}return n},addEvent:r.Z.shortcut(r.Z.GeometryElement.prototype,"on"),removeEvent:r.Z.shortcut(r.Z.GeometryElement.prototype,"off"),formatNumberLocale:function(t,e){var i,r,s,o={},n={maximumfractiondigits:"maximumFractionDigits",minimumfractiondigits:"minimumFractionDigits",compactdisplay:"compactDisplay",currencydisplay:"currencyDisplay",currencysign:"currencySign",localematcher:"localeMatcher",numberingsystem:"numberingSystem",signdisplay:"signDisplay",unitdisplay:"unitDisplay",usegrouping:"useGrouping",roundingmode:"roundingMode",roundingpriority:"roundingPriority",roundingincrement:"roundingIncrement",trailingzerodisplay:"trailingZeroDisplay",minimumintegerdigits:"minimumIntegerDigits",minimumsignificantdigits:"minimumSignificantDigits",maximumsignificantdigits:"maximumSignificantDigits"};if(d.Z.exists(Intl)&&this.useLocale()){for(s in i=d.Z.evaluate(this.visProp.intl.locale)||d.Z.evaluate(this.board.attr.intl.locale),r=d.Z.evaluate(this.visProp.intl.options)||{})r.hasOwnProperty(s)&&(n.hasOwnProperty(s)?o[n[s]]=d.Z.evaluate(r[s]):o[s]=d.Z.evaluate(r[s]));return s="maximumfractiondigits",d.Z.exists(r[s])||(o[n[s]]=e),Intl.NumberFormat(i,o).format(t)}return t},useLocale:function(){var t;return!(!d.Z.exists(this.visProp.intl)||!d.Z.exists(this.visProp.intl.enabled))&&(!0===(t=d.Z.evaluate(this.visProp.intl.enabled))||"inherit"===t&&!0===d.Z.evaluate(this.board.attr.intl.enabled))},__evt__over:function(t){},__evt__mouseover:function(t){},__evt__out:function(t){},__evt__mouseout:function(t){},__evt__move:function(t){},__evt__mousemove:function(t){},__evt__drag:function(t){},__evt__mousedrag:function(t){},__evt__pendrag:function(t){},__evt__touchdrag:function(t){},__evt__keydrag:function(t){},__evt__down:function(t){},__evt__mousedown:function(t){},__evt__pendown:function(t){},__evt__touchdown:function(t){},__evt__click:function(t){},__evt__dblclick:function(t){},__evt__mouseclick:function(t){},__evt__mousedblclick:function(t){},__evt__pointerclick:function(t){},__evt__pointerdblclick:function(t){},__evt__up:function(t){},__evt__mouseup:function(t){},__evt__penup:function(t){},__evt__touchup:function(t){},__evt__attribute:function(t,e){},__evt__attribute_:function(t,e,i){},__evt:function(){}}),e.Z=r.Z.GeometryElement},573:function(t,e,i){var r=i(765),s=i(351),o=i(958),n=i(632),a=i(503),h=i(109),l=i(275),c=i(218),d=function(){this._val=parseFloat(this.rendNodeRange.value),this.rendNodeOut.value=this.rendNodeRange.value,this.board.update()};r.Z.Text=function(t,e,i,r){var o;this.constructor(t,i,s.Z.OBJECT_TYPE_TEXT,s.Z.OBJECT_CLASS_TEXT),this.element=this.board.select(i.anchor),this.coordsConstructor(e,h.Z.evaluate(this.visProp.islabel)),this.content="",this.plaintext="",this.plaintextOld=null,this.orgText="",this.needsSizeUpdate=!1,this.hiddenByParent=!1,this.size=[1,1],this.id=this.board.setId(this,"T"),this.board.renderer.drawText(this),this.board.finalizeAdding(this),o=this.visProp.visible,this.visProp.visible=!0,this.setText(r),this.visProp.visible=o,h.Z.isString(this.content)&&this.notifyParents(this.content),this.elType="text",this.methodMap=h.Z.deepCopy(this.methodMap,{setText:"setTextJessieCode",move:"setCoords",Size:"getSize",setAutoPosition:"setAutoPosition"})},r.Z.Text.prototype=new o.Z,h.Z.copyPrototypeMethods(r.Z.Text,c.Z,"coordsConstructor"),r.Z.extend(r.Z.Text.prototype,{hasPoint:function(t,e){var i,r,s,o,n,a,c,d;return h.Z.isObject(h.Z.evaluate(this.visProp.precision))?(c=this.board._inputDevice,d=h.Z.evaluate(this.visProp.precision[c])):d=this.board.options.precision.hasPoint,this.transformations.length>0&&(t=(i=l.Z.matVecMult(l.Z.inverse(this.board.renderer.joinTransforms(this,this.transformations)),[1,t,e]))[1],e=i[2]),r=(i="right"===(n=this.getAnchorX())?this.coords.scrCoords[1]-this.size[0]:"middle"===n?this.coords.scrCoords[1]-.5*this.size[0]:this.coords.scrCoords[1])+this.size[0],s=(o="top"===(a=this.getAnchorY())?this.coords.scrCoords[2]+this.size[1]:"middle"===a?this.coords.scrCoords[2]+.5*this.size[1]:this.coords.scrCoords[2])-this.size[1],"all"===h.Z.evaluate(this.visProp.dragarea)?t>=i-d&&t<r+d&&e>=s-d&&e<=o+d:e>=s-d&&e<=o+d&&(t>=i-d&&t<=i+2*d||t>=r-2*d&&t<=r+d)},_createFctUpdateText:function(t){var e,i,r,s,o,n,a=h.Z.evaluate(this.visProp.parse),l=h.Z.evaluate(this.visProp.usemathjax),c=h.Z.evaluate(this.visProp.usekatex),d=!1;if(this.orgText=t,h.Z.isFunction(t))this.updateText=function(){s=t().toString(),this.plaintext=!a||l||c?s:this.replaceSub(this.replaceSup(this.convertGeonextAndSketchometry2CSS(s,!1)))};else if(h.Z.isNumber(t)&&h.Z.evaluate(this.visProp.formatnumber)?h.Z.evaluate(this.visProp.tofraction)?this.content=l?"\\("+h.Z.toFraction(t,!0)+"\\)":h.Z.toFraction(t,c):(r=h.Z.evaluate(this.visProp.digits),this.useLocale()?this.content=this.formatNumberLocale(t,r):this.content=h.Z.toFixed(t,r)):h.Z.isString(t)&&a?(h.Z.evaluate(this.visProp.useasciimathml)?this.content="'`"+t+"`'":l||c?(this.content=this.valueTagToJessieCode(t),h.Z.isArray(this.content)||(this.content=this.content.replace(/\\/g,"\\\\"))):this.content=this.poorMansTeX(this.valueTagToJessieCode(t)),d=!0):this.content=t,d){if(h.Z.isArray(this.content)){for(n=this,o=0;o<this.content.length;o++)if('"'!==this.content[o][0])for(i in this.content[o]=this.board.jc.snippet(this.content[o],!0,"",!1),this.content[o].deps)this.addParents(this.content[o].deps[i]),this.content[o].deps[i].addChild(this);e=function(){var t,e,i=h.Z.evaluate(n.visProp.digits),r="";for(t=0;t<n.content.length;t++)h.Z.isFunction(n.content[t])?(e=n.content[t](),e=n.useLocale()?n.formatNumberLocale(e,i):h.Z.toFixed(e,i)):'"'===(e=n.content[t])[0]&&'"'===e[e.length-1]&&(e=e.slice(1,-1)),r+=e;return r}}else for(i in(e=this.board.jc.snippet(this.content,!0,"",!1)).deps)this.addParents(e.deps[i]),e.deps[i].addChild(this);this.updateText=function(){this.plaintext=this.unescapeTicks(e())}}else this.updateText=function(){this.plaintext=this.content}},_setText:function(t){return this._createFctUpdateText(t),this.updateText(),this.fullUpdate(),this.board.infobox&&this.id===this.board.infobox.id||this.updateSize(),this},setTextJessieCode:function(t){var e;return this.visProp.castext=t,e=h.Z.isFunction(t)?function(){return h.Z.sanitizeHTML(t())}:h.Z.isNumber(t)?t:h.Z.sanitizeHTML(t),this._setText(e)},setText:function(t){return this._setText(t)},updateSize:function(){var t,e,i,r=h.Z.evaluate(this.visProp.display);return a.Z.isBrowser&&"no"!==this.board.renderer.type?(i=this.rendNode,"html"===r||"vml"===this.board.renderer.type?h.Z.exists(i.offsetWidth)?(e=this,window.setTimeout((function(){e.size=[i.offsetWidth,i.offsetHeight],e.needsUpdate=!0,e.updateRenderer()}),0)):this.size=this.crudeSizeEstimate():"internal"===r&&("svg"===this.board.renderer.type?(e=this,window.setTimeout((function(){try{t=i.getBBox(),e.size=[t.width,t.height],e.needsUpdate=!0,e.updateRenderer()}catch(t){}}),0)):"canvas"===this.board.renderer.type&&(this.size=this.crudeSizeEstimate())),this):this},crudeSizeEstimate:function(){var t=parseFloat(h.Z.evaluate(this.visProp.fontsize));return[t*this.plaintext.length*.45,.9*t]},utf8_decode:function(t){return t.replace(/&#x(\w+);/g,(function(t,e){return String.fromCharCode(parseInt(e,16))}))},replaceSub:function(t){if(!t.indexOf)return t;for(var e,i=t.indexOf("_{");i>=0;)(e=(t=t.slice(0,i)+t.slice(i).replace(/_\{/,"<sub>")).indexOf("}",i+4))>=0&&(t=t.slice(0,e)+t.slice(e).replace(/\}/,"</sub>")),i=t.indexOf("_{");for(i=t.indexOf("_");i>=0;)i=(t=t.slice(0,i)+t.slice(i).replace(/_(.?)/,"<sub>$1</sub>")).indexOf("_");return t},replaceSup:function(t){if(!t.indexOf)return t;for(var e,i=t.indexOf("^{");i>=0;)(e=(t=t.slice(0,i)+t.slice(i).replace(/\^\{/,"<sup>")).indexOf("}",i+4))>=0&&(t=t.slice(0,e)+t.slice(e).replace(/\}/,"</sup>")),i=t.indexOf("^{");for(i=t.indexOf("^");i>=0;)i=(t=t.slice(0,i)+t.slice(i).replace(/\^(.?)/,"<sup>$1</sup>")).indexOf("^");return t},getSize:function(){return this.size},setCoords:function(t,e){var i,r,o;return h.Z.isArray(t)&&t.length>1&&(e=t[1],t=t[0]),h.Z.evaluate(this.visProp.islabel)&&h.Z.exists(this.element)?(r=(t-(i=this.element.getLabelAnchor()).usrCoords[1])*this.board.unitX,o=-(e-i.usrCoords[2])*this.board.unitY,this.relativeCoords.setCoordinates(s.Z.COORDS_BY_SCREEN,[r,o])):this.coords.setCoordinates(s.Z.COORDS_BY_USER,[t,e]),this.fullUpdate(),this},update:function(t){return this.needsUpdate?(this.updateCoords(t),this.updateText(),"internal"===h.Z.evaluate(this.visProp.display)&&h.Z.isString(this.plaintext)&&(this.plaintext=this.utf8_decode(this.plaintext)),this.checkForSizeUpdate(),this.needsSizeUpdate&&this.updateSize(),this):this},checkForSizeUpdate:function(){this.board.infobox&&this.id===this.board.infobox.id?this.needsSizeUpdate=!1:(this.needsSizeUpdate=this.plaintextOld!==this.plaintext,this.needsSizeUpdate&&(this.plaintextOld=this.plaintext))},updateRenderer:function(){return h.Z.evaluate(this.visProp.autoposition)&&this.setAutoPosition().updateConstraint(),this.updateRendererGeneric("updateText")},expandShortMath:function(t){return t.replace(/([)0-9.])\s*([(a-zA-Z_])/g,"$1*$2")},generateTerm:function(t,e,i){var r,s,o,a,l='""';if(o=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t||"").replace(/\r/g,"")).replace(/\n/g,"")).replace(/"/g,"'")).replace(/'/g,"\\'")).replace(/&arc;/g,"∠")).replace(/<arc\s*\/>/g,"∠")).replace(/<arc\s*\/>/g,"∠")).replace(/<sqrt\s*\/>/g,"√")).replace(/<value>/g,"<value>")).replace(/<\/value>/g,"</value>")).indexOf("<value>"),a=t.indexOf("</value>"),o>=0)for(;o>=0;)l+=' + "'+this.replaceSub(this.replaceSup(t.slice(0,o)))+'"',s=(s=t.slice(o+7,a)).replace(/\s+/g,""),!0===e&&(s=this.expandShortMath(s)),(r=(r=(r=i?s:n.Z.geonext2JS(s,this.board)).replace(/\\"/g,"'")).replace(/\\'/g,"'")).indexOf("toFixed")<0&&h.Z.isNumber(h.Z.bind(this.board.jc.snippet(r,!0,"",!1),this)())?l+="+("+r+").toFixed("+h.Z.evaluate(this.visProp.digits)+")":l+="+("+r+")",o=(t=t.slice(a+8)).indexOf("<value>"),a=t.indexOf("</value>");return l+=' + "'+this.replaceSub(this.replaceSup(t))+'"',l=(l=(l=this.convertGeonextAndSketchometry2CSS(l)).replace(/&/g,"&")).replace(/"/g,"'")},valueTagToJessieCode:function(t){var e,i,r,s,o=[],n='"';if(r=(t=(t=(t=(t=(t=t||"").replace(/\r/g,"")).replace(/\n/g,"")).replace(/<value>/g,"<value>")).replace(/<\/value>/g,"</value>")).indexOf("<value>"),s=t.indexOf("</value>"),r>=0)for(;r>=0;)o.push(n+this.escapeTicks(t.slice(0,r))+n),i=(i=t.slice(r+7,s)).replace(/\s+/g,""),e=(e=i=this.expandShortMath(i)).replace(/\\"/g,"'").replace(/\\'/g,"'"),o.push("("+e+")"),r=(t=t.slice(s+8)).indexOf("<value>"),s=t.indexOf("</value>");for(o.push(n+this.escapeTicks(t)+n),r=0;r<o.length;r++)o[r]=o[r].replace(/&/g,"&");return o},poorMansTeX:function(t){var e,i;if(h.Z.isArray(t)){for(i=[],e=0;e<t.length;e++)i.push(this.poorMansTeX(t[e]));return i}return t=t.replace(/<arc\s*\/*>/g,"∠").replace(/<arc\s*\/*>/g,"∠").replace(/<sqrt\s*\/*>/g,"√").replace(/<sqrt\s*\/*>/g,"√"),this.convertGeonextAndSketchometry2CSS(this.replaceSub(this.replaceSup(t)),!0)},escapeTicks:function(t){return t.replace(/"/g,"%22").replace(/'/g,"%27")},unescapeTicks:function(t){return t.replace(/%22/g,'"').replace(/%27/g,"'")},convertGeonext2CSS:function(t){return h.Z.isString(t)&&(t=(t=(t=(t=t.replace(/(<|<)overline(>|>)/g,"<span style=text-decoration:overline;>")).replace(/(<|<)\/overline(>|>)/g,"</span>")).replace(/(<|<)arrow(>|>)/g,"<span style=text-decoration:overline;>")).replace(/(<|<)\/arrow(>|>)/g,"</span>")),t},convertSketchometry2CSS:function(t,e){var i='<span class="sketcho sketcho-inherit sketcho-',r='"></span>';return h.Z.isString(t)&&(e&&(i=this.escapeTicks(i),r=this.escapeTicks(r)),t=(t=t.replace(/(<|<)sketchofont(>|>)/g,i)).replace(/(<|<)\/sketchofont(>|>)/g,r)),t},convertGeonextAndSketchometry2CSS:function(t,e){return t=this.convertGeonext2CSS(t),t=this.convertSketchometry2CSS(t,e)},notifyParents:function(t){var e,i=null;t=(t=t.replace(/<value>/g,"<value>")).replace(/<\/value>/g,"</value>");do{null!==(i=(e=/<value>([\w\s*/^\-+()[\],<>=!]+)<\/value>/).exec(t))&&(n.Z.findDependencies(this,i[1],this.board),t=(t=t.slice(i.index)).replace(e,""))}while(null!==i);return this},getParents:function(){var t;return t=void 0!==this.relativeCoords?[this.relativeCoords.usrCoords[1],this.relativeCoords.usrCoords[2],this.orgText]:[this.Z(),this.X(),this.Y(),this.orgText],0!==this.parents.length&&(t=this.parents),t},bounds:function(){var t=this.coords.usrCoords;return h.Z.evaluate(this.visProp.islabel)||0===this.board.unitY||0===this.board.unitX?[0,0,0,0]:[t[1],t[2]+this.size[1]/this.board.unitY,t[1]+this.size[0]/this.board.unitX,t[2]]},getAnchorX:function(){var t=h.Z.evaluate(this.visProp.anchorx);if("auto"===t)switch(this.visProp.position){case"top":case"bot":return"middle";case"rt":case"lrt":case"urt":return"left";default:return"right"}return t},getAnchorY:function(){var t=h.Z.evaluate(this.visProp.anchory);if("auto"===t)switch(this.visProp.position){case"top":case"ulft":case"urt":return"bottom";case"bot":case"lrt":case"llft":return"top";default:return"middle"}return t},getNumberOfConflicts:function(t,e,i,r){var s,o,n,a,h=0;for(a=this.board.options.precision.hasPoint,this.board.options.precision.hasPoint=.25*(i+r),s=0,n=this.board.objectsList.length;s<n;s++)(o=this.board.objectsList[s]).visPropCalc.visible&&"axis"!==o.elType&&"ticks"!==o.elType&&o!==this.board.infobox&&o!==this&&o.hasPoint(t,e)&&h++;return this.board.options.precision.hasPoint=a,h},setAutoPosition:function(){var t,e,i,r,s,o,n,a,l,c,d,u,p,f,_,m,g,b=this.size[0],v=this.size[1],Z={conflicts:1/0,angle:0,r:0},C=2*Math.PI/12;if(this===this.board.infobox||!this.visPropCalc.visible||!h.Z.evaluate(this.visProp.islabel)||!this.element)return this;if(d=h.Z.evaluate(this.visProp.offset),i=(s=this.element.getLabelAnchor()).scrCoords[1],r=s.scrCoords[2],f=d[0],_=d[1],0===(c=this.getNumberOfConflicts(i+f,r-_,b,v)))return this;for(u=h.Z.evaluate(this.visProp.autopositionmindistance),a=h.Z.evaluate(this.visProp.autopositionmaxdistance),l=.2*u,o=Math.atan2(_,f),Z.conflicts=c,Z.angle=o,Z.r=u;Z.conflicts>0&&u<=a;){for(p=1,n=o+C;p<12&&Z.conflicts>0&&(t=i+u*(m=Math.cos(n)),e=r-u*(g=Math.sin(n)),(c=this.getNumberOfConflicts(t,e,b,v))<Z.conflicts&&(Z.conflicts=c,Z.angle=n,Z.r=u),0!==Z.conflicts);p++)n+=C;u+=l}return u=Z.r,m=Math.cos(Z.angle),g=Math.sin(Z.angle),this.visProp.offset=[u*m,u*g],this.visProp.anchorx=m<-.2?"right":m>.2?"left":"middle",this}}),r.Z.createText=function(t,e,i){var s,o=h.Z.copyAttributes(i,t.options,"text"),n=e.slice(0,-1),a=e[e.length-1];if(o.anchor=o.parent||o.anchor,!(s=c.Z.create(r.Z.Text,t,n,o,a)))throw new Error("JSXGraph: Can't create text with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [x,y], [z,x,y], [element,transformation]");return 0!==o.rotate&&s.addRotation(o.rotate),s},r.Z.registerElement("text",r.Z.createText),r.Z.createHTMLSlider=function(t,e,i){var s,o,n=h.Z.copyAttributes(i,t.options,"htmlslider");if(2!==e.length||2!==e[0].length||3!==e[1].length)throw new Error("JSXGraph: Can't create htmlslider with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parents are: [[x,y], [min, start, max]]");n.anchor=n.parent||n.anchor,n.fixed=n.fixed||!0,o=[e[0][0],e[0][1],'<form style="display:inline"><input type="range" /><span></span><input type="text" /></form>'],(s=r.Z.createText(t,o,n)).type=h.Z.OBJECT_TYPE_HTMLSLIDER,s.rendNodeForm=s.rendNode.childNodes[0],s.rendNodeRange=s.rendNodeForm.childNodes[0],s.rendNodeRange.min=e[1][0],s.rendNodeRange.max=e[1][2],s.rendNodeRange.step=n.step,s.rendNodeRange.value=e[1][1],s.rendNodeLabel=s.rendNodeForm.childNodes[1],s.rendNodeLabel.id=s.rendNode.id+"_label",n.withlabel&&(s.rendNodeLabel.innerHTML=s.name+"="),s.rendNodeOut=s.rendNodeForm.childNodes[2],s.rendNodeOut.value=e[1][1];try{s.rendNodeForm.id=s.rendNode.id+"_form",s.rendNodeRange.id=s.rendNode.id+"_range",s.rendNodeOut.id=s.rendNode.id+"_out"}catch(t){r.Z.debug(t)}return s.rendNodeRange.style.width=n.widthrange+"px",s.rendNodeRange.style.verticalAlign="middle",s.rendNodeOut.style.width=n.widthout+"px",s._val=e[1][1],r.Z.supportsVML()?a.Z.addEvent(s.rendNodeForm,"change",d,s):a.Z.addEvent(s.rendNodeForm,"input",d,s),s.Value=function(){return this._val},s},r.Z.registerElement("htmlslider",r.Z.createHTMLSlider),e.Z=r.Z.Text},765:function(t,e){var i={};try{"object"!=typeof JXG||JXG.extend||(i=JXG)}catch(t){}i.extend=function(t,e,i,r){var s;for(s in i=i||!1,r=r||!1,e)(!i||i&&e.hasOwnProperty(s))&&(t[r?s.toLowerCase():s]=e[s])},i.defineConstant=function(t,e,r,s){(s=s||!1)&&i.exists(t[e])||Object.defineProperty(t,e,{value:r,writable:!1,enumerable:!0,configurable:!1})},i.extendConstants=function(t,e,i,r){var s,o;for(s in i=i||!1,r=r||!1,e)(!i||i&&e.hasOwnProperty(s))&&(o=r?s.toUpperCase():s,this.defineConstant(t,o,e[s]))},i.extend(i,{boards:{},readers:{},elements:{},registerElement:function(t,e){t=t.toLowerCase(),this.elements[t]=e},registerReader:function(t,e){var i,r;for(i=0;i<e.length;i++)r=e[i].toLowerCase(),"function"!=typeof this.readers[r]&&(this.readers[r]=t)},shortcut:function(t,e){return function(){return t[e].apply(this,arguments)}},getRef:function(t,e){return i.deprecated("JXG.getRef()","Board.select()"),t.select(e)},getReference:function(t,e){return i.deprecated("JXG.getReference()","Board.select()"),t.select(e)},getBoardByContainerId:function(t){var e;for(e in JXG.boards)if(JXG.boards.hasOwnProperty(e)&&JXG.boards[e].container===t)return JXG.boards[e];return null},deprecated:function(t,e){var r=t+" is deprecated.";e&&(r+=" Please use "+e+" instead."),i.warn(r)},warn:function(t){"object"==typeof window&&window.console&&console.warn?console.warn("WARNING:",t):"object"==typeof document&&document.getElementById("warning")&&(document.getElementById("debug").innerHTML+="WARNING: "+t+"<br />")},debugInt:function(t){var e,i;for(e=0;e<arguments.length;e++)i=arguments[e],"object"==typeof window&&window.console&&console.log?console.log(i):"object"==typeof document&&document.getElementById("debug")&&(document.getElementById("debug").innerHTML+=i+"<br/>")},debugWST:function(t){var e=new Error;i.debugInt.apply(this,arguments),e&&e.stack&&(i.debugInt("stacktrace"),i.debugInt(e.stack.split("\n").slice(1).join("\n")))},debugLine:function(t){var e=new Error;i.debugInt.apply(this,arguments),e&&e.stack&&i.debugInt("Called from",e.stack.split("\n").slice(2,3).join("\n"))},debug:function(t){i.debugInt.apply(this,arguments)},themes:{}}),e.Z=i},922:function(t,e,i){var r=i(765),s=i(351),o=i(705),n=i(275),a=i(336),h=i(109),l=i(421);n.Z.Geometry={},r.Z.extend(n.Z.Geometry,{angle:function(t,e,i){var s,o,n,a,h=[],l=[],c=[];return r.Z.deprecated("Geometry.angle()","Geometry.rad()"),t.coords?(h[0]=t.coords.usrCoords[1],h[1]=t.coords.usrCoords[2]):(h[0]=t[0],h[1]=t[1]),e.coords?(l[0]=e.coords.usrCoords[1],l[1]=e.coords.usrCoords[2]):(l[0]=e[0],l[1]=e[1]),i.coords?(c[0]=i.coords.usrCoords[1],c[1]=i.coords.usrCoords[2]):(c[0]=i[0],c[1]=i[1]),s=h[0]-l[0],o=h[1]-l[1],n=c[0]-l[0],a=c[1]-l[1],Math.atan2(s*a-o*n,s*n+o*a)},trueAngle:function(t,e,i){return 57.29577951308232*this.rad(t,e,i)},rad:function(t,e,i){var r,s,o,n,a,h,l;return t.coords?(r=t.coords.usrCoords[1],s=t.coords.usrCoords[2]):(r=t[0],s=t[1]),e.coords?(o=e.coords.usrCoords[1],n=e.coords.usrCoords[2]):(o=e[0],n=e[1]),i.coords?(a=i.coords.usrCoords[1],h=i.coords.usrCoords[2]):(a=i[0],h=i[1]),(l=Math.atan2(h-n,a-o)-Math.atan2(s-n,r-o))<0&&(l+=6.283185307179586),l},angleBisector:function(t,e,i,r){var n,a,l,c,d,u=t.coords.usrCoords,p=e.coords.usrCoords,f=i.coords.usrCoords;return h.Z.exists(r)||(r=t.board),0===p[0]?new o.Z(s.Z.COORDS_BY_USER,[1,.5*(u[1]+f[1]),.5*(u[2]+f[2])],r):(c=u[1]-p[1],d=u[2]-p[2],n=Math.atan2(d,c),c=f[1]-p[1],d=f[2]-p[2],l=.5*(n+(a=Math.atan2(d,c))),n>a&&(l+=Math.PI),c=Math.cos(l)+p[1],d=Math.sin(l)+p[2],new o.Z(s.Z.COORDS_BY_USER,[1,c,d],r))},reflection:function(t,e,i){var r,n,a,l,c,d,u=e.coords.usrCoords,p=t.point1.coords.usrCoords,f=t.point2.coords.usrCoords;return h.Z.exists(i)||(i=e.board),l=f[1]-p[1],c=f[2]-p[2],r=u[1]-p[1],d=(l*(u[2]-p[2])-c*r)/(l*l+c*c),n=u[1]+2*d*c,a=u[2]-2*d*l,new o.Z(s.Z.COORDS_BY_USER,[n,a],i)},rotation:function(t,e,i,r){var n,a,l,c,d,u,p=e.coords.usrCoords,f=t.coords.usrCoords;return h.Z.exists(r)||(r=e.board),n=p[1]-f[1],a=p[2]-f[2],d=n*(l=Math.cos(i))-a*(c=Math.sin(i))+f[1],u=n*c+a*l+f[2],new o.Z(s.Z.COORDS_BY_USER,[d,u],r)},perpendicular:function(t,e,i){var r,a,l,c,d,u=t.point1.coords.usrCoords,p=t.point2.coords.usrCoords,f=e.coords.usrCoords;return h.Z.exists(i)||(i=e.board),e===t.point1?(r=u[1]+p[2]-u[2],a=u[2]-p[1]+u[1],d=u[0]*p[0],Math.abs(d)<n.Z.eps&&(r=p[2],a=-p[1]),c=[d,r,a],l=!0):e===t.point2?(r=p[1]+u[2]-p[2],a=p[2]-u[1]+p[1],d=u[0]*p[0],Math.abs(d)<n.Z.eps&&(r=u[2],a=-u[1]),c=[d,r,a],l=!1):Math.abs(n.Z.innerProduct(f,t.stdform,3))<n.Z.eps?(r=f[1]+p[2]-f[2],a=f[2]-p[1]+f[1],d=p[0],Math.abs(d)<n.Z.eps&&(r=p[2],a=-p[1]),l=!0,Math.abs(d)>n.Z.eps&&Math.abs(r-f[1])<n.Z.eps&&Math.abs(a-f[2])<n.Z.eps&&(r=f[1]+u[2]-f[2],a=f[2]-u[1]+f[1],l=!1),c=[d,r,a]):(c=[0,t.stdform[1],t.stdform[2]],c=n.Z.crossProduct(c,f),c=n.Z.crossProduct(c,t.stdform),l=!0),[new o.Z(s.Z.COORDS_BY_USER,c,i),l]},circumcenterMidpoint:function(){r.Z.deprecated("Geometry.circumcenterMidpoint()","Geometry.circumcenter()"),this.circumcenter.apply(this,arguments)},circumcenter:function(t,e,i,r){var a,l,c,d,u=t.coords.usrCoords,p=e.coords.usrCoords,f=i.coords.usrCoords;return h.Z.exists(r)||(r=t.board),a=[p[0]-u[0],-p[2]+u[2],p[1]-u[1]],l=[.5*(u[0]+p[0]),.5*(u[1]+p[1]),.5*(u[2]+p[2])],c=n.Z.crossProduct(a,l),a=[f[0]-p[0],-f[2]+p[2],f[1]-p[1]],l=[.5*(p[0]+f[0]),.5*(p[1]+f[1]),.5*(p[2]+f[2])],d=n.Z.crossProduct(a,l),new o.Z(s.Z.COORDS_BY_USER,n.Z.crossProduct(c,d),r)},distance:function(t,e,i){var r,s=0;for(i||(i=Math.min(t.length,e.length)),r=0;r<i;r++)s+=(t[r]-e[r])*(t[r]-e[r]);return Math.sqrt(s)},affineDistance:function(t,e,i){var r;return(r=this.distance(t,e,i))>n.Z.eps&&(Math.abs(t[0])<n.Z.eps||Math.abs(e[0])<n.Z.eps)?1/0:r},affineRatio:function(t,e,i){var r;return h.Z.exists(t.usrCoords)&&(t=t.usrCoords),h.Z.exists(e.usrCoords)&&(e=e.usrCoords),h.Z.exists(i.usrCoords)&&(i=i.usrCoords),r=e[1]-t[1],Math.abs(r)>n.Z.eps?(i[1]-t[1])/r:(i[2]-t[2])/(e[2]-t[2])},sortVertices:function(t){for(var e,i=l.Z.each(t,l.Z.coordsArray),r=i.length,s=null;i[0][0]===i[r-1][0]&&i[0][1]===i[r-1][1]&&i[0][2]===i[r-1][2];)s=i.pop(),r--;return e=i[0],i.sort((function(t,i){return(t[2]===e[2]&&t[1]===e[1]?-1/0:Math.atan2(t[2]-e[2],t[1]-e[1]))-(i[2]===e[2]&&i[1]===e[1]?-1/0:Math.atan2(i[2]-e[2],i[1]-e[1]))})),null!==s&&i.push(s),i},signedTriangle:function(t,e,i){var r=l.Z.coordsArray(t),s=l.Z.coordsArray(e),o=l.Z.coordsArray(i);return.5*((s[1]-r[1])*(o[2]-r[2])-(s[2]-r[2])*(o[1]-r[1]))},signedPolygon:function(t,e){var i,r,s=0,o=l.Z.each(t,l.Z.coordsArray);for(void 0===e&&(e=!0),e?o.unshift(o[o.length-1]):o=this.sortVertices(o),r=o.length,i=1;i<r;i++)s+=o[i-1][1]*o[i][2]-o[i][1]*o[i-1][2];return.5*s},GrahamScan:function(t){var e,i=1,r=l.Z.each(t,l.Z.coordsArray),s=r.length;for(s=(r=this.sortVertices(r)).length,e=2;e<s;e++){for(;this.signedTriangle(r[i-1],r[i],r[e])<=0;){if(i>1)i-=1;else if(e===s-1)break;e+=1}i+=1,r=h.Z.swap(r,i,e)}return r.slice(0,i)},calcStraight:function(t,e,i,r){var o,a,l,c,d,u,p,f,_,m;if(h.Z.exists(r)||(r=10),u=h.Z.evaluate(t.visProp.straightfirst),p=h.Z.evaluate(t.visProp.straightlast),Math.abs(e.scrCoords[0])<n.Z.eps&&(u=!0),Math.abs(i.scrCoords[0])<n.Z.eps&&(p=!0),(u||p)&&((f=[])[0]=t.stdform[0]-t.stdform[1]*t.board.origin.scrCoords[1]/t.board.unitX+t.stdform[2]*t.board.origin.scrCoords[2]/t.board.unitY,f[1]=t.stdform[1]/t.board.unitX,f[2]=-t.stdform[2]/t.board.unitY,!isNaN(f[0]+f[1]+f[2]))){if(!1,!1,o=!u&&Math.abs(e.usrCoords[0])>=n.Z.eps&&e.scrCoords[1]>=0&&e.scrCoords[1]<=t.board.canvasWidth&&e.scrCoords[2]>=0&&e.scrCoords[2]<=t.board.canvasHeight,a=!p&&Math.abs(i.usrCoords[0])>=n.Z.eps&&i.scrCoords[1]>=0&&i.scrCoords[1]<=t.board.canvasWidth&&i.scrCoords[2]>=0&&i.scrCoords[2]<=t.board.canvasHeight,c=(l=this.meetLineBoard(f,t.board,r))[0],d=l[1],!o&&!a){if(!u&&p&&!this.isSameDirection(e,i,c)&&!this.isSameDirection(e,i,d))return;if(u&&!p&&!this.isSameDirection(i,e,c)&&!this.isSameDirection(i,e,d))return}o?a||(m=this.isSameDir(e,i,c,d)?d:c):a?_=this.isSameDir(e,i,c,d)?c:d:this.isSameDir(e,i,c,d)?(_=c,m=d):(m=c,_=d),_&&e.setCoordinates(s.Z.COORDS_BY_USER,_.usrCoords),m&&i.setCoordinates(s.Z.COORDS_BY_USER,m.usrCoords)}},calcLineDelimitingPoints:function(t,e,i){var r,o,a,l,c,d,u,p,f,_,m;if(c=h.Z.evaluate(t.visProp.straightfirst),d=h.Z.evaluate(t.visProp.straightlast),Math.abs(e.scrCoords[0])<n.Z.eps&&(c=!0),Math.abs(i.scrCoords[0])<n.Z.eps&&(d=!0),(u=[])[0]=t.stdform[0]-t.stdform[1]*t.board.origin.scrCoords[1]/t.board.unitX+t.stdform[2]*t.board.origin.scrCoords[2]/t.board.unitY,u[1]=t.stdform[1]/t.board.unitX,u[2]=-t.stdform[2]/t.board.unitY,!isNaN(u[0]+u[1]+u[2])){if(_=!c,m=!d,o=t.board.getBoundingBox(),t.getSlope()>=0?(a=this.projectPointToLine({coords:{usrCoords:[1,o[2],o[1]]}},t,t.board),l=this.projectPointToLine({coords:{usrCoords:[1,o[0],o[3]]}},t,t.board)):(a=this.projectPointToLine({coords:{usrCoords:[1,o[0],o[1]]}},t,t.board),l=this.projectPointToLine({coords:{usrCoords:[1,o[2],o[3]]}},t,t.board)),!_&&!m){if(!c&&!d){if(r=e.distance(s.Z.COORDS_BY_USER,i),Math.abs(e.distance(s.Z.COORDS_BY_USER,a)+a.distance(s.Z.COORDS_BY_USER,i)-r)>n.Z.eps)return;if(Math.abs(e.distance(s.Z.COORDS_BY_USER,l)+l.distance(s.Z.COORDS_BY_USER,i)-r)>n.Z.eps)return}if(!c&&d&&!this.isSameDirection(e,i,a)&&!this.isSameDirection(e,i,l))return;if(c&&!d&&!this.isSameDirection(i,e,a)&&!this.isSameDirection(i,e,l))return}_?m||(f=this.isSameDir(e,i,a,l)?l:a):m?p=this.isSameDir(e,i,a,l)?a:l:this.isSameDir(e,i,a,l)?(p=a,f=l):(f=a,p=l),p&&e.setCoordinates(s.Z.COORDS_BY_USER,p.usrCoords),f&&i.setCoordinates(s.Z.COORDS_BY_USER,f.usrCoords)}},calcLabelQuadrant:function(t){return t<0&&(t+=2*Math.PI),["rt","urt","top","ulft","lft","llft","lrt"][Math.floor((t+Math.PI/8)/(Math.PI/4))%8]},isSameDir:function(t,e,i,r){var s=e.usrCoords[1]-t.usrCoords[1],o=e.usrCoords[2]-t.usrCoords[2],a=r.usrCoords[1]-i.usrCoords[1],h=r.usrCoords[2]-i.usrCoords[2];return Math.abs(e.usrCoords[0])<n.Z.eps&&(s=e.usrCoords[1],o=e.usrCoords[2]),Math.abs(t.usrCoords[0])<n.Z.eps&&(s=-t.usrCoords[1],o=-t.usrCoords[2]),s*a+o*h>=0},isSameDirection:function(t,e,i){var r,s,o,a,h=!1;return r=e.usrCoords[1]-t.usrCoords[1],s=e.usrCoords[2]-t.usrCoords[2],o=i.usrCoords[1]-t.usrCoords[1],a=i.usrCoords[2]-t.usrCoords[2],Math.abs(r)<n.Z.eps&&(r=0),Math.abs(s)<n.Z.eps&&(s=0),Math.abs(o)<n.Z.eps&&(o=0),Math.abs(a)<n.Z.eps&&(a=0),(r>=0&&o>=0||r<=0&&o<=0)&&(h=s>=0&&a>=0||s<=0&&a<=0),h},det3p:function(t,e,i){return(t[1]-i[1])*(e[2]-i[2])-(e[1]-i[1])*(t[2]-i[2])},windingNumber:function(t,e,i){var r,s,o,a,l,c,d=0,u=e.length,p=t[1],f=t[2],_=0;if(0===u)return 0;if((i=i||!1)&&(_=1),isNaN(p)||isNaN(f))return 1;if(h.Z.exists(e[0].coords)?(r=e[0].coords,s=e[u-1].coords):(r=e[0],s=e[u-1]),r.usrCoords[1]===p&&r.usrCoords[2]===f)return 1;for(c=0;c<u-_;c++)if(h.Z.exists(e[c].coords)?(s=e[c].coords.usrCoords,o=e[(c+1)%u].coords.usrCoords):(s=e[c].usrCoords,o=e[(c+1)%u].usrCoords),!(0===s[0]||0===o[0]||isNaN(s[1])||isNaN(o[1])||isNaN(s[2])||isNaN(o[2]))){if(o[2]===f){if(o[1]===p)return 1;if(s[2]===f&&o[1]>p==s[1]<p)return 0}if(s[2]<f!=o[2]<f)if(l=2*(o[2]>s[2]?1:0)-1,s[1]>=p)if(o[1]>p)d+=l;else{if(0===(a=this.det3p(s,o,t)))return 0;a>0+n.Z.eps==o[2]>s[2]&&(d+=l)}else o[1]>p&&(a=this.det3p(s,o,t))>0+n.Z.eps==o[2]>s[2]&&(d+=l)}return d},pnpoly:function(t,e,i,r){var n,a,l,c,d,u,p,f,_=i,m=!1;for(r===s.Z.COORDS_BY_USER?(u=(f=new o.Z(s.Z.COORDS_BY_USER,[t,e],this.board)).scrCoords[1],p=f.scrCoords[2]):(u=t,p=e),n=0,a=(d=i.length)-2;n<d-1;a=n++)l=h.Z.exists(_[n].coords)?_[n].coords:_[n],c=h.Z.exists(_[a].coords)?_[a].coords:_[a],l.scrCoords[2]>p!=c.scrCoords[2]>p&&u<(c.scrCoords[1]-l.scrCoords[1])*(p-l.scrCoords[2])/(c.scrCoords[2]-l.scrCoords[2])+l.scrCoords[1]&&(m=!m);return m},intersectionFunction:function(t,e,i,a,l,c){var d,u,p=this;return d=e.elementClass===s.Z.OBJECT_CLASS_CURVE&&(e.type===s.Z.OBJECT_TYPE_ARC||e.type===s.Z.OBJECT_TYPE_SECTOR),u=i.elementClass===s.Z.OBJECT_CLASS_CURVE&&(i.type===s.Z.OBJECT_TYPE_ARC||i.type===s.Z.OBJECT_TYPE_SECTOR),e.elementClass!==s.Z.OBJECT_CLASS_CURVE&&i.elementClass!==s.Z.OBJECT_CLASS_CURVE||e.elementClass!==s.Z.OBJECT_CLASS_CURVE&&e.elementClass!==s.Z.OBJECT_CLASS_CIRCLE||i.elementClass!==s.Z.OBJECT_CLASS_CURVE&&i.elementClass!==s.Z.OBJECT_CLASS_CIRCLE?e.elementClass===s.Z.OBJECT_CLASS_CURVE&&!d&&i.elementClass===s.Z.OBJECT_CLASS_LINE||i.elementClass===s.Z.OBJECT_CLASS_CURVE&&!u&&e.elementClass===s.Z.OBJECT_CLASS_LINE?function(){return p.meetCurveLine(e,i,a,e.board,h.Z.evaluate(c))}:e.type===s.Z.OBJECT_TYPE_POLYGON||i.type===s.Z.OBJECT_TYPE_POLYGON?e.elementClass===s.Z.OBJECT_CLASS_LINE?function(){var t,r=h.Z.evaluate(e.visProp.straightfirst),s=h.Z.evaluate(e.visProp.straightlast),o=h.Z.evaluate(i.visProp.straightfirst),n=h.Z.evaluate(i.visProp.straightlast);return t=!(h.Z.evaluate(c)||r&&s&&o&&n),p.meetPolygonLine(i,e,a,e.board,t)}:i.elementClass===s.Z.OBJECT_CLASS_LINE?function(){var t,r=h.Z.evaluate(e.visProp.straightfirst),s=h.Z.evaluate(e.visProp.straightlast),o=h.Z.evaluate(i.visProp.straightfirst),n=h.Z.evaluate(i.visProp.straightlast);return t=!(h.Z.evaluate(c)||r&&s&&o&&n),p.meetPolygonLine(e,i,a,e.board,t)}:function(){return p.meetPathPath(e,i,a,e.board)}:e.elementClass===s.Z.OBJECT_CLASS_LINE&&i.elementClass===s.Z.OBJECT_CLASS_LINE?function(){var t,r,n=h.Z.evaluate(e.visProp.straightfirst),l=h.Z.evaluate(e.visProp.straightlast),d=h.Z.evaluate(i.visProp.straightfirst),u=h.Z.evaluate(i.visProp.straightlast);return h.Z.evaluate(c)||n&&l&&d&&u?p.meet(e.stdform,i.stdform,a,e.board):(t=p.meetSegmentSegment(e.point1.coords.usrCoords,e.point2.coords.usrCoords,i.point1.coords.usrCoords,i.point2.coords.usrCoords),r=!n&&t[1]<0||!l&&t[1]>1||!d&&t[2]<0||!u&&t[2]>1?[0,NaN,NaN]:t[0],new o.Z(s.Z.COORDS_BY_USER,r,e.board))}:function(){var t,l,f,_=p.meet(e.stdform,i.stdform,a,e.board),m=!0;return h.Z.evaluate(c)?_:(e.elementClass!==s.Z.OBJECT_CLASS_LINE||(t=h.Z.evaluate(e.visProp.straightfirst),l=h.Z.evaluate(e.visProp.straightlast),t&&l||(f=p.affineRatio(e.point1.coords,e.point2.coords,_),!(!l&&f>1+n.Z.eps||!t&&f<0-n.Z.eps))))&&(i.elementClass!==s.Z.OBJECT_CLASS_LINE||(t=h.Z.evaluate(i.visProp.straightfirst),l=h.Z.evaluate(i.visProp.straightlast),t&&l||(f=p.affineRatio(i.point1.coords,i.point2.coords,_),!(!l&&f>1+n.Z.eps||!t&&f<0-n.Z.eps))))?d&&((m=p.coordsOnArc(e,_))&&u&&(m=p.coordsOnArc(i,_)),!m)?new o.Z(r.Z.COORDS_BY_USER,[0,NaN,NaN],e.board):_:new o.Z(r.Z.COORDS_BY_USER,[0,NaN,NaN],e.board)}:function(){return p.meetCurveCurve(e,i,a,l,e.board)}},otherIntersectionFunction:function(t,e,i,o){var n,a,l,c=this;return a=t[0],l=t[1],n=a.board,function(){var t,d,u,p,f=e.length,_=h.Z.evaluate(o);for(t=f;t>=0;t--){for(a.elementClass===s.Z.OBJECT_CLASS_CIRCLE&&[s.Z.OBJECT_CLASS_CIRCLE,s.Z.OBJECT_CLASS_LINE].indexOf(l.elementClass)>=0?u=c.meet(a.stdform,l.stdform,t,n):a.elementClass===s.Z.OBJECT_CLASS_CURVE&&[s.Z.OBJECT_CLASS_CURVE,s.Z.OBJECT_CLASS_CIRCLE].indexOf(l.elementClass)>=0?u=c.meetCurveCurve(a,l,t,0,n,"segment"):a.elementClass===s.Z.OBJECT_CLASS_CURVE&&l.elementClass===s.Z.OBJECT_CLASS_LINE&&(u=h.Z.exists(a.dataX)?r.Z.Math.Geometry.meetCurveLine(a,l,t,a.board,h.Z.evaluate(i)):r.Z.Math.Geometry.meetCurveLineContinuous(a,l,t,a.board)),p=!1,d=0;!p&&d<f;d++)u.distance(r.Z.COORDS_BY_USER,e[d].coords)<_&&(p=!0);if(!p)return u}return u}},intersectionFunction3D:function(t,e,i,r){var o,n=this;return e.type===s.Z.OBJECT_TYPE_PLANE3D?i.type===s.Z.OBJECT_TYPE_PLANE3D?o=()=>t.intersectionPlanePlane(e,i)[r]:i.type===s.Z.OBJECT_TYPE_SPHERE3D&&(o=n.meetPlaneSphere(e,i)):e.type===s.Z.OBJECT_TYPE_SPHERE3D&&(i.type===s.Z.OBJECT_TYPE_PLANE3D?o=n.meetPlaneSphere(i,e):i.type===s.Z.OBJECT_TYPE_SPHERE3D&&(o=n.meetSphereSphere(e,i))),o},coordsOnArc:function(t,e){var i=this.rad(t.radiuspoint,t.center,e.usrCoords.slice(1)),r=0,s=this.rad(t.radiuspoint,t.center,t.anglepoint),o=h.Z.evaluate(t.visProp.selection);return("minor"===o&&s>Math.PI||"major"===o&&s<Math.PI)&&(r=s,s=2*Math.PI),!(i<r||i>s)},meet:function(t,e,i,r){var s=n.Z.eps;return Math.abs(t[3])<s&&Math.abs(e[3])<s?this.meetLineLine(t,e,i,r):Math.abs(t[3])>=s&&Math.abs(e[3])<s?this.meetLineCircle(e,t,i,r):Math.abs(t[3])<s&&Math.abs(e[3])>=s?this.meetLineCircle(t,e,i,r):this.meetCircleCircle(t,e,i,r)},meetLineBoard:function(t,e,i){var r,a,l,c,d=[];for(h.Z.exists(i)||(i=0),d[0]=n.Z.crossProduct(t,[i,0,1]),d[1]=n.Z.crossProduct(t,[i,1,0]),d[2]=n.Z.crossProduct(t,[-i-e.canvasHeight,0,1]),d[3]=n.Z.crossProduct(t,[-i-e.canvasWidth,1,0]),l=0;l<4;l++)if(Math.abs(d[l][0])>n.Z.eps){for(c=2;c>0;c--)d[l][c]/=d[l][0];d[l][0]=1}return Math.abs(d[1][0])<n.Z.eps?(r=d[0],a=d[2]):Math.abs(d[0][0])<n.Z.eps?(r=d[1],a=d[3]):d[1][2]<0?(r=d[0],a=d[3][2]>e.canvasHeight?d[2]:d[3]):d[1][2]>e.canvasHeight?(r=d[2],a=d[3][2]<0?d[0]:d[3]):(r=d[1],a=d[3][2]<0?d[0]:d[3][2]>e.canvasHeight?d[2]:d[3]),[new o.Z(s.Z.COORDS_BY_SCREEN,r.slice(1),e),new o.Z(s.Z.COORDS_BY_SCREEN,a.slice(1),e)]},meetLineLine:function(t,e,i,r){var a=isNaN(t[5]+e[5])?[0,0,0]:n.Z.crossProduct(t,e);return Math.abs(a[0])<1e-14&&(a[0]=0),new o.Z(s.Z.COORDS_BY_USER,a,r)},meetLineCircle:function(t,e,i,r){var a,l,c,d,u,p,f,_,m;return e[4]<n.Z.eps?Math.abs(n.Z.innerProduct([1,e[6],e[7]],t,3))<n.Z.eps?new o.Z(s.Z.COORDS_BY_USER,e.slice(6,8),r):new o.Z(s.Z.COORDS_BY_USER,[NaN,NaN],r):(c=e[0],l=e.slice(1,3),a=e[3],d=t[0],u=t.slice(1,3),p=a,(_=(f=l[0]*u[1]-l[1]*u[0])*f-4*p*(a*d*d-(l[0]*u[0]+l[1]*u[1])*d+c))>-n.Z.eps*n.Z.eps?(m=[(-f+(_=Math.sqrt(Math.abs(_))))/(2*p),(-f-_)/(2*p)],0===h.Z.evaluate(i)?new o.Z(s.Z.COORDS_BY_USER,[-m[0]*-u[1]-d*u[0],-m[0]*u[0]-d*u[1]],r):new o.Z(s.Z.COORDS_BY_USER,[-m[1]*-u[1]-d*u[0],-m[1]*u[0]-d*u[1]],r)):new o.Z(s.Z.COORDS_BY_USER,[0,0,0],r))},meetCircleCircle:function(t,e,i,r){var a;return t[4]<n.Z.eps?Math.abs(this.distance(t.slice(6,2),e.slice(6,8))-e[4])<n.Z.eps?new o.Z(s.Z.COORDS_BY_USER,t.slice(6,8),r):new o.Z(s.Z.COORDS_BY_USER,[0,0,0],r):e[4]<n.Z.eps?Math.abs(this.distance(e.slice(6,2),t.slice(6,8))-t[4])<n.Z.eps?new o.Z(s.Z.COORDS_BY_USER,e.slice(6,8),r):new o.Z(s.Z.COORDS_BY_USER,[0,0,0],r):(a=[e[3]*t[0]-t[3]*e[0],e[3]*t[1]-t[3]*e[1],e[3]*t[2]-t[3]*e[2],0,1,1/0,1/0,1/0],a=n.Z.normalize(a),this.meetLineCircle(a,t,i,r))},meetCurveCurve:function(t,e,i,r,n,l){var c;return c=h.Z.exists(l)&&"newton"===l?a.Z.generalizedNewton(t,e,h.Z.evaluate(i),r):3===t.bezierDegree||3===e.bezierDegree?this.meetBezierCurveRedBlueSegments(t,e,i):this.meetCurveRedBlueSegments(t,e,i),new o.Z(s.Z.COORDS_BY_USER,c,n)},meetCurveLine:function(t,e,i,r,o){var n,a;return h.Z.exists(r)||(r=t.board),t.elementClass===s.Z.OBJECT_CLASS_CURVE?(n=t,a=e):(n=e,a=t),this.meetCurveLineDiscrete(n,a,i,r,!o)},meetCurveLineContinuous:function(t,e,i,r,h){var l,c,d,u,p,f,_,m,g,b,v,Z,C,y=n.Z.eps,P=n.Z.eps;for(u=this.meetCurveLineDiscrete(t,e,i,r,h),p=u.usrCoords[1],f=u.usrCoords[2],l=function(e){var i,r;return e>t.maxX()||e<t.minX()?1/0:(i=t.X(e)-p)*i+(r=t.Y(e)-f)*r},c=function(i){var r=e.stdform[0]+e.stdform[1]*t.X(i)+e.stdform[2]*t.Y(i);return r*r},50,m=(t.maxX()-t.minX())/50,g=t.minX(),v=1e-4,b=NaN,Z=0;Z<50&&(d=a.Z.root(l,[Math.max(g,t.minX()),Math.min(g+m,t.maxX())]),!((C=Math.abs(l(d)))<=v&&(b=d,(v=C)<y)));Z++)g+=m;return d=b,C=c(d=a.Z.root(c,[Math.max(d-m,t.minX()),Math.min(d+m,t.maxX())])),_=isNaN(C)||Math.abs(C)>P?0:1,new o.Z(s.Z.COORDS_BY_USER,[_,t.X(d),t.Y(d)],r)},meetCurveLineDiscrete:function(t,e,i,r,a){var l,c,d,u,p,f,_,m=h.Z.evaluate(i),g=e.point1.coords.usrCoords,b=e.point2.coords.usrCoords,v=0,Z=t.numberPoints,C=h.Z.evaluate(e.visProp.straightfirst),y=h.Z.evaluate(e.visProp.straightlast);for(f=new o.Z(s.Z.COORDS_BY_USER,[0,NaN,NaN],r),0===g[0]?g=[1,b[1]+e.stdform[2],b[2]-e.stdform[1]]:0===b[0]&&(b=[1,g[1]+e.stdform[2],g[2]-e.stdform[1]]),u=t.points[0].usrCoords,l=1;l<Z;l+=t.bezierDegree)if(d=u.slice(0),u=t.points[l].usrCoords,this.distance(d,u)>n.Z.eps)for(_=3===t.bezierDegree?this.meetBeziersegmentBeziersegment([t.points[l-1].usrCoords.slice(1),t.points[l].usrCoords.slice(1),t.points[l+1].usrCoords.slice(1),t.points[l+2].usrCoords.slice(1)],[g.slice(1),b.slice(1)],a):[this.meetSegmentSegment(d,u,g,b)],c=0;c<_.length;c++)if(0<=(p=_[c])[1]&&p[1]<=1){if(v===m)return a&&(!C&&p[2]<0||!y&&p[2]>1)?f:f=new o.Z(s.Z.COORDS_BY_USER,p[0],r);v+=1}return f},meetCurveRedBlueSegments:function(t,e,i){var r,s,o,n,a,l,c,d,u,p=h.Z.evaluate(i),f=0,_=e.numberPoints,m=t.numberPoints;if(_<=1||m<=1)return[0,NaN,NaN];for(r=1;r<m;r++)for(o=t.points[r-1].usrCoords,n=t.points[r].usrCoords,d=Math.min(o[1],n[1]),u=Math.max(o[1],n[1]),l=e.points[0].usrCoords,s=1;s<_;s++)if(a=l,l=e.points[s].usrCoords,Math.min(a[1],l[1])<u&&Math.max(a[1],l[1])>d&&(c=this.meetSegmentSegment(o,n,a,l))[1]>=0&&c[2]>=0&&(c[1]<1&&c[2]<1||r===m-1&&1===c[1]||s===_-1&&1===c[2])){if(f===p)return c[0];f++}return[0,NaN,NaN]},meetSegmentSegment:function(t,e,i,r){var s,o,a,h=n.Z.crossProduct(t,e),l=n.Z.crossProduct(i,r),c=n.Z.crossProduct(h,l);return Math.abs(c[0])<n.Z.eps?[c,1/0,1/0]:(c[1]/=c[0],c[2]/=c[0],c[0]/=c[0],a=t[o=Math.abs(e[1]-e[0]*t[1])<n.Z.eps?2:1]/t[0],s=(c[o]-a)/(0!==e[0]?e[o]/e[0]-a:e[o]),a=i[o=Math.abs(r[1]-r[0]*i[1])<n.Z.eps?2:1]/i[0],[c,s,(c[o]-a)/(0!==r[0]?r[o]/r[0]-a:r[o])])},meetPathPath:function(t,e,i,a){var l,c,d,u,p=h.Z.evaluate(i);return(d=(l=r.Z.Math.Clip._getPath(t,a)).length)>0&&this.distance(l[0].coords.usrCoords,l[d-1].coords.usrCoords,3)<n.Z.eps&&l.pop(),(d=(c=r.Z.Math.Clip._getPath(e,a)).length)>0&&this.distance(c[0].coords.usrCoords,c[d-1].coords.usrCoords,3)<n.Z.eps*n.Z.eps&&c.pop(),i<0||r.Z.Math.Clip.isEmptyCase(l,c,"intersection")?new o.Z(s.Z.COORDS_BY_USER,[0,0,0],a):(r.Z.Math.Clip.makeDoublyLinkedList(l),r.Z.Math.Clip.makeDoublyLinkedList(c),p<(u=r.Z.Math.Clip.findIntersections(l,c,a)[0]).length?u[p].coords:new o.Z(s.Z.COORDS_BY_USER,[0,0,0],a))},meetPolygonLine:function(t,e,i,r,n){var a,l,c,d=h.Z.evaluate(i),u=[0,0,0],p=t.borders.length,f=[];for(a=0;a<p;a++)c=t.borders[a],l=this.meetSegmentSegment(c.point1.coords.usrCoords,c.point2.coords.usrCoords,e.point1.coords.usrCoords,e.point2.coords.usrCoords),(!n||l[2]>=0&&l[2]<1)&&l[1]>=0&&l[1]<1&&f.push(l[0]);return d>=0&&d<f.length&&(u=f[d]),new o.Z(s.Z.COORDS_BY_USER,u,r)},meetPlaneSphere:function(t,e){var i=function(){return t.normal[0]*e.center.X()+t.normal[1]*e.center.Y()+t.normal[2]*e.center.Z()-t.d};return[[function(){return e.center.X()-i()*t.normal[0]},function(){return e.center.Y()-i()*t.normal[1]},function(){return e.center.Z()-i()*t.normal[2]}],[()=>t.normal[0],()=>t.normal[1],()=>t.normal[2]],function(){let t=e.Radius(),r=i();return Math.sqrt(t*t-r*r)}]},meetSphereSphere:function(t,e){var i=function(){let i=t.center.distance(e.center),r=t.Radius(),s=e.Radius();return(r-s)*(r+s)/(i*i)};return[[function(){let r=i();return.5*((1-r)*t.center.X()+(1+r)*e.center.X())},function(){let r=i();return.5*((1-r)*t.center.Y()+(1+r)*e.center.Y())},function(){let r=i();return.5*((1-r)*t.center.Z()+(1+r)*e.center.Z())}],[()=>e.center.X()-t.center.X(),()=>e.center.Y()-t.center.Y(),()=>e.center.Z()-t.center.Z()],function(){let r=t.center.distance(e.center),s=t.Radius(),o=e.Radius(),n=i(),a=.5*(s*s+o*o-.5*r*r*(1+n*n));return Math.sqrt(a)}]},_bezierSplit:function(t){var e,i,r,s,o,n;return e=[.5*(t[0][0]+t[1][0]),.5*(t[0][1]+t[1][1])],i=[.5*(t[1][0]+t[2][0]),.5*(t[1][1]+t[2][1])],r=[.5*(t[2][0]+t[3][0]),.5*(t[2][1]+t[3][1])],n=[.5*((s=[.5*(e[0]+i[0]),.5*(e[1]+i[1])])[0]+(o=[.5*(i[0]+r[0]),.5*(i[1]+r[1])])[0]),.5*(s[1]+o[1])],[[t[0],e,s,n],[n,o,r,t[3]]]},_bezierBbox:function(t){var e=[];return 4===t.length?(e[0]=Math.min(t[0][0],t[1][0],t[2][0],t[3][0]),e[1]=Math.max(t[0][1],t[1][1],t[2][1],t[3][1]),e[2]=Math.max(t[0][0],t[1][0],t[2][0],t[3][0]),e[3]=Math.min(t[0][1],t[1][1],t[2][1],t[3][1])):(e[0]=Math.min(t[0][0],t[1][0]),e[1]=Math.max(t[0][1],t[1][1]),e[2]=Math.max(t[0][0],t[1][0]),e[3]=Math.min(t[0][1],t[1][1])),e},_bezierOverlap:function(t,e){return t[2]>=e[0]&&t[0]<=e[2]&&t[1]>=e[3]&&t[3]<=e[1]},_bezierListConcat:function(t,e,i,r){var s,o=h.Z.exists(r),n=0,a=e.length,l=t.length;for(l>0&&a>0&&(1===t[l-1][1]&&0===e[0][1]||o&&1===t[l-1][2]&&0===e[0][2])&&(n=1),s=n;s<a;s++)o&&(e[s][2]*=.5,e[s][2]+=r),e[s][1]*=.5,e[s][1]+=i,t.push(e[s])},_bezierMeetSubdivision:function(t,e,i){var r,s,o,n,a,h,l,c,d,u,p,f,_=[];return s=this._bezierBbox(e),r=this._bezierBbox(t),this._bezierOverlap(s,r)?i<5?(h=(o=this._bezierSplit(t))[0],l=o[1],n=(o=this._bezierSplit(e))[0],a=o[1],this._bezierListConcat(_,this._bezierMeetSubdivision(h,n,i+1),0,0),this._bezierListConcat(_,this._bezierMeetSubdivision(h,a,i+1),0,.5),this._bezierListConcat(_,this._bezierMeetSubdivision(l,n,i+1),.5,0),this._bezierListConcat(_,this._bezierMeetSubdivision(l,a,i+1),.5,.5),_):(p=[1].concat(t[0]),f=[1].concat(t[3]),d=[1].concat(e[0]),u=[1].concat(e[3]),(c=this.meetSegmentSegment(p,f,d,u))[1]>=0&&c[2]>=0&&c[1]<=1&&c[2]<=1?[c]:[]):[]},_bezierLineMeetSubdivision:function(t,e,i,r){var s,o,n,a,h,l,c,d,u,p,f=[];return s=this._bezierBbox(e),o=this._bezierBbox(t),r&&!this._bezierOverlap(o,s)?[]:i<5?(a=(n=this._bezierSplit(t))[0],h=n[1],this._bezierListConcat(f,this._bezierLineMeetSubdivision(a,e,i+1),0),this._bezierListConcat(f,this._bezierLineMeetSubdivision(h,e,i+1),.5),f):(u=[1].concat(t[0]),p=[1].concat(t[3]),c=[1].concat(e[0]),d=[1].concat(e[1]),(l=this.meetSegmentSegment(u,p,c,d))[1]>=0&&l[1]<=1&&(!r||l[2]>=0&&l[2]<=1)?[l]:[])},meetBeziersegmentBeziersegment:function(t,e,i){var r,s,o;for((r=4===t.length&&4===e.length?this._bezierMeetSubdivision(t,e,0):this._bezierLineMeetSubdivision(t,e,0,i)).sort((function(t,e){return 1e7*(t[1]-e[1])+(t[2]-e[2])})),s=[],o=0;o<r.length;o++)0!==o&&r[o][1]===r[o-1][1]&&r[o][2]===r[o-1][2]||s.push(r[o]);return s},meetBezierCurveRedBlueSegments:function(t,e,i){var r,o,a,l,c,d,u,p,f,_,m,g,b,v=h.Z.evaluate(i),Z=0,C=0,y=[];if(e.numberPoints<e.bezierDegree+1||t.numberPoints<t.bezierDegree+1)return[0,NaN,NaN];for(1===t.bezierDegree&&3===e.bezierDegree&&(d=t,t=e,e=d),g=e.numberPoints-e.bezierDegree,b=t.numberPoints-t.bezierDegree,t.type===s.Z.OBJECT_TYPE_SECTOR&&(Z=3,b-=3),e.type===s.Z.OBJECT_TYPE_SECTOR&&(C=3,g-=3),o=Z;o<b;o+=t.bezierDegree)for(u=[(r=t.points)[o].usrCoords.slice(1),r[o+1].usrCoords.slice(1)],3===t.bezierDegree&&(u[2]=r[o+2].usrCoords.slice(1),u[3]=r[o+3].usrCoords.slice(1)),f=this._bezierBbox(u),a=C;a<g;a+=e.bezierDegree)if(p=[(r=e.points)[a].usrCoords.slice(1),r[a+1].usrCoords.slice(1)],3===e.bezierDegree&&(p[2]=r[a+2].usrCoords.slice(1),p[3]=r[a+3].usrCoords.slice(1)),_=this._bezierBbox(p),this._bezierOverlap(f,_)){if(0===(m=this.meetBeziersegmentBeziersegment(u,p)).length)continue;for(l=0;l<m.length;l++)(c=m[l])[1]<-n.Z.eps||c[1]>1+n.Z.eps||c[2]<-n.Z.eps||c[2]>1+n.Z.eps||y.push(c);if(y.length>v)return y[v][0]}return y.length>v?y[v][0]:[0,NaN,NaN]},bezierSegmentEval:function(t,e){var i,r,s,o=1-t;return r=0,s=0,r+=(i=o*o*o)*e[0][0],s+=i*e[0][1],r+=(i=3*t*o*o)*e[1][0],s+=i*e[1][1],r+=(i=3*t*t*o)*e[2][0],s+=i*e[2][1],[1,r+=(i=t*t*t)*e[3][0],s+=i*e[3][1]]},bezierArc:function(t,e,i,r,s){var o,a,l,c,d,u,p,f,_,m,g,b,v,Z,C,y,P,E=.5*Math.PI,O=e[1],x=e[2],S=e[0],M=[],w=[];for(d=this.distance(e,t),O/=S,x/=S,u=this.rad(t.slice(1),e.slice(1),i.slice(1)),-1===s&&(u=2*Math.PI-u),(o=t)[1]/=o[0],o[2]/=o[0],o[0]/=o[0],c=o.slice(0),r?(M=[O,O+.333*(o[1]-O),O+.666*(o[1]-O),o[1]],w=[x,x+.333*(o[2]-x),x+.666*(o[2]-x),o[2]]):(M=[o[1]],w=[o[2]]);u>n.Z.eps;)u>E?(p=E,u-=E):(p=u,u=0),P=[[1,0,0],[O*(1-(f=Math.cos(s*p)))+x*(_=Math.sin(s*p)),f,-_],[x*(1-f)-O*_,_,f]],c=[(C=n.Z.matVecMult(P,o))[0]/C[0],C[1]/C[0],C[2]/C[0]],m=o[1]-O,g=o[2]-x,b=c[1]-O,v=c[2]-x,y=n.Z.hypot(m+b,g+v),Z=Math.abs(v-g)>n.Z.eps?(m+b)*(d/y-.5)/(v-g)*8/3:(g+v)*(d/y-.5)/(m-b)*8/3,a=[1,o[1]-Z*g,o[2]+Z*m],l=[1,c[1]+Z*v,c[2]-Z*b],h.Z.concat(M,[a[1],l[1],c[1]]),h.Z.concat(w,[a[2],l[2],c[2]]),o=c.slice(0);return r&&(h.Z.concat(M,[c[1]+.333*(O-c[1]),c[1]+.666*(O-c[1]),O]),h.Z.concat(w,[c[2]+.333*(x-c[2]),c[2]+.666*(x-c[2]),x])),[M,w]},projectPointToCircle:function(t,e,i){var r,a,l,c,d,u=e.center.coords.usrCoords;return h.Z.exists(i)||(i=t.board),h.Z.isPoint(t)?(r=t.coords.distance(s.Z.COORDS_BY_USER,e.center.coords),a=t.coords.usrCoords):(r=t.distance(s.Z.COORDS_BY_USER,e.center.coords),a=t.usrCoords),Math.abs(r)<n.Z.eps&&(r=n.Z.eps),d=e.Radius()/r,l=u[1]+d*(a[1]-u[1]),c=u[2]+d*(a[2]-u[2]),new o.Z(s.Z.COORDS_BY_USER,[l,c],i)},projectPointToLine:function(t,e,i){var r,a=[0,e.stdform[1],e.stdform[2]];return h.Z.exists(i)||(i=h.Z.exists(t.coords)?t.board:e.board),r=h.Z.exists(t.coords)?t.coords.usrCoords:t.usrCoords,a=n.Z.crossProduct(a,r),new o.Z(s.Z.COORDS_BY_USER,n.Z.crossProduct(a,e.stdform),i)},projectCoordsToSegment:function(t,e,i){var r,s=[i[1]-e[1],i[2]-e[2]],o=[t[1]-e[1],t[2]-e[2]];return Math.abs(s[0])<n.Z.eps&&Math.abs(s[1])<n.Z.eps?[e,0]:(r=n.Z.innerProduct(o,s),[[1,(r/=n.Z.innerProduct(s,s))*s[0]+e[1],r*s[1]+e[2]],r])},projectCoordsToBeziersegment:function(t,e,i){var s;return s=r.Z.Math.Numerics.fminbr((function(r){var s=[1,e.X(i+r),e.Y(i+r)];return s[1]-=t[1],s[2]-=t[2],s[1]*s[1]+s[2]*s[2]}),[0,1]),[[1,e.X(s+i),e.Y(s+i)],s]},projectPointToCurve:function(t,e,i){h.Z.exists(i)||(i=t.board);var r=t.X(),s=t.Y(),o=t.position||0;return this.projectCoordsToCurve(r,s,o,e,i)},projectCoordsToCurve:function(t,e,i,r,n){var l,c,d,u,p,f,_,m,g,b,v,Z,C,y,P,E,O,x,S,M,w,T,N=Number.POSITIVE_INFINITY;if(h.Z.exists(n)||(n=r.board),"plot"===h.Z.evaluate(r.visProp.curvetype)){if(i=0,p=N,l=0===r.numberPoints?[0,1,1]:[r.Z(0),r.X(0),r.Y(0)],r.numberPoints>1)for(m=[1,t,e],3===r.bezierDegree?u=0:v=[r.Z(0),r.X(0),r.Y(0)],d=0;d<r.numberPoints-1;d++)3===r.bezierDegree?C=this.projectCoordsToBeziersegment(m,r,u):(Z=[r.Z(d+1),r.X(d+1),r.Y(d+1)],C=this.projectCoordsToSegment(m,v,Z)),_=C[1],g=C[0],0<=_&&_<=1?(f=this.distance(g,m),b=d+_):_<0?(g=v,f=this.distance(v,m),b=d):_>1&&d===r.numberPoints-2&&(g=Z,f=this.distance(g,m),b=r.numberPoints-1),f<p&&(p=f,i=b,l=g),3===r.bezierDegree?(u++,d+=2):v=Z;c=new o.Z(s.Z.COORDS_BY_USER,l,n)}else{for(y=function(i){var s,o;return i<r.minX()||i>r.maxX()?1/0:(s=t-r.X(i))*s+(o=e-r.Y(i))*o},O=y(i),50,w=r.minX(),x=((T=r.maxX())-w)/50,P=w,d=0;d<50;d++)((E=y(P))<O||O===1/0||isNaN(O))&&(i=P,O=E),P+=x;for(S=x,d=0;d<20&&isNaN(y(i-S));d++,S*=.5);for(isNaN(y(i-S))&&(S=0),M=x,d=0;d<20&&isNaN(y(i+M));d++,M*=.5);isNaN(y(i+M))&&(M=0),i=(i=(i=a.Z.fminbr(y,[Math.max(i-S,w),Math.min(i+M,T)]))<w?w:i)>T?T:i,c=new o.Z(s.Z.COORDS_BY_USER,[r.X(i),r.Y(i)],n)}return[r.updateTransform(c),i]},projectCoordsToPolygon:function(t,e){var i,s,o,n,a,h=e.vertices.length,l=1/0;for(i=0;i<h-1;i++)0<=(o=r.Z.Math.Geometry.projectCoordsToSegment(t,e.vertices[i].coords.usrCoords,e.vertices[i+1].coords.usrCoords))[1]&&o[1]<=1?(s=r.Z.Math.Geometry.distance(o[0],t,3),n=o[0]):o[1]<0?(s=r.Z.Math.Geometry.distance(e.vertices[i].coords.usrCoords,t,3),n=e.vertices[i].coords.usrCoords):(s=r.Z.Math.Geometry.distance(e.vertices[i+1].coords.usrCoords,t,3),n=e.vertices[i+1].coords.usrCoords),s<l&&(a=n.slice(0),l=s);return a},projectPointToTurtle:function(t,e,i){var r,n,a,l,c,d,u,p,f,_,m=0,g=0,b=Number.POSITIVE_INFINITY,v=e.objects.length;for(h.Z.exists(i)||(i=t.board),c=0;c<v;c++)(u=e.objects[c]).elementClass===s.Z.OBJECT_CLASS_CURVE&&(r=(f=this.projectPointToCurve(t,u))[0],_=f[1],(d=this.distance(r.usrCoords,t.coords.usrCoords))<b&&(a=r.usrCoords[1],l=r.usrCoords[2],n=_,b=d,p=u,g=m),m+=u.numberPoints);return r=new o.Z(s.Z.COORDS_BY_USER,[a,l],i),[p.updateTransform(r),n+g]},projectPointToPoint:function(t,e){return e.coords},projectPointToBoard:function(t,e){var i,r,s,o=e||t.board,a=[[1,1,0,0,3,0,1],[-1,2,1,0,1,2,1],[-1,1,2,2,1,2,3],[1,2,3,0,3,2,3]],h=t.coords||t,l=o.getBoundingBox();for(i=0;i<4;i++)(s=a[i])[0]*h.usrCoords[s[1]]<s[0]*l[s[2]]&&((r=n.Z.crossProduct([1,l[s[3]],l[s[4]]],[1,l[s[5]],l[s[6]]]))[3]=0,r=n.Z.normalize(r),h=this.projectPointToLine({coords:h},{stdform:r},o));return h},projectCoordsToParametric:function(t,e,i){var r,s,o,a=i.length;return 1===a?r=.1*(e.range[1]-e.range[0]):2===a&&(r=.1*Math.min(e.range_u[1]-e.range_u[0],e.range_v[1]-e.range_v[0])),s=r/5e6,o=function(i,r,s,o){var n=t[0]-e.X.apply(null,s),a=t[1]-e.Y.apply(null,s),h=t[2]-e.Z.apply(null,s);return 1===i?(o[0]=s[0]-e.range[0],o[1]=-s[0]+e.range[1]):2===i&&(o[0]=s[0]-e.range_u[0],o[1]=-s[0]+e.range_u[1],o[2]=s[1]-e.range_v[0],o[3]=-s[1]+e.range_v[1]),n*n+a*a+h*h},n.Z.Nlp.FindMinimum(o,a,2*a,i,r,s,0,200),[1,e.X.apply(null,i),e.Y.apply(null,i),e.Z.apply(null,i)]},projectScreenCoordsToParametric:function(t,e,i){var r,s,o,a=i.length;return 1===a?r=.1*(e.range[1]-e.range[0]):2===a&&(r=.1*Math.min(e.range_u[1]-e.range_u[0],e.range_v[1]-e.range_v[0])),s=r/5e6,o=function(i,r,s,o){var n=[1,e.X.apply(null,s),e.Y.apply(null,s),e.Z.apply(null,s)],a=e.view.project3DTo2D(n),h=t[0]-a[1],l=t[1]-a[2];return 1===i?(o[0]=s[0]-e.range[0],o[1]=-s[0]+e.range[1]):2===i&&(o[0]=s[0]-e.range_u[0],o[1]=-s[0]+e.range_u[1],o[2]=s[1]-e.range_v[0],o[3]=-s[1]+e.range_v[1]),h*h+l*l},n.Z.Nlp.FindMinimum(o,a,2*a,i,r,s,0,200),[1,e.X.apply(null,i),e.Y.apply(null,i),e.Z.apply(null,i)]},distPointLine:function(t,e){var i,r=e[1],s=e[2],o=e[0];return Math.abs(r)+Math.abs(s)<n.Z.eps?Number.POSITIVE_INFINITY:(i=r*t[1]+s*t[2]+o,r*=r,s*=s,Math.abs(i)/Math.sqrt(r+s))},distPointSegment:function(t,e,i){var r,s,o,a,h,l,c=n.Z.eps*n.Z.eps,d=1e6;return r=(r=t[1]-e[1])===1/0?d:r===-1/0?-d:r,s=(s=t[2]-e[2])===1/0?d:s===-1/0?-d:s,(h=(o=(o=i[1]-e[1])===1/0?d:o===-1/0?-d:o)*o+(a=(a=i[2]-e[2])===1/0?d:a===-1/0?-d:a)*a)>c&&((l=(r*o+s*a)/h)<0?l=0:l>1&&(l=1),r-=l*o,s-=l*a),n.Z.hypot(r,s)},reuleauxPolygon:function(t,e){var i,r=2*Math.PI,s=r/e,o=(e-1)/2,a=0,h=function(h,l){return function(c,d){var u=(c%r+r)%r,p=Math.floor(u/s)%e;return d||(a=t[0].Dist(t[o]),i=n.Z.Geometry.rad([t[0].X()+1,t[0].Y()],t[0],t[o%e])),isNaN(p)?p:(u=.5*u+p*s*.5+i,t[p][h]()+a*Math[l](u))}};return[h("X","cos"),h("Y","sin"),0,r]},meet3Planes:function(t,e,i,r,s,o){var a,h,l,c,d,u=[0,0,0];for(a=n.Z.crossProduct(s,t),h=n.Z.crossProduct(t,i),l=n.Z.crossProduct(i,s),c=n.Z.innerProduct(t,l,3),d=0;d<3;d++)u[d]=(e*l[d]+r*a[d]+o*h[d])/c;return u},meetPlanePlane:function(t,e,i,r){var s,o,a,l=[0,0,0],c=[0,0,0];for(s=0;s<3;s++)l[s]=h.Z.evaluate(t[s]),c[s]=h.Z.evaluate(e[s]);for(o=n.Z.crossProduct(l,c),s=0;s<3;s++)l[s]=h.Z.evaluate(i[s]),c[s]=h.Z.evaluate(r[s]);return a=n.Z.crossProduct(l,c),n.Z.crossProduct(o,a)},project3DTo3DPlane:function(t,e,i){var r,s;return i=i||[0,0,0],r=n.Z.norm(e),s=(n.Z.innerProduct(t,e,3)-n.Z.innerProduct(i,e,3))/r,n.Z.axpy(-s,e,t)},getPlaneBounds:function(t,e,i,r,s){var o,n,h,l,c;return t[2]+e[0]!==0?(h=[[t[0],e[0]],[t[1],e[1]]],l=[r-i[0],r-i[1]],o=(c=a.Z.Gauss(h,l))[0],n=c[1],l=[s-i[0],s-i[1]],[o,(c=a.Z.Gauss(h,l))[0],n,c[1]]):null}}),e.Z=n.Z.Geometry},785:function(t,e,i){var r=i(765),s=i(275),o=i(109);r.Z.Math.DoubleBits=function(){var t,e,i,r,s,o,n,a,h=new Float64Array(1),l=new Uint32Array(h.buffer);void 0!==Float64Array&&(h[0]=1,!0,1072693248===l[1]?(t=function(t){return h[0]=t,[l[0],l[1]]},e=function(t,e){return l[0]=t,l[1]=e,h[0]},i=function(t){return h[0]=t,l[0]},r=function(t){return h[0]=t,l[1]},this.doubleBits=t,this.pack=e,this.lo=i,this.hi=r):1072693248===l[0]&&(s=function(t){return h[0]=t,[l[1],l[0]]},o=function(t,e){return l[1]=t,l[0]=e,h[0]},n=function(t){return h[0]=t,l[1]},a=function(t){return h[0]=t,l[0]},this.doubleBits=s,this.pack=o,this.lo=n,this.hi=a))},r.Z.extend(r.Z.Math.DoubleBits.prototype,{sign:function(t){return this.hi(t)>>>31},exponent:function(t){return(this.hi(t)<<1>>>21)-1023},fraction:function(t){var e=this.lo(t),i=this.hi(t),r=1048575&i;return 2146435072&i&&(r+=1<<20),[e,r]},denormalized:function(t){return!(2146435072&this.hi(t))}});var n=new r.Z.Math.DoubleBits,a=function(t,e){if(void 0!==t&&void 0!==e){if(s.Z.IntervalArithmetic.isInterval(t)){if(!s.Z.IntervalArithmetic.isSingleton(t))throw new TypeError("JXG.Math.IntervalArithmetic: interval `lo` must be a singleton");this.lo=t.lo}else this.lo=t;if(s.Z.IntervalArithmetic.isInterval(e)){if(!s.Z.IntervalArithmetic.isSingleton(e))throw new TypeError("JXG.Math.IntervalArithmetic: interval `hi` must be a singleton");this.hi=e.hi}else this.hi=e}else{if(void 0!==t)return Array.isArray(t)?new a(t[0],t[1]):new a(t,t);this.lo=this.hi=0}};r.Z.extend(a.prototype,{print:function(){console.log("[",this.lo,this.hi,"]")},set:function(t,e){return this.lo=t,this.hi=e,this},bounded:function(t,e){return this.set(s.Z.IntervalArithmetic.prev(t),s.Z.IntervalArithmetic.next(e))},boundedSingleton:function(t){return this.bounded(t,t)},assign:function(t,e){if("number"!=typeof t||"number"!=typeof e)throw new TypeError("JXG.Math.Interval#assign: arguments must be numbers");return isNaN(t)||isNaN(e)||t>e?this.setEmpty():this.set(t,e)},setEmpty:function(){return this.set(Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY)},setWhole:function(){return this.set(Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY)},open:function(t,e){return this.assign(s.Z.IntervalArithmetic.next(t),s.Z.IntervalArithmetic.prev(e))},halfOpenLeft:function(t,e){return this.assign(s.Z.IntervalArithmetic.next(t),e)},halfOpenRight:function(t,e){return this.assign(t,s.Z.IntervalArithmetic.prev(e))},toArray:function(){return[this.lo,this.hi]},clone:function(){return(new a).set(this.lo,this.hi)}}),r.Z.Math.IntervalArithmetic={Interval:function(t,e){return new a(t,e)},isInterval:function(t){return null!==t&&"object"==typeof t&&"number"==typeof t.lo&&"number"==typeof t.hi},isSingleton:function(t){return t.lo===t.hi},add:function(t,e){return o.Z.isNumber(t)&&(t=this.Interval(t)),o.Z.isNumber(e)&&(e=this.Interval(e)),new a(this.addLo(t.lo,e.lo),this.addHi(t.hi,e.hi))},sub:function(t,e){return o.Z.isNumber(t)&&(t=this.Interval(t)),o.Z.isNumber(e)&&(e=this.Interval(e)),new a(this.subLo(t.lo,e.hi),this.subHi(t.hi,e.lo))},mul:function(t,e){var i,r,s,n,h;return o.Z.isNumber(t)&&(t=this.Interval(t)),o.Z.isNumber(e)&&(e=this.Interval(e)),this.isEmpty(t)||this.isEmpty(e)?this.EMPTY.clone():(i=t.lo,r=t.hi,s=e.lo,n=e.hi,h=new a,i<0?r>0?s<0?n>0?(h.lo=Math.min(this.mulLo(i,n),this.mulLo(r,s)),h.hi=Math.max(this.mulHi(i,s),this.mulHi(r,n))):(h.lo=this.mulLo(r,s),h.hi=this.mulHi(i,s)):n>0?(h.lo=this.mulLo(i,n),h.hi=this.mulHi(r,n)):(h.lo=0,h.hi=0):s<0?n>0?(h.lo=this.mulLo(i,n),h.hi=this.mulHi(i,s)):(h.lo=this.mulLo(r,n),h.hi=this.mulHi(i,s)):n>0?(h.lo=this.mulLo(i,n),h.hi=this.mulHi(r,s)):(h.lo=0,h.hi=0):r>0?s<0?n>0?(h.lo=this.mulLo(r,s),h.hi=this.mulHi(r,n)):(h.lo=this.mulLo(r,s),h.hi=this.mulHi(i,n)):n>0?(h.lo=this.mulLo(i,s),h.hi=this.mulHi(r,n)):(h.lo=0,h.hi=0):(h.lo=0,h.hi=0),h)},div:function(t,e){return o.Z.isNumber(t)&&(t=this.Interval(t)),o.Z.isNumber(e)&&(e=this.Interval(e)),this.isEmpty(t)||this.isEmpty(e)?this.EMPTY.clone():this.zeroIn(e)?0!==e.lo?0!==e.hi?this.divZero(t):this.divNegative(t,e.lo):0!==e.hi?this.divPositive(t,e.hi):this.EMPTY.clone():this.divNonZero(t,e)},positive:function(t){return new a(t.lo,t.hi)},negative:function(t){return o.Z.isNumber(t)?new a(-t):new a(-t.hi,-t.lo)},isEmpty:function(t){return t.lo>t.hi},isWhole:function(t){return t.lo===-1/0&&t.hi===1/0},zeroIn:function(t){return this.hasValue(t,0)},hasValue:function(t,e){return!this.isEmpty(t)&&(t.lo<=e&&e<=t.hi)},hasInterval:function(t,e){return!!this.isEmpty(t)||!this.isEmpty(e)&&e.lo<=t.lo&&t.hi<=e.hi},intervalsOverlap:function(t,e){return!this.isEmpty(t)&&!this.isEmpty(e)&&(t.lo<=e.lo&&e.lo<=t.hi||e.lo<=t.lo&&t.lo<=e.hi)},divNonZero:function(t,e){var i=t.lo,r=t.hi,s=e.lo,o=e.hi,n=new a;return r<0?o<0?(n.lo=this.divLo(r,s),n.hi=this.divHi(i,o)):(n.lo=this.divLo(i,s),n.hi=this.divHi(r,o)):i<0?o<0?(n.lo=this.divLo(r,o),n.hi=this.divHi(i,o)):(n.lo=this.divLo(i,s),n.hi=this.divHi(r,s)):o<0?(n.lo=this.divLo(r,o),n.hi=this.divHi(i,s)):(n.lo=this.divLo(i,o),n.hi=this.divHi(r,s)),n},divPositive:function(t,e){return 0===t.lo&&0===t.hi?t:this.zeroIn(t)?this.WHOLE:t.hi<0?new a(Number.NEGATIVE_INFINITY,this.divHi(t.hi,e)):new a(this.divLo(t.lo,e),Number.POSITIVE_INFINITY)},divNegative:function(t,e){return 0===t.lo&&0===t.hi?t:this.zeroIn(t)?this.WHOLE:t.hi<0?new a(this.divLo(t.hi,e),Number.POSITIVE_INFINITY):new a(Number.NEGATIVE_INFINITY,this.divHi(t.lo,e))},divZero:function(t){return 0===t.lo&&0===t.hi?t:this.WHOLE},fmod:function(t,e){var i,r;return o.Z.isNumber(t)&&(t=this.Interval(t)),o.Z.isNumber(e)&&(e=this.Interval(e)),this.isEmpty(t)||this.isEmpty(e)?this.EMPTY.clone():(i=t.lo<0?e.lo:e.hi,r=(r=t.lo/i)<0?Math.ceil(r):Math.floor(r),this.sub(t,this.mul(e,new a(r))))},multiplicativeInverse:function(t){return o.Z.isNumber(t)&&(t=this.Interval(t)),this.isEmpty(t)?this.EMPTY.clone():this.zeroIn(t)?0!==t.lo?0!==t.hi?this.WHOLE:new a(Number.NEGATIVE_INFINITY,this.divHi(1,t.lo)):0!==t.hi?new a(this.divLo(1,t.hi),Number.POSITIVE_INFINITY):this.EMPTY.clone():new a(this.divLo(1,t.hi),this.divHi(1,t.lo))},pow:function(t,e){var i,r;if(o.Z.isNumber(t)&&(t=this.Interval(t)),this.isEmpty(t))return this.EMPTY.clone();if(this.isInterval(e)){if(!this.isSingleton(e))return this.EMPTY.clone();e=e.lo}return 0===e?0===t.lo&&0===t.hi?this.EMPTY.clone():this.ONE.clone():e<0?this.pow(this.multiplicativeInverse(t),-e):e%1==0?t.hi<0?(i=this.powLo(-t.hi,e),r=this.powHi(-t.lo,e),1==(1&e)?new a(-r,-i):new a(i,r)):t.lo<0?1==(1&e)?new a(-this.powLo(-t.lo,e),this.powHi(t.hi,e)):new a(0,this.powHi(Math.max(-t.lo,t.hi),e)):new a(this.powLo(t.lo,e),this.powHi(t.hi,e)):(console.warn("power is not an integer, you should use nth-root instead, returning an empty interval"),this.EMPTY.clone())},sqrt:function(t){return o.Z.isNumber(t)&&(t=this.Interval(t)),this.nthRoot(t,2)},nthRoot:function(t,e){var i,r,s,n,h;if(o.Z.isNumber(t)&&(t=this.Interval(t)),this.isEmpty(t)||e<0)return this.EMPTY.clone();if(this.isInterval(e)){if(!this.isSingleton(e))return this.EMPTY.clone();e=e.lo}return i=1/e,t.hi<0?e%1==0&&1==(1&e)?(r=this.powHi(-t.lo,i),s=this.powLo(-t.hi,i),new a(-r,-s)):this.EMPTY.clone():t.lo<0?(n=this.powHi(t.hi,i),e%1==0&&1==(1&e)?(h=-this.powHi(-t.lo,i),new a(h,n)):new a(0,n)):new a(this.powLo(t.lo,i),this.powHi(t.hi,i))},exp:function(t){return o.Z.isNumber(t)&&(t=this.Interval(t)),this.isEmpty(t)?this.EMPTY.clone():new a(this.expLo(t.lo),this.expHi(t.hi))},log:function(t){var e;return o.Z.isNumber(t)&&(t=this.Interval(t)),this.isEmpty(t)?this.EMPTY.clone():(e=t.lo<=0?Number.NEGATIVE_INFINITY:this.logLo(t.lo),new a(e,this.logHi(t.hi)))},ln:function(t){return this.log(t)},log10:function(t){return this.isEmpty(t)?this.EMPTY.clone():this.div(this.log(t),this.log(new a(10,10)))},log2:function(t){return this.isEmpty(t)?this.EMPTY.clone():this.div(this.log(t),this.log(new a(2,2)))},hull:function(t,e){var i=this.isEmpty(t),r=this.isEmpty(e);return i&&r?this.EMPTY.clone():i?e.clone():r?t.clone():new a(Math.min(t.lo,e.lo),Math.max(t.hi,e.hi))},intersection:function(t,e){var i,r;return this.isEmpty(t)||this.isEmpty(e)?this.EMPTY.clone():(i=Math.max(t.lo,e.lo))<=(r=Math.min(t.hi,e.hi))?new a(i,r):this.EMPTY.clone()},union:function(t,e){if(!this.intervalsOverlap(t,e))throw new Error("Interval#unions do not overlap");return new a(Math.min(t.lo,e.lo),Math.max(t.hi,e.hi))},difference:function(t,e){if(this.isEmpty(t)||this.isWhole(e))return this.EMPTY.clone();if(this.intervalsOverlap(t,e)){if(t.lo<e.lo&&e.hi<t.hi)throw new Error("Interval.difference: difference creates multiple intervals");return e.lo<=t.lo&&e.hi===1/0||e.hi>=t.hi&&e.lo===-1/0?this.EMPTY.clone():e.lo<=t.lo?(new a).halfOpenLeft(e.hi,t.hi):(new a).halfOpenRight(t.lo,e.lo)}return t.clone()},width:function(t){return this.isEmpty(t)?0:this.subHi(t.hi,t.lo)},abs:function(t){return o.Z.isNumber(t)&&(t=this.Interval(t)),this.isEmpty(t)?this.EMPTY.clone():t.lo>=0?t.clone():t.hi<=0?this.negative(t):new a(0,Math.max(-t.lo,t.hi))},max:function(t,e){var i=this.isEmpty(t),r=this.isEmpty(e);return i&&r?this.EMPTY.clone():i?e.clone():r?t.clone():new a(Math.max(t.lo,e.lo),Math.max(t.hi,e.hi))},min:function(t,e){var i=this.isEmpty(t),r=this.isEmpty(e);return i&&r?this.EMPTY.clone():i?e.clone():r?t.clone():new a(Math.min(t.lo,e.lo),Math.min(t.hi,e.hi))},onlyInfinity:function(t){return!isFinite(t.lo)&&t.lo===t.hi},_handleNegative:function(t){var e;return t.lo<0&&(t.lo===-1/0?(t.lo=0,t.hi=1/0):(e=Math.ceil(-t.lo/this.piTwiceLow),t.lo+=this.piTwiceLow*e,t.hi+=this.piTwiceLow*e)),t},cos:function(t){var e,i,r,s,o,n,h,l;return this.isEmpty(t)||this.onlyInfinity(t)?this.EMPTY.clone():(e=(new a).set(t.lo,t.hi),this._handleNegative(e),i=this.PI_TWICE,r=this.fmod(e,i),this.width(r)>=i.lo?new a(-1,1):r.lo>=this.piHigh?(s=this.cos(this.sub(r,this.PI)),this.negative(s)):(o=r.lo,n=r.hi,h=this.cosLo(n),l=this.cosHi(o),n<=this.piLow?new a(h,l):n<=i.lo?new a(-1,Math.max(h,l)):new a(-1,1)))},sin:function(t){return this.isEmpty(t)||this.onlyInfinity(t)?this.EMPTY.clone():this.cos(this.sub(t,this.PI_HALF))},tan:function(t){var e,i,r;return this.isEmpty(t)||this.onlyInfinity(t)?this.EMPTY.clone():(e=(new a).set(t.lo,t.hi),this._handleNegative(e),r=this.PI,(i=this.fmod(e,r)).lo>=this.piHalfLow&&(i=this.sub(i,r)),i.lo<=-this.piHalfLow||i.hi>=this.piHalfLow?this.WHOLE.clone():new a(this.tanLo(i.lo),this.tanHi(i.hi)))},asin:function(t){var e,i;return this.isEmpty(t)||t.hi<-1||t.lo>1?this.EMPTY.clone():(e=t.lo<=-1?-this.piHalfHigh:this.asinLo(t.lo),i=t.hi>=1?this.piHalfHigh:this.asinHi(t.hi),new a(e,i))},acos:function(t){var e,i;return this.isEmpty(t)||t.hi<-1||t.lo>1?this.EMPTY.clone():(e=t.hi>=1?0:this.acosLo(t.hi),i=t.lo<=-1?this.piHigh:this.acosHi(t.lo),new a(e,i))},acot:function(t){return this.isEmpty(t)?this.EMPTY.clone():new a(this.acotLo(t.lo),this.acotHi(t.hi))},atan:function(t){return this.isEmpty(t)?this.EMPTY.clone():new a(this.atanLo(t.lo),this.atanHi(t.hi))},sinh:function(t){return this.isEmpty(t)?this.EMPTY.clone():new a(this.sinhLo(t.lo),this.sinhHi(t.hi))},cosh:function(t){return this.isEmpty(t)?this.EMPTY.clone():t.hi<0?new a(this.coshLo(t.hi),this.coshHi(t.lo)):t.lo>=0?new a(this.coshLo(t.lo),this.coshHi(t.hi)):new a(1,this.coshHi(-t.lo>t.hi?t.lo:t.hi))},tanh:function(t){return this.isEmpty(t)?this.EMPTY.clone():new a(this.tanhLo(t.lo),this.tanhHi(t.hi))},equal:function(t,e){return this.isEmpty(t)?this.isEmpty(e):!this.isEmpty(e)&&t.lo===e.lo&&t.hi===e.hi},notEqual:function(t,e){return this.isEmpty(t)?!this.isEmpty(e):this.isEmpty(e)||t.hi<e.lo||t.lo>e.hi},lt:function(t,e){return o.Z.isNumber(t)&&(t=this.Interval(t)),o.Z.isNumber(e)&&(e=this.Interval(e)),!this.isEmpty(t)&&!this.isEmpty(e)&&t.hi<e.lo},gt:function(t,e){return o.Z.isNumber(t)&&(t=this.Interval(t)),o.Z.isNumber(e)&&(e=this.Interval(e)),!this.isEmpty(t)&&!this.isEmpty(e)&&t.lo>e.hi},leq:function(t,e){return o.Z.isNumber(t)&&(t=this.Interval(t)),o.Z.isNumber(e)&&(e=this.Interval(e)),!this.isEmpty(t)&&!this.isEmpty(e)&&t.hi<=e.lo},geq:function(t,e){return o.Z.isNumber(t)&&(t=this.Interval(t)),o.Z.isNumber(e)&&(e=this.Interval(e)),!this.isEmpty(t)&&!this.isEmpty(e)&&t.lo>=e.hi},piLow:3.141592653589793,piHigh:3.1415926535897936,piHalfLow:1.5707963267948966,piHalfHigh:1.5707963267948968,piTwiceLow:6.283185307179586,piTwiceHigh:6.283185307179587,identity:function(t){return t},_prev:function(t){return t===1/0?t:this.nextafter(t,-1/0)},_next:function(t){return t===-1/0?t:this.nextafter(t,1/0)},prev:function(t){return this._prev(t)},next:function(t){return this._next(t)},toInteger:function(t){return t<0?Math.ceil(t):Math.floor(t)},addLo:function(t,e){return this.prev(t+e)},addHi:function(t,e){return this.next(t+e)},subLo:function(t,e){return this.prev(t-e)},subHi:function(t,e){return this.next(t-e)},mulLo:function(t,e){return this.prev(t*e)},mulHi:function(t,e){return this.next(t*e)},divLo:function(t,e){return this.prev(t/e)},divHi:function(t,e){return this.next(t/e)},intLo:function(t){return this.toInteger(this.prev(t))},intHi:function(t){return this.toInteger(this.next(t))},logLo:function(t){return this.prev(Math.log(t))},logHi:function(t){return this.next(Math.log(t))},expLo:function(t){return this.prev(Math.exp(t))},expHi:function(t){return this.next(Math.exp(t))},sinLo:function(t){return this.prev(Math.sin(t))},sinHi:function(t){return this.next(Math.sin(t))},cosLo:function(t){return this.prev(Math.cos(t))},cosHi:function(t){return this.next(Math.cos(t))},tanLo:function(t){return this.prev(Math.tan(t))},tanHi:function(t){return this.next(Math.tan(t))},asinLo:function(t){return this.prev(Math.asin(t))},asinHi:function(t){return this.next(Math.asin(t))},acosLo:function(t){return this.prev(Math.acos(t))},acosHi:function(t){return this.next(Math.acos(t))},acotLo:function(t){return this.prev(s.Z.acot(t))},acotHi:function(t){return this.next(s.Z.acot(t))},atanLo:function(t){return this.prev(Math.atan(t))},atanHi:function(t){return this.next(Math.atan(t))},sinhLo:function(t){return this.prev(s.Z.sinh(t))},sinhHi:function(t){return this.next(s.Z.sinh(t))},coshLo:function(t){return this.prev(s.Z.cosh(t))},coshHi:function(t){return this.next(s.Z.cosh(t))},tanhLo:function(t){return this.prev(s.Z.tanh(t))},tanhHi:function(t){return this.next(s.Z.tanh(t))},sqrtLo:function(t){return this.prev(Math.sqrt(t))},sqrtHi:function(t){return this.next(Math.sqrt(t))},powLo:function(t,e){var i;if(e%1!=0)return this.prev(Math.pow(t,e));for(i=1==(1&e)?t:1,e>>=1;e>0;)t=this.mulLo(t,t),1==(1&e)&&(i=this.mulLo(t,i)),e>>=1;return i},powHi:function(t,e){var i;if(e%1!=0)return this.next(Math.pow(t,e));for(i=1==(1&e)?t:1,e>>=1;e>0;)t=this.mulHi(t,t),1==(1&e)&&(i=this.mulHi(t,i)),e>>=1;return i},disable:function(){this.next=this.prev=this.identity},enable:function(){this.prev=function(t){return this._prev(t)},this.next=function(t){return this._next(t)}},SMALLEST_DENORM:Math.pow(2,-1074),UINT_MAX:-1>>>0,nextafter:function(t,e){var i,r;return isNaN(t)||isNaN(e)?NaN:t===e?t:0===t?e<0?-this.SMALLEST_DENORM:this.SMALLEST_DENORM:(r=n.hi(t),i=n.lo(t),e>t==t>0?i===this.UINT_MAX?(r+=1,i=0):i+=1:0===i?(i=this.UINT_MAX,r-=1):i-=1,n.pack(i,r))}},r.Z.Math.IntervalArithmetic.PI=new a(s.Z.IntervalArithmetic.piLow,s.Z.IntervalArithmetic.piHigh),r.Z.Math.IntervalArithmetic.PI_HALF=new a(s.Z.IntervalArithmetic.piHalfLow,s.Z.IntervalArithmetic.piHalfHigh),r.Z.Math.IntervalArithmetic.PI_TWICE=new a(s.Z.IntervalArithmetic.piTwiceLow,s.Z.IntervalArithmetic.piTwiceHigh),r.Z.Math.IntervalArithmetic.ZERO=new a(0),r.Z.Math.IntervalArithmetic.ONE=new a(1),r.Z.Math.IntervalArithmetic.WHOLE=(new a).setWhole(),r.Z.Math.IntervalArithmetic.EMPTY=(new a).setEmpty(),e.Z=r.Z.Math.IntervalArithmetic},275:function(t,e,i){var r,s=i(765),o=i(109),n=function(t){var e,i;return t.memo||(e={},i=Array.prototype.join,t.memo=function(){var s=i.call(arguments);return e[s]!==r?e[s]:e[s]=t.apply(this,arguments)}),t.memo};s.Z.Math={eps:1e-6,relDif:function(t,e){var i=Math.abs(t),r=Math.abs(e);return 0===(r=Math.max(i,r))?0:Math.abs(t-e)/r},mod:function(t,e){return t-Math.floor(t/e)*e},vector:function(t,e){var i,r;for(e=e||0,i=[],r=0;r<t;r++)i[r]=e;return i},matrix:function(t,e,i){var r,s,o;for(i=i||0,e=e||t,r=[],s=0;s<t;s++)for(r[s]=[],o=0;o<e;o++)r[s][o]=i;return r},identity:function(t,e){var i,s;for(e===r&&"number"!=typeof e&&(e=t),i=this.matrix(t,e),s=0;s<Math.min(t,e);s++)i[s][s]=1;return i},frustum:function(t,e,i,r,s,o){var n=this.matrix(4,4);return n[0][0]=2*s/(e-t),n[0][1]=0,n[0][2]=(e+t)/(e-t),n[0][3]=0,n[1][0]=0,n[1][1]=2*s/(r-i),n[1][2]=(r+i)/(r-i),n[1][3]=0,n[2][0]=0,n[2][1]=0,n[2][2]=-(o+s)/(o-s),n[2][3]=-o*s*2/(o-s),n[3][0]=0,n[3][1]=0,n[3][2]=-1,n[3][3]=0,n},projection:function(t,e,i,r){var s=i*Math.tan(t/2),o=s*e;return this.frustum(-o,o,-s,s,i,r)},matVecMult:function(t,e){var i,r,s,o=t.length,n=e.length,a=[];if(3===n)for(i=0;i<o;i++)a[i]=t[i][0]*e[0]+t[i][1]*e[1]+t[i][2]*e[2];else for(i=0;i<o;i++){for(r=0,s=0;s<n;s++)r+=t[i][s]*e[s];a[i]=r}return a},matMatMult:function(t,e){var i,r,s,o,n=t.length,a=n>0?e[0].length:0,h=e.length,l=this.matrix(n,a);for(i=0;i<n;i++)for(r=0;r<a;r++){for(s=0,o=0;o<h;o++)s+=t[i][o]*e[o][r];l[i][r]=s}return l},transpose:function(t){var e,i,r,s,o;for(s=t.length,o=t.length>0?t[0].length:0,e=this.matrix(o,s),i=0;i<o;i++)for(r=0;r<s;r++)e[i][r]=t[r][i];return e},inverse:function(t){var e,i,r,s,o,n,a,h=t.length,l=[],c=[],d=[];for(e=0;e<h;e++){for(l[e]=[],i=0;i<h;i++)l[e][i]=t[e][i];c[e]=e}for(i=0;i<h;i++){for(o=Math.abs(l[i][i]),n=i,e=i+1;e<h;e++)Math.abs(l[e][i])>o&&(o=Math.abs(l[e][i]),n=e);if(o<=this.eps)return[];if(n>i){for(r=0;r<h;r++)a=l[i][r],l[i][r]=l[n][r],l[n][r]=a;a=c[i],c[i]=c[n],c[n]=a}for(s=1/l[i][i],e=0;e<h;e++)l[e][i]*=s;for(l[i][i]=s,r=0;r<h;r++)if(r!==i){for(e=0;e<h;e++)e!==i&&(l[e][r]-=l[e][i]*l[i][r]);l[i][r]=-s*l[i][r]}}for(e=0;e<h;e++){for(r=0;r<h;r++)d[c[r]]=l[e][r];for(r=0;r<h;r++)l[e][r]=d[r]}return l},innerProduct:function(t,e,i){var s,n=0;for(i!==r&&o.Z.isNumber(i)||(i=t.length),s=0;s<i;s++)n+=t[s]*e[s];return n},crossProduct:function(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]},norm:function(t,e){var i,s=0;for(e!==r&&o.Z.isNumber(e)||(e=t.length),i=0;i<e;i++)s+=t[i]*t[i];return Math.sqrt(s)},axpy:function(t,e,i){var r,s=e.length,o=[];for(r=0;r<s;r++)o[r]=t*e[r]+i[r];return o},factorial:n((function(t){return t<0?NaN:0===(t=Math.floor(t))||1===t?1:t*this.factorial(t-1)})),binomial:n((function(t,e){var i,r;if(e>t||e<0)return NaN;if(e=Math.round(e),t=Math.round(t),0===e||e===t)return 1;for(i=1,r=0;r<e;r++)i*=t-r,i/=r+1;return i})),cosh:Math.cosh||function(t){return.5*(Math.exp(t)+Math.exp(-t))},sinh:Math.sinh||function(t){return.5*(Math.exp(t)-Math.exp(-t))},acosh:Math.acosh||function(t){return Math.log(t+Math.sqrt(t*t-1))},asinh:Math.asinh||function(t){return t===-1/0?t:Math.log(t+Math.sqrt(t*t+1))},cot:function(t){return 1/Math.tan(t)},acot:function(t){return(t>=0?.5:-.5)*Math.PI-Math.atan(t)},nthroot:function(t,e){var i=1/e;return e<=0||Math.floor(e)!==e?NaN:0===t?0:t>0?Math.exp(i*Math.log(t)):e%2==1?-Math.exp(i*Math.log(-t)):NaN},cbrt:Math.cbrt||function(t){return this.nthroot(t,3)},pow:function(t,e){return 0===t?0===e?1:0:Math.floor(e)===e?Math.pow(t,e):t>0?Math.exp(e*Math.log(t)):NaN},ratpow:function(t,e,i){var r;return 0===e?1:0===i?NaN:(r=this.gcd(e,i),this.nthroot(this.pow(t,e/r),i/r))},log10:function(t){return Math.log(t)/Math.log(10)},log2:function(t){return Math.log(t)/Math.log(2)},log:function(t,e){return void 0!==e&&o.Z.isNumber(e)?Math.log(t)/Math.log(e):Math.log(t)},sign:Math.sign||function(t){return 0===(t=+t)||isNaN(t)?t:t>0?1:-1},squampow:function(t,e){var i;if(Math.floor(e)===e){for(i=1,e<0&&(t=1/t,e*=-1);0!==e;)1&e&&(i*=t),e>>=1,t*=t;return i}return this.pow(t,e)},gcd:function(t,e){var i;if(t=Math.abs(t),e=Math.abs(e),!o.Z.isNumber(t)||!o.Z.isNumber(e))return NaN;for(e>t&&(i=t,t=e,e=i);;){if(0===(t%=e))return e;if(0===(e%=t))return t}},lcm:function(t,e){var i;return o.Z.isNumber(t)&&o.Z.isNumber(e)?0!==(i=t*e)?i/this.gcd(t,e):0:NaN},roundToStep:function(t,e,i,r){var n,a,h=t;if(!o.Z.exists(e)&&!o.Z.exists(i)&&!o.Z.exists(r))return h;if(s.Z.exists(r)&&(h=Math.min(h,r)),s.Z.exists(i)&&(h=Math.max(h,i)),a=i||0,s.Z.exists(e)){if(n=(h-a)/e,Number.isInteger(n))return h;h=a+(n=Math.round(n))*e}return s.Z.exists(r)&&(h=Math.min(h,r)),s.Z.exists(i)&&(h=Math.max(h,i)),h},erf:function(t){return this.ProbFuncs.erf(t)},erfc:function(t){return this.ProbFuncs.erfc(t)},erfi:function(t){return this.ProbFuncs.erfi(t)},ndtr:function(t){return this.ProbFuncs.ndtr(t)},ndtri:function(t){return this.ProbFuncs.ndtri(t)},hypot:function(){var t,e,i,r;for(e=arguments.length,t=0,r=0;t<e;t++)r+=(i=arguments[t])*i;return Math.sqrt(r)},hstep:function(t){return t>0?1:t<0?0:.5},gamma:function(t){var e,i,r,s,o,n=[1,676.5203681218851,-1259.1392167224028,771.3234287776531,-176.6150291621406,12.507343278686905,-.13857109526572012,9984369578019572e-21,1.5056327351493116e-7];if(t<.5)i=Math.PI/(Math.sin(Math.PI*t)*this.gamma(1-t));else{for(t-=1,e=n[0],o=n.length,s=1;s<o;s++)e+=n[s]/(t+s);r=t+7+.5,i=Math.sqrt(2*Math.PI)*Math.pow(r,t+.5)*Math.exp(-r)*e}return i},lt:function(t,e){return t<e},leq:function(t,e){return t<=e},gt:function(t,e){return t>e},geq:function(t,e){return t>=e},eq:function(t,e){return t===e},neq:function(t,e){return t!==e},and:function(t,e){return t&&e},not:function(t){return!t},or:function(t,e){return t||e},xor:function(t,e){return(t||e)&&!(t&&e)},decToFraction:function(t,e){var i,r,s,n,a,h,l,c,d,u=0;for(e=o.Z.def(e,.001),r=(t=1e-12*Math.round(1e12*t))<0?-1:1,t=Math.abs(t),i=Math.floor(t),t-=Math.floor(t),h=1,n=a=s=0,d=0,l=c=1;t-Math.floor(t)>e&&u<20;)t=1/(t-s),n=h+(s=Math.floor(t))*a,l=d+s*c,h=a,d=c,a=n,c=l,u++;return[r,i,n,l]},normalize:function(t){var e,i,r=2*t[3],s=t[4]/r;return t[5]=s,t[6]=-t[1]/r,t[7]=-t[2]/r,isFinite(s)?Math.abs(s)>=1?(t[0]=(t[6]*t[6]+t[7]*t[7]-s*s)/(2*s),t[1]=-t[6]/s,t[2]=-t[7]/s,t[3]=1/(2*s),t[4]=1):(i=s<=0?-1:1,t[0]=i*(t[6]*t[6]+t[7]*t[7]-s*s)*.5,t[1]=-i*t[6],t[2]=-i*t[7],t[3]=i/2,t[4]=i*s):(e=this.hypot(t[1],t[2]),t[0]/=e,t[1]/=e,t[2]/=e,t[3]=0,t[4]=1),t},toGL:function(t){var e,i,r;if(e="function"==typeof Float32Array?new Float32Array(16):new Array(16),4!==t.length&&4!==t[0].length)return e;for(i=0;i<4;i++)for(r=0;r<4;r++)e[i+4*r]=t[i][r];return e},Vieta:function(t){var e,i,r,s=t.length,o=[];for(o=t.slice(),e=1;e<s;++e){for(r=o[e],o[e]*=o[e-1],i=e-1;i>=1;--i)o[i]+=o[i-1]*r;o[0]+=r}return o}},e.Z=s.Z.Math},336:function(t,e,i){var r=i(765),s=i(109),o=i(503),n=i(275),a={rk4:{s:4,A:[[0,0,0,0],[.5,0,0,0],[0,.5,0,0],[0,0,1,0]],b:[1/6,1/3,1/3,1/6],c:[0,.5,.5,1]},heun:{s:2,A:[[0,0],[1,0]],b:[.5,.5],c:[0,1]},euler:{s:1,A:[[0]],b:[1],c:[0]}};n.Z.Numerics={Gauss:function(t,e){var i,r,o,a,h,l=n.Z.eps,c=t.length>0?t[0].length:0;if(c!==e.length||c!==t.length)throw new Error("JXG.Math.Numerics.Gauss: Dimensions don't match. A must be a square matrix and b must be of the same length as A.");for(a=[],h=e.slice(0,c),i=0;i<c;i++)a[i]=t[i].slice(0,c);for(r=0;r<c;r++){for(i=c-1;i>r;i--)if(Math.abs(a[i][r])>l)if(Math.abs(a[r][r])<l)s.Z.swap(a,i,r),s.Z.swap(h,i,r);else for(a[i][r]/=a[r][r],h[i]-=a[i][r]*h[r],o=r+1;o<c;o++)a[i][o]-=a[i][r]*a[r][o];if(Math.abs(a[r][r])<l)throw new Error("JXG.Math.Numerics.Gauss(): The given matrix seems to be singular.")}return this.backwardSolve(a,h,!0),h},backwardSolve:function(t,e,i){var r,s,o,n,a;for(r=i?e:e.slice(0,e.length),s=t.length,o=t.length>0?t[0].length:0,n=s-1;n>=0;n--){for(a=o-1;a>n;a--)r[n]-=t[n][a]*r[a];r[n]/=t[n][n]}return r},gaussBareiss:function(t){var e,i,r,s,o,a,h,l,c,d=n.Z.eps;if((h=t.length)<=0)return 0;for(t[0].length<h&&(h=t[0].length),l=[],s=0;s<h;s++)l[s]=t[s].slice(0,h);for(i=1,r=1,e=0;e<h-1;e++){if(a=l[e][e],Math.abs(a)<d){for(s=e+1;s<h&&!(Math.abs(l[s][e])>=d);s++);if(s===h)return 0;for(o=e;o<h;o++)c=l[s][o],l[s][o]=l[e][o],l[e][o]=c;r=-r,a=l[e][e]}for(s=e+1;s<h;s++)for(o=e+1;o<h;o++)c=a*l[s][o]-l[s][e]*l[e][o],l[s][o]=c/i;i=a}return r*l[h-1][h-1]},det:function(t){return 2===t.length&&2===t[0].length?t[0][0]*t[1][1]-t[1][0]*t[0][1]:this.gaussBareiss(t)},Jacobi:function(t){var e,i,r,s,o,a,h,l,c,d=n.Z.eps*n.Z.eps,u=0,p=t.length,f=[[0,0,0],[0,0,0],[0,0,0]],_=[[0,0,0],[0,0,0],[0,0,0]],m=0;for(e=0;e<p;e++){for(i=0;i<p;i++)f[e][i]=0,_[e][i]=t[e][i],u+=Math.abs(_[e][i]);f[e][e]=1}if(1===p)return[_,f];if(u<=0)return[_,f];u/=p*p;do{for(l=0,c=0,i=1;i<p;i++)for(e=0;e<i;e++)if((s=Math.abs(_[e][i]))>c&&(c=s),l+=s,s>=d){for(s=.5*Math.atan2(2*_[e][i],_[e][e]-_[i][i]),o=Math.sin(s),a=Math.cos(s),r=0;r<p;r++)h=_[r][e],_[r][e]=a*h+o*_[r][i],_[r][i]=-o*h+a*_[r][i],h=f[r][e],f[r][e]=a*h+o*f[r][i],f[r][i]=-o*h+a*f[r][i];for(_[e][e]=a*_[e][e]+o*_[i][e],_[i][i]=-o*_[e][i]+a*_[i][i],_[e][i]=0,r=0;r<p;r++)_[e][r]=_[r][e],_[i][r]=_[r][i]}m+=1}while(Math.abs(l)/u>d&&m<2e3);return[_,f]},NewtonCotes:function(t,e,i){var r,o,n,a=0,h=i&&s.Z.isNumber(i.number_of_nodes)?i.number_of_nodes:28,l={trapez:!0,simpson:!0,milne:!0},c=i&&i.integration_type&&l.hasOwnProperty(i.integration_type)&&l[i.integration_type]?i.integration_type:"milne",d=(t[1]-t[0])/h;switch(c){case"trapez":for(a=.5*(e(t[0])+e(t[1])),r=t[0],o=0;o<h-1;o++)a+=e(r+=d);a*=d;break;case"simpson":if(h%2>0)throw new Error("JSXGraph: INT_SIMPSON requires config.number_of_nodes dividable by 2.");for(n=h/2,a=e(t[0])+e(t[1]),r=t[0],o=0;o<n-1;o++)a+=2*e(r+=2*d);for(r=t[0]-d,o=0;o<n;o++)a+=4*e(r+=2*d);a*=d/3;break;default:if(h%4>0)throw new Error("JSXGraph: Error in INT_MILNE: config.number_of_nodes must be a multiple of 4");for(n=.25*h,a=7*(e(t[0])+e(t[1])),r=t[0],o=0;o<n-1;o++)a+=14*e(r+=4*d);for(r=t[0]-3*d,o=0;o<n;o++)a+=32*(e(r+=4*d)+e(r+2*d));for(r=t[0]-2*d,o=0;o<n;o++)a+=12*e(r+=4*d);a*=2*d/45}return a},Romberg:function(t,e,i){var r,o,n,a,h,l,c,d,u=[],p=0,f=1/0,_=i&&s.Z.isNumber(i.max_iterations)?i.max_iterations:20,m=i&&s.Z.isNumber(i.eps)?i.eps:i.eps||1e-7;for(r=t[0],n=(o=t[1])-r,h=1,u[0]=.5*n*(e(r)+e(o)),l=0;l<_;++l){for(a=0,n*=.5,h*=2,d=1,c=1;c<h;c+=2)a+=e(r+c*n);for(u[l+1]=.5*u[l]+a*n,p=u[l+1],c=l-1;c>=0;--c)d*=4,u[c]=u[c+1]+(u[c+1]-u[c])/(d-1),p=u[c];if(Math.abs(p-f)<m*Math.abs(p))break;f=p}return p},GaussLegendre:function(t,e,i){var r,o,n,a,h,l,c,d,u=0,p=[],f=[],_=i&&s.Z.isNumber(i.n)?i.n:12;if(_>18&&(_=18),p[2]=[.5773502691896257],f[2]=[1],p[4]=[.33998104358485626,.8611363115940526],f[4]=[.6521451548625461,.34785484513745385],p[6]=[.2386191860831969,.6612093864662645,.932469514203152],f[6]=[.46791393457269104,.3607615730481386,.17132449237917036],p[8]=[.1834346424956498,.525532409916329,.7966664774136267,.9602898564975363],f[8]=[.362683783378362,.31370664587788727,.22238103445337448,.10122853629037626],p[10]=[.14887433898163122,.4333953941292472,.6794095682990244,.8650633666889845,.9739065285171717],f[10]=[.29552422471475287,.26926671930999635,.21908636251598204,.1494513491505806,.06667134430868814],p[12]=[.1252334085114689,.3678314989981802,.5873179542866175,.7699026741943047,.9041172563704749,.9815606342467192],f[12]=[.24914704581340277,.2334925365383548,.20316742672306592,.16007832854334622,.10693932599531843,.04717533638651183],p[14]=[.10805494870734367,.31911236892788974,.5152486363581541,.6872929048116855,.827201315069765,.9284348836635735,.9862838086968123],f[14]=[.2152638534631578,.2051984637212956,.18553839747793782,.15720316715819355,.12151857068790319,.08015808715976021,.03511946033175186],p[16]=[.09501250983763744,.2816035507792589,.45801677765722737,.6178762444026438,.755404408355003,.8656312023878318,.9445750230732326,.9894009349916499],f[16]=[.1894506104550685,.18260341504492358,.16915651939500254,.14959598881657674,.12462897125553388,.09515851168249279,.062253523938647894,.027152459411754096],p[18]=[.0847750130417353,.2518862256915055,.41175116146284263,.5597708310739475,.6916870430603532,.8037049589725231,.8926024664975557,.9558239495713977,.9915651684209309],f[18]=[.1691423829631436,.16427648374583273,.15468467512626524,.14064291467065065,.12255520671147846,.10094204410628717,.07642573025488905,.0497145488949698,.02161601352648331],p[3]=[0,.7745966692414834],f[3]=[.8888888888888888,.5555555555555556],p[5]=[0,.5384693101056831,.906179845938664],f[5]=[.5688888888888889,.47862867049936647,.23692688505618908],p[7]=[0,.4058451513773972,.7415311855993945,.9491079123427585],f[7]=[.4179591836734694,.3818300505051189,.27970539148927664,.1294849661688697],p[9]=[0,.3242534234038089,.6133714327005904,.8360311073266358,.9681602395076261],f[9]=[.3302393550012598,.31234707704000286,.26061069640293544,.1806481606948574,.08127438836157441],p[11]=[0,.26954315595234496,.5190961292068118,.7301520055740494,.8870625997680953,.978228658146057],f[11]=[.2729250867779006,.26280454451024665,.23319376459199048,.18629021092773426,.1255803694649046,.05566856711617366],p[13]=[0,.2304583159551348,.44849275103644687,.6423493394403402,.8015780907333099,.9175983992229779,.9841830547185881],f[13]=[.2325515532308739,.22628318026289723,.2078160475368885,.17814598076194574,.13887351021978725,.09212149983772845,.04048400476531588],p[15]=[0,.20119409399743451,.3941513470775634,.5709721726085388,.7244177313601701,.8482065834104272,.937273392400706,.9879925180204854],f[15]=[.2025782419255613,.19843148532711158,.1861610000155622,.16626920581699392,.13957067792615432,.10715922046717194,.07036604748810812,.03075324199611727],p[17]=[0,.17848418149584785,.3512317634538763,.5126905370864769,.6576711592166907,.7815140038968014,.8802391537269859,.9506755217687678,.9905754753144174],f[17]=[.17944647035620653,.17656270536699264,.16800410215645004,.15404576107681028,.13513636846852548,.11188384719340397,.08503614831717918,.0554595293739872,.02414830286854793],r=t[0],o=t[1],a=_+1>>1,c=p[_],d=f[_],l=.5*(o-r),h=.5*(o+r),!0&_)for(u=d[0]*e(h),n=1;n<a;++n)u+=d[n]*(e(h+l*c[n])+e(h-l*c[n]));else for(u=0,n=0;n<a;++n)u+=d[n]*(e(h+l*c[n])+e(h-l*c[n]));return l*u},_rescale_error:function(t,e,i){var r,s,o=2220446049250313e-31;return t=Math.abs(t),0!==i&&0!==t&&(t=(r=Math.pow(200*t/i,1.5))<1?i*r:i),e>20041683600089728e-310&&(s=50*o*e)>t&&(t=s),t},_gaussKronrod:function(t,e,i,r,s,o,n){var a,h,l,c,d,u,p,f,_,m,g,b=t[0],v=t[1],Z=.5*(b+v),C=.5*(v-b),y=Math.abs(C),P=e(Z),E=0,O=P*o[i-1],x=Math.abs(O),S=0,M=[],w=[];for(i%2==0&&(E=P*s[i/2-1]),a=Math.floor((i-1)/2),d=0;d<a;d++)m=(f=e(Z-(p=C*r[u=2*d+1])))+(_=e(Z+p)),M[u]=f,w[u]=_,E+=s[d]*m,O+=o[u]*m,x+=o[u]*(Math.abs(f)+Math.abs(_));for(a=Math.floor(i/2),d=0;d<a;d++)f=e(Z-(p=C*r[g=2*d])),_=e(Z+p),M[g]=f,w[g]=_,O+=o[g]*(f+_),x+=o[g]*(Math.abs(f)+Math.abs(_));for(l=.5*O,S=o[i-1]*Math.abs(P-l),d=0;d<i-1;d++)S+=o[d]*(Math.abs(M[d]-l)+Math.abs(w[d]-l));return c=(O-E)*C,x*=y,S*=y,h=O*=C,n.abserr=this._rescale_error(c,x,S),n.resabs=x,n.resasc=S,h},GaussKronrod15:function(t,e,i){return this._gaussKronrod(t,e,8,[.9914553711208126,.9491079123427585,.8648644233597691,.7415311855993945,.5860872354676911,.4058451513773972,.20778495500789848,0],[.1294849661688697,.27970539148927664,.3818300505051189,.4179591836734694],[.022935322010529224,.06309209262997856,.10479001032225019,.14065325971552592,.1690047266392679,.19035057806478542,.20443294007529889,.20948214108472782],i)},GaussKronrod21:function(t,e,i){return this._gaussKronrod(t,e,11,[.9956571630258081,.9739065285171717,.9301574913557082,.8650633666889845,.7808177265864169,.6794095682990244,.5627571346686047,.4333953941292472,.2943928627014602,.14887433898163122,0],[.06667134430868814,.1494513491505806,.21908636251598204,.26926671930999635,.29552422471475287],[.011694638867371874,.032558162307964725,.054755896574351995,.07503967481091996,.0931254545836976,.10938715880229764,.12349197626206584,.13470921731147334,.14277593857706009,.14773910490133849,.1494455540029169],i)},GaussKronrod31:function(t,e,i){return this._gaussKronrod(t,e,16,[.9980022986933971,.9879925180204854,.9677390756791391,.937273392400706,.8972645323440819,.8482065834104272,.790418501442466,.7244177313601701,.650996741297417,.5709721726085388,.4850818636402397,.3941513470775634,.29918000715316884,.20119409399743451,.1011420669187175,0],[.03075324199611727,.07036604748810812,.10715922046717194,.13957067792615432,.16626920581699392,.1861610000155622,.19843148532711158,.2025782419255613],[.005377479872923349,.015007947329316122,.02546084732671532,.03534636079137585,.04458975132476488,.05348152469092809,.06200956780067064,.06985412131872826,.07684968075772038,.08308050282313302,.08856444305621176,.09312659817082532,.09664272698362368,.09917359872179196,.10076984552387559,.10133000701479154],i)},_workspace:function(t,e){return{limit:e,size:0,nrmax:0,i:0,alist:[t[0]],blist:[t[1]],rlist:[0],elist:[0],order:[0],level:[0],qpsrt:function(){var t,e,i,r,s,o=this.size-1,n=this.limit,a=this.nrmax,h=this.order[a];if(o<2)return this.order[0]=0,this.order[1]=1,void(this.i=h);for(t=this.elist[h];a>0&&t>this.elist[this.order[a-1]];)this.order[a]=this.order[a-1],a--;for(s=o<n/2+2?o:n-o+1,i=a+1;i<s&&t<this.elist[this.order[i]];)this.order[i-1]=this.order[i],i++;for(this.order[i-1]=h,e=this.elist[o],r=s-1;r>i-2&&e>=this.elist[this.order[r]];)this.order[r+1]=this.order[r],r--;this.order[r+1]=o,h=this.order[a],this.i=h,this.nrmax=a},set_initial_result:function(t,e){this.size=1,this.rlist[0]=t,this.elist[0]=e},update:function(t,e,i,r,s,o,n,a){var h=this.i,l=this.size,c=this.level[this.i]+1;a>r?(this.alist[h]=s,this.rlist[h]=n,this.elist[h]=a,this.level[h]=c,this.alist[l]=t,this.blist[l]=e,this.rlist[l]=i,this.elist[l]=r,this.level[l]=c):(this.blist[h]=e,this.rlist[h]=i,this.elist[h]=r,this.level[h]=c,this.alist[l]=s,this.blist[l]=o,this.rlist[l]=n,this.elist[l]=a,this.level[l]=c),this.size++,c>this.maximum_level&&(this.maximum_level=c),this.qpsrt()},retrieve:function(){var t=this.i;return{a:this.alist[t],b:this.blist[t],r:this.rlist[t],e:this.elist[t]}},sum_results:function(){var t,e=this.size,i=0;for(t=0;t<e;t++)i+=this.rlist[t];return i},subinterval_too_small:function(t,e,i){var r=1.0000000000000222*(Math.abs(e)+22250738585072014e-321);return Math.abs(t)<=r&&Math.abs(i)<=r}}},Qag:function(t,e,i){var o,a,h,l,c,d,u,p,f,_,m,g,b,v,Z,C,y,P,E=this._workspace(t,1e3),O=i&&s.Z.isNumber(i.limit)?i.limit:15,x=i&&s.Z.isNumber(i.epsrel)?i.epsrel:1e-7,S=i&&s.Z.isNumber(i.epsabs)?i.epsabs:1e-7,M=i&&s.Z.isFunction(i.q)?i.q:this.GaussKronrod15,w={},T=0,N=0,A=0,D=0,k=0,R=0,L=0,B=0,I=0,Y=0;if(O>E.limit&&r.Z.warn("iteration limit exceeds available workspace"),S<=0&&(x<50*n.Z.eps||x<5e-29)&&r.Z.warn("tolerance cannot be acheived with given epsabs and epsrel"),h=M.apply(this,[t,e,w]),l=w.abserr,c=w.resabs,d=w.resasc,E.set_initial_result(h,l),u=Math.max(S,x*Math.abs(h)),l<=11102230246251565e-30*c&&l>u)return h,r.Z.warn("cannot reach tolerance because of roundoff error on first attempt"),-1/0;if(l<=u&&l!==d||0===l)return h;if(1===O)return h,r.Z.warn("a maximum of one iteration was insufficient"),-1/0;o=h,a=l,T=1;do{k=0,R=0,L=0,B=0,I=0,Y=0,g=(y=E.retrieve()).a,b=y.b,v=y.r,Z=y.e,p=g,_=f=.5*(g+b),m=b,k=M.apply(this,[[p,f],e,w]),B=w.abserr,C=w.resasc,R=M.apply(this,[[_,m],e,w]),a+=(Y=B+(I=w.abserr))-Z,o+=(L=k+R)-v,C!==B&&w.resasc!==I&&(P=v-L,Math.abs(P)<=1e-5*Math.abs(L)&&Y>=.99*Z&&N++,T>=10&&Y>Z&&A++),a>(u=Math.max(S,x*Math.abs(o)))&&((N>=6||A>=20)&&(D=2),E.subinterval_too_small(p,_,m)&&(D=3)),E.update(p,f,k,B,_,m,R,I),g=(y=E.retrieve()).a_i,b=y.b_i,v=y.r_i,Z=y.e_i,T++}while(T<O&&!D&&a>u);return E.sum_results()},I:function(t,e){return this.Qag(t,e,{q:this.GaussKronrod15,limit:15,epsrel:1e-7,epsabs:1e-7})},Newton:function(t,e,i){var r,o=0,a=n.Z.eps,h=t.apply(i,[e]);for(s.Z.isArray(e)&&(e=e[0]);o<50&&Math.abs(h)>a;)r=this.D(t,i)(e),Math.abs(r)>a?e-=h/r:e+=.2*Math.random()-1,h=t.apply(i,[e]),o+=1;return e},root:function(t,e,i){return this.chandrupatla(t,e,i)},generalizedNewton:function(t,e,i,r){var s,o,a,h,l,c,d,u,p,f,_,m,g,b,v=0;for(this.generalizedNewton.t1memo?(s=this.generalizedNewton.t1memo,o=this.generalizedNewton.t2memo):(s=i,o=r),f=(u=t.X(s)-e.X(o))*u+(p=t.Y(s)-e.Y(o))*p,_=this.D(t.X,t),m=this.D(e.X,e),g=this.D(t.Y,t),b=this.D(e.Y,e);f>n.Z.eps&&v<10;)a=_(s),h=-m(o),l=g(s),s-=((c=-b(o))*u-h*p)/(d=a*c-h*l),o-=(a*p-l*u)/d,f=(u=t.X(s)-e.X(o))*u+(p=t.Y(s)-e.Y(o))*p,v+=1;return this.generalizedNewton.t1memo=s,this.generalizedNewton.t2memo=o,Math.abs(s)<Math.abs(o)?[t.X(s),t.Y(s)]:[e.X(o),e.Y(o)]},Neville:function(t){var e=[],i=function(i){return function(r,s){var o,a,h,l=n.Z.binomial,c=t.length,d=c-1,u=0,p=0;if(!s)for(h=1,o=0;o<c;o++)e[o]=l(d,o)*h,h*=-1;for(a=r,o=0;o<c;o++){if(0===a)return t[o][i]();h=e[o]/a,a-=1,u+=t[o][i]()*h,p+=h}return u/p}};return[i("X"),i("Y"),0,function(){return t.length-1}]},splineDef:function(t,e){var i,r,s,o=Math.min(t.length,e.length),n=[],a=[],h=[],l=[],c=[],d=[];if(2===o)return[0,0];for(r=0;r<o;r++)i={X:t[r],Y:e[r]},h.push(i);for(h.sort((function(t,e){return t.X-e.X})),r=0;r<o;r++)t[r]=h[r].X,e[r]=h[r].Y;for(r=0;r<o-1;r++)l.push(t[r+1]-t[r]);for(r=0;r<o-2;r++)c.push(6*(e[r+2]-e[r+1])/l[r+1]-6*(e[r+1]-e[r])/l[r]);for(n.push(2*(l[0]+l[1])),a.push(c[0]),r=0;r<o-3;r++)s=l[r+1]/n[r],n.push(2*(l[r+1]+l[r+2])-s*l[r+1]),a.push(c[r+1]-s*a[r]);for(d[o-3]=a[o-3]/n[o-3],r=o-4;r>=0;r--)d[r]=(a[r]-l[r+1]*d[r+1])/n[r];for(r=o-3;r>=0;r--)d[r+1]=d[r];return d[0]=0,d[o-1]=0,d},splineEval:function(t,e,i,r){var o,n,a,h,l,c,d,u=Math.min(e.length,i.length),p=1,f=!1,_=[];for(s.Z.isArray(t)?(p=t.length,f=!0):t=[t],o=0;o<p;o++){if(t[o]<e[0]||e[o]>e[u-1])return NaN;for(n=1;n<u&&!(t[o]<=e[n]);n++);a=i[n-=1],h=(i[n+1]-i[n])/(e[n+1]-e[n])-(e[n+1]-e[n])/6*(r[n+1]+2*r[n]),l=r[n]/2,c=(r[n+1]-r[n])/(6*(e[n+1]-e[n])),d=t[o]-e[n],_.push(a+(h+(l+c*d)*d)*d)}return f?_:_[0]},generatePolynomialTerm:function(t,e,i,r){var o,n=[];for(o=e;o>=0;o--)s.Z.concat(n,["(",t[o].toPrecision(r),")"]),o>1?s.Z.concat(n,["*",i,"<sup>",o,"<","/sup> + "]):1===o&&s.Z.concat(n,["*",i," + "]);return n.join("")},lagrangePolynomial:function(t){var e=[],i=this,r=function(i,r){var s,o,n,a,h=t.length,l=0,c=0;if(!r)for(s=0;s<h;s++){for(e[s]=1,n=t[s].X(),o=0;o<h;o++)o!==s&&(e[s]*=n-t[o].X());e[s]=1/e[s]}for(s=0;s<h;s++){if(i===(n=t[s].X()))return t[s].Y();c+=a=e[s]/(i-n),l+=a*t[s].Y()}return l/c};return r.getTerm=function(e,r,s){return i.lagrangePolynomialTerm(t,e,r,s)()},r.getCoefficients=function(){return i.lagrangePolynomialCoefficients(t)()},r},lagrangePolynomialTerm:function(t,e,i,s){var a=this;return function(){var h,l,c,d,u,p=t.length,f=!0;for(i=i||"x",void 0===s&&(s=" * "),l=p-1,h=a.lagrangePolynomialCoefficients(t)(),c="",d=0;d<h.length;d++)u=h[d],Math.abs(u)<n.Z.eps||(r.Z.exists(e)&&(u=o.Z._round10(u,-e)),f?(c+=u>0?u:"-"+-u,f=!1):c+=u>0?" + "+u:" - "+-u,l-d>1?c+=s+i+"^"+(l-d):l-d==1&&(c+=s+i));return c}},lagrangePolynomialCoefficients:function(t){return function(){var e,i,r,s,o=t.length,a=[],h=[],l=[];for(i=0;i<o;i++)l[i]=0;for(e=0;e<o;e++){for(r=t[e].Y(),s=t[e].X(),a=[],i=0;i<o;i++)i!==e&&(r/=s-t[i].X(),a.push(t[i].X()));for(h=[1].concat(n.Z.Vieta(a)),i=0;i<h.length;i++)l[i]+=(i%2==1?-1:1)*h[i]*r}return l}},_initCubicPoly:function(t,e,i,r){return[t,i,-3*t+3*e-2*i-r,2*t-2*e+i+r]},CardinalSpline:function(t,e,i){var r,o,a,h,l=[],c=this;return h=s.Z.isFunction(e)?e:function(){return e},void 0===i&&(i="uniform"),o=function(e){return function(s,o){var d,u,p,f,_,m,g,b,v,Z;if(t.length<2)return NaN;if(!o)for(a=h(),p={X:function(){return 2*t[0].X()-t[1].X()},Y:function(){return 2*t[0].Y()-t[1].Y()},Dist:function(t){var e=this.X()-t.X(),i=this.Y()-t.Y();return n.Z.hypot(e,i)}},f={X:function(){return 2*t[t.length-1].X()-t[t.length-2].X()},Y:function(){return 2*t[t.length-1].Y()-t[t.length-2].Y()},Dist:function(t){var e=this.X()-t.X(),i=this.Y()-t.Y();return n.Z.hypot(e,i)}},Z=(r=[p].concat(t,[f])).length,l[e]=[],d=0;d<Z-3;d++)"centripetal"===i?(g=r[d].Dist(r[d+1]),b=r[d+2].Dist(r[d+1]),v=r[d+3].Dist(r[d+2]),g=Math.sqrt(g),b=Math.sqrt(b),v=Math.sqrt(v),b<n.Z.eps&&(b=1),g<n.Z.eps&&(g=b),v<n.Z.eps&&(v=b),_=(r[d+1][e]()-r[d][e]())/g-(r[d+2][e]()-r[d][e]())/(b+g)+(r[d+2][e]()-r[d+1][e]())/b,m=(r[d+2][e]()-r[d+1][e]())/b-(r[d+3][e]()-r[d+1][e]())/(v+b)+(r[d+3][e]()-r[d+2][e]())/v,_*=b,m*=b,l[e][d]=c._initCubicPoly(r[d+1][e](),r[d+2][e](),a*_,a*m)):l[e][d]=c._initCubicPoly(r[d+1][e](),r[d+2][e](),a*(r[d+2][e]()-r[d][e]()),a*(r[d+3][e]()-r[d+1][e]()));return isNaN(s)?NaN:(Z=t.length,s<=0?t[0][e]():s>=Z?t[Z-1][e]():(d=Math.floor(s))===s?t[d][e]():(s-=d,void 0===(u=l[e][d])?NaN:((u[3]*s+u[2])*s+u[1])*s+u[0]))}},[o("X"),o("Y"),0,function(){return t.length-1}]},CatmullRomSpline:function(t,e){return this.CardinalSpline(t,.5,e)},regressionPolynomial:function(t,e,i){var r,o,a,h,l,c,d="";if(s.Z.isPoint(t)&&s.Z.isFunction(t.Value))o=function(){return t.Value()};else if(s.Z.isFunction(t))o=t;else{if(!s.Z.isNumber(t))throw new Error("JSXGraph: Can't create regressionPolynomial from degree of type'"+typeof t+"'.");o=function(){return t}}if(3===arguments.length&&s.Z.isArray(e)&&s.Z.isArray(i))l=0;else if(2===arguments.length&&s.Z.isArray(e)&&e.length>0&&s.Z.isPoint(e[0]))l=1;else{if(!(2===arguments.length&&s.Z.isArray(e)&&e.length>0&&e[0].usrCoords&&e[0].scrCoords))throw new Error("JSXGraph: Can't create regressionPolynomial. Wrong parameters.");l=2}return(c=function(t,c){var u,p,f,_,m,g,b,v,Z,C=e.length;if(Z=Math.floor(o()),!c){if(1===l)for(a=[],h=[],u=0;u<C;u++)a[u]=e[u].X(),h[u]=e[u].Y();if(2===l)for(a=[],h=[],u=0;u<C;u++)a[u]=e[u].usrCoords[1],h[u]=e[u].usrCoords[2];if(0===l)for(a=[],h=[],u=0;u<C;u++)s.Z.isFunction(e[u])?a.push(e[u]()):a.push(e[u]),s.Z.isFunction(i[u])?h.push(i[u]()):h.push(i[u]);for(f=[],p=0;p<C;p++)f.push([1]);for(u=1;u<=Z;u++)for(p=0;p<C;p++)f[p][u]=f[p][u-1]*a[p];m=h,_=n.Z.transpose(f),g=n.Z.matMatMult(_,f),b=n.Z.matVecMult(_,m),r=n.Z.Numerics.Gauss(g,b),d=n.Z.Numerics.generatePolynomialTerm(r,Z,"x",3)}for(v=r[Z],u=Z-1;u>=0;u--)v=v*t+r[u];return v}).getTerm=function(){return d},c},bezier:function(t){var e,i,r=function(r){return function(s,o){var n=3*Math.floor(s),a=s%1,h=1-a;return o||(i=3*Math.floor((t.length-1)/3),e=Math.floor(i/3)),s<0?t[0][r]():s>=e?t[i][r]():isNaN(s)?NaN:h*h*(h*t[n][r]()+3*a*t[n+1][r]())+(3*h*t[n+2][r]()+a*t[n+3][r]())*a*a}};return[r("X"),r("Y"),0,function(){return Math.floor(t.length/3)}]},bspline:function(t,e){var i,r=function(r){return function(s,o){var n,a,h,l,c=t.length,d=c-1,u=e;if(d<=0)return NaN;if(d+2<=u&&(u=d+1),s<=0)return t[0][r]();if(s>=d-u+2)return t[d][r]();for(h=Math.floor(s)+u-1,i=function(t,e){var i,r=[];for(i=0;i<t+e+1;i++)r[i]=i<e?0:i<=t?i-e+1:t-e+2;return r}(d,u),l=function(t,e,i,r){var s,o,n,a,h,l=[];for(e[r]<=t&&t<e[r+1]?l[r]=1:l[r]=0,s=2;s<=i;s++)for(o=r-s+1;o<=r;o++)n=o<=r-s+1||o<0?0:l[o],a=o>=r?0:l[o+1],h=e[o+s-1]-e[o],l[o]=0===h?0:(t-e[o])/h*n,0!=(h=e[o+s]-e[o+1])&&(l[o]+=(e[o+s]-t)/h*a);return l}(s,i,u,h),n=0,a=h-u+1;a<=h;a++)a<c&&a>=0&&(n+=t[a][r]()*l[a]);return n}};return[r("X"),r("Y"),0,function(){return t.length-1}]},D:function(t,e){return s.Z.exists(e)?function(i,r){var s=1e-5;return(t.apply(e,[i+s,r])-t.apply(e,[i-s,r]))/2e-5}:function(e,i){var r=1e-5;return(t(e+r,i)-t(e-r,i))/2e-5}},_riemannValue:function(t,e,i,r){var s,o,n,a;if(r<0&&("trapezoidal"!==i&&(t+=r),r*=-1,"lower"===i?i="upper":"upper"===i&&(i="lower")),a=.01*r,"right"===i)s=e(t+r);else if("middle"===i)s=e(t+.5*r);else if("left"===i||"trapezoidal"===i)s=e(t);else if("lower"===i){for(s=e(t),n=t+a;n<=t+r;n+=a)(o=e(n))<s&&(s=o);(o=e(t+r))<s&&(s=o)}else if("upper"===i){for(s=e(t),n=t+a;n<=t+r;n+=a)(o=e(n))>s&&(s=o);(o=e(t+r))>s&&(s=o)}else s="random"===i?e(t+r*Math.random()):"simpson"===i?(e(t)+4*e(t+.5*r)+e(t+r))/6:e(t);return s},riemann:function(t,e,i,r,o){var n,a,h,l,c,d,u,p,f,_,m,g,b,v,Z=[],C=[],y=r,P=0;if(s.Z.isArray(t)?(v=t[0],b=t[1]):b=t,(e=Math.floor(e))<=0)return[Z,C,P];for(a=(o-r)/e,n=0;n<e;n++){if("simpson"===i){for(P+=this._riemannValue(y,b,i,a)*a,m=.5*a,u=b(y),p=b(y+m),l=((f=b(y+2*m))+u-2*p)/(m*m)*.5,c=(f-u)/(2*m),d=p,h=0;h<30;h++)_=h*a/30-m,Z.push(y+_+m),C.push(l*_*_+c*_+d);y+=a,g=f}else g=this._riemannValue(y,b,i,a),Z.push(y),C.push(g),y+=a,"trapezoidal"===i?(P+=.5*(g+(f=b(y)))*a,g=f):P+=g*a,Z.push(y),C.push(g);Z.push(y),C.push(g)}for(n=0;n<e;n++){if("simpson"===i&&v){for(P-=this._riemannValue(y,v,i,-a)*a,m=.5*a,u=v(y),p=v(y-m),l=((f=v(y-2*m))+u-2*p)/(m*m)*.5,c=(f-u)/(2*m),d=p,h=0;h<30;h++)_=h*a/30-m,Z.push(y-_-m),C.push(l*_*_+c*_+d);y-=a,g=f}else g=v?this._riemannValue(y,v,i,-a):0,Z.push(y),C.push(g),y-=a,v&&("trapezoidal"===i?(P-=.5*(g+(f=v(y)))*a,g=f):P-=g*a);Z.push(y),C.push(g),Z.push(y),C.push(b(y))}return[Z,C,P]},riemannsum:function(t,e,i,s,o){return r.Z.deprecated("Numerics.riemannsum()","Numerics.riemann()[2]"),this.riemann(t,e,i,s,o)[2]},rungeKutta:function(t,e,i,r,o){var n,h,l,c,d,u,p=[],f=[],_=(i[1]-i[0])/r,m=i[0],g=e.length,b=[],v=0;for(s.Z.isString(t)&&(t=a[t]||a.euler),u=t.s,p=e.slice(),h=0;h<=r;h++){for(b[v]=p.slice(),v++,c=[],l=0;l<u;l++){for(n=0;n<g;n++)f[n]=0;for(d=0;d<l;d++)for(n=0;n<g;n++)f[n]+=t.A[l][d]*_*c[d][n];for(n=0;n<g;n++)f[n]+=p[n];c.push(o(m+t.c[l]*_,f))}for(n=0;n<g;n++)f[n]=0;for(d=0;d<u;d++)for(n=0;n<g;n++)f[n]+=t.b[d]*c[d][n];for(n=0;n<g;n++)p[n]=p[n]+_*f[n];m+=_}return b},maxIterationsRoot:80,maxIterationsMinimize:500,findBracket:function(t,e,i){var r,o,n,a,h,l,c,d,u,p;if(s.Z.isArray(e))return e;for(r=e,n=t.call(i,r),p=(a=[r-.1*(o=0===r?1:r),r+.1*o,r-1,r+1,r-.5*o,r+.5*o,r-.6*o,r+.6*o,r-1*o,r+1*o,r-2*o,r+2*o,r-5*o,r+5*o,r-10*o,r+10*o,r-50*o,r+50*o,r-100*o,r+100*o]).length,u=0;u<p&&(h=a[u],!(n*(l=t.call(i,h))<=0));u++);return h<r&&(c=r,r=h,h=c,d=n,n=l,l=d),[r,n,h,l]},fzero:function(t,e,i){var r,o,a,h,l,c,d,u,p,f,_,m,g,b,v,Z=n.Z.eps,C=this.maxIterationsRoot,y=0;if(s.Z.isArray(e)){if(e.length<2)throw new Error("JXG.Math.Numerics.fzero: length of array x0 has to be at least two.");r=e[0],h=t.call(i,r),o=e[1],l=t.call(i,o)}else r=(d=this.findBracket(t,e,i))[0],h=d[1],o=d[2],l=d[3];if(Math.abs(h)<=Z)return r;if(Math.abs(l)<=Z)return o;if(h*l>0)return s.Z.isArray(e)?this.fminbr(t,[r,o],i):this.Newton(t,r,i);for(a=r,c=h;y<C;){if(u=o-r,Math.abs(c)<Math.abs(l)&&(r=o,o=a,a=r,h=l,l=c,c=h),m=2*Z*Math.abs(o)+.5*Z,v=.5*(a-o),Math.abs(v)<=m||Math.abs(l)<=Z)return o;Math.abs(u)>=m&&Math.abs(h)>Math.abs(l)&&(_=a-o,r===a?(g=_*(p=l/h),b=1-p):(g=(f=l/h)*(_*(b=h/c)*(b-(p=l/c))-(o-r)*(p-1)),b=(b-1)*(p-1)*(f-1)),g>0?b=-b:g=-g,g<.75*_*b-.5*Math.abs(m*b)&&g<Math.abs(u*b*.5)&&(v=g/b)),Math.abs(v)<m&&(v=v>0?m:-m),r=o,h=l,o+=v,((l=t.call(i,o))>0&&c>0||l<0&&c<0)&&(a=r,c=h),y++}return o},chandrupatla:function(t,e,i){var r,o,a,h,l,c,d,u,p,f,_,m,g,b,v,Z,C,y,P,E,O=0,x=this.maxIterationsRoot,S=1+.001*Math.random(),M=.5*S,w=n.Z.eps;if(s.Z.isArray(e)){if(e.length<2)throw new Error("JXG.Math.Numerics.fzero: length of array x0 has to be at least two.");r=e[0],a=t.call(i,r),o=e[1],h=t.call(i,o)}else r=(l=this.findBracket(t,e,i))[0],a=l[1],o=l[2],h=l[3];if(a*h>0)return s.Z.isArray(e)?this.fminbr(t,[r,o],i):this.Newton(t,r,i);c=r,d=o,f=a,_=h;do{if(p=c+M*(d-c),g=t.call(i,p),Math.sign(g)===Math.sign(f)?(u=c,c=p,m=f,f=g):(u=d,d=c,m=_,_=f),b=c=p,v=f=g,Math.abs(_)<Math.abs(f)&&(b=d,v=_),(Z=(2*w*Math.abs(b)+5e-6)/Math.abs(d-c))>.5||0===v)break;C=(c-d)/(u-d),y=(f-_)/(m-_),P=1-Math.sqrt(1-C),E=Math.sqrt(C),(M=P<y&&y<E?f/(_-f)*(m/(_-m))+f/(m-f)*(_/(m-_))*((u-c)/(d-c)):.5*S)<Z&&(M=Z),M>1-Z&&(M=1-Z),O++}while(O<=x);return b},fminbr:function(t,e,i){var r,o,a,h,l,c,d,u,p,f,_,m,g,b,v,Z,C=.5*(3-Math.sqrt(5)),y=n.Z.eps,P=n.Z.eps,E=this.maxIterationsMinimize,O=0;if(!s.Z.isArray(e)||e.length<2)throw new Error("JXG.Math.Numerics.fminbr: length of array x0 has to be at least two.");for(a=h=(r=e[0])+C*((o=e[1])-r),l=h,c=d=t.call(i,h),u=d;O<E;){if(p=o-r,f=.5*(r+o),_=P*Math.abs(a)+y/3,Math.abs(a-f)+.5*p<=2*_)return a;m=C*(a<f?o-a:r-a),Math.abs(a-l)>=_&&(g=(a-h)*(b=(a-h)*(c-u))-(a-l)*(v=(a-l)*(c-d)),(b=2*(b-v))>0?g=-g:b=-b,Math.abs(g)<Math.abs(m*b)&&g>b*(r-a+2*_)&&g<b*(o-a-2*_)&&(m=g/b)),Math.abs(m)<_&&(m=m>0?_:-_),v=a+m,(Z=t.call(i,v))<=c?(v<a?o=a:r=a,h=l,l=a,a=v,d=u,u=c,c=Z):(v<a?r=v:o=v,Z<=u||l===a?(h=l,l=v,d=u,u=Z):(Z<=d||h===a||h===l)&&(h=v,d=Z)),O+=1}return a},glomin:function(t,e){var i,r,s,o,a,h,l,c,d,u,p,f,_,m,g,b,v,Z,C,y,P,E,O,x,S,M,w,T,N=1e7,A=n.Z.eps,D=n.Z.eps*n.Z.eps,k=n.Z.eps*n.Z.eps*n.Z.eps;if(S=e[0],M=e[1],w=t(S)<t(M)?S:M,T=i=M,r=S,P=v=t(M),v<(b=C=t(S))?b=v:T=S,M<=S)return b;for(d=.5*(1+16*k)*N,c=3,o=r-(g=w<=S||M<=w?.5*(S+M):w),l=9/11,(Z=t(g))<b&&(T=g,b=Z);;){if(h=g-i,x=M-r,u=_=(a=r-i)*a*(E=C-Z)-o*o*(O=C-v),p=f=2*(o*O-a*E),c<1e6||C<=b)for(;p*(_*(P-C)+x*p*(C-b+A))<x*d*_*(x*p-_)&&(y=t(s=r+_/p))<b&&(T=s,b=y),p=1,!(x<=(_=1e-5*(M-S)*(c=1611*c%1048576))););else for(p=1,_=1e-5*(M-S)*(c=1611*c%1048576);_<x;)p*(_*(P-C)+x*p*(C-b+A))<x*d*_*(x*p-_)&&(y=t(s=r+_/p))<b&&(T=s,b=y),p=1,_=1e-5*(M-S)*(c=1611*c%1048576);for(u=(l=.5*(1+l))*(u+2*(_=d*o*a*h)*(m=Math.sqrt((C-b+A)/d))),_=(_=-.5*(o+(E+2.01*D)/(o*d)))<m||o<0?r+m:r+_,s=0<u*(p+=.5*f)?r+u/p:_;(M<=(s=Math.max(s,_))?(s=M,y=P):y=t(s),y<b&&(T=s,b=y),o=s-r,!(s<=_))&&(u=2*(C-y)/(N*o),!((1+9*k)*o<=Math.abs(u)))&&!(.5*d*(o*o+u*u)<=C-b+(y-b)+2*A);)s=.5*(r+s),l*=.9;if(M<=s)break;i=g,g=r,r=s,v=Z,Z=C,C=y}return[T,b]},polzeros:function(t,e,i,s,o){var n,a,h,l=[],c=[],d=[],u=function(t,e,i){var s,o,n=t.length-1;if(i=i||!1)for(o=r.Z.C.mult(n,t[n]),s=n-1;s>0;s--)o.mult(e),o.add(r.Z.C.mult(t[s],s));else for(o=r.Z.C.copy(t[n]),s=n-1;s>=0;s--)o.mult(e),o.add(t[s]);return o},p=function(t,e,i){var s,o,n=t.length-1;if(i=i||!1)for(o=r.Z.C.mult(n,t[0]),s=n-1;s>0;s--)o.mult(e),o.add(r.Z.C.mult(t[n-s],s));else for(o=r.Z.C.copy(t[0]),s=n-1;s>=0;s--)o.mult(e),o.add(t[n-s]);return o},f=function(t,e){var i,r,s=t.length-1;for(r=t[s],i=s-1;i>=0;i--)r=r*e+t[i];return r};for(i=i||Number.EPSILON,s=s||30,a=t.length,r.Z.isNumber(e)&&e>=0&&e<a-1&&(a=e+1),n=0;n<a;n++)l.push(new r.Z.Complex(t[n]));for(n=0;n<a;n++)if(0!==l[n].real||0!==l[n].imaginary){h=n;break}for(n=0;n<h;n++)c.push(new r.Z.Complex(0));for(n=(a=(l=l.slice(h)).length)-1;n>=0&&(0===l[n].real&&0===l[n].imaginary);n--)l.pop();if(0===(a=l.length))return[];if(o)for(n=0;n<a-1;n++)d.push(new r.Z.Complex(o[n]));else d=function(t){var e,i,s,o,n=t.length-1,a=2*Math.PI/n,h=Math.PI/n*.5,l=[];for((s=r.Z.C.mult(-1,t[n-1])).div(r.Z.C.mult(n,t[n])),o=r.Z.C.div(u(t,s),t[n]),0===(i=Math.pow(r.Z.C.abs(o),1/n))&&(i=1),e=0;e<n;e++)t=new r.Z.Complex(i*Math.cos(a*e+h),i*Math.sin(a*e+h)),l[e]=r.Z.C.add(s,t);return l}(l);return function(t,e,i,s){var o,n,a,h,l,c,d,_,m,g=[],b=[],v=0,Z=s.length;for(n=0;n<Z;n++)g.push(!1);for(n=0;n<t.length;n++)b.push(r.Z.C.abs(t[n])*(4*n+1));for(o=0;o<i&&v<Z;o++)for(n=0;n<Z;n++)if(!g[n])if(c=u(t,s[n]),l=r.Z.C.abs(s[n]),r.Z.C.abs(c)<e*f(b,l)){if(g[n]=!0,++v===Z)break}else{for(l>1?(h=r.Z.C.div(1,s[n]),(m=p(t,h,!0)).div(p(t,h)),m.mult(h),c=r.Z.C.sub(Z,m),c=r.Z.C.div(s[n],c)):c.div(u(t,s[n],!0)),d=new r.Z.Complex(0),a=0;a<Z;a++)a!==n&&(_=r.Z.C.sub(s[n],s[a]),_=r.Z.C.div(1,_),d.add(_));d.mult(c),d=r.Z.C.sub(1,d),c.div(d),s[n].sub(c)}return o}(l,i,s,d),(d=c.concat(d)).sort((function(t,e){return t.real<e.real?-1:t.real>e.real?1:0})),d},RamerDouglasPeucker:function(t,e){var i,r,s,o=[],a=[],h=function(t,e,i,r,s){var o=function(t,e,i){var r,s,o,a,h,l,c,d,u,p,f,_=n.Z.eps*n.Z.eps,m=1e4,g=0,b=e;if(i-e<2)return[-1,0];if(o=t[e].scrCoords,a=t[i].scrCoords,isNaN(o[1])||isNaN(o[2]))return[NaN,e];if(isNaN(a[1])||isNaN(a[2]))return[NaN,i];for(s=e+1;s<i;s++){if(h=t[s].scrCoords,isNaN(h[1])||isNaN(h[2]))return[NaN,s];l=(l=(l=h[1]-o[1])==1/0?m:l)===-1/0?-m:l,c=(c=(c=h[2]-o[2])==1/0?m:c)===-1/0?-m:c,(p=(d=(d=(d=a[1]-o[1])==1/0?m:d)===-1/0?-m:d)*d+(u=(u=(u=a[2]-o[2])==1/0?m:u)===-1/0?-m:u)*u)>_?((f=(l*d+c*u)/p)<0?f=0:f>1&&(f=1),r=(l-=f*d)*l+(c-=f*u)*c):(f=0,r=l*l+c*c),r>g&&(g=r,b=s)}return[Math.sqrt(g),b]}(t,e,i),a=o[1];if(isNaN(o[0])){h(t,e,a-1,r,s),s.push(t[a]);do{++a}while(a<=i&&isNaN(t[a].scrCoords[1]+t[a].scrCoords[2]));a<=i&&s.push(t[a]),h(t,a+1,i,r,s)}else o[0]>r?(h(t,e,a,r,s),h(t,a,i,r,s)):s.push(t[i])};for(s=t.length,i=0;;){for(;i<s&&isNaN(t[i].scrCoords[1]+t[i].scrCoords[2]);)i+=1;for(r=i+1;r<s&&!isNaN(t[r].scrCoords[1]+t[r].scrCoords[2]);)r+=1;if(r--,i<s&&r>i&&((a=[])[0]=t[i],h(t,i,r,e,a),o=o.concat(a)),i>=s)break;r<s-1&&o.push(t[r+1]),i=r+1}return o},RamerDouglasPeuker:function(t,e){return r.Z.deprecated("Numerics.RamerDouglasPeuker()","Numerics.RamerDouglasPeucker()"),this.RamerDouglasPeucker(t,e)},Visvalingam:function(t,e){var i,s,o,n,a,h,l,c,d,u=[],p=[],f=[];if((s=t.length)<=2)return t;for(u[0]={used:!0,lft:null,node:null},a=0,i=1;i<s-1;i++)o=Math.abs(r.Z.Math.Numerics.det([t[i-1].usrCoords,t[i].usrCoords,t[i+1].usrCoords])),isNaN(o)||(d={v:o,idx:i},p.push(d),u[i]={used:!0,lft:a,node:d},u[a].rt=i,a=i);for(u[s-1]={used:!0,rt:null,lft:a,node:null},u[a].rt=s-1,n=-1/0;p.length>e;)p.sort((function(t,e){return e.v-t.v})),u[i=p.pop().idx].used=!1,n=u[i].node.v,a=u[i].lft,h=u[i].rt,u[a].rt=h,u[h].lft=a,null!==(l=u[a].lft)&&(o=Math.abs(r.Z.Math.Numerics.det([t[l].usrCoords,t[a].usrCoords,t[h].usrCoords])),u[a].node.v=o>=n?o:n),null!==(c=u[h].rt)&&(o=Math.abs(r.Z.Math.Numerics.det([t[a].usrCoords,t[h].usrCoords,t[c].usrCoords])),u[h].node.v=o>=n?o:n);f=[t[i=0]];do{i=u[i].rt,f.push(t[i])}while(null!==u[i].rt);return f}},e.Z=n.Z.Numerics},309:function(t,e,i){var r=i(765),s=i(275),o=i(109);s.Z.Statistics={sum:function(t){var e,i=t.length,r=0;for(e=0;e<i;e++)r+=t[e];return r},prod:function(t){var e,i=t.length,r=1;for(e=0;e<i;e++)r*=t[e];return r},mean:function(t){return t.length>0?this.sum(t)/t.length:0},median:function(t){var e,i;return t.length>0?(ArrayBuffer.isView(t)?(e=new Float64Array(t)).sort():(e=t.slice(0)).sort((function(t,e){return t-e})),1&(i=e.length)?e[parseInt(.5*i,10)]:.5*(e[.5*i-1]+e[.5*i])):0},percentile:function(t,e){var i,r,s,n,a,h=[];if(t.length>0){for(ArrayBuffer.isView(t)?(i=new Float64Array(t)).sort():(i=t.slice(0)).sort((function(t,e){return t-e})),r=i.length,n=o.Z.isArray(e)?e:[e],s=0;s<n.length;s++)a=r*n[s]*.01,parseInt(a,10)===a?h.push(.5*(i[a-1]+i[a])):h.push(i[parseInt(a,10)]);return o.Z.isArray(e)?h:h[0]}return 0},variance:function(t){var e,i,r,s=t.length;if(s>1){for(e=this.mean(t),i=0,r=0;r<s;r++)i+=(t[r]-e)*(t[r]-e);return i/(t.length-1)}return 0},sd:function(t){return Math.sqrt(this.variance(t))},weightedMean:function(t,e){if(t.length!==e.length)throw new Error("JSXGraph error (Math.Statistics.weightedMean): Array dimension mismatch.");return t.length>0?this.mean(this.multiply(t,e)):0},max:function(t){return Math.max.apply(this,t)},min:function(t){return Math.min.apply(this,t)},range:function(t){return[this.min(t),this.max(t)]},abs:function(t){var e,i,r;if(o.Z.isArray(t))if(t.map)r=t.map(Math.abs);else for(i=t.length,r=[],e=0;e<i;e++)r[e]=Math.abs(t[e]);else r=ArrayBuffer.isView(t)?t.map(Math.abs):Math.abs(t);return r},add:function(t,e){var i,r,s=[];if(t=o.Z.evalSlider(t),e=o.Z.evalSlider(e),o.Z.isArray(t)&&o.Z.isNumber(e))for(r=t.length,i=0;i<r;i++)s[i]=t[i]+e;else if(o.Z.isNumber(t)&&o.Z.isArray(e))for(r=e.length,i=0;i<r;i++)s[i]=t+e[i];else if(o.Z.isArray(t)&&o.Z.isArray(e))for(r=Math.min(t.length,e.length),i=0;i<r;i++)s[i]=t[i]+e[i];else s=t+e;return s},div:function(t,e){var i,r,s=[];if(t=o.Z.evalSlider(t),e=o.Z.evalSlider(e),o.Z.isArray(t)&&o.Z.isNumber(e))for(r=t.length,i=0;i<r;i++)s[i]=t[i]/e;else if(o.Z.isNumber(t)&&o.Z.isArray(e))for(r=e.length,i=0;i<r;i++)s[i]=t/e[i];else if(o.Z.isArray(t)&&o.Z.isArray(e))for(r=Math.min(t.length,e.length),i=0;i<r;i++)s[i]=t[i]/e[i];else s=t/e;return s},divide:function(){r.Z.deprecated("Statistics.divide()","Statistics.div()"),s.Z.Statistics.div.apply(s.Z.Statistics,arguments)},mod:function(t,e,i){var r,n,a=[],h=function(t,e){return t%e};if((i=o.Z.def(i,!1))&&(h=s.Z.mod),t=o.Z.evalSlider(t),e=o.Z.evalSlider(e),o.Z.isArray(t)&&o.Z.isNumber(e))for(n=t.length,r=0;r<n;r++)a[r]=h(t[r],e);else if(o.Z.isNumber(t)&&o.Z.isArray(e))for(n=e.length,r=0;r<n;r++)a[r]=h(t,e[r]);else if(o.Z.isArray(t)&&o.Z.isArray(e))for(n=Math.min(t.length,e.length),r=0;r<n;r++)a[r]=h(t[r],e[r]);else a=h(t,e);return a},multiply:function(t,e){var i,r,s=[];if(t=o.Z.evalSlider(t),e=o.Z.evalSlider(e),o.Z.isArray(t)&&o.Z.isNumber(e))for(r=t.length,i=0;i<r;i++)s[i]=t[i]*e;else if(o.Z.isNumber(t)&&o.Z.isArray(e))for(r=e.length,i=0;i<r;i++)s[i]=t*e[i];else if(o.Z.isArray(t)&&o.Z.isArray(e))for(r=Math.min(t.length,e.length),i=0;i<r;i++)s[i]=t[i]*e[i];else s=t*e;return s},subtract:function(t,e){var i,r,s=[];if(t=o.Z.evalSlider(t),e=o.Z.evalSlider(e),o.Z.isArray(t)&&o.Z.isNumber(e))for(r=t.length,i=0;i<r;i++)s[i]=t[i]-e;else if(o.Z.isNumber(t)&&o.Z.isArray(e))for(r=e.length,i=0;i<r;i++)s[i]=t-e[i];else if(o.Z.isArray(t)&&o.Z.isArray(e))for(r=Math.min(t.length,e.length),i=0;i<r;i++)s[i]=t[i]-e[i];else s=t-e;return s},TheilSenRegression:function(t){var e,i,r=[],o=[],n=[];for(e=0;e<t.length;e++){for(o.length=0,i=0;i<t.length;i++)Math.abs(t[i].usrCoords[1]-t[e].usrCoords[1])>s.Z.eps&&(o[i]=(t[i].usrCoords[2]-t[e].usrCoords[2])/(t[i].usrCoords[1]-t[e].usrCoords[1]));r[e]=this.median(o),n.push(t[e].usrCoords[2]-r[e]*t[e].usrCoords[1])}return[this.median(n),this.median(r),-1]},generateGaussian:function(t,e){var i,r,s;if(this.hasSpare)return this.hasSpare=!1,this.spare*e+t;do{s=(i=2*Math.random()-1)*i+(r=2*Math.random()-1)*r}while(s>=1||0===s);return s=Math.sqrt(-2*Math.log(s)/s),this.spare=r*s,this.hasSpare=!0,t+e*i*s},randomNormal:function(t,e){return this.generateGaussian(t,e)},randomUniform:function(t,e){return Math.random()*(e-t)+t},randomExponential:function(t){var e;if(t<=0)return NaN;do{e=Math.random()}while(0===e);return-Math.log(e)/t},randomGamma:function(t,e,i){var r,s,o,n,a,h;if(t<=0)return NaN;if(e=e||1,i=i||0,1===t)return e*this.randomExponential(1)+i;if(t<1){a=Math.E/(t+Math.E);do{r=Math.random();do{s=Math.random()}while(0===s);r<a?(o=Math.pow(s,1/t),h=Math.exp(-o)):(o=1-Math.log(s),h=Math.pow(o,t-1)),r=Math.random()}while(r>=h);return e*o+i}do{n=Math.tan(Math.PI*Math.random()),(o=Math.sqrt(2*t-1)*n+t-1)>0&&(s=Math.random())}while(o<=0||s>(1+n*n)*Math.exp((t-1)*Math.log(o/(t-1))-Math.sqrt(2*t-1)*n));return e*o+i},randomBeta:function(t,e){var i;return t<=0||e<=0?NaN:(i=this.randomGamma(t))/(i+this.randomGamma(e))},randomChisquare:function(t){return t<=0?NaN:2*this.randomGamma(.5*t)},randomF:function(t,e){return t<=0||e<=0?NaN:this.randomChisquare(t)*e/(this.randomChisquare(e)*t)},randomT:function(t){var e,i;return t<=0?NaN:(e=this.randomNormal(0,1),i=this.randomChisquare(t),e/Math.sqrt(i/t))},randomBinomial:function(t,e){var i,r,s,o,n;if(e<0||e>1||t<0)return NaN;if(0===e)return 0;if(1===e)return t;if(0===t)return 0;if(1===t)return Math.random()<e?1:0;if(e>.5)return t-this.randomBinomial(t,1-e);if(t<100){if(i=-1,r=0,0===(s=Math.log(1-e)))return 0;do{i+=1,r+=Math.floor(Math.log(Math.random())/s)+1}while(r<t)}else n=t-(o=1+Math.floor(.5*t))+1,i=(i=this.randomBeta(o,n))>=e?this.randomBinomial(o-1,e/i):o+this.randomBinomial(n-1,(e-i)/(1-i));return i},randomGeometric:function(t){var e;return t<0||t>1?NaN:(e=Math.random(),Math.ceil(Math.log(e)/Math.log(1-t)))},randomPoisson:function(t){var e,i,r=Math.exp(-t),s=0,o=1;if(t<=0)return NaN;if(t<10){do{o*=Math.random(),s+=1}while(o>r);e=s-1}else s=Math.floor(7/8*t),e=(i=this.randomGamma(s))<t?s+this.randomPoisson(t-i):this.randomBinomial(s-1,t/i);return e},randomHypergeometric:function(t,e,i){var r,s,o,n=t+e-i,a=Math.min(t,e),h=a;if(t<1||e<1||i>t+e)return NaN;for(r=i;h*r>0;)s=Math.random(),h-=Math.floor(s+h/(n+r)),r-=1;return o=a-h,t<=e?o:i-o},histogram:function(t,e){var i,s,o,n,a,h,l,c,d,u=[],p=[];for(h=e.bins||10,!1===(c=e.range||!1)?(n=Math.min.apply(null,t),a=Math.max.apply(null,t)):(n=c[0],a=c[1]),l=h>0?(a-n)/(h-1):0,i=0;i<h;i++)u.push(0),p.push(n+i*l);for(s=t.length,i=0;i<s;i++)(o=Math.floor((t[i]-n)/l))>=0&&o<h&&(u[o]+=1);if(e.density)for(d=r.Z.Math.Statistics.sum(u),i=0;i<h;i++)u[i]/=d;if(e.cumulative)for(i=1;i<h;i++)u[i]+=u[i-1];return[u,p]}},e.Z=s.Z.Statistics},766:function(t,e,i){var r=i(765),s=i(351),o=i(275),n=i(327),a=i(109);r.Z.Options={jc:{enabled:!0,compile:!0},board:{animationDelay:35,axis:!1,boundingBox:[-5,5,5,-5],browserPan:!1,clickDelay:600,dblClickSuppressClick:!1,defaultAxes:{x:{name:"x",fixed:!0,ticks:{label:{visible:"inherit",anchorX:"middle",anchorY:"top",fontSize:12,offset:[0,-3]},tickEndings:[0,1],majorTickEndings:[1,1],drawZero:!1,needsRegularUpdate:!1,visible:"inherit"}},y:{name:"y",fixed:!0,ticks:{label:{visible:"inherit",anchorX:"right",anchorY:"middle",fontSize:12,offset:[-6,0]},tickEndings:[1,0],majorTickEndings:[1,1],drawZero:!1,needsRegularUpdate:!1,visible:"inherit"}}},description:"",document:!1,drag:{enabled:!0},fullscreen:{symbol:'<svg height="1em" width="1em" version="1.1" viewBox="10 10 18 18"><path fill="#666" d="m 10,16 2,0 0,-4 4,0 0,-2 L 10,10 l 0,6 0,0 z"></path><path fill="#666" d="m 20,10 0,2 4,0 0,4 2,0 L 26,10 l -6,0 0,0 z"></path><path fill="#666" d="m 24,24 -4,0 0,2 L 26,26 l 0,-6 -2,0 0,4 0,0 z"></path><path fill="#666" d="M 12,20 10,20 10,26 l 6,0 0,-2 -4,0 0,-4 0,0 z"></path></svg>',scale:.85,id:null},ignoreLabels:!0,intl:{enabled:!1},keepAspectRatio:!1,keyboard:{enabled:!0,dx:10,dy:10,panShift:!0,panCtrl:!1},logging:{enabled:!1},minimizeReflow:"none",maxBoundingBox:[-1/0,1/0,1/0,-1/0],maxFrameRate:40,maxNameLength:1,moveTarget:null,offsetX:0,offsetY:0,pan:{enabled:!0,needShift:!0,needTwoFingers:!1},registerEvents:!0,renderer:"auto",resize:{enabled:!0,throttle:10},screenshot:{scale:1,type:"png",symbol:"⌘",css:"background-color:#eeeeee; opacity:1.0; border:2px solid black; border-radius:10px; text-align:center",cssButton:"padding: 4px 10px; border: solid #356AA0 1px; border-radius: 5px; position: absolute; right: 2ex; top: 2ex; background-color: rgba(255, 255, 255, 0.3);"},selection:{enabled:!1,name:"selectionPolygon",needShift:!1,needCtrl:!0,fillColor:"#ffff00",visible:!1,withLines:!1,vertices:{visible:!1}},showClearTraces:!1,showCopyright:!0,showFullscreen:!1,showInfobox:!0,showNavigation:!0,showReload:!1,showScreenshot:!1,showZoom:!0,takeFirst:!1,takeSizeFromFile:!1,theme:"default",title:"",viewport:[0,0,0,0],zoom:{enabled:!0,factorX:1.25,factorY:1.25,wheel:!0,needShift:!0,center:"auto",min:1e-4,max:1e4,pinch:!0,pinchHorizontal:!0,pinchVertical:!0,pinchSensitivity:7},zoomX:1,zoomY:1},navbar:{strokeColor:"#333333",fillColor:"transparent",highlightFillColor:"#aaaaaa",padding:"2px",position:"absolute",fontSize:"14px",cursor:"pointer",zIndex:"100",right:"5px",bottom:"5px"},elements:{dash:0,dashScale:!1,draft:{draft:!1,strokeColor:"#565656",fillColor:"#565656",strokeOpacity:.8,fillOpacity:.8,strokeWidth:1},dragToTopOfLayer:!1,fillColor:n.Z.palette.red,fillOpacity:1,fixed:!1,frozen:!1,gradient:null,gradientAngle:0,gradientCX:.5,gradientCY:.5,gradientEndOffset:1,gradientFX:.5,gradientFY:.5,gradientFR:0,gradientR:.5,gradientSecondColor:"#ffffff",gradientSecondOpacity:1,gradientStartOffset:0,highlight:!0,highlightFillColor:"none",highlightFillOpacity:1,highlightStrokeColor:"#c3d9ff",highlightStrokeOpacity:1,highlightStrokeWidth:2,isLabel:!1,layer:0,lineCap:"butt",needsRegularUpdate:!0,precision:"inherit",priv:!1,rotatable:!0,scalable:!0,shadow:{enabled:!1,color:[0,0,0],opacity:1,blur:3,blend:.1,offset:[5,5]},snapToGrid:!1,strokeColor:n.Z.palette.blue,strokeOpacity:1,strokeWidth:2,tabindex:0,trace:!1,traceAttributes:{},transitionDuration:100,transitionProperties:["fill","fill-opacity","stroke","stroke-opacity","stroke-width"],visible:!0,viewport:"inherit",withLabel:!1},ticks:{generateLabelText:null,generateLabelValue:null,drawLabels:!1,label:{},beautifulScientificTickLabels:!1,useUnicodeMinus:!0,anchor:"left",drawZero:!1,insertTicks:!1,minTicksDistance:10,minorHeight:4,majorHeight:10,tickEndings:[1,1],majorTickEndings:[1,1],ignoreInfiniteTickEndings:!0,minorTicks:4,ticksPerLabel:!1,scale:1,scaleSymbol:"",labels:[],maxLabelLength:5,precision:3,digits:3,ticksDistance:1,face:"|",strokeOpacity:1,strokeWidth:1,strokeColor:"#000000",highlightStrokeColor:"#888888",fillColor:"none",highlightFillColor:"none",visible:"inherit",includeBoundaries:!1,type:"linear",intl:{enabled:"inherit",options:{}},minorTicksInArrow:!1,majorTicksInArrow:!0,labelInArrow:!0,minorTicksInMargin:!1,majorTicksInMargin:!0,labelInMargin:!0},hatch:{drawLabels:!1,drawZero:!0,majorHeight:20,anchor:"middle",face:"|",strokeWidth:2,strokeColor:n.Z.palette.blue,ticksDistance:.2},precision:{touch:30,touchMax:100,mouse:4,pen:4,epsilon:1e-4,hasPoint:4},layer:{numlayers:20,unused9:19,unused8:18,unused7:17,unused6:16,unused5:15,unused4:14,unused3:13,unused2:12,unused1:11,unused0:10,text:9,point:9,glider:9,arc:8,line:7,circle:6,curve:5,turtle:5,polygon:3,sector:3,angle:3,integral:3,axis:2,ticks:2,grid:1,image:0,trace:0},angle:{withLabel:!0,radius:"auto",type:"sector",orthoType:"square",orthoSensitivity:1,fillColor:n.Z.palette.orange,highlightFillColor:n.Z.palette.orange,strokeColor:n.Z.palette.orange,fillOpacity:.3,highlightFillOpacity:.3,radiuspoint:{withLabel:!1,visible:!1,name:""},pointsquare:{withLabel:!1,visible:!1,name:""},dot:{visible:!1,strokeColor:"none",fillColor:"#000000",size:2,face:"o",withLabel:!1,name:""},label:{position:"top",offset:[0,0],strokeColor:n.Z.palette.blue},arc:{visible:!1,fillColor:"none"}},arc:{selection:"auto",hasInnerPoints:!1,label:{anchorX:"auto",anchorY:"auto"},firstArrow:!1,lastArrow:!1,fillColor:"none",highlightFillColor:"none",strokeColor:n.Z.palette.blue,highlightStrokeColor:"#c3d9ff",useDirection:!1,center:{},radiusPoint:{},anglePoint:{}},arrow:{firstArrow:!1,lastArrow:{type:1,highlightSize:6,size:6}},arrowparallel:{firstArrow:!1,lastArrow:{type:1,highlightSize:6,size:6}},axis:{name:"",needsRegularUpdate:!1,strokeWidth:1,lastArrow:{type:1,highlightSize:8,size:8},strokeColor:"#666666",highlightStrokeWidth:1,highlightStrokeColor:"#888888",position:"static",anchor:"",anchorDist:"10%",ticksAutoPos:!1,ticksAutoPosThreshold:"5%",withTicks:!0,straightFirst:!0,straightLast:!0,margin:-4,withLabel:!1,scalable:!1,ticks:{label:{offset:[4,-9],parse:!1,needsRegularUpdate:!1,display:"internal",visible:"inherit",layer:9},visible:"inherit",needsRegularUpdate:!1,strokeWidth:1,strokeColor:"#666666",highlightStrokeColor:"#888888",drawLabels:!0,drawZero:!1,insertTicks:!0,minTicksDistance:5,minorHeight:10,majorHeight:-1,tickEndings:[0,1],majorTickEndings:[1,1],minorTicks:4,ticksDistance:1,strokeOpacity:.25},point1:{needsRegularUpdate:!1,visible:!1},point2:{needsRegularUpdate:!1,visible:!1},tabindex:-1,label:{position:"lft",offset:[10,10]}},bisector:{strokeColor:"#000000",point:{visible:!1,fixed:!1,withLabel:!1,name:""}},bisectorlines:{line1:{strokeColor:"#000000"},line2:{strokeColor:"#000000"}},boxplot:{dir:"vertical",smallWidth:.5,strokeWidth:2,strokeColor:n.Z.palette.blue,fillColor:n.Z.palette.blue,fillOpacity:.2,highlightStrokeWidth:2,highlightStrokeColor:n.Z.palette.blue,highlightFillColor:n.Z.palette.blue,highlightFillOpacity:.1},button:{disabled:!1,display:"html"},cardinalspline:{createPoints:!0,isArrayOfCoordinates:!0,points:{strokeOpacity:.05,fillOpacity:.05,highlightStrokeOpacity:1,highlightFillOpacity:1,withLabel:!1,name:"",fixed:!1}},chart:{chartStyle:"line",colors:["#B02B2C","#3F4C6B","#C79810","#D15600","#FFFF88","#c3d9ff","#4096EE","#008C00"],highlightcolors:null,fillcolor:null,highlightonsector:!1,highlightbysize:!1,fillOpacity:.6,withLines:!1,label:{}},checkbox:{disabled:!1,checked:!1,display:"html"},circle:{hasInnerPoints:!1,fillColor:"none",highlightFillColor:"none",strokeColor:n.Z.palette.blue,highlightStrokeColor:"#c3d9ff",center:{visible:!1,withLabel:!1,fixed:!1,fillColor:n.Z.palette.red,strokeColor:n.Z.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",layer:9,name:""},point2:{fillColor:n.Z.palette.red,strokeColor:n.Z.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",layer:9,visible:!1,withLabel:!1,fixed:!1,name:""},label:{position:"urt"}},circumcircle:{fillColor:"none",highlightFillColor:"none",strokeColor:n.Z.palette.blue,highlightStrokeColor:"#c3d9ff",center:{visible:!1,fixed:!1,withLabel:!1,fillColor:n.Z.palette.red,strokeColor:n.Z.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",name:""}},circumcirclearc:{fillColor:"none",highlightFillColor:"none",strokeColor:n.Z.palette.blue,highlightStrokeColor:"#c3d9ff",center:{visible:!1,withLabel:!1,fixed:!1,name:""}},circumcirclesector:{useDirection:!0,fillColor:n.Z.palette.yellow,highlightFillColor:n.Z.palette.yellow,fillOpacity:.3,highlightFillOpacity:.3,strokeColor:n.Z.palette.blue,highlightStrokeColor:"#c3d9ff",point:{visible:!1,fixed:!1,withLabel:!1,name:""}},comb:{frequency:.2,width:.4,angle:Math.PI/3,reverse:!1,point1:{visible:!1,withLabel:!1,fixed:!1,name:""},point2:{visible:!1,withLabel:!1,fixed:!1,name:""},strokeWidth:1,strokeColor:"#0000ff",fillColor:"none"},conic:{fillColor:"none",highlightFillColor:"none",strokeColor:n.Z.palette.blue,highlightStrokeColor:"#c3d9ff",foci:{fixed:!1,visible:!1,withLabel:!1,name:""},center:{visible:!1,withLabel:!1,name:""},point:{withLabel:!1,name:""},line:{visible:!1}},curve:{strokeWidth:1,strokeColor:n.Z.palette.blue,fillColor:"none",fixed:!0,curveType:null,doAdvancedPlot:!0,doAdvancedPlotOld:!1,firstArrow:!1,handDrawing:!1,label:{position:"lft"},lastArrow:!1,lineCap:"round",numberPointsHigh:1600,numberPointsLow:400,plotVersion:2,recursionDepthHigh:17,recursionDepthLow:15},foreignobject:{fixed:!0,visible:!0,needsRegularUpdate:!1,attractors:[]},functiongraph:{},glider:{label:{}},grid:{needsRegularUpdate:!1,hasGrid:!1,highlight:!1,gridX:null,gridY:null,majorStep:"auto",minorElements:0,forceSquare:!1,includeBoundaries:!1,size:void 0,face:void 0,margin:void 0,drawZero:void 0,polygonVertices:void 0,major:{size:5,face:"line",margin:0,drawZero:!0,polygonVertices:6},minor:{visible:"inherit",size:3,face:"point",margin:0,drawZero:!0,polygonVertices:6},snapToGrid:!1,strokeColor:"#c0c0c0",strokeWidth:1,strokeOpacity:.5,dash:0,theme:0,themes:[{},{forceSquare:"min",major:{face:"line"}},{major:{face:"line"},minor:{size:3,face:"point"},minorElements:"auto"},{major:{face:"line"},minor:{face:"line",strokeOpacity:.25},minorElements:"auto"},{major:{face:"line"},minor:{face:"+",size:"95%"},minorElements:"auto"},{major:{face:"+",size:10,strokeOpacity:1},minor:{face:"point",size:3},minorElements:"auto"},{major:{face:"circle",size:8,fillColor:"#c0c0c0"},minor:{face:"point",size:3},minorElements:"auto"}]},group:{needsRegularUpdate:!0},htmlslider:{widthRange:100,widthOut:34,step:.01,frozen:!0,isLabel:!1,strokeColor:"#000000",display:"html",anchorX:"left",anchorY:"middle",withLabel:!1},image:{imageString:null,fillOpacity:1,highlightFillOpacity:.6,cssClass:"JXGimage",highlightCssClass:"JXGimageHighlight",rotate:0,snapSizeX:1,snapSizeY:1,attractors:[]},implicitcurve:{margin:1,resolution_outer:5,resolution_inner:5,max_steps:1024,alpha_0:.05,tol_u0:o.Z.eps,tol_newton:1e-7,tol_cusp:.05,tol_progress:1e-4,qdt_box:.2,kappa_0:.2,delta_0:.05,h_initial:.1,h_critical:.001,h_max:1,loop_dist:.09,loop_dir:.99,loop_detection:!0},incircle:{fillColor:"none",highlightFillColor:"none",strokeColor:n.Z.palette.blue,highlightStrokeColor:"#c3d9ff",center:{visible:!1,fixed:!1,withLabel:!1,fillColor:n.Z.palette.red,strokeColor:n.Z.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",name:""}},inequality:{fillColor:n.Z.palette.red,fillOpacity:.2,strokeColor:"none",inverse:!1},infobox:{distanceX:-20,distanceY:25,intl:{enabled:"inherit",options:{}},fontSize:12,isLabel:!1,strokeColor:"#bbbbbb",display:"html",anchorX:"left",anchorY:"middle",cssClass:"JXGinfobox",rotate:0,visible:!0,parse:!1,transitionDuration:0,needsRegularUpdate:!1,tabindex:null,viewport:[0,0,0,0]},integral:{axis:"x",withLabel:!0,fixed:!0,strokeWidth:0,strokeOpacity:0,fillColor:n.Z.palette.red,fillOpacity:.3,highlightFillColor:n.Z.palette.red,highlightFillOpacity:.2,curveLeft:{visible:!0,withLabel:!1,color:n.Z.palette.red,fillOpacity:.8,layer:9},baseLeft:{visible:!1,fixed:!1,withLabel:!1,name:""},curveRight:{visible:!0,withLabel:!1,color:n.Z.palette.red,fillOpacity:.8,layer:9},baseRight:{visible:!1,fixed:!1,withLabel:!1,name:""},label:{fontSize:20,digits:4,intl:{enabled:!1,options:{}}}},input:{disabled:!1,maxlength:524288,display:"html"},intersection:{alwaysIntersect:!0},label:{visible:"inherit",strokeColor:"#000000",strokeOpacity:1,highlightStrokeOpacity:.666666,highlightStrokeColor:"#000000",fixed:!0,position:"urt",distance:1.5,offset:[10,10],autoPosition:!1,autoPositionMinDistance:12,autoPositionMaxDistance:28},legend:{style:"vertical",labels:["1","2","3","4","5","6","7","8"],colors:["#B02B2C","#3F4C6B","#C79810","#D15600","#FFFF88","#c3d9ff","#4096EE","#008C00"],rowHeight:20,strokeWidth:5},line:{firstArrow:!1,lastArrow:!1,margin:0,straightFirst:!0,straightLast:!0,fillColor:"none",highlightFillColor:"none",strokeColor:n.Z.palette.blue,highlightStrokeColor:"#c3d9ff",withTicks:!1,point1:{fillColor:n.Z.palette.red,strokeColor:n.Z.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",layer:9,visible:!1,withLabel:!1,fixed:!1,name:""},point2:{fillColor:n.Z.palette.red,strokeColor:n.Z.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",layer:9,visible:!1,withLabel:!1,fixed:!1,name:""},ticks:{drawLabels:!0,label:{offset:[4,-9]},drawZero:!1,insertTicks:!1,ticksDistance:1,minTicksDistance:50,minorHeight:4,majorHeight:-1,minorTicks:4,strokeOpacity:.3,visible:"inherit"},label:{position:"llft"},snapToGrid:!1,snapSizeX:1,snapSizeY:1,touchFirstPoint:!1,touchLastPoint:!1},locus:{translateToOrigin:!1,translateTo10:!1,stretch:!1,toOrigin:null,to10:null},measurement:{baseUnit:"",units:{},dim:null,showPrefix:!0,showSuffix:!0,prefix:"",suffix:"",formatPrefix:function(t){return t},formatSuffix:function(t){return t},formatCoords:function(t,e,i){return"("+t+", "+e+")"},formatDirection:function(t,e){return"("+t+", "+e+")"}},metapostspline:{createPoints:!0,isArrayOfCoordinates:!0,points:{strokeOpacity:.5,fillOpacity:.5,highlightStrokeOpacity:1,highlightFillOpacity:1,withLabel:!1,name:"",fixed:!1}},mirrorelement:{fixed:!0,point:{},center:{},type:"Euclidean"},nonreflexangle:{},normal:{strokeColor:"#000000",point:{visible:!1,fixed:!1,withLabel:!1,name:""}},orthogonalprojection:{},otherintersection:{alwaysIntersect:!0,precision:.001},parallel:{strokeColor:"#000000",point:{visible:!1,fixed:!1,withLabel:!1,name:""},label:{position:"llft"}},parallelogram:{parallelpoint:{withLabel:!1,name:""}},parallelpoint:{},perpendicular:{strokeColor:"#000000",straightFirst:!0,straightLast:!0},perpendicularsegment:{strokeColor:"#000000",straightFirst:!1,straightLast:!1,point:{visible:!1,fixed:!0,withLabel:!1,name:""}},point:{withLabel:!0,label:{},style:5,face:"o",size:3,sizeUnit:"screen",strokeWidth:2,transitionProperties:["fill","fill-opacity","stroke","stroke-opacity","stroke-width","width","height","rx","ry"],fillColor:n.Z.palette.red,strokeColor:n.Z.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",zoom:!1,showInfobox:"inherit",infoboxDigits:"auto",draft:!1,attractors:[],attractorUnit:"user",attractorDistance:0,snatchDistance:0,snapToGrid:!1,attractToGrid:!1,snapSizeX:1,snapSizeY:1,snapToPoints:!1,ignoredSnapToPoints:[]},polygon:{hasInnerPoints:!1,fillColor:n.Z.palette.yellow,highlightFillColor:n.Z.palette.yellow,fillOpacity:.3,highlightFillOpacity:.2,withLines:!0,borders:{withLabel:!1,strokeWidth:1,highlightStrokeWidth:1,layer:5,label:{position:"top"},visible:"inherit"},highlightByStrokeWidth:!1,vertices:{layer:9,withLabel:!1,name:"",strokeColor:n.Z.palette.red,fillColor:n.Z.palette.red,fixed:!1,visible:"inherit"},label:{offset:[0,0]}},polygonalchain:{fillColor:"none",highlightFillColor:"none"},prescribedangle:{anglePoint:{size:2,visible:!1,withLabel:!1}},reflection:{fixed:!0,center:{},type:"Euclidean"},reflexangle:{},regularpolygon:{hasInnerPoints:!1,fillColor:n.Z.palette.yellow,highlightFillColor:n.Z.palette.yellow,fillOpacity:.3,highlightFillOpacity:.2,withLines:!0,borders:{withLabel:!1,strokeWidth:1,highlightStrokeWidth:1,layer:5,label:{position:"top"}},vertices:{layer:9,withLabel:!0,strokeColor:n.Z.palette.red,fillColor:n.Z.palette.red,fixed:!1},label:{offset:[0,0]}},riemannsum:{withLabel:!1,fillOpacity:.3,fillColor:n.Z.palette.yellow},sector:{fillColor:n.Z.palette.yellow,highlightFillColor:n.Z.palette.yellow,fillOpacity:.3,highlightFillOpacity:.3,highlightOnSector:!1,highlightStrokeWidth:0,selection:"auto",arc:{visible:!1,fillColor:"none",withLabel:!1,name:"",center:{visible:!1,withLabel:!1,name:""},radiusPoint:{visible:!1,withLabel:!1,name:""},anglePoint:{visible:!1,withLabel:!1,name:""}},radiusPoint:{visible:!1,withLabel:!1},center:{visible:!1,withLabel:!1},anglePoint:{visible:!1,withLabel:!1},label:{offset:[0,0],anchorX:"auto",anchorY:"auto"}},segment:{label:{position:"top"}},semicircle:{center:{visible:!1,withLabel:!1,fixed:!1,fillColor:n.Z.palette.red,strokeColor:n.Z.palette.red,highlightFillColor:"#eeeeee",highlightStrokeColor:n.Z.palette.red,name:""}},slider:{snapWidth:-1,snapValues:[],snapValueDistance:0,precision:2,digits:2,intl:{enabled:"inherit",options:{}},firstArrow:!1,lastArrow:!1,withTicks:!0,withLabel:!0,suffixLabel:null,unitLabel:null,postLabel:null,layer:9,showInfobox:!1,name:"",visible:!0,strokeColor:"#000000",highlightStrokeColor:"#888888",fillColor:"#ffffff",highlightFillColor:"none",size:6,point1:{needsRegularUpdate:!1,showInfobox:!1,withLabel:!1,visible:!1,fixed:!0,name:""},point2:{needsRegularUpdate:!1,showInfobox:!1,withLabel:!1,visible:!1,fixed:!0,name:""},baseline:{needsRegularUpdate:!1,visible:"inherit",fixed:!0,scalable:!1,tabindex:null,name:"",strokeWidth:1,strokeColor:"#000000",highlightStrokeColor:"#888888"},ticks:{needsRegularUpdate:!1,fixed:!0,drawLabels:!1,digits:2,includeBoundaries:!0,drawZero:!0,label:{offset:[-4,-14],display:"internal"},minTicksDistance:30,insertTicks:!0,ticksDistance:1,minorHeight:4,majorHeight:5,minorTicks:0,strokeOpacity:1,strokeWidth:1,tickEndings:[0,1],majortickEndings:[0,1],strokeColor:"#000000",visible:"inherit"},highline:{strokeWidth:3,visible:"inherit",fixed:!0,tabindex:null,name:"",strokeColor:"#000000",highlightStrokeColor:"#888888"},label:{visible:"inherit",strokeColor:"#000000"},moveOnUp:!0},slopefield:{strokeWidth:.5,highlightStrokeWidth:.5,highlightStrokeColor:n.Z.palette.blue,highlightStrokeOpacity:.8,scale:1,arrowhead:{enabled:!1,size:5,angle:.125*Math.PI}},slopetriangle:{fillColor:n.Z.palette.red,fillOpacity:.4,highlightFillColor:n.Z.palette.red,highlightFillOpacity:.3,borders:{lastArrow:{type:1,size:6}},glider:{fixed:!0,visible:!1,withLabel:!1},baseline:{visible:!1,withLabel:!1,name:""},basepoint:{visible:!1,withLabel:!1,name:""},tangent:{visible:!1,withLabel:!1,name:""},toppoint:{visible:!1,withLabel:!1,name:""},label:{visible:!0,position:"first"}},smartlabelangle:{cssClass:"smart-label-solid smart-label-angle",highlightCssClass:"smart-label-solid smart-label-angle",anchorX:"left",anchorY:"middle",unit:"",prefix:"",suffix:"",measure:"deg",useMathJax:!0},smartlabelcircle:{cssClass:"smart-label-solid smart-label-circle",highlightCssClass:"smart-label-solid smart-label-circle",anchorX:"middle",useMathJax:!0,unit:"",prefix:"",suffix:"",measure:"radius"},smartlabelline:{cssClass:"smart-label-solid smart-label-line",highlightCssClass:"smart-label-solid smart-label-line",anchorX:"middle",useMathJax:!0,unit:"",measure:"length"},smartlabelpoint:{cssClass:"smart-label-solid smart-label-point",highlightCssClass:"smart-label-solid smart-label-point",anchorX:"middle",anchorY:"top",useMathJax:!0,dir:"row",unit:""},smartlabelpolygon:{cssClass:"smart-label-solid smart-label-polygon",highlightCssClass:"smart-label-solid smart-label-polygon",anchorX:"middle",useMathJax:!0,unit:"",measure:"area"},stepfunction:{},tangent:{},tapemeasure:{strokeColor:"#000000",strokeWidth:2,highlightStrokeColor:"#000000",withTicks:!0,withLabel:!0,rotate:0,precision:2,digits:2,point1:{visible:!0,strokeColor:"#000000",fillColor:"#ffffff",fillOpacity:0,highlightFillOpacity:.1,size:6,snapToPoints:!0,attractorUnit:"screen",attractorDistance:20,showInfobox:!1,withLabel:!1,name:""},point2:{visible:!0,strokeColor:"#000000",fillColor:"#ffffff",fillOpacity:0,highlightFillOpacity:.1,size:6,snapToPoints:!0,attractorUnit:"screen",attractorDistance:20,showInfobox:!1,withLabel:!1,name:""},ticks:{drawLabels:!1,drawZero:!0,insertTicks:!0,ticksDistance:.1,minorHeight:8,majorHeight:16,minorTicks:4,tickEndings:[0,1],majorTickEndings:[0,1],strokeOpacity:1,strokeWidth:1,strokeColor:"#000000",visible:"inherit",label:{anchorY:"top",anchorX:"middle",offset:[0,-10]}},label:{position:"top"}},text:{fontSize:12,fontUnit:"px",formatNumber:!1,digits:2,intl:{enabled:"inherit",options:{minimumFractionDigits:0,maximumFractionDigits:2}},parse:!0,useCaja:!1,isLabel:!1,strokeColor:"#000000",highlightStrokeColor:"#000000",highlightStrokeOpacity:.666666,cssDefaultStyle:"font-family: Arial, Helvetica, Geneva, sans-serif;",highlightCssDefaultStyle:"font-family: Arial, Helvetica, Geneva, sans-serif;",cssStyle:"",highlightCssStyle:"",transitionProperties:["color","opacity"],useASCIIMathML:!1,useMathJax:!1,useKatex:!1,katexMacros:{},toFraction:!1,display:"html",anchor:null,anchorX:"left",anchorY:"middle",cssClass:"JXGtext",highlightCssClass:"JXGtext",dragArea:"all",withLabel:!1,rotate:0,visible:!0,snapSizeX:1,snapSizeY:1,attractors:[]},tracecurve:{strokeColor:"#000000",fillColor:"none",numberPoints:100},turtle:{strokeWidth:1,fillColor:"none",strokeColor:"#000000",arrow:{strokeWidth:2,withLabel:!1,strokeColor:n.Z.palette.red,lastArrow:!0}},vectorfield:{strokeWidth:.5,highlightStrokeWidth:.5,highlightStrokeColor:n.Z.palette.blue,highlightStrokeOpacity:.8,scale:1,arrowhead:{enabled:!0,size:5,angle:.125*Math.PI}},shortcuts:{color:["strokeColor","fillColor"],opacity:["strokeOpacity","fillOpacity"],highlightColor:["highlightStrokeColor","highlightFillColor"],highlightOpacity:["highlightStrokeOpacity","highlightFillOpacity"],strokeWidth:["strokeWidth","highlightStrokeWidth"]}},r.Z.Validator=function(){var t,e=function(t){return a.Z.isString(t)},i=function(t){return Math.abs(t-Math.round(t))<o.Z.eps},s=function(t){return i(t)&&t>0},n=function(t){return t>0},h=function(t){return t>=0},l={},c={attractorDistance:h,color:e,display:function(t){return"html"===t||"internal"===t},doAdvancedPlot:!1,draft:!1,drawLabels:!1,drawZero:!1,face:function(t){return a.Z.exists(r.Z.normalizePointFace(t))},factor:a.Z.isNumber,fillColor:e,fillOpacity:a.Z.isNumber,firstArrow:!1,fontSize:i,dash:i,gridX:a.Z.isNumber,gridY:a.Z.isNumber,hasGrid:!1,highlightFillColor:e,highlightFillOpacity:a.Z.isNumber,highlightStrokeColor:e,highlightStrokeOpacity:a.Z.isNumber,insertTicks:!1,lastArrow:!1,layer:function(t){return i(t)&&t>=0},majorHeight:i,minorHeight:i,minorTicks:h,minTicksDistance:s,numberPointsHigh:s,numberPointsLow:s,opacity:a.Z.isNumber,radius:a.Z.isNumber,RDPsmoothing:!1,renderer:function(t){return"vml"===t||"svg"===t||"canvas"===t||"no"===t},right:function(t){return/^[0-9]+px$/.test(t)},showCopyright:!1,showInfobox:!1,showNavigation:!1,size:h,snapSizeX:n,snapSizeY:n,snapWidth:a.Z.isNumber,snapToGrid:!1,snatchDistance:h,straightFirst:!1,straightLast:!1,stretch:!1,strokeColor:e,strokeOpacity:a.Z.isNumber,strokeWidth:h,takeFirst:!1,takeSizeFromFile:!1,to10:!1,toOrigin:!1,translateTo10:!1,translateToOrigin:!1,useASCIIMathML:!1,useDirection:!1,useMathJax:!1,withLabel:!1,withTicks:!1,zoom:!1};for(t in c)c.hasOwnProperty(t)&&(l[t.toLowerCase()]=c[t]);return l}(),r.Z.normalizePointFace=function(t){return{cross:"x",x:"x",circle:"o",o:"o",square:"[]","[]":"[]",plus:"+","+":"+",divide:"|","|":"|",minus:"-","-":"-",diamond:"<>","<>":"<>",diamond2:"<<>>","<<>>":"<<>>",triangleup:"^",A:"^",a:"^","^":"^",triangledown:"v",v:"v",triangleleft:"<","<":"<",triangleright:">",">":">"}[t]},r.Z.useStandardOptions=function(t){var e,i,o,n,a=r.Z.Options,h=t.hasGrid;for(e in t.options.grid.hasGrid=a.grid.hasGrid,t.options.grid.gridX=a.grid.gridX,t.options.grid.gridY=a.grid.gridY,t.options.grid.gridColor=a.grid.gridColor,t.options.grid.gridOpacity=a.grid.gridOpacity,t.options.grid.gridDash=a.grid.gridDash,t.options.grid.snapToGrid=a.grid.snapToGrid,t.options.grid.snapSizeX=a.grid.SnapSizeX,t.options.grid.snapSizeY=a.grid.SnapSizeY,t.takeSizeFromFile=a.takeSizeFromFile,n=function(t,e){t.visProp.fillcolor=e.fillColor,t.visProp.highlightfillcolor=e.highlightFillColor,t.visProp.strokecolor=e.strokeColor,t.visProp.highlightstrokecolor=e.highlightStrokeColor},t.objects)if(t.objects.hasOwnProperty(e))if((o=t.objects[e]).elementClass===s.Z.OBJECT_CLASS_POINT)n(o,a.point);else if(o.elementClass===s.Z.OBJECT_CLASS_LINE)for(n(o,a.line),i=0;i<o.ticks.length;i++)o.ticks[i].majorTicks=a.line.ticks.majorTicks,o.ticks[i].minTicksDistance=a.line.ticks.minTicksDistance,o.ticks[i].visProp.minorheight=a.line.ticks.minorHeight,o.ticks[i].visProp.majorheight=a.line.ticks.majorHeight;else o.elementClass===s.Z.OBJECT_CLASS_CIRCLE?n(o,a.circle):o.type===s.Z.OBJECT_TYPE_ANGLE?n(o,a.angle):o.type===s.Z.OBJECT_TYPE_ARC?n(o,a.arc):o.type===s.Z.OBJECT_TYPE_POLYGON?n(o,a.polygon):o.type===s.Z.OBJECT_TYPE_CONIC?n(o,a.conic):o.type===s.Z.OBJECT_TYPE_CURVE?n(o,a.curve):o.type===s.Z.OBJECT_TYPE_SECTOR&&(o.arc.visProp.fillcolor=a.sector.fillColor,o.arc.visProp.highlightfillcolor=a.sector.highlightFillColor,o.arc.visProp.fillopacity=a.sector.fillOpacity,o.arc.visProp.highlightfillopacity=a.sector.highlightFillOpacity);t.fullUpdate(),h&&!t.hasGrid?t.removeGrids(t):!h&&t.hasGrid&&t.create("grid",[])},r.Z.useBlackWhiteOptions=function(t){var e=r.Z.Options;e.point.fillColor=n.Z.rgb2bw(e.point.fillColor),e.point.highlightFillColor=n.Z.rgb2bw(e.point.highlightFillColor),e.point.strokeColor=n.Z.rgb2bw(e.point.strokeColor),e.point.highlightStrokeColor=n.Z.rgb2bw(e.point.highlightStrokeColor),e.line.fillColor=n.Z.rgb2bw(e.line.fillColor),e.line.highlightFillColor=n.Z.rgb2bw(e.line.highlightFillColor),e.line.strokeColor=n.Z.rgb2bw(e.line.strokeColor),e.line.highlightStrokeColor=n.Z.rgb2bw(e.line.highlightStrokeColor),e.circle.fillColor=n.Z.rgb2bw(e.circle.fillColor),e.circle.highlightFillColor=n.Z.rgb2bw(e.circle.highlightFillColor),e.circle.strokeColor=n.Z.rgb2bw(e.circle.strokeColor),e.circle.highlightStrokeColor=n.Z.rgb2bw(e.circle.highlightStrokeColor),e.arc.fillColor=n.Z.rgb2bw(e.arc.fillColor),e.arc.highlightFillColor=n.Z.rgb2bw(e.arc.highlightFillColor),e.arc.strokeColor=n.Z.rgb2bw(e.arc.strokeColor),e.arc.highlightStrokeColor=n.Z.rgb2bw(e.arc.highlightStrokeColor),e.polygon.fillColor=n.Z.rgb2bw(e.polygon.fillColor),e.polygon.highlightFillColor=n.Z.rgb2bw(e.polygon.highlightFillColor),e.sector.fillColor=n.Z.rgb2bw(e.sector.fillColor),e.sector.highlightFillColor=n.Z.rgb2bw(e.sector.highlightFillColor),e.curve.strokeColor=n.Z.rgb2bw(e.curve.strokeColor),e.grid.gridColor=n.Z.rgb2bw(e.grid.gridColor),r.Z.useStandardOptions(t)},r.Z.Options.normalizePointFace=r.Z.normalizePointFace,e.Z=r.Z.Options},632:function(t,e,i){var r=i(765),s=i(351),o=i(109);r.Z.GeonextParser={replacePow:function(t){var e,i,r,s,o,n,a,h,l,c,d,u;for(c=(t=t.replace(/(\s*)\^(\s*)/g,"^")).indexOf("^"),s=-1;c>=0&&c<t.length-1;){if(s===c)throw new Error("JSXGraph: Error while parsing expression '"+t+"'");if(s=c,l=t.slice(0,c),d=t.slice(c+1),")"===l.charAt(l.length-1)){for(e=1,i=l.length-2;i>=0&&e>0;)")"===(r=l.charAt(i))?e++:"("===r&&(e-=1),i-=1;if(0!==e)throw new Error("JSXGraph: Missing '(' in expression");for(o="",a=l.substring(0,i+1),h=i;h>=0&&a.slice(h,h+1).match(/([\w.]+)/);)o=RegExp.$1+o,h-=1;o=(o+=l.substring(i+1,l.length)).replace(/([()+*%^\-/\][])/g,"\\$1")}else o="[\\w\\.]+";if(d.match(/^([\w.]*\()/)){for(e=1,i=RegExp.$1.length;i<d.length&&e>0;)")"===(r=d.charAt(i))?e-=1:"("===r&&(e+=1),i+=1;if(0!==e)throw new Error("JSXGraph: Missing ')' in expression");n=(n=d.substring(0,i)).replace(/([()+*%^\-/[\]])/g,"\\$1")}else n="[\\w\\.]+";u=new RegExp("("+o+")\\^("+n+")"),c=(t=t.replace(u,"pow($1,$2)")).indexOf("^")}return t},replaceIf:function(t){var e,i,r,s,o,n,a,h,l,c="",d=null,u=null,p=null;if((r=t.indexOf("If("))<0)return t;for(t=t.replace(/""/g,"0");r>=0;){for(e=t.slice(0,r),i=t.slice(r+3),o=1,s=0,n=-1,a=-1;s<i.length&&o>0;)")"===(h=i.charAt(s))?o-=1:"("===h?o+=1:","===h&&1===o&&(n<0?n=s:a=s),s+=1;if(l=i.slice(0,s-1),i=i.slice(s),n<0)return"";if(a<0)return"";d=l.slice(0,n),u=l.slice(n+1,a),p=l.slice(a+1),c+=e+"(("+(d=this.replaceIf(d))+")?("+(u=this.replaceIf(u))+"):("+(p=this.replaceIf(p))+"))",d=null,u=null,r=(t=i).indexOf("If(")}return c+=i},replaceNameById:function(t,e,i){var r,s,o,n,a=0,h=["X","Y","L","V"],l=function(t){return i?"$('"+t+"')":t};for(n=0;n<h.length;n++)for(a=t.indexOf(h[n]+"(");a>=0;)a>=0&&(r=t.indexOf(")",a+2))>=0&&(s=(s=t.slice(a+2,r)).replace(/\\(['"])?/g,"$1"),(o=e.elementsByName[s])&&(t=t.slice(0,a+2)+(i?"$('":"")+l(o.id)+t.slice(r))),r=t.indexOf(")",a+2),a=t.indexOf(h[n]+"(",r);for(a=t.indexOf("Dist(");a>=0;)a>=0&&(r=t.indexOf(",",a+5))>=0&&(s=(s=t.slice(a+5,r)).replace(/\\(['"])?/g,"$1"),(o=e.elementsByName[s])&&(t=t.slice(0,a+5)+l(o.id)+t.slice(r))),r=t.indexOf(",",a+5),a=t.indexOf(",",r),(r=t.indexOf(")",a+1))>=0&&(s=(s=t.slice(a+1,r)).replace(/\\(['"])?/g,"$1"),(o=e.elementsByName[s])&&(t=t.slice(0,a+1)+l(o.id)+t.slice(r))),r=t.indexOf(")",a+1),a=t.indexOf("Dist(",r);for(h=["Deg","Rad"],n=0;n<h.length;n++)for(a=t.indexOf(h[n]+"(");a>=0;)a>=0&&(r=t.indexOf(",",a+4))>=0&&(s=(s=t.slice(a+4,r)).replace(/\\(['"])?/g,"$1"),(o=e.elementsByName[s])&&(t=t.slice(0,a+4)+l(o.id)+t.slice(r))),r=t.indexOf(",",a+4),a=t.indexOf(",",r),(r=t.indexOf(",",a+1))>=0&&(s=(s=t.slice(a+1,r)).replace(/\\(['"])?/g,"$1"),(o=e.elementsByName[s])&&(t=t.slice(0,a+1)+l(o.id)+t.slice(r))),r=t.indexOf(",",a+1),a=t.indexOf(",",r),(r=t.indexOf(")",a+1))>=0&&(s=(s=t.slice(a+1,r)).replace(/\\(['"])?/g,"$1"),(o=e.elementsByName[s])&&(t=t.slice(0,a+1)+l(o.id)+t.slice(r))),r=t.indexOf(")",a+1),a=t.indexOf(h[n]+"(",r);return t},replaceIdByObj:function(t){var e=/(X|Y|L)\(([\w_]+)\)/g;return t=t.replace(e,"$('$2').$1()"),e=/(V)\(([\w_]+)\)/g,t=t.replace(e,"$('$2').Value()"),e=/(Dist)\(([\w_]+),([\w_]+)\)/g,t=t.replace(e,"dist($('$2'), $('$3'))"),e=/(Deg)\(([\w_]+),([ \w[\w_]+),([\w_]+)\)/g,t=t.replace(e,"deg($('$2'),$('$3'),$('$4'))"),e=/Rad\(([\w_]+),([\w_]+),([\w_]+)\)/g,t=t.replace(e,"rad($('$1'),$('$2'),$('$3'))"),e=/N\((.+)\)/g,t=t.replace(e,"($1)")},geonext2JS:function(t,e){var i,r,s,o=["Abs","ACos","ASin","ATan","Ceil","Cos","Exp","Factorial","Floor","Log","Max","Min","Random","Round","Sin","Sqrt","Tan","Trunc"],n=["abs","acos","asin","atan","ceil","cos","exp","factorial","floor","log","max","min","random","round","sin","sqrt","tan","ceil"];for(r=t=(t=(t=t.replace(/</g,"<")).replace(/>/g,">")).replace(/&/g,"&"),r=this.replaceNameById(r,e),r=this.replaceIf(r),r=this.replacePow(r),r=this.replaceIdByObj(r),s=0;s<o.length;s++)i=new RegExp(["(\\W|^)(",o[s],")"].join(""),"ig"),r=r.replace(i,["$1",n[s]].join(""));return r=(r=(r=(r=(r=r.replace(/True/g,"true")).replace(/False/g,"false")).replace(/fasle/g,"false")).replace(/Pi/g,"PI")).replace(/"/g,"'")},findDependencies:function(t,e,i){var r,n,a,h;for(n in o.Z.exists(i)||(i=t.board),r=i.elementsByName)r.hasOwnProperty(n)&&n!==t.name&&(r[n].elementClass===s.Z.OBJECT_CLASS_TEXT&&o.Z.evaluate(r[n].visProp.islabel)||(h=(h=n.replace(/\[/g,"\\[")).replace(/\]/g,"\\]"),a=new RegExp("\\(([\\w\\[\\]'_ ]+,)*("+h+")(,[\\w\\[\\]'_ ]+)*\\)","g"),e.search(a)>=0&&r[n].addChild(t)))},gxt2jc:function(t,e){var i;return i=t=(t=(t=t.replace(/</g,"<")).replace(/>/g,">")).replace(/&/g,"&"),i=(i=(i=(i=this.replaceNameById(i,e,!0)).replace(/True/g,"true")).replace(/False/g,"false")).replace(/fasle/g,"false")}},e.Z=r.Z.GeonextParser},254:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){var _jxg__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(765),_base_constants__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(351),_base_text__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(573),_math_math__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(275),_math_ia__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(785),_math_geometry__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(922),_math_statistics__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__(309),_utils_type__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__(109),_utils_env__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__(503);Object.create||(Object.create=function(t,e){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object prototype may only be an Object: "+t);if(null===t)throw new Error("This browser's implementation of Object.create is a shim and doesn't support 'null' as the first argument.");if(void 0!==e)throw new Error("This browser's implementation of Object.create is a shim and doesn't support a second argument.");function i(){}return i.prototype=t,new i});var priv={modules:{math:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z,"math/geometry":_math_geometry__WEBPACK_IMPORTED_MODULE_5__.Z,"math/statistics":_math_statistics__WEBPACK_IMPORTED_MODULE_6__.Z,"math/numerics":_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.Numerics}},r,_ccache;_jxg__WEBPACK_IMPORTED_MODULE_0__.Z.JessieCode=function(t,e){this.scope={id:0,hasChild:!0,args:[],locals:{},context:null,previous:null},this.scopes=[],this.scopes.push(this.scope),this.dpstack=[[]],this.pscope=0,this.propstack=[{}],this.propscope=0,this.lhs=[],this.isLHS=!1,this.warnLog="jcwarn",this.$log=[],this.builtIn=this.defineBuiltIn(),this.operands=this.getPossibleOperands(),this.board=null,this.forceValueCall=!1,this.lineToElement={},this.parCurLine=1,this.parCurColumn=0,this.line=1,this.col=1,_jxg__WEBPACK_IMPORTED_MODULE_0__.Z.CA&&(this.CA=new _jxg__WEBPACK_IMPORTED_MODULE_0__.Z.CA(this.node,this.createNode,this)),this.code="","string"==typeof t&&this.parse(t,e)},_jxg__WEBPACK_IMPORTED_MODULE_0__.Z.extend(_jxg__WEBPACK_IMPORTED_MODULE_0__.Z.JessieCode.prototype,{node:function(t,e,i){return{type:t,value:e,children:i}},createNode:function(t,e,i){var r,s=this.node(t,e,[]);for(r=2;r<arguments.length;r++)s.children.push(arguments[r]);return"node_const"===s.type&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isNumber(s.value)&&(s.isMath=!0),s.line=this.parCurLine,s.col=this.parCurColumn,s},pushScope:function(t){var e={args:t,locals:{},context:null,previous:this.scope};return this.scope.hasChild=!0,this.scope=e,e.id=this.scopes.push(e)-1,e},popScope:function(){var t=this.scope.previous;return this.scope=null!==t?t:this.scope,this.scope},getElementById:function(t){return this.board.objects[t]},log:function(){this.$log.push(arguments),"object"==typeof console&&console.log&&console.log.apply(console,arguments)},creator:(_ccache={},(r=function(t){var e,i;return"function"==typeof _ccache[this.board.id+t]?e=_ccache[this.board.id+t]:(i=this,(e=function(e,r){var s;return void 0===(s=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(r)?r:{}).name&&void 0===s.id&&(s.name=0!==i.lhs[i.scope.id]?i.lhs[i.scope.id]:""),i.board.create(t,e,s)}).creator=!0,_ccache[this.board.id+t]=e),e}).clearCache=function(){_ccache={}},r),letvar:function(t,e){this.builtIn[t]&&this._warn('"'+t+'" is a predefined value.'),this.scope.locals[t]=e},isLocalVariable:function(t){for(var e=this.scope;null!==e;){if(_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(e.locals[t]))return e;e=e.previous}return null},isParameter:function(t){for(var e=this.scope;null!==e;){if(_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.indexOf(e.args,t)>-1)return e;e=e.previous}return null},isCreator:function(t){return!!_jxg__WEBPACK_IMPORTED_MODULE_0__.Z.elements[t]},isMathMethod:function(t){return"E"!==t&&!!Math[t]},isBuiltIn:function(t){return!!this.builtIn[t]},getvar:function(t,e,i){var r;if(e=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.def(e,!1),null!==(r=this.isLocalVariable(t)))return r.locals[t];if("$board"===t||"EULER"===t||"PI"===t)return this.builtIn[t];if(i){if(this.isBuiltIn(t))return this.builtIn[t];if(this.isMathMethod(t))return Math[t];if(this.isCreator(t))return this.creator(t)}return e||(r=this.board.select(t))===t?void 0:r},resolve:function(t){for(var e=this.scope;null!==e;){if(_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(e.locals[t]))return e.locals[t];e=e.previous}},getvarJS:function(t,e,i){var r,s="";return e=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.def(e,!1),i=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.def(i,!1),null!==this.isParameter(t)?t:null===this.isLocalVariable(t)||i?this.isCreator(t)?"(function () { var a = Array.prototype.slice.call(arguments, 0), props = "+(i?"a.pop()":"{}")+"; return $jc$.board.create.apply($jc$.board, ['"+t+"'].concat([a, props])); })":(i&&this._error("Syntax error (attribute values are allowed with element creators only)"),this.isBuiltIn(t)?(s=this.builtIn[t].src||this.builtIn[t],_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isNumber(s)||s.match(/board\.select/)?s:(t=s.split(".").pop(),_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(this.board.mathLib)&&null!==(r=new RegExp("^Math."+t)).exec(s)?s.replace(r,"$jc$.board.mathLib."+t):_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(this.board.mathLibJXG)&&null!==(r=new RegExp("^JXG.Math.")).exec(s)?s.replace(r,"$jc$.board.mathLibJXG."):s)):this.isMathMethod(t)?"$jc$.board.mathLib."+t:e?"":(_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isId(this.board,t)?(s="$jc$.board.objects['"+t+"']","slider"===this.board.objects[t].elType&&(s+=".Value()")):_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isName(this.board,t)?(s="$jc$.board.elementsByName['"+t+"']","slider"===this.board.elementsByName[t].elType&&(s+=".Value()")):_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isGroup(this.board,t)&&(s="$jc$.board.groups['"+t+"']"),s)):"$jc$.resolve('"+t+"')"},makeMap:function(t){return t.isMap=!0,t},functionCodeJS:function(t){var e=t.children[0].join(", "),i="",r="";return"op_map"===t.value&&(i="{ return ",r=" }"),"function ("+e+") {\nvar $oldscope$ = $jc$.scope;\n$jc$.scope = $jc$.scopes["+this.scope.id+"];\nvar r = (function () "+i+this.compile(t.children[1],!0)+r+")();\n$jc$.scope = $oldscope$;\nreturn r;\n}"},defineFunction:function(node){var fun,i,that=this,list=node.children[0],scope=this.pushScope(list),_that;if(this.board.options.jc.compile){for(this.isLHS=!1,i=0;i<list.length;i++)scope.locals[list[i]]=list[i];this.replaceNames(node.children[1]),fun=function(jc){var fun,str="var f = function($jc$) { return "+jc.functionCodeJS(node)+"}; f;";try{for(fun=eval(str)(jc),scope.argtypes=[],i=0;i<list.length;i++)scope.argtypes.push(that.resolveType(list[i],node));return fun}catch(t){return jc._warn("error compiling function\n\n"+str+"\n\n"+t.toString()),function(){}}}(this),this.popScope()}else fun=function(t,e,i){return function(){var r,s;for(s=e.scope,e.scope=e.scopes[i],r=0;r<t.length;r++)e.scope.locals[t[r]]=arguments[r];return r=e.execute(node.children[1]),e.scope=s,r}}(list,this,scope.id);return fun.node=node,fun.scope=scope,fun.toJS=fun.toString,fun.toString=(_that=this,function(){return _that.compile(_that.replaceIDs(_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.deepCopy(node)))}),fun.deps={},this.collectDependencies(node.children[1],node.children[0],fun.deps),fun},mergeAttributes:function(t){var e,i={};for(e=0;e<arguments.length;e++)i=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.deepCopy(i,arguments[e],!0);return i},setProp:function(t,e,i){var r,s,o={};t.elementClass!==_base_constants__WEBPACK_IMPORTED_MODULE_1__.Z.OBJECT_CLASS_POINT||"X"!==e&&"Y"!==e?t.elementClass!==_base_constants__WEBPACK_IMPORTED_MODULE_1__.Z.OBJECT_CLASS_TEXT||"X"!==e&&"Y"!==e?t.type&&t.elementClass&&t.visProp?_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t[t.methodMap[e]])&&"function"!=typeof t[t.methodMap[e]]?t[t.methodMap[e]]=i:(o[e]=i,t.setAttribute(o)):t[e]=i:("number"==typeof i?t[e]=function(){return i}:"function"==typeof i?(t.isDraggable=!1,t[e]=i):"string"==typeof i&&(t.isDraggable=!1,t[e]=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.createFunction(i,this.board),t[e+"jc"]=i),t[e].origin=i,this.board.update()):(e=e.toLowerCase(),t.isDraggable&&"number"==typeof i?(r="x"===e?i:t.X(),s="y"===e?i:t.Y(),t.setPosition(_base_constants__WEBPACK_IMPORTED_MODULE_1__.Z.COORDS_BY_USER,[r,s])):!t.isDraggable||"function"!=typeof i&&"string"!=typeof i?t.isDraggable||(r="x"===e?i:t.XEval.origin,s="y"===e?i:t.YEval.origin,t.addConstraint([r,s])):(r="x"===e?i:t.coords.usrCoords[1],s="y"===e?i:t.coords.usrCoords[2],t.addConstraint([r,s])),this.board.update())},_genericParse:function(t,e,i,r){var s,o,n,a,h=t.replace(/\r\n/g,"\n").split("\n"),l=[];r||(this.code+=t+"\n"),_base_text__WEBPACK_IMPORTED_MODULE_2__.Z&&(o=_base_text__WEBPACK_IMPORTED_MODULE_2__.Z.prototype.setText,_base_text__WEBPACK_IMPORTED_MODULE_2__.Z.prototype.setText=_base_text__WEBPACK_IMPORTED_MODULE_2__.Z.prototype.setTextJessieCode);try{for(_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(i)||(i=!1),s=0;s<h.length;s++)i&&(h[s]=_jxg__WEBPACK_IMPORTED_MODULE_0__.Z.GeonextParser.geonext2JS(h[s],this.board)),l.push(h[s]);switch(t=l.join("\n"),n=parser.parse(t),this.CA&&(n=this.CA.expandDerivatives(n,null,n),n=this.CA.removeTrivialNodes(n)),e){case"parse":a=this.execute(n);break;case"manipulate":a=this.compile(n);break;case"getAst":a=n;break;default:a=!1}}catch(t){throw t}finally{_base_text__WEBPACK_IMPORTED_MODULE_2__.Z&&(_base_text__WEBPACK_IMPORTED_MODULE_2__.Z.prototype.setText=o)}return a},parse:function(t,e,i){return this._genericParse(t,"parse",e,i)},manipulate:function(t,e,i){return this._genericParse(t,"manipulate",e,i)},getAST:function(t,e,i){return this._genericParse(t,"getAst",e,i)},snippet:function(t,e,i,r,s){var o;return e=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.def(e,!0),i=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.def(i,""),r=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.def(r,!1),this.forceValueCall=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.def(s,!0),o=(e?" function ("+i+") { return ":"")+t+(e?"; }":"")+";",this.parse(o,r,!0)},replaceIDs:function(t){var e,i;if(t.replaced&&(i=this.board.objects[t.children[1][0].value],_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(i)&&""!==i.name&&(t.type="node_var",t.value=i.name,t.children.length=0,delete t.replaced)),_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isArray(t))for(e=0;e<t.length;e++)t[e]=this.replaceIDs(t[e]);if(t.children)for(e=t.children.length;e>0;e--)_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t.children[e-1])&&(t.children[e-1]=this.replaceIDs(t.children[e-1]));return t},replaceNames:function(t,e){var i,r,s=!1;if(void 0!==e&&(s=e),r=t.value,"node_op"===t.type&&"op_lhs"===r&&1===t.children.length?this.isLHS=!0:"node_var"===t.type&&(this.isLHS?this.letvar(r,!0):!_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(this.getvar(r,!0))&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(this.board.elementsByName[r])&&(s&&"slider"!==this.board.elementsByName[r].elType&&(s=!1),t=this.createReplacementNode(t,s))),_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isArray(t))for(i=0;i<t.length;i++)t[i]=this.replaceNames(t[i],s);if(t.children)for(this.forceValueCall&&("op_execfun"===t.value&&"V"!==t.children[0].value&&"$"!==t.children[0].value&&(_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(Math[t.children[0].value])||_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(_math_math__WEBPACK_IMPORTED_MODULE_3__.Z[t.children[0].value]))&&"node_var"===t.children[1][0].type||"op_return"===t.value&&1===t.children.length&&"node_var"===t.children[0].type)&&(s=!0),i=t.children.length;i>0;i--)_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t.children[i-1])&&(t.children[i-1]=this.replaceNames(t.children[i-1],s));return"node_op"===t.type&&"op_lhs"===t.value&&1===t.children.length&&(this.isLHS=!1),t},createReplacementNode:function(t,e){var i=t.value,r=this.board.elementsByName[i];return(t=this.createNode("node_op","op_execfun",this.createNode("node_var",!0===e?"$value":"$"),[this.createNode("node_str",r.id)])).replaced=!0,t},collectDependencies:function(t,e,i){var r,s,o,n;if(_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isArray(t))for(n=t.length,r=0;r<n;r++)this.collectDependencies(t[r],e,i);else if(s=t.value,"node_var"===t.type&&e.indexOf(s)<0&&(o=this.getvar(s))&&o.visProp&&o.elType&&o.elementClass&&o.id&&"slider"===o.elType&&(i[o.id]=o),"node_op"===t.type&&"op_execfun"===t.value&&t.children.length>1&&"$"===t.children[0].value&&t.children[1].length>0&&(i[o=t.children[1][0].value]=this.board.objects[o]),t.children)for(r=t.children.length;r>0;r--)_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t.children[r-1])&&this.collectDependencies(t.children[r-1],e,i)},resolveProperty:function(t,e,i){return i=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.def(i,!1),t&&t.methodMap&&(_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t.subs)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t.subs[e])?t=t.subs:_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t.methodMap[e])?e=t.methodMap[e]:(t=t.visProp,e=e.toLowerCase())),_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isFunction(t)&&this._error("Accessing function properties is not allowed."),_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t)||this._error(t+" is not an object"),_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t[e])||this._error("unknown property "+e),i&&"function"==typeof t[e]?function(){return t[e].apply(t,arguments)}:t[e]},resolveType:function(t,e){var i,r;if(_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isArray(e))for(i=0;i<e.length;i++)if("any"!==(r=this.resolveType(t,e[i])))return r;if("node_op"===e.type&&"op_execfun"===e.value&&"node_var"===e.children[0].type&&e.children[0].value===t)return"function";if("node_op"===e.type){for(i=0;i<e.children.length;i++)if("node_var"===e.children[0].type&&e.children[0].value===t&&("op_add"===e.value||"op_sub"===e.value||"op_mul"===e.value||"op_div"===e.value||"op_mod"===e.value||"op_exp"===e.value||"op_neg"===e.value))return"any";for(i=0;i<e.children.length;i++)if("any"!==(r=this.resolveType(t,e.children[i])))return r}return"any"},getLHS:function(t){var e;if("node_var"===t.type)e={o:this.scope.locals,what:t.value};else if("node_op"===t.type&&"op_property"===t.value)e={o:this.execute(t.children[0]),what:t.children[1]};else{if("node_op"!==t.type||"op_extvalue"!==t.value)throw new Error("Syntax error: Invalid left-hand side of assignment.");e={o:this.execute(t.children[0]),what:this.execute(t.children[1])}}return e},getLHSCompiler:function(t,e){var i;if("node_var"===t.type)i=t.value;else if("node_op"===t.type&&"op_property"===t.value)i=[this.compile(t.children[0],e),"'"+t.children[1]+"'"];else{if("node_op"!==t.type||"op_extvalue"!==t.value)throw new Error("Syntax error: Invalid left-hand side of assignment.");i=[this.compile(t.children[0],e),"node_const"===t.children[1].type?t.children[1].value:this.compile(t.children[1],e)]}return i},execute:function(t){var e,i,r,s,o,n,a,h,l,c,d=[];if(e=0,!t)return e;switch(this.line=t.line,this.col=t.col,t.type){case"node_op":switch(t.value){case"op_none":t.children[0]&&this.execute(t.children[0]),t.children[1]&&(e=this.execute(t.children[1]));break;case"op_assign":i=this.getLHS(t.children[0]),this.lhs[this.scope.id]=i.what,i.o.type&&i.o.elementClass&&i.o.methodMap&&"label"===i.what&&this._error("Left-hand side of assignment is read-only."),e=this.execute(t.children[1]),i.o!==this.scope.locals||_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isArray(i.o)&&"number"==typeof i.what?this.setProp(i.o,i.what,e):this.letvar(i.what,e),this.lhs[this.scope.id]=0;break;case"op_if":this.execute(t.children[0])&&(e=this.execute(t.children[1]));break;case"op_conditional":case"op_if_else":e=this.execute(t.children[0])?this.execute(t.children[1]):this.execute(t.children[2]);break;case"op_while":for(;this.execute(t.children[0]);)this.execute(t.children[1]);break;case"op_do":do{this.execute(t.children[0])}while(this.execute(t.children[1]));break;case"op_for":for(this.execute(t.children[0]);this.execute(t.children[1]);this.execute(t.children[2]))this.execute(t.children[3]);break;case"op_proplst":t.children[0]&&this.execute(t.children[0]),t.children[1]&&this.execute(t.children[1]);break;case"op_emptyobject":e={};break;case"op_proplst_val":this.propstack.push({}),this.propscope++,this.execute(t.children[0]),e=this.propstack[this.propscope],this.propstack.pop(),this.propscope--;break;case"op_prop":this.propstack[this.propscope][t.children[0]]=this.execute(t.children[1]);break;case"op_array":for(e=[],o=t.children[0].length,r=0;r<o;r++)e.push(this.execute(t.children[0][r]));break;case"op_extvalue":e=this.execute(t.children[0]),e="number"==typeof(r=this.execute(t.children[1]))&&Math.abs(Math.round(r)-r)<_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.eps?e[r]:undefined;break;case"op_return":if(0!==this.scope)return this.execute(t.children[0]);this._error("Unexpected return.");break;case"op_map":t.children[1].isMath||"node_var"===t.children[1].type||this._error("execute: In a map only function calls and mathematical expressions are allowed."),(h=this.defineFunction(t)).isMap=!0,e=h;break;case"op_function":(h=this.defineFunction(t)).isMap=!1,e=h;break;case"op_execfun":if(this.dpstack.push([]),this.pscope++,n=t.children[1],_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t.children[2]))if(t.children[3])for(a=t.children[2],l={},r=0;r<a.length;r++)l=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.deepCopy(l,this.execute(a[r]),!0);else l=this.execute(t.children[2]);for(t.children[0]._isFunctionName=!0,h=this.execute(t.children[0]),delete t.children[0]._isFunctionName,c=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(h)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(h.sc)?h.sc:this,!h.creator&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t.children[2])&&this._error("Unexpected value. Only element creators are allowed to have a value after the function call."),r=0;r<n.length;r++)_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(h.scope)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(h.scope.argtypes)&&"function"===h.scope.argtypes[r]?(n[r]._isFunctionName=!0,d[r]=this.execute(n[r]),delete n[r]._isFunctionName):d[r]=this.execute(n[r]),this.dpstack[this.pscope].push({line:t.children[1][r].line,col:t.children[1][r].ecol});if("function"!=typeof h||h.creator)if("function"==typeof h&&h.creator){s=this.line;try{for((e=h(d,l)).jcLineStart=s,e.jcLineEnd=t.eline,r=s;r<=t.line;r++)this.lineToElement[r]=e;e.debugParents=this.dpstack[this.pscope]}catch(t){this._error(t.toString())}}else this._error("Function '"+h+"' is undefined.");else e=h.apply(c,d);this.dpstack.pop(),this.pscope--;break;case"op_property":s=this.execute(t.children[0]),i=t.children[1],e=this.resolveProperty(s,i,!1),_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(e)&&["number","string","boolean"].indexOf(typeof e)<0&&(e.sc=s);break;case"op_use":this._warn("Use of the 'use' operator is deprecated."),this.use(t.children[0].toString());break;case"op_delete":this._warn("Use of the 'delete' operator is deprecated. Please use the remove() function."),i=this.getvar(t.children[0]),e=this.del(i);break;case"op_eq":e=this.execute(t.children[0])==this.execute(t.children[1]);break;case"op_neq":e=this.execute(t.children[0])!=this.execute(t.children[1]);break;case"op_approx":e=Math.abs(this.execute(t.children[0])-this.execute(t.children[1]))<_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.eps;break;case"op_gt":e=this.execute(t.children[0])>this.execute(t.children[1]);break;case"op_lt":e=this.execute(t.children[0])<this.execute(t.children[1]);break;case"op_geq":e=this.execute(t.children[0])>=this.execute(t.children[1]);break;case"op_leq":e=this.execute(t.children[0])<=this.execute(t.children[1]);break;case"op_or":e=this.execute(t.children[0])||this.execute(t.children[1]);break;case"op_and":e=this.execute(t.children[0])&&this.execute(t.children[1]);break;case"op_not":e=!this.execute(t.children[0]);break;case"op_add":e=this.add(this.execute(t.children[0]),this.execute(t.children[1]));break;case"op_sub":e=this.sub(this.execute(t.children[0]),this.execute(t.children[1]));break;case"op_div":e=this.div(this.execute(t.children[0]),this.execute(t.children[1]));break;case"op_mod":e=this.mod(this.execute(t.children[0]),this.execute(t.children[1]),!0);break;case"op_mul":e=this.mul(this.execute(t.children[0]),this.execute(t.children[1]));break;case"op_exp":e=this.pow(this.execute(t.children[0]),this.execute(t.children[1]));break;case"op_neg":e=this.neg(this.execute(t.children[0]))}break;case"node_var":e=this.getvar(t.value,!1,t._isFunctionName);break;case"node_const":e=null===t.value?null:Number(t.value);break;case"node_const_bool":e=t.value;break;case"node_str":e=t.value.replace(/\\(.)/g,"$1")}return e},compile:function(t,e){var i,r,s,o="";if(_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(e)||(e=!1),!t)return o;switch(t.type){case"node_op":switch(t.value){case"op_none":t.children[0]&&(o=this.compile(t.children[0],e)),t.children[1]&&(o+=this.compile(t.children[1],e));break;case"op_assign":e?(i=this.getLHSCompiler(t.children[0],e),_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isArray(i)?o="$jc$.setProp("+i[0]+", "+i[1]+", "+this.compile(t.children[1],e)+");\n":(this.isLocalVariable(i)!==this.scope&&(this.scope.locals[i]=!0),o="$jc$.scopes["+this.scope.id+"].locals['"+i+"'] = "+this.compile(t.children[1],e)+";\n")):o=(i=this.compile(t.children[0]))+" = "+this.compile(t.children[1],e)+";\n";break;case"op_if":o=" if ("+this.compile(t.children[0],e)+") "+this.compile(t.children[1],e);break;case"op_if_else":o=" if ("+this.compile(t.children[0],e)+")"+this.compile(t.children[1],e),o+=" else "+this.compile(t.children[2],e);break;case"op_conditional":o="(("+this.compile(t.children[0],e)+")?("+this.compile(t.children[1],e),o+="):("+this.compile(t.children[2],e)+"))";break;case"op_while":o=" while ("+this.compile(t.children[0],e)+") {\n"+this.compile(t.children[1],e)+"}\n";break;case"op_do":o=" do {\n"+this.compile(t.children[0],e)+"} while ("+this.compile(t.children[1],e)+");\n";break;case"op_for":o=" for ("+this.compile(t.children[0],e)+this.compile(t.children[1],e)+"; "+this.compile(t.children[2],e).slice(0,-2)+") {\n"+this.compile(t.children[3],e)+"\n}\n";break;case"op_proplst":t.children[0]&&(o=this.compile(t.children[0],e)+", "),o+=this.compile(t.children[1],e);break;case"op_prop":o=t.children[0]+": "+this.compile(t.children[1],e);break;case"op_emptyobject":o=e?"{}":"<< >>";break;case"op_proplst_val":o=this.compile(t.children[0],e);break;case"op_array":for(s=[],r=0;r<t.children[0].length;r++)s.push(this.compile(t.children[0][r],e));o="["+s.join(", ")+"]";break;case"op_extvalue":o=this.compile(t.children[0],e)+"["+this.compile(t.children[1],e)+"]";break;case"op_return":o=" return "+this.compile(t.children[0],e)+";\n";break;case"op_map":t.children[1].isMath||"node_var"===t.children[1].type||this._error("compile: In a map only function calls and mathematical expressions are allowed."),s=t.children[0],o=e?" $jc$.makeMap(function ("+s.join(", ")+") { return "+this.compile(t.children[1],e)+"; })":"map ("+s.join(", ")+") -> "+this.compile(t.children[1],e);break;case"op_function":s=t.children[0],this.pushScope(s),o=e?this.functionCodeJS(t):" function ("+s.join(", ")+") "+this.compile(t.children[1],e),this.popScope();break;case"op_execfunmath":console.log("op_execfunmath: TODO"),o="-1";break;case"op_execfun":if(t.children[2]){for(s=[],r=0;r<t.children[2].length;r++)s.push(this.compile(t.children[2][r],e));i=e?"$jc$.mergeAttributes("+s.join(", ")+")":s.join(", ")}for(t.children[0].withProps=!!t.children[2],s=[],r=0;r<t.children[1].length;r++)s.push(this.compile(t.children[1][r],e));o=this.compile(t.children[0],e)+"("+s.join(", ")+(t.children[2]&&e?", "+i:"")+")"+(t.children[2]&&!e?" "+i:""),e&&(o+="\n"),e&&"$"===t.children[0].value&&(o="$jc$.board.objects["+this.compile(t.children[1][0],e)+"]");break;case"op_property":o=e&&"X"!==t.children[1]&&"Y"!==t.children[1]?"$jc$.resolveProperty("+this.compile(t.children[0],e)+", '"+t.children[1]+"', true)":this.compile(t.children[0],e)+"."+t.children[1];break;case"op_use":this._warn("Use of the 'use' operator is deprecated."),o=e?"$jc$.use('":"use('",o+=t.children[0].toString()+"');";break;case"op_delete":this._warn("Use of the 'delete' operator is deprecated. Please use the remove() function."),o=e?"$jc$.del(":"remove(",o+=this.compile(t.children[0],e)+")";break;case"op_eq":o="("+this.compile(t.children[0],e)+" === "+this.compile(t.children[1],e)+")";break;case"op_neq":o="("+this.compile(t.children[0],e)+" !== "+this.compile(t.children[1],e)+")";break;case"op_approx":o="("+this.compile(t.children[0],e)+" ~= "+this.compile(t.children[1],e)+")";break;case"op_gt":o=e?"$jc$.gt("+this.compile(t.children[0],e)+", "+this.compile(t.children[1],e)+")":"("+this.compile(t.children[0],e)+" > "+this.compile(t.children[1],e)+")";break;case"op_lt":o=e?"$jc$.lt("+this.compile(t.children[0],e)+", "+this.compile(t.children[1],e)+")":"("+this.compile(t.children[0],e)+" < "+this.compile(t.children[1],e)+")";break;case"op_geq":o=e?"$jc$.geq("+this.compile(t.children[0],e)+", "+this.compile(t.children[1],e)+")":"("+this.compile(t.children[0],e)+" >= "+this.compile(t.children[1],e)+")";break;case"op_leq":o=e?"$jc$.leq("+this.compile(t.children[0],e)+", "+this.compile(t.children[1],e)+")":"("+this.compile(t.children[0],e)+" <= "+this.compile(t.children[1],e)+")";break;case"op_or":o="("+this.compile(t.children[0],e)+" || "+this.compile(t.children[1],e)+")";break;case"op_and":o="("+this.compile(t.children[0],e)+" && "+this.compile(t.children[1],e)+")";break;case"op_not":o="!("+this.compile(t.children[0],e)+")";break;case"op_add":o=e?"$jc$.add("+this.compile(t.children[0],e)+", "+this.compile(t.children[1],e)+")":"("+this.compile(t.children[0],e)+" + "+this.compile(t.children[1],e)+")";break;case"op_sub":o=e?"$jc$.sub("+this.compile(t.children[0],e)+", "+this.compile(t.children[1],e)+")":"("+this.compile(t.children[0],e)+" - "+this.compile(t.children[1],e)+")";break;case"op_div":o=e?"$jc$.div("+this.compile(t.children[0],e)+", "+this.compile(t.children[1],e)+")":"("+this.compile(t.children[0],e)+" / "+this.compile(t.children[1],e)+")";break;case"op_mod":o=e?"$jc$.mod("+this.compile(t.children[0],e)+", "+this.compile(t.children[1],e)+", true)":"("+this.compile(t.children[0],e)+" % "+this.compile(t.children[1],e)+")";break;case"op_mul":o=e?"$jc$.mul("+this.compile(t.children[0],e)+", "+this.compile(t.children[1],e)+")":"("+this.compile(t.children[0],e)+" * "+this.compile(t.children[1],e)+")";break;case"op_exp":o=e?"$jc$.pow("+this.compile(t.children[0],e)+", "+this.compile(t.children[1],e)+")":"("+this.compile(t.children[0],e)+"^"+this.compile(t.children[1],e)+")";break;case"op_neg":o=e?"$jc$.neg("+this.compile(t.children[0],e)+")":"(-"+this.compile(t.children[0],e)+")"}break;case"node_var":o=e?this.getvarJS(t.value,!1,t.withProps):t.value;break;case"node_const":case"node_const_bool":o=t.value;break;case"node_str":o="'"+t.value+"'"}return t.needsBrackets&&(o="{\n"+o+" }\n"),t.needsAngleBrackets&&(o=e?"{\n"+o+" }\n":"<< "+o+" >>\n"),o},getName:function(t,e){var i="";return _utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t.getName)?(i=t.getName(),_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(i)&&""!==i||!e||(i=t.id)):e&&(i=t.id),i},X:function(t){return t.X()},Y:function(t){return t.Y()},V:function(t){return t.Value()},L:function(t){return t.L()},area:function(t){return _utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t.Area)||this._error("Error: Can't calculate area."),t.Area()},perimeter:function(t){return _utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t.Perimeter)||this._error("Error: Can't calculate perimeter."),t.Perimeter()},dist:function(t,e){return _utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t.Dist)||this._error("Error: Can't calculate distance."),t.Dist(e)},radius:function(t){return _utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t.Radius)||this._error("Error: Can't calculate radius."),t.Radius()},slope:function(t){return _utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(t.Slope)||this._error("Error: Can't calculate slope."),t.Slope()},add:function(t,e){var i,r,s;if(t=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.evalSlider(t),e=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.evalSlider(e),_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(t)||_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(e))s=_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.add(t,e);else if(_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isArray(t)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isArray(e))for(r=Math.min(t.length,e.length),s=[],i=0;i<r;i++)s[i]=t[i]+e[i];else _utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isNumber(t)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isNumber(e)?s=t+e:_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isString(t)||_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isString(e)?s=t.toString()+e.toString():this._error("Operation + not defined on operands "+typeof t+" and "+typeof e);return s},sub:function(t,e){var i,r,s;if(t=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.evalSlider(t),e=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.evalSlider(e),_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(t)||_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(e))s=_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.sub(t,e);else if(_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isArray(t)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isArray(e))for(r=Math.min(t.length,e.length),s=[],i=0;i<r;i++)s[i]=t[i]-e[i];else _utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isNumber(t)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isNumber(e)?s=t-e:this._error("Operation - not defined on operands "+typeof t+" and "+typeof e);return s},neg:function(t){var e,i,r;if(t=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.evalSlider(t),_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(t))r=_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.negative(t);else if(_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isArray(t))for(i=t.length,r=[],e=0;e<i;e++)r[e]=-t[e];else _utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isNumber(t)?r=-t:this._error("Unary operation - not defined on operand "+typeof t);return r},mul:function(t,e){var i,r,s;if(t=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.evalSlider(t),e=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.evalSlider(e),_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isArray(t)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isNumber(e)&&(i=t,e=t=e),_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(t)||_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(e))s=_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.mul(t,e);else if(_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isArray(t)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isArray(e))r=Math.min(t.length,e.length),s=_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.innerProduct(t,e,r);else if(_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isNumber(t)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isArray(e))for(r=e.length,s=[],i=0;i<r;i++)s[i]=t*e[i];else _utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isNumber(t)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isNumber(e)?s=t*e:this._error("Operation * not defined on operands "+typeof t+" and "+typeof e);return s},div:function(t,e){var i,r,s;if(t=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.evalSlider(t),e=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.evalSlider(e),_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(t)||_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(e))s=_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.div(t,e);else if(_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isArray(t)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isNumber(e))for(r=t.length,s=[],i=0;i<r;i++)s[i]=t[i]/e;else _utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isNumber(t)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isNumber(e)?s=t/e:this._error("Operation * not defined on operands "+typeof t+" and "+typeof e);return s},mod:function(t,e){var i,r,s;if(t=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.evalSlider(t),e=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.evalSlider(e),_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(t)||_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(e))return _math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.fmod(t,e);if(_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isArray(t)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isNumber(e))for(r=t.length,s=[],i=0;i<r;i++)s[i]=_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.mod(t[i],e,!0);else _utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isNumber(t)&&_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.isNumber(e)?s=_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.mod(t,e,!0):this._error("Operation * not defined on operands "+typeof t+" and "+typeof e);return s},pow:function(t,e){return t=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.evalSlider(t),e=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.evalSlider(e),_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(t)||_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(e)?_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.pow(t,e):_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.pow(t,e)},lt:function(t,e){return _math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(t)||_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(e)?_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.lt(t,e):t<e},leq:function(t,e){return _math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(t)||_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(e)?_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.leq(t,e):t<=e},gt:function(t,e){return _math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(t)||_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(e)?_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.gt(t,e):t>e},geq:function(t,e){return _math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(t)||_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.isInterval(e)?_math_ia__WEBPACK_IMPORTED_MODULE_4__.Z.geq(t,e):t>=e},randint:function(t,e,i){return _utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(i)||(i=1),Math.round(Math.random()*(e-t)/i)*i+t},DDD:function(t){console.log("Dummy derivative function. This should never appear!")},ifthen:function(t,e,i){return t?e:i},del:function(t){"object"==typeof t&&_jxg__WEBPACK_IMPORTED_MODULE_0__.Z.exists(t.type)&&_jxg__WEBPACK_IMPORTED_MODULE_0__.Z.exists(t.elementClass)&&this.board.removeObject(t)},eval:function(t){return _jxg__WEBPACK_IMPORTED_MODULE_0__.Z.evaluate(t)},use:function(t){var e,i,r=!1;if("string"==typeof t){for(e in _jxg__WEBPACK_IMPORTED_MODULE_0__.Z.boards)if(_jxg__WEBPACK_IMPORTED_MODULE_0__.Z.boards.hasOwnProperty(e)&&_jxg__WEBPACK_IMPORTED_MODULE_0__.Z.boards[e].container===t){i=_jxg__WEBPACK_IMPORTED_MODULE_0__.Z.boards[e],r=!0;break}}else i=t,r=!0;r?(this.board=i,this.builtIn.$board=i,this.builtIn.$board.src="$jc$.board"):this._error("Board '"+t+"' not found!")},findSymbol:function(t,e){var i,r;for(r=-1===(e=_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.def(e,-1))?this.scope:this.scopes[e];null!==r;){for(i in r.locals)if(r.locals.hasOwnProperty(i)&&r.locals[i]===t)return[i,r];r=r.previous}return[]},importModule:function(t){return priv.modules[t.toLowerCase()]},defineBuiltIn:function(){var t=this,e={PI:Math.PI,EULER:Math.E,D:t.DDD,X:t.X,Y:t.Y,V:t.V,Value:t.V,L:t.L,Length:t.L,acosh:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.acosh,acot:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.acot,asinh:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.asinh,binomial:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.binomial,cbrt:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.cbrt,cosh:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.cosh,cot:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.cot,deg:_math_geometry__WEBPACK_IMPORTED_MODULE_5__.Z.trueAngle,A:t.area,area:t.area,Area:t.area,perimeter:t.perimeter,Perimeter:t.perimeter,dist:t.dist,Dist:t.dist,R:t.radius,radius:t.radius,Radius:t.radius,erf:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.erf,erfc:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.erfc,erfi:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.erfi,factorial:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.factorial,gcd:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.gcd,lb:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.log2,lcm:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.lcm,ld:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.log2,lg:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.log10,ln:Math.log,log:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.log,log10:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.log10,log2:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.log2,ndtr:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.ndtr,ndtri:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.ndtri,nthroot:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.nthroot,pow:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.pow,rad:_math_geometry__WEBPACK_IMPORTED_MODULE_5__.Z.rad,ratpow:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.ratpow,trunc:_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.trunc,sinh:_math_math__WEBPACK_IMPORTED_MODULE_3__.Z.sinh,slope:t.slope,Slope:t.slope,randint:t.randint,IfThen:t.ifthen,import:t.importModule,eval:t.eval,use:t.use,remove:t.del,$:t.getElementById,$value:function(e){return t.getElementById(e).Value()},getName:t.getName,name:t.getName,$board:t.board,$log:t.log};return e.rad.sc=_math_geometry__WEBPACK_IMPORTED_MODULE_5__.Z,e.deg.sc=_math_geometry__WEBPACK_IMPORTED_MODULE_5__.Z,e.factorial.sc=_math_math__WEBPACK_IMPORTED_MODULE_3__.Z,e.X.src="$jc$.X",e.Y.src="$jc$.Y",e.V.src="$jc$.V",e.Value.src="$jc$.V",e.L.src="$jc$.L",e.Length.src="$jc$.L",e.acosh.src="JXG.Math.acosh",e.acot.src="JXG.Math.acot",e.asinh.src="JXG.Math.asinh",e.binomial.src="JXG.Math.binomial",e.cbrt.src="JXG.Math.cbrt",e.cot.src="JXG.Math.cot",e.cosh.src="JXG.Math.cosh",e.deg.src="JXG.Math.Geometry.trueAngle",e.erf.src="JXG.Math.erf",e.erfc.src="JXG.Math.erfc",e.erfi.src="JXG.Math.erfi",e.A.src="$jc$.area",e.area.src="$jc$.area",e.Area.src="$jc$.area",e.perimeter.src="$jc$.perimeter",e.Perimeter.src="$jc$.perimeter",e.dist.src="$jc$.dist",e.Dist.src="$jc$.dist",e.R.src="$jc$.radius",e.radius.src="$jc$.radius",e.Radius.src="$jc$.radius",e.factorial.src="JXG.Math.factorial",e.gcd.src="JXG.Math.gcd",e.lb.src="JXG.Math.log2",e.lcm.src="JXG.Math.lcm",e.ld.src="JXG.Math.log2",e.lg.src="JXG.Math.log10",e.ln.src="Math.log",e.log.src="JXG.Math.log",e.log10.src="JXG.Math.log10",e.log2.src="JXG.Math.log2",e.ndtr.src="JXG.Math.ndtr",e.ndtri.src="JXG.Math.ndtri",e.nthroot.src="JXG.Math.nthroot",e.pow.src="JXG.Math.pow",e.rad.src="JXG.Math.Geometry.rad",e.ratpow.src="JXG.Math.ratpow",e.trunc.src="JXG.trunc",e.sinh.src="JXG.Math.sinh",e.slope.src="$jc$.slope",e.Slope.src="$jc$.slope",e.randint.src="$jc$.randint",e.import.src="$jc$.importModule",e.eval.src="$jc$.eval",e.use.src="$jc$.use",e.remove.src="$jc$.del",e.IfThen.src="$jc$.ifthen",e.$.src="(function (n) { return $jc$.board.select(n); })",e.$value.src="(function (n) { return $jc$.board.select(n).Value(); })",e.getName.src="$jc$.getName",e.name.src="$jc$.getName",e.$board&&(e.$board.src="$jc$.board"),e.$log.src="$jc$.log",e=_jxg__WEBPACK_IMPORTED_MODULE_0__.Z.merge(e,t._addedBuiltIn)},_addedBuiltIn:{},addBuiltIn:function(t,e){if(_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(this.builtIn)){if(_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(this.builtIn[t]))return;this.builtIn[t]=e,this.builtIn[t].src="$jc$."+t}_utils_type__WEBPACK_IMPORTED_MODULE_7__.Z.exists(this._addedBuiltIn[t])||(this._addedBuiltIn[t]=e,this._addedBuiltIn[t].src="$jc$."+t,_jxg__WEBPACK_IMPORTED_MODULE_0__.Z.JessieCode.prototype[t]=e)},getPossibleOperands:function(){var t,e,i,r,s,o,n,a,h,l,c,d,u,p,f=["E"],_=this.builtIn||this.defineBuiltIn(),m=Math;for(u=function(t,e){return t.toLowerCase().localeCompare(e.toLowerCase())},p=function(t,e){var i=null;if("jc"===e)i=_[t];else{if("Math"!==e)return;i=m[t]}if(!(f.indexOf(t)>=0))return _jxg__WEBPACK_IMPORTED_MODULE_0__.Z.isFunction(i)?{name:t,type:"function",numParams:i.length,origin:e}:_jxg__WEBPACK_IMPORTED_MODULE_0__.Z.isNumber(i)?{name:t,type:"constant",value:i,origin:e}:void(t.startsWith("$")||void 0!==i&&console.error("undefined type",i))},t=Object.getOwnPropertyNames(_).sort(u),e=Object.getOwnPropertyNames(m).sort(u),i=[],r=0,s=0;r<t.length||s<e.length;)t[r]===e[s]?(o=p(e[s],"Math"),_jxg__WEBPACK_IMPORTED_MODULE_0__.Z.exists(o)&&i.push(o),r++,s++):!_jxg__WEBPACK_IMPORTED_MODULE_0__.Z.exists(e[s])||t[r].toLowerCase().localeCompare(e[s].toLowerCase())<0?(o=p(t[r],"jc"),_jxg__WEBPACK_IMPORTED_MODULE_0__.Z.exists(o)&&i.push(o),r++):(o=p(e[s],"Math"),_jxg__WEBPACK_IMPORTED_MODULE_0__.Z.exists(o)&&i.push(o),s++);for(h=[],l=[],c=[],d={},n=i.length,r=0;r<n;r++){switch((a=i[r]).type){case"function":h.push(a.name),"jc"===a.origin&&l.push(a.name);break;case"constant":c.push(a.name)}d[a.name]=a}return{all:d,list:i,functions:h,functions_jessiecode:l,constants:c}},_debug:function(t){"object"==typeof console?console.log(t):_utils_env__WEBPACK_IMPORTED_MODULE_8__.Z.isBrowser&&document&&null!==document.getElementById("debug")&&(document.getElementById("debug").innerHTML+=t+"<br />")},_error:function(t){var e=new Error("Error("+this.line+"): "+t);throw e.line=this.line,e},_warn:function(t){"object"==typeof console?console.log("Warning("+this.line+"): "+t):_utils_env__WEBPACK_IMPORTED_MODULE_8__.Z.isBrowser&&document&&null!==document.getElementById(this.warnLog)&&(document.getElementById(this.warnLog).innerHTML+="Warning("+this.line+"): "+t+"<br />")},_log:function(t){"object"!=typeof window&&"object"==typeof self&&self.postMessage?self.postMessage({type:"log",msg:"Log: "+t.toString()}):console.log("Log: ",arguments)}});var parser=function(){var t=function(t,e,i,r){for(i=i||{},r=t.length;r--;i[t[r]]=e);return i},e=[2,14],i=[1,13],r=[1,37],s=[1,14],o=[1,15],n=[1,21],a=[1,16],h=[1,17],l=[1,33],c=[1,18],d=[1,19],u=[1,12],p=[1,59],f=[1,60],_=[1,58],m=[1,46],g=[1,48],b=[1,49],v=[1,50],Z=[1,51],C=[1,52],y=[1,53],P=[1,54],E=[1,45],O=[1,38],x=[1,39],S=[5,7,8,14,15,16,17,19,20,21,23,26,27,50,51,58,65,74,75,76,77,78,79,80,82,91,93],M=[5,7,8,12,14,15,16,17,19,20,21,23,26,27,50,51,58,65,74,75,76,77,78,79,80,82,91,93],w=[8,10,16,32,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,57,64,65,66,83,86],T=[2,48],N=[1,72],A=[10,16,32,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,57,66,83,86],D=[1,78],k=[8,10,16,32,34,35,37,41,42,43,45,46,47,48,50,51,53,54,55,57,64,65,66,83,86],R=[1,82],L=[8,10,16,32,34,35,37,39,45,46,47,48,50,51,53,54,55,57,64,65,66,83,86],B=[1,83],I=[1,84],Y=[1,85],j=[8,10,16,32,34,35,37,39,41,42,43,50,51,53,54,55,57,64,65,66,83,86],X=[1,89],U=[1,90],F=[1,91],J=[1,92],z=[1,97],G=[8,10,16,32,34,35,37,39,41,42,43,45,46,47,48,53,54,55,57,64,65,66,83,86],W=[1,103],H=[1,104],V=[8,10,16,32,34,35,37,39,41,42,43,45,46,47,48,50,51,57,64,65,66,83,86],$=[1,105],K=[1,106],q=[1,107],Q=[1,126],tt=[1,139],et=[83,86],it=[1,150],rt=[10,66,86],st=[8,10,16,20,32,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,57,64,65,66,82,83,86],ot=[1,167],nt=[10,86],at={trace:function(){},yy:{},symbols_:{error:2,Program:3,StatementList:4,EOF:5,IfStatement:6,IF:7,"(":8,Expression:9,")":10,Statement:11,ELSE:12,LoopStatement:13,WHILE:14,FOR:15,";":16,DO:17,UnaryStatement:18,USE:19,IDENTIFIER:20,DELETE:21,ReturnStatement:22,RETURN:23,EmptyStatement:24,StatementBlock:25,"{":26,"}":27,ExpressionStatement:28,AssignmentExpression:29,ConditionalExpression:30,LeftHandSideExpression:31,"=":32,LogicalORExpression:33,"?":34,":":35,LogicalANDExpression:36,"||":37,EqualityExpression:38,"&&":39,RelationalExpression:40,"==":41,"!=":42,"~=":43,AdditiveExpression:44,"<":45,">":46,"<=":47,">=":48,MultiplicativeExpression:49,"+":50,"-":51,UnaryExpression:52,"*":53,"/":54,"%":55,ExponentExpression:56,"^":57,"!":58,MemberExpression:59,CallExpression:60,PrimaryExpression:61,FunctionExpression:62,MapExpression:63,".":64,"[":65,"]":66,BasicLiteral:67,ObjectLiteral:68,ArrayLiteral:69,NullLiteral:70,BooleanLiteral:71,StringLiteral:72,NumberLiteral:73,NULL:74,TRUE:75,FALSE:76,STRING:77,NUMBER:78,NAN:79,INFINITY:80,ElementList:81,"<<":82,">>":83,PropertyList:84,Property:85,",":86,PropertyName:87,Arguments:88,AttributeList:89,Attribute:90,FUNCTION:91,ParameterDefinitionList:92,MAP:93,"->":94,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",7:"IF",8:"(",10:")",12:"ELSE",14:"WHILE",15:"FOR",16:";",17:"DO",19:"USE",20:"IDENTIFIER",21:"DELETE",23:"RETURN",26:"{",27:"}",32:"=",34:"?",35:":",37:"||",39:"&&",41:"==",42:"!=",43:"~=",45:"<",46:">",47:"<=",48:">=",50:"+",51:"-",53:"*",54:"/",55:"%",57:"^",58:"!",64:".",65:"[",66:"]",74:"NULL",75:"TRUE",76:"FALSE",77:"STRING",78:"NUMBER",79:"NAN",80:"INFINITY",82:"<<",83:">>",86:",",91:"FUNCTION",93:"MAP",94:"->"},productions_:[0,[3,2],[6,5],[6,7],[13,5],[13,9],[13,7],[18,2],[18,2],[22,2],[22,3],[24,1],[25,3],[4,2],[4,0],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[28,2],[9,1],[29,1],[29,3],[30,1],[30,5],[33,1],[33,3],[36,1],[36,3],[38,1],[38,3],[38,3],[38,3],[40,1],[40,3],[40,3],[40,3],[40,3],[44,1],[44,3],[44,3],[49,1],[49,3],[49,3],[49,3],[56,1],[56,3],[52,1],[52,2],[52,2],[52,2],[31,1],[31,1],[59,1],[59,1],[59,1],[59,3],[59,4],[61,1],[61,1],[61,1],[61,1],[61,3],[67,1],[67,1],[67,1],[67,1],[70,1],[71,1],[71,1],[72,1],[73,1],[73,1],[73,1],[69,2],[69,3],[68,2],[68,3],[84,1],[84,3],[85,3],[87,1],[87,1],[87,1],[60,2],[60,3],[60,2],[60,4],[60,3],[88,2],[88,3],[89,1],[89,3],[90,1],[90,1],[81,1],[81,3],[62,4],[62,5],[63,5],[63,6],[92,1],[92,3]],performAction:function(t,e,i,r,s,o,n){var a=o.length-1;switch(s){case 1:return o[a-1];case 2:this.$=ht.createNode(lt(n[a-4]),"node_op","op_if",o[a-2],o[a]);break;case 3:this.$=ht.createNode(lt(n[a-6]),"node_op","op_if_else",o[a-4],o[a-2],o[a]);break;case 4:this.$=ht.createNode(lt(n[a-4]),"node_op","op_while",o[a-2],o[a]);break;case 5:this.$=ht.createNode(lt(n[a-8]),"node_op","op_for",o[a-6],o[a-4],o[a-2],o[a]);break;case 6:this.$=ht.createNode(lt(n[a-6]),"node_op","op_do",o[a-5],o[a-2]);break;case 7:this.$=ht.createNode(lt(n[a-1]),"node_op","op_use",o[a]);break;case 8:this.$=ht.createNode(lt(n[a-1]),"node_op","op_delete",o[a]);break;case 9:this.$=ht.createNode(lt(n[a-1]),"node_op","op_return",void 0);break;case 10:this.$=ht.createNode(lt(n[a-2]),"node_op","op_return",o[a-1]);break;case 11:case 14:this.$=ht.createNode(lt(n[a]),"node_op","op_none");break;case 12:this.$=o[a-1],this.$.needsBrackets=!0;break;case 13:this.$=ht.createNode(lt(n[a-1]),"node_op","op_none",o[a-1],o[a]);break;case 15:case 16:case 17:case 18:case 19:case 20:case 21:case 23:case 24:case 26:case 28:case 30:case 32:case 36:case 41:case 44:case 48:case 50:case 52:case 54:case 55:case 56:case 58:case 62:case 81:case 84:case 85:case 86:this.$=o[a];break;case 22:case 65:case 93:this.$=o[a-1];break;case 25:this.$=ht.createNode(lt(n[a-2]),"node_op","op_assign",o[a-2],o[a]),this.$.isMath=!1;break;case 27:this.$=ht.createNode(lt(n[a-4]),"node_op","op_conditional",o[a-4],o[a-2],o[a]),this.$.isMath=!1;break;case 29:this.$=ht.createNode(lt(n[a-2]),"node_op","op_or",o[a-2],o[a]),this.$.isMath=!1;break;case 31:this.$=ht.createNode(lt(n[a-2]),"node_op","op_and",o[a-2],o[a]),this.$.isMath=!1;break;case 33:this.$=ht.createNode(lt(n[a-2]),"node_op","op_eq",o[a-2],o[a]),this.$.isMath=!1;break;case 34:this.$=ht.createNode(lt(n[a-2]),"node_op","op_neq",o[a-2],o[a]),this.$.isMath=!1;break;case 35:this.$=ht.createNode(lt(n[a-2]),"node_op","op_approx",o[a-2],o[a]),this.$.isMath=!1;break;case 37:this.$=ht.createNode(lt(n[a-2]),"node_op","op_lt",o[a-2],o[a]),this.$.isMath=!1;break;case 38:this.$=ht.createNode(lt(n[a-2]),"node_op","op_gt",o[a-2],o[a]),this.$.isMath=!1;break;case 39:this.$=ht.createNode(lt(n[a-2]),"node_op","op_leq",o[a-2],o[a]),this.$.isMath=!1;break;case 40:this.$=ht.createNode(lt(n[a-2]),"node_op","op_geq",o[a-2],o[a]),this.$.isMath=!1;break;case 42:this.$=ht.createNode(lt(n[a-2]),"node_op","op_add",o[a-2],o[a]),this.$.isMath=!0;break;case 43:this.$=ht.createNode(lt(n[a-2]),"node_op","op_sub",o[a-2],o[a]),this.$.isMath=!0;break;case 45:this.$=ht.createNode(lt(n[a-2]),"node_op","op_mul",o[a-2],o[a]),this.$.isMath=!0;break;case 46:this.$=ht.createNode(lt(n[a-2]),"node_op","op_div",o[a-2],o[a]),this.$.isMath=!0;break;case 47:this.$=ht.createNode(lt(n[a-2]),"node_op","op_mod",o[a-2],o[a]),this.$.isMath=!0;break;case 49:this.$=ht.createNode(lt(n[a-2]),"node_op","op_exp",o[a-2],o[a]),this.$.isMath=!0;break;case 51:this.$=ht.createNode(lt(n[a-1]),"node_op","op_not",o[a]),this.$.isMath=!1;break;case 53:this.$=ht.createNode(lt(n[a-1]),"node_op","op_neg",o[a]),this.$.isMath=!0;break;case 57:case 63:case 64:case 66:case 67:case 68:case 97:this.$=o[a],this.$.isMath=!1;break;case 59:case 91:this.$=ht.createNode(lt(n[a-2]),"node_op","op_property",o[a-2],o[a]),this.$.isMath=!0;break;case 60:case 90:this.$=ht.createNode(lt(n[a-3]),"node_op","op_extvalue",o[a-3],o[a-1]),this.$.isMath=!0;break;case 61:this.$=ht.createNode(lt(n[a]),"node_var",o[a]);break;case 69:this.$=o[a],this.$.isMath=!0;break;case 70:this.$=ht.createNode(lt(n[a]),"node_const",null);break;case 71:this.$=ht.createNode(lt(n[a]),"node_const_bool",!0);break;case 72:this.$=ht.createNode(lt(n[a]),"node_const_bool",!1);break;case 73:this.$=ht.createNode(lt(n[a]),"node_str",o[a].substring(1,o[a].length-1));break;case 74:this.$=ht.createNode(lt(n[a]),"node_const",parseFloat(o[a]));break;case 75:this.$=ht.createNode(lt(n[a]),"node_const",NaN);break;case 76:this.$=ht.createNode(lt(n[a]),"node_const",1/0);break;case 77:this.$=ht.createNode(lt(n[a-1]),"node_op","op_array",[]);break;case 78:this.$=ht.createNode(lt(n[a-2]),"node_op","op_array",o[a-1]);break;case 79:this.$=ht.createNode(lt(n[a-1]),"node_op","op_emptyobject",{}),this.$.needsAngleBrackets=!0;break;case 80:this.$=ht.createNode(lt(n[a-2]),"node_op","op_proplst_val",o[a-1]),this.$.needsAngleBrackets=!0;break;case 82:this.$=ht.createNode(lt(n[a-2]),"node_op","op_proplst",o[a-2],o[a]);break;case 83:this.$=ht.createNode(lt(n[a-2]),"node_op","op_prop",o[a-2],o[a]);break;case 87:case 89:this.$=ht.createNode(lt(n[a-1]),"node_op","op_execfun",o[a-1],o[a]),this.$.isMath=!0;break;case 88:this.$=ht.createNode(lt(n[a-2]),"node_op","op_execfun",o[a-2],o[a-1],o[a],!0),this.$.isMath=!1;break;case 92:this.$=[];break;case 94:case 98:case 104:this.$=[o[a]];break;case 95:case 99:case 105:this.$=o[a-2].concat(o[a]);break;case 96:this.$=ht.createNode(lt(n[a]),"node_var",o[a]),this.$.isMath=!0;break;case 100:this.$=ht.createNode(lt(n[a-3]),"node_op","op_function",[],o[a]),this.$.isMath=!1;break;case 101:this.$=ht.createNode(lt(n[a-4]),"node_op","op_function",o[a-2],o[a]),this.$.isMath=!1;break;case 102:this.$=ht.createNode(lt(n[a-4]),"node_op","op_map",[],o[a]);break;case 103:this.$=ht.createNode(lt(n[a-5]),"node_op","op_map",o[a-3],o[a])}},table:[t([5,7,8,14,15,16,17,19,20,21,23,26,50,51,58,65,74,75,76,77,78,79,80,82,91,93],e,{3:1,4:2}),{1:[3]},{5:[1,3],6:6,7:i,8:r,9:20,11:4,13:7,14:s,15:o,16:n,17:a,18:8,19:h,20:l,21:c,22:9,23:d,24:11,25:5,26:u,28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{1:[2,1]},t(S,[2,13]),t(M,[2,15]),t(M,[2,16]),t(M,[2,17]),t(M,[2,18]),t(M,[2,19]),t(M,[2,20]),t(M,[2,21]),t([7,8,14,15,16,17,19,20,21,23,26,27,50,51,58,65,74,75,76,77,78,79,80,82,91,93],e,{4:61}),{8:[1,62]},{8:[1,63]},{8:[1,64]},{6:6,7:i,8:r,9:20,11:65,13:7,14:s,15:o,16:n,17:a,18:8,19:h,20:l,21:c,22:9,23:d,24:11,25:5,26:u,28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{20:[1,66]},{20:[1,67]},{8:r,9:69,16:[1,68],20:l,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{16:[1,70]},t(M,[2,11]),t(w,[2,23]),t(w,[2,24]),t([8,10,16,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,64,65,66,83,86],T,{32:[1,71],57:N}),t([8,10,16,32,35,39,41,42,43,45,46,47,48,50,51,53,54,55,57,64,65,66,83,86],[2,26],{34:[1,73],37:[1,74]}),t(A,[2,54],{88:77,8:D,64:[1,75],65:[1,76]}),t(A,[2,55],{88:79,8:D,64:[1,81],65:[1,80]}),t(k,[2,28],{39:R}),t(w,[2,56]),t(w,[2,57]),t(w,[2,58]),t(L,[2,30],{41:B,42:I,43:Y}),t(w,[2,61]),t(w,[2,62]),t(w,[2,63]),t(w,[2,64]),{8:r,9:86,20:l,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:[1,87]},{8:[1,88]},t(j,[2,32],{45:X,46:U,47:F,48:J}),t(w,[2,66]),t(w,[2,67]),t(w,[2,68]),t(w,[2,69]),{20:z,72:98,73:99,77:Z,78:C,79:y,80:P,83:[1,93],84:94,85:95,87:96},{8:r,20:l,29:102,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,66:[1,100],67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,81:101,82:E,91:O,93:x},t(G,[2,36],{50:W,51:H}),t(w,[2,70]),t(w,[2,71]),t(w,[2,72]),t(w,[2,73]),t(w,[2,74]),t(w,[2,75]),t(w,[2,76]),t(V,[2,41],{53:$,54:K,55:q}),t(w,[2,44]),t(w,[2,50]),{8:r,20:l,31:109,50:p,51:f,52:108,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,20:l,31:109,50:p,51:f,52:110,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,20:l,31:109,50:p,51:f,52:111,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{6:6,7:i,8:r,9:20,11:4,13:7,14:s,15:o,16:n,17:a,18:8,19:h,20:l,21:c,22:9,23:d,24:11,25:5,26:u,27:[1,112],28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,9:113,20:l,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,9:114,20:l,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,9:115,20:l,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{14:[1,116]},t(M,[2,7]),t(M,[2,8]),t(M,[2,9]),{16:[1,117]},t(M,[2,22]),{8:r,20:l,29:118,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,20:l,31:109,50:p,51:f,52:119,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,20:l,29:120,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,20:l,31:109,36:121,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{20:[1,122]},{8:r,9:123,20:l,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},t(w,[2,87],{89:124,90:125,68:127,20:Q,82:E}),{8:r,10:[1,128],20:l,29:102,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,81:129,82:E,91:O,93:x},t(w,[2,89]),{8:r,9:130,20:l,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{20:[1,131]},{8:r,20:l,31:109,38:132,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,20:l,31:109,40:133,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,20:l,31:109,40:134,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,20:l,31:109,40:135,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{10:[1,136]},{10:[1,137],20:tt,92:138},{10:[1,140],20:tt,92:141},{8:r,20:l,31:109,44:142,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,20:l,31:109,44:143,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,20:l,31:109,44:144,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,20:l,31:109,44:145,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},t(w,[2,79]),{83:[1,146],86:[1,147]},t(et,[2,81]),{35:[1,148]},{35:[2,84]},{35:[2,85]},{35:[2,86]},t(w,[2,77]),{66:[1,149],86:it},t(rt,[2,98]),{8:r,20:l,31:109,49:151,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,20:l,31:109,49:152,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,20:l,31:109,50:p,51:f,52:153,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,20:l,31:109,50:p,51:f,52:154,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,20:l,31:109,50:p,51:f,52:155,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},t(w,[2,51]),t([8,10,16,32,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,64,65,66,83,86],T,{57:N}),t(w,[2,52]),t(w,[2,53]),t([5,7,8,10,12,14,15,16,17,19,20,21,23,26,27,32,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,57,58,64,65,66,74,75,76,77,78,79,80,82,83,86,91,93],[2,12]),{10:[1,156]},{10:[1,157]},{16:[1,158]},{8:[1,159]},t(M,[2,10]),t(w,[2,25]),t(w,[2,49]),{35:[1,160]},t(k,[2,29],{39:R}),t(w,[2,59]),{66:[1,161]},t([8,10,16,32,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,57,64,65,66,83],[2,88],{86:[1,162]}),t(w,[2,94]),t(w,[2,96]),t(w,[2,97]),t(st,[2,92]),{10:[1,163],86:it},{66:[1,164]},t(w,[2,91]),t(L,[2,31],{41:B,42:I,43:Y}),t(j,[2,33],{45:X,46:U,47:F,48:J}),t(j,[2,34],{45:X,46:U,47:F,48:J}),t(j,[2,35],{45:X,46:U,47:F,48:J}),t(w,[2,65]),{25:165,26:u},{10:[1,166],86:ot},t(nt,[2,104]),{94:[1,168]},{10:[1,169],86:ot},t(G,[2,37],{50:W,51:H}),t(G,[2,38],{50:W,51:H}),t(G,[2,39],{50:W,51:H}),t(G,[2,40],{50:W,51:H}),t(w,[2,80]),{20:z,72:98,73:99,77:Z,78:C,79:y,80:P,85:170,87:96},{8:r,20:l,29:171,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},t(w,[2,78]),{8:r,20:l,29:172,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},t(V,[2,42],{53:$,54:K,55:q}),t(V,[2,43],{53:$,54:K,55:q}),t(w,[2,45]),t(w,[2,46]),t(w,[2,47]),{6:6,7:i,8:r,9:20,11:173,13:7,14:s,15:o,16:n,17:a,18:8,19:h,20:l,21:c,22:9,23:d,24:11,25:5,26:u,28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{6:6,7:i,8:r,9:20,11:174,13:7,14:s,15:o,16:n,17:a,18:8,19:h,20:l,21:c,22:9,23:d,24:11,25:5,26:u,28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,9:175,20:l,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,9:176,20:l,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,20:l,29:177,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},t(w,[2,60]),{20:Q,68:127,82:E,90:178},t(st,[2,93]),t(w,[2,90]),t(w,[2,100]),{25:179,26:u},{20:[1,180]},{8:r,9:181,20:l,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{94:[1,182]},t(et,[2,82]),t(et,[2,83]),t(rt,[2,99]),t(S,[2,2],{12:[1,183]}),t(M,[2,4]),{16:[1,184]},{10:[1,185]},t(w,[2,27]),t(w,[2,95]),t(w,[2,101]),t(nt,[2,105]),t(w,[2,102]),{8:r,9:186,20:l,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{6:6,7:i,8:r,9:20,11:187,13:7,14:s,15:o,16:n,17:a,18:8,19:h,20:l,21:c,22:9,23:d,24:11,25:5,26:u,28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{8:r,9:188,20:l,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},{16:[1,189]},t(w,[2,103]),t(M,[2,3]),{10:[1,190]},t(M,[2,6]),{6:6,7:i,8:r,9:20,11:191,13:7,14:s,15:o,16:n,17:a,18:8,19:h,20:l,21:c,22:9,23:d,24:11,25:5,26:u,28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:f,52:56,56:57,58:_,59:26,60:27,61:29,62:30,63:31,65:m,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:b,76:v,77:Z,78:C,79:y,80:P,82:E,91:O,93:x},t(M,[2,5])],defaultActions:{3:[2,1],97:[2,84],98:[2,85],99:[2,86]},parseError:function(t,e){if(!e.recoverable){var i=new Error(t);throw i.hash=e,i}this.trace(t)},parse:function(t){var e=this,i=[0],r=[null],s=[],o=this.table,n="",a=0,h=0,l=0,c=s.slice.call(arguments,1),d=Object.create(this.lexer),u={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(u.yy[p]=this.yy[p]);d.setInput(t,u.yy),u.yy.lexer=d,u.yy.parser=this,void 0===d.yylloc&&(d.yylloc={});var f=d.yylloc;s.push(f);var _=d.options&&d.options.ranges;"function"==typeof u.yy.parseError?this.parseError=u.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,g,b,v,Z,C,y,P,E,O=function(){var t;return"number"!=typeof(t=d.lex()||1)&&(t=e.symbols_[t]||t),t},x={};;){if(b=i[i.length-1],this.defaultActions[b]?v=this.defaultActions[b]:(null==m&&(m=O()),v=o[b]&&o[b][m]),void 0===v||!v.length||!v[0]){var S="";for(C in E=[],o[b])this.terminals_[C]&&C>2&&E.push("'"+this.terminals_[C]+"'");S=d.showPosition?"Parse error on line "+(a+1)+":\n"+d.showPosition()+"\nExpecting "+E.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(a+1)+": Unexpected "+(1==m?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(S,{text:d.match,token:this.terminals_[m]||m,line:d.yylineno,loc:f,expected:E})}if(v[0]instanceof Array&&v.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(v[0]){case 1:i.push(m),r.push(d.yytext),s.push(d.yylloc),i.push(v[1]),m=null,g?(m=g,g=null):(h=d.yyleng,n=d.yytext,a=d.yylineno,f=d.yylloc,l>0&&l--);break;case 2:if(y=this.productions_[v[1]][1],x.$=r[r.length-y],x._$={first_line:s[s.length-(y||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(y||1)].first_column,last_column:s[s.length-1].last_column},_&&(x._$.range=[s[s.length-(y||1)].range[0],s[s.length-1].range[1]]),void 0!==(Z=this.performAction.apply(x,[n,h,a,u.yy,v[1],r,s].concat(c))))return Z;y&&(i=i.slice(0,-1*y*2),r=r.slice(0,-1*y),s=s.slice(0,-1*y)),i.push(this.productions_[v[1]][0]),r.push(x.$),s.push(x._$),P=o[i[i.length-2]][i[i.length-1]],i.push(P);break;case 3:return!0}}return!0}},ht={node:function(t,e,i){return{type:t,value:e,children:i}},createNode:function(t,e,i,r){var s,o=this.node(e,i,[]);for(s=3;s<arguments.length;s++)o.children.push(arguments[s]);return o.line=t[0],o.col=t[1],o.eline=t[2],o.ecol=t[3],o}},lt=function(t){return[t.first_line,t.first_column,t.last_line,t.last_column]},ct=function(){var t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,i=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===r.length?this.yylloc.first_column:0)+r[r.length-i.length].length-i[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var i,r,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],i=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var o in s)this[o]=s[o];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,i,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),o=0;o<s.length;o++)if((i=this._input.match(this.rules[s[o]]))&&(!e||i[0].length>e[0].length)){if(e=i,r=o,this.options.backtrack_lexer){if(!1!==(t=this.test_match(i,s[o])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,s[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,i,r){switch(i){case 0:case 5:case 6:break;case 1:case 2:return 78;case 3:case 4:return 77;case 7:return 7;case 8:return 12;case 9:return 14;case 10:return 17;case 11:return 15;case 12:return 91;case 13:return 93;case 14:return 19;case 15:return 23;case 16:return 21;case 17:return 75;case 18:return 76;case 19:return 74;case 20:return 80;case 21:case 22:return 94;case 23:return 82;case 24:return 83;case 25:return 26;case 26:return 27;case 27:return 16;case 28:return"#";case 29:return 34;case 30:return 35;case 31:return 79;case 32:return 64;case 33:return 65;case 34:return 66;case 35:return 8;case 36:return 10;case 37:return 58;case 38:case 39:return 57;case 40:return 53;case 41:return 54;case 42:return 55;case 43:return 50;case 44:return 51;case 45:return 47;case 46:return 45;case 47:return 48;case 48:return 46;case 49:return 41;case 50:return 43;case 51:return 42;case 52:return 39;case 53:return 37;case 54:return 32;case 55:return 86;case 56:return 5;case 57:return 20;case 58:return"INVALID"}},rules:[/^(?:\s+)/,/^(?:[0-9]+\.[0-9]*|[0-9]*\.[0-9]+\b)/,/^(?:[0-9]+)/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:\/\/.*)/,/^(?:\/\*(.|\n|\r)*?\*\/)/,/^(?:if\b)/,/^(?:else\b)/,/^(?:while\b)/,/^(?:do\b)/,/^(?:for\b)/,/^(?:function\b)/,/^(?:map\b)/,/^(?:use\b)/,/^(?:return\b)/,/^(?:delete\b)/,/^(?:true\b)/,/^(?:false\b)/,/^(?:null\b)/,/^(?:Infinity\b)/,/^(?:->)/,/^(?:=>)/,/^(?:<<)/,/^(?:>>)/,/^(?:\{)/,/^(?:\})/,/^(?:;)/,/^(?:#)/,/^(?:\?)/,/^(?::)/,/^(?:NaN\b)/,/^(?:\.)/,/^(?:\[)/,/^(?:\])/,/^(?:\()/,/^(?:\))/,/^(?:!)/,/^(?:\^)/,/^(?:\*\*)/,/^(?:\*)/,/^(?:\/)/,/^(?:%)/,/^(?:\+)/,/^(?:-)/,/^(?:<=)/,/^(?:<)/,/^(?:>=)/,/^(?:>)/,/^(?:==)/,/^(?:~=)/,/^(?:!=)/,/^(?:&&)/,/^(?:\|\|)/,/^(?:=)/,/^(?:,)/,/^(?:$)/,/^(?:[A-Za-z_\$][A-Za-z0-9_]*)/,/^(?:.)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58],inclusive:!0}}};return t}();function dt(){this.yy={}}return at.lexer=ct,dt.prototype=at,at.Parser=dt,new dt}();parser.yy.parseError=parser.parseError,__webpack_exports__.Z=_jxg__WEBPACK_IMPORTED_MODULE_0__.Z.JessieCode},327:function(t,e,i){var r=i(765),s=i(109),o=i(275),n={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dodgerblue:"1e90ff",feldspar:"d19275",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslateblue:"8470ff",lightslategray:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",violetred:"d02090",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32"},a=[{re:/^\s*rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*([\d.]{1,3})\s*\)\s*$/,example:["rgba(123, 234, 45, 0.5)","rgba(255,234,245,1.0)"],process:function(t){return[parseInt(t[1],10),parseInt(t[2],10),parseInt(t[3],10)]}},{re:/^\s*rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)\s*$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(t){return[parseInt(t[1],10),parseInt(t[2],10),parseInt(t[3],10)]}},{re:/^(\w{2})(\w{2})(\w{2})$/,example:["#00ff00","336699"],process:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:["#fb0","f0f"],process:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}}];r.Z.rgbParser=function(t,e,i){var r,o,h,l,c,d,u,p,f,_,m=t;if(!s.Z.exists(t))return[];if(s.Z.exists(e)&&s.Z.exists(i)&&(m=[t,e,i]),r=m,_=!1,s.Z.isArray(r)){for(d=0;d<3;d++)_=_||/\./.test(m[d].toString());for(d=0;d<3;d++)_=_&&m[d]>=0&&m[d]<=1;return _?[Math.ceil(255*m[0]),Math.ceil(255*m[1]),Math.ceil(255*m[2])]:m}for("string"==typeof m&&(r=m),"#"===r.charAt(0)&&(r=r.slice(1,7)),r=r.replace(/ /g,"").toLowerCase(),r=n[r]||r,d=0;d<a.length;d++)h=a[d].re,l=a[d].process,(c=h.exec(r))&&(u=(o=l(c))[0],p=o[1],f=o[2]);return isNaN(u)||isNaN(p)||isNaN(f)?[]:[u=u<0||isNaN(u)?0:u>255?255:u,p=p<0||isNaN(p)?0:p>255?255:p,f=f<0||isNaN(f)?0:f>255?255:f]},r.Z.isColor=function(t){var e=(new Option).style;return e.color=t,""!==e.color},r.Z.rgb2css=function(t,e,i){var s;return"rgb("+(s=r.Z.rgbParser(t,e,i))[0]+", "+s[1]+", "+s[2]+")"},r.Z.rgb2hex=function(t,e,i){var s,o,n;return o=(s=r.Z.rgbParser(t,e,i))[1],n=s[2],s=(s=s[0]).toString(16),o=o.toString(16),n=n.toString(16),1===s.length&&(s="0"+s),1===o.length&&(o="0"+o),1===n.length&&(n="0"+n),"#"+s+o+n},r.Z.hex2rgb=function(t){return r.Z.deprecated("JXG.hex2rgb()","JXG.rgb2css()"),r.Z.rgb2css(t)},r.Z.hsv2rgb=function(t,e,i){var r,s,n,a,h,l,c,d,u;if(t=(t%360+360)%360,0===e){if(!(isNaN(t)||t<o.Z.eps))return"#ffffff";r=i,s=i,n=i}else switch(l=t>=360?0:t,c=i*(1-e),d=i*(1-e*(a=(l/=60)-(h=Math.floor(l)))),u=i*(1-e*(1-a)),h){case 0:r=i,s=u,n=c;break;case 1:r=d,s=i,n=c;break;case 2:r=c,s=i,n=u;break;case 3:r=c,s=d,n=i;break;case 4:r=u,s=c,n=i;break;case 5:r=i,s=c,n=d}return["#",r=2===(r=Math.round(255*r).toString(16)).length?r:1===r.length?"0"+r:"00",s=2===(s=Math.round(255*s).toString(16)).length?s:1===s.length?"0"+s:"00",n=2===(n=Math.round(255*n).toString(16)).length?n:1===n.length?"0"+n:"00"].join("")},r.Z.rgb2hsv=function(t,e,i){var s,o,n,a,h,l,c,d,u,p,f,_,m;return o=(s=r.Z.rgbParser(t,e,i))[1],n=s[2],a=(s=s[0])/255,h=o/255,l=n/255,_=Math.max(s,o,n),d=(m=Math.min(s,o,n))/255,p=0,(f=c=_/255)>0&&(p=(f-d)/f),u=1/(c-d),p>0&&(_===s?u*=h-l:u=_===o?2+(l-a)*u:4+(a-h)*u),(u*=60)<0&&(u+=360),_===m&&(u=0),[u,p,f]},r.Z.rgb2LMS=function(t,e,i){var s,o,n,a,h,l,c,d=[[.05059983,.08585369,.0095242],[.01893033,.08925308,.01370054],[.00292202,.00975732,.07145979]];return o=(s=r.Z.rgbParser(t,e,i))[1],n=s[2],s=s[0],s=Math.pow(s,.476190476),o=Math.pow(o,.476190476),n=Math.pow(n,.476190476),(c=[a=s*d[0][0]+o*d[0][1]+n*d[0][2],h=s*d[1][0]+o*d[1][1]+n*d[1][2],l=s*d[2][0]+o*d[2][1]+n*d[2][2]]).l=a,c.m=h,c.s=l,c},r.Z.LMS2rgb=function(t,e,i){var r,s,o,n,a=[[30.830854,-29.832659,1.610474],[-6.481468,17.715578,-2.532642],[-.37569,-1.199062,14.273846]],h=function(t){for(var e=127,i=64;i>0;){if(Math.pow(e,.476190476)>t)e-=i;else{if(Math.pow(e+1,.476190476)>t)return e;e+=i}i/=2}return 254===e&&13.994955247<t?255:e};return r=t*a[0][0]+e*a[0][1]+i*a[0][2],s=t*a[1][0]+e*a[1][1]+i*a[1][2],o=t*a[2][0]+e*a[2][1]+i*a[2][2],(n=[r=h(r),s=h(s),o=h(o)]).r=r,n.g=s,n.b=o,n},r.Z.rgba2rgbo=function(t){var e;return 9===t.length&&"#"===t.charAt(0)?(e=parseInt(t.slice(7,9).toUpperCase(),16)/255,t=t.slice(0,7)):e=1,[t,e]},r.Z.rgbo2rgba=function(t,e){var i;return"none"===t||"transparent"===t?t:(1===(i=Math.round(255*e).toString(16)).length&&(i="0"+i),r.Z.rgb2hex(t)+i)},r.Z.rgb2bw=function(t){var e,i,s,o="0123456789ABCDEF";return"none"===t?t:(s=r.Z.rgbParser(t),e=Math.floor(.3*s[0]+.59*s[1]+.11*s[2]),t="#"+(i=o.charAt(e>>4&15)+o.charAt(15&e))+i+i)},r.Z.rgb2cb=function(t,e){var i,s,o,n,a,h,l,c,d,u,p,f="0123456789ABCDEF";if("none"===t)return t;switch(s=(a=r.Z.rgb2LMS(t))[0],o=a[1],n=a[2],e=e.toLowerCase()){case"protanopia":h=-.06150039994295001,l=.08277001656812001,c=-.013200141220000003,d=.05858939668799999,u=-.07934519995360001,p=.013289415272000003,s=n/o<.6903216543277437?-(l*o+c*n)/h:-(u*o+p*n)/d;break;case"tritanopia":h=-.00058973116217,l=.007690316482,c=-.01011703519052,d=.025495080838999994,u=-.0422740347,p=.017005316784,n=o/s<.8349489908460004?-(h*s+l*o)/c:-(d*s+u*o)/p;break;default:h=-.06150039994295001,l=.08277001656812001,c=-.013200141220000003,d=.05858939668799999,u=-.07934519995360001,p=.013289415272000003,o=n/s<.5763833686400911?-(h*s+c*n)/l:-(d*s+p*n)/u}return i=r.Z.LMS2rgb(s,o,n),t="#"+(f.charAt(i[0]>>4&15)+f.charAt(15&i[0])),t+=f.charAt(i[1]>>4&15)+f.charAt(15&i[1]),t+=f.charAt(i[2]>>4&15)+f.charAt(15&i[2])},r.Z.shadeColor=function(t,e){var i=r.Z.rgbParser(t),s=i[0],o=i[1],n=i[2];return s=(s=(s=parseInt(s+255*e))>0?s:0)<255?s:255,o=(o=(o=parseInt(o+255*e))>0?o:0)<255?o:255,n=(n=(n=parseInt(n+255*e))>0?n:0)<255?n:255,s=Math.round(s),o=Math.round(o),n=Math.round(n),r.Z.rgb2hex([s,o,n])},r.Z.lightenColor=function(t,e){return r.Z.shadeColor(t,e)},r.Z.darkenColor=function(t,e){return r.Z.shadeColor(t,-1*e)},r.Z.autoHighlight=function(t){var e=r.Z.rgba2rgbo(t),i=e[0],s=e[1];return"#"===t.charAt(0)?(s*=s<.3?1.8:.4,r.Z.rgbo2rgba(i,s)):t},r.Z.contrast=function(t,e,i,s){var o,n,a,h,l;return e=e||"#000000",i=i||"#ffffff",s=s||7,o=r.Z.rgbParser(t),n=r.Z.rgbParser("#000000"),l=(a=.2126*Math.pow(o[0]/255,2.2)+.7152*Math.pow(o[1]/255,2.2)+.0722*Math.pow(o[2]/255,2.2))>(h=.2126*Math.pow(n[0]/255,2.2)+.7152*Math.pow(n[1]/255,2.2)+.0722*Math.pow(n[2]/255,2.2))?Math.floor((a+.05)/(h+.05)):Math.floor((h+.05)/(a+.05)),(l-=1)>s?e:i},r.Z.setClassicColors=function(){r.Z.Options.elements.strokeColor="blue",r.Z.Options.elements.fillColor="red",r.Z.Options.hatch.strokeColor="blue",r.Z.Options.angle.fillColor="#ff7f00",r.Z.Options.angle.highlightFillColor="#ff7f00",r.Z.Options.angle.strokeColor="#ff7f00",r.Z.Options.angle.label.strokeColor="blue",r.Z.Options.arc.strokeColor="blue",r.Z.Options.circle.center.fillColor="red",r.Z.Options.circle.center.strokeColor="blue",r.Z.Options.circumcircle.strokeColor="blue",r.Z.Options.circumcircle.center.fillColor="red",r.Z.Options.circumcircle.center.strokeColor="blue",r.Z.Options.circumcirclearc.strokeColor="blue",r.Z.Options.circumcirclesector.strokeColor="blue",r.Z.Options.circumcirclesector.fillColor="green",r.Z.Options.circumcirclesector.highlightFillColor="green",r.Z.Options.conic.strokeColor="blue",r.Z.Options.curve.strokeColor="blue",r.Z.Options.incircle.strokeColor="blue",r.Z.Options.incircle.center.fillColor="red",r.Z.Options.incircle.center.strokeColor="blue",r.Z.Options.inequality.fillColor="red",r.Z.Options.integral.fillColor="red",r.Z.Options.integral.curveLeft.color="red",r.Z.Options.integral.curveRight.color="red",r.Z.Options.line.strokeColor="blue",r.Z.Options.point.fillColor="red",r.Z.Options.point.strokeColor="red",r.Z.Options.polygon.fillColor="green",r.Z.Options.polygon.highlightFillColor="green",r.Z.Options.polygon.vertices.strokeColor="red",r.Z.Options.polygon.vertices.fillColor="red",r.Z.Options.regularpolygon.fillColor="green",r.Z.Options.regularpolygon.highlightFillColor="green",r.Z.Options.regularpolygon.vertices.strokeColor="red",r.Z.Options.regularpolygon.vertices.fillColor="red",r.Z.Options.riemannsum.fillColor="yellow",r.Z.Options.sector.fillColor="green",r.Z.Options.sector.highlightFillColor="green",r.Z.Options.semicircle.center.fillColor="red",r.Z.Options.semicircle.center.strokeColor="blue",r.Z.Options.slopetriangle.fillColor="red",r.Z.Options.slopetriangle.highlightFillColor="red",r.Z.Options.turtle.arrow.strokeColor="blue"},r.Z.extend(r.Z,{paletteWong:{black:"#000000",orange:"#E69F00",skyblue:"#56B4E9",bluishgreen:"#009E73",yellow:"#F0E442",darkblue:"#0072B2",vermillion:"#D55E00",reddishpurple:"#CC79A7",blue:"#0072B2",red:"#D55E00",green:"#009E73",purple:"#CC79A7",white:"#ffffff"}}),r.Z.palette=r.Z.paletteWong,e.Z=r.Z},503:function(t,e,i){var r=i(765),s=i(109);r.Z.extendConstants(r.Z,{}),r.Z.extend(r.Z,{isTouchEvent:function(t){return r.Z.exists(t.touches)},isPointerEvent:function(t){return r.Z.exists(t.pointerId)},isMouseEvent:function(t){return!r.Z.isTouchEvent(t)&&!r.Z.isPointerEvent(t)},getNumberOfTouchPoints:function(t){var e=-1;return r.Z.isTouchEvent(t)&&(e=t.touches.length),e},isFirstTouch:function(t){var e=r.Z.getNumberOfTouchPoints(t);return r.Z.isPointerEvent(t)?t.isPrimary:1===e},isBrowser:"object"==typeof window&&"object"==typeof document,supportsES6:function(){try{return new Function("(a = 0) => a"),!0}catch(t){return!1}},supportsVML:function(){return this.isBrowser&&!!document.namespaces},supportsSVG:function(){return!!this.isBrowser&&(!!document.createElementNS&&!!document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect)},supportsCanvas:function(){var t=!1;return this.isNode()&&(t=!0),t||this.isBrowser&&!!document.createElement("canvas").getContext},isNode:function(){return!this.isBrowser&&"undefined"!=typeof process&&-1!==process.release.name.search(/node|io.js/)},isWebWorker:function(){return!this.isBrowser&&"object"==typeof self&&"function"==typeof self.postMessage},supportsPointerEvents:function(){return!!(this.isBrowser&&window.navigator&&(window.PointerEvent||window.navigator.pointerEnabled||window.navigator.msPointerEnabled))},isTouchDevice:function(){return this.isBrowser&&void 0!==window.ontouchstart},isAndroid:function(){return s.Z.exists(navigator)&&navigator.userAgent.toLowerCase().indexOf("android")>-1},isWebkitAndroid:function(){return this.isAndroid()&&navigator.userAgent.indexOf(" AppleWebKit/")>-1},isApple:function(){return s.Z.exists(navigator)&&(navigator.userAgent.indexOf("iPad")>-1||navigator.userAgent.indexOf("iPhone")>-1)},isWebkitApple:function(){return this.isApple()&&navigator.userAgent.search(/Mobile\/[0-9A-Za-z.]*Safari/)>-1},isMetroApp:function(){return"object"==typeof window&&window.clientInformation&&window.clientInformation.appVersion&&window.clientInformation.appVersion.indexOf("MSAppHost")>-1},isMozilla:function(){return s.Z.exists(navigator)&&navigator.userAgent.toLowerCase().indexOf("mozilla")>-1&&-1===navigator.userAgent.toLowerCase().indexOf("apple")},isFirefoxOS:function(){return s.Z.exists(navigator)&&-1===navigator.userAgent.toLowerCase().indexOf("android")&&-1===navigator.userAgent.toLowerCase().indexOf("apple")&&navigator.userAgent.toLowerCase().indexOf("mobile")>-1&&navigator.userAgent.toLowerCase().indexOf("mozilla")>-1},isDesktop:function(){return!0},isMobile:function(){return!0},ieVersion:function(){var t,e,i=3;if("object"!=typeof document)return 0;e=(t=document.createElement("div")).getElementsByTagName("i");do{t.innerHTML="\x3c!--[if gt IE "+ ++i+"]><i></i><![endif]--\x3e"}while(e[0]);return i>4?i:void 0}(),getDimensions:function(t,e){var i,r,o,n,a,h,l,c,d,u=/\d+(\.\d*)?px/;if(!this.isBrowser||null===t)return{width:500,height:500};if(e=e||document,i=s.Z.isString(t)?e.getElementById(t):t,!s.Z.exists(i))throw new Error("\nJSXGraph: HTML container element '"+t+"' not found.");return"none"!==(r=i.style.display)&&null!==r?i.clientWidth>0&&i.clientHeight>0?{width:i.clientWidth,height:i.clientHeight}:(d=window.getComputedStyle?window.getComputedStyle(i):i.style,{width:u.test(d.width)?parseFloat(d.width):0,height:u.test(d.height)?parseFloat(d.height):0}):(n=(o=i.style).visibility,a=o.position,h=o.display,o.visibility="hidden",o.position="absolute",o.display="block",l=i.clientWidth,c=i.clientHeight,o.display=h,o.position=a,o.visibility=n,{width:l,height:c})},addEvent:function(t,e,i,r,o){var n=function(){return i.apply(r,arguments)};n.origin=i,"object"==typeof r&&s.Z.exists(r.BOARD_MODE_NONE)&&(r["x_internal"+e]=r["x_internal"+e]||[],r["x_internal"+e].push(n)),s.Z.exists(t)&&s.Z.exists(t.addEventListener)&&(o=o||!1,t.addEventListener(e,n,o)),s.Z.exists(t)&&s.Z.exists(t.attachEvent)&&t.attachEvent("on"+e,n)},removeEvent:function(t,e,i,o){var n;if(s.Z.exists(o))if(s.Z.exists(o["x_internal"+e]))if(s.Z.isArray(o["x_internal"+e]))if(-1!==(n=s.Z.indexOf(o["x_internal"+e],i,"origin"))){try{s.Z.exists(t)&&s.Z.exists(t.removeEventListener)&&t.removeEventListener(e,o["x_internal"+e][n],!1),s.Z.exists(t)&&s.Z.exists(t.detachEvent)&&t.detachEvent("on"+e,o["x_internal"+e][n])}catch(t){r.Z.debug("event not registered in browser: ("+e+" -- "+i+")")}o["x_internal"+e].splice(n,1)}else r.Z.debug("removeEvent: no such event function in internal list: "+i);else r.Z.debug("owner[x_internal + "+e+"] is not an array");else r.Z.debug("no such type: "+e);else r.Z.debug("no such owner")},removeAllEvents:function(t,e,i){var s;if(i["x_internal"+e]){for(s=i["x_internal"+e].length-1;s>=0;s--)r.Z.removeEvent(t,e,i["x_internal"+e][s].origin,i);i["x_internal"+e].length>0&&r.Z.debug("removeAllEvents: Not all events could be removed.")}},getPosition:function(t,e,i){var r,o,n,a=0,h=0;if(t||(t=window.event),i=i||document,n=t.touches,s.Z.exists(n)&&0===n.length&&(n=t.changedTouches),s.Z.exists(e)&&s.Z.exists(n))if(-1===e){for(o=n.length,r=0;r<o;r++)if(n[r]){t=n[r];break}}else t=n[e];return t.clientX&&(a=t.clientX,h=t.clientY),[a,h]},getOffset:function(t){var e,i=t,r=t,s=i.offsetLeft-i.scrollLeft,o=i.offsetTop-i.scrollTop;for(s=(e=this.getCSSTransform([s,o],i))[0],o=e[1],i=i.offsetParent;i;){for(s+=i.offsetLeft,o+=i.offsetTop,i.offsetParent&&(s+=i.clientLeft-i.scrollLeft,o+=i.clientTop-i.scrollTop),s=(e=this.getCSSTransform([s,o],i))[0],o=e[1],r=r.parentNode;r!==i;)s+=r.clientLeft-r.scrollLeft,o+=r.clientTop-r.scrollTop,s=(e=this.getCSSTransform([s,o],r))[0],o=e[1],r=r.parentNode;i=i.offsetParent}return[s,o]},getStyle:function(t,e){var i,s=t.ownerDocument;return s.defaultView&&s.defaultView.getComputedStyle?i=s.defaultView.getComputedStyle(t,null).getPropertyValue(e):t.currentStyle&&r.Z.ieVersion>=9?i=t.currentStyle[e]:t.style&&(e=e.replace(/-([a-z]|[0-9])/gi,(function(t,e){return e.toUpperCase()})),i=t.style[e]),i},getProp:function(t,e){var i=parseInt(this.getStyle(t,e),10);return isNaN(i)?0:i},getCSSTransform:function(t,e){var i,r,o,n,a,h,l,c=["transform","webkitTransform","MozTransform","msTransform","oTransform"];for(a=c.length,i=0,o="";i<a;i++)if(s.Z.exists(e.style[c[i]])){o=e.style[c[i]];break}if(""!==o&&(n=o.indexOf("("))>0){for(a=o.length,r=0,h=(l=o.substring(n+1,a-1).split(",")).length;r<h;r++)l[r]=parseFloat(l[r]);0===o.indexOf("matrix")?(t[0]+=l[4],t[1]+=l[5]):0===o.indexOf("translateX")?t[0]+=l[0]:0===o.indexOf("translateY")?t[1]+=l[0]:0===o.indexOf("translate")&&(t[0]+=l[0],t[1]+=l[1])}return s.Z.exists(e.style.zoom)&&""!==(o=e.style.zoom)&&(t[0]*=parseFloat(o),t[1]*=parseFloat(o)),t},getCSSTransformMatrix:function(t){var e,i,r,o,n,a,h,l,c=t.ownerDocument,d=["transform","webkitTransform","MozTransform","msTransform","oTransform"],u=[[1,0,0],[0,1,0],[0,0,1]];if(c.defaultView&&c.defaultView.getComputedStyle)r=(l=c.defaultView.getComputedStyle(t,null)).getPropertyValue("-webkit-transform")||l.getPropertyValue("-moz-transform")||l.getPropertyValue("-ms-transform")||l.getPropertyValue("-o-transform")||l.getPropertyValue("transform");else for(a=d.length,e=0,r="";e<a;e++)if(s.Z.exists(t.style[d[e]])){r=t.style[d[e]];break}if(""!==r&&(n=r.indexOf("("))>0){for(a=r.length,i=0,h=(o=r.substring(n+1,a-1).split(",")).length;i<h;i++)o[i]=parseFloat(o[i]);0===r.indexOf("matrix")?u=[[1,0,0],[0,o[0],o[1]],[0,o[2],o[3]]]:0===r.indexOf("scaleX")?u[1][1]=o[0]:0===r.indexOf("scaleY")?u[2][2]=o[0]:0===r.indexOf("scale")&&(u[1][1]=o[0],u[2][2]=o[1])}return s.Z.exists(t.style.zoom)&&""!==(r=t.style.zoom)&&(u[1][1]*=parseFloat(r),u[2][2]*=parseFloat(r)),u},timedChunk:function(t,e,i,r){var s=t.slice(),o=function(){var n=+new Date;do{e.call(i,s.shift())}while(s.length>0&&+new Date-n<300);s.length>0?window.setTimeout(o,1):r(t)};window.setTimeout(o,1)},scaleJSXGraphDiv:function(t,e,i,s){var o,n,a,h,l,c,d,u,p,f,_,m,g=s;for(n=(a=i.getElementById(t).getBoundingClientRect()).height,o=a.width,c=(u=i.getElementById(e))._cssFullscreenStore.w,_=(d=u._cssFullscreenStore.h)/c,c>o*g&&(d=(c=o*g)*_),d>n*g&&(c=(d=n*g)/_),h=c,p=_<n/o?o*g/c:n*g/d,f=.5*(n-(l=d)),m=0;m<4;m++)try{u.style.width=h+"px !important",u.style.height=l+"px !important",u.style.margin="0 auto",u.style.transform=u._cssFullscreenStore.transform+" matrix("+p+",0,0,"+p+",0,"+f+")";break}catch(t){r.Z.debug("JXG.scaleJSXGraphDiv:\n"+t)}4===m&&r.Z.debug("JXG.scaleJSXGraphDiv: Could not set any CSS property.")}}),e.Z=r.Z},88:function(t,e,i){var r=i(765),s=i(109);r.Z.EventEmitter={eventHandlers:{},suspended:{},trigger:function(t,e){var i,r,s,o,n,a;for(n=t.length,r=0;r<n;r++)if(o=this.eventHandlers[t[r]],!this.suspended[t[r]]){if(this.suspended[t[r]]=!0,o)for(a=o.length,i=0;i<a;i++)(s=o[i]).handler.apply(s.context,e);this.suspended[t[r]]=!1}return this},on:function(t,e,i){return s.Z.isArray(this.eventHandlers[t])||(this.eventHandlers[t]=[]),i=s.Z.def(i,this),this.eventHandlers[t].push({handler:e,context:i}),this},off:function(t,e){var i;return t&&s.Z.isArray(this.eventHandlers[t])?(e?((i=s.Z.indexOf(this.eventHandlers[t],e,"handler"))>-1&&this.eventHandlers[t].splice(i,1),0===this.eventHandlers[t].length&&delete this.eventHandlers[t]):delete this.eventHandlers[t],this):this},eventify:function(t){t.eventHandlers={clicks:0},t.on=this.on,t.off=this.off,t.triggerEventHandlers=this.trigger,t.trigger=this.trigger,t.suspended={}}},e.Z=r.Z.EventEmitter},421:function(t,e,i){var r=i(765),s=i(109),o=i(351),n=i(705);r.Z.Expect={each:function(t,e,i){var r,o,n=[];if(s.Z.exists(t.length))for(o=t.length,r=0;r<o;r++)n.push(e.call(this,t[r],i));return n},coords:function(t,e){var i=t;return t&&t.elementClass===o.Z.OBJECT_CLASS_POINT?i=t.coords:t.usrCoords&&t.scrCoords&&t.usr2screen&&(i=t),e&&(i=new n.Z(o.Z.COORDS_BY_USER,i.usrCoords,i.board)),i},coordsArray:function(t,e){var i;return(i=s.Z.isArray(t)?t:this.coords(t).usrCoords).length<3&&i.unshift(1),e&&(i=[i[0],i[1],i[2]]),i}},e.Z=r.Z.Expect},109:function(t,e,i){var r=i(765),s=i(351),o=i(275);r.Z.extend(r.Z,{isBoard:function(t){return null!==t&&"object"==typeof t&&this.isNumber(t.BOARD_MODE_NONE)&&this.isObject(t.objects)&&this.isObject(t.jc)&&this.isFunction(t.update)&&!!t.containerObj&&this.isString(t.id)},isId:function(t,e){return"string"==typeof e&&!!t.objects[e]},isName:function(t,e){return"string"==typeof e&&!!t.elementsByName[e]},isGroup:function(t,e){return"string"==typeof e&&!!t.groups[e]},isString:function(t){return"string"==typeof t},isNumber:function(t,e,i){var r="number"==typeof t||"[Object Number]"===Object.prototype.toString.call(t);return i=void 0===i||i,(e=e||!1)&&(r=r||""+parseFloat(t)===t),i||(r=r&&!isNaN(t)),r},isFunction:function(t){return"function"==typeof t},isArray:function(t){return Array.isArray?Array.isArray(t):null!==t&&"object"==typeof t&&"function"==typeof t.splice&&"function"==typeof t.join},isObject:function(t){return"object"==typeof t&&!this.isArray(t)},isDocumentOrFragment:function(t){return this.isObject(t)&&(9===t.nodeType||11===t.nodeType)},isPoint:function(t){return!(null===t||"object"!=typeof t||!this.exists(t.elementClass))&&t.elementClass===s.Z.OBJECT_CLASS_POINT},isPoint3D:function(t){return!(null===t||"object"!=typeof t||!this.exists(t.elType))&&"point3d"===t.elType},isPointType:function(t,e){var i,r;return!!this.isArray(e)||(!!(this.isFunction(e)&&(i=e(),this.isArray(i)&&i.length>1))||(r=t.select(e),this.isPoint(r)))},isPointType3D:function(t,e){var i,r;return!!(this.isArray(e)&&e.length>=3)||(!!(this.isFunction(e)&&(i=e(),this.isArray(i)&&i.length>=3))||(r=t.select(e),this.isPoint3D(r)))},isTransformationOrArray:function(t){if(null!==t){if(this.isArray(t)&&t.length>0)return this.isTransformationOrArray(t[0]);if("object"==typeof t)return t.type===s.Z.OBJECT_TYPE_TRANSFORMATION}return!1},isEmpty:function(t){return 0===Object.keys(t).length},exists:function(t,e){var i=!(null==t||null===t);return(e=e||!1)?i&&""!==t:i},def:function(t,e){return this.exists(t)?t:e},str2Bool:function(t){return!this.exists(t)||("boolean"==typeof t?t:!!this.isString(t)&&"true"===t.toLowerCase())},cssParse:function(t){var e=t;return this.isString(e)?(e='{"'+(e=(e=(e=(e=e.replace(/\s*;\s*$/g,"")).replace(/\s*;\s*/g,'","')).replace(/\s*:\s*/g,'":"')).trim())+'"}',JSON.parse(e)):{}},cssStringify:function(t){var e,i,r="";if(!this.isObject(t))return"";for(e in t)t.hasOwnProperty(e)&&(i=t[e],(this.isString(i)||this.isNumber(i))&&(r+=e+":"+i+"; "));return r=r.trim()},createEvalFunction:function(t,e,i){var s,o,n,a=[],h={};for(o=0;o<i;o++)for(n in a[o]=r.Z.createFunction(e[o],t),a[o].deps)h[n]=a[o].deps;return(s=function(t){return a[t]()}).deps=h,s},createFunction:function(t,e,i,r){var s=null;return this.isString(t)?s=e.jc.snippet(t,!0,i,!1):this.isFunction(t)?(s=t).deps={}:this.isNumber(t)&&((s=function(){return t}).deps={}),null!==s&&(s.origin=t),s},providePoints:function(t,e,i,r,s){var o,n,a,h,l,c=0,d=[];for(this.isArray(e)||(e=[e]),a=e.length,this.exists(s)&&(c=s.length),0===c&&(h=this.copyAttributes(i,t.options,r)),o=0;o<a;++o)if(c>0&&(n=Math.min(o,c-1),h=this.copyAttributes(i,t.options,r,s[n].toLowerCase())),this.isArray(e[o])&&e[o].length>1?(d.push(t.create("point",e[o],h)),d[d.length-1]._is_new=!0):this.isFunction(e[o])?(l=e[o](),this.isArray(l)&&l.length>1&&(d.push(t.create("point",[e[o]],h)),d[d.length-1]._is_new=!0)):d.push(t.select(e[o])),!this.isPoint(d[o]))return!1;return d},providePoints3D:function(t,e,i,r,s){var o,n,a,h,l,c=0,d=[];for(this.isArray(e)||(e=[e]),a=e.length,this.exists(s)&&(c=s.length),0===c&&(h=this.copyAttributes(i,t.board.options,r)),o=0;o<a;++o)if(c>0&&(n=Math.min(o,c-1),h=this.copyAttributes(i,t.board.options,r,s[n])),this.isArray(e[o])&&e[o].length>1?(d.push(t.create("point3d",e[o],h)),d[d.length-1]._is_new=!0):this.isFunction(e[o])?(l=e[o](),this.isArray(l)&&l.length>1&&(d.push(t.create("point3d",[e[o]],h)),d[d.length-1]._is_new=!0)):d.push(t.select(e[o])),!this.isPoint3D(d[o]))return!1;return d},bind:function(t,e){return function(){return t.apply(e,arguments)}},evaluate:function(t){return this.isFunction(t)?t():t},indexOf:function(t,e,i){var r,s=this.exists(i);if(Array.indexOf&&!s)return t.indexOf(e);for(r=0;r<t.length;r++)if(s&&t[r][i]===e||!s&&t[r]===e)return r;return-1},eliminateDuplicates:function(t){var e,i=t.length,r=[],s={};for(e=0;e<i;e++)s[t[e]]=0;for(e in s)s.hasOwnProperty(e)&&r.push(e);return r},swap:function(t,e,i){var r;return r=t[e],t[e]=t[i],t[i]=r,t},uniqueArray:function(t){var e,i,s,o=[];if(0===t.length)return[];for(e=0;e<t.length;e++)if(s=this.isArray(t[e]),this.exists(t[e]))for(i=e+1;i<t.length;i++)s&&r.Z.cmpArrays(t[e],t[i])?t[e]=[]:s||t[e]!==t[i]||(t[e]="");else t[e]="";for(i=0,e=0;e<t.length;e++)(s=this.isArray(t[e]))||""===t[e]?s&&0!==t[e].length&&(o[i]=t[e].slice(0),i++):(o[i]=t[e],i++);return t=o,o},isInArray:function(t,e){return r.Z.indexOf(t,e)>-1},coordsArrayToMatrix:function(t,e){var i,r=[],s=[];for(i=0;i<t.length;i++)e?(r.push(t[i].usrCoords[1]),s.push(t[i].usrCoords[2])):s.push([t[i].usrCoords[1],t[i].usrCoords[2]]);return e&&(s=[r,s]),s},cmpArrays:function(t,e){var i;if(t===e)return!0;if(t.length!==e.length)return!1;for(i=0;i<t.length;i++)if(this.isArray(t[i])&&this.isArray(e[i])){if(!this.cmpArrays(t[i],e[i]))return!1}else if(t[i]!==e[i])return!1;return!0},removeElementFromArray:function(t,e){var i;for(i=0;i<t.length;i++)if(t[i]===e)return t.splice(i,1),t;return t},trunc:function(t,e){return e=r.Z.def(e,0),this.toFixed(t,e)},_decimalAdjust:function(t,e,i){return void 0===i||0==+i?Math[t](e):(e=+e,i=+i,isNaN(e)||"number"!=typeof i||i%1!=0?NaN:(e=e.toString().split("e"),+((e=(e=Math[t](+(e[0]+"e"+(e[1]?+e[1]-i:-i)))).toString().split("e"))[0]+"e"+(e[1]?+e[1]+i:i))))},_round10:function(t,e){return this._decimalAdjust("round",t,e)},_floor10:function(t,e){return this._decimalAdjust("floor",t,e)},_ceil10:function(t,e){return this._decimalAdjust("ceil",t,e)},toFixed:function(t,e){return this._round10(t,-e).toFixed(e)},autoDigits:function(t){var e=Math.abs(t);return e>=.1?this.toFixed(t,2):e>=.01?this.toFixed(t,4):e>=1e-4?this.toFixed(t,6):t},parseNumber:function(t,e,i){var r;return this.isString(t)&&t.indexOf("%")>-1?(r=t.replace(/\s+%\s+/,""),parseFloat(r)*e*.01):this.isString(t)&&t.indexOf("fr")>-1?(r=t.replace(/\s+fr\s+/,""),parseFloat(r)*e):this.isString(t)&&t.indexOf("px")>-1?(r=t.replace(/\s+px\s+/,""),r=parseFloat(r),this.isFunction(i)?i(r):this.isNumber(i)?r*i:r):parseFloat(t)},parsePosition:function(t){var e,i,r="",s="";if(""!==(t=t.trim()))for(e=t.split(/[ ,]+/),i=0;i<e.length;i++)"left"===e[i]||"right"===e[i]?r=e[i]:s=e[i];return{side:r,pos:s}},keys:function(t,e){var i,r=[];for(i in t)e?t.hasOwnProperty(i)&&r.push(i):r.push(i);return r},clone:function(t){var e={};return e.prototype=t,e},cloneAndCopy:function(t,e){var i,r=function(){};for(i in r.prototype=t,e)r[i]=e[i];return r},merge:function(t,e){var i,r,s,o;for(i in e)if(e.hasOwnProperty(i))if(s=e[i],this.isArray(s))for(t[i]||(t[i]=[]),r=0;r<s.length;r++)o=e[i][r],"object"==typeof e[i][r]?t[i][r]=this.merge(t[i][r],o):t[i][r]=e[i][r];else"object"==typeof s?(t[i]||(t[i]={}),t[i]=this.merge(t[i],s)):("boolean"==typeof t&&(t={}),t[i]=s);return t},deepCopy:function(t,e,i){var r,s,o,n;if(i=i||!1,"object"!=typeof t||null===t)return t;if(this.isArray(t))for(r=[],s=0;s<t.length;s++)null!==(o=t[s])&&"object"==typeof o?this.exists(o.board)?r[s]=o.id:r[s]=this.deepCopy(o,{},i):r[s]=o;else{for(s in r={},t)t.hasOwnProperty(s)&&(n=i?s.toLowerCase():s,null!==(o=t[s])&&"object"==typeof o?this.exists(o.board)?r[n]=o.id:r[n]=this.deepCopy(o,{},i):r[n]=o);for(s in e)e.hasOwnProperty(s)&&(n=i?s.toLowerCase():s,null!==(o=e[s])&&"object"==typeof o?this.isArray(o)||!this.exists(r[n])?r[n]=this.deepCopy(o,{},i):r[n]=this.deepCopy(r[n],o,i):r[n]=o)}return r},mergeAttr:function(t,e,i,r){var s,o,n;for(s in i=i||!0,r=r||!1,e)e.hasOwnProperty(s)&&(o=i?s.toLowerCase():s,n=e[s],!this.isObject(n)||null===n||this.isDocumentOrFragment(n)||this.exists(n.board)||"string"==typeof n.valueOf()?r&&!this.exists(n)||(t[o]=n):(void 0!==t[o]&&null!==t[o]&&this.isObject(t[o])||(t[o]={}),this.mergeAttr(t[o],n,i)))},keysToLowerCase:function(t){var e,i,r=Object.keys(t),s=r.length,o={};if("object"!=typeof t)return t;for(;s--;)e=r[s],t.hasOwnProperty(e)&&("object"!=typeof(i=t[e])||null===i||this.isArray(i)||this.exists(i.nodeType)||this.exists(i.board)?o[e.toLowerCase()]=i:o[e.toLowerCase()]=this.keysToLowerCase(i));return o},copyAttributes:function(t,e,i){var s,o,n,a,h;for(s=(n=arguments.length)<3||{circle:1,curve:1,foreignobject:1,image:1,line:1,point:1,polygon:1,text:1,ticks:1,integral:1}[i]?r.Z.deepCopy(e.elements,null,!0):{},n<4&&this.exists(i)&&this.exists(e.layer[i])&&(s.layer=e.layer[i]),a=e,h=!0,o=2;o<n;o++){if(!this.exists(a[arguments[o]])){h=!1;break}a=a[arguments[o]]}for(h&&(s=r.Z.deepCopy(s,a,!0)),a="object"==typeof t?this.keysToLowerCase(t):{},h=!0,o=3;o<n;o++){if(!this.exists(a[arguments[o]])){h=!1;break}a=a[arguments[o]]}if(h&&this.mergeAttr(s,a,!0),"board"===arguments[2])return s;for(a=e,h=!0,o=2;o<n;o++){if(!this.exists(a[arguments[o]])){h=!1;break}a=a[arguments[o]]}return h&&this.exists(a.label)&&(s.label=r.Z.deepCopy(a.label,s.label)),s.label=r.Z.deepCopy(e.label,s.label),s},copyPrototypeMethods:function(t,e,i){var r;for(r in t.prototype[i]=e.prototype.constructor,e.prototype)e.prototype.hasOwnProperty(r)&&(t.prototype[r]=e.prototype[r])},toJSON:function(t,e){var i,s,o,n;if(e=r.Z.def(e,!1),void 0!==JSON&&JSON.stringify&&!e)try{return JSON.stringify(t)}catch(t){}switch(typeof t){case"object":if(t){if(i=[],this.isArray(t)){for(o=0;o<t.length;o++)i.push(r.Z.toJSON(t[o],e));return"["+i.join(",")+"]"}for(s in t)if(t.hasOwnProperty(s)){try{n=r.Z.toJSON(t[s],e)}catch(t){n=""}e?i.push(s+":"+n):i.push('"'+s+'":'+n)}return"{"+i.join(",")+"} "}return"null";case"string":return"'"+t.replace(/(["'])/g,"\\$1")+"'";case"number":case"boolean":return t.toString()}return"0"},clearVisPropOld:function(t){return t.visPropOld={cssclass:"",cssdefaultstyle:"",cssstyle:"",fillcolor:"",fillopacity:"",firstarrow:!1,fontsize:-1,lastarrow:!1,left:-1e5,linecap:"",shadow:!1,strokecolor:"",strokeopacity:"",strokewidth:"",tabindex:-1e5,transitionduration:0,top:-1e5,visible:null},t},isInObject:function(t,e){var i;for(i in t)if(t.hasOwnProperty(i)&&t[i]===e)return!0;return!1},escapeHTML:function(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")},unescapeHTML:function(t){return t.replace(/<\/?[^>]+>/gi,"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")},capitalize:function(t){return t.charAt(0).toUpperCase()+t.substring(1).toLowerCase()},trimNumber:function(t){return"."!==(t=(t=t.replace(/^0+/,"")).replace(/0+$/,""))[t.length-1]&&","!==t[t.length-1]||(t=t.slice(0,-1)),"."!==t[0]&&","!==t[0]||(t="0"+t),t},filterElements:function(t,e){var i,r,s,o,n,a,h,l=t.length,c=[];if("function"!=typeof e&&"object"!=typeof e)return c;for(i=0;i<l;i++){if(h=!0,s=t[i],"object"==typeof e){for(r in e)if(e.hasOwnProperty(r)&&(o=r.toLowerCase(),n="function"==typeof s[r]?s[r]():s[r],a=s.visProp&&"function"==typeof s.visProp[o]?s.visProp[o]():s.visProp&&s.visProp[o],!(h="function"==typeof e[r]?e[r](n)||e[r](a):n===e[r]||a===e[r])))break}else"function"==typeof e&&(h=e(s));h&&c.push(s)}return c},trim:function(t){return t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},toFraction:function(t,e,i){var r=o.Z.decToFraction(t,i),s="";return 0===r[1]&&0===r[2]?s+="0":(r[0]<0&&(s+="-"),0===r[2]?s+=r[1]:1===r[2]&&1===r[3]||(0!==r[1]&&(s+=" "),s+=!0===e?"\\frac{"+r[2]+"}{"+r[3]+"}":r[2]+"/"+r[3])),s},concat:function(t,e){var i,r=e.length;for(i=0;i<r;i++)t.push(e[i]);return t},sanitizeHTML:function(t,e){return"function"==typeof html_sanitize&&e?html_sanitize(t,(function(){}),(function(t){return t})):(t&&"string"==typeof t&&(t=t.replace(/</g,"<").replace(/>/g,">")),t)},evalSlider:function(t){return t&&t.type===s.Z.OBJECT_TYPE_GLIDER&&"function"==typeof t.Value?t.Value():t},stack2jsxgraph:function(t){var e;return"["===(e=t.replace(/%pi/g,"PI").replace(/%e/g,"EULER").replace(/%phi/g,"1.618033988749895").replace(/%gamma/g,"0.5772156649015329").trim())[0]&&"]"===e[e.length-1]&&(e=e.slice(1,-1).split(/\s*,\s*/)),e}}),e.Z=r.Z}},__webpack_module_cache__={};function __webpack_require__(t){var e=__webpack_module_cache__[t];if(void 0!==e)return e.exports;var i=__webpack_module_cache__[t]={exports:{}};return __webpack_modules__[t](i,i.exports,__webpack_require__),i.exports}__webpack_require__.d=function(t,e){for(var i in e)__webpack_require__.o(e,i)&&!__webpack_require__.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},__webpack_require__.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)};var __webpack_exports__={};return function(){__webpack_require__.d(__webpack_exports__,{default:function(){return lt}});var t=__webpack_require__(765),e=__webpack_require__(503),i=__webpack_require__(351),r=__webpack_require__(109);t.Z.XML={cleanWhitespace:function(t){for(var e=t.firstChild;r.Z.exists(e);)3!==e.nodeType||/\S/.test(e.nodeValue)?1===e.nodeType&&this.cleanWhitespace(e):t.removeChild(e),e=e.nextSibling},parse:function(t){var e,i;return i="function"==typeof DOMParser||"object"==typeof DOMParser?DOMParser:function(){this.parseFromString=function(t){var e;return"function"==typeof ActiveXObject&&(e=new ActiveXObject("MSXML.DomDocument")).loadXML(t),e}},e=(new i).parseFromString(t,"text/xml"),this.cleanWhitespace(e),e}};t.Z.XML;var s=__webpack_require__(88),o=(__webpack_require__(421),__webpack_require__(275));o.Z.ProbFuncs={MAXNUM:17014118346046923e22,SQRTH:.7071067811865476,SQRT2:1.4142135623730951,MAXLOG:708.3964185322641,P:[2.461969814735305e-10,.5641895648310689,7.463210564422699,48.63719709856814,196.5208329560771,526.4451949954773,934.5285271719576,1027.5518868951572,557.5353353693994],Q:[13.228195115474499,86.70721408859897,354.9377788878199,975.7085017432055,1823.9091668790973,2246.3376081871097,1656.6630919416134,557.5353408177277],R:[.5641895835477551,1.275366707599781,5.019050422511805,6.160210979930536,7.4097426995044895,2.9788666537210022],S:[2.2605286322011726,9.396035249380015,12.048953980809666,17.08144507475659,9.608968090632859,3.369076451000815],T:[9.604973739870516,90.02601972038427,2232.005345946843,7003.325141128051,55592.30130103949],U:[33.56171416475031,521.3579497801527,4594.323829709801,22629.000061389095,49267.39426086359],M:128,MINV:.0078125,expx2:function(t,e){var i,r,s,o;return t=Math.abs(t),e<0&&(t=-t),i=(s=this.MINV*Math.floor(this.M*t+.5))*s,r=2*s*(o=t-s)+o*o,e<0&&(i=-i,r=-r),i+r>this.MAXLOG?1/0:i=Math.exp(i)*Math.exp(r)},polevl:function(t,e,i){var s,o;if(r.Z.exists(e.reduce))return e.reduce((function(e,i){return e*t+i}),0);for(o=0,s=0;o<=i;o++)s=s*t+e[o];return s},p1evl:function(t,e,i){var s,o;if(r.Z.exists(e.reduce))return e.reduce((function(e,i){return e*t+i}),1);for(o=0,s=1;o<i;o++)s=s*t+e[o];return s},ndtr:function(t){var e,i,r;return e=t*this.SQRTH,(r=Math.abs(e))<1?i=.5+.5*this.erf(e):(i=.5*this.erfce(r),r=this.expx2(t,-1),i*=Math.sqrt(r),e>0&&(i=1-i)),i},_underflow:function(t){return console.log("erfc","UNDERFLOW"),t<0?2:0},erfc:function(t){var e,i,r,s,o;return(r=t<0?-t:t)<1?1-this.erf(t):(o=-t*t)<-this.MAXLOG?this._underflow(t):(o=this.expx2(t,-1),r<8?(e=this.polevl(r,this.P,8),i=this.p1evl(r,this.Q,8)):(e=this.polevl(r,this.R,5),i=this.p1evl(r,this.S,6)),s=o*e/i,t<0&&(s=2-s),0===s?this._underflow(t):s)},erfce:function(t){var e,i;return t<8?(e=this.polevl(t,this.P,8),i=this.p1evl(t,this.Q,8)):(e=this.polevl(t,this.R,5),i=this.p1evl(t,this.S,6)),e/i},erf:function(t){var e;return Math.abs(t)>1?1-this.erfc(t):(e=t*t,t*this.polevl(e,this.T,4)/this.p1evl(e,this.U,5))},s2pi:2.5066282746310007,P0:[-59.96335010141079,98.00107541859997,-56.67628574690703,13.931260938727968,-1.2391658386738125],Q0:[1.9544885833814176,4.676279128988815,86.36024213908905,-225.46268785411937,200.26021238006066,-82.03722561683334,15.90562251262117,-1.1833162112133],P1:[4.0554489230596245,31.525109459989388,57.16281922464213,44.08050738932008,14.684956192885803,2.1866330685079025,-.1402560791713545,-.03504246268278482,-.0008574567851546854],Q1:[15.779988325646675,45.39076351288792,41.3172038254672,15.04253856929075,2.504649462083094,-.14218292285478779,-.03808064076915783,-.0009332594808954574],P2:[3.2377489177694603,6.915228890689842,3.9388102529247444,1.3330346081580755,.20148538954917908,.012371663481782003,.00030158155350823543,26580697468673755e-22,6.239745391849833e-9],Q2:[6.02427039364742,3.6798356385616087,1.3770209948908132,.21623699359449663,.013420400608854318,.00032801446468212774,28924786474538068e-22,6.790194080099813e-9],ndtri:function(t){var e,i,r,s,o;return t<=0?-1/0:t>=1?1/0:(o=1,(i=t)>.8646647167633873&&(i=1-i,o=0),i>.1353352832366127?(e=(i-=.5)+i*((s=i*i)*this.polevl(s,this.P0,4)/this.p1evl(s,this.Q0,8)),e*=this.s2pi):(r=1/(e=Math.sqrt(-2*Math.log(i))),e=e-Math.log(e)/e-(e<8?r*this.polevl(r,this.P1,8)/this.p1evl(r,this.Q1,8):r*this.polevl(r,this.P2,8)/this.p1evl(r,this.Q2,8)),0!==o&&(e=-e),e))},erfi:function(t){return this.ndtri(.5*(t+1))*this.SQRTH}};o.Z.ProbFuncs;var n=__webpack_require__(785);o.Z.Extrapolate={upper:15,infty:1e4,wynnEps:function(t,e,i){var r,s,o,n,a;if(i[e]=t,0===e)a=t;else{for(o=0,r=e;r>0;r--)s=o,o=i[r-1],n=i[r]-o,Math.abs(n)<=1e-15?i[r-1]=1e20:(1,i[r-1]=1*s+1/n);a=i[e%2]}return a},aitken:function(t,e,i){var r,s,o,n,a,h;if(i[e]=t,e<2)r=t;else{for(n=e/2,a=1;a<=n;a++)s=i[(h=e-2*a)+2]-2*i[h+1]+i[h],Math.abs(s)<1e-15?i[h]=1e20:(o=i[h]-i[h+1],i[h]-=o*o/s);r=i[e%2]}return r},brezinski:function(t,e,i){var r,s,o,n,a,h,l,c;if(i[e]=t,e<3)r=t;else{for(h=e/3,c=e,l=1;l<=h;l++)o=i[(c-=3)+1]-i[c],n=i[c+2]-i[c+1],s=(a=i[c+3]-i[c+2])*(n-o)-o*(a-n),Math.abs(s)<1e-15?i[c]=1e20:i[c]=i[c+1]-o*n*(a-n)/s;r=i[e%3]}return r},iteration:function(t,e,i,r,s){var o,n,a,h,l=NaN,c=[],d="finite",u=e;for(s=s||0,o=1;o<=this.upper;o++){if(n=i(t+(u=0===s?e/(o+1):.5*u),!0),a=this[r](n,o-1,c),isNaN(a)){d="NaN";break}if(0!==n&&a/n>this.infty){l=a,d="infinite";break}if(h=a-l,Math.abs(h)<1e-7)break;l=a}return[l,d,1-(o-1)/this.upper]},levin:function(t,e,i,r,s,o){var n,a,h,l;if(l=1/(r+e),s[e]=t/i,o[e]=1/i,e>0&&(s[e-1]=s[e]-s[e-1],o[e-1]=o[e]-o[e-1],e>1))for(h=(r+e-1)*l,n=2;n<=e;n++)a=(r+e-n)*Math.pow(h,n-2)*l,s[e-n]=s[e-n+1]-a*s[e-n],o[e-n]=o[e-n+1]-a*o[e-n],l*=h;return Math.abs(o[0])<1e-15?1e20:s[0]/o[0]},iteration_levin:function(t,e,i,r){var s,o,n,a,h,l,c,d=NaN,u=[],p=[],f="finite",_=e;for(r=r||0,a=i(t+e,!0),s=1;s<=this.upper;s++){if(h=(o=i(t+(_=0===r?e/(s+1):.5*_),!0))-a,c="u"===(Math.abs(h)<1?"u":"t")?(1+s)*h:h,a=o,l=(n=this.levin(o,s-1,c,1,u,p))-d,isNaN(n)){f="NaN";break}if(0!==o&&n/o>this.infty){d=n,f="infinite";break}if(Math.abs(l)<1e-7)break;d=n}return[d,f,1-(s-1)/this.upper]},limit:function(t,e,i){return this.iteration_levin(t,e,i,0)}};var a=o.Z.Extrapolate,h=__webpack_require__(922);o.Z.Quadtree=function(t,e,i){e=e||{capacity:10,pointType:"coords"},this.config={},this.config.capacity=e.capacity||10,this.config.pointType=e.pointType||"coords",this.points=[],this.xlb=t[0],this.xub=t[2],this.ylb=t[3],this.yub=t[1],this.parent=i||null,this.northWest=null,this.northEast=null,this.southEast=null,this.southWest=null},r.Z.extend(o.Z.Quadtree.prototype,{contains:function(t,e){return this.xlb<t&&t<=this.xub&&this.ylb<e&&e<=this.yub},insert:function(t){switch(this.config.pointType){case"coords":if(!this.contains(t.usrCoords[1],t.usrCoords[2]))return!1;break;case"object":if(!this.contains(t.x,t.y))return!1}return this.points.length<this.config.capacity&&null===this.northWest?(this.points.push(t),!0):(null===this.northWest&&this.subdivide(),!!this.northWest.insert(t)||(!!this.northEast.insert(t)||(!!this.southEast.insert(t)||!!this.southWest.insert(t))))},subdivide:function(){var t=this.xlb+.5*(this.xub-this.xlb),e=this.ylb+.5*(this.yub-this.ylb);this.northWest=new o.Z.Quadtree([this.xlb,this.yub,t,e],this.config,this),this.northEast=new o.Z.Quadtree([t,this.yub,this.xub,e],this.config,this),this.southEast=new o.Z.Quadtree([this.xlb,e,t,this.ylb],this.config,this),this.southWest=new o.Z.Quadtree([t,e,this.xub,this.ylb],this.config,this)},_query:function(t,e){var i;if(this.contains(t,e)){if(null===this.northWest)return this;if(i=this.northWest._query(t,e))return i;if(i=this.northEast._query(t,e))return i;if(i=this.southEast._query(t,e))return i;if(i=this.southWest._query(t,e))return i}return!1},query:function(t,e){var i,s;return r.Z.exists(e)?(i=t,s=e):(i=t.usrCoords[1],s=t.usrCoords[2]),this._query(i,s)},hasPoint:function(t,e,i){var r,s,o;if(this.contains(t,e)){switch(o=this.points.length,this.config.pointType){case"coords":for(s=0;s<o;s++)if(h.Z.distance([t,e],this.points[s].usrCoords.slice(1),2)<i)return!0;break;case"object":for(s=0;s<o;s++)if(h.Z.distance([t,e],[this.points[s].x,this.points[s].y],2)<i)return!0}if(null===this.northWest)return!1;if(r=this.northWest.hasPoint(t,e,i))return r;if(r=this.northEast.hasPoint(t,e,i))return r;if(r=this.southEast.hasPoint(t,e,i))return r;if(r=this.southWest.hasPoint(t,e,i))return r}return!1},getAllPoints:function(){var t=[];return this.getAllPointsRecursive(t),t},getAllPointsRecursive(t){Array.prototype.push.apply(t,this.points.slice()),null!==this.northWest&&(this.northWest.getAllPointsRecursive(t),this.northEast.getAllPointsRecursive(t),this.southEast.getAllPointsRecursive(t),this.southWest.getAllPointsRecursive(t))}});var l=o.Z.Quadtree;o.Z.BoxQuadtree=function(t,e,i){var r,s,o,n;t--,this.depth=t,this.capacity=e,this.items=[],this.northWest=null,this.northEast=null,this.southEast=null,this.southWest=null,this.bbox=null,this.cx=null,this.cy=null,i&&(r=i[0],s=i[1],o=i[2],n=i[3],this.cx=.5*(r+o),this.cy=.5*(s+n),this.bbox=[r,s,o,n])},r.Z.extend(o.Z.BoxQuadtree.prototype,{insert:function(t){var e,i,r,s,o,n,a,h,l,c,d,u=[],p=[],f=[],_=[];if(null===this.bbox){for(i=t.length,r=n=1/0,o=s=-1/0,e=0;e<t.length;e++)r=(a=t[e]).xlb<r?a.xlb:r,s=a.yub>s?a.yub:s,o=a.xub>o?a.xub:o,n=a.ylb<n?a.ylb:n;this.cx=.5*(r+o),this.cy=.5*(s+n),this.bbox=[r,s,o,n]}else r=this.bbox[0],s=this.bbox[1],o=this.bbox[2],n=this.bbox[3];if(0===this.depth||this.items.length+t.length<this.capacity)return this.items=this.items.concat(t),this;for(i=t.length,e=0;e<i;e++)h=(a=t[e]).xlb<=this.cx&&a.yub>this.cy,c=a.xlb<=this.cx&&a.ylb<=this.cy,l=a.xub>this.cx&&a.yub>this.cy,d=a.xub>this.cx&&a.ylb<=this.cy,h&&l&&d&&c?this.items.push(a):(h&&u.push(a),c&&f.push(a),l&&p.push(a),d&&_.push(a));return this.subdivide(u,f,p,_,r,s,o,n),this},insertItem:function(t){var e,i,r,s,o,n,a,h,l=[],c=[],d=[],u=[];return null===this.bbox?(e=s=1/0,r=i=-1/0,e=t.xlb<e?t.xlb:e,i=t.yub>i?t.yub:i,r=t.xub>r?t.xub:r,s=t.ylb<s?t.ylb:s,this.cx=.5*(e+r),this.cy=.5*(i+s),this.bbox=[e,i,r,s]):(e=this.bbox[0],i=this.bbox[1],r=this.bbox[2],s=this.bbox[3]),0===this.depth||this.items.length+1<this.capacity?(this.items.push(t),this):(o=t.xlb<=this.cx&&t.yub>this.cy,a=t.xlb<=this.cx&&t.ylb<=this.cy,n=t.xub>this.cx&&t.yub>this.cy,h=t.xub>this.cx&&t.ylb<=this.cy,o&&n&&h&&a?this.items.push(t):(o&&l.push(t),a&&d.push(t),n&&c.push(t),h&&u.push(t)),this.subdivide(l,d,c,u,e,i,r,s),this)},subdivide:function(t,e,i,r,s,o,n,a){return t.length>0&&(null===this.northWest&&(this.northWest=new JXG.Math.BoxQuadtree(this.depth,this.capacity,[s,o,this.cx,this.cy])),this.northWest.insert(t)),e.length>0&&(null===this.southWest&&(this.southWest=new JXG.Math.BoxQuadtree(this.depth,this.capacity,[s,this.cy,this.cx,a])),this.southWest.insert(e)),i.length>0&&(null===this.northEast&&(this.northEast=new JXG.Math.BoxQuadtree(this.depth,this.capacity,[this.cx,o,n,this.cy])),this.northEast.insert(i)),r.length>0&&(null===this.southEast&&(this.southEast=new JXG.Math.BoxQuadtree(this.depth,this.capacity,[this.cx,this.cy,n,a])),this.southEast.insert(r)),this},find:function(t){var e,i,s,o=[];for(i=this.items.length,e=0;e<i;e++)s=this.items[e],t[2]>=s.xlb&&t[0]<=s.xub&&t[3]<=s.yub&&t[1]>=s.ylb&&o.push(this.items[e]);return null!==this.northWest&&t[0]<=this.cx&t[1]>=this.cy&&r.Z.concat(o,this.northWest.find(t)),null!==this.southWest&&t[0]<=this.cx&t[3]<=this.cy&&r.Z.concat(o,this.southWest.find(t)),null!==this.northEast&&t[2]>=this.cx&t[1]>=this.cy&&r.Z.concat(o,this.northEast.find(t)),null!==this.southEast&&t[2]>=this.cx&t[3]<=this.cy&&r.Z.concat(o,this.southEast.find(t)),o},analyzeTree:function(){var t,e={number_items:this.items.length,depth:1};return null!==this.northWest&&(t=this.northWest.analyzeTree(),e.number_items+=t.number_items,e.depth=Math.max(e.depth,1+t.depth)),null!==this.southWest&&(t=this.southWest.analyzeTree(),e.number_items+=t.number_items,e.depth=Math.max(e.depth,1+t.depth)),null!==this.northEast&&(t=this.northEast.analyzeTree(),e.number_items+=t.number_items,e.depth=Math.max(e.depth,1+t.depth)),null!==this.southEast&&(t=this.southEast.analyzeTree(),e.number_items+=t.number_items,e.depth=Math.max(e.depth,1+t.depth)),e},plot:function(){var t,e=[],i=[];return e.push(this.bbox[0]),i.push(this.bbox[3]),e.push(this.bbox[2]),i.push(this.bbox[3]),e.push(this.bbox[2]),i.push(this.bbox[1]),e.push(this.bbox[0]),i.push(this.bbox[1]),e.push(this.bbox[0]),i.push(this.bbox[3]),e.push(NaN),i.push(NaN),null!==this.northWest&&(t=this.northWest.plot(),r.Z.concat(e,t[0]),r.Z.concat(i,t[1])),null!==this.northEast&&(t=this.northEast.plot(),r.Z.concat(e,t[0]),r.Z.concat(i,t[1])),null!==this.southEast&&(t=this.southEast.plot(),r.Z.concat(e,t[0]),r.Z.concat(i,t[1])),null!==this.southWest&&(t=this.southWest.plot(),r.Z.concat(e,t[0]),r.Z.concat(i,t[1])),[e,i]}});var c=o.Z.BoxQuadtree,d=__webpack_require__(336);t.Z.Math.Nlp={arr:function(t){return new Float64Array(t)},arr2:function(t,e){for(var i=0,r=new Array(t);i<t;)r[i]=this.arr(e),i++;return r},arraycopy:function(t,e,i,r,s){for(var o=0;o<s;)i[o+r]=t[o+e],o++},lastNumberOfEvaluations:0,GetLastNumberOfEvaluations:function(){return this.lastNumberOfEvaluations},Normal:0,MaxIterationsReached:1,DivergingRoundingErrors:2,FindMinimum:function(t,e,i,r,s,o,n,a,h){var l,c,d=i+2,u=this.arr(e+1),p=this;return this.lastNumberOfEvaluations=0,h&&console.log("Experimental feature 'testForRoundingErrors' is activated."),u[0]=0,this.arraycopy(r,0,u,1,e),c=function(e,i,r,s){var o,n,a=p.arr(e);return p.lastNumberOfEvaluations=p.lastNumberOfEvaluations+1,p.arraycopy(r,1,a,0,e),o=p.arr(i),n=t(e,i,a,o),p.arraycopy(o,0,s,1,i),n},l=this.cobylb(c,e,i,d,u,s,o,n,a,h),this.arraycopy(u,1,r,0,e),l},cobylb:function(t,e,i,r,s,o,n,a,h,l){var c,d,u,p,f,_,m,g,b,v,Z,C,y,P,E,O,x,S,M,w,T,N,A,D,k,R,L,B,I,Y=-1,j=0,X=0,U=e+1,F=i+1,J=o,z=0,G=!1,W=!1,H=0,V=0,$=0,K=this.arr(1+r),q=this.arr2(1+e,1+U),Q=this.arr2(1+e,1+e),tt=this.arr2(1+r,1+U),et=this.arr2(1+e,1+F),it=this.arr(1+e),rt=this.arr(1+e),st=this.arr(1+e),ot=this.arr(1+e),nt=this.arr(1+e);for(a>=2&&console.log("The initial value of RHO is "+J+" and PARMU is set to zero."),g=0,_=1/J,d=1;d<=e;++d)q[d][U]=s[d],q[d][d]=J,Q[d][d]=_;b=U,v=!1;t:for(;;){if(g>=h&&g>0){Y=this.MaxIterationsReached;break t}for(++g,j=t(e,i,s,K),X=0,p=1;p<=i;++p)X=Math.max(X,-K[p]);if(g!==a-1&&3!==a||this.PrintIterationResult(g,j,X,s,e,a),K[F]=j,K[r]=X,Z=!0,!v){for(Z=!1,d=1;d<=r;++d)tt[d][b]=K[d];if(g<=U){if(b<=e)if(tt[F][U]<=j)s[b]=q[b][U];else{for(q[b][U]=s[b],p=1;p<=r;++p)tt[p][b]=tt[p][U],tt[p][U]=K[p];for(p=1;p<=b;++p){for(q[b][p]=-J,_=0,d=p;d<=b;++d)_-=Q[d][p];Q[b][p]=_}}if(g<=e){s[b=g]+=J;continue t}}v=!0}e:for(;;){i:do{if(!Z){for(C=tt[F][U]+z*tt[r][U],y=U,u=1;u<=e;++u)(_=tt[F][u]+z*tt[r][u])<C?(y=u,C=_):_===C&&0===z&&tt[r][u]<tt[r][y]&&(y=u);if(y<=e){for(d=1;d<=r;++d)_=tt[d][U],tt[d][U]=tt[d][y],tt[d][y]=_;for(d=1;d<=e;++d){for(_=q[d][y],q[d][y]=0,q[d][U]+=_,m=0,p=1;p<=e;++p)q[d][p]-=_,m-=Q[p][d];Q[y][d]=m}}if(P=0,l)for(d=1;d<=e;++d)for(u=1;u<=e;++u)_=this.DOT_PRODUCT_ROW_COL(Q,d,q,u,1,e)-(d===u?1:0),P=Math.max(P,Math.abs(_));if(P>.1){Y=this.DivergingRoundingErrors;break t}for(p=1;p<=F;++p){for(K[p]=-tt[p][U],u=1;u<=e;++u)nt[u]=tt[p][u]+K[p];for(d=1;d<=e;++d)et[d][p]=(p===F?-1:1)*this.DOT_PRODUCT_ROW_COL(nt,-1,Q,d,1,e)}for(G=!0,H=.25*J,E=2.1*J,u=1;u<=e;++u){for(O=0,x=0,p=1;p<=e;++p)O+=Q[u][p]*Q[u][p],x+=q[p][u]*q[p][u];it[u]=1/Math.sqrt(O),rt[u]=Math.sqrt(x),(it[u]<H||rt[u]>E)&&(G=!1)}if(!v&&!G){for(b=0,_=E,u=1;u<=e;++u)rt[u]>_&&(b=u,_=rt[u]);if(0===b)for(u=1;u<=e;++u)it[u]<_&&(b=u,_=it[u]);for(_=.5*J*it[b],p=1;p<=e;++p)ot[p]=_*Q[b][p];for(S=0,M=0,c=0,p=1;p<=F;++p)c=this.DOT_PRODUCT_ROW_COL(ot,-1,et,p,1,e),p<F&&(_=tt[p][U],S=Math.max(S,-c-_),M=Math.max(M,c-_));for(w=z*(S-M)>2*c?-1:1,_=0,d=1;d<=e;++d)ot[d]=w*ot[d],q[d][b]=ot[d],_+=Q[b][d]*ot[d];for(p=1;p<=e;++p)Q[b][p]/=_;for(u=1;u<=e;++u){if(u!==b)for(_=this.DOT_PRODUCT_ROW_COL(Q,u,ot,-1,1,e),p=1;p<=e;++p)Q[u][p]-=_*Q[b][p];s[u]=q[u][U]+ot[u]}continue t}if(!(W=this.trstlp(e,i,et,K,J,ot))){for(_=0,p=1;p<=e;++p)_+=ot[p]*ot[p];if(_<.25*J*J){v=!0;break i}}for(c=0,T=0,K[F]=0,p=1;p<=F;++p)c=K[p]-this.DOT_PRODUCT_ROW_COL(ot,-1,et,p,1,e),p<F&&(T=Math.max(T,c));if(z<1.5*(N=(V=tt[r][U]-T)>0?c/V:0))for(z=2*N,a>=2&&console.log("Increase in PARMU to "+z),A=tt[F][U]+z*tt[r][U],u=1;u<=e;++u)if((_=tt[F][u]+z*tt[r][u])<A||_===A&&0===z&&tt[r][u]<tt[r][U])continue e;for($=z*V-c,p=1;p<=e;++p)s[p]=q[p][U]+ot[p];v=!0;continue t}for(Z=!1,D=tt[F][U]+z*tt[r][U]-(j+z*X),0===z&&j===tt[F][U]&&($=V,D=tt[r][U]-X),k=D<=0?1:0,b=0,u=1;u<=e;++u)(_=Math.abs(this.DOT_PRODUCT_ROW_COL(Q,u,ot,-1,1,e)))>k&&(b=u,k=_),st[u]=_*it[u];for(R=1.1*J,f=0,u=1;u<=e;++u)if(st[u]>=H||st[u]>=it[u]){if(_=rt[u],D>0){for(_=0,p=1;p<=e;++p)_+=Math.pow(ot[p]-q[p][u],2);_=Math.sqrt(_)}_>R&&(f=u,R=_)}if(f>0&&(b=f),0!==b){for(_=0,d=1;d<=e;++d)q[d][b]=ot[d],_+=Q[b][d]*ot[d];for(p=1;p<=e;++p)Q[b][p]/=_;for(u=1;u<=e;++u)if(u!==b)for(_=this.DOT_PRODUCT_ROW_COL(Q,u,ot,-1,1,e),p=1;p<=e;++p)Q[u][p]-=_*Q[b][p];for(p=1;p<=r;++p)tt[p][b]=K[p];if(D>0&&D>=.1*$)continue e}}while(0);if(G){if(J<=n){Y=this.Normal;break t}if(L=0,B=0,(J*=.5)<=1.5*n&&(J=n),z>0){for(I=0,p=1;p<=F;++p){for(B=L=tt[p][U],d=1;d<=e;++d)L=Math.min(L,tt[p][d]),B=Math.max(B,tt[p][d]);p<=i&&L<.5*B&&(_=Math.max(B,0)-L,I=I<=0?_:Math.min(I,_))}0===I?z=0:B-L<z*I&&(z=(B-L)/I)}a>=2&&console.log("Reduction in RHO to "+J+" and PARMU = "+z),2===a&&this.PrintIterationResult(g,tt[F][U],tt[r][U],this.COL(q,U),e,a)}else v=!1}}switch(Y){case this.Normal:if(a>=1&&console.log("%nNormal return from subroutine COBYLA%n"),W)return a>=1&&this.PrintIterationResult(g,j,X,s,e,a),Y;break;case this.MaxIterationsReached:a>=1&&console.log("%nReturn from subroutine COBYLA because the MAXFUN limit has been reached.%n");break;case this.DivergingRoundingErrors:a>=1&&console.log("%nReturn from subroutine COBYLA because rounding errors are becoming damaging.%n")}for(p=1;p<=e;++p)s[p]=q[p][U];return j=tt[F][U],X=tt[r][U],a>=1&&this.PrintIterationResult(g,j,X,s,e,a),Y},trstlp:function(t,e,i,r,s,n){var a,h,l,c,d,u,p,f,_,m,g,b,v,Z,C,y,P,E,O,x,S,M,w,T,N,A,D,k,R,L,B,I,Y,j=0,X=0,U=0,F=this.arr2(1+t,1+t),J=this.arr(2+e),z=this.arr(2+e),G=this.arr(1+t),W=this.arr(1+t),H=this.arr(2+e),V=this.arr(2+e),$=e,K=0;for(l=1;l<=t;++l)F[l][l]=1,n[l]=0;if(a=0,h=0,e>=1){for(c=1;c<=e;++c)r[c]>h&&(h=r[c],a=c);for(c=1;c<=e;++c)V[c]=c,z[c]=h-r[c]}d=!0;do{t:for(;;){(!d||d&&0===h)&&(a=$=e+1,V[$]=$,z[$]=0),d=!1,u=0,p=0,f=0,_=0;e:do{if(m=$===e?h:-this.DOT_PRODUCT_ROW_COL(n,-1,i,$,1,t),0===p||m<u?(u=m,X=K,p=3):K>X?(X=K,p=3):--p,0===p)break t;if(g=0,a<=K){if(a<K){b=V[a],v=z[a],c=a;do{for(y=V[C=c+1],P=this.DOT_PRODUCT(this.PART(this.COL(F,c),1,t),this.PART(this.COL(i,y),1,t)),j=o.Z.hypot(P,J[C]),E=J[C]/j,O=P/j,J[C]=E*J[c],J[c]=j,l=1;l<=t;++l)j=E*F[l][C]+O*F[l][c],F[l][C]=E*F[l][c]-O*F[l][C],F[l][c]=j;V[c]=y,z[c]=z[C],c=C}while(c<K);V[c]=b,z[c]=v}if(--K,$>e)for(j=1/J[K],c=1;c<=t;++c)G[c]=j*F[c][K];else for(j=this.DOT_PRODUCT_ROW_COL(G,-1,F,K+1,1,t),c=1;c<=t;++c)G[c]-=j*F[c][K+1]}else{for(y=V[a],c=1;c<=t;++c)W[c]=i[c][y];for(x=0,c=t;c>K;){for(P=0,S=0,l=1;l<=t;++l)P+=j=F[l][c]*W[l],S+=Math.abs(j);if(M=S+.1*Math.abs(P),w=S+.2*Math.abs(P),(S>=M||M>=w)&&(P=0),0===x)x=P;else for(C=c+1,E=P/(j=o.Z.hypot(P,x)),O=x/j,x=j,l=1;l<=t;++l)j=E*F[l][c]+O*F[l][C],F[l][C]=E*F[l][C]-O*F[l][c],F[l][c]=j;--c}if(0===x){g=-1,c=K;do{for(T=0,N=0,l=1;l<=t;++l)T+=j=F[l][c]*W[l],N+=Math.abs(j);if(M=N+.1*Math.abs(T),w=N+.2*Math.abs(T),N<M&&M<w){if((j=T/J[c])>0&&V[c]<=e&&(Y=z[c]/j,(g<0||Y<g)&&(g=Y)),c>=2)for(A=V[c],l=1;l<=t;++l)W[l]-=j*i[l][A];H[c]=j}else H[c]=0}while(--c>0);if(g<0)break t;for(c=1;c<=K;++c)z[c]=Math.max(0,z[c]-g*H[c]);if(a<K){b=V[a],v=z[a],c=a;do{for(A=V[C=c+1],P=this.DOT_PRODUCT(this.PART(this.COL(F,c),1,t),this.PART(this.COL(i,A),1,t)),j=o.Z.hypot(P,J[C]),E=J[C]/j,O=P/j,J[C]=E*J[c],J[c]=j,l=1;l<=t;++l)j=E*F[l][C]+O*F[l][c],F[l][C]=E*F[l][c]-O*F[l][C],F[l][c]=j;V[c]=A,z[c]=z[C],c=C}while(c<K);V[c]=b,z[c]=v}if(0===(j=this.DOT_PRODUCT(this.PART(this.COL(F,K),1,t),this.PART(this.COL(i,y),1,t))))break t;J[K]=j,z[a]=0,z[K]=g}else J[++K]=x,z[a]=z[K],z[K]=0;if(V[a]=V[K],V[K]=y,$>e&&y!==$){for(c=K-1,P=this.DOT_PRODUCT(this.PART(this.COL(F,c),1,t),this.PART(this.COL(i,y),1,t)),j=o.Z.hypot(P,J[K]),E=J[K]/j,O=P/j,J[K]=E*J[c],J[c]=j,l=1;l<=t;++l)j=E*F[l][K]+O*F[l][c],F[l][K]=E*F[l][c]-O*F[l][K],F[l][c]=j;V[K]=V[c],V[c]=y,j=z[c],z[c]=z[K],z[K]=j}if($>e)for(j=1/J[K],c=1;c<=t;++c)G[c]=j*F[c][K];else for(y=V[K],j=(this.DOT_PRODUCT_ROW_COL(G,-1,i,y,1,t)-1)/J[K],c=1;c<=t;++c)G[c]-=j*F[c][K]}for(D=s*s,R=0,k=0,l=1;l<=t;++l)Math.abs(n[l])>=1e-6*s&&(D-=n[l]*n[l]),R+=n[l]*G[l],k+=G[l]*G[l];if(D<=0)break t;if(j=Math.sqrt(k*D),Math.abs(R)>=1e-6*j&&(j=Math.sqrt(k*D+R*R)),f=_=D/(j+R),$===e){if(w=f+.2*h,f>=(M=f+.1*h)||M>=w)break e;f=Math.min(f,h)}for(c=1;c<=t;++c)W[c]=n[c]+f*G[c];if($===e)for(U=h,h=0,c=1;c<=K;++c)j=r[y=V[c]]-this.DOT_PRODUCT_ROW_COL(W,-1,i,y,1,t),h=Math.max(h,j);c=K;do{for(L=0,B=0,l=1;l<=t;++l)L+=j=F[l][c]*W[l],B+=Math.abs(j);if(M=B+.1*Math.abs(L),w=B+.2*Math.abs(L),(B>=M||M>=w)&&(L=0),H[c]=L/J[c],c>=2)for(y=V[c],l=1;l<=t;++l)W[l]-=H[c]*i[l][y]}while(c-- >=2);for($>e&&(H[K]=Math.max(0,H[K])),c=1;c<=t;++c)W[c]=n[c]+f*G[c];if($>K)for(c=K+1;c<=$;++c){for(Z=h-r[y=V[c]],I=h+Math.abs(r[y]),l=1;l<=t;++l)Z+=j=i[l][y]*W[l],I+=Math.abs(j);M=I+.1*Math.abs(Z),w=I+.2*Math.abs(Z),(I>=M||M>=w)&&(Z=0),H[c]=Z}for(g=1,a=0,c=1;c<=$;++c)H[c]<0&&(j=z[c]/(z[c]-H[c]))<g&&(g=j,a=c);for(j=1-g,c=1;c<=t;++c)n[c]=j*n[c]+g*W[c];for(c=1;c<=$;++c)z[c]=Math.max(0,j*z[c]+g*H[c]);$===e&&(h=U+g*(h-U))}while(a>0);if(f===_)return!0}}while($===e);return!1},PrintIterationResult:function(t,e,i,r,s,o){o>1&&console.log("NFVALS = "+t+" F = "+e+" MAXCV = "+i),o>1&&console.log("X = "+this.PART(r,1,s))},ROW:function(t,e){return t[e].slice()},COL:function(t,e){var i,r=t.length,s=[];for(i=0;i<r;++i)s[i]=t[i][e];return s},PART:function(t,e,i){return t.slice(e,i+1)},FORMAT:function(t){return t.join(",")},DOT_PRODUCT:function(t,e){var i,r=0,s=t.length;for(i=0;i<s;++i)r+=t[i]*e[i];return r},DOT_PRODUCT_ROW_COL:function(t,e,i,r,s,o){var n,a=0;if(-1===e)for(n=s;n<=o;++n)a+=t[n]*i[n][r];else if(-1===r)for(n=s;n<=o;++n)a+=t[e][n]*i[n];else for(n=s;n<=o;++n)a+=t[e][n]*i[n][r];return a}};t.Z.Math.Nlp;var u=__webpack_require__(705),p=__webpack_require__(309);o.Z.Plot={checkReal:function(t){var e,i,r=!1,s=t.length;for(e=0;e<s;e++)if(i=t[e].usrCoords,!isNaN(i[1])&&!isNaN(i[2])&&Math.abs(i[0])>o.Z.eps){r=!0;break}return r},updateParametricCurveNaive:function(t,e,r,s){var o,n,a=!1,h=(r-e)/s;for(o=0;o<s;o++)n=e+o*h,t.points[o].setCoordinates(i.Z.COORDS_BY_USER,[t.X(n,a),t.Y(n,a)],!1),t.points[o]._t=n,a=!0;return t},isSegmentOutside:function(t,e,i,r,s){return e<0&&r<0||e>s.canvasHeight&&r>s.canvasHeight||t<0&&i<0||t>s.canvasWidth&&i>s.canvasWidth},isDistOK:function(t,e,i,r){return Math.abs(t)<i&&Math.abs(e)<r&&!isNaN(t+e)},isSegmentDefined:function(t,e,i,r){return!(isNaN(t+e)&&isNaN(i+r))},updateParametricCurveOld:function(e,r,s){var n,a,h,l,c,d,p,f,_,m,g,b=!1,v=new u.Z(i.Z.COORDS_BY_USER,[0,0],e.board,!1),Z=[],C=[],y=[],P=[],E=!1,O=0,x=function(t,e,i){var r,s=i[1]-t[1],n=i[2]-t[2],a=e[0]-t[1],h=e[1]-t[2],l=a*a+h*h;return l>=o.Z.eps&&(r=(s*a+n*h)/l)>0&&(r<=1?(s-=r*a,n-=r*h):(s-=a,n-=h)),o.Z.hypot(s,n)};for(t.Z.deprecated("Curve.updateParametricCurveOld()"),e.board.updateQuality===e.board.BOARD_QUALITY_LOW?(_=15,m=10,g=10):(_=21,m=.7,g=.7),P[0]=s-r,n=1;n<_;n++)P[n]=.5*P[n-1];n=1,Z[0]=1,C[0]=0,a=r,v.setCoordinates(i.Z.COORDS_BY_USER,[e.X(a,b),e.Y(a,b)],!1),b=!0,c=v.scrCoords[1],d=v.scrCoords[2],a=s,v.setCoordinates(i.Z.COORDS_BY_USER,[e.X(a,b),e.Y(a,b)],!1),h=v.scrCoords[1],l=v.scrCoords[2],y[0]=[h,l],p=1,f=0,e.points=[],e.points[O++]=new u.Z(i.Z.COORDS_BY_SCREEN,[c,d],e.board,!1);do{for(E=this.isDistOK(h-c,l-d,m,g)||this.isSegmentOutside(c,d,h,l,e.board);f<_&&(!E||f<6)&&(f<=7||this.isSegmentDefined(c,d,h,l));)Z[p]=n,C[p]=f,y[p]=[h,l],p+=1,a=r+(n=2*n-1)*P[++f],v.setCoordinates(i.Z.COORDS_BY_USER,[e.X(a,b),e.Y(a,b)],!1,!0),h=v.scrCoords[1],l=v.scrCoords[2],E=this.isDistOK(h-c,l-d,m,g)||this.isSegmentOutside(c,d,h,l,e.board);O>1&&x(e.points[O-2].scrCoords,[h,l],e.points[O-1].scrCoords)<.015&&(O-=1),e.points[O]=new u.Z(i.Z.COORDS_BY_SCREEN,[h,l],e.board,!1),e.points[O]._t=a,O+=1,c=h,d=l,h=y[p-=1][0],l=y[p][1],f=C[p]+1,n=2*Z[p]}while(p>0&&O<5e5);return e.numberPoints=e.points.length,e},_insertPoint_v2:function(t,e,i){var r=!isNaN(this._lastCrds[1]+this._lastCrds[2]),s=!isNaN(e.scrCoords[1]+e.scrCoords[2]),o=t.board.canvasWidth,n=t.board.canvasHeight,a=500;(!(s=s&&e.scrCoords[1]>-500&&e.scrCoords[2]>-500&&e.scrCoords[1]<o+a&&e.scrCoords[2]<n+a)&&r||s&&(!r||Math.abs(e.scrCoords[1]-this._lastCrds[1])>.7||Math.abs(e.scrCoords[2]-this._lastCrds[2])>.7))&&(e._t=i,t.points.push(e),this._lastCrds=e.copy("scrCoords"))},neighborhood_isNaN_v2:function(t,e){var r,s,n=new u.Z(i.Z.COORDS_BY_USER,[0,0],t.board,!1);return r=e+o.Z.eps,n.setCoordinates(i.Z.COORDS_BY_USER,[t.X(r,!0),t.Y(r,!0)],!1),s=n.usrCoords,!!(isNaN(s[1]+s[2])||(r=e-o.Z.eps,n.setCoordinates(i.Z.COORDS_BY_USER,[t.X(r,!0),t.Y(r,!0)],!1),s=n.usrCoords,isNaN(s[1]+s[2])))},_borderCase:function(t,e,r,s,o,n,a,h){var l,c,d,p,f,_,m=null,g=!1;if(h<=1){if(c=new u.Z(i.Z.COORDS_BY_USER,[0,0],t.board,!1),isNaN(e[1]+e[2])&&!isNaN(s[1]+s[2])&&!this.neighborhood_isNaN_v2(t,o))return!1;if(isNaN(r[1]+r[2])&&!isNaN(s[1]+s[2])&&!this.neighborhood_isNaN_v2(t,n))return!1;if(isNaN(s[1]+s[2])&&(!isNaN(e[1]+e[2])||!isNaN(r[1]+r[2]))&&!this.neighborhood_isNaN_v2(t,a))return!1;p=0;do{if(isNaN(e[1]+e[2])&&!isNaN(s[1]+s[2]))f=o,_=a;else if(isNaN(r[1]+r[2])&&!isNaN(s[1]+s[2]))f=n,_=a;else if(isNaN(s[1]+s[2])&&!isNaN(r[1]+r[2]))f=a,_=n;else{if(!isNaN(s[1]+s[2])||isNaN(e[1]+e[2]))return!1;f=a,_=o}l=.5*(f+_),c.setCoordinates(i.Z.COORDS_BY_USER,[t.X(l,!0),t.Y(l,!0)],!1),d=c.usrCoords,(g=isNaN(d[1]+d[2]))?f=l:_=l,++p}while(g&&p<30);if(p<30&&(m=d.slice(),s=d.slice(),_=l),null!==m)return this._insertPoint_v2(t,new u.Z(i.Z.COORDS_BY_USER,m,t.board,!1)),!0}return!1},_plotRecursive_v2:function(t,e,r,s,o,n,a){var h,l,c,d,p,f=0,_=new u.Z(i.Z.COORDS_BY_USER,[0,0],t.board,!1);if(!(t.numberPoints>65536))return n<this.nanLevel&&this._isUndefined(t,e,r,s,o)||n<this.nanLevel&&this._isOutside(e,r,s,o,t.board)?this:(h=.5*(r+o),_.setCoordinates(i.Z.COORDS_BY_USER,[t.X(h,!0),t.Y(h,!0)],!1),l=_.scrCoords,this._borderCase(t,e,s,l,r,o,h,n)||(c=this._triangleDists(e,s,l),d=n<this.smoothLevel&&c[3]<a,p=n<=this.jumpLevel&&(isNaN(c[0])||isNaN(c[1])||isNaN(c[2]))||n<this.jumpLevel&&(c[2]>.99*c[0]||c[1]>.99*c[0]||c[0]===1/0||c[1]===1/0||c[2]===1/0),n<this.smoothLevel+2&&c[0]<.5*(c[1]+c[2])&&(f=0,d=!1),--n,p?this._insertPoint_v2(t,new u.Z(i.Z.COORDS_BY_SCREEN,[NaN,NaN],t.board,!1),h):n<=f||d?this._insertPoint_v2(t,_,h):(this._plotRecursive_v2(t,e,r,l,h,n,a),isNaN(_.scrCoords[1]+_.scrCoords[2])||this._insertPoint_v2(t,_,h),this._plotRecursive_v2(t,l,h,s,o,n,a))),this)},updateParametricCurve_v2:function(t,e,s){var o,n,a,h,l,c,d,p,f,_=!1,m=new u.Z(i.Z.COORDS_BY_USER,[0,0],t.board,!1),g=new u.Z(i.Z.COORDS_BY_USER,[0,0],t.board,!1);return t.board.updateQuality===t.board.BOARD_QUALITY_LOW?(l=r.Z.evaluate(t.visProp.recursiondepthlow)||13,c=2,this.smoothLevel=l-6,this.jumpLevel=3):(l=r.Z.evaluate(t.visProp.recursiondepthhigh)||17,c=2,this.smoothLevel=l-9,this.jumpLevel=2),this.nanLevel=l-4,t.points=[],"x"===this.xterm?(d=.3*((p=t.board.getBoundingBox())[2]-p[0]),o=Math.max(e,p[0]-d),n=Math.min(s,p[2]+d)):(o=e,n=s),m.setCoordinates(i.Z.COORDS_BY_USER,[t.X(o,_),t.Y(o,_)],!1),_=!0,g.setCoordinates(i.Z.COORDS_BY_USER,[t.X(n,_),t.Y(n,_)],!1),f=this._findStartPoint(t,m.scrCoords,o,g.scrCoords,n),m.setCoordinates(i.Z.COORDS_BY_SCREEN,f[0],!1),o=f[1],f=this._findStartPoint(t,g.scrCoords,n,m.scrCoords,o),g.setCoordinates(i.Z.COORDS_BY_SCREEN,f[0],!1),n=f[1],this._visibleArea=[o,n],a=m.copy("scrCoords"),h=g.copy("scrCoords"),m._t=o,t.points.push(m),this._lastCrds=m.copy("scrCoords"),this._plotRecursive_v2(t,a,o,h,n,l,c),g._t=n,t.points.push(g),t.numberPoints=t.points.length,t},_insertLimesPoint:function(t,e,r,s,n){var a,h,l;Math.abs(this._lastUsrCrds[1])===1/0&&Math.abs(n.left_x)===1/0||Math.abs(this._lastUsrCrds[2])===1/0&&Math.abs(n.left_y)===1/0||((a=new u.Z(i.Z.COORDS_BY_USER,[n.left_x,n.left_y],t.board))._t=r,t.points.push(a),isNaN(n.left_x)||isNaN(n.left_y)||isNaN(n.right_x)||isNaN(n.right_y)||!(Math.abs(n.left_x-n.right_x)>o.Z.eps||Math.abs(n.left_y-n.right_y)>o.Z.eps)||((h=new u.Z(i.Z.COORDS_BY_SCREEN,e,t.board))._t=r,t.points.push(h)),(l=new u.Z(i.Z.COORDS_BY_USER,[n.right_x,n.right_y],t.board))._t=r,t.points.push(l),this._lastScrCrds=l.copy("scrCoords"),this._lastUsrCrds=l.copy("usrCoords"))},_insertPoint:function(t,e,s,o,n){var a,h=!isNaN(this._lastScrCrds[1]+this._lastScrCrds[2]),l=!isNaN(e[1]+e[2]),c=t.board.canvasWidth,d=t.board.canvasHeight,p=500;r.Z.exists(n)?this._insertLimesPoint(t,e,s,o,n):(l=l&&e[1]>-500&&e[2]>-500&&e[1]<c+p&&e[2]<d+p,(h||l)&&(l&&h&&Math.abs(e[1]-this._lastScrCrds[1])<.8&&Math.abs(e[2]-this._lastScrCrds[2])<.8||Math.abs(e[1])===1/0&&Math.abs(this._lastUsrCrds[1])===1/0||Math.abs(e[2])===1/0&&Math.abs(this._lastUsrCrds[2])===1/0||((a=new u.Z(i.Z.COORDS_BY_SCREEN,e,t.board))._t=s,t.points.push(a),this._lastScrCrds=a.copy("scrCoords"),this._lastUsrCrds=a.copy("usrCoords"))))},_triangleDists:function(t,e,i){var r;return r=[t[0]*e[0],.5*(t[1]+e[1]),.5*(t[2]+e[2])],[h.Z.distance(t,e,3),h.Z.distance(t,i,3),h.Z.distance(i,e,3),h.Z.distance(i,r,3)]},_isUndefined:function(t,e,r,s,o){var n,a,h;if(!isNaN(e[1]+e[2])||!isNaN(s[1]+s[2]))return!1;for(h=new u.Z(i.Z.COORDS_BY_USER,[0,0],t.board,!1),a=0;a<20;++a)if(n=r+Math.random()*(o-r),h.setCoordinates(i.Z.COORDS_BY_USER,[t.X(n,!0),t.Y(n,!0)],!1),!isNaN(h.scrCoords[0]+h.scrCoords[1]+h.scrCoords[2]))return!1;return!0},_isOutside:function(t,e,i,r,s){var o=500,n=s.canvasWidth,a=s.canvasHeight;return!!(t[1]<-500&&i[1]<-500||t[2]<-500&&i[2]<-500||t[1]>n+o&&i[1]>n+o||t[2]>a+o&&i[2]>a+o)},_isOutsidePoint:function(t,e){var i=500,r=e.canvasWidth,s=e.canvasHeight;return!!(t[1]<-500||t[2]<-500||t[1]>r+i||t[2]>s+i)},_findStartPoint:function(t,e,i,r,s){return[e,i]},_getBorderPos:function(t,e,r,s,n,a,h){var l,c,d,p,f,_;if(c=new u.Z(i.Z.COORDS_BY_USER,[0,0],t.board,!1),p=0,isNaN(r[1]+r[2])&&!isNaN(n[1]+n[2]))_=e,f=s;else if(isNaN(h[1]+h[2])&&!isNaN(n[1]+n[2]))_=a,f=s;else if(isNaN(n[1]+n[2])&&!isNaN(h[1]+h[2]))_=s,f=a;else{if(!isNaN(n[1]+n[2])||isNaN(r[1]+r[2]))return!1;_=s,f=e}do{l=.5*(f+_),c.setCoordinates(i.Z.COORDS_BY_USER,[t.X(l,!0),t.Y(l,!0)],!1),d=c.usrCoords,isNaN(d[1]+d[2])?_=l:f=l,++p}while(p<30&&Math.abs(f-_)>o.Z.eps);return l},_getCuspPos:function(t,e,i){var r=[t.X(e,!0),t.Y(e,!0)],s=[t.X(i,!0),t.Y(i,!0)];return d.Z.fminbr((function(e){var i=[t.X(e,!0),t.Y(e,!0)];return-(o.Z.hypot(r[0]-i[0],r[1]-i[1])+o.Z.hypot(s[0]-i[0],s[1]-i[1]))}),[e,i],t)},_getJumpPos:function(t,e,i){return d.Z.fminbr((function(e){var i=o.Z.eps*o.Z.eps,r=[t.X(e,!0),t.Y(e,!0)],s=[t.X(e+i,!0),t.Y(e+i,!0)];return-Math.abs((s[1]-r[1])/(s[0]-r[0]))}),[e,i],t)},_getLimits:function(t,e){var i,r,s,o,n,h=2/(t.maxX()-t.minX());return r=(i=a.limit(e,-h,t.X))[0],"infinite"===i[1]&&(r=Math.sign(r)*(1/0)),o=(i=a.limit(e,-h,t.Y))[0],"infinite"===i[1]&&(o=Math.sign(o)*(1/0)),s=(i=a.limit(e,h,t.X))[0],"infinite"===i[1]&&(s=Math.sign(s)*(1/0)),n=(i=a.limit(e,h,t.Y))[0],"infinite"===i[1]&&(n=Math.sign(n)*(1/0)),{left_x:r,left_y:o,right_x:s,right_y:n,t:e}},_getLimes:function(t,e,i,r,s,o,n,a,h){var l;return"border"===a?l=this._getBorderPos(t,e,i,r,s,o,n):"cusp"===a?l=this._getCuspPos(t,e,o):"jump"===a&&(l=this._getJumpPos(t,e,o)),this._getLimits(t,l)},_plotNonRecursive:function(t,e,i,r,s,o){var n,a,h,l,c,d,u,p,f,_,m,g=null,b=!1,v="",Z=[],C=0;for(p=t.board.origin.scrCoords,Z[C++]=[e,i,r,s,o,1/0];C>0;){if(e=(m=Z[--C])[0],i=m[1],r=m[2],s=m[3],f=m[4],_=m[5],b=!1,v="",g=null,t.points.length>65536)return;if(f<this.nanLevel){if(this._isUndefined(t,e,i,r,s))continue;if(this._isOutside(e,i,r,s,t.board))continue}n=.5*(i+s),d=t.X(n,!0),u=t.Y(n,!0),a=[1,p[1]+d*t.board.unitX,p[2]-u*t.board.unitY],h=this._triangleDists(e,r,a),l=isNaN(e[1]+e[2]),c=isNaN(r[1]+r[2]),l&&!c||!l&&c?v="border":h[0]>.66*_||h[0]<this.cusp_threshold*(h[1]+h[2])||h[1]>5*h[2]||h[2]>5*h[1]?v="cusp":(h[2]>this.jump_threshold*h[0]||h[1]>this.jump_threshold*h[0]||h[0]===1/0||h[1]===1/0||h[2]===1/0)&&(v="jump"),b=""===v&&f<this.smoothLevel&&h[3]<this.smooth_threshold,f<this.testLevel&&!b&&(""===v?b=!0:g=this._getLimes(t,i,e,n,a,s,r,v,f)),null!==g?(a=[1,NaN,NaN],this._insertPoint(t,a,n,f,g)):f<=0||b?this._insertPoint(t,a,n,f,null):(Z[C++]=[a,n,r,s,f-1,h[0]],Z[C++]=[e,i,a,n,f-1,h[0]])}return this},updateParametricCurve_v3:function(t,e,s){var o,n,a,h,l,c,d,p,f=!1,_=new u.Z(i.Z.COORDS_BY_USER,[0,0],t.board,!1),m=new u.Z(i.Z.COORDS_BY_USER,[0,0],t.board,!1);return l=t.board.updateQuality===t.board.BOARD_QUALITY_LOW?r.Z.evaluate(t.visProp.recursiondepthlow)||14:r.Z.evaluate(t.visProp.recursiondepthhigh)||17,this.smoothLevel=7,this.nanLevel=l-4,this.testLevel=4,this.cusp_threshold=.5,this.jump_threshold=.99,this.smooth_threshold=2,t.points=[],"x"===t.xterm?(c=.3*((d=t.board.getBoundingBox())[2]-d[0]),o=Math.max(e,d[0]-c),n=Math.min(s,d[2]+c)):(o=e,n=s),_.setCoordinates(i.Z.COORDS_BY_USER,[t.X(o,f),t.Y(o,f)],!1),f=!0,m.setCoordinates(i.Z.COORDS_BY_USER,[t.X(n,f),t.Y(n,f)],!1),p=this._findStartPoint(t,_.scrCoords,o,m.scrCoords,n),_.setCoordinates(i.Z.COORDS_BY_SCREEN,p[0],!1),o=p[1],p=this._findStartPoint(t,m.scrCoords,n,_.scrCoords,o),m.setCoordinates(i.Z.COORDS_BY_SCREEN,p[0],!1),n=p[1],this._visibleArea=[o,n],a=_.copy("scrCoords"),h=m.copy("scrCoords"),_._t=o,t.points.push(_),this._lastScrCrds=_.copy("scrCoords"),this._lastUsrCrds=_.copy("usrCoords"),this._plotNonRecursive(t,a,o,h,n,l),m._t=n,t.points.push(m),t.numberPoints=t.points.length,t},_criticalInterval:function(t,e,i){var r,s,o,n,a,h,l,c=!1,d=-1/0,u=!1,f=!1,_=0,m=[],g=[],b=[];for(l=p.Z.abs(t),(n=p.Z.median(l))<1e-7?(n=1e-7,u=!0):n*=this.criticalThreshold,r=0;r<e;r++)l[r]>n?(b.push({i:r,v:t[r],group:_}),d=r,c||(c=!0)):c&&r>d+4&&(b.length>0&&m.push(b.slice(0)),b=[],c=!1,_++);for(c&&b.length>1&&m.push(b.slice(0)),u&&0===m.length&&(f=!0),s=0;s<m.length;s++)if(g[s]="point",!((o=m[s].length)<64)){for(h=0,a=Math.sign(m[s][0].v),r=1;r<o;r++)Math.sign(m[s][r].v)!==a&&(h++,a=Math.sign(m[s][r].v));6*h>o&&(g[s]="interval")}return{smooth:f,groups:m,types:g}},Component:function(){this.left_isNaN=!1,this.right_isNaN=!1,this.left_t=null,this.right_t=null,this.t_values=[],this.x_values=[],this.y_values=[],this.len=0},findComponents:function(t,e,i,r){var s,o,n,a,h,l,c=[],d=0,u=0,p=0,f=!1,_=!1;for(n=(i-e)/r,c[d]=new this.Component,l=c[d],s=0,o=e;s<=r;s++,o+=n)a=t.X(o,_),h=t.Y(o,_),isNaN(a)||isNaN(h)?++p>1&&f&&(l.right_isNaN=!0,l.right_t=o-n,l.len=u,f=!1,c[++d]=new this.Component,l=c[d],p=0):(f||(f=!0,u=0,p>0&&(l.left_t=o-n,l.left_isNaN=!0)),p=0,l.t_values[u]=o,l.x_values[u]=a,l.y_values[u]=h,u++),0===s&&(_=!0);return f?l.len=u:c.pop(),c},getPointType:function(t,e,i,r,s,o,n){var a=s[0],h=o[0],l=r.length,c={idx:e,t:i,x:a[e],y:h[e],type:"other"};return e<5?(c.type="borderleft",c.idx=0,c.t=r[0],c.x=a[0],c.y=h[0],c):e>n-6?(c.type="borderright",c.idx=l-1,c.t=r[l-1],c.x=a[l-1],c.y=h[l-1],c):c},newtonApprox:function(t,e,i,r,s){var o,n=0;for(o=r;o>0;o--)n=(n+s[o][t])*(e-(o-1)*i)/o;return n+s[0][t]},thiele:function(t,e,i,r,s){var o,n=0;for(o=s;o>1;o--)n=(t-i[r+o])/(e[o][r+1]-e[o-2][r+1]+n);return e[0][r+1]+(t-i[r+1])/(e[1][r+1]+n)},differenceMethodExperiments:function(t,e){var i,r,s,o,n,a,h,l,c,d,u,p=t.t_values,f=t.x_values,_=t.y_values,m=[],g=[],b=[],v=[],Z=[],C=[],y=[],P=[],E=0,O=[];for(n=p[1]-p[0],Z.push([]),C.push([]),y.push([]),P.push([]),s=_.length,i=0;i<s;i++)Z[0][i]=f[i],C[0][i]=_[i],y[0][i]=f[i],P[0][i]=_[i];for(Z.push([]),C.push([]),y.push([]),P.push([]),a=n,s=_.length-1,i=0;i<s;i++)m[i]=f[i+1]-f[i],g[i]=_[i+1]-_[i],b[i]=m[i],v[i]=g[i],Z[1][i]=m[i],C[1][i]=g[i],y[1][i]=a/m[i],P[1][i]=a/g[i];for(s--,o=Math.min(8,_.length-1),r=1;r<o;r++){for(Z.push([]),C.push([]),y.push([]),P.push([]),a*=n,i=0;i<s;i++)m[i]=m[i+1]-m[i],g[i]=g[i+1]-g[i],Z[r+1][i]=m[i],C[r+1][i]=g[i],y[r+1][i]=a/(y[r][i+1]-y[r][i])+y[r-1][i+1],P[r+1][i]=a/(P[r][i+1]-P[r][i])+P[r-1][i+1];if(!1===(u=this._criticalPoints(g,s,r))){console.log("Polynomial of degree",r),u=[];break}if(u.length>0&&++E>1&&r%2==0)break;s--}for(i=0;i<u.length;i++){for(l=-1/0,c=0;c<u[i].length;c++)(d=Math.abs(u[i][c].v))>l&&(l=d,h=c);h=Math.floor(u[i][h].i+r/2),O.push(this.getPointType(e,h,p,f,_,b,v,s+1))}return[O,Z,C,y,P]},getCenterOfCriticalInterval:function(t,e,i){var r,s,o,n,a,h=0,l=0,c=i[1]-i[0],d=[];for(r=-1/0,d=[],s=0;s<t.length;s++)(n=Math.abs(t[s].v))>r?(d=[s],r=n,o=s):r===n&&d.push(s);if(d.length>0&&(a=d.reduce((function(t,e){return t+e}),0)/d.length,o=Math.floor(a),a+=t[0].i),r<1/0){for(s=0;s<t.length;s++)h+=Math.abs(t[s].v)*t[s].i,l+=Math.abs(t[s].v);a=h/l}return a+=e/2,[t[o].i+e/2,a,i[Math.floor(a)]+c*(a-Math.floor(a))]},differenceMethod:function(t,e){var i,r,s,o,n,a,h,l,c,d,u=t.t_values,p=t.x_values,f=t.y_values,_=[],m=[],g=0,b=-1,v=-1,Z=[],C=[];for(s=f.length,_.push(new Float64Array(p)),m.push(new Float64Array(f)),s--,o=Math.min(12,s),r=0;r<o&&(_.push(new Float64Array(s)),m.push(new Float64Array(s)),_[r+1]=_[r].map((function(t,e,i){return i[e+1]-t})),m[r+1]=m[r].map((function(t,e,i){return i[e+1]-t})),!0===(l=this._criticalInterval(m[r+1],s,r)).smooth&&(v=r,Z=[]),h=this._criticalInterval(_[r+1],s,r),-1===b&&!0===h.smooth&&(b=r),!(v>=0));r++){if(l.groups.length>0&&++g>2&&(r+1)%2==0){Z=l.groups,d=l.types;break}s--}for(i=0;i<Z.length;i++)"interval"!==d[i]&&(a=this.getCenterOfCriticalInterval(Z[i],r+1,u),l[0],n=Math.floor(a[1]),c=a[2],C.push(this.getPointType(e,n,c,u,_,m,s+1)));return[C,_,m,b,v]},_insertPoint_v4:function(t,e,r,s){var o,n,a,h=null;t.points.length>0&&(h=t.points[t.points.length-1].scrCoords),o=new u.Z(i.Z.COORDS_BY_USER,e,t.board),null!==h&&(n=o.scrCoords[1]-h[1])*n+(a=o.scrCoords[2]-h[2])*a<.8*.8||(o._t=r,t.points.push(o))},getInterval:function(e,i,r){var s,o;return n.Z.disable(),s=n.Z.Interval(i,r),e.board.mathLib=n.Z,e.board.mathLibJXG=n.Z,e.X(s,!0),o=e.Y(s,!0),e.board.mathLib=Math,e.board.mathLibJXG=t.Z.Math,o},sign:function(t){return t<0?-1:t>0?1:0},handleBorder:function(t,e,i,s,o){var n,a,h,l,c,d,u,p,f,_,m,g,b=i.idx;if(g=e.t_values[1]-e.t_values[0],"borderleft"===i.type?h=(a=n=e.left_isNaN?e.left_t:i.t-g)+g:"borderright"===i.type?a=(h=n=e.right_isNaN?e.right_t:i.t+g)-g:console.log("No bordercase!!!"),0!==(_=this.findComponents(t,a,h,32)).length){for("borderleft"===i.type&&(a=_[0].left_t,h=_[0].t_values[0],g=_[0].t_values[1]-_[0].t_values[0],n=a=null===a?h-g:a,l=this.getInterval(t,a,h),r.Z.isObject(l)&&(u=l.lo,p=l.hi,c=t.X(n,!0),d=o[1][b]<0?p:u,this._insertPoint_v4(t,[1,c,d],n))),m=_[0].t_values.length,f=0;f<m;f++)n=_[0].t_values[f],c=_[0].x_values[f],d=_[0].y_values[f],this._insertPoint_v4(t,[1,c,d],n);"borderright"===i.type&&(a=_[0].t_values[m-1],h=_[0].right_t,g=_[0].t_values[1]-_[0].t_values[0],n=h=null===h?a+g:h,l=this.getInterval(t,a,h),r.Z.isObject(l)&&(u=l.lo,p=l.hi,c=t.X(n,!0),d=o[1][b]>0?p:u,this._insertPoint_v4(t,[1,c,d],n)))}},_seconditeration_v4:function(t,e,i,r,s){var o,n,a,h,l,c,d,u,p,f,_,m,g;for(n=e.t_values[i.idx-2],a=e.t_values[i.idx+2],l=this.findComponents(t,n,a,64),d=0;d<l.length;d++){for(c=l[d],u=(h=this.differenceMethod(c,t))[0],f=h[1],_=h[2],m=0,p=0;p<=u.length;p++){for(g=p===u.length?c.len:u[p].idx,o=m;o<g;o++)isNaN(c.x_values[o])||isNaN(c.y_values[o])||this._insertPoint_v4(t,[1,c.x_values[o],c.y_values[o]],c.t_values[o]);p<u.length&&(this.handleSingularity(t,c,u[p],f,_),m=u[p].idx+1)}g=c.len,d<l.length-1&&this._insertPoint_v4(t,[1,NaN,NaN],c.right_t)}return this},_recurse_v4:function(t,e,i,r,s,n,a,h){var l,c,d=.5*(e+i),u=t.X(d,!0),p=t.Y(d,!0);0!==h?(l=(u-r)*t.board.unitX,c=(p-s)*t.board.unitY,o.Z.hypot(l,c)>2?this._recurse_v4(t,e,d,r,s,u,p,h-1):this._insertPoint_v4(t,[1,u,p],d),l=(u-n)*t.board.unitX,c=(p-a)*t.board.unitY,o.Z.hypot(l,c)>2?this._recurse_v4(t,d,i,u,p,n,a,h-1):this._insertPoint_v4(t,[1,u,p],d)):this._insertPoint_v4(t,[1,NaN,NaN],d)},handleSingularity:function(t,e,i,s,o){var n,a,h,l,c,d,u,p,f,_,m,g=i.idx,b=100;n=i.t,console.log("HandleSingularity at t =",n),a=e.t_values[g-5],h=e.t_values[g+5],l=this.getInterval(t,a,h),r.Z.isObject(l)?(p=l.lo,f=l.hi):o[0][g-1]<o[0][g+1]?(p=o[0][g-1],f=o[0][g+1]):(p=o[0][g+1],f=o[0][g-1]),u=t.X(n,!0),_=(o[0][g-3]-o[0][g-5])/(e.t_values[g-3]-e.t_values[g-5]),m=(o[0][g+3]-o[0][g+5])/(e.t_values[g+3]-e.t_values[g+5]),console.log(":::",_,m),_<-100?(this._insertPoint_v4(t,[1,u,p],n,!0),m<=b&&this._insertPoint_v4(t,[1,NaN,NaN],n)):_>b?(this._insertPoint_v4(t,[1,u,f],n),m>=-100&&this._insertPoint_v4(t,[1,NaN,NaN],n)):(p===-1/0&&(this._insertPoint_v4(t,[1,u,p],n,!0),this._insertPoint_v4(t,[1,NaN,NaN],n)),f===1/0&&(this._insertPoint_v4(t,[1,NaN,NaN],n),this._insertPoint_v4(t,[1,u,f],n,!0)),i.t<e.t_values[g]?(c=g-1,d=g):(c=g,d=g+1),a=e.t_values[c],h=e.t_values[d],this._recurse_v4(t,a,h,s[0][c],o[0][c],s[0][d],o[0][d],10)),m<-100?this._insertPoint_v4(t,[1,u,f],n):m>b&&this._insertPoint_v4(t,[1,u,p],n)},steps:1021,criticalThreshold:1e3,plot_v4:function(t,e,i,s){var o,n,a,h,l,c,u,p,f,_,m,g,b,v,Z,C=(i-e)/s,y=function(e){return t.Y(e,!0)},P=function(e){return-t.Y(e,!0)},E=.5*C;for(a=this.findComponents(t,e,i,s),h=0;h<a.length;h++){for(l=a[h],c=(f=this.differenceMethod(l,t))[0],_=f[1],m=f[2],f[3],f[4],0!==c.length&&"borderleft"===c[0].type||c.unshift({idx:0,t:l.t_values[0],x:l.x_values[0],y:l.y_values[0],type:"borderleft"}),"borderright"!==c[c.length-1].type&&(n=l.t_values.length,c.push({idx:n-1,t:l.t_values[n-1],x:l.x_values[n-1],y:l.y_values[n-1],type:"borderright"})),p=0,u=0;u<=c.length;u++){for(n=u===c.length?l.len:c[u].idx-1,0,0,o=p;o<n-2;o++)this._insertPoint_v4(t,[1,l.x_values[o],l.y_values[o]],l.t_values[o]),Math.max(0,o-2),o>=p+3&&o<n-3&&m.length>3&&Math.abs(m[2][o])>.2*Math.abs(m[0][o])?(g=l.t_values[o],E=.25*C,Z=this.getInterval(t,g,g+C),r.Z.isObject(Z)?m[2][o]>0?this._insertPoint_v4(t,[1,g+E,Z.lo],g+E):this._insertPoint_v4(t,[1,g+C-E,Z.hi],g+C-E):(b=d.Z.fminbr(y,[g,g+C]))<(v=d.Z.fminbr(P,[g,g+C]))?(this._insertPoint_v4(t,[1,t.X(b,!0),t.Y(b,!0)],b),this._insertPoint_v4(t,[1,t.X(v,!0),t.Y(v,!0)],v)):(this._insertPoint_v4(t,[1,t.X(v,!0),t.Y(v,!0)],v),this._insertPoint_v4(t,[1,t.X(b,!0),t.Y(b,!0)],b))):0;u<c.length&&(o=c[u].idx,"borderleft"===c[u].type||"borderright"===c[u].type?this.handleBorder(t,l,c[u],_,m):this._seconditeration_v4(t,l,c[u],_,m),p=c[u].idx+1+1)}n=l.len,h<a.length-1&&this._insertPoint_v4(t,[1,NaN,NaN],l.right_t)}},updateParametricCurve_v4:function(t,e,i){var r,s,o,n;"x"===t.xterm?(o=.3*((n=t.board.getBoundingBox())[2]-n[0]),r=Math.max(e,n[0]-o),s=Math.min(i,n[2]+o)):(r=e,s=i),t.points=[],this.plot_v4(t,r,s,this.steps),t.numberPoints=t.points.length},updateParametricCurve:function(t,e,i){return this.updateParametricCurve_v2(t,e,i)}};var f=o.Z.Plot;o.Z.ImplicitPlot=function(t,e,i,s,n){var a={resolution_out:5,resolution_in:5,max_steps:1024,alpha_0:.05,tol_u0:o.Z.eps,tol_newton:1e-7,tol_cusp:.05,tol_progress:1e-4,qdt_box:.2,kappa_0:.2,delta_0:.05,h_initial:.1,h_critical:.001,h_max:1,loop_dist:.09,loop_dir:.99,loop_detection:!0,unitX:10,unitY:10};this.config=r.Z.merge(a,e),this.f=i,this.dfx=null,this.dfy=null,r.Z.isFunction(s)?this.dfx=s:this.dfx=function(t,e){var i=o.Z.eps*o.Z.eps;return.5*(this.f(t+i,e)-this.f(t-i,e))/i},r.Z.isFunction(n)?this.dfy=n:this.dfy=function(t,e){var i=o.Z.eps*o.Z.eps;return.5*(this.f(t,e+i)-this.f(t,e-i))/i},this.bbox=t,this.qdt=new c(20,5,t),this.components=[]},r.Z.extend(o.Z.ImplicitPlot.prototype,{plot:function(){var t,e,i,r,s,n,a,h=[],l=[],c=[],d=0,u=this,p=function(e){return u.f(t,e)},f=function(e){return-u.f(t,e)},_=function(t){return u.f(t,e)},m=function(t){return-u.f(t,e)};for(i=Math.min(this.bbox[0],this.bbox[2])-o.Z.eps,r=Math.max(this.bbox[0],this.bbox[2]),s=Math.min(this.bbox[1],this.bbox[3])+o.Z.eps,n=Math.max(this.bbox[1],this.bbox[3]),a=this.config.resolution_out/this.config.unitX,a*=1+o.Z.eps,t=i;t<r;t+=a)!1!==(c=this.searchLine(p,f,t,[s,n],"vertical",d,h,l))&&(h=c[0],l=c[1],d=c[2]);for(a=this.config.resolution_out/this.config.unitY,a*=1+o.Z.eps,e=s;e<n;e+=a)!1!==(c=this.searchLine(_,m,e,[i,r],"horizontal",d,h,l))&&(h=c[0],l=c[1],d=c[2]);return[h,l,d]},searchLine:function(t,e,i,s,n,a,h,l){var c,u,p,f,_,m,g,b,v,Z,C,y,P,E,O=this.config.tol_u0,x=s[0],S=s[1];if(_=t(c=d.Z.fminbr(t,[x,S])),m=t(u=d.Z.fminbr(e,[x,S])),_<O&&m>-O){if(g=c,c=Math.min(g,u),u=Math.max(g,u),f=t(p=d.Z.fzero(t,[c,u])),Math.abs(f)>Math.max((m-_)*o.Z.eps,.001))return!1;if("vertical"===n?(v=[1,i,p],E=this.config.resolution_in/this.config.unitY):(v=[1,p,i],E=this.config.resolution_in/this.config.unitX),E*=1+o.Z.eps,this.curveContainsPoint(v,h,l,2*E,this.config.qdt_box))false;else if((y=this.traceComponent(v,1)).length>0){for(a>0&&(h.push(NaN),l.push(NaN)),P=h.length,C=y[0].length,Z=1;Z<C;Z++)this.qdt.insertItem({xlb:Math.min(y[0][Z-1],y[0][Z]),xub:Math.max(y[0][Z-1],y[0][Z]),ylb:Math.min(y[1][Z-1],y[1][Z]),yub:Math.max(y[1][Z-1],y[1][Z]),idx1:P+Z-1,idx2:P+Z,comp:a});a++,r.Z.concat(h,y[0]),r.Z.concat(l,y[1])}return(b=p-.01*E)-x>E&&!1!==(y=this.searchLine(t,e,i,[x,b],n,a,h,l))&&(h=y[0],l=y[1],a=y[2]),S-(b=p+.01*E)>E&&!1!==(y=this.searchLine(t,e,i,[b,S],n,a,h,l))&&(h=y[0],l=y[1],a=y[2]),[h,l,a]}return!1},curveContainsPoint:function(t,e,i,r,s){var o,n,a,l=t[1],c=t[2];for(n=(a=this.qdt.find([l-s,c+s,l+s,c-s])).length,o=0;o<n;o++)if(h.Z.distPointSegment(t,[1,e[a[o].idx1],i[a[o].idx1]],[1,e[a[o].idx2],i[a[o].idx2]])<r)return!0;return!1},traceComponent:function(t){var e=[],i=[],r=[];return 0===(r=this.tracing(t,1)).length||(e=r[0],i=r[1]),r[2]||0===(r=this.tracing(t,-1)).length||(e=r[0].reverse().concat(e.slice(1)),i=r[1].reverse().concat(i.slice(1))),e.length<6&&(e.push(e[e.length-1]),i.push(i[i.length-1])),[e,i]},tracing:function(t,e){var i,r,s,n,a,l,c,d,u,p,f,_,m,g,b,v,Z,C=[],y=[],P=[],E=0,O=0,x=!1,S=!1,M=!1,w=this.config.kappa_0,T=this.config.delta_0,N=this.config.alpha_0,A=this.config.h_initial,D=this.config.max_steps,k=e,R=[],L=[],B=[];if(C=t.slice(1),R.push(C[0]),L.push(C[1]),!1===(i=this.tangent(C)))return[];this.dfx(C[0],C[1]),this.dfy(C[0],C[1]);do{if(!1===(i=this.tangent(C))){C=y.slice(),R.push(C[0]),L.push(C[1]);break}if(1===R.length)s=i.slice();else if(2===R.length)B.push(R.length-1);else if(S&&R.length>2&&!M){if(h.Z.distPointSegment([1,C[0],C[1]],[1,R[0],L[0]],[1,R[1],L[1]])<this.config.loop_dist*A&&o.Z.innerProduct(i,s,2)>this.config.loop_dir){C=t.slice(1),R.push(C[0]),L.push(C[1]),x=!0;break}if(this.config.loop_detection){for(g=R.length-1,b=Math.floor(o.Z.log2(g)),v=0;v<=b&&!(h.Z.distPointSegment([1,C[0],C[1]],[1,R[B[v]-1],L[B[v]-1]],[1,R[B[v]],L[B[v]]])<this.config.loop_dist*A&&(r=this.tangent([R[B[v]],L[B[v]]]),o.Z.innerProduct(i,r,2)>this.config.loop_dir));v++);if(v<=b){x=!0;break}for(b=1,Z=0,v=0;v<100&&(g+1)%b==0;v++)b*=2,Z++;B[Z]=g}}y[0]=C[0]+A*k*i[0],y[1]=C[1]+A*k*i[1],O=0;do{u=(n=[this.dfx(y[0],y[1]),this.dfy(y[0],y[1])])[0]*n[0]+n[1]*n[1],a=this.f(y[0],y[1])/u,P[0]=y[0]-n[0]*a,P[1]=y[1]-n[1]*a,0===O?c=Math.abs(a)*Math.sqrt(u):1===O&&(d=Math.abs(a)*Math.sqrt(u)),y[0]=P[0],y[1]=P[1],O++}while(O<20&&Math.abs(this.f(y[0],y[1]))>this.config.tol_newton);if(f=c,p=O>1?d/c:0,r=this.tangent(y),l=o.Z.innerProduct(i,r,2),l=Math.max(-1,Math.min(1,l)),_=Math.acos(l),M=!1,h.Z.distance(C,y,2)<this.config.tol_progress){C=y.slice(),R.push(C[0]),L.push(C[1]);break}if(l<0)if(A>this.config.h_critical);else{if(M=!0,!this.isBifurcation(C,this.config.tol_cusp)){C=y.slice(),R.push(C[0]),L.push(C[1]);break}k*=-1,_=0}if(!M&&(m=Math.max(Math.sqrt(p/w),Math.sqrt(f/T),_/N),isNaN(m)&&(m=1),A/=m=Math.max(Math.min(m,2),.5),A=Math.min(this.config.h_max,A),m>=2)){if(++E>=3*D)break;S=!1}else C=y.slice(),R.push(C[0]),L.push(C[1]),S=!0,E++}while(E<D&&C[0]>=this.bbox[0]&&C[1]<=this.bbox[1]&&C[0]<=this.bbox[2]&&C[1]>=this.bbox[3]);return[R,L,x]},isBifurcation:function(t,e){var i,r,s,n,a,h,l,c,d,u,p=o.Z.eps*o.Z.eps*100;return i=t[0],r=t[1],s=.5*(this.dfx(i+p,r)-this.dfx(i-p,r))/p,n=.5*(this.dfx(i,r+p)-this.dfx(i,r-p))/p,a=.5*(this.dfy(i+p,r)-this.dfy(i-p,r))/p,u=(l=s+(h=.5*(this.dfy(i,r+p)-this.dfy(i,r-p))/p))*l-4*(s*h-n*a),c=.5*(l+Math.sqrt(u)),d=.5*(l-Math.sqrt(u)),Math.abs(c)>e&&Math.abs(d)>e},handleCriticalPoint:function(t,e,i,r){var s,o=Math.atan2(r*e[1],r*e[0]);return s=d.Z.root((function(e){var r=t[0]+i*Math.cos(e),s=t[1]+i*Math.sin(e);return this.f(r,s)}),o),[t[0]+i*Math.cos(s),t[1]+i*Math.sin(s)]},updateA:function(t,e,i){var r,s,o=[i[0]-e[0],i[1]-e[1]],n=this.f(i[0],i[1])-this.f(e[0],e[1]);return s=o[0]*o[0]+o[1]*o[1],r=n-(t[0]*o[0]+t[1]*o[1]),r/=s,t[0]+=r*o[0],t[1]+=r*o[1],t},tangent_A:function(t){var e=[-t[1],t[0]],i=o.Z.norm(e,2);return o.Z.eps,[e[0]/i,e[1]/i]},tangent:function(t){var e=[-this.dfy(t[0],t[1]),this.dfx(t[0],t[1])],i=o.Z.norm(e,2);return!(i<o.Z.eps*o.Z.eps)&&[e[0]/i,e[1]/i]}});var _=o.Z.ImplicitPlot;o.Z.Metapost={MP_ENDPOINT:0,MP_EXPLICIT:1,MP_GIVEN:2,MP_CURL:3,MP_OPEN:4,MP_END_CYCLE:5,UNITY:1,FRACTION_ONE:1,FRACTION_THREE:3,ONE_EIGHTY_DEG:Math.PI,THREE_SIXTY_DEG:2*Math.PI,EPS_SQ:1e-5*1e-5,make_choices:function(t){var e,i,r,s,o,n,a,h,l,c,d,u,p,f,_;a=t[0];do{if(!a)break;n=a.next,a.rtype>this.MP_EXPLICIT&&(a.x-n.x)*(a.x-n.x)+(a.y-n.y)*(a.y-n.y)<this.EPS_SQ&&(a.rtype=this.MP_EXPLICIT,a.ltype===this.MP_OPEN&&(a.ltype=this.MP_CURL,a.set_left_curl(this.UNITY)),n.ltype=this.MP_EXPLICIT,n.rtype===this.MP_OPEN&&(n.rtype=this.MP_CURL,n.set_right_curl(this.UNITY)),a.rx=a.x,n.lx=a.x,a.ry=a.y,n.ly=a.y),a=n}while(a!==t[0]);for(i=t[0];i.ltype===this.MP_OPEN&&i.rtype===this.MP_OPEN;)if((i=i.next)===t[0]){i.ltype=this.MP_END_CYCLE;break}for(a=i;a;){if(n=a.next,a.rtype>=this.MP_GIVEN){for(;n.ltype===this.MP_OPEN&&n.rtype===this.MP_OPEN;)n=n.next;for(r=0,h=a,o=t.length,u=[],p=[],f=[],_=[null];c=h.next,u.push(c.x-h.x),p.push(c.y-h.y),f.push(this.mp_pyth_add(u[r],p[r])),r>0&&(d=p[r-1]/f[r-1],l=u[r-1]/f[r-1],_.push(Math.atan2(p[r]*l-u[r]*d,u[r]*l+p[r]*d))),r++,(h=c)===n&&(o=r),!(r>=o&&h.ltype!==this.MP_END_CYCLE););r===o?_.push(0):_.push(_[1]),n.ltype===this.MP_OPEN&&((s=n.rx-n.x)*s+(e=n.ry-n.y)*e<this.EPS_SQ?(n.ltype=this.MP_CURL,n.set_left_curl(this.UNITY)):(n.ltype=this.MP_GIVEN,n.set_left_given(Math.atan2(e,s)))),a.rtype===this.MP_OPEN&&a.ltype===this.MP_EXPLICIT&&((s=a.x-a.lx)*s+(e=a.y-a.ly)*e<this.EPS_SQ?(a.rtype=this.MP_CURL,a.set_right_curl(this.UNITY)):(a.rtype=this.MP_GIVEN,a.set_right_given(Math.atan2(e,s)))),this.mp_solve_choices(a,n,o,u,p,f,_)}else a.rtype===this.MP_ENDPOINT&&(a.rx=a.x,a.ry=a.y,n.lx=n.x,n.ly=n.y);if((a=n)===i)break}},mp_solve_choices:function(t,e,i,r,s,o,n){var a,h,l,c,d,u,p,f,_,m,g,b,v,Z,C,y,P,E,O,x,S,M,w,T,N,A;for(d=o.length+1,m=new Array(d),_=new Array(d),l=new Array(d),C=new Array(d),N=0;N<d;N++)C[N]=l[N]=_[N]=m[N]=0;for(p=0,f=t,b=0;;){if(v=f.next,0===p)if(f.rtype===this.MP_GIVEN){if(v.ltype===this.MP_GIVEN)return a=Math.atan2(s[0],r[0]),x=(O=this.mp_n_sin_cos(t.right_given()-a))[0],S=O[1],w=(M=this.mp_n_sin_cos(e.left_given()-a))[0],T=M[1],void this.mp_set_controls(t,e,r[0],s[0],S,x,-T,w);l[0]=f.right_given()-Math.atan2(s[0],r[0]),l[0]=this.reduce_angle(l[0]),m[0]=0,_[0]=0}else if(f.rtype===this.MP_CURL){if(v.ltype===this.MP_CURL)return t.rtype=this.MP_EXPLICIT,e.ltype=this.MP_EXPLICIT,g=Math.abs(e.left_tension()),y=Math.abs(t.right_tension()),Z=this.UNITY/(3*y),t.rx=t.x+r[0]*Z,t.ry=t.y+s[0]*Z,Z=this.UNITY/(3*g),e.lx=e.x-r[0]*Z,void(e.ly=e.y-s[0]*Z);E=f.right_curl(),g=Math.abs(v.left_tension()),y=Math.abs(f.right_tension()),m[0]=this.mp_curl_ratio(E,y,g),l[0]=-n[1]*m[0],_[0]=0}else f.rtype===this.MP_OPEN&&(m[0]=0,l[0]=0,_[0]=this.FRACTION_ONE);else if(f.ltype===this.MP_END_CYCLE||f.ltype===this.MP_OPEN){if(a=this.UNITY/(3*Math.abs(b.right_tension())-this.UNITY),P=o[p]*(this.FRACTION_THREE-this.UNITY/Math.abs(b.right_tension())),c=this.UNITY/(3*Math.abs(v.left_tension())-this.UNITY),u=o[p-1]*(this.FRACTION_THREE-this.UNITY/Math.abs(v.left_tension())),P*=E=this.FRACTION_ONE-m[p-1]*a,(g=Math.abs(f.left_tension()))<(y=Math.abs(f.right_tension()))?P*=Math.pow(g/y,2):g>y&&(u*=Math.pow(y/g,2)),Z=u/(u+P),m[p]=Z*c,h=-n[p+1]*m[p],b.rtype===this.MP_CURL?(_[p]=0,l[p]=h-n[1]*(this.FRACTION_ONE-Z)):(Z=(this.FRACTION_ONE-Z)/E,h-=n[p]*Z,Z*=a,l[p]=h-l[p-1]*Z,_[p]=-_[p-1]*Z),f.ltype===this.MP_END_CYCLE){for(a=0,c=this.FRACTION_ONE;0===(p-=1)&&(p=i),a=l[p]-a*m[p],c=_[p]-c*m[p],p!==i;);for(a/=this.FRACTION_ONE-c,C[i]=a,l[0]=a,A=1;A<i;A++)l[A]=l[A]+a*_[A];break}}else{if(f.ltype===this.MP_CURL){E=f.left_curl(),g=Math.abs(f.left_tension()),y=Math.abs(b.right_tension()),Z=this.mp_curl_ratio(E,g,y),C[i]=-l[i-1]*Z/(this.FRACTION_ONE-Z*m[i-1]);break}if(f.ltype===this.MP_GIVEN){C[i]=f.left_given()-Math.atan2(s[i-1],r[i-1]),C[i]=this.reduce_angle(C[i]);break}}b=f,f=v,p+=1}for(p=i-1;p>-1;p--)C[p]=l[p]-C[p+1]*m[p];for(f=t,p=0;v=f.next,x=(O=this.mp_n_sin_cos(C[p]))[0],S=O[1],w=(M=this.mp_n_sin_cos(-n[p+1]-C[p+1]))[0],T=M[1],this.mp_set_controls(f,v,r[p],s[p],S,x,T,w),f=v,++p!==i;);},mp_n_sin_cos:function(t){return[Math.cos(t),Math.sin(t)]},mp_set_controls:function(t,e,i,r,s,o,n,a){var h,l,c,d,u;c=Math.abs(e.left_tension()),h=Math.abs(t.right_tension()),u=this.mp_velocity(s,o,n,a,h),l=this.mp_velocity(n,a,s,o,c),(t.right_tension()<0||e.left_tension()<0)&&(s>=0&&n>=0||s<=0&&n<=0)&&(d=Math.abs(s)*a+Math.abs(n)*o)>0&&(d*=1.00024414062,t.right_tension()<0&&this.mp_ab_vs_cd(Math.abs(n),this.FRACTION_ONE,u,d)<0&&(u=Math.abs(n)/d),e.left_tension()<0&&this.mp_ab_vs_cd(Math.abs(s),this.FRACTION_ONE,l,d)<0&&(l=Math.abs(s)/d)),t.rx=t.x+(i*o-r*s)*u,t.ry=t.y+(r*o+i*s)*u,e.lx=e.x-(i*a+r*n)*l,e.ly=e.y-(r*a-i*n)*l,t.rtype=this.MP_EXPLICIT,e.ltype=this.MP_EXPLICIT},mp_pyth_add:function(t,e){return o.Z.hypot(t,e)},mp_curl_ratio:function(t,e,i){var r=1/e,s=1/i;return Math.min(4,((3-r)*r*r*t+s*s*s)/(r*r*r*t+(3-s)*s*s))},mp_ab_vs_cd:function(t,e,i,r){return t*e==i*r?0:t*e>i*r?1:-1},mp_velocity:function(t,e,i,r,s){return Math.min(4,(2+Math.sqrt(2)*(t-i/16)*(i-t/16)*(e-r))/(1.5*s*(2+(Math.sqrt(5)-1)*e+(3-Math.sqrt(5))*r)))},reduce_angle:function(t){return Math.abs(t)>this.ONE_EIGHTY_DEG&&(t>0?t-=this.THREE_SIXTY_DEG:t+=this.THREE_SIXTY_DEG),t},makeknots:function(t,e){var i,r,s=[];for(r=t.length,i=0;i<r;i++)s.push({x:t[i][0],y:t[i][1],ltype:this.MP_OPEN,rtype:this.MP_OPEN,lx:!1,rx:!1,ly:e,ry:e,left_curl:function(){return this.lx||0},right_curl:function(){return this.rx||0},left_tension:function(){return this.ly||1},right_tension:function(){return this.ry||1},set_right_curl:function(t){this.rx=t||0},set_left_curl:function(t){this.lx=t||0}});for(r=s.length,i=0;i<r;i++)s[i].next=s[i+1]||s[i],s[i].set_right_given=s[i].set_right_curl,s[i].set_left_given=s[i].set_left_curl,s[i].right_given=s[i].right_curl,s[i].left_given=s[i].left_curl;return s[r-1].next=s[0],s},curve:function(t,e){var i,s,o,n,a,h,l=!1,c=[],d=[];for(n in a=1,(e=e||{tension:1,direction:{},curl:{},isClosed:!1}).hasOwnProperty("tension")&&(a=r.Z.evaluate(e.tension)),s=(i=this.makeknots(t,a)).length,r.Z.exists(e.isClosed)&&r.Z.evaluate(e.isClosed)&&(l=!0),l||(i[0].ltype=this.MP_ENDPOINT,i[0].rtype=this.MP_CURL,i[s-1].rtype=this.MP_ENDPOINT,i[s-1].ltype=this.MP_CURL),e)if(e.hasOwnProperty(n)){if(o=parseInt(n,10),isNaN(o)||o<0||o>=s)continue;if(h=e[o],r.Z.exists(h.type)&&"curl"===h.type)a=r.Z.evaluate(h.curl),0===o?(i[o].rtype=this.MP_CURL,i[o].set_right_curl(a)):o===s-1?(i[o].ltype=this.MP_CURL,i[o].set_left_curl(a)):(i[o].ltype=this.MP_CURL,i[o].rtype=this.MP_CURL,i[o].lx=a,i[o].rx=a);r.Z.exists(h.direction)&&(a=r.Z.evaluate(h.direction),r.Z.isArray(a)?(!1!==a[0]&&(i[o].lx=a[0]*Math.PI/180,i[o].ltype=this.MP_GIVEN),!1!==a[1]&&(i[o].rx=a[1]*Math.PI/180,i[o].rtype=this.MP_GIVEN)):(i[o].lx=a*Math.PI/180,i[o].rx=a*Math.PI/180,i[o].ltype=i[o].rtype=this.MP_GIVEN)),r.Z.exists(h.tension)&&(a=r.Z.evaluate(h.tension),r.Z.isArray(a)?(!1!==a[0]&&(i[o].ly=r.Z.evaluate(a[0])),!1!==a[1]&&(i[o].ry=r.Z.evaluate(a[1]))):(i[o].ly=a,i[o].ry=a))}for(this.make_choices(i),o=0;o<s-1;o++)c.push(i[o].x),c.push(i[o].rx),c.push(i[o+1].lx),d.push(i[o].y),d.push(i[o].ry),d.push(i[o+1].ly);return c.push(i[s-1].x),d.push(i[s-1].y),l&&(c.push(i[s-1].rx),d.push(i[s-1].ry),c.push(i[0].lx),d.push(i[0].ly),c.push(i[0].x),d.push(i[0].y)),[c,d]}};var m=o.Z.Metapost,g=[0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,8,136,72,200,40,168,104,232,24,152,88,216,56,184,120,248,4,132,68,196,36,164,100,228,20,148,84,212,52,180,116,244,12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254,1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241,9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249,5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245,13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253,3,131,67,195,35,163,99,227,19,147,83,211,51,179,115,243,11,139,75,203,43,171,107,235,27,155,91,219,59,187,123,251,7,135,71,199,39,167,103,231,23,151,87,215,55,183,119,247,15,143,79,207,47,175,111,239,31,159,95,223,63,191,127,255],b=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],v=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,99,99],Z=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],C=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],y=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];t.Z.Util=t.Z.Util||{},t.Z.Util.Unzip=function(e){var i,r,s,o,n=[],a=0,h=[],l=new Array(32768),c=0,d=!1,u=e.length,p=0,f=1,_=new Array(288),m=new Array(32),P=0,E=null,O=0,x=new Array(17),S=[];function M(){return p<u?e[p++]:-1}function w(){f=1}function T(){var t;try{t=1&f,0===(f>>=1)&&(t=1&(f=M()),f=f>>1|128)}catch(t){throw console.log("Probably problems on iOS7 with >>"),t}return t}function N(t){var e=0,i=t;try{for(;i--;)e=e<<1|T();t&&(e=g[e]>>8-t)}catch(t){throw console.log("Probably problems on iOS7 with >>"),t}return e}function A(){c=0}function D(t){l[c++]=t,n.push(String.fromCharCode(t)),32768===c&&(c=0)}function k(){this.b0=0,this.b1=0,this.jump=null,this.jumppos=-1}function R(){for(;;){if(x[O]>=o)return-1;if(s[x[O]]===O)return x[O]++;x[O]++}}function L(){var t,e=E[P];if(17===O)return-1;if(P++,O++,(t=R())>=0)e.b0=t;else if(e.b0=32768,L())return-1;if((t=R())>=0)e.b1=t,e.jump=null;else if(e.b1=32768,e.jump=E[P],e.jumppos=P,L())return-1;return O--,0}function B(t,e,i,r){var n;for(E=t,P=0,s=i,o=e,n=0;n<17;n++)x[n]=0;return O=0,L()?-1:0}function I(t){for(var e,i,r=0,s=t[r];;)if(T()){if(!(32768&s.b1))return s.b1;for(s=s.jump,e=t.length,i=0;i<e;i++)if(t[i]===s){r=i;break}}else{if(!(32768&s.b0))return s.b0;s=t[++r]}}function Y(){var e,i,r,s,o,n,a,h,d,u,p,f,P,E,O;do{if(e=T(),0===(i=N(2)))for(w(),d=M(),d|=M()<<8,p=M(),65535&(d^~(p|=M()<<8))&&t.Z.debug("BlockLen checksum mismatch\n");d--;)D(M());else if(1===i)for(;;)if((s=g[N(7)]>>1)>23?(s=s<<1|T())>199?s=(s-=128)<<1|T():(s-=48)>143&&(s+=136):s+=256,s<256)D(s);else{if(256===s)break;for(h=N(v[s-=257])+b[s],s=g[N(5)]>>3,C[s]>8?(u=N(8),u|=N(C[s]-8)<<8):u=N(C[s]),u+=Z[s],s=0;s<h;s++)D(l[c-u&32767])}else if(2===i){for(n=new Array(320),P=257+N(5),E=1+N(5),O=4+N(4),s=0;s<19;s++)n[s]=0;for(s=0;s<O;s++)n[y[s]]=N(3);for(h=m.length,r=0;r<h;r++)m[r]=new k;if(B(m,19,n))return A(),1;for(f=P+E,r=0;r<f;)if((s=I(m))<16)n[r++]=s;else if(16===s){if(r+(s=3+N(2))>f)return A(),1;for(o=r?n[r-1]:0;s--;)n[r++]=o}else{if(r+(s=17===s?3+N(3):11+N(7))>f)return A(),1;for(;s--;)n[r++]=0}for(h=_.length,r=0;r<h;r++)_[r]=new k;if(B(_,P,n))return A(),1;for(h=_.length,r=0;r<h;r++)m[r]=new k;for(a=[],r=P;r<n.length;r++)a[r-P]=n[r];if(B(m,E,a))return A(),1;for(;;)if((s=I(_))>=256){if(0===(s-=256))break;for(h=N(v[s-=1])+b[s],s=I(m),C[s]>8?(u=N(8),u|=N(C[s]-8)<<8):u=N(C[s]),u+=Z[s];h--;)D(l[c-u&32767])}else D(s)}}while(!e);return A(),w(),0}function j(){var t,e,s,o,l,c=[];try{if(n=[],d=!1,c[0]=M(),c[1]=M(),120===c[0]&&218===c[1]&&(Y(),h[a]=[n.join(""),"geonext.gxt"],a++),31===c[0]&&139===c[1]&&(X(),h[a]=[n.join(""),"file"],a++),80===c[0]&&75===c[1]){if(d=!0,c[2]=M(),c[3]=M(),3===c[2]&&4===c[3]){for(c[0]=M(),c[1]=M(),i=M(),i|=M()<<8,l=M(),l|=M()<<8,M(),M(),M(),M(),M(),M()<<8,M()<<16,M()<<24,M(),M()<<8,M()<<16,M()<<24,M(),M()<<8,M()<<16,M()<<24,o=M(),o|=M()<<8,s=M(),s|=M()<<8,t=0,S=[];o--;)"/"===(e=M())|":"===e?t=0:t<255&&(S[t++]=String.fromCharCode(e));for(r||(r=S),t=0;t<s;)e=M(),t++;if(8===l&&(Y(),h[a]=new Array(2),h[a][0]=n.join(""),h[a][1]=S.join(""),a++),X())return!1}return!0}}catch(t){throw console.log("Probably problems on iOS7 with >>"),t}return!1}function X(){var t,e,r=[];if(8&i&&(r[0]=M(),r[1]=M(),r[2]=M(),r[3]=M(),80===r[0]&&75===r[1]&&7===r[2]&&8===r[3]?(M(),M()<<8,M()<<16,M()<<24):r[0]|r[1]<<8|r[2]<<16|r[3]<<24,M(),M()<<8,M()<<16,M()<<24,M(),M()<<8,M()<<16,M()<<24),d&&j())return!1;if(r[0]=M(),8!==r[0])return!0;if(i=M(),M(),M(),M(),M(),M(),M(),4&i)for(r[0]=M(),r[2]=M(),O=r[0]+256*r[1],t=0;t<O;t++)M();if(8&i)for(t=0,S=[],e=M();e;)"7"!==e&&":"!==e||(t=0),t<255&&(S[t++]=e),e=M();if(16&i)for(e=M();e;)e=M();return 2&i&&(M(),M()),Y(),M(),M()<<8,M()<<16,M()<<24,M(),M()<<8,M()<<16,M()<<24,d&&j(),!1}x[0]=0,t.Z.Util.Unzip.prototype.unzipFile=function(t){var e;for(this.unzip(),e=0;e<h.length;e++)if(h[e][1]===t)return h[e][0];return""},t.Z.Util.Unzip.prototype.unzip=function(){return j(),h}};var P=t.Z.Util,E=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8,0,12,24,36,60,96,84,12,12,12,48,72,12,12,12,12,12,12,12,12,12,12,12,12,12,0,12,12,12,12,12,0,12,0,12,12,12,24,12,12,12,12,12,24,12,24,12,12,12,12,12,12,12,12,12,24,12,12,12,12,12,24,12,12,12,12,12,12,12,24,12,12,12,12,12,12,12,12,12,36,12,36,12,12,12,36,12,12,12,12,12,36,12,36,12,12,12,36,12,12,12,12,12,12,12,12,12,12];t.Z.Util=t.Z.Util||{},t.Z.Util.UTF8={encode:function(t){var e,i,r="",s=t.length;if(t=t.replace(/\r\n/g,"\n"),"function"==typeof unescape&&"function"==typeof encodeURIComponent)return unescape(encodeURIComponent(t));for(e=0;e<s;e++)(i=t.charCodeAt(e))<128?r+=String.fromCharCode(i):i>127&&i<2048?(r+=String.fromCharCode(i>>6|192),r+=String.fromCharCode(63&i|128)):(r+=String.fromCharCode(i>>12|224),r+=String.fromCharCode(i>>6&63|128),r+=String.fromCharCode(63&i|128));return r},decode:function(t){var e,i,r,s=0,o=0,n=0,a=[],h=t.length,l=[];for(e=0;e<h;e++)i=t.charCodeAt(e),r=E[i],o=0!==n?63&i|o<<6:255>>r&i,0===(n=E[256+n+r])&&(o>65535?a.push(55232+(o>>10),56320+(1023&o)):a.push(o),++s%1e4==0&&(l.push(String.fromCharCode.apply(null,a)),a=[]));return l.push(String.fromCharCode.apply(null,a)),l.join("")},asciiCharCodeAt:function(t,e){var i=t.charCodeAt(e);if(i>255)switch(i){case 8364:i=128;break;case 8218:i=130;break;case 402:i=131;break;case 8222:i=132;break;case 8230:i=133;break;case 8224:i=134;break;case 8225:i=135;break;case 710:i=136;break;case 8240:i=137;break;case 352:i=138;break;case 8249:i=139;break;case 338:i=140;break;case 381:i=142;break;case 8216:i=145;break;case 8217:i=146;break;case 8220:i=147;break;case 8221:i=148;break;case 8226:i=149;break;case 8211:i=150;break;case 8212:i=151;break;case 732:i=152;break;case 8482:i=153;break;case 353:i=154;break;case 8250:i=155;break;case 339:i=156;break;case 382:i=158;break;case 376:i=159}return i}};var O=t.Z.Util.UTF8,x="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",S="=";t.Z.Util=t.Z.Util||{},t.Z.Util.Base64={_getByte:function(t,e){return 255&t.charCodeAt(e)},_getIndex:function(t,e){return x.indexOf(t.charAt(e))},encode:function(t){var e,i,r,s,o,n=[];for(s=(r=(o=O.encode(t)).length)%3,e=0;e<r-s;e+=3)i=this._getByte(o,e)<<16|this._getByte(o,e+1)<<8|this._getByte(o,e+2),n.push(x.charAt(i>>18),x.charAt(i>>12&63),x.charAt(i>>6&63),x.charAt(63&i));switch(s){case 1:i=this._getByte(o,r-1),n.push(x.charAt(i>>2),x.charAt(i<<4&63),S,S);break;case 2:i=this._getByte(o,r-2)<<8|this._getByte(o,r-1),n.push(x.charAt(i>>10),x.charAt(i>>4&63),x.charAt(i<<2&63),S)}return n.join("")},decode:function(t,e){var i,r,s,o,n,a,h=[],l=[];if((s=(i=t.replace(/[^A-Za-z0-9+/=]/g,"")).length)%4!=0)throw new Error("JSXGraph/utils/base64: Can't decode string (invalid input length).");for(i.charAt(s-1)===S&&(o=1,i.charAt(s-2)===S&&(o=2),s-=4),r=0;r<s;r+=4)n=this._getIndex(i,r)<<18|this._getIndex(i,r+1)<<12|this._getIndex(i,r+2)<<6|this._getIndex(i,r+3),l.push(n>>16,n>>8&255,255&n),r%1e4==0&&(h.push(String.fromCharCode.apply(null,l)),l=[]);switch(o){case 1:n=this._getIndex(i,s)<<12|this._getIndex(i,s+1)<<6|this._getIndex(i,s+2),l.push(n>>10,n>>2&255);break;case 2:n=this._getIndex(i,r)<<6|this._getIndex(i,r+1),l.push(n>>4)}return h.push(String.fromCharCode.apply(null,l)),a=h.join(""),e&&(a=O.decode(a)),a},decodeAsArray:function(t){var e,i=this.decode(t),r=[],s=i.length;for(e=0;e<s;e++)r[e]=i.charCodeAt(e);return r}};var M=t.Z.Util.Base64;t.Z.Server={modules:{},runningCalls:{},handleError:function(e){t.Z.debug("error occured, server says: "+e.message)},callServer:function(e,i,s,o){var n,a,h,l,c,d;o=o||!1,c=r.Z.toJSON(s);do{l=e+Math.floor(4096*Math.random())}while(r.Z.exists(this.runningCalls[l]));return this.runningCalls[l]={action:e},r.Z.exists(s.module)&&(this.runningCalls[l].module=s.module),n=t.Z.serverBase+"JXGServer.py",a="action="+escape(e)+"&id="+l+"&dataJSON="+escape(M.encode(c)),this.cbp=function(t){var e,s,o,n,a,h,l,c;if(e=new P.Unzip(M.decodeAsArray(t)).unzip(),r.Z.isArray(e)&&e.length>0&&(e=e[0][0]),r.Z.exists(e))if("error"===(s=window.JSON&&window.JSON.parse?window.JSON.parse(e):new Function("return "+e)()).type)this.handleError(s);else if("response"===s.type){for(h=s.id,l=0;l<s.fields.length;l++)n=(o=s.fields[l]).namespace+("object"==typeof new Function("return "+o.namespace)()?".":".prototype.")+o.name+" = "+o.value,new Function(n)();for(l=0;l<s.handler.length;l++){for(o=s.handler[l],a=[],c=0;c<o.parameters.length;c++)a[c]='"'+o.parameters[c]+'": '+o.parameters[c];n="if(typeof JXG.Server.modules."+this.runningCalls[h].module+' == "undefined")JXG.Server.modules.'+this.runningCalls[h].module+" = {};",n+="JXG.Server.modules."+this.runningCalls[h].module+"."+o.name+"_cb = "+o.callback+";",n+="JXG.Server.modules."+this.runningCalls[h].module+"."+o.name+" = function ("+o.parameters.join(",")+', __JXGSERVER_CB__, __JXGSERVER_SYNC) {if(typeof __JXGSERVER_CB__ == "undefined") __JXGSERVER_CB__ = JXG.Server.modules.'+this.runningCalls[h].module+"."+o.name+"_cb;var __JXGSERVER_PAR__ = {"+a.join(",")+', "module": "'+this.runningCalls[h].module+'", "handler": "'+o.name+'" };JXG.Server.callServer("exec", __JXGSERVER_CB__, __JXGSERVER_PAR__, __JXGSERVER_SYNC);};',new Function(n)()}delete this.runningCalls[h],i(s.data)}},this.cb=t.Z.bind(this.cbp,this),window.XMLHttpRequest?(h=new XMLHttpRequest).overrideMimeType("text/plain; charset=iso-8859-1"):h=new ActiveXObject("Microsoft.XMLHTTP"),!(!h||(h.open("POST",n,!o),h.setRequestHeader("Content-type","application/x-www-form-urlencoded"),o||(h.onreadystatechange=(d=this.cb,function(){return 4===h.readyState&&200===h.status&&(d(h.responseText),!0)})),h.send(a),!o))&&(this.cb(h.responseText),!0)},loadModule_cb:function(e){var i;for(i=0;i<e.length;i++)t.Z.debug(e[i].name+": "+e[i].value)},loadModule:function(e){return t.Z.Server.callServer("load",t.Z.Server.loadModule_cb,{module:e},!0)}},t.Z.Server.load=t.Z.Server.loadModule;var w,T=t.Z.Server;o.Z.Symbolic={generateSymbolicCoordinatesPartial:function(t,e,i,s){var o,n,a,h=e.ancestors,l=0,c=function(t){return"underscore"===s?i+"_{"+t+"}":"brace"===s?i+"["+t+"]":i+t};for(n in t.listOfFreePoints=[],t.listOfDependantPoints=[],h)if(h.hasOwnProperty(n)&&(o=0,r.Z.isPoint(h[n]))){for(a in h[n].ancestors)h[n].ancestors.hasOwnProperty(a)&&o++;0===o?(h[n].symbolic.x=h[n].coords.usrCoords[1],h[n].symbolic.y=h[n].coords.usrCoords[2],t.listOfFreePoints.push(h[n])):(l+=1,h[n].symbolic.x=c(l),l+=1,h[n].symbolic.y=c(l),t.listOfDependantPoints.push(h[n]))}return r.Z.isPoint(e)&&(e.symbolic.x="x",e.symbolic.y="y"),l},clearSymbolicCoordinates:function(t){var e=function(t){var e,i=t&&t.length||0;for(e=0;e<i;e++)r.Z.isPoint(t[e])&&(t[e].symbolic.x="",t[e].symbolic.y="")};e(t.listOfFreePoints),e(t.listOfDependantPoints),delete t.listOfFreePoints,delete t.listOfDependantPoints},generatePolynomials:function(t,e,i){var s,o,n,a,h=e.ancestors,l=[],c=[];for(s in i&&this.generateSymbolicCoordinatesPartial(t,e,"u","brace"),h[e.id]=e,h)if(h.hasOwnProperty(s)&&(a=0,l=[],r.Z.isPoint(h[s]))){for(o in h[s].ancestors)h[s].ancestors.hasOwnProperty(o)&&a++;if(a>0)for(l=h[s].generatePolynomial(),n=0;n<l.length;n++)c.push(l[n])}return i&&this.clearSymbolicCoordinates(t),c},geometricLocusByGroebnerBase:function(t,e){var s,n,a,l,c,d,p,f,_,m,g,b,v=t.options.locus,Z={},C=this.generateSymbolicCoordinatesPartial(t,e,"u","brace"),y=new u.Z(i.Z.COORDS_BY_USR,[0,0],t),P=new u.Z(i.Z.COORDS_BY_USR,[t.canvasWidth,t.canvasHeight],t),E=1,O=0,x=0,S=0;if(T.modules.geoloci===w&&T.loadModule("geoloci"),T.modules.geoloci===w)throw new Error("JSXGraph: Unable to load JXG.Server module 'geoloci.py'.");if(d=y.usrCoords[1],p=P.usrCoords[1],f=P.usrCoords[2],_=y.usrCoords[2],v.translateToOrigin&&t.listOfFreePoints.length>0){for(O=(a=v.toOrigin!==w&&null!==v.toOrigin&&r.Z.isInArray(t.listOfFreePoints,v.toOrigin.id)?v.toOrigin:t.listOfFreePoints[0]).symbolic.x,x=a.symbolic.y,c=0;c<t.listOfFreePoints.length;c++)t.listOfFreePoints[c].symbolic.x-=O,t.listOfFreePoints[c].symbolic.y-=x;if(d-=O,p-=O,f-=x,_-=x,v.translateTo10&&t.listOfFreePoints.length>1){for(l=v.to10!==w&&null!==v.to10&&v.to10.id!==v.toOrigin.id&&r.Z.isInArray(t.listOfFreePoints,v.to10.id)?v.to10:t.listOfFreePoints[0].id===a.id?t.listOfFreePoints[1]:t.listOfFreePoints[0],S=h.Z.rad([1,0],[0,0],[l.symbolic.x,l.symbolic.y]),m=Math.cos(-S),g=Math.sin(-S),c=0;c<t.listOfFreePoints.length;c++)b=t.listOfFreePoints[c].symbolic.x,t.listOfFreePoints[c].symbolic.x=m*t.listOfFreePoints[c].symbolic.x-g*t.listOfFreePoints[c].symbolic.y,t.listOfFreePoints[c].symbolic.y=g*b+m*t.listOfFreePoints[c].symbolic.y;if(l.symbolic.y=0,b=d,d=m*d-g*f,f=g*b+m*f,b=p,p=m*p-g*_,_=g*b+m*_,v.stretch&&Math.abs(l.symbolic.x)>o.Z.eps){for(E=l.symbolic.x,c=0;c<t.listOfFreePoints.length;c++)t.listOfFreePoints[c].symbolic.x/=E,t.listOfFreePoints[c].symbolic.y/=E;for(c=0;c<t.objectsList.length;c++)t.objectsList[c].elementClass===i.Z.OBJECT_CLASS_CIRCLE&&"pointRadius"===t.objectsList[c].method&&(Z[c]=t.objectsList[c].radius,t.objectsList[c].radius/=E);d/=E,p/=E,f/=E,_/=E,l.symbolic.x=1}}for(c=0;c<t.listOfFreePoints.length;c++)b=t.listOfFreePoints[c].symbolic.x,Math.abs(b)<o.Z.eps&&(t.listOfFreePoints[c].symbolic.x=0),Math.abs(b-Math.round(b))<o.Z.eps&&(t.listOfFreePoints[c].symbolic.x=Math.round(b)),b=t.listOfFreePoints[c].symbolic.y,Math.abs(b)<o.Z.eps&&(t.listOfFreePoints[c].symbolic.y=0),Math.abs(b-Math.round(b))<o.Z.eps&&(t.listOfFreePoints[c].symbolic.y=Math.round(b))}for(c in s=this.generatePolynomials(t,e).join(","),this.cbp=function(t){n=t},this.cb=r.Z.bind(this.cbp,this),T.modules.geoloci.lociCoCoA(d,p,f,_,C,s,E,S,O,x,this.cb,!0),this.clearSymbolicCoordinates(t),Z)Z.hasOwnProperty(c)&&(t.objects[c].radius=Z[c]);return n}};var N=o.Z.Symbolic;o.Z.Clip={_isSeparator:function(t){return isNaN(t.coords.usrCoords[1])&&isNaN(t.coords.usrCoords[2])},makeDoublyLinkedList:function(t){var e,i=null,r=[],s=t.length;if(s>0)for(e=0;e<s;e++)this._isSeparator(t[e])?(t[e]._next=t[(e+1)%s],t[e]._prev=t[(s+e-1)%s]):(null===i&&(i=e,r.push(i)),this._isSeparator(t[(e+1)%s])||e===s-1?(t[e]._next=t[i],t[i]._prev=t[e],t[e]._end=!0,i=null):(t[e]._next=t[(e+1)%s],t[i]._prev=t[e]),this._isSeparator(t[(s+e-1)%s])||(t[e]._prev=t[(s+e-1)%s]));return r},Vertex:function(t,e,r,s,o,n){this.pos=e,this.intersection=!0,this.coords=t,this.elementClass=i.Z.OBJECT_CLASS_POINT,this.data={alpha:r,path:s,pathname:o,done:!1,type:n,idx:0},this.neighbour=null,this.entry_exit=!1},_addToList:function(t,e,r){var s=t.length,n=o.Z.eps*o.Z.eps;s>0&&Math.abs(t[s-1].coords.usrCoords[0]-e.usrCoords[0])<n&&Math.abs(t[s-1].coords.usrCoords[1]-e.usrCoords[1])<n&&Math.abs(t[s-1].coords.usrCoords[2]-e.usrCoords[2])<n||t.push({pos:r,intersection:!1,coords:e,elementClass:i.Z.OBJECT_CLASS_POINT})},sortIntersections:function(t){var e,i,r,s,o,n,a=[],h=t.length;for(e=0;e<h;e++)if(t[e].sort((function(t,e){return t.data.alpha>e.data.alpha?1:-1})),t[e].length>0){for(o=t[e].length-1,n=(s=(r=t[e][0]).data.path[r.pos])._next,e===h-1&&(s._end=!1),0===r.data.alpha&&"T"===r.data.type?(s.intersection=!0,s.data=r.data,s.neighbour=r.neighbour,s.neighbour.neighbour=s,s.entry_exit=!1,t[e][0]=s):(r._prev=s,r._prev._next=r),i=1;i<=o;i++)(r=t[e][i])._prev=t[e][i-1],r._prev._next=r;(r=t[e][o])._next=n,r._next._prev=r,e===h-1&&(r._end=!0),a=a.concat(t[e])}return a},_inbetween:function(t,e,i){var r,s=o.Z.eps*o.Z.eps,n=i[1]-e[1],a=i[2]-e[2],h=t[1]-e[1],l=t[2]-e[2];return 0===n&&0===a&&0===h&&0===l||(r=Math.abs(h)<s&&Math.abs(n)<s?l/a:h/n,Math.abs(r)<s&&(r=0),r)},_print_array:function(t){var e,i;for(e=0;e<t.length;e++)try{i="",t[e]._end&&(i=" end"),console.log(e,t[e].coords.usrCoords,t[e].data.type,"\t","prev",t[e]._prev.coords.usrCoords,"next",t[e]._next.coords.usrCoords+i)}catch(i){console.log(e,t[e].coords.usrCoords)}},_print_list:function(t){for(var e,i=0;i<100&&(e=t.data?t.data.alpha:"-",console.log("\t",t.coords.usrCoords,"\n\t\tis:",t.intersection,"end:",t._end,e,"\n\t\t-:",t._prev.coords.usrCoords,"\n\t\t+:",t._next.coords.usrCoords,"\n\t\tn:",t.intersection?t.neighbour.coords.usrCoords:"-"),!t._end);)t=t._next,i++},_noOverlap:function(t,e,i,r){var s,n,a,h,l,c=Math.sqrt(o.Z.eps),d=!1;for(s=0;s<3;s++)if(n=Math.min(t[s],e[s]),a=Math.max(t[s],e[s]),h=Math.min(i[s],r[s]),l=Math.max(i[s],r[s]),a<h-c||n>l+c){d=!0;break}return d},findIntersections:function(t,e,r){var s,n,a,l,c,d,p,f,_,m,g,b,v,Z=[],C=100*o.Z.eps,y=t.length,P=e.length,E=[],O=[],x=[],S=!1,M=!1,w=!1;for(n=0;n<P;n++)x.push([]);for(s=0;s<y;s++)if(O.push([]),this._isSeparator(t[s])||this._isSeparator(t[(s+1)%y]))S=!0;else{if(S&&s===y-1)break;for(l=t[s].coords.usrCoords,c=t[(s+1)%y].coords.usrCoords,n=0;n<P;n++)if(this._isSeparator(e[n])||this._isSeparator(e[(n+1)%P]))M=!0;else{if(M&&n===P-1)break;if(d=e[n].coords.usrCoords,p=e[(n+1)%P].coords.usrCoords,!this._noOverlap(l,c,d,p)&&(Z=h.Z.meetSegmentSegment(l,c,d,p),f=h.Z.distance(l,c,3),_=h.Z.distance(d,p,3),Z[1]*f>-C&&Z[1]<1-C/f&&Z[2]*_>-C&&Z[2]<1-C/_||Z[1]===1/0&&Z[2]===1/0&&o.Z.norm(Z[0],3)<C)){if(a=new u.Z(i.Z.COORDS_BY_USER,Z[0],r),g="X",Math.abs(Z[1])*f<C||Math.abs(Z[2])*_<C)g="T",Math.abs(Z[1])*f<C&&(Z[1]=0),Math.abs(Z[2])*_<C&&(Z[2]=0),a=0===Z[1]?new u.Z(i.Z.COORDS_BY_USER,l,r):new u.Z(i.Z.COORDS_BY_USER,d,r);else if(Z[1]===1/0&&Z[2]===1/0&&o.Z.norm(Z[0],3)<C){(m=this._inbetween(l,d,p))>=0&&m<1&&(g="T",a=new u.Z(i.Z.COORDS_BY_USER,l,r),Z[1]=0,Z[2]=m,b=new this.Vertex(a,s,Z[1],t,"S",g),v=new this.Vertex(a,n,Z[2],e,"C",g),b.neighbour=v,v.neighbour=b,O[s].push(b),x[n].push(v)),m=this._inbetween(d,l,c),h.Z.distance(l,d,3)>C&&m>=0&&m<1&&(g="T",a=new u.Z(i.Z.COORDS_BY_USER,d,r),Z[1]=m,Z[2]=0,b=new this.Vertex(a,s,Z[1],t,"S",g),v=new this.Vertex(a,n,Z[2],e,"C",g),b.neighbour=v,v.neighbour=b,O[s].push(b),x[n].push(v));continue}w,b=new this.Vertex(a,s,Z[1],t,"S",g),v=new this.Vertex(a,n,Z[2],e,"C",g),b.neighbour=v,v.neighbour=b,O[s].push(b),x[n].push(v)}}}for(E=this.sortIntersections(O),s=0;s<E.length;s++)E[s].data.idx=s,E[s].neighbour.data.idx=s;return[E,this.sortIntersections(x)]},_getPosition:function(t,e,i,r){var s=h.Z.det3p(t,e,i),o=h.Z.det3p(t,i,r);return h.Z.det3p(e,i,r)>=0?s>=0&&o>=0?"left":"right":s>=0||o>=0?"left":"right"},_classifyDegenerateIntersections:function(t){var e,i,s,n,a,l,c,d,u,p,f,_,m,g,b=!1;for(b,u=h.Z.det3p,c=0,t._tours=0;;){if(t.intersection&&"T"===t.data.type&&(e=t._next.coords.usrCoords,i=t._prev.coords.usrCoords,h.Z.distance(t.coords.usrCoords,e,3)<o.Z.eps&&(e=t._next._next.coords.usrCoords),h.Z.distance(t.coords.usrCoords,i,3)<o.Z.eps&&(i=t._prev._prev.coords.usrCoords),n=(a=t.neighbour)._prev.coords.usrCoords,s=a._next.coords.usrCoords,h.Z.distance(a.coords.usrCoords,s,3)<o.Z.eps&&(s=a._next._next.coords.usrCoords),h.Z.distance(a.coords.usrCoords,n,3)<o.Z.eps&&(n=a._prev._prev.coords.usrCoords),f=u(t.coords.usrCoords,i,n),_=u(t.coords.usrCoords,e,s),m=u(t.coords.usrCoords,i,s),g=u(t.coords.usrCoords,e,n),0===f&&0===_&&0===m&&0===g&&(t.coords.usrCoords[1]*=1+Math.random()*o.Z.eps,t.coords.usrCoords[2]*=1+Math.random()*o.Z.eps,a.coords.usrCoords[1]=t.coords.usrCoords[1],a.coords.usrCoords[2]=t.coords.usrCoords[2],f=u(t.coords.usrCoords,i,n),_=u(t.coords.usrCoords,e,s),m=u(t.coords.usrCoords,i,s),g=u(t.coords.usrCoords,e,n)),p=!1,0===f?h.Z.affineRatio(t.coords.usrCoords,i,n)<0&&(p=!0):0===_?h.Z.affineRatio(t.coords.usrCoords,e,s)<0&&(p=!0):0===m?h.Z.affineRatio(t.coords.usrCoords,i,s)>0&&(p=!0):0===g&&h.Z.affineRatio(t.coords.usrCoords,e,n)>0&&(p=!0),p&&(d=n,n=s,s=d,d=f,f=m,m=d,d=_,_=g,g=d),r.Z.exists(t.delayedStatus)||(t.delayedStatus=[]),0===f&&0===_?t.delayedStatus=["on","on"]:0===f?(l=this._getPosition(e,n,a.coords.usrCoords,s),t.delayedStatus=["on",l]):0===_?(l=this._getPosition(i,n,a.coords.usrCoords,s),t.delayedStatus=[l,"on"]):0===t.delayedStatus.length&&(this._getPosition(i,n,a.coords.usrCoords,s)!==this._getPosition(e,n,a.coords.usrCoords,s)?t.data.type="X":t.data.type="B")),r.Z.exists(t._tours)&&t._tours++,t._tours>3||t._end||c>1e3){c>1e3&&console.log("Clipping: _classifyDegenerateIntersections exit"),r.Z.exists(t._tours)&&delete t._tours;break}t.intersection&&c++,t=t._next}},_handleIntersectionChains:function(t){var e,i=0,r="Null",s=!1,o=!1,n=!1;for(n;!0===t.intersection&&("T"===t.data.type&&("on"!==t.delayedStatus[0]&&"on"===t.delayedStatus[1]?(s=!0,e=t,r=t.delayedStatus[0]):s&&"on"===t.delayedStatus[0]&&"on"===t.delayedStatus[1]?t.data.type="B":s&&"on"===t.delayedStatus[0]&&"on"!==t.delayedStatus[1]&&(s=!1,r===t.delayedStatus[1]?(e.data.type="DB",t.data.type="DB"):(e.data.type="DX",t.data.type="DX"))),i++),t._end&&(o=!0),!o||s;){if(i>1e3){console.log("Warning: _handleIntersectionChains: intersection chain reached maximum numbers of iterations");break}t=t._next}},_handleFullyDegenerateCase:function(t,e,r){var s,n,a,l,c,d,p,f,_,m,g,b,v,Z,C=[t,e];for(a=0;a<2;a++){for(m=(s=C[a]).length,f=0,Z=!0;f<m;f++)if(!s[f].intersection){Z=!1;break}if(Z)for(g=(n=C[(a+1)%2]).length,f=0;f<m;f++){for(c=s[f].coords.usrCoords,d=s[f]._next.coords.usrCoords,l=[.5*(c[0]+d[0]),.5*(c[1]+d[1]),.5*(c[2]+d[2])],_=0,b=!1;_<g;_++)if(Math.abs(h.Z.det3p(n[_].coords.usrCoords,n[(_+1)%g].coords.usrCoords,l))<o.Z.eps){b=!0;break}if(!b){p={pos:f,intersection:!1,coords:new u.Z(i.Z.COORDS_BY_USER,l,r),elementClass:i.Z.OBJECT_CLASS_POINT},v=s[f]._next,s[f]._next=p,p._prev=s[f],p._next=v,v._prev=p,s[f]._end&&(s[f]._end=!1,p._end=!0);break}}}},_getStatus:function(t,e){for(;t.intersection&&!t._end;)t=t._next;return[t,0===h.Z.windingNumber(t.coords.usrCoords,e)?"entry":"exit"]},markEntryExit:function(t,e,i){var s,o,n,a,h,l,c,d=null,u=0;for(l=i.length,h=0;h<l;h++)for(c=i[h],this._classifyDegenerateIntersections(t[c]),this._handleIntersectionChains(t[c]),o=(a=this._getStatus(t[c],e))[0],s=a[1],o._starter=!0,n=0,d=null,u=0;!0===o.intersection&&("X"===o.data.type&&1===u&&(d.entry_exit=s,"exit"===s&&(d.data.type="X"),u=2),"X"!==o.data.type&&"DB"!==o.data.type||(o.entry_exit=s,s="entry"===s?"exit":"entry"),"DX"===o.data.type&&(0===u?(d=o,u=1):1===u?(o.entry_exit=s,d.entry_exit=s,"exit"===s?d.data.type="X":o.data.type="X",s="entry"===s?"exit":"entry",d=null,u=0):2===u&&(o.entry_exit=s,o.data.type="X",s="entry"===s?"exit":"entry",d=null,u=0))),o=o._next,!(r.Z.exists(o._starter)||n>1e4);)n++},_stayOnPath:function(t,e){var i=!0;return t.intersection&&"B"!==t.data.type&&(i=e===t.entry_exit),i},_addVertex:function(t,e,i){return isNaN(e.coords.usrCoords[1])||isNaN(e.coords.usrCoords[2])||t.push(e),e.intersection&&e.data.done?(i&&console.log("Add last intersection point",e.coords.usrCoords,"on",e.data.pathname,e.entry_exit,e.data.type),!0):(e.intersection&&(e.data.done=!0,i&&console.log("Add intersection point",e.coords.usrCoords,"on",e.data.pathname,e.entry_exit,e.data.type)),!1)},tracing:function(t,e,i){var r,s,o,n,a=0,h=1e4,l=0,c=[],d=!1,u=!1;for(u;l<e.length&&a<h;)if((o=e[l]).data.done||"X"!==o.data.type)l++;else{u,c.length>0&&c.push([NaN,NaN]),n=o.data.idx,r=t,d=this._addVertex(c,o,u),s=o.entry_exit;do{if(d)break;if("intersection"===i&&"entry"===o.entry_exit||"union"===i&&"exit"===o.entry_exit||"difference"===i&&r===t==("exit"===o.entry_exit)){u;do{if(o=o._next,d=this._addVertex(c,o,u))break}while(this._stayOnPath(o,s));a++}else{u;do{if(o=o._prev,d=this._addVertex(c,o,u))break}while(this._stayOnPath(o,s));a++}if(d)break;if(!o.neighbour)return console.log("Tracing: emergency break - no neighbour!!!!!!!!!!!!!!!!!",a),[[0],[0]];if((o=o.neighbour).data.done)break;o.data.done=!0,s=o.entry_exit,r=o.data.path}while(o.data.idx!==n&&a<h);a>=h&&console.log("Tracing: stopping an infinite loop!",a),l++}return this._getCoordsArrays(c,!1)},isEmptyCase:function(t,e,i){return"intersection"===i&&(0===t.length||0===e.length)||("union"===i&&0===t.length&&0===e.length||"difference"===i&&0===t.length)},_getCoordsArrays:function(t,e){var i,r=[],s=[],o=t.length;for(i=0;i<o;i++)t[i].coords?(r.push(t[i].coords.usrCoords[1]),s.push(t[i].coords.usrCoords[2])):(r.push(t[i][0]),s.push(t[i][1]));return e&&o>0&&(t[0].coords?(r.push(t[0].coords.usrCoords[1]),s.push(t[0].coords.usrCoords[2])):(r.push(t[0][0]),s.push(t[0][1]))),[r,s]},handleEmptyIntersection:function(t,e,i){var s,o,n=!1,a=[];if(0===t.length)return a="union"===i?e:[],this._getCoordsArrays(a,!0);if(0===e.length)return a="intersection"===i?[]:t,this._getCoordsArrays(a,!0);if(t.length>0)for(s=t[0];s.intersection&&!(s=s._next)._end;);if(e.length>0)for(o=e[0];o.intersection&&!(o=o._next)._end;);return 0===h.Z.windingNumber(s.coords.usrCoords,e)?0!==h.Z.windingNumber(o.coords.usrCoords,t)?("union"===i?(r.Z.concat(a,t),a.push(t[0])):"difference"===i&&(r.Z.concat(a,t),a.push(t[0]),h.Z.signedPolygon(t)*h.Z.signedPolygon(e)>0&&a.reverse(),a.push([NaN,NaN])),"difference"!==i&&"intersection"!==i||(r.Z.concat(a,e),a.push(e[0]),n=!1)):"difference"===i?(r.Z.concat(a,t),n=!0):"union"===i&&(r.Z.concat(a,t),a.push(t[0]),a.push([NaN,NaN]),r.Z.concat(a,e),a.push(e[0])):"intersection"===i?(r.Z.concat(a,t),n=!0):"union"===i&&(r.Z.concat(a,e),a.push(e[0])),this._getCoordsArrays(a,n)},_countCrossingIntersections:function(t){var e,i=t.length,r=0;for(e=0;e<i;e++)"X"===t[e].data.type&&r++;return r},_getPath:function(t,e){var s,o,n,a,l,c,d,p=[];if(t.elementClass!==i.Z.OBJECT_CLASS_CURVE||t.type!==i.Z.OBJECT_TYPE_ARC&&t.type!==i.Z.OBJECT_TYPE_SECTOR){if(t.elementClass===i.Z.OBJECT_CLASS_CURVE&&r.Z.exists(t.points))for(o=t.numberPoints,s=0;s<o;s++)this._addToList(p,t.points[s],s);else if(t.type===i.Z.OBJECT_TYPE_POLYGON)for(s=0;s<t.vertices.length;s++)this._addToList(p,t.vertices[s].coords,s);else if(t.elementClass===i.Z.OBJECT_CLASS_CIRCLE)for(d=359,n=t.Radius(),a=2*Math.PI/d,s=0;s<=d;s++)this._addToList(p,new u.Z(i.Z.COORDS_BY_USER,[t.center.coords.usrCoords[0],t.center.coords.usrCoords[1]+Math.cos(s*a)*n,t.center.coords.usrCoords[2]+Math.sin(s*a)*n],e),s);else if(r.Z.isArray(t))for(o=t.length,s=0;s<o;s++)r.Z.exists(t[s].coords)?this._addToList(p,t[s].coords,s):r.Z.isArray(t[s])?this._addToList(p,new u.Z(i.Z.COORDS_BY_USER,t[s],e),s):r.Z.exists(t[s].usrCoords)&&this._addToList(p,t[s],s)}else{for(l=h.Z.rad(t.radiuspoint,t.center,t.anglepoint),d=Math.floor(180*l/Math.PI),n=t.Radius(),a=l/d,c=Math.atan2(t.radiuspoint.coords.usrCoords[2]-t.center.coords.usrCoords[2],t.radiuspoint.coords.usrCoords[1]-t.center.coords.usrCoords[1]),t.type===i.Z.OBJECT_TYPE_SECTOR&&this._addToList(p,t.center.coords,0),s=0;s<=d;s++)this._addToList(p,new u.Z(i.Z.COORDS_BY_USER,[t.center.coords.usrCoords[0],t.center.coords.usrCoords[1]+Math.cos(s*a+c)*n,t.center.coords.usrCoords[2]+Math.sin(s*a+c)*n],e),s+1);t.type===i.Z.OBJECT_TYPE_SECTOR&&this._addToList(p,t.center.coords,d+2)}return p},greinerHormann:function(t,e,i,r){var s,n,a,l,c=[],d=[];return(s=(c=this._getPath(t,r)).length)>0&&h.Z.distance(c[0].coords.usrCoords,c[s-1].coords.usrCoords,3)<o.Z.eps&&c.pop(),(s=(d=this._getPath(e,r)).length)>0&&h.Z.distance(d[0].coords.usrCoords,d[s-1].coords.usrCoords,3)<o.Z.eps*o.Z.eps&&d.pop(),this.isEmptyCase(c,d,i)?[[],[]]:(a=this.makeDoublyLinkedList(c),l=this.makeDoublyLinkedList(d),n=this.findIntersections(c,d,r)[0],this._handleFullyDegenerateCase(c,d,r),this.markEntryExit(c,d,a),this.markEntryExit(d,c,l),0===this._countCrossingIntersections(n)?this.handleEmptyIntersection(c,d,i):this.tracing(c,n,i))},union:function(t,e,i){return this.greinerHormann(t,e,"union",i)},intersection:function(t,e,i){return this.greinerHormann(t,e,"intersection",i)},difference:function(t,e,i){return this.greinerHormann(t,e,"difference",i)}};var A=o.Z.Clip;o.Z.Poly={},o.Z.Poly.Ring=function(t){this.vars=t},t.Z.extend(o.Z.Poly.Ring.prototype,{}),o.Z.Poly.Monomial=function(t,e,i){var s;if(!r.Z.exists(t))throw new Error("JSXGraph error: In JXG.Math.Poly.monomial missing parameter 'ring'.");for(r.Z.isArray(i)||(i=[]),s=(i=i.slice(0,t.vars.length)).length;s<t.vars.length;s++)i.push(0);this.ring=t,this.coefficient=e||0,this.exponents=r.Z.deepCopy(i)},t.Z.extend(o.Z.Poly.Monomial.prototype,{copy:function(){return new o.Z.Poly.Monomial(this.ring,this.coefficient,this.exponents)},print:function(){var t,e=[];for(t=0;t<this.ring.vars.length;t++)e.push(this.ring.vars[t]+"^"+this.exponents[t]);return this.coefficient+"*"+e.join("*")}}),o.Z.Poly.Polynomial=function(t,e){var i;if(!r.Z.exists(t))throw new Error("JSXGraph error: In JXG.Math.Poly.polynomial missing parameter 'ring'.");i=r.Z.exists(e)&&r.Z.isString(e)?void 0:[],this.ring=t,this.monomials=i},t.Z.extend(o.Z.Poly.Polynomial.prototype,{findSignature:function(t){var e;for(e=0;e<this.monomials.length;e++)if(r.Z.cmpArrays(this.monomials[e].exponents,t))return e;return-1},addSubMonomial:function(t,e){var i;(i=this.findSignature(t.exponents))>-1?this.monomials[i].coefficient+=e*t.coefficient:(t.coefficient*=e,this.monomials.push(t))},add:function(t){var e;if(!r.Z.exists(t)||t.ring!==this.ring)throw new Error("JSXGraph error: In JXG.Math.Poly.polynomial.add either summand is undefined or rings don't match.");if(r.Z.isArray(t.exponents))this.addSubMonomial(t,1);else for(e=0;e<t.monomials.length;e++)this.addSubMonomial(t.monomials[e],1)},sub:function(t){var e;if(!r.Z.exists(t)||t.ring!==this.ring)throw new Error("JSXGraph error: In JXG.Math.Poly.polynomial.sub either summand is undefined or rings don't match.");if(r.Z.isArray(t.exponents))this.addSubMonomial(t,-1);else for(e=0;e<t.monomials.length;e++)this.addSubMonomial(t.monomials[e],-1)},copy:function(){var t,e;for(e=new o.Z.Poly.Polynomial(this.ring),t=0;t<this.monomials.length;t++)e.monomials.push(this.monomials[t].copy());return e},print:function(){var t,e=[];for(t=0;t<this.monomials.length;t++)e.push("("+this.monomials[t].print()+")");return e.join("+")}});o.Z.Poly;t.Z.Complex=function(t,e){this.isComplex=!0,t&&t.isComplex&&(e=t.imaginary,t=t.real),this.real=t||0,this.imaginary=e||0,this.absval=0,this.angle=0},t.Z.extend(t.Z.Complex.prototype,{toString:function(){return this.real+" + "+this.imaginary+"i"},add:function(t){return r.Z.isNumber(t)?this.real+=t:(this.real+=t.real,this.imaginary+=t.imaginary),this},sub:function(t){return r.Z.isNumber(t)?this.real-=t:(this.real-=t.real,this.imaginary-=t.imaginary),this},mult:function(t){var e,i;return r.Z.isNumber(t)?(this.real*=t,this.imaginary*=t):(e=this.real,i=this.imaginary,this.real=e*t.real-i*t.imaginary,this.imaginary=e*t.imaginary+i*t.real),this},div:function(t){var e,i,s;if(r.Z.isNumber(t)){if(Math.abs(t)<Math.eps)return this.real=1/0,this.imaginary=1/0,this;this.real/=t,this.imaginary/=t}else{if(Math.abs(t.real)<Math.eps&&Math.abs(t.imaginary)<Math.eps)return this.real=1/0,this.imaginary=1/0,this;e=t.real*t.real+t.imaginary*t.imaginary,s=this.real,i=this.imaginary,this.real=(s*t.real+i*t.imaginary)/e,this.imaginary=(i*t.real-s*t.imaginary)/e}return this},conj:function(){return this.imaginary*=-1,this}}),t.Z.C={},t.Z.C.add=function(e,i){var r=new t.Z.Complex(e);return r.add(i),r},t.Z.C.sub=function(e,i){var r=new t.Z.Complex(e);return r.sub(i),r},t.Z.C.mult=function(e,i){var r=new t.Z.Complex(e);return r.mult(i),r},t.Z.C.div=function(e,i){var r=new t.Z.Complex(e);return r.div(i),r},t.Z.C.conj=function(e){var i=new t.Z.Complex(e);return i.conj(),i},t.Z.C.abs=function(e){var i=new t.Z.Complex(e);return i.conj(),i.mult(e),Math.sqrt(i.real)},t.Z.C.copy=function(e){return new t.Z.Complex(e)},t.Z.Complex.C=t.Z.C;var D=t.Z.Complex,k=__webpack_require__(766);t.Z.AbstractRenderer=function(){this.vOffsetText=0,this.enhancedRendering=!0,this.container=null,this.type="",this.supportsForeignObject=!1,this.dashArray=[[2,2],[5,5],[10,10],[20,20],[20,10,10,10],[20,5,10,5],[0,5]]},t.Z.extend(t.Z.AbstractRenderer.prototype,{_updateVisual:function(t,e,i){(i||this.enhancedRendering)&&(e=e||{},this.setObjectViewport(t),this.setObjectTransition(t),r.Z.evaluate(t.visProp.draft)?this.setDraft(t):(e.stroke||(t.highlighted?(this.setObjectStrokeColor(t,t.visProp.highlightstrokecolor,t.visProp.highlightstrokeopacity),this.setObjectStrokeWidth(t,t.visProp.highlightstrokewidth)):(this.setObjectStrokeColor(t,t.visProp.strokecolor,t.visProp.strokeopacity),this.setObjectStrokeWidth(t,t.visProp.strokewidth))),e.fill||(t.highlighted?this.setObjectFillColor(t,t.visProp.highlightfillcolor,t.visProp.highlightfillopacity):this.setObjectFillColor(t,t.visProp.fillcolor,t.visProp.fillopacity)),e.dash||this.setDashStyle(t,t.visProp),e.shadow||this.setShadow(t),e.tabindex||this.setTabindex(t)))},_getHighlighted:function(t){var e=!1;return r.Z.exists(t.board)&&r.Z.exists(t.board.highlightedObjects)||(e=!0),!e&&r.Z.exists(t.board.highlightedObjects[t.id])?"highlight":""},drawPoint:function(t){var e,i=k.Z.normalizePointFace(r.Z.evaluate(t.visProp.face));e="o"===i?"ellipse":"[]"===i?"rect":"path",t.rendNode=this.appendChildPrim(this.createPrim(e,t.id),r.Z.evaluate(t.visProp.layer)),this.appendNodesToElement(t,e),this._updateVisual(t,{dash:!0,shadow:!0},!0),this.updatePoint(t)},updatePoint:function(t){var e,i=r.Z.evaluate(t.visProp.size),s=k.Z.normalizePointFace(r.Z.evaluate(t.visProp.face)),o=r.Z.evaluate(t.visProp.sizeunit),n=r.Z.evaluate(t.visProp.zoom);isNaN(t.coords.scrCoords[2]+t.coords.scrCoords[1])||("user"===o&&(i*=Math.sqrt(Math.abs(t.board.unitX*t.board.unitY))),e=0===(i*=t.board&&n?Math.sqrt(t.board.zoomX*t.board.zoomY):1)?0:i+1,"o"===s?this.updateEllipsePrim(t.rendNode,t.coords.scrCoords[1],t.coords.scrCoords[2],e,e):"[]"===s?this.updateRectPrim(t.rendNode,t.coords.scrCoords[1]-i,t.coords.scrCoords[2]-i,2*i,2*i):this.updatePathPrim(t.rendNode,this.updatePathStringPoint(t,i,s),t.board),this._updateVisual(t,{dash:!1,shadow:!1}),this.setShadow(t))},changePointStyle:function(t){var e=this.getElementById(t.id);r.Z.exists(e)&&this.remove(e),this.drawPoint(t),r.Z.clearVisPropOld(t),t.visPropCalc.visible||this.display(t,!1),r.Z.evaluate(t.visProp.draft)&&this.setDraft(t)},drawLine:function(t){t.rendNode=this.appendChildPrim(this.createPrim("line",t.id),r.Z.evaluate(t.visProp.layer)),this.appendNodesToElement(t,"lines"),this.updateLine(t)},updateLine:function(t){this._updateVisual(t),this.updatePathWithArrowHeads(t),this.setLineCap(t)},drawCurve:function(t){t.rendNode=this.appendChildPrim(this.createPrim("path",t.id),r.Z.evaluate(t.visProp.layer)),this.appendNodesToElement(t,"path"),this.updateCurve(t)},updateCurve:function(t){this._updateVisual(t),this.updatePathWithArrowHeads(t),this.setLineCap(t)},updatePathWithArrowHeads:function(t,e){var s,o,n=t.visProp,a=e?"highlight":"";s=e&&n.highlightstrokewidth?Math.max(r.Z.evaluate(n.highlightstrokewidth),r.Z.evaluate(n.strokewidth)):r.Z.evaluate(n.strokewidth),o=this.getArrowHeadData(t,s,a),this.makeArrows(t,o),t.elementClass===i.Z.OBJECT_CLASS_LINE?this.updateLineWithEndings(t,o):t.elementClass===i.Z.OBJECT_CLASS_CURVE&&this.updatePath(t),this.setArrowSize(t,o)},getArrowHeadData:function(t,e,s){var n,a,h,l,c=o.Z.eps,d=0,u=0,p=0,f=0,_=r.Z.evaluate(t.visProp.firstarrow),m=r.Z.evaluate(t.visProp.lastarrow);return(_||m)&&(n=r.Z.exists(_.type)?r.Z.evaluate(_.type):t.elementClass===i.Z.OBJECT_CLASS_LINE?1:7,a=r.Z.exists(m.type)?r.Z.evaluate(m.type):t.elementClass===i.Z.OBJECT_CLASS_LINE?1:7,_&&(l=6,r.Z.exists(_.size)&&(l=r.Z.evaluate(_.size)),""!==s&&r.Z.exists(_[s+"size"])&&(l=r.Z.evaluate(_[s+"size"])),h=e*l,2===n?(h*=.5,c+=e*l):3===n?(h=e*l/3,c+=e):4===n||5===n||6===n?(h=e*l/1.5,c+=e*l):7===n?(h=0,l=10,c+=e):c+=e*l,d+=h,p=l),m&&(l=6,r.Z.exists(m.size)&&(l=r.Z.evaluate(m.size)),""!==s&&r.Z.exists(m[s+"size"])&&(l=r.Z.evaluate(m[s+"size"])),h=e*l,2===a?(h*=.5,c+=e*l):3===a?(h=e*l/3,c+=e):4===a||5===a||6===a?(h=e*l/1.5,c+=e*l):7===a?(h=0,l=10,c+=e):c+=e*l,u+=h,f=l)),t.visPropCalc.typeFirst=n,t.visPropCalc.typeLast=a,{evFirst:_,evLast:m,typeFirst:n,typeLast:a,offFirst:d,offLast:u,sizeFirst:p,sizeLast:f,showFirst:1,showLast:1,minLen:c,strokeWidth:e}},updateLineWithEndings:function(t,e){var s,o,n;return s=new u.Z(i.Z.COORDS_BY_USER,t.point1.coords.usrCoords,t.board),o=new u.Z(i.Z.COORDS_BY_USER,t.point2.coords.usrCoords,t.board),n=r.Z.evaluate(t.visProp.margin),h.Z.calcStraight(t,s,o,n),this.handleTouchpoints(t,s,o,e),this.getPositionArrowHead(t,s,o,e),this.updateLinePrim(t.rendNode,s.scrCoords[1],s.scrCoords[2],o.scrCoords[1],o.scrCoords[2],t.board),this},updatePath:function(t){return r.Z.evaluate(t.visProp.handdrawing)?this.updatePathPrim(t.rendNode,this.updatePathStringBezierPrim(t),t.board):this.updatePathPrim(t.rendNode,this.updatePathStringPrim(t),t.board),this},getPositionArrowHead:function(t,e,r,s){var o,n,a,h,l;return(s.evFirst||s.evLast)&&(n=a=h=l=0,o=e.distance(i.Z.COORDS_BY_SCREEN,r),s.evFirst&&"vml"!==t.board.renderer.type&&(o>=s.minLen?(n=(r.scrCoords[1]-e.scrCoords[1])*s.offFirst/o,a=(r.scrCoords[2]-e.scrCoords[2])*s.offFirst/o):s.showFirst=0),s.evLast&&"vml"!==t.board.renderer.type&&(o>=s.minLen?(h=(r.scrCoords[1]-e.scrCoords[1])*s.offLast/o,l=(r.scrCoords[2]-e.scrCoords[2])*s.offLast/o):s.showLast=0),e.setCoordinates(i.Z.COORDS_BY_SCREEN,[e.scrCoords[1]+n,e.scrCoords[2]+a],!1,!0),r.setCoordinates(i.Z.COORDS_BY_SCREEN,[r.scrCoords[1]-h,r.scrCoords[2]-l],!1,!0)),this},handleTouchpoints:function(t,e,s,o){var n,a,h,l,c,d,u;return(o.evFirst||o.evLast)&&(h=l=c=d=u=0,n=r.Z.evaluate(t.point1.visProp.size)+r.Z.evaluate(t.point1.visProp.strokewidth),a=r.Z.evaluate(t.point2.visProp.size)+r.Z.evaluate(t.point2.visProp.strokewidth),o.evFirst&&r.Z.evaluate(t.visProp.touchfirstpoint)&&r.Z.evaluate(t.point1.visProp.visible)&&(h=e.distance(i.Z.COORDS_BY_SCREEN,s),l=(s.scrCoords[1]-e.scrCoords[1])*n/h,c=(s.scrCoords[2]-e.scrCoords[2])*n/h),o.evLast&&r.Z.evaluate(t.visProp.touchlastpoint)&&r.Z.evaluate(t.point2.visProp.visible)&&(h=e.distance(i.Z.COORDS_BY_SCREEN,s),d=(s.scrCoords[1]-e.scrCoords[1])*a/h,u=(s.scrCoords[2]-e.scrCoords[2])*a/h),e.setCoordinates(i.Z.COORDS_BY_SCREEN,[e.scrCoords[1]+l,e.scrCoords[2]+c],!1,!0),s.setCoordinates(i.Z.COORDS_BY_SCREEN,[s.scrCoords[1]-d,s.scrCoords[2]-u],!1,!0)),this},setArrowSize:function(t,e){return e.evFirst&&this._setArrowWidth(t.rendNodeTriangleStart,e.showFirst*e.strokeWidth,t.rendNode,e.sizeFirst),e.evLast&&this._setArrowWidth(t.rendNodeTriangleEnd,e.showLast*e.strokeWidth,t.rendNode,e.sizeLast),this},setLineCap:function(t){},drawTicks:function(t){t.rendNode=this.appendChildPrim(this.createPrim("path",t.id),r.Z.evaluate(t.visProp.layer)),this.appendNodesToElement(t,"path")},updateTicks:function(t){},drawEllipse:function(t){t.rendNode=this.appendChildPrim(this.createPrim("ellipse",t.id),r.Z.evaluate(t.visProp.layer)),this.appendNodesToElement(t,"ellipse"),this.updateEllipse(t)},updateEllipse:function(t){this._updateVisual(t);var e=t.Radius();Math.abs(t.center.coords.usrCoords[0])>o.Z.eps&&!isNaN(e+t.center.coords.scrCoords[1]+t.center.coords.scrCoords[2])&&e*t.board.unitX<2e6&&this.updateEllipsePrim(t.rendNode,t.center.coords.scrCoords[1],t.center.coords.scrCoords[2],e*t.board.unitX,e*t.board.unitY),this.setLineCap(t)},drawPolygon:function(t){t.rendNode=this.appendChildPrim(this.createPrim("polygon",t.id),r.Z.evaluate(t.visProp.layer)),this.appendNodesToElement(t,"polygon"),this.updatePolygon(t)},updatePolygon:function(t){this._updateVisual(t,{stroke:!0,dash:!0}),this.updatePolygonPrim(t.rendNode,t)},displayCopyright:function(t,e){},drawInternalText:function(t){},updateInternalText:function(t){},drawText:function(t){var i,s,o,n;"html"===r.Z.evaluate(t.visProp.display)&&e.Z.isBrowser&&"no"!==this.type?((i=this.container.ownerDocument.createElement("div")).style.position="absolute",i.className=r.Z.evaluate(t.visProp.cssclass),o=r.Z.evaluate(t.visProp.layer),r.Z.exists(o)||(o=0),s=""===this.container.style.zIndex?0:parseInt(this.container.style.zIndex,10),i.style.zIndex=s+o,this.container.appendChild(i),i.setAttribute("id",this.container.id+"_"+t.id)):i=this.drawInternalText(t),t.rendNode=i,t.htmlStr="",t.visProp.islabel&&r.Z.exists(t.visProp.anchor)?(n=r.Z.evaluate(t.visProp.anchor.visProp.visible),t.prepareUpdate().updateVisibility(n)):t.prepareUpdate().updateVisibility(),this.updateText(t)},updateText:function(e){var i,s,o,n,a,h,l,c,d,u,p,f=e.plaintext;if(e.visPropCalc.visible)if(this.updateTextStyle(e,!1),"html"===r.Z.evaluate(e.visProp.display)&&"no"!==this.type){if(isNaN(e.coords.scrCoords[1]+e.coords.scrCoords[2])||(s=e.coords.scrCoords[1],s=Math.abs(s)<1e6?s:1e6,"right"===(a=e.getAnchorX())?(i=e.board.canvasWidth-s,u="right"):"middle"===a?(i=s-.5*e.size[0],u="center"):(i=s,u="left"),e.visPropOld.left!==a+i&&("right"===a?(e.rendNode.style.right=i+"px",e.rendNode.style.left="auto"):(e.rendNode.style.left=i+"px",e.rendNode.style.right="auto"),e.visPropOld.left=a+i),s=e.coords.scrCoords[2]+this.vOffsetText,s=Math.abs(s)<1e6?s:1e6,"bottom"===(h=e.getAnchorY())?(i=e.board.canvasHeight-s,p="bottom"):"middle"===h?(i=s-.5*e.size[1],p="center"):(i=s,p="top"),e.visPropOld.top!==h+i&&("bottom"===h?(e.rendNode.style.top="auto",e.rendNode.style.bottom=i+"px"):(e.rendNode.style.bottom="auto",e.rendNode.style.top=i+"px"),e.visPropOld.top=h+i)),e.htmlStr!==f){try{e.type===r.Z.OBJECT_TYPE_BUTTON?e.rendNodeButton.innerHTML=f:e.type===r.Z.OBJECT_TYPE_CHECKBOX||e.type===r.Z.OBJECT_TYPE_INPUT?e.rendNodeLabel.innerHTML=f:e.rendNode.innerHTML=f}catch(t){o=e.rendNode.parentNode,e.rendNode.parentNode.removeChild(e.rendNode),e.rendNode.innerHTML=f,o.appendChild(e.rendNode)}if(e.htmlStr=f,r.Z.evaluate(e.visProp.usemathjax))try{MathJax.typeset?MathJax.typeset([e.rendNode]):MathJax.Hub.Queue(["Typeset",MathJax.Hub,e.rendNode])}catch(e){t.Z.debug("MathJax (not yet) loaded")}else if(r.Z.evaluate(e.visProp.usekatex))try{(n=0===e.rendNode.innerHTML.indexOf("<span")&&e.rendNode.innerHTML.indexOf("<label")>0&&(e.rendNode.innerHTML.indexOf("<checkbox")>0||e.rendNode.innerHTML.indexOf("<input")>0)?e.rendNodeLabel:0===e.rendNode.innerHTML.indexOf("<button")?e.rendNodeButton:e.rendNode)&&katex.render(f,n,{macros:r.Z.evaluate(e.visProp.katexmacros),throwOnError:!1})}catch(e){t.Z.debug("KaTeX not loaded (yet)")}else if(r.Z.evaluate(e.visProp.useasciimathml))try{AMprocessNode(e.rendNode,!1)}catch(e){t.Z.debug("AsciiMathML not loaded (yet)")}}0!==(l=r.Z.evaluate(e.visProp.rotate))&&(l*=Math.PI/180,c=Math.cos(l),d=Math.sin(l),e.rendNode.style.transform="matrix("+[c,-1*d,d,c,0,0].join(",")+")",e.rendNode.style["transform-origin"]=u+" "+p),this.transformImage(e,e.transformations)}else this.updateInternalText(e)},_css2js:function(t){var e,i,s,o,n,a=[],h=r.Z.trim(t).replace(/;$/,"").split(";");for(i=h.length,e=0;e<i;++e)""!==r.Z.trim(h[e])&&(n=h[e].split(":"),s=r.Z.trim(n[0].replace(/-([a-z])/gi,(function(t,e){return e.toUpperCase()}))),o=r.Z.trim(n[1]),a.push({key:s,val:o}));return a},updateTextStyle:function(t,i){var s,o,n,a,h,l,c,d,u,p=t.visProp,f=e.Z.isBrowser?p.display:"internal",_=["rendNode","rendNodeTag","rendNodeLabel"],m=_.length,g=r.Z.evaluate(p.fontunit),b=["cssdefaultstyle","cssstyle"],v=b.length;if(i?(n=p.highlightstrokecolor,o=p.highlightstrokeopacity,a=p.highlightcssclass):(n=p.strokecolor,o=p.strokeopacity,a=p.cssclass),"no"!==this.type&&("html"===f||"canvas"!==this.type)){for(d=0;d<v;d++)if(""!==(u=r.Z.evaluate(p[(i?"highlight":"")+b[d]]))&&t.visPropOld[b[d]]!==u){for(l=this._css2js(u),h=0;h<m;h++)if(r.Z.exists(t[_[h]]))for(c in l)l.hasOwnProperty(c)&&(t[_[h]].style[l[c].key]=l[c].val);t.visPropOld[b[d]]=u}if(s=r.Z.evaluate(p.fontsize),t.visPropOld.fontsize!==s){t.needsSizeUpdate=!0;try{for(h=0;h<m;h++)r.Z.exists(t[_[h]])&&(t[_[h]].style.fontSize=s+g)}catch(e){for(h=0;h<m;h++)r.Z.exists(t[_[h]])&&(t[_[h]].style.fontSize=s)}t.visPropOld.fontsize=s}}return this.setTabindex(t),this.setObjectTransition(t),"html"===f&&"no"!==this.type?(this.setObjectViewport(t,!0),t.visPropOld.cssclass!==a&&(t.rendNode.className=a,t.visPropOld.cssclass=a,t.needsSizeUpdate=!0),this.setObjectStrokeColor(t,n,o)):this.updateInternalTextStyle(t,n,o),this},updateInternalTextStyle:function(t,e,i){this.setObjectStrokeColor(t,e,i)},drawImage:function(t){},updateImage:function(t){this.updateRectPrim(t.rendNode,t.coords.scrCoords[1],t.coords.scrCoords[2]-t.size[1],t.size[0],t.size[1]),this.updateImageURL(t),this.transformImage(t,t.transformations),this._updateVisual(t,{stroke:!0,dash:!0},!0)},joinTransforms:function(t,e){var i,r=t.board.origin.scrCoords[1],s=t.board.origin.scrCoords[2],n=t.board.unitX,a=t.board.unitY,h=e.length,l=[[1,0,0],[-r/n,1/n,0],[s/a,0,-1/a]];for(i=0;i<h;i++)l=o.Z.matMatMult(e[i].matrix,l);return l=o.Z.matMatMult([[1,0,0],[r,n,0],[s,0,-a]],l)},transformImage:function(t,e){},updateImageURL:function(t){},updateImageStyle:function(t,e){t.rendNode.className=r.Z.evaluate(e?t.visProp.highlightcssclass:t.visProp.cssclass)},drawForeignObject:function(t){},updateForeignObject:function(t){},appendChildPrim:function(t,e){},appendNodesToElement:function(t,e){},createPrim:function(t,e){return null},remove:function(t){},makeArrows:function(t,e){},_setArrowWidth:function(t,e,i){},updateEllipsePrim:function(t,e,i,r,s){},updateLinePrim:function(t,e,i,r,s,o){},updatePathPrim:function(t,e,i){},updatePathStringPoint:function(t,e,i){},updatePathStringPrim:function(t){},updatePathStringBezierPrim:function(t){},updatePolygonPrim:function(t,e){},updateRectPrim:function(t,e,i,r,s){},setPropertyPrim:function(t,e,i){},setTabindex:function(t){var e;t.board.attr.keyboard.enabled&&r.Z.exists(t.rendNode)&&(e=r.Z.evaluate(t.visProp.tabindex),t.visPropCalc.visible&&!r.Z.evaluate(t.visProp.fixed)||(e=null),e!==t.visPropOld.tabindex&&(t.rendNode.setAttribute("tabindex",e),t.visPropOld.tabindex=e))},display:function(t,e){t&&(t.visPropOld.visible=e)},show:function(t){},hide:function(t){},setBuffering:function(t,e){},setDashStyle:function(t){},setDraft:function(t){if(r.Z.evaluate(t.visProp.draft)){var e=t.board.options.elements.draft.color,s=t.board.options.elements.draft.opacity;this.setObjectViewport(t),this.setObjectTransition(t),t.type===i.Z.OBJECT_TYPE_POLYGON?this.setObjectFillColor(t,e,s):(t.elementClass===i.Z.OBJECT_CLASS_POINT?this.setObjectFillColor(t,e,s):this.setObjectFillColor(t,"none",0),this.setObjectStrokeColor(t,e,s),this.setObjectStrokeWidth(t,t.board.options.elements.draft.strokeWidth))}},removeDraft:function(t){this.setObjectViewport(t),this.setObjectTransition(t),t.type===i.Z.OBJECT_TYPE_POLYGON?this.setObjectFillColor(t,t.visProp.fillcolor,t.visProp.fillopacity):(t.type===i.Z.OBJECT_CLASS_POINT&&this.setObjectFillColor(t,t.visProp.fillcolor,t.visProp.fillopacity),this.setObjectStrokeColor(t,t.visProp.strokecolor,t.visProp.strokeopacity),this.setObjectStrokeWidth(t,t.visProp.strokewidth))},setGradient:function(t){},updateGradient:function(t){},setObjectTransition:function(t,e){},setObjectViewport:function(t,e){},setObjectFillColor:function(t,e,i){},setObjectStrokeColor:function(t,e,i){},setObjectStrokeWidth:function(t,e){},setShadow:function(t){},highlight:function(t,e){var s,o,n,a=t.visProp;if(this.setObjectViewport(t),this.setObjectTransition(t),!a.draft){if(t.type===i.Z.OBJECT_TYPE_POLYGON)for(this.setObjectFillColor(t,a.highlightfillcolor,a.highlightfillopacity),o=r.Z.evaluate(a.highlightbystrokewidth),s=0;s<t.borders.length;s++)this.highlight(t.borders[s],!o);else t.elementClass===i.Z.OBJECT_CLASS_TEXT?this.updateTextStyle(t,!0):t.type===i.Z.OBJECT_TYPE_IMAGE?(this.updateImageStyle(t,!0),this.setObjectFillColor(t,a.highlightfillcolor,a.highlightfillopacity)):(this.setObjectStrokeColor(t,a.highlightstrokecolor,a.highlightstrokeopacity),this.setObjectFillColor(t,a.highlightfillcolor,a.highlightfillopacity));a.highlightstrokewidth&&!e&&(n=Math.max(r.Z.evaluate(a.highlightstrokewidth),r.Z.evaluate(a.strokewidth)),this.setObjectStrokeWidth(t,n),t.elementClass!==i.Z.OBJECT_CLASS_LINE&&t.elementClass!==i.Z.OBJECT_CLASS_CURVE||this.updatePathWithArrowHeads(t,!0))}return this},noHighlight:function(t){var e,s,o=t.visProp;if(this.setObjectViewport(t),this.setObjectTransition(t),!r.Z.evaluate(t.visProp.draft)){if(t.type===i.Z.OBJECT_TYPE_POLYGON)for(this.setObjectFillColor(t,o.fillcolor,o.fillopacity),e=0;e<t.borders.length;e++)this.noHighlight(t.borders[e]);else t.elementClass===i.Z.OBJECT_CLASS_TEXT?this.updateTextStyle(t,!1):t.type===i.Z.OBJECT_TYPE_IMAGE?(this.updateImageStyle(t,!1),this.setObjectFillColor(t,o.fillcolor,o.fillopacity)):(this.setObjectStrokeColor(t,o.strokecolor,o.strokeopacity),this.setObjectFillColor(t,o.fillcolor,o.fillopacity));s=r.Z.evaluate(o.strokewidth),this.setObjectStrokeWidth(t,s),t.elementClass!==i.Z.OBJECT_CLASS_LINE&&t.elementClass!==i.Z.OBJECT_CLASS_CURVE||this.updatePathWithArrowHeads(t,!1)}return this},suspendRedraw:function(){},unsuspendRedraw:function(){},drawNavigationBar:function(t,i){var s,o,n=function(t){t||(t=window.event),t.stopPropagation?t.stopPropagation():t.cancelBubble=!0},a=function(i,a,h,l){var c;h=h||"",(c=s.createElement("span")).innerHTML=i,c.style.paddingLeft="7px",c.style.paddingRight="7px",void 0!==c.classList&&(c.classList.add("JXG_navigation_button"),c.classList.add("JXG_navigation_button_"+l)),c.setAttribute("id",h+"_navigation_"+l),o.appendChild(c),e.Z.addEvent(c,"click",(function(e){return r.Z.bind(a,t)(),!1}),t),e.Z.addEvent(c,"pointerup",n,t),e.Z.addEvent(c,"pointerdown",n,t),e.Z.addEvent(c,"pointerleave",n,t),e.Z.addEvent(c,"mouseup",n,t),e.Z.addEvent(c,"mousedown",n,t),e.Z.addEvent(c,"touchend",n,t),e.Z.addEvent(c,"touchstart",n,t)};e.Z.isBrowser&&"no"!==this.type&&(s=t.containerObj.ownerDocument,(o=s.createElement("div")).setAttribute("id",t.container+"_navigationbar"),o.style.color=i.strokecolor,o.style.backgroundColor=i.fillcolor,o.style.padding=i.padding,o.style.position=i.position,o.style.fontSize=i.fontsize,o.style.cursor=i.cursor,o.style.zIndex=i.zindex,t.containerObj.appendChild(o),o.style.right=i.right,o.style.bottom=i.bottom,void 0!==o.classList&&o.classList.add("JXG_navigation"),t.attr.showfullscreen&&a(t.attr.fullscreen.symbol,(function(){t.toFullscreen(t.attr.fullscreen.id)}),t.container,"fullscreen"),t.attr.showscreenshot&&a(t.attr.screenshot.symbol,(function(){window.setTimeout((function(){t.renderer.screenshot(t,"",!1)}),330)}),t.container,"screenshot"),t.attr.showreload&&a("↻",(function(){t.reload()}),t.container,"reload"),t.attr.showcleartraces&&a("⊗",(function(){t.clearTraces()}),t.container,"cleartraces"),t.attr.shownavigation&&(t.attr.showzoom&&(a("–",t.zoomOut,t.container,"out"),a("o",t.zoom100,t.container,"100"),a("+",t.zoomIn,t.container,"in")),a("←",t.clickLeftArrow,t.container,"left"),a("↓",t.clickUpArrow,t.container,"down"),a("↑",t.clickDownArrow,t.container,"up"),a("→",t.clickRightArrow,t.container,"right")))},getElementById:function(t){var e;return r.Z.exists(this.container)?(e=this.container.id+"_"+t,r.Z.exists(CSS)&&r.Z.exists(CSS.escape)&&(e=CSS.escape(e)),this.container.querySelector("#"+e)):""},removeToInsertLater:function(t){var e=t.parentNode,i=t.nextSibling;if(null!==e)return e.removeChild(t),function(){i?e.insertBefore(t,i):e.appendChild(t)}},resize:function(t,e){},createTouchpoints:function(t){},showTouchpoint:function(t){},hideTouchpoint:function(t){},updateTouchpoint:function(t,e){},dumpToDataURI:function(t){},dumpToCanvas:function(t,e,i,r){},screenshot:function(t){},setLayer:function(t,e){}});var R=t.Z.AbstractRenderer;t.Z.FileReader={handleRemoteFile:function(e,i,s,o,n,a){var h=!1;try{h=new XMLHttpRequest,"raw"===s.toLowerCase()?h.overrideMimeType("text/plain; charset="+n):h.overrideMimeType("text/xml; charset="+n)}catch(t){try{h=new ActiveXObject("Msxml2.XMLHTTP")}catch(t){try{h=new ActiveXObject("Microsoft.XMLHTTP")}catch(t){h=!1}}}if(h){h.open("GET",e,o),"raw"===s.toLowerCase()?this.cbp=function(){var t=h;4===t.readyState&&i(t.responseText)}:this.cbp=function(){var t=h,e="";4===t.readyState&&(e=!r.Z.exists(t.responseStream)||"PK"!==t.responseText.slice(0,2)&&31!==O.asciiCharCodeAt(t.responseText.slice(0,1),0)?t.responseText:M.decode(jxgBinFileReader(t)),this.parseString(e,i,s,a))},this.cb=r.Z.bind(this.cbp,this),h.onreadystatechange=this.cb;try{h.send(null)}catch(t){throw new Error("JSXGraph: A problem occurred while trying to read remote file '"+e+"'.")}}else t.Z.debug("AJAX not activated!")},handleLocalFile:function(t,e,i,s,o,n){r.Z.exists(s)||(s=!0),"raw"===i.toLowerCase()?this.cbp=function(t){e(t.target.result)}:this.cbp=function(t){var r=t.target.result;this.parseString(r,e,i,n)},this.cb=r.Z.bind(this.cbp,this);var a=new FileReader;a.onload=this.cb,"raw"===i.toLowerCase()?a.readAsText(t):a.readAsText(t,o)},parseFileContent:function(t,e,i,s,o,n){r.Z.isString(t)||void 0===FileReader?this.handleRemoteFile(t,e,i,s,o,n):this.handleLocalFile(t,e,i,s,o,n)},parseString:function(e,i,s,o){var n;if(s=s.toLowerCase(),n=t.Z.readers[s],r.Z.exists(n))new n(i,e).read();else if("jessiecode"!==s)throw new Error("JSXGraph: There is no reader available for '"+s+"'.");r.Z.isFunction(o)&&o(i)}},!e.Z.isMetroApp()&&e.Z.isBrowser&&"object"==typeof navigator&&/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent)&&document&&document.write&&document.write('<script type="text/vbscript">\nFunction Base64Encode(inData)\n Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"\n Dim cOut, sOut, I\n For I = 1 To LenB(inData) Step 3\n Dim nGroup, pOut, sGroup\n nGroup = &H10000 * AscB(MidB(inData, I, 1)) + _\n &H100 * MyASC(MidB(inData, I + 1, 1)) + MyASC(MidB(inData, I + 2, 1))\n nGroup = Oct(nGroup)\n nGroup = String(8 - Len(nGroup), "0") & nGroup\n pOut = Mid(Base64, CLng("&o" & Mid(nGroup, 1, 2)) + 1, 1) + _\n Mid(Base64, CLng("&o" & Mid(nGroup, 3, 2)) + 1, 1) + _\n Mid(Base64, CLng("&o" & Mid(nGroup, 5, 2)) + 1, 1) + _\n Mid(Base64, CLng("&o" & Mid(nGroup, 7, 2)) + 1, 1)\n sOut = sOut + pOut\n Next\n Select Case LenB(inData) Mod 3\n Case 1: \'8 bit final\n sOut = Left(sOut, Len(sOut) - 2) + "=="\n Case 2: \'16 bit final\n sOut = Left(sOut, Len(sOut) - 1) + "="\n End Select\n Base64Encode = sOut\nEnd Function\n\nFunction MyASC(OneChar)\n If OneChar = "" Then MyASC = 0 Else MyASC = AscB(OneChar)\nEnd Function\n\nFunction jxgBinFileReader(xhr)\n Dim byteString\n Dim b64String\n Dim i\n byteString = xhr.responseBody\n ReDim byteArray(LenB(byteString))\n For i = 1 To LenB(byteString)\n byteArray(i-1) = AscB(MidB(byteString, i, 1))\n Next\n b64String = Base64Encode(byteString)\n jxgBinFileReader = b64String\nEnd Function\n<\/script>\n');var L=t.Z.FileReader,B=__webpack_require__(632),I=__webpack_require__(254),Y=__webpack_require__(327);t.Z.Composition=function(t){var e,i=this,s=["setAttribute","setParents","prepareUpdate","updateRenderer","update","fullUpdate","highlight","noHighlight"],o=function(t){return function(){var e;for(e in i.elements)i.elements.hasOwnProperty(e)&&r.Z.exists(i.elements[e][t])&&i.elements[e][t].apply(i.elements[e],arguments);return i}};for(e=0;e<s.length;e++)this[s[e]]=o(s[e]);for(e in this.elements={},this.objects=this.elements,this.elementsByName={},this.objectsList=[],this.groups={},this.methodMap={setAttribute:"setAttribute",setProperty:"setAttribute",setParents:"setParents",add:"add",remove:"remove",select:"select"},t)t.hasOwnProperty(e)&&this.add(e,t[e]);this.dump=!0,this.subs={}},t.Z.extend(t.Z.Composition.prototype,{add:function(t,e){return!(r.Z.exists(this[t])||!r.Z.exists(e))&&(r.Z.exists(e.id)?this.elements[e.id]=e:this.elements[t]=e,r.Z.exists(e.name)&&(this.elementsByName[e.name]=e),e.on("attribute:name",this.nameListener,this),this.objectsList.push(e),this[t]=e,this.methodMap[t]=e,!0)},remove:function(t){var e,i=!1;for(e in this.elements)if(this.elements.hasOwnProperty(e)&&this.elements[e].id===this[t].id){i=!0;break}return i&&(delete this.elements[this[t].id],delete this[t]),i},nameListener:function(t,e,i){delete this.elementsByName[t],this.elementsByName[e]=i},select:function(e){return r.Z.exists(t.Z.Board)?t.Z.Board.prototype.select.call(this,e):new t.Z.Composition},getParents:function(){return this.parents},getType:function(){return this.elType},getAttributes:function(){var t,e={};for(t in this.subs)this.subs.hasOwnProperty(t)&&(e[t]=this.subs[t].visProp);return this.attr}});var j=t.Z.Composition;t.Z.Board=function(o,n,a,h,l,c,d,u,p,f,_){if(this.BOARD_MODE_NONE=0,this.BOARD_MODE_DRAG=1,this.BOARD_MODE_MOVE_ORIGIN=2,this.BOARD_MODE_ZOOM=17,this.BOARD_QUALITY_LOW=1,this.BOARD_QUALITY_HIGH=2,r.Z.exists(_.document)&&!1!==_.document?this.document=_.document:e.Z.isBrowser&&(this.document=document),this.container="",this.containerObj=null,r.Z.isString(o)?(this.container=o,this.containerObj=e.Z.isBrowser?this.document.getElementById(this.container):null):e.Z.isBrowser&&(this.containerObj=o,this.container=this.containerObj.getAttribute("id"),null===this.container&&(this.container="null"+parseInt(1e8*Math.random()).toString())),e.Z.isBrowser&&"no"!==n.type&&null===this.containerObj)throw new Error('\nJSXGraph: HTML container element "'+o+'" not found.');this.renderer=n,this.grids=[],this.options=r.Z.deepCopy(k.Z),this.attr=_,"default"!==this.attr.theme&&r.Z.exists(t.Z.themes[this.attr.theme])&&r.Z.mergeAttr(this.options,t.Z.themes[this.attr.theme],!0),this.dimension=2,this.jc=new I.Z,this.jc.use(this),this.origin={},this.origin.usrCoords=[1,0,0],this.origin.scrCoords=[1,h[0],h[1]],this.zoomX=l,this.zoomY=c,this.unitX=d*this.zoomX,this.unitY=u*this.zoomY,this.keepaspectratio=!1,this.canvasWidth=p,this.canvasHeight=f,r.Z.exists(a)&&""!==a&&e.Z.isBrowser&&!r.Z.exists(this.document.getElementById(a))?this.id=a:this.id=this.generateId(),s.Z.eventify(this),this.hooks=[],this.dependentBoards=[],this.inUpdate=!1,this.objects={},this.objectsList=[],this.groups={},this.animationObjects={},this.highlightedObjects={},this.numObjects=0,this.elementsByName={},this.mode=this.BOARD_MODE_NONE,this.updateQuality=this.BOARD_QUALITY_HIGH,this.isSuspendedRedraw=!1,this.calculateSnapSizes(),this.drag_dx=0,this.drag_dy=0,this.drag_position=[0,0],this.mouse={},this.touches=[],this.xmlString="",this.cPos=[],this.touchMoveLast=0,this.touchMoveLastId=1/0,this.positionAccessLast=0,this.downObjects=[],this.clickObjects={},this.focusObjects=[],this.attr.showcopyright&&this.renderer.displayCopyright(i.Z.licenseText,parseInt(this.options.text.fontSize,10)),this.needsFullUpdate=!1,this.reducedUpdate=!1,this.currentCBDef="none",this.geonextCompatibilityMode=!1,this.options.text.useASCIIMathML&&translateASCIIMath?init():this.options.text.useASCIIMathML=!1,this.hasMouseHandlers=!1,this.hasTouchHandlers=!1,this.hasPointerHandlers=!1,this.hasWheelHandlers=!1,this.hasMouseUp=!1,this.hasTouchEnd=!1,this.hasPointerUp=!1,this._drag_offset=[0,0],this._inputDevice="mouse",this._board_touches=[],this.selectingMode=!1,this.isSelecting=!1,this._isScrolling=!1,this._isResizing=!1,this.selectingBox=[[0,0],[0,0]],this.userLog=[],this.mathLib=Math,this.mathLibJXG=t.Z.Math,!0===this.attr.registerevents?this.attr.registerevents={fullscreen:!0,keyboard:!0,pointer:!0,resize:!0,wheel:!0}:"object"==typeof this.attr.registerevents&&(r.Z.exists(this.attr.registerevents.fullscreen)||(this.attr.registerevents.fullscreen=!0),r.Z.exists(this.attr.registerevents.keyboard)||(this.attr.registerevents.keyboard=!0),r.Z.exists(this.attr.registerevents.pointer)||(this.attr.registerevents.pointer=!0),r.Z.exists(this.attr.registerevents.resize)||(this.attr.registerevents.resize=!0),r.Z.exists(this.attr.registerevents.wheel)||(this.attr.registerevents.wheel=!0)),!1!==this.attr.registerevents&&(this.attr.registerevents.fullscreen&&this.addFullscreenEventHandlers(),this.attr.registerevents.keyboard&&this.addKeyboardEventHandlers(),this.attr.registerevents.pointer&&this.addEventHandlers(),this.attr.registerevents.resize&&this.addResizeEventHandlers(),this.attr.registerevents.wheel&&this.addWheelEventHandlers()),this.methodMap={update:"update",fullUpdate:"fullUpdate",on:"on",off:"off",trigger:"trigger",setAttribute:"setAttribute",setBoundingBox:"setBoundingBox",setView:"setBoundingBox",getBoundingBox:"getBoundingBox",BoundingBox:"getBoundingBox",getView:"getBoundingBox",View:"getBoundingBox",migratePoint:"migratePoint",colorblind:"emulateColorblindness",suspendUpdate:"suspendUpdate",unsuspendUpdate:"unsuspendUpdate",clearTraces:"clearTraces",left:"clickLeftArrow",right:"clickRightArrow",up:"clickUpArrow",down:"clickDownArrow",zoomIn:"zoomIn",zoomOut:"zoomOut",zoom100:"zoom100",zoomElements:"zoomElements",remove:"removeObject",removeObject:"removeObject"}},t.Z.extend(t.Z.Board.prototype,{generateName:function(t){var e,s,o=this.attr.maxnamelength,n="",a="",h=[],l="";if(t.type===i.Z.OBJECT_TYPE_TICKS)return"";for(e=r.Z.isPoint(t)||r.Z.isPoint3D(t)?["","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]:t.type===i.Z.OBJECT_TYPE_ANGLE?["","α","β","γ","δ","ε","ζ","η","θ","ι","κ","λ","μ","ν","ξ","ο","π","ρ","σ","τ","υ","φ","χ","ψ","ω"]:["","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"],r.Z.isPoint(t)||t.elementClass===i.Z.OBJECT_CLASS_LINE||t.type===i.Z.OBJECT_TYPE_ANGLE||(n=t.type===i.Z.OBJECT_TYPE_POLYGON?"P_{":t.elementClass===i.Z.OBJECT_CLASS_CIRCLE?"k_{":t.elementClass===i.Z.OBJECT_CLASS_TEXT?"t_{":"s_{",a="}"),s=0;s<o;s++)h[s]=0;for(;h[o-1]<e.length;){for(h[0]=1;h[0]<e.length;h[0]++){for(l=n,s=o;s>0;s--)l+=e[h[s-1]];if(!r.Z.exists(this.elementsByName[l+a]))return l+a}for(h[0]=e.length,s=1;s<o;s++)h[s-1]===e.length&&(h[s-1]=1,h[s]+=1)}return""},generateId:function(){for(var e=1;r.Z.exists(t.Z.boards["jxgBoard"+e]);)e=Math.round(65535*Math.random());return"jxgBoard"+e},setId:function(t,e){var i,s=this.numObjects,o=t.id;if(this.numObjects+=1,""===o||!r.Z.exists(o))for(o=this.id+e+s;r.Z.exists(this.objects[o]);)i=Math.round(65535*Math.random()),o=this.id+e+s+"-"+i;return t.id=o,this.objects[o]=t,t._pos=this.objectsList.length,this.objectsList[this.objectsList.length]=t,o},finalizeAdding:function(t){!1===r.Z.evaluate(t.visProp.visible)&&this.renderer.display(t,!1)},finalizeLabel:function(t){t.hasLabel&&!r.Z.evaluate(t.label.visProp.islabel)&&!1===r.Z.evaluate(t.label.visProp.visible)&&this.renderer.display(t.label,!1)},checkFrameRate:function(t){var e=!1,i=(new Date).getTime();return r.Z.exists(t.pointerId)&&this.touchMoveLastId!==t.pointerId&&(e=!0,this.touchMoveLastId=t.pointerId),!e&&(i-this.touchMoveLast)*this.attr.maxframerate>=1e3&&(e=!0),e&&(this.touchMoveLast=i),e},getCoordsTopLeftCorner:function(){var t,i,s,o,n,a=this.document.ownerDocument||this.document,h=a.documentElement||this.document.body.parentNode,l=a.body,c=this.containerObj;if(this.cPos.length>0&&(this.mode===this.BOARD_MODE_DRAG||this.mode===this.BOARD_MODE_MOVE_ORIGIN||(new Date).getTime()-this.positionAccessLast<1e3))return this.cPos;if(this.positionAccessLast=(new Date).getTime(),c.getBoundingClientRect){for(s=c.getBoundingClientRect(),o=1,n=c;n&&r.Z.exists(n.parentNode);)r.Z.exists(n.style)&&r.Z.exists(n.style.zoom)&&""!==n.style.zoom&&(o*=parseFloat(n.style.zoom)),n=n.parentNode;return(t=[s.left*o,s.top*o])[0]+=e.Z.getProp(c,"border-left-width"),t[1]+=e.Z.getProp(c,"border-top-width"),"vml"!==this.renderer.type&&(t[0]+=e.Z.getProp(c,"padding-left"),t[1]+=e.Z.getProp(c,"padding-top")),this.cPos=t.slice(),this.cPos}return t=e.Z.getOffset(c),i=this.document.documentElement.ownerDocument,!this.containerObj.currentStyle&&i.defaultView&&(t[0]+=e.Z.getProp(h,"margin-left"),t[1]+=e.Z.getProp(h,"margin-top"),t[0]+=e.Z.getProp(h,"border-left-width"),t[1]+=e.Z.getProp(h,"border-top-width"),t[0]+=e.Z.getProp(h,"padding-left"),t[1]+=e.Z.getProp(h,"padding-top")),l&&(t[0]+=e.Z.getProp(l,"left"),t[1]+=e.Z.getProp(l,"top")),"object"==typeof google&&google.translate&&(t[0]+=10,t[1]+=25),t[0]+=e.Z.getProp(c,"border-left-width"),t[1]+=e.Z.getProp(c,"border-top-width"),"vml"!==this.renderer.type&&(t[0]+=e.Z.getProp(c,"padding-left"),t[1]+=e.Z.getProp(c,"padding-top")),t[0]+=this.attr.offsetx,t[1]+=this.attr.offsety,this.cPos=t.slice(),this.cPos},getPointLoc:function(t,e){var i,s,o,n;return i=this.getBoundingBox(),2===(s=t).length&&s.unshift(void 0),o=[0,0],n=e||0,r.Z.isNumber(n)&&(n=[n,n,n,n]),s[1]>i[2]-n[1]&&(o[0]=1),s[1]<i[0]+n[3]&&(o[0]=-1),s[2]>i[1]-n[0]&&(o[1]=1),s[2]<i[3]+n[2]&&(o[1]=-1),o},getLocationOrigin:function(t){return this.getPointLoc([0,0],t)},getMousePosition:function(t,i){var r,s,n=this.getCoordsTopLeftCorner();return r=e.Z.getPosition(t,i,this.document),this.updateCSSTransforms(),s=[1,r[0]-n[0],r[1]-n[1]],(s=o.Z.matVecMult(this.cssTransMat,s))[1]/=s[0],s[2]/=s[0],[s[1],s[2]]},initMoveOrigin:function(t,e){this.drag_dx=t-this.origin.scrCoords[1],this.drag_dy=e-this.origin.scrCoords[2],this.mode=this.BOARD_MODE_MOVE_ORIGIN,this.updateQuality=this.BOARD_QUALITY_LOW},initMoveObject:function(t,e,s,o){var n,a,h,l=[],c=[],d=this.objectsList.length,u={visProp:{layer:-1e4}};for(this._shiftKey=s.shiftKey,this._ctrlKey=s.ctrlKey,a=0;a<d;a++)h=(n=this.objectsList[a]).hasPoint&&n.hasPoint(t,e),n.visPropCalc.visible&&h&&(n.triggerEventHandlers([o+"down","down"],[s]),this.downObjects.push(n)),h&&n.isDraggable&&n.visPropCalc.visible&&(this.geonextCompatibilityMode&&(r.Z.isPoint(n)||n.elementClass===i.Z.OBJECT_CLASS_TEXT)||!this.geonextCompatibilityMode)&&!r.Z.evaluate(n.visProp.fixed)&&(n.visProp.layer>u.visProp.layer||n.visProp.layer===u.visProp.layer&&n.lastDragTime.getTime()>=u.lastDragTime.getTime())&&(this.attr.ignorelabels&&r.Z.exists(u.label)&&n===u.label||(u=n,l.push(u),r.Z.exists(u.coords)?c.push(p.Z.subtract(u.coords.scrCoords.slice(1),[t,e])):c.push([0,0])));return this.attr.drag.enabled&&l.length>0&&(this.mode=this.BOARD_MODE_DRAG),this.attr.takefirst?(l.length=1,this._drag_offset=c[0]):(l=l.slice(-1),this._drag_offset=c[c.length-1]),this._drag_offset||(this._drag_offset=[0,0]),"svg"===this.renderer.type&&r.Z.exists(l[0])&&r.Z.evaluate(l[0].visProp.dragtotopoflayer)&&1===l.length&&r.Z.exists(l[0].rendNode)&&l[0].rendNode.parentNode.appendChild(l[0].rendNode),l.length>=1&&(l[0].highlight(!0),this.triggerEventHandlers(["mousehit","hit"],[s,l[0]])),l},moveObject:function(t,e,s,o,n){var a,h,l,c=new u.Z(i.Z.COORDS_BY_SCREEN,this.getScrCoordsOfMouse(t,e),this);s&&s.obj&&((a=s.obj).coords&&(h=a.coords.scrCoords.slice()),this.addLogEntry("drag",a,c.usrCoords.slice(1)),this.drag_position=[c.scrCoords[1],c.scrCoords[2]],this.drag_position=p.Z.add(this.drag_position,this._drag_offset),this._shiftKey=o.shiftKey,this._ctrlKey=o.ctrlKey,r.Z.exists(a.coords)?a.setPositionDirectly(i.Z.COORDS_BY_SCREEN,this.drag_position):(this.displayInfobox(!1),isNaN(s.targets[0].Xprev+s.targets[0].Yprev)||a.setPositionDirectly(i.Z.COORDS_BY_SCREEN,[c.scrCoords[1],c.scrCoords[2]],[s.targets[0].Xprev,s.targets[0].Yprev]),s.targets[0].Xprev=c.scrCoords[1],s.targets[0].Yprev=c.scrCoords[2]),r.Z.exists(a.coords)&&(a.prepareUpdate().update(!1).updateRenderer(),this.updateInfobox(a),a.prepareUpdate().update(!0).updateRenderer()),a.coords&&(l=a.coords.scrCoords),a.coords&&h[1]===l[1]&&h[2]===l[2]||(a.triggerEventHandlers([n+"drag","drag"],[o]),this.update()),a.highlight(!0),this.triggerEventHandlers(["mousehit","hit"],[o,a]),a.lastDragTime=new Date)},twoFingerMove:function(t,e,s){var o;r.Z.exists(t)&&r.Z.exists(t.obj)&&((o=t.obj).elementClass===i.Z.OBJECT_CLASS_LINE||o.type===i.Z.OBJECT_TYPE_POLYGON?this.twoFingerTouchObject(t.targets,o,e):o.elementClass===i.Z.OBJECT_CLASS_CIRCLE&&this.twoFingerTouchCircle(t.targets,o,e),s&&o.triggerEventHandlers(["touchdrag","drag"],[s]))},getTwoFingerTransform(t,e,r,s){var n,a,h,l,c,d,p,f,_,m,g,b,v,Z,C,y,P;return a=(n=new u.Z(i.Z.COORDS_BY_SCREEN,[t.Xprev,t.Yprev],this).usrCoords)[1],h=n[2],l=(n=new u.Z(i.Z.COORDS_BY_SCREEN,[e.Xprev,e.Yprev],this).usrCoords)[1],c=n[2],f=(n=new u.Z(i.Z.COORDS_BY_SCREEN,[t.X,t.Y],this).usrCoords)[1],_=n[2],Z=((b=(m=(n=new u.Z(i.Z.COORDS_BY_SCREEN,[e.X,e.Y],this).usrCoords)[1])-f)*(d=l-a)+(v=(g=n[2])-_)*(p=c-h))/(y=d*d+p*p),C=(v*d-b*p)/y,r||(Z/=P=o.Z.hypot(Z,C),C/=P),s||(C=0),[1,0,0,.5*(f+m-Z*(a+l)+C*(h+c)),Z,-C,.5*(_+g-C*(a+l)-Z*(h+c)),C,Z]},twoFingerTouchObject:function(t,e,s){var o,n,a,h,l,c,d=!1;if(r.Z.exists(t[0])&&r.Z.exists(t[1])&&!isNaN(t[0].Xprev+t[0].Yprev+t[1].Xprev+t[1].Yprev)){if(n=this.getTwoFingerTransform(t[0],t[1],r.Z.evaluate(e.visProp.scalable),r.Z.evaluate(e.visProp.rotatable)),(o=this.create("transform",n,{type:"generic"})).update(),e.elementClass===i.Z.OBJECT_CLASS_LINE)a=[],e.point1.draggable()&&a.push(e.point1),e.point2.draggable()&&a.push(e.point2),o.applyOnce(a);else if(e.type===i.Z.OBJECT_TYPE_POLYGON){for(l=e.vertices.length-1,c=e.visProp,d=r.Z.evaluate(c.snaptogrid)||r.Z.evaluate(c.snaptopoints),h=0;h<l&&!d;++h)c=e.vertices[h].visProp,d=(d=d||r.Z.evaluate(c.snaptogrid)||r.Z.evaluate(c.snaptopoints))||!e.vertices[h].draggable();if(!d){for(a=[],h=0;h<l;++h)e.vertices[h].draggable()&&a.push(e.vertices[h]);o.applyOnce(a)}}this.update(),e.highlight(!0)}},twoFingerTouchCircle:function(t,e,s){var o,n,a,l,c,d,p,f,_,m,g;"pointCircle"!==e.method&&"pointLine"!==e.method&&r.Z.exists(t[0])&&r.Z.exists(t[1])&&!isNaN(t[0].Xprev+t[0].Yprev+t[1].Xprev+t[1].Yprev)&&(s===t[0].num?(o=t[1],n=t[0]):(o=t[0],n=t[1]),c=new u.Z(i.Z.COORDS_BY_SCREEN,[o.Xprev,o.Yprev],this).usrCoords,l=new u.Z(i.Z.COORDS_BY_SCREEN,[n.Xprev,n.Yprev],this).usrCoords,a=new u.Z(i.Z.COORDS_BY_SCREEN,[n.X,n.Y],this).usrCoords,p=h.Z.rad(l.slice(1),c.slice(1),a.slice(1)),f=this.create("transform",[-c[1],-c[2]],{type:"translate"}),_=this.create("transform",[p],{type:"rotate"}),f.melt(_),r.Z.evaluate(e.visProp.scalable)&&(d=h.Z.distance(c,a)/h.Z.distance(c,l),m=this.create("transform",[d,d],{type:"scale"}),f.melt(m)),g=this.create("transform",[c[1],c[2]],{type:"translate"}),f.melt(g),e.center.draggable()&&f.applyOnce([e.center]),"twoPoints"===e.method?e.point2.draggable()&&f.applyOnce([e.point2]):"pointRadius"===e.method&&r.Z.isNumber(e.updateRadius.origin)&&e.setRadius(e.radius*d),this.update(e.center),e.highlight(!0))},highlightElements:function(t,e,i,s){var o,n,a,h={},l=this.objectsList.length;for(o=0;o<l;o++)a=(n=this.objectsList[o]).id,r.Z.exists(n.hasPoint)&&n.visPropCalc.visible&&n.hasPoint(t,e)&&(this.updateInfobox(n),r.Z.exists(this.highlightedObjects[a])||(h[a]=n,n.highlight(),this.triggerEventHandlers(["mousehit","hit"],[i,n,s])),n.mouseover?n.triggerEventHandlers(["mousemove","move"],[i]):(n.triggerEventHandlers(["mouseover","over"],[i]),n.mouseover=!0));for(o=0;o<l;o++)a=(n=this.objectsList[o]).id,n.mouseover&&(h[a]||(n.triggerEventHandlers(["mouseout","out"],[i]),n.mouseover=!1))},saveStartPos:function(e,s){var o,n,a=[];if(e.type===i.Z.OBJECT_TYPE_TICKS)a.push([1,NaN,NaN]);else if(e.elementClass===i.Z.OBJECT_CLASS_LINE)a.push(e.point1.coords.usrCoords),a.push(e.point2.coords.usrCoords);else if(e.elementClass===i.Z.OBJECT_CLASS_CIRCLE)a.push(e.center.coords.usrCoords),"twoPoints"===e.method&&a.push(e.point2.coords.usrCoords);else if(e.type===i.Z.OBJECT_TYPE_POLYGON)for(n=e.vertices.length-1,o=0;o<n;o++)a.push(e.vertices[o].coords.usrCoords);else if(e.type===i.Z.OBJECT_TYPE_SECTOR)a.push(e.point1.coords.usrCoords),a.push(e.point2.coords.usrCoords),a.push(e.point3.coords.usrCoords);else if(r.Z.isPoint(e)||e.type===i.Z.OBJECT_TYPE_GLIDER)a.push(e.coords.usrCoords);else if(e.elementClass===i.Z.OBJECT_CLASS_CURVE)e.points.length>0&&a.push(e.points[0].usrCoords);else try{a.push(e.coords.usrCoords)}catch(e){t.Z.debug("JSXGraph+ saveStartPos: obj.coords.usrCoords not available: "+e)}for(n=a.length,o=0;o<n;o++)s.Zstart.push(a[o][0]),s.Xstart.push(a[o][1]),s.Ystart.push(a[o][2])},mouseOriginMoveStart:function(t){var e,i;return(e=this._isRequiredKeyPressed(t,"pan"))&&(i=this.getMousePosition(t),this.initMoveOrigin(i[0],i[1])),e},mouseOriginMove:function(t){var e,i=this.mode===this.BOARD_MODE_MOVE_ORIGIN;return i&&(e=this.getMousePosition(t),this.moveOrigin(e[0],e[1],!0)),i},touchStartMoveOriginOneFinger:function(t){var e,i,r=t.touches;return(e=this.attr.pan.enabled&&!this.attr.pan.needtwofingers&&1===r.length)&&(i=this.getMousePosition(t,0),this.initMoveOrigin(i[0],i[1])),e},touchOriginMove:function(t){var e,i=this.mode===this.BOARD_MODE_MOVE_ORIGIN;return i&&(e=this.getMousePosition(t,0),this.moveOrigin(e[0],e[1],!0)),i},originMoveEnd:function(){this.updateQuality=this.BOARD_QUALITY_HIGH,this.mode=this.BOARD_MODE_NONE},addEventHandlers:function(){e.Z.supportsPointerEvents()?this.addPointerEventHandlers():(this.addMouseEventHandlers(),this.addTouchEventHandlers()),null!==this.containerObj&&(this.containerObj.oncontextmenu=function(t){return r.Z.exists(t)&&t.preventDefault(),!1})},addResizeEventHandlers:function(){if(e.Z.isBrowser){try{this.startResizeObserver()}catch(t){e.Z.addEvent(window,"resize",this.resizeListener,this),this.startIntersectionObserver()}e.Z.addEvent(window,"scroll",this.scrollListener,this)}},removeEventHandlers:function(){this.removeMouseEventHandlers(),this.removeTouchEventHandlers(),this.removePointerEventHandlers(),this.removeFullscreenEventHandlers(),this.removeKeyboardEventHandlers(),e.Z.isBrowser&&(r.Z.exists(this.resizeObserver)?this.stopResizeObserver():(e.Z.removeEvent(window,"resize",this.resizeListener,this),this.stopIntersectionObserver()),e.Z.removeEvent(window,"scroll",this.scrollListener,this))},addPointerEventHandlers:function(){if(!this.hasPointerHandlers&&e.Z.isBrowser){var t=this.attr.movetarget||this.containerObj;window.navigator.msPointerEnabled?(e.Z.addEvent(this.containerObj,"MSPointerDown",this.pointerDownListener,this),e.Z.addEvent(t,"MSPointerMove",this.pointerMoveListener,this)):(e.Z.addEvent(this.containerObj,"pointerdown",this.pointerDownListener,this),e.Z.addEvent(t,"pointermove",this.pointerMoveListener,this),e.Z.addEvent(t,"pointerleave",this.pointerLeaveListener,this),e.Z.addEvent(t,"click",this.pointerClickListener,this),e.Z.addEvent(t,"dblclick",this.pointerDblClickListener,this)),null!==this.containerObj&&(this.containerObj.style.touchAction="none"),this.hasPointerHandlers=!0}},addMouseEventHandlers:function(){if(!this.hasMouseHandlers&&e.Z.isBrowser){var t=this.attr.movetarget||this.containerObj;e.Z.addEvent(this.containerObj,"mousedown",this.mouseDownListener,this),e.Z.addEvent(t,"mousemove",this.mouseMoveListener,this),e.Z.addEvent(t,"click",this.mouseClickListener,this),e.Z.addEvent(t,"dblclick",this.mouseDblClickListener,this),this.hasMouseHandlers=!0}},addTouchEventHandlers:function(t){if(!this.hasTouchHandlers&&e.Z.isBrowser){var i=this.attr.movetarget||this.containerObj;e.Z.addEvent(this.containerObj,"touchstart",this.touchStartListener,this),e.Z.addEvent(i,"touchmove",this.touchMoveListener,this),this.hasTouchHandlers=!0}},addWheelEventHandlers:function(){!this.hasWheelHandlers&&e.Z.isBrowser&&(e.Z.addEvent(this.containerObj,"mousewheel",this.mouseWheelListener,this),e.Z.addEvent(this.containerObj,"DOMMouseScroll",this.mouseWheelListener,this),this.hasWheelHandlers=!0)},addFullscreenEventHandlers:function(){var t,i=["fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange"],r=i.length;if(!this.hasFullscreenEventHandlers&&e.Z.isBrowser){for(t=0;t<r;t++)e.Z.addEvent(this.document,i[t],this.fullscreenListener,this);this.hasFullscreenEventHandlers=!0}},addKeyboardEventHandlers:function(){this.attr.keyboard.enabled&&!this.hasKeyboardHandlers&&e.Z.isBrowser&&(e.Z.addEvent(this.containerObj,"keydown",this.keyDownListener,this),e.Z.addEvent(this.containerObj,"focusin",this.keyFocusInListener,this),e.Z.addEvent(this.containerObj,"focusout",this.keyFocusOutListener,this),this.hasKeyboardHandlers=!0)},removeKeyboardEventHandlers:function(){this.hasKeyboardHandlers&&e.Z.isBrowser&&(e.Z.removeEvent(this.containerObj,"keydown",this.keyDownListener,this),e.Z.removeEvent(this.containerObj,"focusin",this.keyFocusInListener,this),e.Z.removeEvent(this.containerObj,"focusout",this.keyFocusOutListener,this),this.hasKeyboardHandlers=!1)},removeFullscreenEventHandlers:function(){var t,i=["fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange"],r=i.length;if(this.hasFullscreenEventHandlers&&e.Z.isBrowser){for(t=0;t<r;t++)e.Z.removeEvent(this.document,i[t],this.fullscreenListener,this);this.hasFullscreenEventHandlers=!1}},removePointerEventHandlers:function(){if(this.hasPointerHandlers&&e.Z.isBrowser){var t=this.attr.movetarget||this.containerObj;window.navigator.msPointerEnabled?(e.Z.removeEvent(this.containerObj,"MSPointerDown",this.pointerDownListener,this),e.Z.removeEvent(t,"MSPointerMove",this.pointerMoveListener,this)):(e.Z.removeEvent(this.containerObj,"pointerdown",this.pointerDownListener,this),e.Z.removeEvent(t,"pointermove",this.pointerMoveListener,this),e.Z.removeEvent(t,"pointerleave",this.pointerLeaveListener,this),e.Z.removeEvent(t,"click",this.pointerClickListener,this),e.Z.removeEvent(t,"dblclick",this.pointerDblClickListener,this)),this.hasWheelHandlers&&(e.Z.removeEvent(this.containerObj,"mousewheel",this.mouseWheelListener,this),e.Z.removeEvent(this.containerObj,"DOMMouseScroll",this.mouseWheelListener,this)),this.hasPointerUp&&(window.navigator.msPointerEnabled?e.Z.removeEvent(this.document,"MSPointerUp",this.pointerUpListener,this):(e.Z.removeEvent(this.document,"pointerup",this.pointerUpListener,this),e.Z.removeEvent(this.document,"pointercancel",this.pointerUpListener,this)),this.hasPointerUp=!1),this.hasPointerHandlers=!1}},removeMouseEventHandlers:function(){if(this.hasMouseHandlers&&e.Z.isBrowser){var t=this.attr.movetarget||this.containerObj;e.Z.removeEvent(this.containerObj,"mousedown",this.mouseDownListener,this),e.Z.removeEvent(t,"mousemove",this.mouseMoveListener,this),e.Z.removeEvent(t,"click",this.mouseClickListener,this),e.Z.removeEvent(t,"dblclick",this.mouseDblClickListener,this),this.hasMouseUp&&(e.Z.removeEvent(this.document,"mouseup",this.mouseUpListener,this),this.hasMouseUp=!1),this.hasWheelHandlers&&(e.Z.removeEvent(this.containerObj,"mousewheel",this.mouseWheelListener,this),e.Z.removeEvent(this.containerObj,"DOMMouseScroll",this.mouseWheelListener,this)),this.hasMouseHandlers=!1}},removeTouchEventHandlers:function(){if(this.hasTouchHandlers&&e.Z.isBrowser){var t=this.attr.movetarget||this.containerObj;e.Z.removeEvent(this.containerObj,"touchstart",this.touchStartListener,this),e.Z.removeEvent(t,"touchmove",this.touchMoveListener,this),this.hasTouchEnd&&(e.Z.removeEvent(this.document,"touchend",this.touchEndListener,this),this.hasTouchEnd=!1),this.hasTouchHandlers=!1}},clickLeftArrow:function(){return this.moveOrigin(this.origin.scrCoords[1]+.1*this.canvasWidth,this.origin.scrCoords[2]),this},clickRightArrow:function(){return this.moveOrigin(this.origin.scrCoords[1]-.1*this.canvasWidth,this.origin.scrCoords[2]),this},clickUpArrow:function(){return this.moveOrigin(this.origin.scrCoords[1],this.origin.scrCoords[2]-.1*this.canvasHeight),this},clickDownArrow:function(){return this.moveOrigin(this.origin.scrCoords[1],this.origin.scrCoords[2]+.1*this.canvasHeight),this},gestureChangeListener:function(t){var e,s,o,n,a,l,c,d,p,f,_,m,g,b=!1,v=this.attr.zoom.factorx,Z=this.attr.zoom.factory,C=!1;return this.mode!==this.BOARD_MODE_ZOOM||(t.preventDefault(),l=h.Z.distance([t.touches[0].clientX,t.touches[0].clientY],[t.touches[1].clientX,t.touches[1].clientY],2),void 0===t.scale&&(t.scale=l/this.prevDist),!!r.Z.exists(this.prevCoords)&&(s=[t.touches[0].clientX-this.prevCoords[0][0],t.touches[0].clientY-this.prevCoords[0][1]],o=[t.touches[1].clientX-this.prevCoords[1][0],t.touches[1].clientY-this.prevCoords[1][1]],s[0]*s[0]+s[1]*s[1]<100&&o[0]*o[0]+o[1]*o[1]<100||(n=h.Z.rad(s,[0,0],o),"pan"!==this.isPreviousGesture&&Math.abs(n)>.2*Math.PI&&Math.abs(n)<1.8*Math.PI&&(b=!0),"pan"===this.isPreviousGesture||b||(Math.abs(t.scale)<.77||Math.abs(t.scale)>1.3)&&(b=!0),a=t.scale/this.prevScale,this.prevScale=t.scale,this.prevCoords=[[t.touches[0].clientX,t.touches[0].clientY],[t.touches[1].clientX,t.touches[1].clientY]],e=new u.Z(i.Z.COORDS_BY_SCREEN,this.getMousePosition(t,0),this),this.attr.pan.enabled&&this.attr.pan.needtwofingers&&!b?(this.isPreviousGesture="pan",this.moveOrigin(e.scrCoords[1],e.scrCoords[2],!0)):this.attr.zoom.enabled&&Math.abs(a-1)<.5&&(C=!1,p=this.attr.zoom.center,(this.attr.zoom.pinchhorizontal||this.attr.zoom.pinchvertical)&&(f=Math.abs(t.touches[0].clientX-t.touches[1].clientX),_=Math.abs(t.touches[0].clientY-t.touches[1].clientY),c=Math.abs(Math.atan2(_,f)),d=Math.PI*this.attr.zoom.pinchsensitivity/90),!this.keepaspectratio&&this.attr.zoom.pinchhorizontal&&c<d?(this.attr.zoom.factorx=a,this.attr.zoom.factory=1,m=0,g=0,C=!0):!this.keepaspectratio&&this.attr.zoom.pinchvertical&&Math.abs(c-.5*Math.PI)<d?(this.attr.zoom.factorx=1,this.attr.zoom.factory=a,m=0,g=0,C=!0):this.attr.zoom.pinch&&(this.attr.zoom.factorx=a,this.attr.zoom.factory=a,m=e.usrCoords[1],g=e.usrCoords[2],C=!0),C&&("board"===p?this.zoomIn():this.zoomIn(m,g),this.attr.zoom.factorx=v,this.attr.zoom.factory=Z))),!1))},gestureStartListener:function(t){var e;return t.preventDefault(),this.prevScale=1,this.prevDist=h.Z.distance([t.touches[0].clientX,t.touches[0].clientY],[t.touches[1].clientX,t.touches[1].clientY],2),this.prevCoords=[[t.touches[0].clientX,t.touches[0].clientY],[t.touches[1].clientX,t.touches[1].clientY]],this.isPreviousGesture="none",e=this.getMousePosition(t,0),this.initMoveOrigin(e[0],e[1]),this.mode=this.BOARD_MODE_ZOOM,!1},_isRequiredKeyPressed:function(t,e){var i=this.attr[e];return!!i.enabled&&!(!(i.needshift&&t.shiftKey||!i.needshift&&!t.shiftKey)||!(i.needctrl&&t.ctrlKey||!i.needctrl&&!t.ctrlKey))},_isPointerRegistered:function(t){var e,i=this._board_touches.length;for(e=0;e<i;e++)if(this._board_touches[e].pointerId===t.pointerId)return!0;return!1},_pointerStorePosition:function(t){var e,i;for(e=0,i=!1;e<this._board_touches.length;e++)if(this._board_touches[e].pointerId===t.pointerId){this._board_touches[e].clientX=t.clientX,this._board_touches[e].clientY=t.clientY,i=!0;break}return!i&&this._board_touches.length<2&&this._board_touches.push({pointerId:t.pointerId,clientX:t.clientX,clientY:t.clientY}),this},_pointerRemoveTouches:function(t){var e;for(e=0;e<this._board_touches.length;e++)if(this._board_touches[e].pointerId===t.pointerId){this._board_touches.splice(e,1);break}return this},_pointerClearTouches:function(t){this._board_touches.length>0&&this.dehighlightAll(),this.updateQuality=this.BOARD_QUALITY_HIGH,this.mode=this.BOARD_MODE_NONE,this._board_touches=[],this.touches=[]},_getPointerInputDevice:function(t){if(e.Z.isBrowser){if("touch"===t.pointerType||window.navigator.msMaxTouchPoints&&window.navigator.msMaxTouchPoints>1)return"touch";if("mouse"===t.pointerType)return"mouse";if("pen"===t.pointerType)return"pen"}return"mouse"},pointerDownListener:function(t,i,s){var o,n,a,h,l,c,d,u,p,f,_;if(!i&&this._isPointerRegistered(t))return!1;if(null===r.Z.evaluate(this.attr.movetarget)&&r.Z.exists(t.target)&&r.Z.exists(t.target.releasePointerCapture)&&t.target.releasePointerCapture(t.pointerId),!i&&t.isPrimary,this.hasPointerUp||(window.navigator.msPointerEnabled?e.Z.addEvent(this.document,"MSPointerUp",this.pointerUpListener,this):(e.Z.addEvent(this.document,"pointerup",this.pointerUpListener,this),e.Z.addEvent(this.document,"pointercancel",this.pointerUpListener,this)),this.hasPointerUp=!0),this.hasMouseHandlers&&this.removeMouseEventHandlers(),this.hasTouchHandlers&&this.removeTouchEventHandlers(),this.document.selection&&r.Z.isFunction(this.document.selection.empty))this.document.selection.empty();else if(window.getSelection&&(c=window.getSelection()).removeAllRanges)try{c.removeAllRanges()}catch(t){}if(this._inputDevice=this._getPointerInputDevice(t),u=this._inputDevice,this.options.precision.hasPoint=this.options.precision[u],h=this.getMousePosition(t),this._testForSelection(t),this.selectingMode)return this._startSelecting(h),void this.triggerEventHandlers(["touchstartselecting","pointerstartselecting","startselecting"],[t]);if(this.attr.drag.enabled&&i?(l=[i],this.mode=this.BOARD_MODE_DRAG):l=this.initMoveObject(h[0],h[1],t,u),d={num:t.pointerId,X:h[0],Y:h[1],Xprev:NaN,Yprev:NaN,Xstart:[],Ystart:[],Zstart:[]},l.length>0){for(f=l[l.length-1],p=!1,o=0;o<this.touches.length;o++)if(this.touches[o].obj===f){n=o,a=this.touches[o].targets.push(d)-1,p=!0;break}p||(a=0,n=this.touches.push({obj:f,targets:[d]})-1),this.dehighlightAll(),f.highlight(!0),this.saveStartPos(f,this.touches[n].targets[a]),t&&t.preventDefault&&!s&&t.preventDefault()}return this.touches.length>0&&!s&&(t.preventDefault(),t.stopPropagation()),!!e.Z.isBrowser&&("touch"!==this._getPointerInputDevice(t)?this.mode===this.BOARD_MODE_NONE&&this.mouseOriginMoveStart(t):(this._pointerStorePosition(t),t.touches=this._board_touches,1===t.touches.length&&this.mode===this.BOARD_MODE_NONE&&this.touchStartMoveOriginOneFinger(t)||2!==t.touches.length||this.mode!==this.BOARD_MODE_NONE&&this.mode!==this.BOARD_MODE_MOVE_ORIGIN||(this.mode===this.BOARD_MODE_MOVE_ORIGIN&&this.originMoveEnd(),this.gestureStartListener(t))),_="none",this.mode!==this.BOARD_MODE_NONE||!r.Z.evaluate(this.attr.browserpan)||r.Z.evaluate(this.attr.pan.enabled)&&!r.Z.evaluate(this.attr.pan.needtwofingers)||(_="pan-x pan-y"),this.containerObj.style.touchAction=_,this.triggerEventHandlers(["touchstart","down","pointerdown","MSPointerDown"],[t]),!0)},_handleClicks:function(t,e){var i,s,o=this;if(this.selectingMode)t.stopPropagation();else{if(s=r.Z.evaluate(this.attr.clickdelay),r.Z.evaluate(this.attr.dblclicksuppressclick))this._preventSingleClick=!1,this._singleClickTimer=setTimeout((function(){if(!o._preventSingleClick)for(i in o.triggerEventHandlers(e,[t]),o.clickObjects)o.clickObjects.hasOwnProperty(i)&&(o.clickObjects[i].triggerEventHandlers(e,[t]),delete o.clickObjects[i])}),s);else{for(i in o.triggerEventHandlers(e,[t]),o.clickObjects)o.clickObjects.hasOwnProperty(i)&&o.clickObjects[i].triggerEventHandlers(e,[t]);setTimeout((function(){for(i in o.clickObjects)o.clickObjects.hasOwnProperty(i)&&delete o.clickObjects[i]}),s)}t.stopPropagation()}},_handleDblClicks:function(t,e){var i;if(this.selectingMode)t.stopPropagation();else{for(i in this._preventSingleClick=!0,clearTimeout(this._singleClickTimer),this.triggerEventHandlers(e,[t]),this.clickObjects)this.clickObjects.hasOwnProperty(i)&&(this.clickObjects[i].triggerEventHandlers(e,[t]),delete this.clickObjects[i]);t.stopPropagation()}},pointerClickListener:function(t){this._handleClicks(t,["click","pointerclick"])},pointerDblClickListener:function(t){this._handleDblClicks(t,["dblclick","pointerdblclick"])},mouseClickListener:function(t){this._handleClicks(t,["click","mouseclick"])},mouseDblClickListener:function(t){this._handleDblClicks(t,["dblclick","mousedblclick"])},pointerMoveListener:function(t){var e,i,s,o,n,a;if("touch"===this._getPointerInputDevice(t)&&!this._isPointerRegistered(t))return this.BOARD_MODE_NONE;if(!this.checkFrameRate(t))return!1;if(this.mode!==this.BOARD_MODE_DRAG&&(this.dehighlightAll(),this.displayInfobox(!1)),this.mode!==this.BOARD_MODE_NONE&&(t.preventDefault(),t.stopPropagation()),this.updateQuality=this.BOARD_QUALITY_LOW,this._inputDevice=this._getPointerInputDevice(t),a=this._inputDevice,this.options.precision.hasPoint=this.options.precision[a],o=.3333*this.options.precision.hasPoint,s=this.getMousePosition(t),null===r.Z.evaluate(this.attr.movetarget)&&s[0]<=o||s[1]<=o||s[0]>=this.canvasWidth-o||s[1]>=this.canvasHeight-o)return this.mode===this.BOARD_MODE_NONE;if(this.selectingMode)this._moveSelecting(s),this.triggerEventHandlers(["touchmoveselecting","moveselecting","pointermoveselecting"],[t,this.mode]);else if(!this.mouseOriginMove(t))if(this.mode===this.BOARD_MODE_DRAG){for(e=0;e<this.touches.length;e++)for(n=this.touches[e].targets,i=0;i<n.length;i++)if(n[i].num===t.pointerId){n[i].X=s[0],n[i].Y=s[1],1===n.length?this.moveObject(s[0],s[1],this.touches[e],t,a):2===n.length&&(this.twoFingerMove(this.touches[e],t.pointerId,t),n[i].Xprev=s[0],n[i].Yprev=s[1]);break}}else"touch"===this._getPointerInputDevice(t)&&(this._pointerStorePosition(t),2===this._board_touches.length&&(t.touches=this._board_touches,this.gestureChangeListener(t))),this.highlightElements(s[0],s[1],t,-1);return this.triggerEventHandlers(["pointermove","MSPointerMove","move"],[t,this.mode]),this.updateQuality=this.BOARD_QUALITY_HIGH,this.mode===this.BOARD_MODE_NONE},pointerUpListener:function(t){var i,s,o,n,a,h=!1;if(this.triggerEventHandlers(["touchend","up","pointerup","MSPointerUp"],[t]),this.displayInfobox(!1),t)for(i=0;i<this.touches.length;i++)for(a=this.touches[i].targets,s=0;s<a.length;s++)if(a[s].num===t.pointerId){a.splice(s,1),0===a.length&&this.touches.splice(i,1);break}if(this.originMoveEnd(),this.update(),this.selectingMode)this._stopSelecting(t),this.triggerEventHandlers(["touchstopselecting","pointerstopselecting","stopselecting"],[t]),this.stopSelectionMode();else for(i=this.downObjects.length-1;i>-1;i--){for(o=!1,s=0;s<this.touches.length;s++)this.touches[s].obj.id===this.downObjects[i].id&&(o=!0);o||(this.downObjects[i].triggerEventHandlers(["touchend","up","pointerup","MSPointerUp"],[t]),r.Z.exists(this.downObjects[i].coords)||(this.downObjects[i].snapToGrid(),this.downObjects[i].snapToPoints(),h=!0),n=this.downObjects[i].eventHandlers,(r.Z.exists(n.click)&&n.click.length>0||r.Z.exists(n.pointerclick)&&n.pointerclick.length>0||r.Z.exists(n.dblclick)&&n.dblclick.length>0||r.Z.exists(n.pointerdblclick)&&n.pointerdblclick.length>0)&&(this.clickObjects[this.downObjects[i].id]=this.downObjects[i]),this.downObjects.splice(i,1))}return this.hasPointerUp&&(window.navigator.msPointerEnabled?e.Z.removeEvent(this.document,"MSPointerUp",this.pointerUpListener,this):(e.Z.removeEvent(this.document,"pointerup",this.pointerUpListener,this),e.Z.removeEvent(this.document,"pointercancel",this.pointerUpListener,this)),this.hasPointerUp=!1),this._pointerClearTouches(t.pointerId),"touch"!==this._getPointerInputDevice(t)&&this.dehighlightAll(),h&&this.update(),!0},pointerLeaveListener:function(t){return this.displayInfobox(!1),this.dehighlightAll(),!0},touchStartListener:function(s){var o,n,a,h,l,c,d,u,p,f,_=this.options.precision.touch,m=s.touches;for(this.hasTouchEnd||(e.Z.addEvent(this.document,"touchend",this.touchEndListener,this),this.hasTouchEnd=!0),this.document.selection&&r.Z.isFunction(this.document.selection.empty)?this.document.selection.empty():window.getSelection&&window.getSelection().removeAllRanges(),this._inputDevice="touch",this.options.precision.hasPoint=this.options.precision.touch,o=0;o<m.length;o++)m[o].jxg_isused=!1;for(o=0;o<this.touches.length;o++)for(f=this.touches[o].targets,h=0;h<f.length;h++){f[h].num=-1,_=this.options.precision.touch;do{for(l=0;l<m.length;l++)if(Math.abs(Math.pow(m[l].screenX-f[h].X,2)+Math.pow(m[l].screenY-f[h].Y,2))<_*_){f[h].num=l,f[h].X=m[l].screenX,f[h].Y=m[l].screenY,m[l].jxg_isused=!0;break}_*=2}while(-1===f[h].num&&_<this.options.precision.touchMax);-1===f[h].num&&(t.Z.debug("i couldn't find a targettouches for target no "+h+" on "+this.touches[o].obj.name+" ("+this.touches[o].obj.id+"). Removed the target."),t.Z.debug("eps = "+_+", touchMax = "+k.Z.precision.touchMax),f.splice(o,1))}for(o=0;o<m.length;o++)if(!m[o].jxg_isused){if(n=this.getMousePosition(s,o),this.selectingMode)return this._startSelecting(n),this.triggerEventHandlers(["touchstartselecting","startselecting"],[s]),s.preventDefault(),s.stopPropagation(),this.options.precision.hasPoint=this.options.precision.mouse,this.touches.length>0;if(0!==(a=this.initMoveObject(n[0],n[1],s,"touch")).length)if(c=a[a.length-1],p={num:o,X:m[o].screenX,Y:m[o].screenY,Xprev:NaN,Yprev:NaN,Xstart:[],Ystart:[],Zstart:[]},r.Z.isPoint(c)||c.elementClass===i.Z.OBJECT_CLASS_TEXT||c.type===i.Z.OBJECT_TYPE_TICKS||c.type===i.Z.OBJECT_TYPE_IMAGE)u=[p],this.saveStartPos(c,u[0]),this.touches.push({obj:c,targets:u}),c.highlight(!0);else if(c.elementClass===i.Z.OBJECT_CLASS_LINE||c.elementClass===i.Z.OBJECT_CLASS_CIRCLE||c.elementClass===i.Z.OBJECT_CLASS_CURVE||c.type===i.Z.OBJECT_TYPE_POLYGON){for(d=!1,h=0;h<this.touches.length;h++)c.id===this.touches[h].obj.id&&(d=!0,1===this.touches[h].targets.length&&(this.saveStartPos(c,p),this.touches[h].targets.push(p)),m[o].jxg_isused=!0);d||(u=[p],this.saveStartPos(c,u[0]),this.touches.push({obj:c,targets:u}),c.highlight(!0))}m[o].jxg_isused=!0}return this.touches.length>0&&(s.preventDefault(),s.stopPropagation()),1===m.length&&this.mode===this.BOARD_MODE_NONE&&this.touchStartMoveOriginOneFinger(s)||2!==m.length||this.mode!==this.BOARD_MODE_NONE&&this.mode!==this.BOARD_MODE_MOVE_ORIGIN||(this.mode===this.BOARD_MODE_MOVE_ORIGIN&&this.originMoveEnd(),this.gestureStartListener(s)),this.options.precision.hasPoint=this.options.precision.mouse,this.triggerEventHandlers(["touchstart","down"],[s]),!1},touchMoveListener:function(t){var e,i,r,s,o=t.touches;if(!this.checkFrameRate(t))return!1;if(this.mode!==this.BOARD_MODE_NONE&&(t.preventDefault(),t.stopPropagation()),this.mode!==this.BOARD_MODE_DRAG&&(this.dehighlightAll(),this.displayInfobox(!1)),this._inputDevice="touch",this.options.precision.hasPoint=this.options.precision.touch,this.updateQuality=this.BOARD_QUALITY_LOW,this.selectingMode){for(e=0;e<o.length;e++)if(!o[e].jxg_isused){i=this.getMousePosition(t,e),this._moveSelecting(i),this.triggerEventHandlers(["touchmoves","moveselecting"],[t,this.mode]);break}}else if(!this.touchOriginMove(t))if(this.mode===this.BOARD_MODE_DRAG){for(e=0;e<this.touches.length;e++)if(1===(s=this.touches[e].targets).length){if(o[s[0].num]){if((i=this.getMousePosition(t,s[0].num))[0]<0||i[0]>this.canvasWidth||i[1]<0||i[1]>this.canvasHeight)return;s[0].X=i[0],s[0].Y=i[1],this.moveObject(i[0],i[1],this.touches[e],t,"touch")}}else if(2===s.length&&s[0].num>-1&&s[1].num>-1&&o[s[0].num]&&o[s[1].num]){if(i=this.getMousePosition(t,s[0].num),r=this.getMousePosition(t,s[1].num),i[0]<0||i[0]>this.canvasWidth||i[1]<0||i[1]>this.canvasHeight||r[0]<0||r[0]>this.canvasWidth||r[1]<0||r[1]>this.canvasHeight)return;s[0].X=i[0],s[0].Y=i[1],s[1].X=r[0],s[1].Y=r[1],this.twoFingerMove(this.touches[e],s[0].num,t),s[0].Xprev=i[0],s[0].Yprev=i[1],s[1].Xprev=r[0],s[1].Yprev=r[1]}}else 2===o.length&&this.gestureChangeListener(t),i=this.getMousePosition(t,0),this.highlightElements(i[0],i[1],t,-1);return this.mode!==this.BOARD_MODE_DRAG&&this.displayInfobox(!1),this.triggerEventHandlers(["touchmove","move"],[t,this.mode]),this.options.precision.hasPoint=this.options.precision.mouse,this.updateQuality=this.BOARD_QUALITY_HIGH,this.mode===this.BOARD_MODE_NONE},touchEndListener:function(t){var s,o,n,a,h,l,c=this.options.precision.touch,d=[],u=t&&t.touches,p=!1;if(this.triggerEventHandlers(["touchend","up"],[t]),this.displayInfobox(!1),this.selectingMode)this._stopSelecting(t),this.triggerEventHandlers(["touchstopselecting","stopselecting"],[t]),this.stopSelectionMode();else if(u&&u.length>0){for(s=0;s<this.touches.length;s++)d[s]=this.touches[s];for(this.touches.length=0,s=0;s<u.length;s++)u[s].jxg_isused=!1;for(s=0;s<d.length;s++){for(a=!1,h=0,l=d[s].targets,o=0;o<l.length;o++)for(l[o].found=!1,n=0;n<u.length;n++)if(Math.abs(Math.pow(u[n].screenX-l[o].X,2)+Math.pow(u[n].screenY-l[o].Y,2))<c*c){l[o].found=!0,l[o].num=n,l[o].X=u[n].screenX,l[o].Y=u[n].screenY,h+=1;break}if(r.Z.isPoint(d[s].obj)?a=l[0]&&l[0].found:d[s].obj.elementClass===i.Z.OBJECT_CLASS_LINE?a=l[0]&&l[0].found||l[1]&&l[1].found:d[s].obj.elementClass===i.Z.OBJECT_CLASS_CIRCLE&&(a=1===h||3===h),a)for(this.touches.push({obj:d[s].obj,targets:[]}),o=0;o<l.length;o++)l[o].found&&this.touches[this.touches.length-1].targets.push({num:l[o].num,X:l[o].screenX,Y:l[o].screenY,Xprev:NaN,Yprev:NaN,Xstart:l[o].Xstart,Ystart:l[o].Ystart,Zstart:l[o].Zstart});else d[s].obj.noHighlight()}}else this.touches.length=0;for(s=this.downObjects.length-1;s>-1;s--){for(a=!1,o=0;o<this.touches.length;o++)this.touches[o].obj.id===this.downObjects[s].id&&(a=!0);a||(this.downObjects[s].triggerEventHandlers(["touchup","up"],[t]),r.Z.exists(this.downObjects[s].coords)||(this.downObjects[s].snapToGrid(),this.downObjects[s].snapToPoints(),p=!0),this.downObjects.splice(s,1))}return u&&0!==u.length||(this.hasTouchEnd&&(e.Z.removeEvent(this.document,"touchend",this.touchEndListener,this),this.hasTouchEnd=!1),this.dehighlightAll(),this.updateQuality=this.BOARD_QUALITY_HIGH,this.originMoveEnd(),p&&this.update()),!0},mouseDownListener:function(t){var i,s,o;if(this.document.selection&&r.Z.isFunction(this.document.selection.empty)?this.document.selection.empty():window.getSelection&&window.getSelection().removeAllRanges(),!this.hasMouseUp)return e.Z.addEvent(this.document,"mouseup",this.mouseUpListener,this),this.hasMouseUp=!0,this._inputDevice="mouse",this.options.precision.hasPoint=this.options.precision.mouse,i=this.getMousePosition(t),this._testForSelection(t),this.selectingMode?(this._startSelecting(i),void this.triggerEventHandlers(["mousestartselecting","startselecting"],[t])):(0===(s=this.initMoveObject(i[0],i[1],t,"mouse")).length?(this.mode=this.BOARD_MODE_NONE,o=!0):(this.mouse={obj:null,targets:[{X:i[0],Y:i[1],Xprev:NaN,Yprev:NaN}]},this.mouse.obj=s[s.length-1],this.dehighlightAll(),this.mouse.obj.highlight(!0),this.mouse.targets[0].Xstart=[],this.mouse.targets[0].Ystart=[],this.mouse.targets[0].Zstart=[],this.saveStartPos(this.mouse.obj,this.mouse.targets[0]),t&&t.preventDefault?t.preventDefault():window.event&&(window.event.returnValue=!1)),this.mode===this.BOARD_MODE_NONE&&(o=this.mouseOriginMoveStart(t)),this.triggerEventHandlers(["mousedown","down"],[t]),o)},mouseMoveListener:function(t){var e;if(!this.checkFrameRate(t))return!1;e=this.getMousePosition(t),this.updateQuality=this.BOARD_QUALITY_LOW,this.mode!==this.BOARD_MODE_DRAG&&(this.dehighlightAll(),this.displayInfobox(!1)),this.selectingMode?(this._moveSelecting(e),this.triggerEventHandlers(["mousemoveselecting","moveselecting"],[t,this.mode])):this.mouseOriginMove(t)||(this.mode===this.BOARD_MODE_DRAG?this.moveObject(e[0],e[1],this.mouse,t,"mouse"):this.highlightElements(e[0],e[1],t,-1),this.triggerEventHandlers(["mousemove","move"],[t,this.mode])),this.updateQuality=this.BOARD_QUALITY_HIGH},mouseUpListener:function(t){var i;if(!1===this.selectingMode&&this.triggerEventHandlers(["mouseup","up"],[t]),this.updateQuality=this.BOARD_QUALITY_HIGH,this.mouse&&this.mouse.obj&&(r.Z.exists(this.mouse.obj.coords)||(this.mouse.obj.snapToGrid(this.mouse.targets[0]),this.mouse.obj.snapToPoints())),this.originMoveEnd(),this.dehighlightAll(),this.update(),this.selectingMode)this._stopSelecting(t),this.triggerEventHandlers(["mousestopselecting","stopselecting"],[t]),this.stopSelectionMode();else for(i=0;i<this.downObjects.length;i++)this.downObjects[i].triggerEventHandlers(["mouseup","up"],[t]);this.downObjects.length=0,this.hasMouseUp&&(e.Z.removeEvent(this.document,"mouseup",this.mouseUpListener,this),this.hasMouseUp=!1),this.mouse=null},mouseWheelListener:function(t){var e,r;return!(this.attr.zoom.enabled&&this.attr.zoom.wheel&&this._isRequiredKeyPressed(t,"zoom"))||(e=(t=t||window.event).detail?-t.detail:t.wheelDelta/40,r="board"===this.attr.zoom.center?[]:new u.Z(i.Z.COORDS_BY_SCREEN,this.getMousePosition(t),this).usrCoords,e>0?this.zoomIn(r[1],r[2]):this.zoomOut(r[1],r[2]),this.triggerEventHandlers(["mousewheel"],[t]),t.preventDefault(),!1)},keyDownListener:function(e){var s,o,n,a,h,l,c=e.target.id,d=0,u=0,p=r.Z.evaluate(this.attr.keyboard.dx)/this.unitX,f=r.Z.evaluate(this.attr.keyboard.dy)/this.unitY,_=!1,m=!0;return!(!this.attr.keyboard.enabled||""===c)&&((!(a=this.containerObj.shadowRoot||document).activeElement||"INPUT"!==(o=a.activeElement).tagName&&"textarea"!==o.tagName)&&(s=c.replace(this.containerObj.id+"_",""),o=this.select(s),r.Z.exists(o.coords)&&(l=o.coords.usrCoords.slice(1)),r.Z.evaluate(this.attr.keyboard.panshift)&&e.shiftKey||r.Z.evaluate(this.attr.keyboard.panctrl)&&e.ctrlKey?(!0===r.Z.evaluate(this.attr.zoom.enabled)&&(_=!0),38===e.keyCode?this.clickUpArrow():40===e.keyCode?this.clickDownArrow():37===e.keyCode?this.clickLeftArrow():39===e.keyCode?this.clickRightArrow():_&&171===e.keyCode?this.zoomIn():_&&173===e.keyCode?this.zoomOut():_&&79===e.keyCode?this.zoom100():m=!1):(r.Z.exists(o.visProp)&&(r.Z.exists(o.visProp.snaptogrid)&&o.visProp.snaptogrid&&r.Z.evaluate(o.visProp.snapsizex)&&r.Z.evaluate(o.visProp.snapsizey)?(p=d=(n=o.getSnapSizes())[0],f=u=n[1]):r.Z.exists(o.visProp.attracttogrid)&&o.visProp.attracttogrid&&r.Z.evaluate(o.visProp.attractordistance)&&r.Z.evaluate(o.visProp.attractorunit)&&(u=d=1.1*r.Z.evaluate(o.visProp.attractordistance),"screen"===r.Z.evaluate(o.visProp.attractorunit)&&(d/=this.unitX,u/=this.unitX),p=Math.max(d,p),f=Math.max(u,f))),38===e.keyCode?h=[0,f]:40===e.keyCode?h=[0,-f]:37===e.keyCode?h=[-p,0]:39===e.keyCode?h=[p,0]:m=!1,h&&o.isDraggable&&o.visPropCalc.visible&&(this.geonextCompatibilityMode&&(r.Z.isPoint(o)||o.elementClass===i.Z.OBJECT_CLASS_TEXT)||!this.geonextCompatibilityMode)&&!r.Z.evaluate(o.visProp.fixed)&&(this.mode=this.BOARD_MODE_DRAG,r.Z.exists(o.coords)&&(h[0]+=l[0],h[1]+=l[1]),r.Z.exists(o.coords)?(o.setPosition(t.Z.COORDS_BY_USER,h),this.updateInfobox(o)):(this.displayInfobox(!1),o.setPositionDirectly(i.Z.COORDS_BY_USER,h,[0,0])),this.triggerEventHandlers(["keymove","move"],[e,this.mode]),o.triggerEventHandlers(["keydrag","drag"],[e]),this.mode=this.BOARD_MODE_NONE)),this.update(),m&&r.Z.exists(e.preventDefault)&&e.preventDefault(),m))},keyFocusInListener:function(t){var e,i,s=t.target.id;if(!this.attr.keyboard.enabled||""===s)return!1;e=s.replace(this.containerObj.id+"_",""),i=this.select(e),r.Z.exists(i.highlight)&&(i.highlight(!0),this.focusObjects=[e],i.triggerEventHandlers(["hit"],[t])),r.Z.exists(i.coords)&&this.updateInfobox(i)},keyFocusOutListener:function(t){if(!this.attr.keyboard.enabled)return!1;this.focusObjects=[],this.dehighlightAll(),this.displayInfobox(!1)},updateContainerDims:function(){var t,e,i,s,o,n;t=(i=this.containerObj.getBoundingClientRect()).width,e=i.height,window&&window.getComputedStyle&&(s=window.getComputedStyle(this.containerObj,null),o=parseFloat(s.getPropertyValue("border-left-width"))+parseFloat(s.getPropertyValue("border-right-width")),isNaN(o)||(t-=o),n=parseFloat(s.getPropertyValue("border-top-width"))+parseFloat(s.getPropertyValue("border-bottom-width")),isNaN(n)||(e-=n)),t<=0||e<=0||isNaN(t)||isNaN(e)||(isNaN(this.getBoundingBox()[0])&&this.setBoundingBox(this.attr.boundingbox,this.keepaspectratio,"keep"),r.Z.exists(this._prevDim)&&this._prevDim.w===t&&this._prevDim.h===e||(this.resizeContainer(t,e,!0),this._prevDim={w:t,h:e}))},startResizeObserver:function(){var t=this;e.Z.isBrowser&&this.attr.resize&&this.attr.resize.enabled&&(this.resizeObserver=new ResizeObserver((function(e){t._isResizing||(t._isResizing=!0,window.setTimeout((function(){try{t.updateContainerDims()}catch(e){t.stopResizeObserver()}finally{t._isResizing=!1}}),t.attr.resize.throttle))})),this.resizeObserver.observe(this.containerObj))},stopResizeObserver:function(){e.Z.isBrowser&&this.attr.resize&&this.attr.resize.enabled&&r.Z.exists(this.resizeObserver)&&this.resizeObserver.unobserve(this.containerObj)},resizeListener:function(){var t=this;e.Z.isBrowser&&this.attr.resize&&this.attr.resize.enabled&&(this._isScrolling||this._isResizing||(this._isResizing=!0,window.setTimeout((function(){t.updateContainerDims(),t._isResizing=!1}),this.attr.resize.throttle)))},scrollListener:function(t){var i=this;e.Z.isBrowser&&(this._isScrolling||(this._isScrolling=!0,window.setTimeout((function(){i._isScrolling=!1}),66)))},startIntersectionObserver:function(){var e=this;try{this.intersectionObserver=new IntersectionObserver((function(t){isNaN(e.getBoundingBox()[0])&&e.updateContainerDims()}),{root:null,rootMargin:"0px",threshold:.8}),this.intersectionObserver.observe(e.containerObj)}catch(e){t.Z.debug("JSXGraph: IntersectionObserver not available in this browser.")}},stopIntersectionObserver:function(){r.Z.exists(this.intersectionObserver)&&this.intersectionObserver.unobserve(this.containerObj)},beforeprintListener:function(t){this.updateContainerDims()},initInfobox:function(t){var e=r.Z.copyAttributes(t,this.options,"infobox");return e.id=this.id+"_infobox",this.infobox=this.create("text",[0,0,"0,0"],e),this.infobox.dump=!1,this.displayInfobox(!1),this},updateInfobox:function(t){var e,i,s,o,n,a,h,l=r.Z.evaluate(t.visProp.showinfobox);return!r.Z.evaluate(this.attr.showinfobox)&&"inherit"===l||!l||r.Z.isPoint(t)&&(s=t.coords.usrCoords[1],o=t.coords.usrCoords[2],a=r.Z.evaluate(this.infobox.visProp.distancex),h=r.Z.evaluate(this.infobox.visProp.distancey),this.infobox.setCoords(s+a/this.unitX,o+h/this.unitY),n=r.Z.evaluate(t.visProp.infoboxdigits),"string"!=typeof t.infoboxText?("auto"===n?this.infobox.useLocale()?(e=this.infobox.formatNumberLocale(s),i=this.infobox.formatNumberLocale(o)):(e=r.Z.autoDigits(s),i=r.Z.autoDigits(o)):r.Z.isNumber(n)?this.infobox.useLocale()?(e=this.infobox.formatNumberLocale(s,n),i=this.infobox.formatNumberLocale(o,n)):(e=r.Z.toFixed(s,n),i=r.Z.toFixed(o,n)):(e=s,i=o),this.highlightInfobox(e,i,t)):this.highlightCustomInfobox(t.infoboxText,t),this.displayInfobox(!0)),this},displayInfobox:function(t){return!t&&this.focusObjects.length>0&&this.select(this.focusObjects[0]).elementClass===i.Z.OBJECT_CLASS_POINT||this.infobox.hiddenByParent===t&&(this.infobox.hiddenByParent=!t,this.infobox.prepareUpdate().updateVisibility(t).updateRenderer()),this},showInfobox:function(t){return this.displayInfobox(t)},highlightInfobox:function(t,e,i){return this.highlightCustomInfobox("("+t+", "+e+")",i),this},highlightCustomInfobox:function(t,e){return this.infobox.setText(t),this},dehighlightAll:function(){var t,e,i={},r=!1;for(t in this.highlightedObjects)this.highlightedObjects.hasOwnProperty(t)&&(e=this.highlightedObjects[t],this.focusObjects.indexOf(t)<0?((this.hasMouseHandlers||this.hasPointerHandlers)&&e.noHighlight(),r=!0):i[t]=e);return this.highlightedObjects=i,"canvas"===this.renderer.type&&r&&(this.prepareUpdate(),this.renderer.suspendRedraw(this),this.updateRenderer(),this.renderer.unsuspendRedraw()),this},getScrCoordsOfMouse:function(t,e){return[t,e]},getUsrCoordsOfMouse:function(t){var r=this.getCoordsTopLeftCorner(),s=e.Z.getPosition(t,null,this.document),o=s[0]-r[0],n=s[1]-r[1];return new u.Z(i.Z.COORDS_BY_SCREEN,[o,n],this).usrCoords.slice(1)},getAllUnderMouse:function(t){var e=this.getAllObjectsUnderMouse(t);return e.push(this.getUsrCoordsOfMouse(t)),e},getAllObjectsUnderMouse:function(t){var i,r,s=this.getCoordsTopLeftCorner(),o=e.Z.getPosition(t,null,this.document),n=o[0]-s[0],a=o[1]-s[1],h=[],l=this.objectsList.length;for(i=0;i<l;i++)(r=this.objectsList[i]).visPropCalc.visible&&r.hasPoint&&r.hasPoint(n,a)&&(h[h.length]=r);return h},updateCoords:function(){var t,e,i=this.objectsList.length;for(e=0;e<i;e++)t=this.objectsList[e],r.Z.exists(t.coords)&&(r.Z.evaluate(t.visProp.frozen)?t.is3D?t.element2D.coords.screen2usr():t.coords.screen2usr():t.is3D?t.element2D.coords.usr2screen():t.coords.usr2screen());return this},moveOrigin:function(t,e,s){var o,n,a,h;return r.Z.exists(t)&&r.Z.exists(e)&&(o=this.origin.scrCoords[1],n=this.origin.scrCoords[2],this.origin.scrCoords[1]=t,this.origin.scrCoords[2]=e,s&&(this.origin.scrCoords[1]-=this.drag_dx,this.origin.scrCoords[2]-=this.drag_dy),a=new u.Z(i.Z.COORDS_BY_SCREEN,[0,0],this).usrCoords,h=new u.Z(i.Z.COORDS_BY_SCREEN,[this.canvasWidth,this.canvasHeight],this).usrCoords,(a[1]<this.maxboundingbox[0]||a[2]>this.maxboundingbox[1]||h[1]>this.maxboundingbox[2]||h[2]<this.maxboundingbox[3])&&(this.origin.scrCoords[1]=o,this.origin.scrCoords[2]=n)),this.updateCoords().clearTraces().fullUpdate(),this.triggerEventHandlers(["boundingbox"]),this},addConditions:function(e){var s,o,n,a,h,l,c,d=[],u=e.indexOf("<data>"),p=e.indexOf("</data>"),f=function(t,e,r,s){return function(){var o,n;n=(o=t.select(e.id)).coords.usrCoords[s],2===s?o.setPositionDirectly(i.Z.COORDS_BY_USER,[r(),n]):o.setPositionDirectly(i.Z.COORDS_BY_USER,[n,r()]),o.prepareUpdate().update()}},_=function(t,e,i){return function(){var r,s;r=t.select(e.id),s=i(),r.setAttribute({visible:s})}},m=function(t,e,i,r){return function(){var s,o;s=t.select(e.id),o=i(),"strokewidth"===r?s.visProp.strokewidth=o:(o=Y.Z.rgba2rgbo(o),s.visProp[r+"color"]=o[0],s.visProp[r+"opacity"]=o[1])}},g=function(t,e,i){return function(){t.select(e.id).position=i()}},b=function(t,e,i){return function(){t.select(e.id).setStyle(i())}};if(!(u<0)){for(;u>=0;){if(o=(s=e.slice(u+6,p)).indexOf("="),n=s.slice(0,o),a=s.slice(o+1),o=n.indexOf("."),h=n.slice(0,o),l=this.elementsByName[r.Z.unescapeHTML(h)],c=n.slice(o+1).replace(/\s+/g,"").toLowerCase(),a=r.Z.createFunction(a,this,"",!0),r.Z.exists(this.elementsByName[h]))switch(c){case"x":d.push(f(this,l,a,2));break;case"y":d.push(f(this,l,a,1));break;case"visible":d.push(_(this,l,a));break;case"position":d.push(g(this,l,a));break;case"stroke":d.push(m(this,l,a,"stroke"));break;case"style":d.push(b(this,l,a));break;case"strokewidth":d.push(m(this,l,a,"strokewidth"));break;case"fill":d.push(m(this,l,a,"fill"));break;case"label":break;default:t.Z.debug('property "'+c+'" in conditions not yet implemented:'+a)}else t.Z.debug("debug conditions: |"+h+"| undefined");u=(e=e.slice(p+7)).indexOf("<data>"),p=e.indexOf("</data>")}this.updateConditions=function(){var t;for(t=0;t<d.length;t++)d[t]();return this.prepareUpdate().updateElements(),!0},this.updateConditions()}},updateConditions:function(){return!1},calculateSnapSizes:function(){var t,e,s,o,n=this.getBoundingBox(),a=r.Z.evaluate(this.options.grid.majorStep),h=r.Z.evaluate(this.options.grid.gridX),l=r.Z.evaluate(this.options.grid.gridY);for(r.Z.isArray(a)||(a=[a,a]),a.length<2&&(a=[a[0],a[0]]),r.Z.exists(h)&&(a[0]=h),r.Z.exists(l)&&(a[1]=l),"auto"===a[0]?a[0]=1:a[0]=r.Z.parseNumber(a[0],Math.abs(n[1]-n[3]),1/this.unitX),"auto"===a[1]?a[1]=1:a[1]=r.Z.parseNumber(a[1],Math.abs(n[0]-n[2]),1/this.unitY),t=new u.Z(i.Z.COORDS_BY_USER,[0,0],this),e=new u.Z(i.Z.COORDS_BY_USER,[a[0],a[1]],this),s=t.scrCoords[1]-e.scrCoords[1],o=t.scrCoords[2]-e.scrCoords[2],this.options.grid.snapSizeX=a[0];Math.abs(s)>25;)this.options.grid.snapSizeX*=2,s/=2;for(this.options.grid.snapSizeY=a[1];Math.abs(o)>25;)this.options.grid.snapSizeY*=2,o/=2;return this},applyZoom:function(){return this.updateCoords().calculateSnapSizes().clearTraces().fullUpdate(),this},zoomIn:function(t,e){var i=this.getBoundingBox(),s=this.attr.zoom.factorx,o=this.attr.zoom.factory,n=(i[2]-i[0])*(1-1/s),a=(i[1]-i[3])*(1-1/o),h=.5,l=.5,c=this.attr.zoom.eps||this.attr.zoom.min||.001;return this.zoomX>this.attr.zoom.max&&s>1||this.zoomY>this.attr.zoom.max&&o>1||this.zoomX<c&&s<1||this.zoomY<c&&o<1?this:(r.Z.isNumber(t)&&r.Z.isNumber(e)&&(h=(t-i[0])/(i[2]-i[0]),l=(i[1]-e)/(i[1]-i[3])),this.setBoundingBox([i[0]+n*h,i[1]-a*l,i[2]-n*(1-h),i[3]+a*(1-l)],this.keepaspectratio,"update"),this.applyZoom())},zoomOut:function(t,e){var i=this.getBoundingBox(),s=this.attr.zoom.factorx,o=this.attr.zoom.factory,n=(i[2]-i[0])*(1-s),a=(i[1]-i[3])*(1-o),h=.5,l=.5,c=this.attr.zoom.eps||this.attr.zoom.min||.001;return this.zoomX<c||this.zoomY<c?this:(r.Z.isNumber(t)&&r.Z.isNumber(e)&&(h=(t-i[0])/(i[2]-i[0]),l=(i[1]-e)/(i[1]-i[3])),this.setBoundingBox([i[0]+n*h,i[1]-a*l,i[2]-n*(1-h),i[3]+a*(1-l)],this.keepaspectratio,"update"),this.applyZoom())},zoom100:function(){var t,e,i;return r.Z.exists(this.attr.boundingbox)?this.setBoundingBox(this.attr.boundingbox,this.keepaspectratio,"reset"):(e=((t=this.getBoundingBox())[2]-t[0])*(1-this.zoomX)*.5,i=(t[1]-t[3])*(1-this.zoomY)*.5,this.setBoundingBox([t[0]+e,t[1]-i,t[2]-e,t[3]+i],this.keepaspectratio,"reset")),this.applyZoom()},zoomAllPoints:function(){var t,e,i,s,o=0,n=0,a=0,h=0,l=this.objectsList.length;for(t=0;t<l;t++)s=this.objectsList[t],r.Z.isPoint(s)&&s.visPropCalc.visible&&(s.coords.usrCoords[1]<o?o=s.coords.usrCoords[1]:s.coords.usrCoords[1]>n&&(n=s.coords.usrCoords[1]),s.coords.usrCoords[2]>h?h=s.coords.usrCoords[2]:s.coords.usrCoords[2]<a&&(a=s.coords.usrCoords[2]));return 50,e=50/this.unitX,i=50/this.unitY,this.setBoundingBox([o-e,h+i,n+e,a-i],this.keepaspectratio,"update"),this.applyZoom()},zoomElements:function(t){var e,i,s,o,n,a,h,l=[1/0,-1/0,-1/0,1/0];if(!r.Z.isArray(t)||0===t.length)return this;for(e=0;e<t.length;e++)i=this.select(t[e]).bounds(),r.Z.isArray(i)&&(i[0]<l[0]&&(l[0]=i[0]),i[1]>l[1]&&(l[1]=i[1]),i[2]>l[2]&&(l[2]=i[2]),i[3]<l[3]&&(l[3]=i[3]));return r.Z.isArray(l)&&(s=.5*(l[0]+l[2]),o=.5*(l[1]+l[3]),n=1.5*(l[2]-l[0])*.5,a=1.5*(l[1]-l[3])*.5,h=Math.max(n,a),this.setBoundingBox([s-h,o+h,s+h,o-h],this.keepaspectratio,"update")),this},setZoom:function(t,e){var i=this.attr.zoom.factorx,r=this.attr.zoom.factory;return this.attr.zoom.factorx=t/this.zoomX,this.attr.zoom.factory=e/this.zoomY,this.zoomIn(),this.attr.zoom.factorx=i,this.attr.zoom.factory=r,this},_removeObj:function(e,s){var o,n;if(r.Z.isArray(e)){for(n=0;n<e.length;n++)this._removeObj(e[n],s);return this}if(e=this.select(e),!r.Z.exists(e)||r.Z.isString(e))return this;try{for(o in e.childElements)e.childElements.hasOwnProperty(o)&&e.childElements[o].board._removeObj(e.childElements[o]);for(o in e.objects)e.objects.hasOwnProperty(o)&&e.objects[o].board._removeObj(e.objects[o]);if(s)for(o in this.objects)this.objects.hasOwnProperty(o)&&r.Z.exists(this.objects[o].childElements)&&r.Z.exists(this.objects[o].childElements.hasOwnProperty(e.id))&&(delete this.objects[o].childElements[e.id],delete this.objects[o].descendants[e.id]);else if(r.Z.exists(e.ancestors))for(o in e.ancestors)e.ancestors.hasOwnProperty(o)&&r.Z.exists(e.ancestors[o].childElements)&&r.Z.exists(e.ancestors[o].childElements.hasOwnProperty(e.id))&&(delete e.ancestors[o].childElements[e.id],delete e.ancestors[o].descendants[e.id]);if(e._pos>-1)for(this.objectsList.splice(e._pos,1),n=e._pos;n<this.objectsList.length;n++)this.objectsList[n]._pos--;else e.type!==i.Z.OBJECT_TYPE_TURTLE&&t.Z.debug("Board.removeObject: object "+e.id+" not found in list.");delete this.objects[e.id],delete this.elementsByName[e.name],e.visProp&&r.Z.evaluate(e.visProp.trace)&&e.clearTrace(),r.Z.exists(e.remove)&&e.remove()}catch(i){t.Z.debug(e.id+": Could not be removed: "+i)}return this},removeObject:function(t,e){var i;if(this.renderer.suspendRedraw(this),r.Z.isArray(t))for(i=0;i<t.length;i++)this._removeObj(t[i],e);else this._removeObj(t,e);return this.renderer.unsuspendRedraw(),this.update(),this},removeAncestors:function(t){var e;for(e in t.ancestors)t.ancestors.hasOwnProperty(e)&&this.removeAncestors(t.ancestors[e]);return this.removeObject(t),this},initGeonextBoard:function(){var t,e,i;return t=this.create("point",[0,0],{id:this.id+"g00e0",name:"Ursprung",withLabel:!1,visible:!1,fixed:!0}),e=this.create("point",[1,0],{id:this.id+"gX0e0",name:"Punkt_1_0",withLabel:!1,visible:!1,fixed:!0}),i=this.create("point",[0,1],{id:this.id+"gY0e0",name:"Punkt_0_1",withLabel:!1,visible:!1,fixed:!0}),this.create("line",[t,e],{id:this.id+"gXLe0",name:"X-Achse",withLabel:!1,visible:!1}),this.create("line",[t,i],{id:this.id+"gYLe0",name:"Y-Achse",withLabel:!1,visible:!1}),this},resizeContainer:function(t,e,i,r){var s,n,a,h,l;return n=this.canvasWidth,a=this.canvasHeight,r||(s=this.getBoundingBox()),this.canvasWidth=Math.max(parseFloat(t),o.Z.eps),this.canvasHeight=Math.max(parseFloat(e),o.Z.eps),i||(this.containerObj.style.width=this.canvasWidth+"px",this.containerObj.style.height=this.canvasHeight+"px"),this.renderer.resize(this.canvasWidth,this.canvasHeight),r?(h=(this.canvasWidth-n)/2,l=(this.canvasHeight-a)/2,this.moveOrigin(this.origin.scrCoords[1]+h,this.origin.scrCoords[2]+l)):this.setBoundingBox(s,this.keepaspectratio,"keep"),this},showDependencies:function(){var t,e,i,r,s;for(t in e="<p>\n",this.objects)if(this.objects.hasOwnProperty(t)){for(i in s=0,this.objects[t].childElements)this.objects[t].childElements.hasOwnProperty(i)&&(s+=1);for(i in s>=0&&(e+="<strong>"+this.objects[t].id+":</strong> "),this.objects[t].childElements)this.objects[t].childElements.hasOwnProperty(i)&&(e+=this.objects[t].childElements[i].id+"("+this.objects[t].childElements[i].name+"), ");e+="<p>\n"}return e+="</p>\n",(r=window.open()).document.open(),r.document.write(e),r.document.close(),this},showXML:function(){var t=window.open("");return t.document.open(),t.document.write("<pre>"+r.Z.escapeHTML(this.xmlString)+"</pre>"),t.document.close(),this},prepareUpdate:function(){var t,e,i=this.objectsList.length;for(t=0;t<i;t++)(e=this.objectsList[t]).needsUpdate=e.needsRegularUpdate||this.needsFullUpdate;for(t in this.groups)this.groups.hasOwnProperty(t)&&((e=this.groups[t]).needsUpdate=e.needsRegularUpdate||this.needsFullUpdate);return this},updateElements:function(t){var e,s;for(t=this.select(t),e=0;e<this.objectsList.length;e++)s=this.objectsList[e],this.needsFullUpdate&&s.elementClass===i.Z.OBJECT_CLASS_TEXT&&s.updateSize(),s.update(!r.Z.exists(t)||s.id!==t.id).updateVisibility();for(e in this.groups)this.groups.hasOwnProperty(e)&&this.groups[e].update(t);return this},updateRenderer:function(){var t,e=this.objectsList.length;if(this.renderer){if("canvas"===this.renderer.type)this.updateRendererCanvas();else for(t=0;t<e;t++)this.objectsList[t].updateRenderer();return this}},updateRendererCanvas:function(){var t,e,i,r,s,o=this.objectsList.length,n=this.options.layer,a=this.options.layer.numlayers,h=Number.NEGATIVE_INFINITY;for(i=0;i<a;i++){for(s in r=Number.POSITIVE_INFINITY,n)n.hasOwnProperty(s)&&n[s]>h&&n[s]<r&&(r=n[s]);for(h=r,t=0;t<o;t++)(e=this.objectsList[t]).visProp.layer===r&&e.prepareUpdate().updateRenderer()}return this},addHook:function(e,i,s){return t.Z.deprecated("Board.addHook()","Board.on()"),i=r.Z.def(i,"update"),s=r.Z.def(s,this),this.hooks.push([i,e]),this.on(i,e,s),this.hooks.length-1},addEvent:t.Z.shortcut(t.Z.Board.prototype,"on"),removeHook:function(e){return t.Z.deprecated("Board.removeHook()","Board.off()"),this.hooks[e]&&(this.off(this.hooks[e][0],this.hooks[e][1]),this.hooks[e]=null),this},removeEvent:t.Z.shortcut(t.Z.Board.prototype,"off"),updateHooks:function(e){var i=Array.prototype.slice.call(arguments,0);return t.Z.deprecated("Board.updateHooks()","Board.triggerEventHandlers()"),i[0]=r.Z.def(i[0],"update"),this.triggerEventHandlers([i[0]],arguments),this},addChild:function(t){return r.Z.exists(t)&&r.Z.exists(t.containerObj)&&(this.dependentBoards.push(t),this.update()),this},removeChild:function(t){var e;for(e=this.dependentBoards.length-1;e>=0;e--)this.dependentBoards[e]===t&&this.dependentBoards.splice(e,1);return this},update:function(t){var e,i,s,o,n;if(this.inUpdate||this.isSuspendedUpdate)return this;for(this.inUpdate=!0,"all"===this.attr.minimizereflow&&this.containerObj&&"vml"!==this.renderer.type&&(n=this.document.activeElement,o=this.renderer.removeToInsertLater(this.containerObj)),"svg"===this.attr.minimizereflow&&"svg"===this.renderer.type&&(n=this.document.activeElement,o=this.renderer.removeToInsertLater(this.renderer.svgRoot)),this.prepareUpdate().updateElements(t).updateConditions(),this.renderer.suspendRedraw(this),this.updateRenderer(),this.renderer.unsuspendRedraw(),this.triggerEventHandlers(["update"],[]),o&&(o(),n.focus()),i=this.dependentBoards.length,e=0;e<i;e++)s=this.dependentBoards[e],r.Z.exists(s)&&s!==this&&(s.updateQuality=this.updateQuality,s.prepareUpdate().updateElements().updateConditions(),s.renderer.suspendRedraw(this),s.updateRenderer(),s.renderer.unsuspendRedraw(),s.triggerEventHandlers(["update"],[]));return this.inUpdate=!1,this},fullUpdate:function(){return this.needsFullUpdate=!0,this.update(),this.needsFullUpdate=!1,this},addGrid:function(){return this.create("grid",[]),this},removeGrids:function(){var t;for(t=0;t<this.grids.length;t++)this.removeObject(this.grids[t]);return this.grids.length=0,this.update(),this},create:function(e,i,s){var o,n;for(e=e.toLowerCase(),r.Z.exists(i)||(i=[]),r.Z.exists(s)||(s={}),n=0;n<i.length;n++)!r.Z.isString(i[n])||"text"===e&&2===n||"solidofrevolution3d"===e&&2===n||!("input"!==e&&"checkbox"!==e&&"button"!==e||2!==n&&3!==n)||"curve"===e||"functiongraph"===e||"implicitcurve"===e||(i[n]=this.select(i[n]));if(!r.Z.isFunction(t.Z.elements[e]))throw new Error("JSXGraph: create: Unknown element type given: "+e);return o=t.Z.elements[e](this,i,s),r.Z.exists(o)?(o.prepareUpdate&&o.update&&o.updateRenderer&&o.fullUpdate(),o):(t.Z.debug("JSXGraph: create: failure creating "+e),o)},createElement:function(){return t.Z.deprecated("Board.createElement()","Board.create()"),this.create.apply(this,arguments)},clearTraces:function(){var t;for(t=0;t<this.objectsList.length;t++)this.objectsList[t].clearTrace();return this.numTraces=0,this},suspendUpdate:function(){return this.inUpdate||(this.isSuspendedUpdate=!0),this},unsuspendUpdate:function(){return this.isSuspendedUpdate&&(this.isSuspendedUpdate=!1,this.fullUpdate()),this},setBoundingBox:function(t,i,s){var n,a,h,l,c,d,u,p,f,_=0,m=0,g=1,b=e.Z.getDimensions(this.container,this.document);return r.Z.isArray(t)?(t[0]<this.maxboundingbox[0]||t[1]>this.maxboundingbox[1]||t[2]>this.maxboundingbox[2]||t[3]<this.maxboundingbox[3]||(r.Z.exists(s)||(s="reset"),h=this.unitX,l=this.unitY,this.canvasWidth=parseFloat(b.width),this.canvasHeight=parseFloat(b.height),a=this.canvasWidth,n=this.canvasHeight,i?(c=this.keepaspectratio?h/l:1,"keep"===s&&(g=this.zoomX/this.zoomY),p=h*(d=t[2]-t[0]),f=l*(u=t[1]-t[3]),a>=n?p>=f?(this.unitY=n/u,this.unitX=this.unitY*c):(this.unitY=n/Math.abs(d)*o.Z.sign(u)/g,this.unitX=this.unitY*c):f>p?(this.unitX=a/d,this.unitY=this.unitX/c):(this.unitX=a/Math.abs(u)*o.Z.sign(d)*g,this.unitY=this.unitX/c),_=.5*(a/this.unitX-d),m=.5*(n/this.unitY-u),this.keepaspectratio=!0):(this.unitX=a/(t[2]-t[0]),this.unitY=n/(t[1]-t[3]),this.keepaspectratio=!1),this.moveOrigin(-this.unitX*(t[0]-_),this.unitY*(t[1]+m)),"update"===s?(this.zoomX*=this.unitX/h,this.zoomY*=this.unitY/l):"reset"===s&&(this.zoomX=r.Z.exists(this.attr.zoomx)?this.attr.zoomx:1,this.zoomY=r.Z.exists(this.attr.zoomy)?this.attr.zoomy:1)),this):this},getBoundingBox:function(){var t=new u.Z(i.Z.COORDS_BY_SCREEN,[0,0],this).usrCoords,e=new u.Z(i.Z.COORDS_BY_SCREEN,[this.canvasWidth,this.canvasHeight],this).usrCoords;return[t[1],t[2],e[1],e[2]]},_set:function(t,e){t=t.toLocaleLowerCase(),null===e||!r.Z.isObject(e)||r.Z.exists(e.id)||r.Z.exists(e.name)?this.attr[t]=e:r.Z.mergeAttr(this.attr[t],e)},setAttribute:function(e){var s,o,n,a,h,l,c={};for(s=0;s<arguments.length;s++)o=arguments[s],r.Z.isString(o)?(n=o.split(":"),c[r.Z.trim(n[0])]=r.Z.trim(n[1])):r.Z.isArray(o)?c[o[0]]=o[1]:t.Z.extend(c,o);for(s in c)if(c.hasOwnProperty(s)&&(a=s.replace(/\s+/g,"").toLowerCase(),h=c[s]),h=(!h.toLowerCase||"false"!==h.toLowerCase())&&h,this.attr[a]!==h)switch(a){case"axis":!1===h&&r.Z.exists(this.defaultAxes)&&(this.defaultAxes.x.setAttribute({visible:!1}),this.defaultAxes.y.setAttribute({visible:!1}));break;case"boundingbox":this.setBoundingBox(h,this.keepaspectratio),this._set(a,h);break;case"defaultaxes":r.Z.exists(this.defaultAxes.x)&&r.Z.exists(h.x)&&this.defaultAxes.x.setAttribute(h.x),r.Z.exists(this.defaultAxes.y)&&r.Z.exists(h.y)&&this.defaultAxes.y.setAttribute(h.y);break;case"description":this.document.getElementById(this.container+"_ARIAdescription").innerHTML=h,this._set(a,h);break;case"title":this.document.getElementById(this.container+"_ARIAlabel").innerHTML=h,this._set(a,h);break;case"keepaspectratio":this._set(a,h),this.setBoundingBox(this.getBoundingBox(),h,"keep");break;case"document":case"maxboundingbox":this[a]=h,this._set(a,h);break;case"zoomx":case"zoomy":this[a]=h,this._set(a,h),this.setZoom(this.attr.zoomx,this.attr.zoomy);break;case"registerevents":case"renderer":break;case"fullscreen":case"screenshot":(l=this.containerObj.ownerDocument.getElementById(this.container+"_navigation_"+a))&&r.Z.exists(h.symbol)&&(l.innerHTML=r.Z.evaluate(h.symbol)),this._set(a,h);break;case"selection":h.visible=!1,h.withLines=!1,h.vertices={visible:!1},this._set(a,h);break;case"showcopyright":"svg"===this.renderer.type&&((l=this.containerObj.ownerDocument.getElementById(this.renderer.uniqName("licenseText")))?l.style.display=r.Z.evaluate(h)?"inline":"none":r.Z.evaluate(h)&&this.renderer.displayCopyright(i.Z.licenseText,parseInt(this.options.text.fontSize,10)));default:r.Z.exists(this.attr[a])&&this._set(a,h)}return this.containerObj.ownerDocument.getElementById(this.container+"_navigationbar").remove(),this.renderer.drawNavigationBar(this,this.attr.navbar),this.triggerEventHandlers(["attribute"],[c,this]),this.fullUpdate(),this},addAnimation:function(t){var e=this;return this.animationObjects[t.id]=t,this.animationIntervalCode||(this.animationIntervalCode=window.setInterval((function(){e.animate()}),t.board.attr.animationdelay)),this},stopAllAnimation:function(){var t;for(t in this.animationObjects)this.animationObjects.hasOwnProperty(t)&&r.Z.exists(this.animationObjects[t])&&(this.animationObjects[t]=null,delete this.animationObjects[t]);return window.clearInterval(this.animationIntervalCode),delete this.animationIntervalCode,this},animate:function(){var t,e,s,o,n,a,h,l,c=0,d=null;for(e in this.animationObjects)if(this.animationObjects.hasOwnProperty(e)&&r.Z.exists(this.animationObjects[e])){if(c+=1,(s=this.animationObjects[e]).animationPath&&(o=r.Z.isFunction(s.animationPath)?s.animationPath((new Date).getTime()-s.animationStart):s.animationPath.pop(),!r.Z.exists(o)||!r.Z.isArray(o)&&isNaN(o)?delete s.animationPath:(s.setPositionDirectly(i.Z.COORDS_BY_USER,o),s.fullUpdate(),d=s)),s.animationData){for(n in h=0,s.animationData)s.animationData.hasOwnProperty(n)&&(a=s.animationData[n].pop(),r.Z.exists(a)?(h+=1,(t={})[n]=a,s.setAttribute(t)):delete s.animationData[a]);0===h&&delete s.animationData}r.Z.exists(s.animationData)||r.Z.exists(s.animationPath)||(this.animationObjects[e]=null,delete this.animationObjects[e],r.Z.exists(s.animationCallback)&&(l=s.animationCallback,s.animationCallback=null,l()))}return 0===c?(window.clearInterval(this.animationIntervalCode),delete this.animationIntervalCode):this.update(d),this},migratePoint:function(t,e,i){var s,o,n,a,h,l,c=!1;for(o in t=this.select(t),e=this.select(e),r.Z.exists(t.label)&&(l=t.label.id,c=!0,this.removeObject(t.label)),t.childElements)if(t.childElements.hasOwnProperty(o)){for(n in a=!1,s=t.childElements[o])s.hasOwnProperty(n)&&s[n]===t&&(s[n]=e,a=!0);for(a&&delete t.childElements[o],h=0;h<s.parents.length;h++)s.parents[h]===t.id&&(s.parents[h]=e.id);e.addChild(s)}return i&&(c&&(delete e.childElements[l],delete e.descendants[l]),e.label&&this.removeObject(e.label),delete this.elementsByName[e.name],e.name=t.name,c&&e.createLabel()),this.removeObject(t),r.Z.exists(e.name)&&""!==e.name&&(this.elementsByName[e.name]=e),this.fullUpdate(),this},emulateColorblindness:function(e){var i,s;if(r.Z.exists(e)||(e="none"),this.currentCBDef===e)return this;for(i in this.objects)this.objects.hasOwnProperty(i)&&(s=this.objects[i],"none"!==e?("none"===this.currentCBDef&&(s.visPropOriginal={strokecolor:s.visProp.strokecolor,fillcolor:s.visProp.fillcolor,highlightstrokecolor:s.visProp.highlightstrokecolor,highlightfillcolor:s.visProp.highlightfillcolor}),s.setAttribute({strokecolor:Y.Z.rgb2cb(r.Z.evaluate(s.visPropOriginal.strokecolor),e),fillcolor:Y.Z.rgb2cb(r.Z.evaluate(s.visPropOriginal.fillcolor),e),highlightstrokecolor:Y.Z.rgb2cb(r.Z.evaluate(s.visPropOriginal.highlightstrokecolor),e),highlightfillcolor:Y.Z.rgb2cb(r.Z.evaluate(s.visPropOriginal.highlightfillcolor),e)})):r.Z.exists(s.visPropOriginal)&&t.Z.extend(s.visProp,s.visPropOriginal));return this.currentCBDef=e,this.update(),this},select:function(t,e){var i,s,o,n,a=t;if(null===a)return a;if(r.Z.isString(a)&&""!==a)r.Z.exists(this.objects[a])?a=this.objects[a]:r.Z.exists(this.elementsByName[a])?a=this.elementsByName[a]:r.Z.exists(this.groups[a])&&(a=this.groups[a]);else if(!e&&(r.Z.isFunction(a)||r.Z.isObject(a)&&!r.Z.isFunction(a.setAttribute))){for(s={},n=(i=r.Z.filterElements(this.objectsList,a)).length,o=0;o<n;o++)s[i[o].id]=i[o];a=new j(s)}else r.Z.isObject(a)&&r.Z.exists(a.id)&&!r.Z.exists(this.objects[a.id])&&(a=null);return a},hasPoint:function(t,e){var i=t,s=e,o=this.getBoundingBox();return r.Z.exists(t)&&r.Z.isArray(t.usrCoords)&&(i=t.usrCoords[1],s=t.usrCoords[2]),!!(r.Z.isNumber(i)&&r.Z.isNumber(s)&&o[0]<i&&i<o[2]&&o[1]>s&&s>o[3])},updateCSSTransforms:function(){var t=this.containerObj,i=t,s=t;if(this.cssTransMat=e.Z.getCSSTransformMatrix(i),r.Z.exists(i.getRootNode)){for(i=i.parentNode===i.getRootNode()?i.parentNode.host:i.parentNode;i;)this.cssTransMat=o.Z.matMatMult(e.Z.getCSSTransformMatrix(i),this.cssTransMat),i=i.parentNode===i.getRootNode()?i.parentNode.host:i.parentNode;this.cssTransMat=o.Z.inverse(this.cssTransMat)}else{for(i=i.offsetParent;i;){for(this.cssTransMat=o.Z.matMatMult(e.Z.getCSSTransformMatrix(i),this.cssTransMat),s=s.parentNode;s!==i;)this.cssTransMat=o.Z.matMatMult(e.Z.getCSSTransformMatrix(i),this.cssTransMat),s=s.parentNode;i=i.offsetParent}this.cssTransMat=o.Z.inverse(this.cssTransMat)}return this},startSelectionMode:function(){this.selectingMode=!0,this.selectionPolygon.setAttribute({visible:!0}),this.selectingBox=[[0,0],[0,0]],this._setSelectionPolygonFromBox(),this.selectionPolygon.fullUpdate()},stopSelectionMode:function(){return this.selectingMode=!1,this.selectionPolygon.setAttribute({visible:!1}),[this.selectionPolygon.vertices[0].coords,this.selectionPolygon.vertices[2].coords]},_startSelecting:function(t){this.isSelecting=!0,this.selectingBox=[[t[0],t[1]],[t[0],t[1]]],this._setSelectionPolygonFromBox()},_moveSelecting:function(t){this.isSelecting&&(this.selectingBox[1]=[t[0],t[1]],this._setSelectionPolygonFromBox(),this.selectionPolygon.fullUpdate())},_stopSelecting:function(t){var e=this.getMousePosition(t);this.isSelecting=!1,this.selectingBox[1]=[e[0],e[1]],this._setSelectionPolygonFromBox()},_setSelectionPolygonFromBox:function(){var e=this.selectingBox[0],i=this.selectingBox[1];this.selectionPolygon.vertices[0].setPositionDirectly(t.Z.COORDS_BY_SCREEN,[e[0],e[1]]),this.selectionPolygon.vertices[1].setPositionDirectly(t.Z.COORDS_BY_SCREEN,[e[0],i[1]]),this.selectionPolygon.vertices[2].setPositionDirectly(t.Z.COORDS_BY_SCREEN,[i[0],i[1]]),this.selectionPolygon.vertices[3].setPositionDirectly(t.Z.COORDS_BY_SCREEN,[i[0],e[1]])},_testForSelection:function(t){this._isRequiredKeyPressed(t,"selection")&&(r.Z.exists(this.selectionPolygon)||this._createSelectionPolygon(this.attr),this.startSelectionMode())},_createSelectionPolygon:function(t){var e;return r.Z.exists(this.selectionPolygon)||!0===(e=r.Z.copyAttributes(t,k.Z,"board","selection")).enabled&&(this.selectionPolygon=this.create("polygon",[[0,0],[0,0],[0,0],[0,0]],e)),this},__evt__attribute:function(t){},__evt__down:function(t){},__evt__mousedown:function(t){},__evt__pendown:function(t){},__evt__pointerdown:function(t){},__evt__touchstart:function(t){},__evt__up:function(t){},__evt__mouseup:function(t){},__evt__pointerup:function(t){},__evt__touchend:function(t){},__evt__click:function(t){},__evt__dblclick:function(t){},__evt__mouseclick:function(t){},__evt__mousedblclick:function(t){},__evt__pointerclick:function(t){},__evt__pointerdblclick:function(t){},__evt__move:function(t,e){},__evt__mousemove:function(t,e){},__evt__penmove:function(t,e){},__evt__pointermove:function(t,e){},__evt__touchmove:function(t,e){},__evt__keymove:function(t,e){},__evt__hit:function(t,e,i){},__evt__mousehit:function(t,e,i){},__evt__update:function(){},__evt__boundingbox:function(){},__evt__startselecting:function(){},__evt__mousestartselecting:function(){},__evt__pointerstartselecting:function(){},__evt__touchstartselecting:function(){},__evt__stopselecting:function(){},__evt__mousestopselecting:function(){},__evt__pointerstopselecting:function(){},__evt__touchstopselecting:function(){},__evt__moveselecting:function(){},__evt__mousemoveselecting:function(){},__evt__pointermoveselecting:function(){},__evt__touchmoveselecting:function(){},__evt:function(){},toFullscreen:function(t){var e,i,s,o,n=this.document;return t=t||this.container,this._fullscreen_inner_id=t,s=n.getElementById(t),e="fullscreenwrap_"+t,r.Z.exists(s._cssFullscreenStore)||(o=this.containerObj.getBoundingClientRect(),s._cssFullscreenStore={w:o.width,h:o.height}),n.getElementById(e)?i=n.getElementById(e):((i=document.createElement("div")).classList.add("JXG_wrap_private"),i.setAttribute("id",e),s.parentNode.insertBefore(i,s),i.appendChild(s)),i.requestFullscreen=i.requestFullscreen||i.webkitRequestFullscreen||i.mozRequestFullScreen||i.msRequestFullscreen,null===(void 0!==n.fullscreenElement?n.fullscreenElement:void 0!==n.webkitFullscreenElement?n.webkitFullscreenElement:n.msFullscreenElement)?i.requestFullscreen&&(i.requestFullscreen(),this.startFullscreenResizeObserver(i)):(this.stopFullscreenResizeObserver(i),r.Z.exists(document.exitFullscreen)?document.exitFullscreen():r.Z.exists(document.webkitExitFullscreen)&&document.webkitExitFullscreen()),this},fullscreenListener:function(t){var i,s,o,n=this.document;i=this._fullscreen_inner_id,r.Z.exists(i)&&(o=void 0!==n.fullscreenElement?n.fullscreenElement:void 0!==n.webkitFullscreenElement?n.webkitFullscreenElement:n.msFullscreenElement,s=n.getElementById(i),o?(s._cssFullscreenStore.id=o.id,s._cssFullscreenStore.isFullscreen=!0,s._cssFullscreenStore.margin=s.style.margin,s._cssFullscreenStore.width=s.style.width,s._cssFullscreenStore.height=s.style.height,s._cssFullscreenStore.transform=s.style.transform,s.style.width=s._cssFullscreenStore.w+"px",s.style.height=s._cssFullscreenStore.h+"px",s.style.margin="",e.Z.scaleJSXGraphDiv(o.id,i,n,r.Z.evaluate(this.attr.fullscreen.scale)),o=null):r.Z.exists(s._cssFullscreenStore)&&(s._cssFullscreenStore.isFullscreen=!1,s.style.margin=s._cssFullscreenStore.margin,s.style.width=s._cssFullscreenStore.width,s.style.height=s._cssFullscreenStore.height,s.style.transform=s._cssFullscreenStore.transform,s._cssFullscreenStore=null,s.parentElement.replaceWith(s)),this.updateCSSTransforms())},startFullscreenResizeObserver:function(t){var i=this;return e.Z.isBrowser&&this.attr.resize&&this.attr.resize.enabled?(this.resizeObserver=new ResizeObserver((function(s){var o,n,a=i.document;i._isResizing||(i._isResizing=!0,window.setTimeout((function(){try{o=i._fullscreen_inner_id,null!==(n=void 0!==a.fullscreenElement?a.fullscreenElement:void 0!==a.webkitFullscreenElement?a.webkitFullscreenElement:a.msFullscreenElement)&&e.Z.scaleJSXGraphDiv(n.id,o,a,r.Z.evaluate(i.attr.fullscreen.scale))}catch(e){i.stopFullscreenResizeObserver(t)}finally{i._isResizing=!1}}),i.attr.resize.throttle))})),this.resizeObserver.observe(t),this):this},stopFullscreenResizeObserver:function(t){return e.Z.isBrowser&&this.attr.resize&&this.attr.resize.enabled?(r.Z.exists(this.resizeObserver)&&this.resizeObserver.unobserve(t),this):this},addLogEntry:function(t,e,i){var s,o,n=this.userLog.length-1;return r.Z.exists(e.elementClass)&&(o=e.id),r.Z.evaluate(this.attr.logging.enabled)&&(s=(new Date).getTime(),n>=0&&this.userLog[n].type===t&&this.userLog[n].id===o&&s-this.userLog[n].end<500?(this.userLog[n].end=s,this.userLog[n].endpos=i):this.userLog.push({type:t,id:o,start:s,startpos:i,end:s,endpos:i,bbox:this.getBoundingBox(),canvas:[this.canvasWidth,this.canvasHeight],zoom:[this.zoomX,this.zoomY]})),this},createRoulette:function(t,e,i,r,s,n,a){var h=this;return new function(){var l,c=0,u=0,p=0,f=i,_=d.Z.root((function(i){var r=t.X(f),s=t.Y(f),o=e.X(i),n=e.Y(i);return(r-o)*(r-o)+(s-n)*(s-n)}),[0,2*Math.PI]),m=0,g=0,b=h.create("transform",[function(){return c}],{type:"rotate"}),v=h.create("transform",[function(){return c},function(){return t.X(f)},function(){return t.Y(f)}],{type:"rotate"}),Z=h.create("transform",[function(){return u},function(){return p}],{type:"translate"}),C=function(t,e,i){var r=d.Z.D(t.X)(e),s=d.Z.D(t.Y)(e),n=d.Z.D(t.X)(i),a=d.Z.D(t.Y)(i),h=d.Z.D(t.X)(.5*(e+i)),l=d.Z.D(t.Y)(.5*(e+i)),c=o.Z.hypot(r,s),u=o.Z.hypot(n,a);return(c+4*o.Z.hypot(h,l)+u)*(i-e)/6},y=function(t){return l-C(e,_,t)},P=Math.PI/18,E=9*P,O=null;return this.rolling=function(){var i,o,n,O,x;l=C(t,f,m=f+s*r),g=d.Z.root(y,_),i=new D(t.X(m),t.Y(m)),o=new D(e.X(g),e.Y(g)),n=new D(d.Z.D(t.X)(m),d.Z.D(t.Y)(m)),O=new D(d.Z.D(e.X)(g),d.Z.D(e.Y)(g)),x=D.C.div(n,O),c=Math.atan2(x.imaginary,x.real),x.div(D.C.abs(x)),x.mult(o),u=i.real-x.real,p=i.imaginary-x.imaginary,c<-P&&c>-E?(c=-P,v.applyOnce(a)):c>P&&c<E?(c=P,v.applyOnce(a)):(b.applyOnce(a),Z.applyOnce(a),f=m,_=g),h.update()},this.start=function(){return n>0&&(O=window.setInterval(this.rolling,n)),this},this.stop=function(){return window.clearInterval(O),this},this}}});var X=t.Z.Board;t.Z.SVGRenderer=function(t,e){var i;for(this.type="svg",this.isIE=-1!==navigator.appVersion.indexOf("MSIE")||navigator.userAgent.match(/Trident\//),this.svgRoot=null,this.svgNamespace="http://www.w3.org/2000/svg",this.xlinkNamespace="http://www.w3.org/1999/xlink",this.container=t,this.container.style.MozUserSelect="none",this.container.style.userSelect="none",this.container.style.overflow="hidden",""===this.container.style.position&&(this.container.style.position="relative"),this.svgRoot=this.container.ownerDocument.createElementNS(this.svgNamespace,"svg"),this.svgRoot.style.overflow="hidden",this.svgRoot.style.display="block",this.resize(e.width,e.height),this.container.appendChild(this.svgRoot),this.defs=this.container.ownerDocument.createElementNS(this.svgNamespace,"defs"),this.svgRoot.appendChild(this.defs),this.createShadowFilter=function(t,e,i,s,o,n){var a,h,l,c,d,u=this.container.ownerDocument.createElementNS(this.svgNamespace,"filter");return u.setAttributeNS(null,"id",t),u.setAttributeNS(null,"width","300%"),u.setAttributeNS(null,"height","300%"),u.setAttributeNS(null,"filterUnits","userSpaceOnUse"),(a=this.container.ownerDocument.createElementNS(this.svgNamespace,"feOffset")).setAttributeNS(null,"in","SourceGraphic"),a.setAttributeNS(null,"result","offOut"),a.setAttributeNS(null,"dx",n[0]),a.setAttributeNS(null,"dy",n[1]),u.appendChild(a),(h=this.container.ownerDocument.createElementNS(this.svgNamespace,"feColorMatrix")).setAttributeNS(null,"in","offOut"),h.setAttributeNS(null,"result","colorOut"),h.setAttributeNS(null,"type","matrix"),"none"===e||!r.Z.isArray(e)||e.length<3?h.setAttributeNS(null,"values","0.1 0 0 0 0 0 0.1 0 0 0 0 0 0.1 0 0 0 0 0 "+i+" 0"):(e[0]/=255,e[1]/=255,e[2]/=255,d=s+" 0 0 0 "+e[0]+" 0 "+s+" 0 0 "+e[1]+" 0 0 "+s+" 0 "+e[2]+" 0 0 0 "+i+" 0",h.setAttributeNS(null,"values",d)),u.appendChild(h),(l=this.container.ownerDocument.createElementNS(this.svgNamespace,"feGaussianBlur")).setAttributeNS(null,"in","colorOut"),l.setAttributeNS(null,"result","blurOut"),l.setAttributeNS(null,"stdDeviation",o),u.appendChild(l),(c=this.container.ownerDocument.createElementNS(this.svgNamespace,"feBlend")).setAttributeNS(null,"in","SourceGraphic"),c.setAttributeNS(null,"in2","blurOut"),c.setAttributeNS(null,"mode","normal"),u.appendChild(c),u},this.uniqName=function(){return this.container.id+"_"+Array.prototype.slice.call(arguments).join("_")},this.toStr=function(){var t=Array.prototype.slice.call(arguments).join("");return r.Z.exists(CSS)&&r.Z.exists(CSS.escape)&&(t=CSS.escape(t)),t},this.toURL=function(){return"url(#"+this.toStr.apply(this,arguments)+")"},this.defs.appendChild(this.createShadowFilter(this.uniqName("f1"),"none",1,.1,3,[5,5])),this.layer=[],i=0;i<k.Z.layer.numlayers;i++)this.layer[i]=this.container.ownerDocument.createElementNS(this.svgNamespace,"g"),this.svgRoot.appendChild(this.layer[i]);try{this.foreignObjLayer=this.container.ownerDocument.createElementNS(this.svgNamespace,"foreignObject"),this.foreignObjLayer.setAttribute("display","none"),this.foreignObjLayer.setAttribute("x",0),this.foreignObjLayer.setAttribute("y",0),this.foreignObjLayer.setAttribute("width","100%"),this.foreignObjLayer.setAttribute("height","100%"),this.foreignObjLayer.setAttribute("id",this.uniqName("foreignObj")),this.svgRoot.appendChild(this.foreignObjLayer),this.supportsForeignObject=!0}catch(t){this.supportsForeignObject=!1}},t.Z.SVGRenderer.prototype=new R,t.Z.extend(t.Z.SVGRenderer.prototype,{_createArrowHead:function(t,e,s){var o,n,a,h,l=t.id+"Triangle";return r.Z.exists(e)&&(l+=e),r.Z.exists(s)&&(l+=s),(o=this.createPrim("marker",l)).setAttributeNS(null,"stroke",r.Z.evaluate(t.visProp.strokecolor)),o.setAttributeNS(null,"stroke-opacity",r.Z.evaluate(t.visProp.strokeopacity)),o.setAttributeNS(null,"fill",r.Z.evaluate(t.visProp.strokecolor)),o.setAttributeNS(null,"fill-opacity",r.Z.evaluate(t.visProp.strokeopacity)),o.setAttributeNS(null,"stroke-width",0),o.setAttributeNS(null,"orient","auto"),o.setAttributeNS(null,"markerUnits","strokeWidth"),n=this.container.ownerDocument.createElementNS(this.svgNamespace,"path"),h=5,"Start"===e?(a=0,2===s?n.setAttributeNS(null,"d","M 10,0 L 0,5 L 10,10 L 5,5 z"):3===s?n.setAttributeNS(null,"d","M 0,0 L 3.33,0 L 3.33,10 L 0,10 z"):4===s?(h=3.31,n.setAttributeNS(null,"d","M 0.00,3.31 C 3.53,3.84 7.13,4.50 10.00,6.63 C 9.33,5.52 8.67,4.42 8.00,3.31 C 8.67,2.21 9.33,1.10 10.00,0.00 C 7.13,2.13 3.53,2.79 0.00,3.31")):5===s?(h=3.28,n.setAttributeNS(null,"d","M 0.00,3.28 C 3.39,4.19 6.81,5.07 10.00,6.55 C 9.38,5.56 9.00,4.44 9.00,3.28 C 9.00,2.11 9.38,0.99 10.00,0.00 C 6.81,1.49 3.39,2.37 0.00,3.28")):6===s?(h=2.84,n.setAttributeNS(null,"d","M 0.00,2.84 C 3.39,3.59 6.79,4.35 10.00,5.68 C 9.67,4.73 9.33,3.78 9.00,2.84 C 9.33,1.89 9.67,0.95 10.00,0.00 C 6.79,1.33 3.39,2.09 0.00,2.84")):7===s?(h=5.2,n.setAttributeNS(null,"d","M 0.00,5.20 C 4.04,5.20 7.99,6.92 10.00,10.39 M 10.00,0.00 C 7.99,3.47 4.04,5.20 0.00,5.20")):n.setAttributeNS(null,"d","M 10,0 L 0,5 L 10,10 z"),t.elementClass===i.Z.OBJECT_CLASS_LINE&&(a=2===s?4.9:3===s?3.3:4===s||5===s||6===s?6.66:7===s?0:10)):(a=10,2===s?n.setAttributeNS(null,"d","M 0,0 L 10,5 L 0,10 L 5,5 z"):3===s?(a=3.3,n.setAttributeNS(null,"d","M 0,0 L 3.33,0 L 3.33,10 L 0,10 z")):4===s?(h=3.31,n.setAttributeNS(null,"d","M 10.00,3.31 C 6.47,3.84 2.87,4.50 0.00,6.63 C 0.67,5.52 1.33,4.42 2.00,3.31 C 1.33,2.21 0.67,1.10 0.00,0.00 C 2.87,2.13 6.47,2.79 10.00,3.31")):5===s?(h=3.28,n.setAttributeNS(null,"d","M 10.00,3.28 C 6.61,4.19 3.19,5.07 0.00,6.55 C 0.62,5.56 1.00,4.44 1.00,3.28 C 1.00,2.11 0.62,0.99 0.00,0.00 C 3.19,1.49 6.61,2.37 10.00,3.28")):6===s?(h=2.84,n.setAttributeNS(null,"d","M 10.00,2.84 C 6.61,3.59 3.21,4.35 0.00,5.68 C 0.33,4.73 0.67,3.78 1.00,2.84 C 0.67,1.89 0.33,0.95 0.00,0.00 C 3.21,1.33 6.61,2.09 10.00,2.84")):7===s?(h=5.2,n.setAttributeNS(null,"d","M 10.00,5.20 C 5.96,5.20 2.01,6.92 0.00,10.39 M 0.00,0.00 C 2.01,3.47 5.96,5.20 10.00,5.20")):n.setAttributeNS(null,"d","M 0,0 L 10,5 L 0,10 z"),t.elementClass===i.Z.OBJECT_CLASS_LINE&&(a=2===s?5.1:3===s?.02:4===s||5===s||6===s?3.33:7===s?10:.05)),7===s&&(o.setAttributeNS(null,"fill","none"),o.setAttributeNS(null,"stroke-width",1)),o.setAttributeNS(null,"refY",h),o.setAttributeNS(null,"refX",a),o.appendChild(n),o},_setArrowColor:function(t,e,i,s,o){t&&(r.Z.isString(e)&&(7!==o?this._setAttribute((function(){t.setAttributeNS(null,"stroke",e),t.setAttributeNS(null,"fill",e),t.setAttributeNS(null,"stroke-opacity",i),t.setAttributeNS(null,"fill-opacity",i)}),s.visPropOld.fillcolor):this._setAttribute((function(){t.setAttributeNS(null,"fill","none"),t.setAttributeNS(null,"stroke",e),t.setAttributeNS(null,"stroke-opacity",i)}),s.visPropOld.fillcolor)),this.isIE&&s.rendNode.parentNode.insertBefore(s.rendNode,s.rendNode))},_setArrowWidth:function(t,e,i,r){var s,o;t&&(o=(s=e)*r,t.setAttributeNS(null,"viewBox","0 0 "+10*s+" "+10*s),t.setAttributeNS(null,"markerHeight",o),t.setAttributeNS(null,"markerWidth",o),t.setAttributeNS(null,"display","inherit"),this.isIE&&i.parentNode.insertBefore(i,i))},updateTicks:function(t){var e,i,s,o,n,a,h,l,c="",d=t.ticks.length,u=!0;for(e=0;e<d;e++){for(n=(s=t.ticks[e])[0],a=s[1],h=n.length,l=" M "+n[0]+" "+a[0],r.Z.isNumber(n[0])||(u=!1),i=1;u&&i<h;++i)r.Z.isNumber(n[i])?l+=" L "+n[i]+" "+a[i]:u=!1;u&&(c+=l)}o=t.rendNode,r.Z.exists(o)||(o=this.createPrim("path",t.id),this.appendChildPrim(o,r.Z.evaluate(t.visProp.layer)),t.rendNode=o),o.setAttributeNS(null,"stroke",r.Z.evaluate(t.visProp.strokecolor)),o.setAttributeNS(null,"fill","none"),o.setAttributeNS(null,"stroke-opacity",r.Z.evaluate(t.visProp.strokeopacity)),o.setAttributeNS(null,"stroke-width",r.Z.evaluate(t.visProp.strokewidth)),this.updatePathPrim(o,c,t.board),this.setObjectViewport(t)},displayCopyright:function(t,e){var i,r=this.createPrim("text","licenseText");r.setAttributeNS(null,"x","20px"),r.setAttributeNS(null,"y",2+e+"px"),r.setAttributeNS(null,"style","font-family:Arial,Helvetica,sans-serif; font-size:"+e+"px; fill:#356AA0; opacity:0.3;"),i=this.container.ownerDocument.createTextNode(t),r.appendChild(i),this.appendChildPrim(r,0)},drawInternalText:function(t){var e=this.createPrim("text",t.id);return e.style.whiteSpace="nowrap",t.rendNodeText=this.container.ownerDocument.createTextNode(""),e.appendChild(t.rendNodeText),this.appendChildPrim(e,r.Z.evaluate(t.visProp.layer)),e},updateInternalText:function(t){var e,i=t.plaintext,s=t.getAnchorX(),o=t.getAnchorY();t.rendNode.getAttributeNS(null,"class")!==t.visProp.cssclass&&(t.rendNode.setAttributeNS(null,"class",r.Z.evaluate(t.visProp.cssclass)),t.needsSizeUpdate=!0),isNaN(t.coords.scrCoords[1]+t.coords.scrCoords[2])||(e=t.coords.scrCoords[1],t.visPropOld.left!==s+e&&(t.rendNode.setAttributeNS(null,"x",e+"px"),"left"===s?t.rendNode.setAttributeNS(null,"text-anchor","start"):"right"===s?t.rendNode.setAttributeNS(null,"text-anchor","end"):"middle"===s&&t.rendNode.setAttributeNS(null,"text-anchor","middle"),t.visPropOld.left=s+e),e=t.coords.scrCoords[2],t.visPropOld.top!==o+e&&(t.rendNode.setAttributeNS(null,"y",e+.5*this.vOffsetText+"px"),"bottom"===o?(t.rendNode.setAttributeNS(null,"dy","0"),t.rendNode.setAttributeNS(null,"dominant-baseline","auto")):"top"===o?(t.rendNode.setAttributeNS(null,"dy","1.6ex"),t.rendNode.setAttributeNS(null,"dominant-baseline","auto")):"middle"===o&&(t.rendNode.setAttributeNS(null,"dy","0.6ex"),t.rendNode.setAttributeNS(null,"dominant-baseline","auto")),t.visPropOld.top=o+e)),t.htmlStr!==i&&(t.rendNodeText.data=i,t.htmlStr=i),this.transformImage(t,t.transformations)},updateInternalTextStyle:function(t,e,i,r){this.setObjectViewport(t),this.setObjectFillColor(t,e,i)},drawImage:function(t){var e=this.createPrim("image",t.id);e.setAttributeNS(null,"preserveAspectRatio","none"),this.appendChildPrim(e,r.Z.evaluate(t.visProp.layer)),t.rendNode=e,this.updateImage(t)},transformImage:function(t,e){var s,o,n,a,h=t.rendNode,l="";if(e.length>0&&-1===(s=[(o=this.joinTransforms(t,e))[1][1],o[2][1],o[1][2],o[2][2],o[1][0],o[2][0]].join(",")).indexOf("NaN"))if(l+=" matrix("+s+") ",t.elementClass===i.Z.OBJECT_CLASS_TEXT&&"html"===t.visProp.display){switch(h.style.transform=l,n=-t.coords.scrCoords[1],a=-t.coords.scrCoords[2],r.Z.evaluate(t.visProp.anchorx)){case"right":n+=t.size[0];break;case"middle":n+=.5*t.size[0]}switch(r.Z.evaluate(t.visProp.anchory)){case"bottom":a+=t.size[1];break;case"middle":a+=.5*t.size[1]}h.style["transform-origin"]=n+"px "+a+"px"}else h.setAttributeNS(null,"transform",l)},updateImageURL:function(t){var e=r.Z.evaluate(t.url);return t._src!==e&&(t.imgIsLoaded=!1,t.rendNode.setAttributeNS(this.xlinkNamespace,"xlink:href",e),t._src=e,!0)},updateImageStyle:function(t,e){var i=r.Z.evaluate(e?t.visProp.highlightcssclass:t.visProp.cssclass);t.rendNode.setAttributeNS(null,"class",i)},drawForeignObject:function(t){t.rendNode=this.appendChildPrim(this.createPrim("foreignObject",t.id),r.Z.evaluate(t.visProp.layer)),this.appendNodesToElement(t,"foreignObject"),this.updateForeignObject(t)},updateForeignObject:function(t){t._useUserSize?t.rendNode.style.overflow="hidden":t.rendNode.style.overflow="visible",this.updateRectPrim(t.rendNode,t.coords.scrCoords[1],t.coords.scrCoords[2]-t.size[1],t.size[0],t.size[1]),t.rendNode.innerHTML=t.content,this._updateVisual(t,{stroke:!0,dash:!0},!0)},appendChildPrim:function(t,e){return r.Z.exists(e)?e>=k.Z.layer.numlayers&&(e=k.Z.layer.numlayers-1):e=0,this.layer[e].appendChild(t),t},createPrim:function(t,e){var i=this.container.ownerDocument.createElementNS(this.svgNamespace,t);return i.setAttributeNS(null,"id",this.uniqName(e)),i.style.position="absolute","path"===t&&(i.setAttributeNS(null,"stroke-linecap","round"),i.setAttributeNS(null,"stroke-linejoin","round"),i.setAttributeNS(null,"fill-rule","evenodd")),i},remove:function(t){r.Z.exists(t)&&r.Z.exists(t.parentNode)&&t.parentNode.removeChild(t)},setLayer:function(t,e){r.Z.exists(e)?e>=k.Z.layer.numlayers&&(e=k.Z.layer.numlayers-1):e=0,this.layer[e].appendChild(t.rendNode)},makeArrows:function(t,e){var i,s,o=e.evFirst,n=e.evLast;this.isIE&&t.visPropCalc.visible&&(o||n)?t.rendNode.parentNode.insertBefore(t.rendNode,t.rendNode):(i=t.rendNodeTriangleStart,o?(s=this.toStr(this.container.id,"_",t.id,"TriangleStart",e.typeFirst),r.Z.exists(i)&&i.id===s||(null===(i=this.container.ownerDocument.getElementById(s))&&(i=this._createArrowHead(t,"Start",e.typeFirst),this.defs.appendChild(i)),t.rendNodeTriangleStart=i,t.rendNode.setAttributeNS(null,"marker-start",this.toURL(s)))):r.Z.exists(i)&&(this.remove(i),t.rendNodeTriangleStart=null),i=t.rendNodeTriangleEnd,n?(s=this.toStr(this.container.id,"_",t.id,"TriangleEnd",e.typeLast),r.Z.exists(i)&&i.id===s||(null===(i=this.container.ownerDocument.getElementById(s))&&(i=this._createArrowHead(t,"End",e.typeLast),this.defs.appendChild(i)),t.rendNodeTriangleEnd=i,t.rendNode.setAttributeNS(null,"marker-end",this.toURL(s)))):r.Z.exists(i)&&(this.remove(i),t.rendNodeTriangleEnd=null))},updateEllipsePrim:function(t,e,i,r,s){var o;o=2e5,e=Math.abs(e)<o?e:o*e/Math.abs(e),i=Math.abs(i)<o?i:o*i/Math.abs(i),r=Math.abs(r)<o?r:o*r/Math.abs(r),s=Math.abs(s)<o?s:o*s/Math.abs(s),t.setAttributeNS(null,"cx",e),t.setAttributeNS(null,"cy",i),t.setAttributeNS(null,"rx",Math.abs(r)),t.setAttributeNS(null,"ry",Math.abs(s))},updateLinePrim:function(t,e,i,r,s){var o;o=2e5,isNaN(e+i+r+s)||(e=Math.abs(e)<o?e:o*e/Math.abs(e),i=Math.abs(i)<o?i:o*i/Math.abs(i),r=Math.abs(r)<o?r:o*r/Math.abs(r),s=Math.abs(s)<o?s:o*s/Math.abs(s),t.setAttributeNS(null,"x1",e),t.setAttributeNS(null,"y1",i),t.setAttributeNS(null,"x2",r),t.setAttributeNS(null,"y2",s))},updatePathPrim:function(t,e){""===e&&(e="M 0 0"),t.setAttributeNS(null,"d",e)},updatePathStringPoint:function(t,e,i){var r="",s=t.coords.scrCoords,o=e*Math.sqrt(3)*.5,n=.5*e;return"x"===i?r=" M "+(s[1]-e)+" "+(s[2]-e)+" L "+(s[1]+e)+" "+(s[2]+e)+" M "+(s[1]+e)+" "+(s[2]-e)+" L "+(s[1]-e)+" "+(s[2]+e):"+"===i?r=" M "+(s[1]-e)+" "+s[2]+" L "+(s[1]+e)+" "+s[2]+" M "+s[1]+" "+(s[2]-e)+" L "+s[1]+" "+(s[2]+e):"|"===i?r=" M "+s[1]+" "+(s[2]-e)+" L "+s[1]+" "+(s[2]+e):"-"===i?r=" M "+(s[1]-e)+" "+s[2]+" L "+(s[1]+e)+" "+s[2]:"<>"===i||"<<>>"===i?("<<>>"===i&&(e*=1.41),r=" M "+(s[1]-e)+" "+s[2]+" L "+s[1]+" "+(s[2]+e)+" L "+(s[1]+e)+" "+s[2]+" L "+s[1]+" "+(s[2]-e)+" Z "):"^"===i?r=" M "+s[1]+" "+(s[2]-e)+" L "+(s[1]-o)+" "+(s[2]+n)+" L "+(s[1]+o)+" "+(s[2]+n)+" Z ":"v"===i?r=" M "+s[1]+" "+(s[2]+e)+" L "+(s[1]-o)+" "+(s[2]-n)+" L "+(s[1]+o)+" "+(s[2]-n)+" Z ":">"===i?r=" M "+(s[1]+e)+" "+s[2]+" L "+(s[1]-n)+" "+(s[2]-o)+" L "+(s[1]-n)+" "+(s[2]+o)+" Z ":"<"===i&&(r=" M "+(s[1]-e)+" "+s[2]+" L "+(s[1]+n)+" "+(s[2]-o)+" L "+(s[1]+n)+" "+(s[2]+o)+" Z "),r},updatePathStringPrim:function(t){var e,i,r,s=" M ",o=s,n=5e3,a="";if(t.numberPoints<=0)return"";if(r=Math.min(t.points.length,t.numberPoints),1===t.bezierDegree)for(e=0;e<r;e++)i=t.points[e].scrCoords,isNaN(i[1])||isNaN(i[2])?o=s:(i[1]=Math.max(Math.min(i[1],n),-5e3),i[2]=Math.max(Math.min(i[2],n),-5e3),a+=o+i[1]+" "+i[2],o=" L ");else if(3===t.bezierDegree)for(e=0;e<r;)i=t.points[e].scrCoords,isNaN(i[1])||isNaN(i[2])?o=s:(a+=o+i[1]+" "+i[2]," C "===o&&(e+=1,a+=" "+(i=t.points[e].scrCoords)[1]+" "+i[2],e+=1,a+=" "+(i=t.points[e].scrCoords)[1]+" "+i[2]),o=" C "),e+=1;return a},updatePathStringBezierPrim:function(t){var e,i,s,o,n,a,h,l=" M ",c=l,u=5e3,p="",f=r.Z.evaluate(t.visProp.strokewidth),_="plot"!==r.Z.evaluate(t.visProp.curvetype);if(t.numberPoints<=0)return"";for(_&&t.board.options.curve.RDPsmoothing&&(t.points=d.Z.RamerDouglasPeucker(t.points,.5)),h=Math.min(t.points.length,t.numberPoints),i=1;i<3;i++)for(c=l,e=0;e<h;e++)o=t.points[e].scrCoords,isNaN(o[1])||isNaN(o[2])?c=l:(o[1]=Math.max(Math.min(o[1],u),-5e3),o[2]=Math.max(Math.min(o[2],u),-5e3),c===l?p+=c+o[1]+" "+o[2]:(s=2*i,p+=[c,n+.333*(o[1]-n)+f*(s*Math.random()-i)," ",a+.333*(o[2]-a)+f*(s*Math.random()-i)," ",n+.666*(o[1]-n)+f*(s*Math.random()-i)," ",a+.666*(o[2]-a)+f*(s*Math.random()-i)," ",o[1]," ",o[2]].join("")),c=" C ",n=o[1],a=o[2]);return p},updatePolygonPrim:function(t,e){var i,r,s="",o=e.vertices.length;for(t.setAttributeNS(null,"stroke","none"),t.setAttributeNS(null,"fill-rule","evenodd"),"polygonalchain"===e.elType&&o++,i=0;i<o-1;i++){if(!e.vertices[i].isReal)return void t.setAttributeNS(null,"points","");s=s+(r=e.vertices[i].coords.scrCoords)[1]+","+r[2],i<o-2&&(s+=" ")}-1===s.indexOf("NaN")&&t.setAttributeNS(null,"points",s)},updateRectPrim:function(t,e,i,r,s){t.setAttributeNS(null,"x",e),t.setAttributeNS(null,"y",i),t.setAttributeNS(null,"width",r),t.setAttributeNS(null,"height",s)},setPropertyPrim:function(t,e,i){"stroked"!==e&&t.setAttributeNS(null,e,i)},display:function(t,e){var i;t&&t.rendNode&&(t.visPropOld.visible=e,i=t.rendNode,e?(i.setAttributeNS(null,"display","inline"),i.style.visibility="inherit"):(i.setAttributeNS(null,"display","none"),i.style.visibility="hidden"))},show:function(e){t.Z.deprecated("Board.renderer.show()","Board.renderer.display()"),this.display(e,!0)},hide:function(e){t.Z.deprecated("Board.renderer.hide()","Board.renderer.display()"),this.display(e,!1)},setBuffering:function(t,e){t.rendNode.setAttribute("buffered-rendering",e)},setDashStyle:function(t){var e=r.Z.evaluate(t.visProp.dash),i=r.Z.evaluate(t.visProp.dashscale)?.5*r.Z.evaluate(t.visProp.strokewidth):1,s=t.rendNode;e>0?s.setAttributeNS(null,"stroke-dasharray",this.dashArray[e-1].map((function(t){return t*i})).join(",")):s.hasAttributeNS(null,"stroke-dasharray")&&s.removeAttributeNS(null,"stroke-dasharray")},setGradient:function(t){var e,i,s,o=t.rendNode,n=r.Z.evaluate(t.visProp.gradient);"linear"===n||"radial"===n?(e=this.createPrim(n+"Gradient",t.id+"_gradient"),i=this.createPrim("stop",t.id+"_gradient1"),s=this.createPrim("stop",t.id+"_gradient2"),e.appendChild(i),e.appendChild(s),this.defs.appendChild(e),o.setAttributeNS(null,"style","fill:"+this.toURL(this.container.id+"_"+t.id+"_gradient")),t.gradNode1=i,t.gradNode2=s,t.gradNode=e):o.removeAttributeNS(null,"style")},updateGradientAngle:function(t,e){var i=1,r=Math.cos(e),s=Math.sin(e);Math.abs(r)>Math.abs(s)?i/=Math.abs(r):i/=Math.abs(s),r>=0?(t.setAttributeNS(null,"x1",0),t.setAttributeNS(null,"x2",r*i)):(t.setAttributeNS(null,"x1",-r*i),t.setAttributeNS(null,"x2",0)),s>=0?(t.setAttributeNS(null,"y1",0),t.setAttributeNS(null,"y2",s*i)):(t.setAttributeNS(null,"y1",-s*i),t.setAttributeNS(null,"y2",0))},updateGradientCircle:function(t,e,i,r,s,o,n){t.setAttributeNS(null,"cx",100*e+"%"),t.setAttributeNS(null,"cy",100*i+"%"),t.setAttributeNS(null,"r",100*r+"%"),t.setAttributeNS(null,"fx",100*s+"%"),t.setAttributeNS(null,"fy",100*o+"%"),t.setAttributeNS(null,"fr",100*n+"%")},updateGradient:function(t){var e,i,s=t.gradNode1,o=t.gradNode2,n=r.Z.evaluate(t.visProp.gradient);r.Z.exists(s)&&r.Z.exists(o)&&(i=(i=r.Z.evaluate(t.visProp.fillopacity))>0?i:0,e=r.Z.evaluate(t.visProp.fillcolor),s.setAttributeNS(null,"style","stop-color:"+e+";stop-opacity:"+i),o.setAttributeNS(null,"style","stop-color:"+r.Z.evaluate(t.visProp.gradientsecondcolor)+";stop-opacity:"+r.Z.evaluate(t.visProp.gradientsecondopacity)),s.setAttributeNS(null,"offset",100*r.Z.evaluate(t.visProp.gradientstartoffset)+"%"),o.setAttributeNS(null,"offset",100*r.Z.evaluate(t.visProp.gradientendoffset)+"%"),"linear"===n?this.updateGradientAngle(t.gradNode,r.Z.evaluate(t.visProp.gradientangle)):"radial"===n&&this.updateGradientCircle(t.gradNode,r.Z.evaluate(t.visProp.gradientcx),r.Z.evaluate(t.visProp.gradientcy),r.Z.evaluate(t.visProp.gradientr),r.Z.evaluate(t.visProp.gradientfx),r.Z.evaluate(t.visProp.gradientfy),r.Z.evaluate(t.visProp.gradientfr)))},setObjectTransition:function(t,e){var i,s,o,n=[],a=0,h=["rendNode","rendNodeTriangleStart","rendNodeTriangleEnd"];if(void 0===e&&(e=r.Z.evaluate(t.visProp.transitionduration)),i=r.Z.evaluate(t.visProp.transitionproperties),e!==t.visPropOld.transitionduration||i!==t.visPropOld.transitionproperties){for(r.Z.exists(i)&&(a=i.length),o=0;o<a;o++)n.push(i[o]+" "+e+"ms");for(s=n.join(", "),a=h.length,o=0;o<a;++o)t[h[o]]&&(t[h[o]].style.transition=s);t.visPropOld.transitionduration=e,t.visPropOld.transitionproperties=i}},setObjectViewport:function(t,e){var i,s,o,n,a,h,l,c,d,u=r.Z.evaluate(t.visProp.viewport),p=["rendNode"];for("inherit"===u&&(u=r.Z.evaluate(t.board.attr.viewport)),e&&(n=t.rendNode.getBoundingClientRect(),a=this.container.getBoundingClientRect(),l=parseFloat(u[1]),c=parseFloat(u[2]),d=parseFloat(u[3]),h=parseFloat(u[0]),r.Z.isString(u[1])&&u[1].indexOf("%")>0&&(l=a.height*l/100),r.Z.isString(u[2])&&u[2].indexOf("%")>0&&(c=a.width*c/100),r.Z.isString(u[3])&&u[3].indexOf("%")>0&&(d=a.height*d/100),r.Z.isString(u[0])&&u[0].indexOf("%")>0&&(h=a.width*h/100),l=parseFloat(a.top)-parseFloat(n.top)+l,c=parseFloat(n.right)-parseFloat(a.right)+c,d=parseFloat(n.bottom)-parseFloat(a.bottom)+d,u=[h=parseFloat(a.left)-parseFloat(n.left)+h,l,c,d]),i=["number"==typeof u[1]?u[1]+"px":u[1],"number"==typeof u[2]?u[2]+"px":u[2],"number"==typeof u[3]?u[3]+"px":u[3],"number"==typeof u[0]?u[0]+"px":u[0]].join(" "),o=p.length,s=0;s<o;++s)t[p[s]]&&(e?t[p[s]].style.clipPath="inset("+i+")":t[p[s]].setAttributeNS(null,"clip-path","view-box inset("+i+")"))},_setAttribute:function(t,e){""===e?t():window.setTimeout(t,1)},setObjectFillColor:function(e,i,s,o){var n,a,h,l,c=r.Z.evaluate(i),d=r.Z.evaluate(s),u=r.Z.evaluate(e.visProp.gradient);d=d>0?d:0,e.visPropOld.fillcolor===c&&e.visPropOld.fillopacity===d&&null===u||(r.Z.exists(c)&&!1!==c&&(9!==c.length?(a=c,l=d):(h=Y.Z.rgba2rgbo(c),a=h[0],l=d*h[1]),n=void 0===o?e.rendNode:o,"none"!==a&&this._setAttribute((function(){n.setAttributeNS(null,"fill",a)}),e.visPropOld.fillcolor),e.type===t.Z.OBJECT_TYPE_IMAGE?this._setAttribute((function(){n.setAttributeNS(null,"opacity",l)}),e.visPropOld.fillopacity):("none"===a?(l=0,n.setAttributeNS(null,"pointer-events","visibleStroke")):n.setAttributeNS(null,"pointer-events","visiblePainted"),this._setAttribute((function(){n.setAttributeNS(null,"fill-opacity",l)}),e.visPropOld.fillopacity)),"linear"!==u&&"radial"!==u||this.updateGradient(e)),e.visPropOld.fillcolor=c,e.visPropOld.fillopacity=d)},setObjectStrokeColor:function(t,e,s){var o,n,a,h,l=r.Z.evaluate(e),c=r.Z.evaluate(s);c=c>0?c:0,t.visPropOld.strokecolor===l&&t.visPropOld.strokeopacity===c||(r.Z.exists(l)&&!1!==l&&(9!==l.length?(o=l,a=c):(n=Y.Z.rgba2rgbo(l),o=n[0],a=c*n[1]),h=t.rendNode,t.elementClass===i.Z.OBJECT_CLASS_TEXT?"html"===r.Z.evaluate(t.visProp.display)?this._setAttribute((function(){h.style.color=o,h.style.opacity=a}),t.visPropOld.strokecolor):this._setAttribute((function(){h.setAttributeNS(null,"style","fill:"+o),h.setAttributeNS(null,"style","fill-opacity:"+a)}),t.visPropOld.strokecolor):this._setAttribute((function(){h.setAttributeNS(null,"stroke",o),h.setAttributeNS(null,"stroke-opacity",a)}),t.visPropOld.strokecolor),t.elementClass!==i.Z.OBJECT_CLASS_CURVE&&t.elementClass!==i.Z.OBJECT_CLASS_LINE||(r.Z.evaluate(t.visProp.firstarrow)&&this._setArrowColor(t.rendNodeTriangleStart,o,a,t,t.visPropCalc.typeFirst),r.Z.evaluate(t.visProp.lastarrow)&&this._setArrowColor(t.rendNodeTriangleEnd,o,a,t,t.visPropCalc.typeLast))),t.visPropOld.strokecolor=l,t.visPropOld.strokeopacity=c)},setObjectStrokeWidth:function(t,e){var i,s=r.Z.evaluate(e);isNaN(s)||t.visPropOld.strokewidth===s||(i=t.rendNode,this.setPropertyPrim(i,"stroked","true"),r.Z.exists(s)&&this.setPropertyPrim(i,"stroke-width",s+"px"),t.visPropOld.strokewidth=s)},setLineCap:function(t){var e=r.Z.evaluate(t.visProp.linecap);void 0!==e&&""!==e&&t.visPropOld.linecap!==e&&r.Z.exists(t.rendNode)&&(this.setPropertyPrim(t.rendNode,"stroke-linecap",e),t.visPropOld.linecap=e)},setShadow:function(e){var i,s,o,n,a,h,l,c,d=r.Z.evaluate(e.visProp.shadow),u=!0,p=!1;(i=JSON.stringify(d))!==e.visPropOld.shadow&&("boolean"==typeof d?(u=!0,p=d,s="none",o=3,n=.1,a=[5,5],h=1):r.Z.evaluate(d.enabled)?(u=!1,p=!0,s=t.Z.rgbParser(r.Z.evaluate(d.color)),o=r.Z.evaluate(d.blur),n=r.Z.evaluate(d.blend),a=r.Z.evaluate(d.offset),h=r.Z.evaluate(d.opacity)):p=!1,r.Z.exists(e.rendNode)&&(p?u?e.rendNode.setAttributeNS(null,"filter",this.toURL(this.container.id+"_f1")):((c=this.container.ownerDocument.getElementById(l))&&this.defs.removeChild(c),l=e.rendNode.id+"_f1",this.defs.appendChild(this.createShadowFilter(l,s,h,n,o,a)),e.rendNode.setAttributeNS(null,"filter",this.toURL(l))):e.rendNode.removeAttributeNS(null,"filter")),e.visPropOld.shadow=i)},suspendRedraw:function(){this.suspendHandle=this.svgRoot.suspendRedraw(1e4)},unsuspendRedraw:function(){this.svgRoot.unsuspendRedraw(this.suspendHandle)},resize:function(t,e){this.svgRoot.setAttribute("width",parseFloat(t)),this.svgRoot.setAttribute("height",parseFloat(e))},createTouchpoints:function(t){var e,i,r,s;for(this.touchpoints=[],e=0;e<t;e++)i="touchpoint1_"+e,s=this.createPrim("path",i),this.appendChildPrim(s,19),s.setAttributeNS(null,"d","M 0 0"),this.touchpoints.push(s),this.setPropertyPrim(s,"stroked","true"),this.setPropertyPrim(s,"stroke-width","1px"),s.setAttributeNS(null,"stroke","#000000"),s.setAttributeNS(null,"stroke-opacity",1),s.setAttributeNS(null,"display","none"),r="touchpoint2_"+e,s=this.createPrim("ellipse",r),this.appendChildPrim(s,19),this.updateEllipsePrim(s,0,0,0,0),this.touchpoints.push(s),this.setPropertyPrim(s,"stroked","true"),this.setPropertyPrim(s,"stroke-width","1px"),s.setAttributeNS(null,"stroke","#000000"),s.setAttributeNS(null,"stroke-opacity",1),s.setAttributeNS(null,"fill","#ffffff"),s.setAttributeNS(null,"fill-opacity",0),s.setAttributeNS(null,"display","none")},showTouchpoint:function(t){this.touchpoints&&t>=0&&2*t<this.touchpoints.length&&(this.touchpoints[2*t].setAttributeNS(null,"display","inline"),this.touchpoints[2*t+1].setAttributeNS(null,"display","inline"))},hideTouchpoint:function(t){this.touchpoints&&t>=0&&2*t<this.touchpoints.length&&(this.touchpoints[2*t].setAttributeNS(null,"display","none"),this.touchpoints[2*t+1].setAttributeNS(null,"display","none"))},updateTouchpoint:function(t,e){var i,r;this.touchpoints&&t>=0&&2*t<this.touchpoints.length&&(i=e[0],r=e[1],this.touchpoints[2*t].setAttributeNS(null,"d","M "+(i-37)+" "+r+" L "+(i+37)+" "+r+" M "+i+" "+(r-37)+" L "+i+" "+(r+37)),this.updateEllipsePrim(this.touchpoints[2*t+1],e[0],e[1],25,25))},_getValuesOfDOMElements:function(t){var e=[];if(1===t.nodeType)for(t=t.firstChild;t;)void 0!==t.id&&void 0!==t.value&&e.push([t.id,t.value]),r.Z.concat(e,this._getValuesOfDOMElements(t)),t=t.nextSibling;return e},_getImgDataURL:function(t){var e,i,r,s,o,n;if((i=(e=t.getElementsByTagName("image")).length)>0)for(r=document.createElement("canvas"),n=0;n<i;n++){e[n].setAttribute("crossorigin","anonymous"),s=r.getContext("2d"),r.width=e[n].getAttribute("width"),r.height=e[n].getAttribute("height");try{s.drawImage(e[n],0,0,r.width,r.height),o=r.toDataURL(),e[n].setAttribute("xlink:href",o)}catch(t){console.log("CORS problem! Image can not be used",t)}}return!0},dumpToDataURI:function(t){var e,i,s,o=this.svgRoot,n=window.btoa||M.encode,a=[];if(this.container.hasChildNodes()&&r.Z.exists(this.foreignObjLayer)&&!t)for(this.foreignObjLayer.setAttribute("display","inline");o.nextSibling;)r.Z.concat(a,this._getValuesOfDOMElements(o.nextSibling)),this.foreignObjLayer.appendChild(o.nextSibling);if(this._getImgDataURL(o),o.setAttribute("xmlns","http://www.w3.org/2000/svg"),e=(new XMLSerializer).serializeToString(o),!0!==t)for(s=a.length,i=0;i<s;i++)e=e.replace('id="'+a[i][0]+'"','id="'+a[i][0]+'" value="'+a[i][1]+'"');if((e.match(/xmlns="http:\/\/www.w3.org\/2000\/svg"/g)||[]).length>1&&(e=e.replace(/xmlns="http:\/\/www.w3.org\/2000\/svg"/g,"")),e=(e=e.replace(/ /g," ")).replace(/url\("(.*)"\)/g,"url($1)"),r.Z.exists(this.foreignObjLayer)&&this.foreignObjLayer.hasChildNodes()){for(;this.foreignObjLayer.firstChild;)this.container.appendChild(this.foreignObjLayer.firstChild);this.foreignObjLayer.setAttribute("display","none")}return"data:image/svg+xml;base64,"+n(unescape(encodeURIComponent(e)))},dumpToCanvas:function(t,e,i,r){var s,o,n,a;return(n=this.container.ownerDocument.getElementById(t)).width=n.width,a=n.getContext("2d"),void 0!==e&&void 0!==i&&(n.style.width=parseFloat(e)+"px",n.style.height=parseFloat(i)+"px",n.setAttribute("width",parseFloat(e)),n.setAttribute("height",parseFloat(i))),o=new Image,s=this.dumpToDataURI(r),o.src=s,"Promise"in window?new Promise((function(t,r){try{o.onload=function(){a.drawImage(o,0,0,e,i),t()}}catch(t){r(t)}})):(o.onload=function(){window.setTimeout((function(){try{a.drawImage(o,0,0,e,i)}catch(t){console.log("screenshots not longer supported on IE")}}),200)},this)},screenshot:function(t,e,i){var s,o,n,a,h,l,c,d,u,p,f,_,m=this.container.ownerDocument,g=this.container.parentNode,b=t.attr.screenshot,v=!1;return"no"===this.type||(c=b.scale*this.container.getBoundingClientRect().width,d=b.scale*this.container.getBoundingClientRect().height,void 0===e||""===e?(v=!0,(a=new Image).style.width=c+"px",a.style.height=d+"px"):(v=!1,a=m.getElementById(e)),v&&((s=m.createElement("div")).style.cssText=b.css,s.style.width=c+"px",s.style.height=d+"px",s.style.zIndex=this.container.style.zIndex+120,s.style.position="absolute",s.style.top=this.container.offsetTop+"px",s.style.left=this.container.offsetLeft+"px"),o=m.createElement("canvas"),n=Math.random().toString(36).slice(2,7),o.setAttribute("id",n),o.setAttribute("width",c),o.setAttribute("height",d),o.style.width=c+"px",o.style.height=c+"px",o.style.display="none",g.appendChild(o),v&&(h=m.createElement("span"),l=m.createTextNode("✖"),h.style.cssText=b.cssButton,h.appendChild(l),h.onclick=function(){s.parentNode.removeChild(s)},s.appendChild(a),s.appendChild(h),g.insertBefore(s,this.container.nextSibling)),u=m.getElementById(this.uniqName("navigationbar")),r.Z.exists(u)&&(p=u.style.display,u.style.display="none",f=this.removeToInsertLater(u)),_=function(){a.src=o.toDataURL("image/png"),g.removeChild(o)},"Promise"in window?this.dumpToCanvas(n,c,d,i).then(_):(this.dumpToCanvas(n,c,d,i),window.setTimeout(_,200)),r.Z.exists(u)&&(u.style.display=p,f())),this}});var U=t.Z.SVGRenderer;t.Z.VMLRenderer=function(e){this.type="vml",this.container=e,this.container.style.overflow="hidden",""===this.container.style.position&&(this.container.style.position="relative"),this.container.onselectstart=function(){return!1},this.resolution=10,r.Z.exists(t.Z.vmlStylesheet)||(e.ownerDocument.namespaces.add("jxgvml","urn:schemas-microsoft-com:vml"),t.Z.vmlStylesheet=this.container.ownerDocument.createStyleSheet(),t.Z.vmlStylesheet.addRule(".jxgvml","behavior:url(#default#VML)"));try{e.ownerDocument.namespaces.jxgvml||e.ownerDocument.namespaces.add("jxgvml","urn:schemas-microsoft-com:vml"),this.createNode=function(t){return e.ownerDocument.createElement("<jxgvml:"+t+' class="jxgvml">')}}catch(t){this.createNode=function(t){return e.ownerDocument.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="jxgvml">')}}this.dashArray=["Solid","1 1","ShortDash","Dash","LongDash","ShortDashDot","LongDashDot"]},t.Z.VMLRenderer.prototype=new R,t.Z.extend(t.Z.VMLRenderer.prototype,{_setAttr:function(e,i,r,s){try{8===this.container.ownerDocument.documentMode?e[i]=r:e.setAttribute(i,r,s)}catch(e){t.Z.debug("_setAttr: "+i+" "+r+"<br>\n")}},updateTicks:function(t){var e,i,s,o,n,a=this.resolution,h=[];for(i=t.ticks.length,e=0;e<i;e++)o=(s=t.ticks[e])[0],n=s[1],r.Z.isNumber(o[0])&&r.Z.isNumber(o[1])&&h.push(" m "+Math.round(a*o[0])+", "+Math.round(a*n[0])+" l "+Math.round(a*o[1])+", "+Math.round(a*n[1])+" ");r.Z.exists(t.rendNode)||(t.rendNode=this.createPrim("path",t.id),this.appendChildPrim(t.rendNode,r.Z.evaluate(t.visProp.layer))),this._setAttr(t.rendNode,"stroked","true"),this._setAttr(t.rendNode,"strokecolor",r.Z.evaluate(t.visProp.strokecolor),1),this._setAttr(t.rendNode,"strokeweight",r.Z.evaluate(t.visProp.strokewidth)),this._setAttr(t.rendNodeStroke,"opacity",100*r.Z.evaluate(t.visProp.strokeopacity)+"%"),this.updatePathPrim(t.rendNode,h,t.board)},displayCopyright:function(t,e){var i,r;(i=this.createNode("textbox")).style.position="absolute",this._setAttr(i,"id",this.container.id+"_licenseText"),i.style.left=20,i.style.top=2,i.style.fontSize=e,i.style.color="#356AA0",i.style.fontFamily="Arial,Helvetica,sans-serif",this._setAttr(i,"opacity","30%"),i.style.filter="progid:DXImageTransform.Microsoft.Matrix(M11='1.0', sizingMethod='auto expand', enabled = false) progid:DXImageTransform.Microsoft.Alpha(opacity = 30, enabled = true)",r=this.container.ownerDocument.createTextNode(t),i.appendChild(r),this.appendChildPrim(i,0)},drawInternalText:function(t){var e;return(e=this.createNode("textbox")).style.position="absolute",t.rendNodeText=this.container.ownerDocument.createTextNode(""),e.appendChild(t.rendNodeText),this.appendChildPrim(e,9),e.style.filter="progid:DXImageTransform.Microsoft.Matrix(M11='1.0', sizingMethod='auto expand', enabled = false) progid:DXImageTransform.Microsoft.Alpha(opacity = 100, enabled = false)",e},updateInternalText:function(t){var e,i,r,s,n,a,h=t.plaintext,l=this.joinTransforms(t,t.transformations),c=[0,0],d=t.rendNode,u=[],p=t.getAnchorX(),f=t.getAnchorY();if(!isNaN(t.coords.scrCoords[1]+t.coords.scrCoords[2])){for("right"===p?c[0]=1:"middle"===p&&(c[0]=.5),"bottom"===f?c[1]=1:"middle"===f&&(c[1]=.5),u[0]=o.Z.matVecMult(l,[1,t.coords.scrCoords[1]-c[0]*t.size[0],t.coords.scrCoords[2]+(1-c[1])*t.size[1]+this.vOffsetText]),u[0][1]/=u[0][0],u[0][2]/=u[0][0],u[1]=o.Z.matVecMult(l,[1,t.coords.scrCoords[1]+(1-c[0])*t.size[0],t.coords.scrCoords[2]+(1-c[1])*t.size[1]+this.vOffsetText]),u[1][1]/=u[1][0],u[1][2]/=u[1][0],u[2]=o.Z.matVecMult(l,[1,t.coords.scrCoords[1]+(1-c[0])*t.size[0],t.coords.scrCoords[2]-c[1]*t.size[1]+this.vOffsetText]),u[2][1]/=u[2][0],u[2][2]/=u[2][0],u[3]=o.Z.matVecMult(l,[1,t.coords.scrCoords[1]-c[0]*t.size[0],t.coords.scrCoords[2]-c[1]*t.size[1]+this.vOffsetText]),u[3][1]/=u[3][0],u[3][2]/=u[3][0],i=u[0][1],s=u[0][1],r=u[0][2],n=u[0][2],a=1;a<4;a++)i=Math.max(i,u[a][1]),s=Math.min(s,u[a][1]),r=Math.max(r,u[a][2]),n=Math.min(n,u[a][2]);e=1===c[0]?Math.floor(t.board.canvasWidth-i):Math.floor(s),t.visPropOld.left!==p+e&&(1===c[0]?(t.rendNode.style.right=e+"px",t.rendNode.style.left="auto"):(t.rendNode.style.left=e+"px",t.rendNode.style.right="auto"),t.visPropOld.left=p+e),e=1===c[1]?Math.floor(t.board.canvasHeight-r):Math.floor(n),t.visPropOld.top!==f+e&&(1===c[1]?(t.rendNode.style.bottom=e+"px",t.rendNode.style.top="auto"):(t.rendNode.style.top=e+"px",t.rendNode.style.bottom="auto"),t.visPropOld.top=f+e)}t.htmlStr!==h&&(t.rendNodeText.data=h,t.htmlStr=h),d.filters.item(0).M11=l[1][1],d.filters.item(0).M12=l[1][2],d.filters.item(0).M21=l[2][1],d.filters.item(0).M22=l[2][2],d.filters.item(0).enabled=!0},drawImage:function(t){var e;(e=this.container.ownerDocument.createElement("img")).style.position="absolute",this._setAttr(e,"id",this.container.id+"_"+t.id),this.container.appendChild(e),this.appendChildPrim(e,r.Z.evaluate(t.visProp.layer)),e.style.filter="progid:DXImageTransform.Microsoft.Matrix(M11='1.0', sizingMethod='auto expand') progid:DXImageTransform.Microsoft.Alpha(opacity = 100, enabled = false)",t.rendNode=e,this.updateImage(t)},transformImage:function(t,e){var i,r,s,n,a,h,l=t.rendNode,c=[];if(e.length>0){for(i=this.joinTransforms(t,e),c[0]=o.Z.matVecMult(i,t.coords.scrCoords),c[0][1]/=c[0][0],c[0][2]/=c[0][0],c[1]=o.Z.matVecMult(i,[1,t.coords.scrCoords[1]+t.size[0],t.coords.scrCoords[2]]),c[1][1]/=c[1][0],c[1][2]/=c[1][0],c[2]=o.Z.matVecMult(i,[1,t.coords.scrCoords[1]+t.size[0],t.coords.scrCoords[2]-t.size[1]]),c[2][1]/=c[2][0],c[2][2]/=c[2][0],c[3]=o.Z.matVecMult(i,[1,t.coords.scrCoords[1],t.coords.scrCoords[2]-t.size[1]]),c[3][1]/=c[3][0],c[3][2]/=c[3][0],r=c[0][1],n=c[0][1],s=c[0][2],a=c[0][2],h=1;h<4;h++)r=Math.max(r,c[h][1]),n=Math.min(n,c[h][1]),s=Math.max(s,c[h][2]),a=Math.min(a,c[h][2]);l.style.left=Math.floor(n)+"px",l.style.top=Math.floor(a)+"px",l.filters.item(0).M11=i[1][1],l.filters.item(0).M12=i[1][2],l.filters.item(0).M21=i[2][1],l.filters.item(0).M22=i[2][2],l.filters.item(0).enabled=!0}},updateImageURL:function(t){var e=r.Z.evaluate(t.url);this._setAttr(t.rendNode,"src",e)},appendChildPrim:function(t,e){return r.Z.exists(e)||(e=0),t.style.zIndex=e,this.container.appendChild(t),t},appendNodesToElement:function(t,e){"shape"!==e&&"path"!==e&&"polygon"!==e||(t.rendNodePath=this.getElementById(t.id+"_path")),t.rendNodeFill=this.getElementById(t.id+"_fill"),t.rendNodeStroke=this.getElementById(t.id+"_stroke"),t.rendNodeShadow=this.getElementById(t.id+"_shadow"),t.rendNode=this.getElementById(t.id)},createPrim:function(t,e){var i,r,s=this.createNode("fill"),o=this.createNode("stroke"),n=this.createNode("shadow");return this._setAttr(s,"id",this.container.id+"_"+e+"_fill"),this._setAttr(o,"id",this.container.id+"_"+e+"_stroke"),this._setAttr(n,"id",this.container.id+"_"+e+"_shadow"),"circle"===t||"ellipse"===t?((i=this.createNode("oval")).appendChild(s),i.appendChild(o),i.appendChild(n)):"polygon"===t||"path"===t||"shape"===t||"line"===t?((i=this.createNode("shape")).appendChild(s),i.appendChild(o),i.appendChild(n),r=this.createNode("path"),this._setAttr(r,"id",this.container.id+"_"+e+"_path"),i.appendChild(r)):((i=this.createNode(t)).appendChild(s),i.appendChild(o),i.appendChild(n)),i.style.position="absolute",i.style.left="0px",i.style.top="0px",this._setAttr(i,"id",this.container.id+"_"+e),i},remove:function(t){r.Z.exists(t)&&t.removeNode(!0)},makeArrows:function(t){var e,i=r.Z.evaluate(t.visProp.firstarrow),s=r.Z.evaluate(t.visProp.lastarrow);t.visPropOld.firstarrow===i&&t.visPropOld.lastarrow===s||(i?(e=t.rendNodeStroke,this._setAttr(e,"startarrow","block"),this._setAttr(e,"startarrowlength","long")):(e=t.rendNodeStroke,r.Z.exists(e)&&this._setAttr(e,"startarrow","none")),s?(e=t.rendNodeStroke,this._setAttr(e,"id",this.container.id+"_"+t.id+"stroke"),this._setAttr(e,"endarrow","block"),this._setAttr(e,"endarrowlength","long")):(e=t.rendNodeStroke,r.Z.exists(e)&&this._setAttr(e,"endarrow","none")),t.visPropOld.firstarrow=i,t.visPropOld.lastarrow=s)},updateEllipsePrim:function(t,e,i,r,s){t.style.left=Math.floor(e-r)+"px",t.style.top=Math.floor(i-s)+"px",t.style.width=Math.floor(2*Math.abs(r))+"px",t.style.height=Math.floor(2*Math.abs(s))+"px"},updateLinePrim:function(t,e,i,r,s,o){var n,a=this.resolution;isNaN(e+i+r+s)||(n=["m ",Math.floor(a*e),", ",Math.floor(a*i)," l ",Math.floor(a*r),", ",Math.floor(a*s)],this.updatePathPrim(t,n,o))},updatePathPrim:function(t,e,i){var r=i.canvasWidth,s=i.canvasHeight;e.length<=0&&(e=["m 0,0"]),t.style.width=r,t.style.height=s,this._setAttr(t,"coordsize",[Math.floor(this.resolution*r),Math.floor(this.resolution*s)].join(",")),this._setAttr(t,"path",e.join(""))},updatePathStringPoint:function(t,e,i){var r=[],s=Math.round,o=t.coords.scrCoords,n=e*Math.sqrt(3)*.5,a=.5*e,h=this.resolution;return"x"===i?r.push([" m ",s(h*(o[1]-e)),", ",s(h*(o[2]-e))," l ",s(h*(o[1]+e)),", ",s(h*(o[2]+e))," m ",s(h*(o[1]+e)),", ",s(h*(o[2]-e))," l ",s(h*(o[1]-e)),", ",s(h*(o[2]+e))].join("")):"+"===i?r.push([" m ",s(h*(o[1]-e)),", ",s(h*o[2])," l ",s(h*(o[1]+e)),", ",s(h*o[2])," m ",s(h*o[1]),", ",s(h*(o[2]-e))," l ",s(h*o[1]),", ",s(h*(o[2]+e))].join("")):"<>"===i||"<<>>"===i?("<<>>"===i&&(e*=1.41),r.push([" m ",s(h*(o[1]-e)),", ",s(h*o[2])," l ",s(h*o[1]),", ",s(h*(o[2]+e))," l ",s(h*(o[1]+e)),", ",s(h*o[2])," l ",s(h*o[1]),", ",s(h*(o[2]-e))," x e "].join(""))):"^"===i?r.push([" m ",s(h*o[1]),", ",s(h*(o[2]-e))," l ",s(h*(o[1]-n)),", ",s(h*(o[2]+a))," l ",s(h*(o[1]+n)),", ",s(h*(o[2]+a))," x e "].join("")):"v"===i?r.push([" m ",s(h*o[1]),", ",s(h*(o[2]+e))," l ",s(h*(o[1]-n)),", ",s(h*(o[2]-a))," l ",s(h*(o[1]+n)),", ",s(h*(o[2]-a))," x e "].join("")):">"===i?r.push([" m ",s(h*(o[1]+e)),", ",s(h*o[2])," l ",s(h*(o[1]-a)),", ",s(h*(o[2]-n))," l ",s(h*(o[1]-a)),", ",s(h*(o[2]+n))," l ",s(h*(o[1]+e)),", ",s(h*o[2])].join("")):"<"===i&&r.push([" m ",s(h*(o[1]-e)),", ",s(h*o[2])," l ",s(h*(o[1]+a)),", ",s(h*(o[2]-n))," l ",s(h*(o[1]+a)),", ",s(h*(o[2]+n))," x e "].join("")),r},updatePathStringPrim:function(t){var e,i,r=[],s=this.resolution,o=Math.round,n=" m ",a=n,h=Math.min(t.numberPoints,8192);if(t.numberPoints<=0)return"";if(h=Math.min(h,t.points.length),1===t.bezierDegree)for(e=0;e<h;e++)i=t.points[e].scrCoords,isNaN(i[1])||isNaN(i[2])?a=n:(i[1]>2e4?i[1]=2e4:i[1]<-2e4&&(i[1]=-2e4),i[2]>2e4?i[2]=2e4:i[2]<-2e4&&(i[2]=-2e4),r.push([a,o(s*i[1]),", ",o(s*i[2])].join("")),a=" l ");else if(3===t.bezierDegree)for(e=0;e<h;)i=t.points[e].scrCoords,isNaN(i[1])||isNaN(i[2])?a=n:(r.push([a,o(s*i[1]),", ",o(s*i[2])].join(""))," c "===a&&(e+=1,i=t.points[e].scrCoords,r.push([" ",o(s*i[1]),", ",o(s*i[2])].join("")),e+=1,i=t.points[e].scrCoords,r.push([" ",o(s*i[1]),", ",o(s*i[2])].join(""))),a=" c "),e+=1;return r.push(" e"),r},updatePathStringBezierPrim:function(t){var e,i,s,o,n,a,h=[],l=r.Z.evaluate(t.visProp.strokewidth),c=this.resolution,u=Math.round,p=" m ",f=p,_="plot"!==r.Z.evaluate(t.visProp.curvetype),m=Math.min(t.numberPoints,8192);if(t.numberPoints<=0)return"";for(_&&t.board.options.curve.RDPsmoothing&&(t.points=d.Z.RamerDouglasPeucker(t.points,1)),m=Math.min(m,t.points.length),i=1;i<3;i++)for(f=p,e=0;e<m;e++)o=t.points[e].scrCoords,isNaN(o[1])||isNaN(o[2])?f=p:(o[1]>2e4?o[1]=2e4:o[1]<-2e4&&(o[1]=-2e4),o[2]>2e4?o[2]=2e4:o[2]<-2e4&&(o[2]=-2e4),f===p?h.push([f,u(c*o[1])," ",u(c*o[2])].join("")):(s=2*i,h.push([f,u(c*(n+.333*(o[1]-n)+l*(s*Math.random()-i)))," ",u(c*(a+.333*(o[2]-a)+l*(s*Math.random()-i)))," ",u(c*(n+.666*(o[1]-n)+l*(s*Math.random()-i)))," ",u(c*(a+.666*(o[2]-a)+l*(s*Math.random()-i)))," ",u(c*o[1])," ",u(c*o[2])].join(""))),f=" c ",n=o[1],a=o[2]);return h.push(" e"),h},updatePolygonPrim:function(t,e){var i,r,s=e.vertices.length,o=this.resolution,n=[];if(this._setAttr(t,"stroked","false"),r=e.vertices[0].coords.scrCoords,!isNaN(r[1]+r[2])){for(n.push(["m ",Math.floor(o*r[1]),",",Math.floor(o*r[2])," l "].join("")),i=1;i<s-1;i++){if(!e.vertices[i].isReal)return void this.updatePathPrim(t,"",e.board);if(r=e.vertices[i].coords.scrCoords,isNaN(r[1]+r[2]))return;n.push(Math.floor(o*r[1])+","+Math.floor(o*r[2])),i<s-2&&n.push(", ")}n.push(" x e"),this.updatePathPrim(t,n,e.board)}},updateRectPrim:function(t,e,i,r,s){t.style.left=Math.floor(e)+"px",t.style.top=Math.floor(i)+"px",r>=0&&(t.style.width=r+"px"),s>=0&&(t.style.height=s+"px")},setPropertyPrim:function(t,e,i){var s,o="";switch(e){case"stroke":o="strokecolor";break;case"stroke-width":o="strokeweight";break;case"stroke-dasharray":o="dashstyle"}""!==o&&(s=r.Z.evaluate(i),this._setAttr(t,o,s))},display:function(t,e){t&&t.rendNode&&(t.visPropOld.visible=e,t.rendNode.style.visibility=e?"inherit":"hidden")},show:function(e){t.Z.deprecated("Board.renderer.show()","Board.renderer.display()"),e&&e.rendNode&&(e.rendNode.style.visibility="inherit")},hide:function(e){t.Z.deprecated("Board.renderer.hide()","Board.renderer.display()"),e&&e.rendNode&&(e.rendNode.style.visibility="hidden")},setDashStyle:function(t,e){var i;e.dash>=0&&(i=t.rendNodeStroke,this._setAttr(i,"dashstyle",this.dashArray[e.dash]))},setGradient:function(t){var e=t.rendNodeFill,i=r.Z.evaluate(t.visProp.gradient);"linear"===i?(this._setAttr(e,"type","gradient"),this._setAttr(e,"color2",r.Z.evaluate(t.visProp.gradientsecondcolor)),this._setAttr(e,"opacity2",r.Z.evaluate(t.visProp.gradientsecondopacity)),this._setAttr(e,"angle",r.Z.evaluate(t.visProp.gradientangle))):"radial"===i?(this._setAttr(e,"type","gradientradial"),this._setAttr(e,"color2",r.Z.evaluate(t.visProp.gradientsecondcolor)),this._setAttr(e,"opacity2",r.Z.evaluate(t.visProp.gradientsecondopacity)),this._setAttr(e,"focusposition",100*r.Z.evaluate(t.visProp.gradientpositionx)+"%,"+100*r.Z.evaluate(t.visProp.gradientpositiony)+"%"),this._setAttr(e,"focussize","0,0")):this._setAttr(e,"type","solid")},setObjectFillColor:function(t,e,s){var o,n,a,h=r.Z.evaluate(e),l=r.Z.evaluate(s),c=t.rendNode;l=l>0?l:0,t.visPropOld.fillcolor===h&&t.visPropOld.fillopacity===l||(r.Z.exists(h)&&!1!==h&&(9!==h.length?(o=h,a=l):(o=(n=Y.Z.rgba2rgbo(h))[0],a=l*n[1]),"none"===o||!1===o?this._setAttr(t.rendNode,"filled","false"):(this._setAttr(t.rendNode,"filled","true"),this._setAttr(t.rendNode,"fillcolor",o),r.Z.exists(a)&&t.rendNodeFill&&this._setAttr(t.rendNodeFill,"opacity",100*a+"%")),t.type===i.Z.OBJECT_TYPE_IMAGE&&c.filters.length>1&&(c.filters.item(1).opacity=Math.round(100*a),c.filters.item(1).enabled=!0)),t.visPropOld.fillcolor=h,t.visPropOld.fillopacity=l)},setObjectStrokeColor:function(t,e,s){var o,n,a,h,l=r.Z.evaluate(e),c=r.Z.evaluate(s),d=t.rendNode;c=c>0?c:0,t.visPropOld.strokecolor===l&&t.visPropOld.strokeopacity===c||(r.Z.exists(l)&&!1!==l&&(9!==l.length?(o=l,a=c):(o=(n=e.rgba2rgbo(l))[0],a=c*n[1]),t.elementClass===i.Z.OBJECT_CLASS_TEXT?(d.filters.length>1&&(d.filters.item(1).opacity=Math.round(100*a),d.filters.item(1).enabled=!0),d.style.color=o):(!1!==o&&(this._setAttr(d,"stroked","true"),this._setAttr(d,"strokecolor",o)),h=t.rendNodeStroke,r.Z.exists(a)&&t.type!==i.Z.OBJECT_TYPE_IMAGE&&this._setAttr(h,"opacity",100*a+"%"))),t.visPropOld.strokecolor=l,t.visPropOld.strokeopacity=c)},setObjectStrokeWidth:function(t,e){var i,s=r.Z.evaluate(e);isNaN(s)||t.visPropOld.strokewidth===s||(i=t.rendNode,this.setPropertyPrim(i,"stroked","true"),r.Z.exists(s)&&(this.setPropertyPrim(i,"stroke-width",s),0===s&&r.Z.exists(t.rendNodeStroke)&&this._setAttr(i,"stroked","false")),t.visPropOld.strokewidth=s)},setShadow:function(t){var e=t.rendNodeShadow,i=r.Z.evaluate(t.visProp.shadow);e&&t.visPropOld.shadow!==i&&(i?(this._setAttr(e,"On","True"),this._setAttr(e,"Offset","3pt,3pt"),this._setAttr(e,"Opacity","60%"),this._setAttr(e,"Color","#aaaaaa")):this._setAttr(e,"On","False"),t.visPropOld.shadow=i)},suspendRedraw:function(){this.container.style.display="none"},unsuspendRedraw:function(){this.container.style.display=""}});var F=t.Z.VMLRenderer,J="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");t.Z.Util=t.Z.Util||{},t.Z.Util.genUUID=function(t){var e,i,r=[],s=0;for(""!==(t=t||"")&&"-"!==t.slice(t.length-1)&&(t+="-"),i=0;i<36;i++)8===i||13===i||18===i||23===i?r[i]="-":14===i?r[i]="4":(s<=2&&(s=33554432+16777216*Math.random()|0),e=15&s,s>>=4,r[i]=J[19===i?3&e|8:e]);return t+r.join("")};var z=t.Z.Util;t.Z.CanvasRenderer=function(i,r){if(this.type="canvas",this.canvasRoot=null,this.suspendHandle=null,this.canvasId=z.genUUID(),this.canvasNamespace=null,e.Z.isBrowser)this.container=i,this.container.style.MozUserSelect="none",this.container.style.userSelect="none",this.container.style.overflow="hidden",""===this.container.style.position&&(this.container.style.position="relative"),this.container.innerHTML=['<canvas id="',this.canvasId,'" width="',r.width,'px" height="',r.height,'px"></canvas>'].join(""),this.canvasRoot=this.container.ownerDocument.getElementById(this.canvasId),this.canvasRoot.style.display="block",this.context=this.canvasRoot.getContext("2d");else if(e.Z.isNode())try{this.canvasRoot=t.Z.createCanvas(500,500),this.context=this.canvasRoot.getContext("2d")}catch(t){throw new Error('JXG.createCanvas not available.\nInstall the npm package `canvas`\nand call:\n import { createCanvas } from "canvas.js";\n JXG.createCanvas = createCanvas;\n')}},t.Z.CanvasRenderer.prototype=new R,t.Z.extend(t.Z.CanvasRenderer.prototype,{_drawPolygon:function(t,e,i){var r,s=t.length,o=this.context;if(s>0){if(i&&(o.lineWidth=0),o.beginPath(),o.moveTo(t[0][0],t[0][1]),1===e)for(r=1;r<s;r++)o.lineTo(t[r][0],t[r][1]);else for(r=1;r<s;r+=3)o.bezierCurveTo(t[r][0],t[r][1],t[r+1][0],t[r+1][1],t[r+2][0],t[r+2][1]);i?(o.lineTo(t[0][0],t[0][1]),o.closePath(),o.fill("evenodd")):o.stroke()}},_fill:function(t){var e=this.context;e.save(),this._setColor(t,"fill")&&e.fill("evenodd"),e.restore()},_rotatePoint:function(t,e,i){return[e*Math.cos(t)-i*Math.sin(t),e*Math.sin(t)+i*Math.cos(t)]},_rotateShape:function(t,e){var i,r=[],s=t.length;if(s<=0)return t;for(i=0;i<s;i++)r.push(this._rotatePoint(e,t[i][0],t[i][1]));return r},updateGradientAngle:function(t,e){var r,s,o,n,a,h,l,c,d,p,f,_,m=1,g=Math.cos(-e),b=Math.sin(-e),v=t.getBoundingBox();return Math.abs(g)>Math.abs(b)?m/=Math.abs(g):m/=Math.abs(b),g>=0?(o=0,n=g*m):(o=-g*m,n=0),b>=0?(a=0,h=b*m):(a=-b*m,h=0),r=new u.Z(i.Z.COORDS_BY_USER,[v[0],v[1]],t.board),f=(s=new u.Z(i.Z.COORDS_BY_USER,[v[2],v[3]],t.board)).scrCoords[1]-r.scrCoords[1],_=s.scrCoords[2]-r.scrCoords[2],l=r.scrCoords[1]+f*o,d=r.scrCoords[2]+_*a,c=r.scrCoords[1]+f*n,p=r.scrCoords[2]+_*h,this.context.createLinearGradient(l,d,c,p)},updateGradientCircle:function(t,e,r,s,o,n,a){var h,l,c,d,p,f,_,m,g,b,v=t.getBoundingBox();return h=new u.Z(i.Z.COORDS_BY_USER,[v[0],v[1]],t.board),g=(l=new u.Z(i.Z.COORDS_BY_USER,[v[2],v[3]],t.board)).scrCoords[1]-h.scrCoords[1],b=h.scrCoords[2]-l.scrCoords[2],c=h.scrCoords[1]+g*e,d=l.scrCoords[2]+b*r,f=h.scrCoords[1]+g*o,_=l.scrCoords[2]+b*n,p=s*(g+b)*.5,m=a*(g+b)*.5,this.context.createRadialGradient(f,_,m,c,d,p)},updateGradient:function(t){var e,i,s=r.Z.evaluate(t.visProp.gradient);return e=r.Z.evaluate(t.visProp.fillcolor),"linear"===s?i=this.updateGradientAngle(t,r.Z.evaluate(t.visProp.gradientangle)):"radial"===s&&(i=this.updateGradientCircle(t,r.Z.evaluate(t.visProp.gradientcx),r.Z.evaluate(t.visProp.gradientcy),r.Z.evaluate(t.visProp.gradientr),r.Z.evaluate(t.visProp.gradientfx),r.Z.evaluate(t.visProp.gradientfy),r.Z.evaluate(t.visProp.gradientfr))),i.addColorStop(r.Z.evaluate(t.visProp.gradientstartoffset),e),i.addColorStop(r.Z.evaluate(t.visProp.gradientendoffset),r.Z.evaluate(t.visProp.gradientsecondcolor)),i},_setColor:function(t,e,i){var s,o,n,a,h,l,c,d,u=!0,p=t.visProp;return e=e||"stroke",i=i||e,s=this._getHighlighted(t),"linear"===(d=r.Z.evaluate(t.visProp.gradient))||"radial"===d?(this.context[i+"Style"]=this.updateGradient(t),u):("none"!==(n=r.Z.evaluate(p[s+e+"color"]))&&!1!==n?(l=(l=r.Z.evaluate(p[s+e+"opacity"]))>0?l:0,9!==n.length?(h=n,c=l):(h=(a=Y.Z.rgba2rgbo(n))[0],c=l*a[1]),this.context.globalAlpha=c,this.context[i+"Style"]=h):u=!1,o=parseFloat(r.Z.evaluate(p[s+"strokewidth"])),"stroke"!==e||isNaN(o)||(0===o?this.context.globalAlpha=0:this.context.lineWidth=o),"stroke"===e&&void 0!==p.linecap&&""!==p.linecap&&(this.context.lineCap=p.linecap),u)},_stroke:function(t){var e=this.context,i=r.Z.evaluate(t.visProp.dash),s=r.Z.evaluate(t.visProp.dashscale)?.5*r.Z.evaluate(t.visProp.strokewidth):1;e.save(),i>0?e.setLineDash&&e.setLineDash(this.dashArray[i-1].map((function(t){return t*s}))):this.context.lineDashArray=[],this._setColor(t,"stroke")&&e.stroke(),e.restore()},_translateShape:function(t,e,i){var r,s=[],o=t.length;if(o<=0)return t;for(r=0;r<o;r++)s.push([t[r][0]+e,t[r][1]+i]);return s},drawPoint:function(t){var e=r.Z.evaluate(t.visProp.face),i=r.Z.evaluate(t.visProp.size),s=t.coords.scrCoords,o=i*Math.sqrt(3)*.5,n=.5*i,a=parseFloat(r.Z.evaluate(t.visProp.strokewidth))/2,h=this.context;if(t.visPropCalc.visible)switch(e){case"cross":case"x":h.beginPath(),h.moveTo(s[1]-i,s[2]-i),h.lineTo(s[1]+i,s[2]+i),h.moveTo(s[1]+i,s[2]-i),h.lineTo(s[1]-i,s[2]+i),h.lineCap="round",h.lineJoin="round",h.closePath(),this._stroke(t);break;case"circle":case"o":h.beginPath(),h.arc(s[1],s[2],i+1+a,0,2*Math.PI,!1),h.closePath(),this._fill(t),this._stroke(t);break;case"square":case"[]":if(i<=0)break;h.save(),this._setColor(t,"stroke","fill")&&h.fillRect(s[1]-i-a,s[2]-i-a,2*i+3*a,2*i+3*a),h.restore(),h.save(),this._setColor(t,"fill"),h.fillRect(s[1]-i+a,s[2]-i+a,2*i-a,2*i-a),h.restore();break;case"plus":case"+":h.beginPath(),h.moveTo(s[1]-i,s[2]),h.lineTo(s[1]+i,s[2]),h.moveTo(s[1],s[2]-i),h.lineTo(s[1],s[2]+i),h.lineCap="round",h.lineJoin="round",h.closePath(),this._stroke(t);break;case"divide":case"|":h.beginPath(),h.moveTo(s[1],s[2]-i),h.lineTo(s[1],s[2]+i),h.lineCap="round",h.lineJoin="round",h.closePath(),this._stroke(t);break;case"minus":case"-":h.beginPath(),h.moveTo(s[1]-i,s[2]),h.lineTo(s[1]+i,s[2]),h.lineCap="round",h.lineJoin="round",h.closePath(),this._stroke(t);break;case"diamond2":case"<<>>":i*=1.41;case"diamond":case"<>":h.beginPath(),h.moveTo(s[1]-i,s[2]),h.lineTo(s[1],s[2]+i),h.lineTo(s[1]+i,s[2]),h.lineTo(s[1],s[2]-i),h.closePath(),this._fill(t),this._stroke(t);break;case"triangleup":case"A":case"a":case"^":h.beginPath(),h.moveTo(s[1],s[2]-i),h.lineTo(s[1]-o,s[2]+n),h.lineTo(s[1]+o,s[2]+n),h.closePath(),this._fill(t),this._stroke(t);break;case"triangledown":case"v":h.beginPath(),h.moveTo(s[1],s[2]+i),h.lineTo(s[1]-o,s[2]-n),h.lineTo(s[1]+o,s[2]-n),h.closePath(),this._fill(t),this._stroke(t);break;case"triangleleft":case"<":h.beginPath(),h.moveTo(s[1]-i,s[2]),h.lineTo(s[1]+n,s[2]-o),h.lineTo(s[1]+n,s[2]+o),h.closePath(),this._fill(t),this._stroke(t);break;case"triangleright":case">":h.beginPath(),h.moveTo(s[1]+i,s[2]),h.lineTo(s[1]-n,s[2]-o),h.lineTo(s[1]-n,s[2]+o),h.closePath(),this._fill(t),this._stroke(t)}},updatePoint:function(t){this.drawPoint(t)},drawArrows:function(t,e,s,o,n){var a,h,l,c,d,u,p,f,_,m,g,b,v,Z,C,y,P,E,O,x,S=this.context,M=1,w=1,T=1,N=n.evFirst,A=n.evLast;if("none"!==r.Z.evaluate(t.visProp.strokecolor)&&(N||A)){if(t.elementClass===i.Z.OBJECT_CLASS_LINE)a=e.scrCoords[1],h=e.scrCoords[2],l=s.scrCoords[1],c=s.scrCoords[2],O=x=Math.atan2(c-h,l-a);else{if(a=t.points[0].scrCoords[1],h=t.points[0].scrCoords[2],(E=t.points.length-1)<1)return;l=t.points[t.points.length-1].scrCoords[1],c=t.points[t.points.length-1].scrCoords[2],Z=t.points[1].scrCoords[1]-t.points[0].scrCoords[1],C=t.points[1].scrCoords[2]-t.points[0].scrCoords[2],y=t.points[E].scrCoords[1]-t.points[E-1].scrCoords[1],P=t.points[E].scrCoords[2]-t.points[E-1].scrCoords[2],N&&(O=Math.atan2(C,Z)),A&&(x=Math.atan2(P,y))}if(d=r.Z.evaluate(t.visProp[o+"strokewidth"]),N)if(u=d*n.sizeFirst,_=M=n.typeFirst,2===M)f=[[u,.5*-u],[0,0],[u,.5*u],[.5*u,0]];else if(3===M)f=[[u/3,.5*-u],[0,.5*-u],[0,.5*u],[u/3,.5*u]];else if(4===M)for(u/=10,w=3,v=(f=[[10,3.31],[6.47,3.84],[2.87,4.5],[0,6.63],[.67,5.52],[1.33,4.42],[2,3.31],[1.33,2.21],[.67,1.1],[0,0],[2.87,2.13],[6.47,2.79],[10,3.31]]).length,b=0;b<v;b++)f[b][0]*=-u,f[b][1]*=u,f[b][0]+=10*u,f[b][1]-=3.31*u;else if(5===M)for(u/=10,w=3,v=(f=[[10,3.28],[6.61,4.19],[3.19,5.07],[0,6.55],[.62,5.56],[1,4.44],[1,3.28],[1,2.11],[.62,.99],[0,0],[3.19,1.49],[6.61,2.37],[10,3.28]]).length,b=0;b<v;b++)f[b][0]*=-u,f[b][1]*=u,f[b][0]+=10*u,f[b][1]-=3.28*u;else if(6===M)for(u/=10,w=3,v=(f=[[10,2.84],[6.61,3.59],[3.21,4.35],[0,5.68],[.33,4.73],[.67,3.78],[1,2.84],[.67,1.89],[.33,.95],[0,0],[3.21,1.33],[6.61,2.09],[10,2.84]]).length,b=0;b<v;b++)f[b][0]*=-u,f[b][1]*=u,f[b][0]+=10*u,f[b][1]-=2.84*u;else if(7===M)for(u=d,w=3,v=(f=[[0,10.39],[2.01,6.92],[5.96,5.2],[10,5.2],[5.96,5.2],[2.01,3.47],[0,0]]).length,b=0;b<v;b++)f[b][0]*=-u,f[b][1]*=u,f[b][0]+=10*u,f[b][1]-=5.2*u;else f=[[u,.5*-u],[0,0],[u,.5*u]];if(A)if(u=d*n.sizeLast,m=M=n.typeLast,2===M)p=[[-u,.5*-u],[0,0],[-u,.5*u],[.5*-u,0]];else if(3===M)p=[[-u/3,.5*-u],[0,.5*-u],[0,.5*u],[-u/3,.5*u]];else if(4===M)for(u/=10,T=3,v=(p=[[10,3.31],[6.47,3.84],[2.87,4.5],[0,6.63],[.67,5.52],[1.33,4.42],[2,3.31],[1.33,2.21],[.67,1.1],[0,0],[2.87,2.13],[6.47,2.79],[10,3.31]]).length,b=0;b<v;b++)p[b][0]*=u,p[b][1]*=u,p[b][0]-=10*u,p[b][1]-=3.31*u;else if(5===M)for(u/=10,T=3,v=(p=[[10,3.28],[6.61,4.19],[3.19,5.07],[0,6.55],[.62,5.56],[1,4.44],[1,3.28],[1,2.11],[.62,.99],[0,0],[3.19,1.49],[6.61,2.37],[10,3.28]]).length,b=0;b<v;b++)p[b][0]*=u,p[b][1]*=u,p[b][0]-=10*u,p[b][1]-=3.28*u;else if(6===M)for(u/=10,T=3,v=(p=[[10,2.84],[6.61,3.59],[3.21,4.35],[0,5.68],[.33,4.73],[.67,3.78],[1,2.84],[.67,1.89],[.33,.95],[0,0],[3.21,1.33],[6.61,2.09],[10,2.84]]).length,b=0;b<v;b++)p[b][0]*=u,p[b][1]*=u,p[b][0]-=10*u,p[b][1]-=2.84*u;else if(7===M)for(u=d,T=3,v=(p=[[0,10.39],[2.01,6.92],[5.96,5.2],[10,5.2],[5.96,5.2],[2.01,3.47],[0,0]]).length,b=0;b<v;b++)p[b][0]*=u,p[b][1]*=u,p[b][0]-=10*u,p[b][1]-=5.2*u;else p=[[-u,.5*-u],[0,0],[-u,.5*u]];S.save(),this._setColor(t,"stroke","fill")&&(this._setColor(t,"stroke"),N&&(g=7!==_,this._drawPolygon(this._translateShape(this._rotateShape(f,O),a,h),w,g)),A&&(g=7!==m,this._drawPolygon(this._translateShape(this._rotateShape(p,x),l,c),T,g))),S.restore()}},drawLine:function(t){var e,s,o,n,a,l=new u.Z(i.Z.COORDS_BY_USER,t.point1.coords.usrCoords,t.board),c=new u.Z(i.Z.COORDS_BY_USER,t.point2.coords.usrCoords,t.board),d=null;t.visPropCalc.visible&&(o=this._getHighlighted(t),n=r.Z.evaluate(t.visProp[o+"strokewidth"]),((a=this.getArrowHeadData(t,n,o)).evFirst||a.evLast)&&(d=-4),h.Z.calcStraight(t,l,c,d),this.handleTouchpoints(t,l,c,a),e=new u.Z(i.Z.COORDS_BY_USER,l.usrCoords,t.board),s=new u.Z(i.Z.COORDS_BY_USER,c.usrCoords,t.board),this.getPositionArrowHead(t,l,c,a),this.context.beginPath(),this.context.moveTo(l.scrCoords[1],l.scrCoords[2]),this.context.lineTo(c.scrCoords[1],c.scrCoords[2]),this._stroke(t),(a.evFirst||a.evLast)&&this.drawArrows(t,e,s,o,a))},updateLine:function(t){this.drawLine(t)},drawTicks:function(){},updateTicks:function(t){var e,i,r,s,o,n,a=t.ticks.length,h=this.context;for(h.beginPath(),e=0;e<a;e++)for(r=(i=t.ticks[e])[0],s=i[1],o=r.length,h.moveTo(r[0],s[0]),n=1;n<o;++n)h.lineTo(r[n],s[n]);h.lineCap="round",this._stroke(t)},drawCurve:function(t){var e,i,s;r.Z.evaluate(t.visProp.handdrawing)?this.updatePathStringBezierPrim(t):this.updatePathStringPrim(t),t.numberPoints>1&&(e=this._getHighlighted(t),i=r.Z.evaluate(t.visProp[e+"strokewidth"]),((s=this.getArrowHeadData(t,i,e)).evFirst||s.evLast)&&this.drawArrows(t,null,null,e,s))},updateCurve:function(t){this.drawCurve(t)},drawEllipse:function(t){var e=t.center.coords.scrCoords[1],i=t.center.coords.scrCoords[2],r=t.board.unitX,s=t.board.unitY,o=2*t.Radius(),n=2*t.Radius(),a=o*r,h=n*s,l=e-a/2,c=i-h/2,d=a/2*.5522848,u=h/2*.5522848,p=l+a,f=c+h,_=l+a/2,m=c+h/2,g=this.context;o>0&&n>0&&!isNaN(e+i)&&(g.beginPath(),g.moveTo(l,m),g.bezierCurveTo(l,m-u,_-d,c,_,c),g.bezierCurveTo(_+d,c,p,m-u,p,m),g.bezierCurveTo(p,m+u,_+d,f,_,f),g.bezierCurveTo(_-d,f,l,m+u,l,m),g.closePath(),this._fill(t),this._stroke(t))},updateEllipse:function(t){return this.drawEllipse(t)},displayCopyright:function(t,e){var i=this.context;i.save(),i.font=e+"px Arial",i.fillStyle="#aaa",i.lineWidth=.5,i.fillText(t,10,2+e),i.restore()},drawInternalText:function(t){var e=r.Z.evaluate(t.visProp.fontsize),i=r.Z.evaluate(t.visProp.fontunit),s=t.getAnchorX(),o=t.getAnchorY(),n=this.context;return n.save(),this._setColor(t,"stroke","fill")&&!isNaN(t.coords.scrCoords[1]+t.coords.scrCoords[2])&&(n.font=(e>0?e:0)+i+" Arial",this.transformImage(t,t.transformations),"left"===s?n.textAlign="left":"right"===s?n.textAlign="right":"middle"===s&&(n.textAlign="center"),"bottom"===o?n.textBaseline="bottom":"top"===o?n.textBaseline="top":"middle"===o&&(n.textBaseline="middle"),n.fillText(t.plaintext,t.coords.scrCoords[1],t.coords.scrCoords[2])),n.restore(),null},updateInternalText:function(t){this.drawInternalText(t)},setObjectStrokeColor:function(t,e,s){var o,n,a,h,l=r.Z.evaluate(e),c=r.Z.evaluate(s);c=c>0?c:0,t.visPropOld.strokecolor===l&&t.visPropOld.strokeopacity===c||(r.Z.exists(l)&&!1!==l&&(9!==l.length?(o=l,a=c):(o=(n=Y.Z.rgba2rgbo(l))[0],a=c*n[1]),h=t.rendNode,t.elementClass===i.Z.OBJECT_CLASS_TEXT&&"html"===r.Z.evaluate(t.visProp.display)&&(h.style.color=o,h.style.opacity=a)),t.visPropOld.strokecolor=l,t.visPropOld.strokeopacity=c)},drawImage:function(t){t.rendNode=new Image,t._src="",this.updateImage(t)},updateImage:function(t){var e=this.context,i=r.Z.evaluate(t.visProp.fillopacity),s=r.Z.bind((function(){t.imgIsLoaded=!0,t.size[0]<=0||t.size[1]<=0||(e.save(),e.globalAlpha=i,this.transformImage(t,t.transformations),e.drawImage(t.rendNode,t.coords.scrCoords[1],t.coords.scrCoords[2]-t.size[1],t.size[0],t.size[1]),e.restore())}),this);this.updateImageURL(t)?t.rendNode.onload=s:t.imgIsLoaded&&s()},transformImage:function(t,e){var s,n,a,h,l,c=e.length,u=this.context;if(c>0)if(s=this.joinTransforms(t,e),t.elementClass===i.Z.OBJECT_CLASS_TEXT&&"html"===t.visProp.display){if(-1===(n=" matrix("+[s[1][1],s[2][1],s[1][2],s[2][2],s[1][0],s[2][0]].join(",")+") ").indexOf("NaN")){switch((l=t.rendNode).style.transform=n,a=-t.coords.scrCoords[1],h=-t.coords.scrCoords[2],r.Z.evaluate(t.visProp.anchorx)){case"right":a+=t.size[0];break;case"middle":a+=.5*t.size[0]}switch(r.Z.evaluate(t.visProp.anchory)){case"bottom":h+=t.size[1];break;case"middle":h+=.5*t.size[1]}l.style["transform-origin"]=a+"px "+h+"px"}}else Math.abs(d.Z.det(s))>=o.Z.eps&&u.transform(s[1][1],s[2][1],s[1][2],s[2][2],s[1][0],s[2][0])},updateImageURL:function(t){var e;return e=r.Z.evaluate(t.url),t._src!==e&&(t.imgIsLoaded=!1,t.rendNode.src=e,t._src=e,!0)},remove:function(t){r.Z.exists(t)&&r.Z.exists(t.parentNode)&&t.parentNode.removeChild(t)},updatePathStringPrim:function(t){var e,i,r,s,o,n="M",a=n,h=5e3,l=this.context;if(!(t.numberPoints<=0)){if(o=Math.min(t.points.length,t.numberPoints),l.beginPath(),1===t.bezierDegree)for(e=0;e<o;e++)i=t.points[e].scrCoords,isNaN(i[1])||isNaN(i[2])?a=n:(i[1]>h?i[1]=h:i[1]<-5e3&&(i[1]=-5e3),i[2]>h?i[2]=h:i[2]<-5e3&&(i[2]=-5e3),a===n?l.moveTo(i[1],i[2]):l.lineTo(i[1],i[2]),a="L");else if(3===t.bezierDegree)for(e=0;e<o;)i=t.points[e].scrCoords,isNaN(i[1])||isNaN(i[2])?a=n:(a===n?l.moveTo(i[1],i[2]):(e+=1,r=t.points[e].scrCoords,e+=1,s=t.points[e].scrCoords,l.bezierCurveTo(i[1],i[2],r[1],r[2],s[1],s[2])),a="C"),e+=1;l.lineCap="round",this._fill(t),this._stroke(t)}},updatePathStringBezierPrim:function(t){var e,i,s,o,n,a,h,l="M",c=l,u=5e3,p=r.Z.evaluate(t.visProp.strokewidth),f="plot"!==r.Z.evaluate(t.visProp.curvetype),_=this.context;if(!(t.numberPoints<=0)){for(f&&t.board.options.curve.RDPsmoothing&&(t.points=d.Z.RamerDouglasPeucker(t.points,.5)),h=Math.min(t.points.length,t.numberPoints),_.beginPath(),i=1;i<3;i++)for(c=l,e=0;e<h;e++)o=t.points[e].scrCoords,isNaN(o[1])||isNaN(o[2])?c=l:(o[1]>u?o[1]=u:o[1]<-5e3&&(o[1]=-5e3),o[2]>u?o[2]=u:o[2]<-5e3&&(o[2]=-5e3),c===l?_.moveTo(o[1],o[2]):(s=2*i,_.bezierCurveTo(n+.333*(o[1]-n)+p*(s*Math.random()-i),a+.333*(o[2]-a)+p*(s*Math.random()-i),n+.666*(o[1]-n)+p*(s*Math.random()-i),a+.666*(o[2]-a)+p*(s*Math.random()-i),o[1],o[2])),c="C",n=o[1],a=o[2]);_.lineCap="round",this._fill(t),this._stroke(t)}},updatePolygonPrim:function(t,e){var i,r,s,o=e.vertices.length,n=this.context,a=!0;if(!(o<=0)&&e.visPropCalc.visible){for("polygonalchain"===e.elType&&o++,n.beginPath(),r=0;!e.vertices[r].isReal&&r<o-1;)r++,a=!1;for(i=e.vertices[r].coords.scrCoords,n.moveTo(i[1],i[2]),s=r;s<o-1;s++)e.vertices[s].isReal||(a=!1),i=e.vertices[s].coords.scrCoords,n.lineTo(i[1],i[2]);n.closePath(),a&&this._fill(e)}},display:function(t,e){t&&t.rendNode&&(t.visPropOld.visible=e,t.rendNode.style.visibility=e?"inherit":"hidden")},show:function(e){t.Z.deprecated("Board.renderer.show()","Board.renderer.display()"),r.Z.exists(e.rendNode)&&(e.rendNode.style.visibility="inherit")},hide:function(e){t.Z.deprecated("Board.renderer.hide()","Board.renderer.display()"),r.Z.exists(e.rendNode)&&(e.rendNode.style.visibility="hidden")},setGradient:function(t){},setShadow:function(t){t.visPropOld.shadow!==t.visProp.shadow&&(t.visPropOld.shadow=t.visProp.shadow)},highlight:function(t){return t.elementClass===i.Z.OBJECT_CLASS_TEXT&&"html"===r.Z.evaluate(t.visProp.display)?this.updateTextStyle(t,!0):(t.board.prepareUpdate(),t.board.renderer.suspendRedraw(t.board),t.board.updateRenderer(),t.board.renderer.unsuspendRedraw()),this},noHighlight:function(t){return t.elementClass===i.Z.OBJECT_CLASS_TEXT&&"html"===r.Z.evaluate(t.visProp.display)?this.updateTextStyle(t,!1):(t.board.prepareUpdate(),t.board.renderer.suspendRedraw(t.board),t.board.updateRenderer(),t.board.renderer.unsuspendRedraw()),this},suspendRedraw:function(e){this.context.save(),this.context.clearRect(0,0,this.canvasRoot.width,this.canvasRoot.height),e&&e.attr.showcopyright&&this.displayCopyright(t.Z.licenseText,12)},unsuspendRedraw:function(){this.context.restore()},resize:function(t,e){this.container?(this.canvasRoot.style.width=parseFloat(t)+"px",this.canvasRoot.style.height=parseFloat(e)+"px",this.canvasRoot.setAttribute("width",2*parseFloat(t)+"px"),this.canvasRoot.setAttribute("height",2*parseFloat(e)+"px")):(this.canvasRoot.width=2*parseFloat(t),this.canvasRoot.height=2*parseFloat(e)),this.context=this.canvasRoot.getContext("2d"),this.context.scale(2,2)},removeToInsertLater:function(){return function(){}}});var G=t.Z.CanvasRenderer;t.Z.NoRenderer=function(){this.enhancedRendering=!1,this.type="no"},t.Z.extend(t.Z.NoRenderer.prototype,{drawPoint:function(t){},updatePoint:function(t){},changePointStyle:function(t){},drawLine:function(t){},updateLine:function(t){},drawTicks:function(t){},updateTicks:function(t){},drawCurve:function(t){},updateCurve:function(t){},drawEllipse:function(t){},updateEllipse:function(t){},drawPolygon:function(t){},updatePolygon:function(t){},displayCopyright:function(t,e){},drawInternalText:function(t){},updateInternalText:function(t){},drawText:function(t){},updateText:function(t){},updateTextStyle:function(t,e){},updateInternalTextStyle:function(t,e,i){},drawImage:function(t){},updateImage:function(t){},transformImage:function(t,e){},updateImageURL:function(t){},appendChildPrim:function(t,e){},appendNodesToElement:function(t,e){},createPrim:function(t,e){return null},remove:function(t){},makeArrows:function(t){},updateEllipsePrim:function(t,e,i,r,s){},updateLinePrim:function(t,e,i,r,s,o){},updatePathPrim:function(t,e,i){},updatePathStringPoint:function(t,e,i){},updatePathStringPrim:function(t){},updatePathStringBezierPrim:function(t){},updatePolygonPrim:function(t,e){},updateRectPrim:function(t,e,i,r,s){},setPropertyPrim:function(t,e,i){},display:function(t,e){t&&(t.visPropOld.visible=e)},show:function(t){},hide:function(t){},setBuffering:function(t,e){},setDashStyle:function(t){},setDraft:function(t){},removeDraft:function(t){},setGradient:function(t){},updateGradient:function(t){},setObjectTransition:function(t,e){},setObjectFillColor:function(t,e,i){},setObjectStrokeColor:function(t,e,i){},setObjectStrokeWidth:function(t,e){},setShadow:function(t){},highlight:function(t){},noHighlight:function(t){},suspendRedraw:function(){},unsuspendRedraw:function(){},drawNavigationBar:function(t){},getElementById:function(t){return null},resize:function(t,e){},removeToInsertLater:function(){return function(){}}}),t.Z.NoRenderer.prototype=new R;var W=t.Z.NoRenderer;t.Z.JSXGraph={rendererType:(k.Z.board.renderer="no",e.Z.supportsVML()&&(k.Z.board.renderer="vml",document.onmousemove=function(){var t;return document.body&&(t=document.body.scrollLeft,t+=document.body.scrollTop),t}),e.Z.supportsCanvas()&&(k.Z.board.renderer="canvas"),e.Z.supportsSVG()&&(k.Z.board.renderer="svg"),e.Z.isNode()&&e.Z.supportsCanvas()&&(k.Z.board.renderer="canvas"),(e.Z.isNode()||"no"===k.Z.renderer)&&(k.Z.text.display="internal",k.Z.infobox.display="internal"),k.Z.board.renderer),initRenderer:function(t,e,i,s){var o;if(r.Z.exists(i)&&!1!==i||"object"!=typeof document||(i=document),"object"==typeof i&&null!==t)for(o=r.Z.isString(t)?i.getElementById(t):t;o.firstChild;)o.removeChild(o.firstChild);else o=t;return void 0!==s&&"auto"!==s||(s=this.rendererType),"svg"===s?new U(o,e):"vml"===s?new F(o):"canvas"===s?new G(o,e):new W},_setAttributes:function(t,e){var i,s,o=r.Z.copyAttributes(t,e,"board"),n=["drag","fullscreen","intl","keyboard","logging","navbar","pan","resize","screenshot","selection","zoom"],a=n.length;for(i=0;i<a;i++)o[s=n[i]]=r.Z.copyAttributes(o,e,"board",s);return o.movetarget=t.moveTarget||t.movetarget||e.board.moveTarget,o},_fillBoard:function(e,i,r){e.initInfobox(i.infobox),e.maxboundingbox=i.maxboundingbox,e.resizeContainer(r.width,r.height,!0,!0),e._createSelectionPolygon(i),e.renderer.drawNavigationBar(e,i.navbar),t.Z.boards[e.id]=e},_setARIA:function(t,i){var s,o,n,a,h,l,c=i.document;if("object"!=typeof c){if(!e.Z.isBrowser)return;c=document}s=(o=r.Z.isString(t)?c.getElementById(t):t).ownerDocument,a=o.parentNode,h=t+"_ARIAlabel",l=t+"_ARIAdescription",(n=s.createElement("div")).innerHTML=i.title,n.setAttribute("id",h),n.style.display="none",a.insertBefore(n,o),(n=s.createElement("div")).innerHTML=i.description,n.setAttribute("id",l),n.style.display="none",a.insertBefore(n,o),o.setAttribute("aria-labelledby",h),o.setAttribute("aria-describedby",l)},_removeARIANodes:function(t){var e,i,r;"object"==typeof(r=t.document||document)&&(i=t.containerObj.getAttribute("aria-labelledby"),(e=r.getElementById(i))&&e.parentNode&&e.parentNode.removeChild(e),i=t.containerObj.getAttribute("aria-describedby"),(e=r.getElementById(i))&&e.parentNode&&e.parentNode.removeChild(e))},initBoard:function(i,s){var n,a,h,l,c,d,u,p,f,_,m,g,b,v,Z,C=0,y=0,P={};return"default"!==(s=s||{}).theme&&r.Z.exists(t.Z.themes[s.theme])&&(P=t.Z.themes[s.theme]),v=r.Z.deepCopy(k.Z,P,!0),_=this._setAttributes(s,v),p=e.Z.getDimensions(i,_.document),_.unitx||_.unity?(n=r.Z.def(_.originx,150),a=r.Z.def(_.originy,150),h=r.Z.def(_.unitx,50),l=r.Z.def(_.unity,50)):((f=_.boundingbox)[0]<_.maxboundingbox[0]&&(f[0]=_.maxboundingbox[0]),f[1]>_.maxboundingbox[1]&&(f[1]=_.maxboundingbox[1]),f[2]>_.maxboundingbox[2]&&(f[2]=_.maxboundingbox[2]),f[3]<_.maxboundingbox[3]&&(f[3]=_.maxboundingbox[3]),c=Math.max(parseInt(p.width,10),o.Z.eps),d=Math.max(parseInt(p.height,10),o.Z.eps),r.Z.exists(f)&&_.keepaspectratio?(h=c/(f[2]-f[0]),l=d/(f[1]-f[3]),Math.abs(h)<Math.abs(l)?y=.5*(d/(l=Math.abs(h)*l/Math.abs(l))-(f[1]-f[3])):C=.5*(c/(h=Math.abs(l)*h/Math.abs(h))-(f[2]-f[0]))):(h=c/(f[2]-f[0]),l=d/(f[1]-f[3])),n=-h*(f[0]-C),a=l*(f[1]+y)),u=this.initRenderer(i,p,_.document,_.renderer),this._setARIA(i,_),(Z=new X(i,u,_.id,[n,a],_.zoomx,_.zoomy,h,l,p.width,p.height,_)).keepaspectratio=_.keepaspectratio,this._fillBoard(Z,_,p),Z.suspendUpdate(),(_=Z.attr).axis&&(m="object"==typeof _.axis?_.axis:{},g=r.Z.deepCopy(v.board.defaultaxes.x,m),b=r.Z.deepCopy(v.board.defaultaxes.y,m),_.defaultaxes.x&&(g=r.Z.deepCopy(g,_.defaultaxes.x)),_.defaultaxes.y&&(b=r.Z.deepCopy(b,_.defaultaxes.y)),Z.defaultAxes={},Z.defaultAxes.x=Z.create("axis",[[0,0],[1,0]],g),Z.defaultAxes.y=Z.create("axis",[[0,0],[0,1]],b)),_.grid&&Z.create("grid",[],"object"==typeof _.grid?_.grid:{}),Z.unsuspendUpdate(),Z},loadBoardFromFile:function(t,i,r,s,o){var n,a,h,l,c;return s=s||{},n=this._setAttributes(s),l=e.Z.getDimensions(t,n.document),a=this.initRenderer(t,l,n.document,n.renderer),this._setARIA(t,n),h=new X(t,a,"",[150,150],1,1,50,50,l.width,l.height,n),this._fillBoard(h,n,l),c=n.encoding||"iso-8859-1",L.parseFileContent(i,h,r,!0,c,o),h},loadBoardFromString:function(t,i,r,s,o){var n,a,h,l;return s=s||{},n=this._setAttributes(s),l=e.Z.getDimensions(t,n.document),a=this.initRenderer(t,l,n.document,n.renderer),this._setARIA(t,n),h=new X(t,a,"",[150,150],1,1,50,50,l.width,l.height,n),this._fillBoard(h,n,l),L.parseString(i,h,r,!0,o),h},freeBoard:function(e){var i;for(i in"string"==typeof e&&(e=t.Z.boards[e]),this._removeARIANodes(e),e.removeEventHandlers(),e.suspendUpdate(),e.objects)e.objects.hasOwnProperty(i)&&e.objects[i].remove();for(;e.containerObj.firstChild;)e.containerObj.removeChild(e.containerObj.firstChild);for(i in e.objects)e.objects.hasOwnProperty(i)&&delete e.objects[i];delete e.renderer,e.jc.creator.clearCache(),delete e.jc,delete t.Z.boards[e.id]},registerElement:function(e,i){t.Z.deprecated("JXG.JSXGraph.registerElement()","JXG.registerElement()"),t.Z.registerElement(e,i)}},e.Z.isBrowser&&"object"==typeof window&&"object"==typeof document&&e.Z.addEvent(window,"load",(function(){var e,i,s,o,n,a,h,l,c,d,u,p,f,_,m,g,b,v,Z=!1,C=document.getElementsByTagName("script"),y=function(e,i,r){var s=t.Z.JSXGraph.initBoard(n,{boundingbox:r,keepaspectratio:!0,grid:m,axis:_,showReload:!0});if(i.toLowerCase().indexOf("script")>-1)s.construct(e);else try{s.jc.parse(e)}catch(e){t.Z.debug(e)}return s},P=function(e,i,r,s){return function(){var o;t.Z.JSXGraph.freeBoard(e),(o=y(i,r,s)).reload=P(o,i,r,s)}};for(i=0;i<C.length;i++)if(e=C[i].getAttribute("type",!1),r.Z.exists(e)&&("text/jessiescript"===e.toLowerCase()||"jessiescript"===e.toLowerCase()||"text/jessiecode"===e.toLowerCase()||"jessiecode"===e.toLowerCase())){if(p=C[i].getAttribute("class",!1)||"",l=C[i].getAttribute("width",!1)||"",c=C[i].getAttribute("height",!1)||"",d=C[i].getAttribute("maxwidth",!1)||"100%",u=C[i].getAttribute("aspectratio",!1)||"1/1",f=C[i].getAttribute("boundingbox",!1)||"-5, 5, 5, -5",n=C[i].getAttribute("container",!1),b=C[i].getAttribute("src",!1),4!==(f=f.split(",")).length)f=[-5,5,5,-5];else for(s=0;s<f.length;s++)f[s]=parseFloat(f[s]);if(_=r.Z.str2Bool(C[i].getAttribute("axis",!1)||"false"),m=r.Z.str2Bool(C[i].getAttribute("grid",!1)||"false"),r.Z.exists(n))o=document.getElementById(n);else{n="jessiescript_autgen_jxg_"+i,(o=document.createElement("div")).setAttribute("id",n),h=""!==l?"width:"+l+";":"",h+=""!==c?"height:"+c+";":"",h+=""!==d?"max-width:"+d+";":"",h+=""!==u?"aspect-ratio:"+u+";":"",o.setAttribute("style",h),o.setAttribute("class","jxgbox "+p);try{document.body.insertBefore(o,C[i])}catch(t){"object"==typeof jQuery&&jQuery(o).insertBefore(C[i])}}g="",r.Z.exists(b)?(Z=!0,(v=new XMLHttpRequest).open("GET",b),v.overrideMimeType("text/plain; charset=x-user-defined"),v.addEventListener("load",(function(){if(!(this.status<400))throw new Error("\nJSXGraph: failed to load file",b,":",this.responseText);g=this.responseText+"\n"+g,(a=y(g,e,f)).reload=P(a,g,e,f)})),v.addEventListener("error",(function(t){throw new Error("\nJSXGraph: failed to load file",b,":",t)})),v.send()):Z=!1,document.getElementById(n)?(g=(g=C[i].innerHTML).replace(/<!\[CDATA\[/g,"").replace(/\]\]>/g,""),C[i].innerHTML=g,Z||((a=y(g,e,f)).reload=P(a,g,e,f))):t.Z.debug("JSXGraph: Apparently the div injection failed. Can't create a board, sorry.")}}),window);t.Z.JSXGraph;var H=__webpack_require__(958),V=__webpack_require__(218);t.Z.Point=function(t,e,r){this.constructor(t,r,i.Z.OBJECT_TYPE_POINT,i.Z.OBJECT_CLASS_POINT),this.element=this.board.select(r.anchor),this.coordsConstructor(e),this.elType="point",this.id=this.board.setId(this,"P"),this.board.renderer.drawPoint(this),this.board.finalizeAdding(this),this.createGradient(),this.createLabel()},t.Z.Point.prototype=new H.Z,r.Z.copyPrototypeMethods(t.Z.Point,V.Z,"coordsConstructor"),t.Z.extend(t.Z.Point.prototype,{hasPoint:function(t,e){var i,s,o,n=this.coords.scrCoords,a=r.Z.evaluate(this.visProp.sizeunit);return r.Z.isObject(r.Z.evaluate(this.visProp.precision))?(o=this.board._inputDevice,s=r.Z.evaluate(this.visProp.precision[o])):s=this.board.options.precision.hasPoint,i=parseFloat(r.Z.evaluate(this.visProp.size)),"user"===a&&(i*=Math.sqrt(Math.abs(this.board.unitX*this.board.unitY))),(i+=.5*parseFloat(r.Z.evaluate(this.visProp.strokewidth)))<s&&(i=s),Math.abs(n[1]-t)<i+2&&Math.abs(n[2]-e)<i+2},update:function(t){return this.needsUpdate?(this.updateCoords(t),r.Z.evaluate(this.visProp.trace)&&this.cloneToBackground(!0),this):this},updateTransform:function(t){var e,r;if(0===this.transformations.length||null===this.baseElement)return this;for(this===this.baseElement?(e=this.transformations[0].apply(this.baseElement,"self"),this.coords.setCoordinates(i.Z.COORDS_BY_USER,e)):e=this.transformations[0].apply(this.baseElement),this.coords.setCoordinates(i.Z.COORDS_BY_USER,e),r=1;r<this.transformations.length;r++)this.coords.setCoordinates(i.Z.COORDS_BY_USER,this.transformations[r].apply(this));return this},updateRenderer:function(){return this.updateRendererGeneric("updatePoint"),this},bounds:function(){return this.coords.usrCoords.slice(1).concat(this.coords.usrCoords.slice(1))},makeIntersection:function(t,e,r,s){var o;t=this.board.select(t),e=this.board.select(e),o=h.Z.intersectionFunction(this.board,t,e,r,s,this.visProp.alwaysintersect),this.addConstraint([o]);try{t.addChild(this),e.addChild(this)}catch(i){throw new Error("JSXGraph: Can't create 'intersection' with parent types '"+typeof t+"' and '"+typeof e+"'.")}this.type=i.Z.OBJECT_TYPE_INTERSECTION,this.elType="intersection",this.parents=[t.id,e.id,r,s],this.generatePolynomial=function(){var i=t.generatePolynomial(this),r=e.generatePolynomial(this);return 0===i.length||0===r.length?[]:[i[0],r[0]]},this.prepareUpdate().update()},setStyle:function(t){return this.visProp.face=["cross","cross","cross","circle","circle","circle","circle","square","square","square","plus","plus","plus"][t],this.visProp.size=[2,3,4,1,2,3,4,2,3,4,2,3,4][t],this.board.renderer.changePointStyle(this),this},normalizeFace:function(e){return t.Z.deprecated("Point.normalizeFace()","JXG.normalizePointFace()"),k.Z.normalizePointFace(e)},face:function(e){t.Z.deprecated("Point.face()","Point.setAttribute()"),this.setAttribute({face:e})},size:function(e){t.Z.deprecated("Point.size()","Point.setAttribute()"),this.setAttribute({size:e})},isOn:function(e,s){var n,a;return s=s||o.Z.eps,r.Z.isPoint(e)?this.Dist(e)<s:e.elementClass===i.Z.OBJECT_CLASS_LINE?("segment"!==e.elType||r.Z.evaluate(this.visProp.alwaysintersect)||(n=t.Z.Math.Geometry.projectCoordsToSegment(this.coords.usrCoords,e.point1.coords.usrCoords,e.point2.coords.usrCoords))[1]>=0&&n[1]<=1)&&h.Z.distPointLine(this.coords.usrCoords,e.stdform)<s:e.elementClass===i.Z.OBJECT_CLASS_CIRCLE?r.Z.evaluate(e.visProp.hasinnerpoints)?this.Dist(e.center)<e.Radius()+s:Math.abs(this.Dist(e.center)-e.Radius())<s:e.elementClass===i.Z.OBJECT_CLASS_CURVE?(a=h.Z.projectPointToCurve(this,e,this.board)[0],h.Z.distance(this.coords.usrCoords,a.usrCoords,3)<s):e.type===i.Z.OBJECT_TYPE_POLYGON?!(!r.Z.evaluate(e.visProp.hasinnerpoints)||!e.pnpoly(this.coords.usrCoords[1],this.coords.usrCoords[2],t.Z.COORDS_BY_USER))||(n=h.Z.projectCoordsToPolygon(this.coords.usrCoords,e),h.Z.distance(this.coords.usrCoords,n,3)<s):e.type===i.Z.OBJECT_TYPE_TURTLE&&(a=h.Z.projectPointToTurtle(this,e,this.board),h.Z.distance(this.coords.usrCoords,a.usrCoords,3)<s)},cloneToBackground:function(){var t={};return t.id=this.id+"T"+this.numTraces,this.numTraces+=1,t.coords=this.coords,t.visProp=r.Z.deepCopy(this.visProp,this.visProp.traceattributes,!0),t.visProp.layer=this.board.options.layer.trace,t.elementClass=i.Z.OBJECT_CLASS_POINT,t.board=this.board,r.Z.clearVisPropOld(t),t.visPropCalc={visible:r.Z.evaluate(t.visProp.visible)},this.board.renderer.drawPoint(t),this.traces[t.id]=t.rendNode,this}}),t.Z.createPoint=function(e,i,s){var o,n;if(n=r.Z.copyAttributes(s,e.options,"point"),!(o=V.Z.create(t.Z.Point,e,i,n)))throw new Error("JSXGraph: Can't create point with parent types '"+typeof i[0]+"' and '"+typeof i[1]+"'.\nPossible parent types: [x,y], [z,x,y], [element,transformation]");return o},t.Z.createGlider=function(t,e,i){var s,o,n=r.Z.copyAttributes(i,t.options,"glider");return o=1===e.length?[0,0]:e.slice(0,2),(s=t.create("point",o,n)).makeGlider(e[e.length-1]),s},t.Z.createIntersectionPoint=function(t,e,s){var o,n,a,l,c,d,u=r.Z.copyAttributes(s,t.options,"intersection");e.push(0,0),n=t.select(e[0]),a=t.select(e[1]),c=e[2]||0,d=e[3]||0,o=t.create("point",[0,0,0],u),l=h.Z.intersectionFunction(t,n,a,c,d,o.visProp.alwaysintersect),o.addConstraint([l]);try{n.addChild(o),a.addChild(o)}catch(t){throw new Error("JSXGraph: Can't create 'intersection' with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.")}return o.type=i.Z.OBJECT_TYPE_INTERSECTION,o.elType="intersection",o.setParents([n.id,a.id]),o.intersectionNumbers=[c,d],o.getParents=function(){return this.parents.concat(this.intersectionNumbers)},o.generatePolynomial=function(){var t=n.generatePolynomial(o),e=a.generatePolynomial(o);return 0===t.length||0===e.length?[]:[t[0],e[0]]},o},t.Z.createOtherIntersectionPoint=function(t,e,s){var o,n,a,l,c,d,u,p=!0,f=r.Z.copyAttributes(s,t.options,"otherintersection");if(3!==e.length)p=!1;else{for(n=t.select(e[0]),a=t.select(e[1]),c=r.Z.isArray(e[2])?e[2]:[e[2]],l=0;l<c.length;l++)if(c[l]=t.select(c[l]),!r.Z.isPoint(c[l])){p=!1;break}p&&((u=[n,a]).sort((function(t,e){return e.elementClass-t.elementClass})),([i.Z.OBJECT_CLASS_CIRCLE,i.Z.OBJECT_CLASS_CURVE].indexOf(u[0].elementClass)<0||[i.Z.OBJECT_CLASS_CIRCLE,i.Z.OBJECT_CLASS_CURVE,i.Z.OBJECT_CLASS_LINE].indexOf(u[1].elementClass)<0)&&(p=!1))}if(!p)throw new Error("JSXGraph: Can't create 'other intersection point' with parent types '"+typeof e[0]+"', '"+typeof e[1]+"'and '"+typeof e[2]+"'.\nPossible parent types: [circle|curve|line,circle|curve|line, point], not two lines");return o=t.create("point",[0,0,0],f),d=h.Z.otherIntersectionFunction(u,c,o.visProp.alwaysintersect,o.visProp.precision),o.addConstraint([d]),o.type=i.Z.OBJECT_TYPE_INTERSECTION,o.elType="otherintersection",o.setParents([n.id,a.id]),o.addParents(c),n.addChild(o),a.addChild(o),n.elementClass===i.Z.OBJECT_CLASS_CIRCLE&&(o.generatePolynomial=function(){var t=n.generatePolynomial(o),e=a.generatePolynomial(o);return 0===t.length||0===e.length?[]:[t[0],e[0]]}),o},t.Z.createPolePoint=function(e,r,s){var o,n,a,h,l,c,d;if(r.length>1&&(h=r[0].type===i.Z.OBJECT_TYPE_CONIC||r[0].elementClass===i.Z.OBJECT_CLASS_CIRCLE,l=r[1].type===i.Z.OBJECT_TYPE_CONIC||r[1].elementClass===i.Z.OBJECT_CLASS_CIRCLE,c=r[0].elementClass===i.Z.OBJECT_CLASS_LINE,d=r[1].elementClass===i.Z.OBJECT_CLASS_LINE),2!==r.length||!(h&&d||c&&l))throw new Error("JSXGraph: Can't create 'pole point' with parent types '"+typeof r[0]+"' and '"+typeof r[1]+"'.\nPossible parent type: [conic|circle,line], [line,conic|circle]");return d?(n=e.select(r[0]),a=e.select(r[1])):(n=e.select(r[1]),a=e.select(r[0])),(o=e.create("point",[function(){var e=n.quadraticform,i=a.stdform.slice(0,3);return[t.Z.Math.Numerics.det([i,e[1],e[2]]),t.Z.Math.Numerics.det([e[0],i,e[2]]),t.Z.Math.Numerics.det([e[0],e[1],i])]}],s)).elType="polepoint",o.setParents([n.id,a.id]),n.addChild(o),a.addChild(o),o},t.Z.registerElement("point",t.Z.createPoint),t.Z.registerElement("glider",t.Z.createGlider),t.Z.registerElement("intersection",t.Z.createIntersectionPoint),t.Z.registerElement("otherintersection",t.Z.createOtherIntersectionPoint),t.Z.registerElement("polepoint",t.Z.createPolePoint);var $=t.Z.Point;t.Z.Line=function(e,r,s,o){this.constructor(e,o,i.Z.OBJECT_TYPE_LINE,i.Z.OBJECT_CLASS_LINE),this.point1=this.board.select(r),this.point2=this.board.select(s),this.ticks=[],this.defaultTicks=null,this.parentPolygon=null,this.id=this.board.setId(this,"L"),this.board.renderer.drawLine(this),this.board.finalizeAdding(this),this.elType="line",this.point1._is_new?(this.addChild(this.point1),delete this.point1._is_new):this.point1.addChild(this),this.point2._is_new?(this.addChild(this.point2),delete this.point2._is_new):this.point2.addChild(this),this.inherits.push(this.point1,this.point2),this.updateStdform(),this.createLabel(),this.methodMap=t.Z.deepCopy(this.methodMap,{point1:"point1",point2:"point2",getSlope:"Slope",Slope:"Slope",Direction:"Direction",getRise:"getRise",Rise:"getRise",getYIntersect:"getRise",YIntersect:"getRise",getAngle:"getAngle",Angle:"getAngle",L:"L",length:"L",setFixedLength:"setFixedLength",setStraight:"setStraight"})},t.Z.Line.prototype=new H.Z,t.Z.extend(t.Z.Line.prototype,{hasPoint:function(t,e){var s,n,a,l,c,d,p,f,_,m=[],g=[1,t,e],b=r.Z.evaluate(this.visProp.strokewidth);return r.Z.isObject(r.Z.evaluate(this.visProp.precision))?(_=this.board._inputDevice,f=r.Z.evaluate(this.visProp.precision[_])):f=this.board.options.precision.hasPoint,f+=.5*b,m[0]=this.stdform[0]-this.stdform[1]*this.board.origin.scrCoords[1]/this.board.unitX+this.stdform[2]*this.board.origin.scrCoords[2]/this.board.unitY,m[1]=this.stdform[1]/this.board.unitX,m[2]=this.stdform[2]/-this.board.unitY,s=h.Z.distPointLine(g,m),!(isNaN(s)||s>f)&&(!(!r.Z.evaluate(this.visProp.straightfirst)||!r.Z.evaluate(this.visProp.straightlast))||(a=this.point1.coords,l=this.point2.coords,n=[0,m[1],m[2]],n=o.Z.crossProduct(n,g),(n=o.Z.crossProduct(n,m))[1]/=n[0],n[2]/=n[0],n[0]=1,n=new u.Z(i.Z.COORDS_BY_SCREEN,n.slice(1),this.board).usrCoords,c=a.distance(i.Z.COORDS_BY_USER,l),a=a.usrCoords.slice(0),l=l.usrCoords.slice(0),c<o.Z.eps?d=0:(c===Number.POSITIVE_INFINITY&&(c=1/o.Z.eps,Math.abs(l[0])<o.Z.eps?(c/=h.Z.distance([0,0,0],l),l=[1,a[1]+l[1]*c,a[2]+l[2]*c]):(c/=h.Z.distance([0,0,0],a),a=[1,l[1]+a[1]*c,l[2]+a[2]*c])),c=l[p=1]-a[p],Math.abs(c)<o.Z.eps&&(c=l[p=2]-a[p]),d=(n[p]-a[p])/c),!(!r.Z.evaluate(this.visProp.straightfirst)&&d<0)&&!(!r.Z.evaluate(this.visProp.straightlast)&&d>1)))},update:function(){var t;return this.needsUpdate?(this.constrained&&(r.Z.isFunction(this.funps)?(t=this.funps())&&t.length&&2===t.length&&(this.point1=t[0],this.point2=t[1]):(r.Z.isFunction(this.funp1)&&(t=this.funp1(),r.Z.isPoint(t)?this.point1=t:t&&t.length&&2===t.length&&this.point1.setPositionDirectly(i.Z.COORDS_BY_USER,t)),r.Z.isFunction(this.funp2)&&(t=this.funp2(),r.Z.isPoint(t)?this.point2=t:t&&t.length&&2===t.length&&this.point2.setPositionDirectly(i.Z.COORDS_BY_USER,t)))),this.updateSegmentFixedLength(),this.updateStdform(),r.Z.evaluate(this.visProp.trace)&&this.cloneToBackground(!0),this):this},updateSegmentFixedLength:function(){var t,e,s,n,a,h,l,c;return this.hasFixedLength?(t=this.point1.Dist(this.point2),e=Math.abs(this.fixedLength()),s=this.fixedLengthOldCoords[0].distance(i.Z.COORDS_BY_USER,this.point1.coords),n=this.fixedLengthOldCoords[1].distance(i.Z.COORDS_BY_USER,this.point2.coords),(s>o.Z.eps||n>o.Z.eps||t!==e)&&(a=this.point1.isDraggable&&this.point1.type!==i.Z.OBJECT_TYPE_GLIDER&&!r.Z.evaluate(this.point1.visProp.fixed),h=this.point2.isDraggable&&this.point2.type!==i.Z.OBJECT_TYPE_GLIDER&&!r.Z.evaluate(this.point2.visProp.fixed),t>o.Z.eps?s>n&&h||s<=n&&h&&!a?(this.point2.setPositionDirectly(i.Z.COORDS_BY_USER,[this.point1.X()+(this.point2.X()-this.point1.X())*e/t,this.point1.Y()+(this.point2.Y()-this.point1.Y())*e/t]),this.point2.fullUpdate()):(s<=n&&a||s>n&&a&&!h)&&(this.point1.setPositionDirectly(i.Z.COORDS_BY_USER,[this.point2.X()+(this.point1.X()-this.point2.X())*e/t,this.point2.Y()+(this.point1.Y()-this.point2.Y())*e/t]),this.point1.fullUpdate()):(l=Math.random()-.5,c=Math.random()-.5,t=o.Z.hypot(l,c),h?(this.point2.setPositionDirectly(i.Z.COORDS_BY_USER,[this.point1.X()+l*e/t,this.point1.Y()+c*e/t]),this.point2.fullUpdate()):a&&(this.point1.setPositionDirectly(i.Z.COORDS_BY_USER,[this.point2.X()+l*e/t,this.point2.Y()+c*e/t]),this.point1.fullUpdate())),this.fixedLengthOldCoords[0].setCoordinates(i.Z.COORDS_BY_USER,this.point1.coords.usrCoords),this.fixedLengthOldCoords[1].setCoordinates(i.Z.COORDS_BY_USER,this.point2.coords.usrCoords)),this):this},updateStdform:function(){var t=o.Z.crossProduct(this.point1.coords.usrCoords,this.point2.coords.usrCoords);this.stdform[0]=t[0],this.stdform[1]=t[1],this.stdform[2]=t[2],this.stdform[3]=0,this.normalize()},updateRenderer:function(){return this.needsUpdate?(this.visPropCalc.visible&&(this.isReal=!isNaN(this.point1.coords.usrCoords[1]+this.point1.coords.usrCoords[2]+this.point2.coords.usrCoords[1]+this.point2.coords.usrCoords[2])&&o.Z.innerProduct(this.stdform,this.stdform,3)>=o.Z.eps*o.Z.eps,this.isReal||this.updateVisibility(!1)),this.visPropCalc.visible&&this.board.renderer.updateLine(this),this.hasLabel&&this.visPropCalc.visible&&this.label&&this.label.visPropCalc.visible&&this.isReal&&(this.label.update(),this.board.renderer.updateText(this.label)),this.setDisplayRendNode(),this.needsUpdate=!1,this):this},generatePolynomial:function(t){var e=this.point1.symbolic.x,i=this.point1.symbolic.y,r=this.point2.symbolic.x,s=this.point2.symbolic.y,o=t.symbolic.x,n=t.symbolic.y;return[["(",i,")*(",o,")-(",i,")*(",r,")+(",n,")*(",r,")-(",e,")*(",n,")+(",e,")*(",s,")-(",o,")*(",s,")"].join("")]},getRise:function(){return Math.abs(this.stdform[2])>=o.Z.eps?-this.stdform[0]/this.stdform[2]:1/0},Slope:function(){return Math.abs(this.stdform[2])>=o.Z.eps?-this.stdform[1]/this.stdform[2]:1/0},getSlope:function(){return this.Slope()},getAngle:function(){return Math.atan2(-this.stdform[1],this.stdform[2])},Direction:function(){var t=this.point1.coords.usrCoords,e=this.point2.coords.usrCoords;return 0===e[0]&&0!==t[0]?e.slice(1):0===t[0]&&0!==e[0]?[-t[1],-t[2]]:[e[1]-t[1],e[2]-t[2]]},isVertical:function(){var t=this.Direction();return 0===t[0]&&0!==t[1]},isHorizontal:function(){var t=this.Direction();return 0===t[1]&&0!==t[0]},setStraight:function(t,e){return this.visProp.straightfirst=t,this.visProp.straightlast=e,this.board.renderer.updateLine(this),this},getTextAnchor:function(){return new u.Z(i.Z.COORDS_BY_USER,[.5*(this.point2.X()+this.point1.X()),.5*(this.point2.Y()+this.point1.Y())],this.board)},setLabelRelativeCoords:function(t){r.Z.exists(this.label)&&(this.label.relativeCoords=new u.Z(i.Z.COORDS_BY_SCREEN,[t[0],-t[1]],this.board))},getLabelAnchor:function(){var t,e,s,n,a,l,c,d,p=1.5,f=0,_=new u.Z(i.Z.COORDS_BY_USER,this.point1.coords.usrCoords,this.board),m=new u.Z(i.Z.COORDS_BY_USER,this.point2.coords.usrCoords,this.board),g=r.Z.evaluate(this.visProp.straightfirst),b=r.Z.evaluate(this.visProp.straightlast);if((g||b)&&h.Z.calcStraight(this,_,m,0),_=_.scrCoords,m=m.scrCoords,!r.Z.exists(this.label))return new u.Z(i.Z.COORDS_BY_SCREEN,[NaN,NaN],this.board);if(s=r.Z.evaluate(this.label.visProp.position),!r.Z.isString(s))return new u.Z(i.Z.COORDS_BY_SCREEN,[NaN,NaN],this.board);if(s.indexOf("right")<0&&s.indexOf("left")<0)switch(s){case"last":t=m[1],e=m[2];break;case"first":t=_[1],e=_[2];break;case"lft":case"llft":case"ulft":_[1]<=m[1]?(t=_[1],e=_[2]):(t=m[1],e=m[2]);break;case"rt":case"lrt":case"urt":_[1]>m[1]?(t=_[1],e=_[2]):(t=m[1],e=m[2]);break;default:t=.5*(_[1]+m[1]),e=.5*(_[2]+m[2])}else n=r.Z.parsePosition(s),a=r.Z.parseNumber(n.pos,1,1),l=m[1]-_[1],c=m[2]-_[2],d=o.Z.hypot(l,c),n.pos.indexOf("px")>=0||n.pos.indexOf("fr")>=0||n.pos.indexOf("%")>=0?(n.pos.indexOf("px")>=0&&(a/=d),t=_[1]+a*l,e=_[2]+a*c):(t=_[1]+a*this.board.unitX*l/d,e=_[2]+a*this.board.unitY*c/d),"left"===n.side?l*=-1:c*=-1,r.Z.exists(this.label)&&(p=.5*r.Z.evaluate(this.label.visProp.distance)/d),t+=c*this.label.size[0]*p,e+=l*this.label.size[1]*p;return(g||b)&&(r.Z.exists(this.label)&&(f=r.Z.evaluate(this.label.visProp.fontsize)),Math.abs(t)<o.Z.eps?t=f:this.board.canvasWidth+o.Z.eps>t&&t>this.board.canvasWidth-f-o.Z.eps&&(t=this.board.canvasWidth-f),o.Z.eps+f>e&&e>-o.Z.eps?e=f:this.board.canvasHeight+o.Z.eps>e&&e>this.board.canvasHeight-f-o.Z.eps&&(e=this.board.canvasHeight-f)),new u.Z(i.Z.COORDS_BY_SCREEN,[t,e],this.board)},cloneToBackground:function(){var t,e,s,o={};return o.id=this.id+"T"+this.numTraces,o.elementClass=i.Z.OBJECT_CLASS_LINE,this.numTraces++,o.point1=this.point1,o.point2=this.point2,o.stdform=this.stdform,o.board=this.board,o.visProp=r.Z.deepCopy(this.visProp,this.visProp.traceattributes,!0),o.visProp.layer=this.board.options.layer.trace,r.Z.clearVisPropOld(o),o.visPropCalc={visible:r.Z.evaluate(o.visProp.visible)},e=this.getSlope(),t=this.getRise(),o.getSlope=function(){return e},o.getRise=function(){return t},s=this.board.renderer.enhancedRendering,this.board.renderer.enhancedRendering=!0,this.board.renderer.drawLine(o),this.board.renderer.enhancedRendering=s,this.traces[o.id]=o.rendNode,this},addTransform:function(t){var e,i=r.Z.isArray(t)?t:[t],s=i.length;for(e=0;e<s;e++)this.point1.transformations.push(i[e]),this.point2.transformations.push(i[e]);return this},snapToGrid:function(t){var e,s,o,n,a,l,c,d;return r.Z.evaluate(this.visProp.snaptogrid)?this.parents.length<3?(this.point1.handleSnapToGrid(!0,!0),this.point2.handleSnapToGrid(!0,!0)):r.Z.exists(t)&&(c=r.Z.evaluate(this.visProp.snapsizex),d=r.Z.evaluate(this.visProp.snapsizey),a=(e=new u.Z(i.Z.COORDS_BY_SCREEN,[t.Xprev,t.Yprev],this.board)).usrCoords[1],l=e.usrCoords[2],c<=0&&this.board.defaultAxes&&this.board.defaultAxes.x.defaultTicks&&(c=(n=this.board.defaultAxes.x.defaultTicks).ticksDelta*(r.Z.evaluate(n.visProp.minorticks)+1)),d<=0&&this.board.defaultAxes&&this.board.defaultAxes.y.defaultTicks&&(d=(n=this.board.defaultAxes.y.defaultTicks).ticksDelta*(r.Z.evaluate(n.visProp.minorticks)+1)),c>0&&d>0&&(s=h.Z.projectPointToLine({coords:e},this,this.board),o=p.Z.subtract([1,Math.round(a/c)*c,Math.round(l/d)*d],s.usrCoords),this.board.create("transform",o.slice(1),{type:"translate"}).applyOnce([this.point1,this.point2]))):(this.point1.handleSnapToGrid(!1,!0),this.point2.handleSnapToGrid(!1,!0)),this},snapToPoints:function(){var t=r.Z.evaluate(this.visProp.snaptopoints);return this.parents.length<3&&(this.point1.handleSnapToPoints(t),this.point2.handleSnapToPoints(t)),this},X:function(t){var e,i=this.stdform[2];return e=Math.abs(this.point1.coords.usrCoords[0])>o.Z.eps?this.point1.coords.usrCoords[1]:this.point2.coords.usrCoords[1],t=2*(t-.5),(1-Math.abs(t))*e-t*i},Y:function(t){var e,i=this.stdform[1];return e=Math.abs(this.point1.coords.usrCoords[0])>o.Z.eps?this.point1.coords.usrCoords[2]:this.point2.coords.usrCoords[2],t=2*(t-.5),(1-Math.abs(t))*e+t*i},Z:function(t){var e=Math.abs(this.point1.coords.usrCoords[0])>o.Z.eps?this.point1.coords.usrCoords[0]:this.point2.coords.usrCoords[0];return t=2*(t-.5),(1-Math.abs(t))*e},L:function(){return this.point1.Dist(this.point2)},setFixedLength:function(t){return this.hasFixedLength?(this.fixedLength=r.Z.createFunction(t,this.board),this.board.update(),this):this},minX:function(){return 0},maxX:function(){return 1},bounds:function(){var t=this.point1.coords.usrCoords,e=this.point2.coords.usrCoords;return[Math.min(t[1],e[1]),Math.max(t[2],e[2]),Math.max(t[1],e[1]),Math.min(t[2],e[2])]},remove:function(){this.removeAllTicks(),H.Z.prototype.remove.call(this)}}),t.Z.createLine=function(e,i,s){var o,n,a,h,l,c,d,u=[],p=!1,f=!1;if(2===i.length){if(c=r.Z.copyAttributes(s,e.options,"line","point1"),r.Z.isArray(i[0])&&i[0].length>1)a=e.create("point",i[0],c);else if(r.Z.isString(i[0])||r.Z.isPoint(i[0]))a=e.select(i[0]);else if(r.Z.isFunction(i[0])&&r.Z.isPoint(i[0]()))a=i[0](),f=!0;else if(r.Z.isFunction(i[0])&&i[0]().length&&i[0]().length>=2)a=t.Z.createPoint(e,i[0](),c),f=!0;else{if(!r.Z.isObject(i[0])||!r.Z.isTransformationOrArray(i[1]))throw new Error("JSXGraph: Can't create line with parent types '"+typeof i[0]+"' and '"+typeof i[1]+"'.\nPossible parent types: [point,point], [[x1,y1],[x2,y2]], [a,b,c]");p=!0,a=e.create("point",[i[0].point1,i[1]],c)}if(c=r.Z.copyAttributes(s,e.options,"line","point2"),p)h=e.create("point",[i[0].point2,i[1]],c);else if(r.Z.isArray(i[1])&&i[1].length>1)h=e.create("point",i[1],c);else if(r.Z.isString(i[1])||r.Z.isPoint(i[1]))h=e.select(i[1]);else if(r.Z.isFunction(i[1])&&r.Z.isPoint(i[1]()))h=i[1](),f=!0;else{if(!(r.Z.isFunction(i[1])&&i[1]().length&&i[1]().length>=2))throw new Error("JSXGraph: Can't create line with parent types '"+typeof i[0]+"' and '"+typeof i[1]+"'.\nPossible parent types: [point,point], [[x1,y1],[x2,y2]], [a,b,c]");h=t.Z.createPoint(e,i[1](),c),f=!0}c=r.Z.copyAttributes(s,e.options,"line"),n=new t.Z.Line(e,a,h,c),f?(n.constrained=!0,n.funp1=i[0],n.funp2=i[1]):p||(n.isDraggable=!0),n.setParents([a.id,h.id])}else if(3===i.length){for(d=!0,l=0;l<3;l++)if(r.Z.isNumber(i[l]))u[l]=r.Z.createFunction(i[l]);else{if(!r.Z.isFunction(i[l]))throw new Error("JSXGraph: Can't create line with parent types '"+typeof i[0]+"' and '"+typeof i[1]+"' and '"+typeof i[2]+"'.\nPossible parent types: [point,point], [[x1,y1],[x2,y2]], [a,b,c]");u[l]=i[l],d=!1}c=r.Z.copyAttributes(s,e.options,"line","point1"),a=d?e.create("point",[u[2]()*u[2]()+u[1]()*u[1](),u[2]()-u[1]()*u[0]()+u[2](),-u[1]()-u[2]()*u[0]()-u[1]()],c):e.create("point",[function(){return.5*(u[2]()*u[2]()+u[1]()*u[1]())},function(){return.5*(u[2]()-u[1]()*u[0]()+u[2]())},function(){return.5*(-u[1]()-u[2]()*u[0]()-u[1]())}],c),c=r.Z.copyAttributes(s,e.options,"line","point2"),h=d?e.create("point",[u[2]()*u[2]()+u[1]()*u[1](),-u[1]()*u[0]()+u[2](),-u[2]()*u[0]()-u[1]()],c):e.create("point",[function(){return u[2]()*u[2]()+u[1]()*u[1]()},function(){return-u[1]()*u[0]()+u[2]()},function(){return-u[2]()*u[0]()-u[1]()}],c),a.prepareUpdate().update(),h.prepareUpdate().update(),c=r.Z.copyAttributes(s,e.options,"line"),(n=new t.Z.Line(e,a,h,c)).isDraggable=d,n.setParents([a,h])}else if(1===i.length&&r.Z.isFunction(i[0])&&2===i[0]().length&&r.Z.isPoint(i[0]()[0])&&r.Z.isPoint(i[0]()[1]))o=i[0](),c=r.Z.copyAttributes(s,e.options,"line"),(n=new t.Z.Line(e,o[0],o[1],c)).constrained=!0,n.funps=i[0],n.setParents(o);else{if(!(1===i.length&&r.Z.isFunction(i[0])&&3===i[0]().length&&r.Z.isNumber(i[0]()[0])&&r.Z.isNumber(i[0]()[1])&&r.Z.isNumber(i[0]()[2])))throw new Error("JSXGraph: Can't create line with parent types '"+typeof i[0]+"' and '"+typeof i[1]+"'.\nPossible parent types: [point,point], [[x1,y1],[x2,y2]], [a,b,c]");o=i[0],c=r.Z.copyAttributes(s,e.options,"line","point1"),a=e.create("point",[function(){var t=o();return[.5*(t[2]*t[2]+t[1]*t[1]),.5*(t[2]-t[1]*t[0]+t[2]),.5*(-t[1]-t[2]*t[0]-t[1])]}],c),c=r.Z.copyAttributes(s,e.options,"line","point2"),h=e.create("point",[function(){var t=o();return[t[2]*t[2]+t[1]*t[1],-t[1]*t[0]+t[2],-t[2]*t[0]-t[1]]}],c),c=r.Z.copyAttributes(s,e.options,"line"),(n=new t.Z.Line(e,a,h,c)).constrained=!0,n.funps=i[0],n.setParents([a,h])}return n},t.Z.registerElement("line",t.Z.createLine),t.Z.createSegment=function(t,e,s){var o,n;if(s.straightFirst=!1,s.straightLast=!1,n=r.Z.copyAttributes(s,t.options,"segment"),o=t.create("line",e.slice(0,2),n),3===e.length){if(o.hasFixedLength=!0,r.Z.isNumber(e[2]))o.fixedLength=function(){return e[2]};else{if(!r.Z.isFunction(e[2]))throw new Error("JSXGraph: Can't create segment with third parent type '"+typeof e[2]+"'.\nPossible third parent types: number or function");o.fixedLength=r.Z.createFunction(e[2],this.board)}o.getParents=function(){return this.parents.concat(this.fixedLength())},o.fixedLengthOldCoords=[],o.fixedLengthOldCoords[0]=new u.Z(i.Z.COORDS_BY_USER,o.point1.coords.usrCoords.slice(1,3),t),o.fixedLengthOldCoords[1]=new u.Z(i.Z.COORDS_BY_USER,o.point2.coords.usrCoords.slice(1,3),t)}return o.elType="segment",o},t.Z.registerElement("segment",t.Z.createSegment),t.Z.createArrow=function(t,e,s){var o,n;return s.straightFirst=!1,s.straightLast=!1,n=r.Z.copyAttributes(s,t.options,"arrow"),(o=t.create("line",e,n)).type=i.Z.OBJECT_TYPE_VECTOR,o.elType="arrow",o},t.Z.registerElement("arrow",t.Z.createArrow),t.Z.createAxis=function(e,s,o){var n,a,h,l;a=r.Z.copyAttributes(o,e.options,"axis");try{n=e.create("line",s,a)}catch(t){throw new Error("JSXGraph: Can't create axis with parent types '"+typeof s[0]+"' and '"+typeof s[1]+"'.\nPossible parent types: [point,point], [[x1,y1],[x2,y2]]")}for(h in n.type=i.Z.OBJECT_TYPE_AXIS,n.isDraggable=!1,n.point1.isDraggable=!1,n.point2.isDraggable=!1,n._point1UsrCoordsOrg=n.point1.coords.usrCoords.slice(),n._point2UsrCoordsOrg=n.point2.coords.usrCoords.slice(),n.ancestors)n.ancestors.hasOwnProperty(h)&&(n.ancestors[h].type=i.Z.OBJECT_TYPE_AXISPOINT);return l=r.Z.exists(a.ticks.ticksdistance)?a.ticks.ticksdistance:r.Z.isArray(a.ticks.ticks)?a.ticks.ticks:1,n.defaultTicks=e.create("ticks",[n,l],a.ticks),n.defaultTicks.dump=!1,n.elType="axis",n.subs={ticks:n.defaultTicks},n.inherits.push(n.defaultTicks),n.update=function(){var e,i,s,o,a,h,l,c,d,u,p,f,_,m,g,b,v,Z,C;if(e=this.board.getBoundingBox(),i=r.Z.evaluate(this.visProp.position),o=this.Direction(),a=this.isHorizontal(),h=this.isVertical(),l=r.Z.evaluate(this.visProp.ticksautopos),c=r.Z.evaluate(this.visProp.ticksautoposthreshold),c=a?r.Z.parseNumber(c,Math.abs(e[1]-e[3]),1/this.board.unitX)*this.board.unitX:h?r.Z.parseNumber(c,Math.abs(e[1]-e[3]),1/this.board.unitY)*this.board.unitY:r.Z.parseNumber(c,1,1),p=(u=r.Z.evaluate(this.visProp.anchor)).indexOf("left")>-1,f=u.indexOf("right")>-1,_=r.Z.evaluate(this.visProp.anchordist),_=a?r.Z.parseNumber(_,Math.abs(e[1]-e[3]),1/this.board.unitX):h?r.Z.parseNumber(_,Math.abs(e[0]-e[2]),1/this.board.unitY):0,b=this.board.getPointLoc(this._point1UsrCoordsOrg,_),m=this.point1.coords.usrCoords.slice(),g=this.point2.coords.usrCoords.slice(),"static"===i||!h&&!a||("fixed"===i?(a&&(o[0]>0&&f||o[0]<0&&p?(m[2]=e[3]+_,g[2]=e[3]+_):o[0]>0&&p||o[0]<0&&f?(m[2]=e[1]-_,g[2]=e[1]-_):(m=this._point1UsrCoordsOrg.slice(),g=this._point2UsrCoordsOrg.slice())),h&&(o[1]>0&&p||o[1]<0&&f?(m[1]=e[0]+_,g[1]=e[0]+_):o[1]>0&&f||o[1]<0&&p?(m[1]=e[2]-_,g[1]=e[2]-_):(m=this._point1UsrCoordsOrg.slice(),g=this._point2UsrCoordsOrg.slice()))):"sticky"===i&&(a&&(b[1]<0&&(o[0]>0&&f||o[0]<0&&p)?(m[2]=e[3]+_,g[2]=e[3]+_):b[1]>0&&(o[0]>0&&p||o[0]<0&&f)?(m[2]=e[1]-_,g[2]=e[1]-_):(m=this._point1UsrCoordsOrg.slice(),g=this._point2UsrCoordsOrg.slice())),h&&(b[0]<0&&(o[1]>0&&p||o[1]<0&&f)?(m[1]=e[0]+_,g[1]=e[0]+_):b[0]>0&&(o[1]>0&&f||o[1]<0&&p)?(m[1]=e[2]-_,g[1]=e[2]-_):(m=this._point1UsrCoordsOrg.slice(),g=this._point2UsrCoordsOrg.slice())))),this.point1.setPositionDirectly(t.Z.COORDS_BY_USER,m),this.point2.setPositionDirectly(t.Z.COORDS_BY_USER,g),v=this.defaultTicks.visProp.label,l&&(a||h)){if(r.Z.exists(v._anchorx_org)||(v._anchorx_org=r.Z.def(v.anchorx,this.board.options.text.anchorX)),r.Z.exists(v._anchory_org)||(v._anchory_org=r.Z.def(v.anchory,this.board.options.text.anchorY)),r.Z.exists(v._offset_org)||(v._offset_org=v.offset.slice()),C=v.offset,a){for(d=n.point1.coords.scrCoords[2]-.5*this.board.canvasHeight,Z=v.anchory,d<0&&Math.abs(d)>c?"bottom"===v._side&&("top"===v.anchory&&(Z="bottom"),C[1]*=-1,v._side="top"):d>0&&Math.abs(d)>c?"top"===v._side&&("bottom"===v.anchory&&(Z="top"),C[1]*=-1,v._side="bottom"):(Z=v._anchory_org,C=v._offset_org.slice(),"top"===Z?v._side="bottom":"bottom"===Z?v._side="top":C[1]<0?v._side="bottom":v._side="top"),s=0;s<n.defaultTicks.labels.length;s++)this.defaultTicks.labels[s].visProp.anchory=Z;v.anchory=Z}else if(h){for((d=n.point1.coords.scrCoords[1]-.5*this.board.canvasWidth)<0&&Math.abs(d)>c?"right"===v._side&&("left"===v.anchorx&&(Z="right"),C[0]*=-1,v._side="left"):d>0&&Math.abs(d)>c?"left"===v._side&&("right"===v.anchorx&&(Z="left"),C[0]*=-1,v._side="right"):(Z=v._anchorx_org,C=v._offset_org.slice(),"left"===Z?v._side="right":"right"===Z||C[0]<0?v._side="left":v._side="right"),s=0;s<n.defaultTicks.labels.length;s++)this.defaultTicks.labels[s].visProp.anchorx=Z;v.anchorx=Z}v.offset=C}else delete v._anchorx_org,delete v._anchory_org,delete v._offset_org;return t.Z.Line.prototype.update.call(this),this.defaultTicks.needsUpdate=!0,this},n},t.Z.registerElement("axis",t.Z.createAxis),t.Z.createTangent=function(t,e,s){var n,a,h,l,c,u,p;if(1===e.length)n=e[0],a=n.slideObject;else{if(2!==e.length)throw new Error("JSXGraph: Can't create tangent with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [glider], [point,line|curve|circle|conic]");if(r.Z.isPoint(e[0]))n=e[0],a=e[1];else{if(!r.Z.isPoint(e[1]))throw new Error("JSXGraph: Can't create tangent with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [glider], [point,line|curve|circle|conic]");a=e[0],n=e[1]}}if(u=r.Z.copyAttributes(s,t.options,"tangent"),a.elementClass===i.Z.OBJECT_CLASS_LINE?(c=t.create("line",[a.point1,a.point2],u)).glider=n:a.elementClass===i.Z.OBJECT_CLASS_CURVE&&a.type!==i.Z.OBJECT_TYPE_CONIC?"plot"!==r.Z.evaluate(a.visProp.curvetype)?(c=t.create("line",[function(){var t=a.X,e=a.Y;return-n.X()*d.Z.D(e)(n.position)+n.Y()*d.Z.D(t)(n.position)},function(){return d.Z.D(a.Y)(n.position)},function(){return-d.Z.D(a.X)(n.position)}],u),n.addChild(c),c.glider=n):(p=function(t,e,i){var r,s,a,h,l,c,d,u,p,f,_,m,g=Math.floor(t);if(1===e.bezierDegree)g===e.numberPoints-1&&g--;else{if(3!==e.bezierDegree)return 0;a=(t*((m="sector"===e.elType?(_=e.points.slice(3,e.numberPoints-3)).length:(_=e.points).length)-1)-(g=3*Math.floor(t*(m-1)/3)))/3,g>=m-1&&(g=m-4,a=1)}if(g<0)return 1;switch(1===e.bezierDegree?(r=e.points[g].usrCoords,s=e.points[g+1].usrCoords):(h=_[g].usrCoords,l=_[g+1].usrCoords,c=_[g+2].usrCoords,d=_[g+3].usrCoords,u=(1-a)*(1-a)*(l[1]-h[1])+2*(1-a)*a*(c[1]-l[1])+a*a*(d[1]-c[1]),p=(1-a)*(1-a)*(l[2]-h[2])+2*(1-a)*a*(c[2]-l[2])+a*a*(d[2]-c[2]),u/=f=o.Z.hypot(u,p),p/=f,s=[1,(r=n.coords.usrCoords)[1]+u,r[2]+p]),i){case 0:return r[2]*s[1]-r[1]*s[2];case 1:return s[2]-r[2];case 2:return r[1]-s[1]}return 0},c=t.create("line",[function(){return p(n.position,a,0)},function(){return p(n.position,a,1)},function(){return p(n.position,a,2)}],u),n.addChild(c),c.glider=n):a.type===i.Z.OBJECT_TYPE_TURTLE?(c=t.create("line",[function(){var t=Math.floor(n.position);for(h=0;h<a.objects.length;h++)if((l=a.objects[h]).type===i.Z.OBJECT_TYPE_CURVE){if(t<l.numberPoints)break;t-=l.numberPoints}return t===l.numberPoints-1&&t--,t<0?1:l.Y(t)*l.X(t+1)-l.X(t)*l.Y(t+1)},function(){var t=Math.floor(n.position);for(h=0;h<a.objects.length;h++)if((l=a.objects[h]).type===i.Z.OBJECT_TYPE_CURVE){if(t<l.numberPoints)break;t-=l.numberPoints}return t===l.numberPoints-1&&t--,t<0?0:l.Y(t+1)-l.Y(t)},function(){var t=Math.floor(n.position);for(h=0;h<a.objects.length;h++)if((l=a.objects[h]).type===i.Z.OBJECT_TYPE_CURVE){if(t<l.numberPoints)break;t-=l.numberPoints}return t===l.numberPoints-1&&t--,t<0?0:l.X(t)-l.X(t+1)}],u),n.addChild(c),c.glider=n):a.elementClass!==i.Z.OBJECT_CLASS_CIRCLE&&a.type!==i.Z.OBJECT_TYPE_CONIC||(c=t.create("line",[function(){return o.Z.matVecMult(a.quadraticform,n.coords.usrCoords)[0]},function(){return o.Z.matVecMult(a.quadraticform,n.coords.usrCoords)[1]},function(){return o.Z.matVecMult(a.quadraticform,n.coords.usrCoords)[2]}],u),n.addChild(c),c.glider=n),!r.Z.exists(c))throw new Error("JSXGraph: Couldn't create tangent with the given parents.");return c.elType="tangent",c.type=i.Z.OBJECT_TYPE_TANGENT,c.setParents(e),c},t.Z.createRadicalAxis=function(t,e,r){var s,n,a;if(2!==e.length||e[0].elementClass!==i.Z.OBJECT_CLASS_CIRCLE||e[1].elementClass!==i.Z.OBJECT_CLASS_CIRCLE)throw new Error("JSXGraph: Can't create 'radical axis' with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent type: [circle,circle]");return n=t.select(e[0]),a=t.select(e[1]),(s=t.create("line",[function(){var t=n.stdform,e=a.stdform;return o.Z.matVecMult(o.Z.transpose([t.slice(0,3),e.slice(0,3)]),[e[3],-t[3]])}],r)).elType="radicalaxis",s.setParents([n.id,a.id]),n.addChild(s),a.addChild(s),s},t.Z.createPolarLine=function(t,e,s){var o,n,a,h,l,c,d;if(e.length>1&&(h=e[0].type===i.Z.OBJECT_TYPE_CONIC||e[0].elementClass===i.Z.OBJECT_CLASS_CIRCLE,l=e[1].type===i.Z.OBJECT_TYPE_CONIC||e[1].elementClass===i.Z.OBJECT_CLASS_CIRCLE,c=r.Z.isPoint(e[0]),d=r.Z.isPoint(e[1])),2!==e.length||!(h&&d||c&&l))throw new Error("JSXGraph: Can't create 'polar line' with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent type: [conic|circle,point], [point,conic|circle]");return d?(n=t.select(e[0]),a=t.select(e[1])):(n=t.select(e[1]),a=t.select(e[0])),(o=t.create("tangent",[n,a],s)).elType="polarline",o},t.Z.registerElement("tangent",t.Z.createTangent),t.Z.registerElement("polar",t.Z.createTangent),t.Z.registerElement("radicalaxis",t.Z.createRadicalAxis),t.Z.registerElement("polarline",t.Z.createPolarLine);t.Z.Line;t.Z.Group=function(t,e,s,o,n){var a,h,l,c;for(this.board=t,this.objects={},a=this.board.numObjects,this.board.numObjects+=1,""!==e&&r.Z.exists(e)?this.id=e:this.id=this.board.id+"Group"+a,this.board.groups[this.id]=this,this.type=i.Z.OBJECT_TYPE_POINT,this.elementClass=i.Z.OBJECT_CLASS_POINT,""!==s&&r.Z.exists(s)?this.name=s:this.name="group_"+this.board.generateName(this),delete this.type,this.coords={},this.needsRegularUpdate=n.needsregularupdate,this.rotationCenter="centroid",this.scaleCenter=null,this.rotationPoints=[],this.translationPoints=[],this.scalePoints=[],this.scaleDirections={},this.parents=[],h=r.Z.isArray(o)?o:Array.prototype.slice.call(arguments,3),l=0;l<h.length;l++)c=this.board.select(h[l]),!r.Z.evaluate(c.visProp.fixed)&&r.Z.exists(c.coords)&&this.addPoint(c);this.methodMap={ungroup:"ungroup",add:"addPoint",addPoint:"addPoint",addPoints:"addPoints",addGroup:"addGroup",remove:"removePoint",removePoint:"removePoint",setAttribute:"setAttribute",setProperty:"setAttribute"}},t.Z.extend(t.Z.Group.prototype,{ungroup:function(){var t,e,i;for(t in this.objects)this.objects.hasOwnProperty(t)&&(e=this.objects[t].point,r.Z.isArray(e.groups)&&(i=r.Z.indexOf(e.groups,this.id))>=0&&delete e.groups[i]);return this.objects={},this},addParents:function(t){var e,i,s;for(i=(s=r.Z.isArray(t)?t:arguments).length,e=0;e<i;++e)r.Z.isId(this.board,s[e])?this.parents.push(s[e]):r.Z.exists(s[e].id)&&this.parents.push(s[e].id);this.parents=r.Z.uniqueArray(this.parents)},setParents:function(t){return this.parents=[],this.addParents(t),this},getParents:function(){return r.Z.isArray(this.parents)?this.parents:[]},_updateCoordsCache:function(t){var e;""!==t&&r.Z.exists(this.objects[t])&&(e=this.objects[t].point,this.coords[e.id]={usrCoords:e.coords.usrCoords.slice(0)})},update:function(){var t,e,i,s,n,a,l,c,d,u,p=null;if(!this.needsUpdate)return this;if("nothing"===(t=this._update_find_drag_type()).action)return this._updateCoordsCache(t.id),this;if(p=this.objects[t.id].point,"translation"===t.action)d=[p.coords.usrCoords[1]-this.coords[t.id].usrCoords[1],p.coords.usrCoords[2]-this.coords[t.id].usrCoords[2]];else if("rotation"===t.action||"scaling"===t.action){if(i="rotation"===t.action?"rotationCenter":"scaleCenter",r.Z.isPoint(this[i]))u=this[i].coords.usrCoords.slice(1);else if("centroid"===this[i])u=this._update_centroid_center();else if(r.Z.isArray(this[i]))u=this[i];else{if(!r.Z.isFunction(this[i]))return this;u=this[i]()}if("rotation"===t.action)c=h.Z.rad(this.coords[t.id].usrCoords.slice(1),u,this.objects[t.id].point),(d=this.board.create("transform",[c,u[0],u[1]],{type:"rotate"})).update();else{if("scaling"!==t.action)return this;if(n=h.Z.distance(this.coords[t.id].usrCoords.slice(1),u),Math.abs(n)<o.Z.eps)return this;n=h.Z.distance(p.coords.usrCoords.slice(1),u)/n,a=this.scaleDirections[t.id].indexOf("x")>=0?n:1,l=this.scaleDirections[t.id].indexOf("y")>=0?n:1,(d=this.board.create("transform",[1,0,0,u[0]*(1-a),a,0,u[1]*(1-l),0,l],{type:"generic"})).update()}}for(e in this._update_apply_transformation(t,d),this.needsUpdate=!1,this.objects)if(this.objects.hasOwnProperty(e))for(s in this.objects[e].descendants)this.objects[e].descendants.hasOwnProperty(s)&&(this.objects[e].descendants.needsUpdate=this.objects[e].descendants.needsRegularUpdate||this.board.needsFullUpdate);for(e in this.board.updateElements(t),this.objects)this.objects.hasOwnProperty(e)&&this._updateCoordsCache(e);return this},_update_find_drag_type:function(){var t,e,s,n="nothing",a=[];for(t in this.objects)this.objects.hasOwnProperty(t)&&(e=this.objects[t].point).coords.distance(i.Z.COORDS_BY_USER,this.coords[t])>o.Z.eps&&a.push(e.id);return 0===a.length?{action:n,id:"",changed:a}:(s=a[0],e=this.objects[s].point,a.length>1?n="translation":r.Z.isInArray(this.rotationPoints,e)&&r.Z.exists(this.rotationCenter)?n="rotation":r.Z.isInArray(this.scalePoints,e)&&r.Z.exists(this.scaleCenter)?n="scaling":r.Z.isInArray(this.translationPoints,e)&&(n="translation"),{action:n,id:s,changed:a})},_update_centroid_center:function(){var t,e,i;for(i in t=[0,0],e=0,this.coords)this.coords.hasOwnProperty(i)&&(t[0]+=this.coords[i].usrCoords[1],t[1]+=this.coords[i].usrCoords[2],++e);return e>0&&(t[0]/=e,t[1]/=e),t},_update_apply_transformation:function(t,e){var s,n;for(s in this.objects)this.objects.hasOwnProperty(s)&&(r.Z.exists(this.board.objects[s])?(n=this.objects[s].point).id!==t.id?"translation"===t.action?r.Z.isInArray(t.changed,n.id)||n.coords.setCoordinates(i.Z.COORDS_BY_USER,[this.coords[s].usrCoords[1]+e[0],this.coords[s].usrCoords[2]+e[1]]):"rotation"!==t.action&&"scaling"!==t.action||e.applyOnce([n]):"rotation"!==t.action&&"scaling"!==t.action||n.coords.setCoordinates(i.Z.COORDS_BY_USER,o.Z.matVecMult(e.matrix,this.coords[n.id].usrCoords)):delete this.objects[s])},addPoint:function(t){return this.objects[t.id]={point:this.board.select(t)},this._updateCoordsCache(t.id),this.translationPoints.push(t),t.groups.push(this.id),t.groups=r.Z.uniqueArray(t.groups),this},addPoints:function(t){var e;for(e=0;e<t.length;e++)this.addPoint(t[e]);return this},addGroup:function(t){var e;for(e in t.objects)t.objects.hasOwnProperty(e)&&this.addPoint(t.objects[e].point);return this},removePoint:function(t){return delete this.objects[t.id],this},setRotationCenter:function(t){return this.rotationCenter=t,this},setRotationPoints:function(t){return this._setActionPoints("rotation",t)},addRotationPoint:function(t){return this._addActionPoint("rotation",t)},removeRotationPoint:function(t){return this._removeActionPoint("rotation",t)},setTranslationPoints:function(t){return this._setActionPoints("translation",t)},addTranslationPoint:function(t){return this._addActionPoint("translation",t)},removeTranslationPoint:function(t){return this._removeActionPoint("translation",t)},setScaleCenter:function(t){return this.scaleCenter=t,this},setScalePoints:function(t,e){var i,s,o;for(o=(i=r.Z.isArray(t)?t:arguments).length,s=0;s<o;++s)this.scaleDirections[this.board.select(i[s]).id]=e||"xy";return this._setActionPoints("scale",t)},addScalePoint:function(t,e){return this._addActionPoint("scale",t),this.scaleDirections[this.board.select(t).id]=e||"xy",this},removeScalePoint:function(t){return this._removeActionPoint("scale",t)},_setActionPoints:function(t,e){var i,s,o;for(o=(i=r.Z.isArray(e)?e:arguments).length,this[t+"Points"]=[],s=0;s<o;++s)this._addActionPoint(t,i[s]);return this},_addActionPoint:function(t,e){return this[t+"Points"].push(this.board.select(e)),this},_removeActionPoint:function(t,e){var i=this[t+"Points"].indexOf(this.board.select(e));return i>-1&&this[t+"Points"].splice(i,1),this},setProperty:function(){t.Z.deprecated("Group.setProperty","Group.setAttribute()"),this.setAttribute.apply(this,arguments)},setAttribute:function(){var t;for(t in this.objects)this.objects.hasOwnProperty(t)&&this.objects[t].point.setAttribute.apply(this.objects[t].point,arguments);return this}}),t.Z.createGroup=function(e,i,s){var o=r.Z.copyAttributes(s,e.options,"group"),n=new t.Z.Group(e,o.id,o.name,i,o);return n.elType="group",n.setParents(i),n},t.Z.registerElement("group",t.Z.createGroup);t.Z.Group;t.Z.Circle=function(t,e,s,o,n){this.constructor(t,n,i.Z.OBJECT_TYPE_CIRCLE,i.Z.OBJECT_CLASS_CIRCLE),this.method=e,this.midpoint=this.board.select(s),this.center=this.board.select(s),this.point2=null,this.radius=0,this.line=null,this.circle=null,this.points=[],"twoPoints"===e?(this.point2=t.select(o),this.radius=this.Radius()):"pointRadius"===e?(this.gxtterm=o,this.updateRadius=r.Z.createFunction(o,this.board),this.updateRadius(),this.addParentsFromJCFunctions([this.updateRadius])):"pointLine"===e?(this.line=t.select(o),this.radius=this.line.point1.coords.distance(i.Z.COORDS_BY_USER,this.line.point2.coords)):"pointCircle"===e&&(this.circle=t.select(o),this.radius=this.circle.Radius()),this.id=this.board.setId(this,"C"),this.board.renderer.drawEllipse(this),this.board.finalizeAdding(this),this.createGradient(),this.elType="circle",this.createLabel(),r.Z.exists(this.center._is_new)?(this.addChild(this.center),delete this.center._is_new):this.center.addChild(this),"pointRadius"===e?this.notifyParents(o):"pointLine"===e?this.line.addChild(this):"pointCircle"===e?this.circle.addChild(this):"twoPoints"===e&&(r.Z.exists(this.point2._is_new)?(this.addChild(this.point2),delete this.point2._is_new):this.point2.addChild(this)),this.methodMap=r.Z.deepCopy(this.methodMap,{setRadius:"setRadius",getRadius:"getRadius",Area:"Area",area:"Area",Perimeter:"Perimeter",Circumference:"Perimeter",radius:"Radius",Radius:"Radius",Diameter:"Diameter",center:"center",line:"line",point2:"point2"})},t.Z.Circle.prototype=new H.Z,t.Z.extend(t.Z.Circle.prototype,{hasPoint:function(t,e){var s,n,a,h,l,c=this.center.coords.usrCoords,d=new u.Z(i.Z.COORDS_BY_SCREEN,[t,e],this.board),p=this.Radius();return r.Z.isObject(r.Z.evaluate(this.visProp.precision))?(n=this.board._inputDevice,s=r.Z.evaluate(this.visProp.precision[n])):s=this.board.options.precision.hasPoint,a=c[1]-d.usrCoords[1],h=c[2]-d.usrCoords[2],l=o.Z.hypot(a,h),s+=.5*r.Z.evaluate(this.visProp.strokewidth),s/=Math.sqrt(Math.abs(this.board.unitX*this.board.unitY)),r.Z.evaluate(this.visProp.hasinnerpoints)?l<p+s:Math.abs(l-p)<s},generatePolynomial:function(t){var e=this.center.symbolic.x,i=this.center.symbolic.y,r=t.symbolic.x,s=t.symbolic.y,o=this.generateRadiusSquared();return""===o?[]:["(("+r+")-("+e+"))^2 + (("+s+")-("+i+"))^2 - ("+o+")"]},generateRadiusSquared:function(){var t,e,i,s,o="";return"twoPoints"===this.method?(t=this.center.symbolic.x,e=this.center.symbolic.y,o="(("+(i=this.point2.symbolic.x)+")-("+t+"))^2 + (("+(s=this.point2.symbolic.y)+")-("+e+"))^2"):"pointRadius"===this.method?r.Z.isNumber(this.radius)&&(o=(this.radius*this.radius).toString()):"pointLine"===this.method?(i=this.line.point1.symbolic.x,s=this.line.point1.symbolic.y,o="(("+i+")-("+this.line.point2.symbolic.x+"))^2 + (("+s+")-("+this.line.point2.symbolic.y+"))^2"):"pointCircle"===this.method&&(o=this.circle.Radius()),o},update:function(){var t,e,s,o,n,a;if(this.needsUpdate)for(r.Z.evaluate(this.visProp.trace)&&this.cloneToBackground(!0),"pointLine"===this.method?this.radius=this.line.point1.coords.distance(i.Z.COORDS_BY_USER,this.line.point2.coords):"pointCircle"===this.method?this.radius=this.circle.Radius():"pointRadius"===this.method&&(this.radius=this.updateRadius()),this.radius=Math.abs(this.radius),this.updateStdform(),this.updateQuadraticform(),s=this.center.coords.usrCoords[0],t=this.center.coords.usrCoords[1]/s,e=this.center.coords.usrCoords[2]/s,s/=s,o=this.Radius(),n=.551915024494,this.numberPoints=13,this.dataX=[t+o,t+o,t+o*n,t,t-o*n,t-o,t-o,t-o,t-o*n,t,t+o*n,t+o,t+o],this.dataY=[e,e+o*n,e+o,e+o,e+o,e+o*n,e,e-o*n,e-o,e-o,e-o,e-o*n,e],this.bezierDegree=3,a=0;a<this.numberPoints;a++)this.points[a]=new u.Z(i.Z.COORDS_BY_USER,[this.dataX[a],this.dataY[a]],this.board);return this},updateQuadraticform:function(){var t=this.center,e=t.X(),i=t.Y(),r=this.Radius();this.quadraticform=[[e*e+i*i-r*r,-e,-i],[-e,1,0],[-i,0,1]]},updateStdform:function(){this.stdform[3]=.5,this.stdform[4]=this.Radius(),this.stdform[1]=-this.center.coords.usrCoords[1],this.stdform[2]=-this.center.coords.usrCoords[2],isFinite(this.stdform[4])||(this.stdform[0]=r.Z.exists(this.point2)?-(this.stdform[1]*this.point2.coords.usrCoords[1]+this.stdform[2]*this.point2.coords.usrCoords[2]):0),this.normalize()},updateRenderer:function(){return this.needsUpdate?(this.visPropCalc.visible&&(this.isReal=!isNaN(this.center.coords.usrCoords[1]+this.center.coords.usrCoords[2]+this.Radius())&&this.center.isReal,this.isReal||this.updateVisibility(!1)),this.visPropCalc.visible&&this.board.renderer.updateEllipse(this),this.hasLabel&&this.visPropCalc.visible&&this.label&&this.label.visPropCalc.visible&&this.isReal&&(this.label.update(),this.board.renderer.updateText(this.label)),this.setDisplayRendNode(),this.needsUpdate=!1,this):this},notifyParents:function(t){r.Z.isString(t)&&B.Z.findDependencies(this,t,this.board)},setRadius:function(t){return this.updateRadius=r.Z.createFunction(t,this.board),this.addParentsFromJCFunctions([this.updateRadius]),this.board.update(),this},Radius:function(t){return r.Z.exists(t)?(this.setRadius(t),this.Radius()):"twoPoints"===this.method?r.Z.cmpArrays(this.point2.coords.usrCoords,[0,0,0])||r.Z.cmpArrays(this.center.coords.usrCoords,[0,0,0])?NaN:this.center.Dist(this.point2):"pointLine"===this.method||"pointCircle"===this.method?this.radius:"pointRadius"===this.method?Math.abs(this.updateRadius()):NaN},Diameter:function(){return 2*this.Radius()},getRadius:function(){return t.Z.deprecated("Circle.getRadius()","Circle.Radius()"),this.Radius()},getTextAnchor:function(){return this.center.coords},getLabelAnchor:function(){var t,e,s,o,n,a,h=1.5,l=this.Radius(),c=this.center.coords.usrCoords,d=.7071067811865;if(!r.Z.exists(this.label))return new u.Z(i.Z.COORDS_BY_SCREEN,[NaN,NaN],this.board);if(s=r.Z.evaluate(this.label.visProp.position),!r.Z.isString(s))return new u.Z(i.Z.COORDS_BY_SCREEN,[NaN,NaN],this.board);if(!(s.indexOf("right")<0&&s.indexOf("left")<0))return c=this.center.coords.scrCoords,o=r.Z.parsePosition(s),n=r.Z.parseNumber(o.pos,2*Math.PI,1),o.pos.indexOf("fr")<0&&o.pos.indexOf("%")<0&&(o.pos.indexOf("px")>=0?n=0:n*=Math.PI/180),a=1,"left"===o.side&&(a=-1),r.Z.exists(this.label)&&(h=.5*a*r.Z.evaluate(this.label.visProp.distance)),t=c[1]+(l*this.board.unitX+this.label.size[0]*h)*Math.cos(n),e=c[2]-(l*this.board.unitY+this.label.size[1]*h)*Math.sin(n),new u.Z(i.Z.COORDS_BY_SCREEN,[t,e],this.board);switch(r.Z.evaluate(this.visProp.label.position)){case"lft":t=c[1]-l,e=c[2];break;case"llft":t=c[1]-d*l,e=c[2]-d*l;break;case"rt":t=c[1]+l,e=c[2];break;case"lrt":t=c[1]+d*l,e=c[2]-d*l;break;case"urt":t=c[1]+d*l,e=c[2]+d*l;break;case"top":t=c[1],e=c[2]+l;break;case"bot":t=c[1],e=c[2]-l;break;default:t=c[1]-d*l,e=c[2]+d*l}return new u.Z(i.Z.COORDS_BY_USER,[t,e],this.board)},cloneToBackground:function(){var t,e=this.Radius(),s={id:this.id+"T"+this.numTraces,elementClass:i.Z.OBJECT_CLASS_CIRCLE,center:{coords:this.center.coords},Radius:function(){return e},getRadius:function(){return e},board:this.board,visProp:r.Z.deepCopy(this.visProp,this.visProp.traceattributes,!0)};return s.visProp.layer=this.board.options.layer.trace,this.numTraces++,r.Z.clearVisPropOld(s),s.visPropCalc={visible:r.Z.evaluate(s.visProp.visible)},t=this.board.renderer.enhancedRendering,this.board.renderer.enhancedRendering=!0,this.board.renderer.drawEllipse(s),this.board.renderer.enhancedRendering=t,this.traces[s.id]=s.rendNode,this},addTransform:function(t){var e,i=r.Z.isArray(t)?t:[t],s=i.length;for(e=0;e<s;e++)this.center.transformations.push(i[e]),"twoPoints"===this.method&&this.point2.transformations.push(i[e]);return this},snapToGrid:function(){var t=r.Z.evaluate(this.visProp.snaptogrid);return this.center.handleSnapToGrid(t,!0),"twoPoints"===this.method&&this.point2.handleSnapToGrid(t,!0),this},snapToPoints:function(){var t=r.Z.evaluate(this.visProp.snaptopoints);return this.center.handleSnapToPoints(t),"twoPoints"===this.method&&this.point2.handleSnapToPoints(t),this},X:function(t){return this.Radius()*Math.cos(2*t*Math.PI)+this.center.coords.usrCoords[1]},Y:function(t){return this.Radius()*Math.sin(2*t*Math.PI)+this.center.coords.usrCoords[2]},Z:function(t){return 1},minX:function(){return 0},maxX:function(){return 1},Area:function(){var t=this.Radius();return t*t*Math.PI},Perimeter:function(){return 2*this.Radius()*Math.PI},bounds:function(){var t=this.center.coords.usrCoords,e=this.Radius();return[t[1]-e,t[2]+e,t[1]+e,t[2]-e]},getParents:function(){return 1===this.parents.length?this.parents.concat(this.radius):this.parents}}),t.Z.createCircle=function(e,s,o){var n,a,h,l,c,d=["center","point2"];if(a=[],c=e.select(s[0]),r.Z.isObject(c)&&c.elementClass===i.Z.OBJECT_CLASS_CIRCLE&&r.Z.isTransformationOrArray(s[1]))return l=r.Z.copyAttributes(o,e.options,"circle"),(n=t.Z.createEllipse(e,[c.center,c.center,function(){return 2*c.Radius()}],l)).addTransform(s[1]),n;for(h=0;h<s.length;h++)if(r.Z.isPointType(e,s[h])){if(s.length<3?a.push(r.Z.providePoints(e,[s[h]],o,"circle",[d[h]])[0]):a.push(r.Z.providePoints(e,[s[h]],o,"point")[0]),!1===a[a.length-1])throw new Error("JSXGraph: Can't create circle from this type. Please provide a point type.")}else a.push(s[h]);if(l=r.Z.copyAttributes(o,e.options,"circle"),2===a.length&&r.Z.isPoint(a[0])&&r.Z.isPoint(a[1]))n=new t.Z.Circle(e,"twoPoints",a[0],a[1],l);else if((r.Z.isNumber(a[0])||r.Z.isFunction(a[0])||r.Z.isString(a[0]))&&r.Z.isPoint(a[1]))n=new t.Z.Circle(e,"pointRadius",a[1],a[0],l);else if((r.Z.isNumber(a[1])||r.Z.isFunction(a[1])||r.Z.isString(a[1]))&&r.Z.isPoint(a[0]))n=new t.Z.Circle(e,"pointRadius",a[0],a[1],l);else if(a[0].elementClass===i.Z.OBJECT_CLASS_CIRCLE&&r.Z.isPoint(a[1]))n=new t.Z.Circle(e,"pointCircle",a[1],a[0],l);else if(a[1].elementClass===i.Z.OBJECT_CLASS_CIRCLE&&r.Z.isPoint(a[0]))n=new t.Z.Circle(e,"pointCircle",a[0],a[1],l);else if(a[0].elementClass===i.Z.OBJECT_CLASS_LINE&&r.Z.isPoint(a[1]))n=new t.Z.Circle(e,"pointLine",a[1],a[0],l);else if(a[1].elementClass===i.Z.OBJECT_CLASS_LINE&&r.Z.isPoint(a[0]))n=new t.Z.Circle(e,"pointLine",a[0],a[1],l);else{if(!(3===s.length&&r.Z.isPoint(a[0])&&r.Z.isPoint(a[1])&&r.Z.isPoint(a[2])))throw new Error("JSXGraph: Can't create circle with parent types '"+typeof s[0]+"' and '"+typeof s[1]+"'.\nPossible parent types: [point,point], [point,number], [point,function], [point,circle], [point,point,point], [circle,transformation]");if(!t.Z.elements.circumcircle)throw new Error("JSXGraph: Can't create circle with three points. Please include the circumcircle element (element/composition).");n=t.Z.elements.circumcircle(e,a,l)}for(n.isDraggable=!0,n.setParents(a),n.elType="circle",h=0;h<a.length;h++)r.Z.isPoint(a[h])&&n.inherits.push(a[h]);return n},t.Z.registerElement("circle",t.Z.createCircle);var K=t.Z.Circle;t.Z.createEllipse=function(t,e,s){var o,n,a,h,l,c,d,p=[],f=r.Z.copyAttributes(s,t.options,"conic","foci"),_=r.Z.copyAttributes(s,t.options,"conic","center"),m=r.Z.copyAttributes(s,t.options,"conic");for(c=0;c<2;c++)if(e[c].length>1)p[c]=t.create("point",e[c],f);else if(r.Z.isPoint(e[c]))p[c]=t.select(e[c]);else if(r.Z.isFunction(e[c])&&r.Z.isPoint(e[c]()))p[c]=e[c]();else{if(!r.Z.isString(e[c]))throw new Error("JSXGraph: Can't create Ellipse with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,point,point], [point,point,number|function]");p[c]=t.select(e[c])}if(r.Z.isNumber(e[2]))l=r.Z.createFunction(e[2],t);else if(r.Z.isFunction(e[2])&&r.Z.isNumber(e[2]()))l=e[2];else{if(r.Z.isPoint(e[2]))h=t.select(e[2]);else if(e[2].length>1)h=t.create("point",e[2],f);else if(r.Z.isFunction(e[2])&&r.Z.isPoint(e[2]()))h=e[2]();else{if(!r.Z.isString(e[2]))throw new Error("JSXGraph: Can't create Ellipse with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+"'.\nPossible parent types: [point,point,point], [point,point,number|function]");h=t.select(e[2])}l=function(){return h.Dist(p[0])+h.Dist(p[1])}}for(r.Z.exists(e[4])||(e[4]=2*Math.PI),r.Z.exists(e[3])||(e[3]=0),a=t.create("point",[function(){return.5*(p[0].X()+p[1].X())},function(){return.5*(p[0].Y()+p[1].Y())}],_),(n=t.create("curve",[function(t){return 0},function(t){return 0},e[3],e[4]],m)).majorAxis=l,d=n.hasPoint,o=function(t,e){var i,r,s,o,a,h,c,d,u;e||(r=(i=l())*i,s=p[0].X(),o=p[0].Y(),c=s-(a=p[1].X()),d=o-(h=p[1].Y()),u=(r-s*s-o*o+a*a+h*h)/(2*i),n.quadraticform=[[u*u-a*a-h*h,u*c/i+a,u*d/i+h],[u*c/i+a,c*c/r-1,c*d/r],[u*d/i+h,c*d/r,d*d/r-1]])},n.X=function(t,e){var i=l(),r=p[1].Dist(p[0]),s=.5*(r*r-i*i)/(r*Math.cos(t)-i),n=Math.atan2(p[1].Y()-p[0].Y(),p[1].X()-p[0].X());return e||o(0,e),p[0].X()+Math.cos(n+t)*s},n.Y=function(t,e){var i=l(),r=p[1].Dist(p[0]),s=.5*(r*r-i*i)/(r*Math.cos(t)-i),o=Math.atan2(p[1].Y()-p[0].Y(),p[1].X()-p[0].X());return p[0].Y()+Math.sin(o+t)*s},n.midpoint=n.center=a,n.type=i.Z.OBJECT_TYPE_CONIC,n.subs={center:n.center},n.inherits.push(n.center,p[0],p[1]),r.Z.isPoint(h)&&n.inherits.push(h),n.hasPoint=function(t,e){var s,o,n,a;return r.Z.evaluate(this.visProp.hasinnerpoints)?(s=p[0].coords,o=p[1].coords,n=this.majorAxis(),(a=new u.Z(i.Z.COORDS_BY_SCREEN,[t,e],this.board)).distance(i.Z.COORDS_BY_USER,s)+a.distance(i.Z.COORDS_BY_USER,o)<=n):d.apply(this,arguments)},a.addChild(n),c=0;c<2;c++)r.Z.isPoint(p[c])&&p[c].addChild(n);return r.Z.isPoint(h)&&h.addChild(n),n.setParents(e),n},t.Z.createHyperbola=function(t,e,s){var o,n,a,h,l,c,d=[],u=r.Z.copyAttributes(s,t.options,"conic","foci"),p=r.Z.copyAttributes(s,t.options,"conic","center"),f=r.Z.copyAttributes(s,t.options,"conic");for(c=0;c<2;c++)if(e[c].length>1)d[c]=t.create("point",e[c],u);else if(r.Z.isPoint(e[c]))d[c]=t.select(e[c]);else if(r.Z.isFunction(e[c])&&r.Z.isPoint(e[c]()))d[c]=e[c]();else{if(!r.Z.isString(e[c]))throw new Error("JSXGraph: Can't create Hyperbola with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,point,point], [point,point,number|function]");d[c]=t.select(e[c])}if(r.Z.isNumber(e[2]))l=r.Z.createFunction(e[2],t);else if(r.Z.isFunction(e[2])&&r.Z.isNumber(e[2]()))l=e[2];else{if(r.Z.isPoint(e[2]))h=t.select(e[2]);else if(e[2].length>1)h=t.create("point",e[2],u);else if(r.Z.isFunction(e[2])&&r.Z.isPoint(e[2]()))h=e[2]();else{if(!r.Z.isString(e[2]))throw new Error("JSXGraph: Can't create Hyperbola with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+"'.\nPossible parent types: [point,point,point], [point,point,number|function]");h=t.select(e[2])}l=function(){return h.Dist(d[0])-h.Dist(d[1])}}for(r.Z.exists(e[4])||(e[4]=1.0001*Math.PI),r.Z.exists(e[3])||(e[3]=-1.0001*Math.PI),a=t.create("point",[function(){return.5*(d[0].X()+d[1].X())},function(){return.5*(d[0].Y()+d[1].Y())}],p),(n=t.create("curve",[function(t){return 0},function(t){return 0},e[3],e[4]],f)).majorAxis=l,o=function(t,e){var i,r,s,o,a,h,c,u,p;e||(r=(i=l())*i,s=d[0].X(),o=d[0].Y(),c=s-(a=d[1].X()),u=o-(h=d[1].Y()),p=(r-s*s-o*o+a*a+h*h)/(2*i),n.quadraticform=[[p*p-a*a-h*h,p*c/i+a,p*u/i+h],[p*c/i+a,c*c/r-1,c*u/r],[p*u/i+h,c*u/r,u*u/r-1]])},n.X=function(t,e){var i=l(),r=d[1].Dist(d[0]),s=.5*(r*r-i*i)/(r*Math.cos(t)+i),n=Math.atan2(d[1].Y()-d[0].Y(),d[1].X()-d[0].X());return e||o(0,e),d[0].X()+Math.cos(n+t)*s},n.Y=function(t,e){var i=l(),r=d[1].Dist(d[0]),s=.5*(r*r-i*i)/(r*Math.cos(t)+i),o=Math.atan2(d[1].Y()-d[0].Y(),d[1].X()-d[0].X());return d[0].Y()+Math.sin(o+t)*s},n.midpoint=n.center=a,n.subs={center:n.center},n.inherits.push(n.center,d[0],d[1]),r.Z.isPoint(h)&&n.inherits.push(h),n.type=i.Z.OBJECT_TYPE_CONIC,a.addChild(n),c=0;c<2;c++)r.Z.isPoint(d[c])&&d[c].addChild(n);return r.Z.isPoint(h)&&h.addChild(n),n.setParents(e),n},t.Z.createParabola=function(t,e,s){var o,n,a,l,c=e[0],d=e[1],u=r.Z.copyAttributes(s,t.options,"conic","foci"),p=r.Z.copyAttributes(s,t.options,"conic","center"),f=r.Z.copyAttributes(s,t.options,"conic");if(e[0].length>1)c=t.create("point",e[0],u);else if(r.Z.isPoint(e[0]))c=t.select(e[0]);else if(r.Z.isFunction(e[0])&&r.Z.isPoint(e[0]()))c=e[0]();else{if(!r.Z.isString(e[0]))throw new Error("JSXGraph: Can't create Parabola with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,line]");c=t.select(e[0])}return r.Z.isArray(d)&&2===d.length&&(l=r.Z.copyAttributes(s,t.options,"conic","line"),d=t.create("line",d,l)),r.Z.exists(e[3])||(e[3]=2*Math.PI),r.Z.exists(e[2])||(e[2]=0),a=t.create("point",[function(){return h.Z.projectPointToLine(c,d,t).usrCoords}],p),(n=t.create("curve",[function(t){return 0},function(t){return 0},e[2],e[3]],f)).midpoint=n.center=a,n.subs={center:n.center},n.inherits.push(n.center),o=function(t,e){var i,r,s,o,a,h;e||(i=d.stdform[1],r=d.stdform[2],s=d.stdform[0],o=i*i+r*r,a=c.X(),h=c.Y(),n.quadraticform=[[s*s-o*(a*a+h*h),s*i+o*a,s*r+o*h],[s*i+o*a,-r*r,i*r],[s*r+o*h,i*r,-i*i]])},n.X=function(t,e){var i,r=d.getAngle(),s=h.Z.distPointLine(c.coords.usrCoords,d.stdform),n=d.point1.coords.usrCoords,a=d.point2.coords.usrCoords,l=c.coords.usrCoords;return 0===n[0]?n=[1,a[1]+d.stdform[2],a[2]-d.stdform[1]]:0===a[0]&&(a=[1,n[1]+d.stdform[2],n[2]-d.stdform[1]]),i=((a[1]-n[1])*(l[2]-n[2])-(a[2]-n[2])*(l[1]-n[1])>=0?1:-1)*s/(1-Math.sin(t)),e||o(0,e),c.X()+Math.cos(t+r)*i},n.Y=function(t,e){var i,r=d.getAngle(),s=h.Z.distPointLine(c.coords.usrCoords,d.stdform),o=d.point1.coords.usrCoords,n=d.point2.coords.usrCoords,a=c.coords.usrCoords;return 0===o[0]?o=[1,n[1]+d.stdform[2],n[2]-d.stdform[1]]:0===n[0]&&(n=[1,o[1]+d.stdform[2],o[2]-d.stdform[1]]),i=((n[1]-o[1])*(a[2]-o[2])-(n[2]-o[2])*(a[1]-o[1])>=0?1:-1)*s/(1-Math.sin(t)),c.Y()+Math.sin(t+r)*i},n.type=i.Z.OBJECT_TYPE_CONIC,a.addChild(n),r.Z.isPoint(c)&&(c.addChild(n),n.inherits.push(c)),d.addChild(n),n.setParents(e),n},t.Z.createConic=function(t,e,s){var n,a,h,l,c,u,p,f,_,m,g,b,v,Z,C=[[1,0,0],[0,1,0],[0,0,1]],y=[[1,0,0],[0,1,0],[0,0,1]],P=[],E=[],O=r.Z.copyAttributes(s,t.options,"conic","point"),x=r.Z.copyAttributes(s,t.options,"conic","center"),S=r.Z.copyAttributes(s,t.options,"conic");if(5===e.length)Z=!0;else{if(6!==e.length)throw new Error("JSXGraph: Can't create generic Conic with "+e.length+" parameters.");Z=!1}if(Z)for(b=0;b<5;b++)if(e[b].length>1)P[b]=t.create("point",e[b],O);else if(r.Z.isPoint(e[b]))P[b]=t.select(e[b]);else if(r.Z.isFunction(e[b])&&r.Z.isPoint(e[b]()))P[b]=e[b]();else{if(!r.Z.isString(e[b]))throw new Error("JSXGraph: Can't create Conic section with parent types '"+typeof e[b]+"'.\nPossible parent types: [point,point,point,point,point], [a00,a11,a22,a01,a02,a12]");P[b]=t.select(e[b])}else(v=[[0,0,0],[0,0,0],[0,0,0]])[0][0]=r.Z.isFunction(e[2])?function(){return e[2]()}:function(){return e[2]},v[0][1]=r.Z.isFunction(e[4])?function(){return e[4]()}:function(){return e[4]},v[0][2]=r.Z.isFunction(e[5])?function(){return e[5]()}:function(){return e[5]},v[1][1]=r.Z.isFunction(e[0])?function(){return e[0]()}:function(){return e[0]},v[1][2]=r.Z.isFunction(e[3])?function(){return e[3]()}:function(){return e[3]},v[2][2]=r.Z.isFunction(e[1])?function(){return e[1]()}:function(){return e[1]};if(c=function(t){var e,i;for(e=0;e<3;e++)for(i=e;i<3;i++)t[e][i]+=t[i][e];for(e=0;e<3;e++)for(i=0;i<e;i++)t[e][i]=t[i][e];return t},l=function(t,e){var i,r,s=[[0,0,0],[0,0,0],[0,0,0]];for(i=0;i<3;i++)for(r=0;r<3;r++)s[i][r]=t[i]*e[r];return c(s)},h=function(t,e,i){var r,s,n,a,h,l=[[0,0,0],[0,0,0],[0,0,0]];for(h=o.Z.matVecMult(e,i),n=o.Z.innerProduct(i,h),h=o.Z.matVecMult(t,i),a=o.Z.innerProduct(i,h),r=0;r<3;r++)for(s=0;s<3;s++)l[r][s]=n*t[r][s]-a*e[r][s];return l},a=t.create("curve",[function(t){return 0},function(t){return 0},0,2*Math.PI],S),n=function(t,e){var i,s,n;if(!e){if(Z){for(i=0;i<5;i++)E[i]=P[i].coords.usrCoords;m=l(o.Z.crossProduct(E[0],E[1]),o.Z.crossProduct(E[2],E[3])),g=l(o.Z.crossProduct(E[0],E[2]),o.Z.crossProduct(E[1],E[3])),y=h(m,g,E[4])}else for(i=0;i<3;i++)for(s=i;s<3;s++)y[i][s]=v[i][s](),s>i&&(y[s][i]=y[i][s]);a.quadraticform=y,(u=d.Z.Jacobi(y))[0][0][0]<0&&(u[0][0][0]*=-1,u[0][1][1]*=-1,u[0][2][2]*=-1),C=u[1],_=Math.sqrt(Math.abs(u[0][0][0])),p=Math.sqrt(Math.abs(u[0][1][1])),f=Math.sqrt(Math.abs(u[0][2][2]))}return u[0][1][1]<=0&&u[0][2][2]<=0?n=o.Z.matVecMult(C,[1/_,Math.cos(t)/p,Math.sin(t)/f]):u[0][1][1]<=0&&u[0][2][2]>0?n=o.Z.matVecMult(C,[Math.cos(t)/_,1/p,Math.sin(t)/f]):u[0][2][2]<0&&(n=o.Z.matVecMult(C,[Math.sin(t)/_,Math.cos(t)/p,1/f])),r.Z.exists(n)?(n[1]/=n[0],n[2]/=n[0],n[0]=1):n=[1,NaN,NaN],n},a.X=function(t,e){return n(t,e)[1]},a.Y=function(t,e){return n(t,e)[2]},a.midpoint=t.create("point",[function(){var t=a.quadraticform;return[t[1][1]*t[2][2]-t[1][2]*t[1][2],t[1][2]*t[0][2]-t[2][2]*t[0][1],t[0][1]*t[1][2]-t[1][1]*t[0][2]]}],x),a.type=i.Z.OBJECT_TYPE_CONIC,a.center=a.midpoint,a.subs={center:a.center},a.inherits.push(a.center),a.inherits=a.inherits.concat(P),Z){for(b=0;b<5;b++)r.Z.isPoint(P[b])&&P[b].addChild(a);a.setParents(e)}return a.addChild(a.center),a},t.Z.registerElement("ellipse",t.Z.createEllipse),t.Z.registerElement("hyperbola",t.Z.createHyperbola),t.Z.registerElement("parabola",t.Z.createParabola),t.Z.registerElement("conic",t.Z.createConic),t.Z.Polygon=function(e,s,o){this.constructor(e,o,i.Z.OBJECT_TYPE_POLYGON,i.Z.OBJECT_CLASS_AREA);var n,a,h,l,c,d=r.Z.copyAttributes(o,e.options,"polygon","borders");for(this.withLines=o.withlines,this.attr_line=d,this.vertices=[],n=0;n<s.length;n++)this.vertices[n]=this.board.select(s[n]),this.vertices[n]._is_new&&(delete this.vertices[n]._is_new,this.vertices[n]._is_new_pol=!0);if(this.vertices.length>0&&this.vertices[this.vertices.length-1].id!==this.vertices[0].id&&this.vertices.push(this.vertices[0]),this.borders=[],this.withLines)for(h=this.vertices.length-1,l=0;l<h;l++)n=(l+1)%h,d.id=d.ids&&d.ids[n],d.name=d.names&&d.names[n],d.strokecolor=r.Z.isArray(d.colors)&&d.colors[n%d.colors.length]||d.strokecolor,d.visible=r.Z.exists(o.borders.visible)?o.borders.visible:o.visible,!1===d.strokecolor&&(d.strokecolor="none"),(a=e.create("segment",[this.vertices[n],this.vertices[n+1]],d)).dump=!1,this.borders[n]=a,a.parentPolygon=this,this.addChild(a);for(this.inherits.push(this.vertices,this.borders),this.id=this.board.setId(this,"Py"),n=0;n<this.vertices.length-1;n++)c=this.board.select(this.vertices[n]),r.Z.exists(c._is_new_pol)?(this.addChild(c),delete c._is_new_pol):c.addChild(this);this.board.renderer.drawPolygon(this),this.board.finalizeAdding(this),this.createGradient(),this.elType="polygon",this.createLabel(),this.methodMap=t.Z.deepCopy(this.methodMap,{borders:"borders",vertices:"vertices",A:"Area",Area:"Area",Perimeter:"Perimeter",L:"Perimeter",boundingBox:"bounds",BoundingBox:"bounds",addPoints:"addPoints",insertPoints:"insertPoints",removePoints:"removePoints",Intersect:"intersect"})},t.Z.Polygon.prototype=new H.Z,t.Z.extend(t.Z.Polygon.prototype,{pnpoly:function(t,e,i){return h.Z.pnpoly(t,e,this.vertices,i)},hasPoint:function(t,e){var i,s;if(r.Z.evaluate(this.visProp.hasinnerpoints)&&this.pnpoly(t,e))return!0;for(s=this.borders.length,i=0;i<s;i++)if(this.borders[i].hasPoint(t,e))return!0;return!1},updateRenderer:function(){var t,e;if(!this.needsUpdate)return this;if(this.visPropCalc.visible){for(e=this.vertices.length-("polygonalchain"===this.elType?0:1),this.isReal=!0,t=0;t<e;++t)if(!this.vertices[t].isReal){this.isReal=!1;break}if(!this.isReal)for(t in this.updateVisibility(!1),this.childElements)this.childElements.hasOwnProperty(t)&&this.childElements[t].setDisplayRendNode(!1)}return this.visPropCalc.visible&&this.board.renderer.updatePolygon(this),this.hasLabel&&this.visPropCalc.visible&&this.label&&this.label.visPropCalc.visible&&this.isReal&&(this.label.update(),this.board.renderer.updateText(this.label)),this.setDisplayRendNode(),this.needsUpdate=!1,this},getTextAnchor:function(){var t,e,r,s,o;if(0===this.vertices.length)return new u.Z(i.Z.COORDS_BY_USER,[1,0,0],this.board);for(r=t=this.vertices[0].X(),s=e=this.vertices[0].Y(),o=0;o<this.vertices.length;o++)this.vertices[o].X()<t&&(t=this.vertices[o].X()),this.vertices[o].X()>r&&(r=this.vertices[o].X()),this.vertices[o].Y()>e&&(e=this.vertices[o].Y()),this.vertices[o].Y()<s&&(s=this.vertices[o].Y());return new u.Z(i.Z.COORDS_BY_USER,[.5*(t+r),.5*(e+s)],this.board)},getLabelAnchor:t.Z.shortcut(t.Z.Polygon.prototype,"getTextAnchor"),cloneToBackground:function(){var t,e={};return e.id=this.id+"T"+this.numTraces,this.numTraces++,e.vertices=this.vertices,e.visProp=r.Z.deepCopy(this.visProp,this.visProp.traceattributes,!0),e.visProp.layer=this.board.options.layer.trace,e.board=this.board,r.Z.clearVisPropOld(e),e.visPropCalc={visible:r.Z.evaluate(e.visProp.visible)},t=this.board.renderer.enhancedRendering,this.board.renderer.enhancedRendering=!0,this.board.renderer.drawPolygon(e),this.board.renderer.enhancedRendering=t,this.traces[e.id]=e.rendNode,this},hideElement:function(e){var i;if(t.Z.deprecated("Element.hideElement()","Element.setDisplayRendNode()"),this.visPropCalc.visible=!1,this.board.renderer.display(this,!1),!e)for(i=0;i<this.borders.length;i++)this.borders[i].hideElement();this.hasLabel&&r.Z.exists(this.label)&&(this.label.hiddenByParent=!0,this.label.visPropCalc.visible&&this.label.hideElement())},showElement:function(e){var i;if(t.Z.deprecated("Element.showElement()","Element.setDisplayRendNode()"),this.visPropCalc.visible=!0,this.board.renderer.display(this,!0),!e)for(i=0;i<this.borders.length;i++)this.borders[i].showElement().updateRenderer();return r.Z.exists(this.label)&&this.hasLabel&&this.label.hiddenByParent&&(this.label.hiddenByParent=!1,this.label.visPropCalc.visible||this.label.showElement().updateRenderer()),this},Area:function(){return Math.abs(h.Z.signedPolygon(this.vertices,!0))},Perimeter:function(){var t,e=this.vertices.length,i=0;for(t=1;t<e;++t)i+=this.vertices[t].Dist(this.vertices[t-1]);return i},L:function(){return this.Perimeter()},boundingBox:function(){var t,e,i=[0,0,0,0],r=this.vertices.length-1;if(0===r)return i;for(i[0]=this.vertices[0].X(),i[2]=i[0],i[1]=this.vertices[0].Y(),i[3]=i[1],t=1;t<r;++t)(e=this.vertices[t].X())<i[0]?i[0]=e:e>i[2]&&(i[2]=e),(e=this.vertices[t].Y())>i[1]?i[1]=e:e<i[3]&&(i[3]=e);return i},bounds:function(){return this.boundingBox()},remove:function(){var t;for(t=0;t<this.borders.length;t++)this.board.removeObject(this.borders[t]);H.Z.prototype.remove.call(this)},findPoint:function(t){var e;if(!r.Z.isPoint(t))return-1;for(e=0;e<this.vertices.length;e++)if(this.vertices[e].id===t.id)return e;return-1},addPoints:function(t){var e,i=Array.prototype.slice.call(arguments);return e="polygonalchain"===this.elType?this.vertices.length-1:this.vertices.length-2,this.insertPoints.apply(this,[e].concat(i))},insertPoints:function(t,e){var i,s,o,n,a;if(0===arguments.length)return this;if(o=this.vertices.length-1,"polygon"===this.elType&&o--,t<-1||t>o)return this;for(s=arguments.length-1,i=1;i<s+1;i++)(a=r.Z.providePoints(this.board,[arguments[i]],{},"polygon",["vertices"])[0])._is_new&&(this.addChild(a),delete a._is_new),this.vertices.splice(t+i,0,a);if(this.withLines)for(n=t+1,"polygon"===this.elType?t<0?(this.vertices[this.vertices.length-1]=this.vertices[0],this.borders[this.borders.length-1].point2=this.vertices[this.vertices.length-1]):this.borders[t].point2=this.vertices[n]:t>=0&&(t<this.borders.length?this.borders[t].point2=this.vertices[n]:n=t),i=n;i<n+s;i++)this.borders.splice(i,0,this.board.create("segment",[this.vertices[i],this.vertices[i+1]],this.attr_line));return this.inherits=[],this.inherits.push(this.vertices,this.borders),this.board.update(),this},removePoints:function(t){var e,i,s,o,n=[],a=[],h=[],l=[];for("polygon"===this.elType&&(o=this.vertices.pop()),e=0;e<arguments.length;e++)s=arguments[e],r.Z.isPoint(s)&&(s=this.findPoint(s)),r.Z.isNumber(s)&&s>-1&&s<this.vertices.length&&-1===r.Z.indexOf(h,s)&&h.push(s);if(0===h.length)return"polygon"===this.elType&&this.vertices.push(o),this;for(e=0;e<h.length;e++)this.vertices[h[e]].removeChild(this);for(h=h.sort(),n=this.vertices.slice(),a=this.borders.slice(),this.withLines&&l.push([h[h.length-1]]),e=h.length-1;e>-1;e--)n[h[e]]=-1,this.withLines&&h.length>1&&h[e]-1>h[e-1]&&(l[l.length-1][1]=h[e],l.push([h[e-1]]));for(this.withLines&&(l[l.length-1][1]=h[0]),this.vertices=[],e=0;e<n.length;e++)r.Z.isPoint(n[e])&&this.vertices.push(n[e]);if("polygon"===this.elType&&this.vertices.length>1&&this.vertices[this.vertices.length-1].id!==this.vertices[0].id&&this.vertices.push(this.vertices[0]),this.withLines){for(e=0;e<l.length;e++){for(i=l[e][1]-1;i<l[e][0]+1;i++)i<0?"polygon"===this.elType&&(this.board.removeObject(this.borders[a.length-1]),a[a.length-1]=-1):i<a.length&&(this.board.removeObject(this.borders[i]),a[i]=-1);0!==l[e][1]&&l[e][0]!==n.length-1&&(a[l[e][0]-1]=this.board.create("segment",[n[l[e][1]-1],n[l[e][0]+1]],this.attr_line))}for(this.borders=[],e=0;e<a.length;e++)-1!==a[e]&&this.borders.push(a[e]);"polygon"===this.elType&&this.vertices.length>2&&(l[0][1]===this.vertices.length-1||0===l[l.length-1][1])&&this.borders.push(this.board.create("segment",[this.vertices[this.vertices.length-2],this.vertices[0]],this.attr_line))}return this.inherits=[],this.inherits.push(this.vertices,this.borders),this.board.update(),this},getParents:function(){return this.setParents(this.vertices),this.parents},getAttributes:function(){var t,e=H.Z.prototype.getAttributes.call(this);if(this.withLines)for(e.lines=e.lines||{},e.lines.ids=[],e.lines.colors=[],t=0;t<this.borders.length;t++)e.lines.ids.push(this.borders[t].id),e.lines.colors.push(this.borders[t].visProp.strokecolor);return e},snapToGrid:function(){var t,e;for(e=!!r.Z.evaluate(this.visProp.snaptogrid),t=0;t<this.vertices.length;t++)this.vertices[t].handleSnapToGrid(e,!0)},setPositionDirectly:function(t,e,i){var r,s,o,n=new u.Z(t,e,this.board),a=new u.Z(t,i,this.board);for(o=this.vertices.length-1,s=0;s<o;s++)if(!this.vertices[s].draggable())return this;return r=p.Z.subtract(n.usrCoords,a.usrCoords),this.board.create("transform",r.slice(1),{type:"translate"}).applyOnce(this.vertices.slice(0,-1)),this},sutherlandHodgman:function(e){var i,r,s,o,n,a,h,l=t.Z.Math.Geometry.sortVertices(this.vertices),c=t.Z.Math.Geometry.sortVertices(e.vertices),d=l.length-1,u=c.length-1,p=[],f=function(t,e,i){return(e[1]-t[1])*(i[2]-t[2])-(e[2]-t[2])*(i[1]-t[1])>=0};for(s=0;s<u;s++)p.push(c[s]);for(s=0;s<d;s++)for(r=p.slice(0),p=[],n=r[(i=r.length)-1],o=0;o<i;o++)a=r[o],f(l[s],l[s+1],a)?(f(l[s],l[s+1],n)||((h=t.Z.Math.Geometry.meetSegmentSegment(n,a,l[s],l[s+1]))[0][1]/=h[0][0],h[0][2]/=h[0][0],h[0][0]=1,p.push(h[0])),p.push(a)):f(l[s],l[s+1],n)&&((h=t.Z.Math.Geometry.meetSegmentSegment(n,a,l[s],l[s+1]))[0][1]/=h[0][0],h[0][2]/=h[0][0],h[0][0]=1,p.push(h[0])),n=a;return p},intersect:function(t){return this.sutherlandHodgman(t)}}),t.Z.createPolygon=function(e,s,o){var n,a,h,l,c,d,u=[],p=!1;if(r.Z.copyAttributes(o,e.options,"polygon"),null===(l=e.select(s[0]))&&(l=s[0]),r.Z.isObject(l)&&l.type===i.Z.OBJECT_TYPE_POLYGON&&r.Z.isTransformationOrArray(s[1]))for(p=!0,h=l.vertices.length-1,d=r.Z.copyAttributes(o,e.options,"polygon","vertices"),a=0;a<h;a++)d.withlabel&&(d.name=""===l.vertices[a].name?"":l.vertices[a].name+"'"),u.push(e.create("point",[l.vertices[a],s[1]],d));else if(!1===(u=r.Z.providePoints(e,s,o,"polygon",["vertices"])))throw new Error("JSXGraph: Can't create polygon / polygonalchain with parent types other than 'point' and 'coordinate arrays' or a function returning an array of coordinates. Alternatively, a polygon and a transformation can be supplied");if(c=r.Z.copyAttributes(o,e.options,"polygon"),(n=new t.Z.Polygon(e,u,c)).isDraggable=!0,p)for(n.prepareUpdate().update().updateVisibility().updateRenderer(),h=l.vertices.length-1,a=0;a<h;a++)u[a].prepareUpdate().update().updateVisibility().updateRenderer();return n},t.Z.createRegularPolygon=function(t,e,s){var o,n,a,h,l,c,d,u=[];if(a=e[(l=e.length)-1],r.Z.isNumber(a)&&(3!==e.length||a<3))throw new Error("JSXGraph: A regular polygon needs two point types and a number > 2 as input.");if(r.Z.isNumber(t.select(a))?(l--,c=!1):(a=l,c=!0),!1===(u=r.Z.providePoints(t,e.slice(0,l),s,"regularpolygon",["vertices"])))throw new Error("JSXGraph: Can't create regular polygon with parent types other than 'point' and 'coordinate arrays' or a function returning an array of coordinates");for(d=r.Z.copyAttributes(s,t.options,"regularpolygon","vertices"),n=2;n<a;n++)h=t.create("transform",[Math.PI*(2-(a-2)/a),u[n-1]],{type:"rotate"}),c?(u[n].addTransform(u[n-2],h),u[n].fullUpdate()):(r.Z.isArray(d.ids)&&d.ids.length>=a-2&&(d.id=d.ids[n-2]),u[n]=t.create("point",[u[n-2],h],d),u[n].type=i.Z.OBJECT_TYPE_CAS,u[n].isDraggable=!0,u[n].visProp.fixed=!1);return d=r.Z.copyAttributes(s,t.options,"regularpolygon"),(o=t.create("polygon",u,d)).elType="regularpolygon",o},t.Z.createPolygonalChain=function(t,e,i){var s,o;return s=r.Z.copyAttributes(i,t.options,"polygonalchain"),(o=t.create("polygon",e,s)).elType="polygonalchain",o.vertices.pop(),t.removeObject(o.borders[o.borders.length-1]),o.borders.pop(),o},t.Z.createParallelogram=function(t,e,i){var s,o,n,a,h;if(!1===(n=r.Z.providePoints(t,e,i,"polygon",["vertices"]))||n.length<3)throw new Error("JSXGraph: Can't create parallelogram with parent types other than 'point' and 'coordinate arrays' or a function returning an array of coordinates.");return h=r.Z.copyAttributes(i,t.options,"parallelogram",["parallelpoint"]),o=t.create("parallelpoint",n,h),a=r.Z.copyAttributes(i,t.options,"parallelogram"),(s=t.create("polygon",[n[0],n[1],o,n[2]],a)).elType="parallelogram",s.parallelPoint=o,s.isDraggable=!0,o.isDraggable=!0,o.visProp.fixed=!1,s},t.Z.registerElement("polygon",t.Z.createPolygon),t.Z.registerElement("regularpolygon",t.Z.createRegularPolygon),t.Z.registerElement("polygonalchain",t.Z.createPolygonalChain),t.Z.registerElement("parallelogram",t.Z.createParallelogram);var q=t.Z.Polygon;t.Z.Curve=function(t,e,s){this.constructor(t,s,i.Z.OBJECT_TYPE_CURVE,i.Z.OBJECT_CLASS_CURVE),this.points=[],this.numberPoints=r.Z.evaluate(this.visProp.numberpointshigh),this.bezierDegree=1,this.dataX=null,this.dataY=null,this.ticks=[],this.qdt=null,r.Z.exists(e[0])?this.varname=e[0]:this.varname="x",this.xterm=e[1],this.yterm=e[2],this.generateTerm(this.varname,this.xterm,this.yterm,e[3],e[4]),this.updateCurve(),this.id=this.board.setId(this,"G"),this.board.renderer.drawCurve(this),this.board.finalizeAdding(this),this.createGradient(),this.elType="curve",this.createLabel(),r.Z.isString(this.xterm)&&this.notifyParents(this.xterm),r.Z.isString(this.yterm)&&this.notifyParents(this.yterm),this.methodMap=r.Z.deepCopy(this.methodMap,{generateTerm:"generateTerm",setTerm:"generateTerm",move:"moveTo",moveTo:"moveTo",MinX:"minX",MaxX:"maxX"})},t.Z.Curve.prototype=new H.Z,t.Z.extend(t.Z.Curve.prototype,{minX:function(){return"polar"===r.Z.evaluate(this.visProp.curvetype)?0:new u.Z(i.Z.COORDS_BY_SCREEN,[.1*-this.board.canvasWidth,0],this.board,!1).usrCoords[1]},maxX:function(){return"polar"===r.Z.evaluate(this.visProp.curvetype)?2*Math.PI:new u.Z(i.Z.COORDS_BY_SCREEN,[1.1*this.board.canvasWidth,0],this.board,!1).usrCoords[1]},X:function(t){return NaN},Y:function(t){return NaN},Z:function(t){return 1},hasPoint:function(t,e,s){var n,a,l,c,d,p,f,_,m,g,b,v,Z,C,y,P,E=[],O=r.Z.evaluate(this.visProp.numberpointslow),x=(this.maxX()-this.minX())/O,S=1/0;if(r.Z.isObject(r.Z.evaluate(this.visProp.precision))?(v=this.board._inputDevice,b=r.Z.evaluate(this.visProp.precision[v])):b=this.board.options.precision.hasPoint,t=(p=new u.Z(i.Z.COORDS_BY_SCREEN,[t,e],this.board,!1)).usrCoords[1],e=p.usrCoords[2],1===this.bezierDegree&&r.Z.evaluate(this.visProp.hasinnerpoints)&&0!==h.Z.windingNumber([1,t,e],this.points,!0))return!0;if(b+=.5*r.Z.evaluate(this.visProp.strokewidth),b*=b,Z=this.board.unitX*this.board.unitX,C=this.board.unitY*this.board.unitY,P=this.minX(),this.maxX(),r.Z.exists(this._visibleArea)&&(P=this._visibleArea[0],x=(this._visibleArea[1]-P)/O),"parameter"===(y=r.Z.evaluate(this.visProp.curvetype))||"polar"===y)for(this.transformations.length>0&&(this.updateTransformMatrix(),_=o.Z.inverse(this.transformMat),t=(a=o.Z.matVecMult(_,[1,t,e]))[1],e=a[2]),l=0,n=P;l<O;l++){if((S=(t-(c=this.X(n,true)))*(t-c)*Z+(e-(d=this.Y(n,true)))*(e-d)*C)<=b)return!0;n+=x}else if("plot"===y||"functiongraph"===y){for((!r.Z.exists(s)||s<0)&&(s=0),r.Z.exists(this.qdt)&&r.Z.evaluate(this.visProp.useqdt)&&3!==this.bezierDegree?f=(m=(g=this.qdt.query(new u.Z(i.Z.COORDS_BY_USER,[t,e],this.board))).points).length:(m=this.points,f=this.numberPoints-1),l=s;l<f;l++)if(3===this.bezierDegree?E=h.Z.projectCoordsToBeziersegment([1,t,e],this,l):g?(m[l].prev&&(E=h.Z.projectCoordsToSegment([1,t,e],m[l].prev.usrCoords,m[l].usrCoords)),m[l].next&&m[l+1]!==m[l].next&&(E=h.Z.projectCoordsToSegment([1,t,e],m[l].usrCoords,m[l].next.usrCoords))):E=h.Z.projectCoordsToSegment([1,t,e],m[l].usrCoords,m[l+1].usrCoords),E[1]>=0&&E[1]<=1&&(t-E[0][1])*(t-E[0][1])*Z+(e-E[0][2])*(e-E[0][2])*C<=b)return!0;return!1}return S<b},allocatePoints:function(){var t,e;if(e=this.numberPoints,this.points.length<this.numberPoints)for(t=this.points.length;t<e;t++)this.points[t]=new u.Z(i.Z.COORDS_BY_USER,[0,0],this.board,!1)},update:function(){return this.needsUpdate&&(r.Z.evaluate(this.visProp.trace)&&this.cloneToBackground(!0),this.updateCurve()),this},updateRenderer:function(){return this.needsUpdate?(this.visPropCalc.visible&&(this.isReal=f.checkReal(this.points),this.isReal||this.updateVisibility(!1)),this.visPropCalc.visible&&this.board.renderer.updateCurve(this),this.hasLabel&&this.visPropCalc.visible&&this.label&&this.label.visPropCalc.visible&&this.isReal&&(this.label.update(),this.board.renderer.updateText(this.label)),this.setDisplayRendNode(),this.needsUpdate=!1,this):this},updateDataArray:function(){},updateCurve:function(){var t,e,s,o,n,a,h=this.visProp.plotversion,c=!1;if(this.updateTransformMatrix(),this.updateDataArray(),s=this.minX(),o=this.maxX(),r.Z.exists(this.dataX))for(this.numberPoints=this.dataX.length,e=this.numberPoints,this.allocatePoints(),t=0;t<e;t++)n=t,r.Z.exists(this.dataY)?(a=t,this.points[t].setCoordinates(i.Z.COORDS_BY_USER,[this.dataX[t],this.dataY[t]],!1)):(a=this.X(n),this.points[t].setCoordinates(i.Z.COORDS_BY_USER,[this.dataX[t],this.Y(a,c)],!1)),this.points[t]._t=t,c=!0;else if(r.Z.evaluate(this.visProp.doadvancedplot)?1===h||r.Z.evaluate(this.visProp.doadvancedplotold)?f.updateParametricCurveOld(this,s,o):2===h?f.updateParametricCurve_v2(this,s,o):3===h?f.updateParametricCurve_v3(this,s,o):4===h?f.updateParametricCurve_v4(this,s,o):f.updateParametricCurve_v2(this,s,o):(this.board.updateQuality===this.board.BOARD_QUALITY_HIGH?this.numberPoints=r.Z.evaluate(this.visProp.numberpointshigh):this.numberPoints=r.Z.evaluate(this.visProp.numberpointslow),this.allocatePoints(),f.updateParametricCurveNaive(this,s,o,this.numberPoints)),e=this.numberPoints,r.Z.evaluate(this.visProp.useqdt)&&this.board.updateQuality===this.board.BOARD_QUALITY_HIGH)for(this.qdt=new l(this.board.getBoundingBox()),t=0;t<this.points.length;t++)this.qdt.insert(this.points[t]),t>0&&(this.points[t].prev=this.points[t-1]),t<e-1&&(this.points[t].next=this.points[t+1]);for("plot"!==r.Z.evaluate(this.visProp.curvetype)&&r.Z.evaluate(this.visProp.rdpsmoothing)&&(this.points=d.Z.RamerDouglasPeucker(this.points,.2),this.numberPoints=this.points.length),e=this.numberPoints,t=0;t<e;t++)this.updateTransform(this.points[t]);return this},updateTransformMatrix:function(){var t,e,i=this.transformations.length;for(this.transformMat=[[1,0,0],[0,1,0],[0,0,1]],e=0;e<i;e++)(t=this.transformations[e]).update(),this.transformMat=o.Z.matMatMult(t.matrix,this.transformMat);return this},updateTransform:function(t){var e;return this.transformations.length>0&&(e=o.Z.matVecMult(this.transformMat,t.usrCoords),t.setCoordinates(i.Z.COORDS_BY_USER,e,!1,!0)),t},addTransform:function(t){var e,i=r.Z.isArray(t)?t:[t],s=i.length;for(e=0;e<s;e++)this.transformations.push(i[e]);return this},interpolationFunctionFromArray:function(t){var e="data"+t,i=this;return function(t,s){var o,n,a,h,l=i[e],c=l.length,d=[];if(isNaN(t))return NaN;if(t<0)return r.Z.isFunction(l[0])?l[0]():l[0];if(3===i.bezierDegree){if(t>=(c-1)/3)return r.Z.isFunction(l[l.length-1])?l[l.length-1]():l[l.length-1];for(o=3*Math.floor(t),h=1-(a=t%1),n=0;n<4;n++)r.Z.isFunction(l[o+n])?d[n]=l[o+n]():d[n]=l[o+n];return h*h*(h*d[0]+3*a*d[1])+(3*h*d[2]+a*d[3])*a*a}if((o=t>c-2?c-2:parseInt(Math.floor(t),10))===t)return r.Z.isFunction(l[o])?l[o]():l[o];for(n=0;n<2;n++)r.Z.isFunction(l[o+n])?d[n]=l[o+n]():d[n]=l[o+n];return d[0]+(d[1]-d[0])*(t-o)}},generateTerm:function(t,e,i,s,o){var n,a;r.Z.isArray(e)?(this.dataX=e,this.numberPoints=this.dataX.length,this.X=this.interpolationFunctionFromArray.apply(this,["X"]),this.visProp.curvetype="plot",this.isDraggable=!0):(this.X=r.Z.createFunction(e,this.board,t),r.Z.isString(e)?this.visProp.curvetype="functiongraph":(r.Z.isFunction(e)||r.Z.isNumber(e))&&(this.visProp.curvetype="parameter"),this.isDraggable=!0),r.Z.isArray(i)?(this.dataY=i,this.Y=this.interpolationFunctionFromArray.apply(this,["Y"])):this.Y=r.Z.createFunction(i,this.board,t),r.Z.isFunction(e)&&r.Z.isArray(i)&&(n=r.Z.createFunction(i[0],this.board,""),a=r.Z.createFunction(i[1],this.board,""),this.X=function(t){return e(t)*Math.cos(t)+n()},this.X.deps=n.deps,this.Y=function(t){return e(t)*Math.sin(t)+a()},this.Y.deps=a.deps,this.visProp.curvetype="polar"),r.Z.exists(s)?this.minX=r.Z.createFunction(s,this.board,""):delete this.minX,r.Z.exists(o)?this.maxX=r.Z.createFunction(o,this.board,""):delete this.maxX,this.addParentsFromJCFunctions([this.X,this.Y,this.minX,this.maxX])},notifyParents:function(t){var e,i,r,s=!1;for(e in r={xterm:1,yterm:1})if(r.hasOwnProperty(e)&&this.hasOwnProperty(e)&&this[e].origin)for(i in s=!0,this[e].origin.deps)this[e].origin.deps.hasOwnProperty(i)&&this[e].origin.deps[i].addChild(this);s||B.Z.findDependencies(this,t,this.board)},getLabelAnchor:function(){var t,e,s,n,a,l,c,d,p,f,_,m=1.5,g=.05*this.board.canvasWidth,b=.05*this.board.canvasHeight,v=.95*this.board.canvasWidth,Z=.95*this.board.canvasHeight;if(!r.Z.exists(this.label))return new u.Z(i.Z.COORDS_BY_SCREEN,[NaN,NaN],this.board);if(s=r.Z.evaluate(this.label.visProp.position),!r.Z.isString(s))return new u.Z(i.Z.COORDS_BY_SCREEN,[NaN,NaN],this.board);if(!(s.indexOf("right")<0&&s.indexOf("left")<0))return n=r.Z.parsePosition(s),a=r.Z.parseNumber(n.pos,this.maxX()-this.minX(),1),n.pos.indexOf("fr")<0&&n.pos.indexOf("%")<0&&(a=0),c=this.minX()+a,t=this.X(c),e=this.Y(c),_=new u.Z(i.Z.COORDS_BY_USER,[t,e],this.board).scrCoords,l=o.Z.eps,c<this.minX()+l?(d=(this.X(c+l)-this.X(c))/l,p=(this.Y(c+l)-this.Y(c))/l):c>this.maxX()-l?(d=(this.X(c)-this.X(c-l))/l,p=(this.Y(c)-this.Y(c-l))/l):(d=.5*(this.X(c+l)-this.X(c-l))/l,p=.5*(this.Y(c+l)-this.Y(c-l))/l),f=o.Z.hypot(d,p),"left"===n.side?p*=-1:d*=-1,r.Z.exists(this.label)&&(m=.5*r.Z.evaluate(this.label.visProp.distance)/f),t=_[1]+p*this.label.size[0]*m,e=_[2]-d*this.label.size[1]*m,new u.Z(i.Z.COORDS_BY_SCREEN,[t,e],this.board);switch(r.Z.evaluate(this.visProp.label.position)){case"ulft":t=g,e=b;break;case"llft":t=g,e=Z;break;case"rt":t=v,e=.5*Z;break;case"lrt":t=v,e=Z;break;case"urt":t=v,e=b;break;case"top":t=.5*v,e=b;break;case"bot":t=.5*v,e=Z;break;default:t=g,e=.5*Z}return _=new u.Z(i.Z.COORDS_BY_SCREEN,[t,e],this.board,!1),h.Z.projectCoordsToCurve(_.usrCoords[1],_.usrCoords[2],0,this,this.board)[0]},cloneToBackground:function(){var t,e={id:this.id+"T"+this.numTraces,elementClass:i.Z.OBJECT_CLASS_CURVE,points:this.points.slice(0),bezierDegree:this.bezierDegree,numberPoints:this.numberPoints,board:this.board,visProp:r.Z.deepCopy(this.visProp,this.visProp.traceattributes,!0)};return e.visProp.layer=this.board.options.layer.trace,e.visProp.curvetype=this.visProp.curvetype,this.numTraces++,r.Z.clearVisPropOld(e),e.visPropCalc={visible:r.Z.evaluate(e.visProp.visible)},t=this.board.renderer.enhancedRendering,this.board.renderer.enhancedRendering=!0,this.board.renderer.drawCurve(e),this.board.renderer.enhancedRendering=t,this.traces[e.id]=e.rendNode,this},bounds:function(){var t,e,i,s=1/0,o=-1/0,n=1/0,a=-1/0,h=this.points.length;if(3===this.bezierDegree){for(t=0;t<h;t++)this.points[t].X=r.Z.bind((function(){return this.usrCoords[1]}),this.points[t]),this.points[t].Y=r.Z.bind((function(){return this.usrCoords[2]}),this.points[t]);return i=(e=d.Z.bezier(this.points))[3](),s=d.Z.fminbr((function(t){return e[0](t)}),[0,i]),o=d.Z.fminbr((function(t){return-e[0](t)}),[0,i]),n=d.Z.fminbr((function(t){return e[1](t)}),[0,i]),a=d.Z.fminbr((function(t){return-e[1](t)}),[0,i]),s=e[0](s),o=e[0](o),n=e[1](n),[s,a=e[1](a),o,n]}for(t=0;t<h;t++)s>this.points[t].usrCoords[1]&&(s=this.points[t].usrCoords[1]),o<this.points[t].usrCoords[1]&&(o=this.points[t].usrCoords[1]),n>this.points[t].usrCoords[2]&&(n=this.points[t].usrCoords[2]),a<this.points[t].usrCoords[2]&&(a=this.points[t].usrCoords[2]);return[s,a,o,n]},getParents:function(){var t=[this.xterm,this.yterm,this.minX(),this.maxX()];return 0!==this.parents.length&&(t=this.parents),t},moveTo:function(t){var e,s=[];return this.points.length>0&&!r.Z.evaluate(this.visProp.fixed)&&(e=this.points[0],s=3===t.length?[t[0]-e.usrCoords[0],t[1]-e.usrCoords[1],t[2]-e.usrCoords[2]]:[t[0]-e.usrCoords[1],t[1]-e.usrCoords[2]],this.setPosition(i.Z.COORDS_BY_USER,s)),this},getTransformationSource:function(){var t,e;return r.Z.exists(this._transformationSource)&&(e=this._transformationSource).elementClass===i.Z.OBJECT_CLASS_CURVE&&(t=!0),[t,e]}}),t.Z.createCurve=function(e,s,o){var n,a,h=r.Z.copyAttributes(o,e.options,"curve");return n=e.select(s[0],!0),r.Z.isTransformationOrArray(s[1])&&r.Z.isObject(n)&&(n.type===i.Z.OBJECT_TYPE_CURVE||n.type===i.Z.OBJECT_TYPE_ANGLE||n.type===i.Z.OBJECT_TYPE_ARC||n.type===i.Z.OBJECT_TYPE_CONIC||n.type===i.Z.OBJECT_TYPE_SECTOR)?(n.type===i.Z.OBJECT_TYPE_SECTOR?h=r.Z.copyAttributes(o,e.options,"sector"):n.type===i.Z.OBJECT_TYPE_ARC?h=r.Z.copyAttributes(o,e.options,"arc"):n.type===i.Z.OBJECT_TYPE_ANGLE?(r.Z.exists(o.withLabel)||(o.withLabel=!1),h=r.Z.copyAttributes(o,e.options,"angle")):h=r.Z.copyAttributes(o,e.options,"curve"),h=r.Z.copyAttributes(h,e.options,"curve"),(a=new t.Z.Curve(e,["x",[],[]],h)).updateDataArray=function(){var t,e=n.numberPoints;for(this.bezierDegree=n.bezierDegree,this.dataX=[],this.dataY=[],t=0;t<e;t++)this.dataX.push(n.points[t].usrCoords[1]),this.dataY.push(n.points[t].usrCoords[2]);return this},a.addTransform(s[1]),n.addChild(a),a.setParents([n]),a._transformationSource=n,a):(h=r.Z.copyAttributes(o,e.options,"curve"),new t.Z.Curve(e,["x"].concat(s),h))},t.Z.registerElement("curve",t.Z.createCurve),t.Z.createFunctiongraph=function(e,i,s){var o,n=["x","x"].concat(i);return o=r.Z.copyAttributes(s,e.options,"functiongraph"),(o=r.Z.copyAttributes(o,e.options,"curve")).curvetype="functiongraph",new t.Z.Curve(e,n,o)},t.Z.registerElement("functiongraph",t.Z.createFunctiongraph),t.Z.registerElement("plot",t.Z.createFunctiongraph),t.Z.createSpline=function(e,i,s){var o,n,a;return n=function(){var t,e=[],s=[];return[function(o,n){var a,h,l;if(!n){if(e=[],s=[],2===i.length&&r.Z.isArray(i[0])&&r.Z.isArray(i[1])&&i[0].length===i[1].length)for(a=0;a<i[0].length;a++)r.Z.isFunction(i[0][a])?e.push(i[0][a]()):e.push(i[0][a]),r.Z.isFunction(i[1][a])?s.push(i[1][a]()):s.push(i[1][a]);else for(a=0;a<i.length;a++)if(r.Z.isPoint(i[a]))e.push(i[a].X()),s.push(i[a].Y());else if(r.Z.isArray(i[a])&&2===i[a].length)for(h=0;h<i.length;h++)r.Z.isFunction(i[h][0])?e.push(i[h][0]()):e.push(i[h][0]),r.Z.isFunction(i[h][1])?s.push(i[h][1]()):s.push(i[h][1]);else r.Z.isFunction(i[a])&&2===i[a]().length&&(l=i[a](),e.push(l[0]),s.push(l[1]));t=d.Z.splineDef(e,s)}return d.Z.splineEval(o,e,s,t)},function(){return e[0]},function(){return e[e.length-1]}]},(s=r.Z.copyAttributes(s,e.options,"curve")).curvetype="functiongraph",a=n(),(o=new t.Z.Curve(e,["x","x",a[0],a[1],a[2]],s)).setParents(i),o.elType="spline",o},t.Z.registerElement("spline",t.Z.createSpline),t.Z.createCardinalSpline=function(e,i,s){var n,a,h,l,c,u,p,f,_,m,g="\nPossible parent types: [points:array, tau:number|function, type:string]";if(!r.Z.exists(i[0])||!r.Z.isArray(i[0]))throw new Error("JSXGraph: JXG.createCardinalSpline: argument 1 'points' has to be array of points or coordinate pairs"+g);if(!r.Z.exists(i[1])||!r.Z.isNumber(i[1])&&!r.Z.isFunction(i[1]))throw new Error("JSXGraph: JXG.createCardinalSpline: argument 2 'tau' has to be number between [0,1] or function'"+g);if(!r.Z.exists(i[2])||!r.Z.isString(i[2]))throw new Error("JSXGraph: JXG.createCardinalSpline: argument 3 'type' has to be string 'uniform' or 'centripetal'"+g);if(s=r.Z.copyAttributes(s,e.options,"curve"),(s=r.Z.copyAttributes(s,e.options,"cardinalspline")).curvetype="parameter",u=i[0],p=[],!s.isarrayofcoordinates&&2===u.length&&r.Z.isArray(u[0])&&r.Z.isArray(u[1])&&u[0].length===u[1].length)for(f=0;f<u[0].length;f++)p[f]=[],r.Z.isFunction(u[0][f])?p[f].push(u[0][f]()):p[f].push(u[0][f]),r.Z.isFunction(u[1][f])?p[f].push(u[1][f]()):p[f].push(u[1][f]);else for(f=0;f<u.length;f++)r.Z.isString(u[f])?p.push(e.select(u[f])):r.Z.isPoint(u[f])?p.push(u[f]):r.Z.isArray(u[f])&&2===u[f].length?(p[f]=[],r.Z.isFunction(u[f][0])?p[f].push(u[f][0]()):p[f].push(u[f][0]),r.Z.isFunction(u[f][1])?p[f].push(u[f][1]()):p[f].push(u[f][1])):r.Z.isFunction(u[f])&&2===u[f]().length&&p.push(i[f]());if(!0===s.createpoints)h=r.Z.providePoints(e,p,s,"cardinalspline",["points"]);else for(h=[],a=function(t){return{X:function(){return p[t][0]},Y:function(){return p[t][1]},Dist:function(t){var e=this.X()-t.X(),i=this.Y()-t.Y();return o.Z.hypot(e,i)}}},f=0;f<p.length;f++)r.Z.isPoint(p[f])?h.push(p[f]):h.push(a(f));for(l=i[1],c=i[2],m=["x"].concat(d.Z.CardinalSpline(h,l,c)),n=new t.Z.Curve(e,m,s),_=h.length,n.setParents(h),f=0;f<_;f++)u=h[f],r.Z.isPoint(u)&&(r.Z.exists(u._is_new)?(n.addChild(u),delete u._is_new):u.addChild(n));return n.elType="cardinalspline",n},t.Z.registerElement("cardinalspline",t.Z.createCardinalSpline),t.Z.createMetapostSpline=function(e,i,s){var o,n,a,h,l,c,d,u,p="\nPossible parent types: [points:array, controls:object";if(!r.Z.exists(i[0])||!r.Z.isArray(i[0]))throw new Error("JSXGraph: JXG.createMetapostSpline: argument 1 'points' has to be array of points or coordinate pairs"+p);if(!r.Z.exists(i[1])||!r.Z.isObject(i[1]))throw new Error("JSXGraph: JXG.createMetapostSpline: argument 2 'controls' has to be a JavaScript object'"+p);if(s=r.Z.copyAttributes(s,e.options,"curve"),(s=r.Z.copyAttributes(s,e.options,"metapostspline")).curvetype="parameter",l=i[0],c=[],!s.isarrayofcoordinates&&2===l.length&&r.Z.isArray(l[0])&&r.Z.isArray(l[1])&&l[0].length===l[1].length)for(d=0;d<l[0].length;d++)c[d]=[],r.Z.isFunction(l[0][d])?c[d].push(l[0][d]()):c[d].push(l[0][d]),r.Z.isFunction(l[1][d])?c[d].push(l[1][d]()):c[d].push(l[1][d]);else for(d=0;d<l.length;d++)r.Z.isString(l[d])?c.push(e.select(l[d])):r.Z.isPoint(l[d])?c.push(l[d]):r.Z.isArray(l[d])&&2===l[d].length?(c[d]=[],r.Z.isFunction(l[d][0])?c[d].push(l[d][0]()):c[d].push(l[d][0]),r.Z.isFunction(l[d][1])?c[d].push(l[d][1]()):c[d].push(l[d][1])):r.Z.isFunction(l[d])&&2===l[d]().length&&c.push(i[d]());if(!0===s.createpoints)a=r.Z.providePoints(e,c,s,"metapostspline",["points"]);else for(a=[],n=function(t){return{X:function(){return c[t][0]},Y:function(){return c[t][1]}}},d=0;d<c.length;d++)r.Z.isPoint(c[d])?a.push(c[d]):a.push(n);for(h=i[1],(o=new t.Z.Curve(e,["t",[],[],0,l.length-1],s)).updateDataArray=function(){var t,e,i=a.length,r=[];for(e=0;e<i;e++)r.push([a[e].X(),a[e].Y()]);t=m.curve(r,h),this.dataX=t[0],this.dataY=t[1]},o.bezierDegree=3,u=a.length,o.setParents(a),d=0;d<u;d++)r.Z.isPoint(a[d])&&a[d].addChild(o);return o.elType="metapostspline",o},t.Z.registerElement("metapostspline",t.Z.createMetapostSpline),t.Z.createRiemannsum=function(t,e,i){var s,o,n,a,h,l;if((l=r.Z.copyAttributes(i,t.options,"riemannsum")).curvetype="plot",n=e[0],s=r.Z.createFunction(e[1],t,""),!r.Z.exists(s))throw new Error("JSXGraph: JXG.createRiemannsum: argument '2' n has to be number or function.\nPossible parent types: [function,n:number|function,type,start:number|function,end:number|function]");if("string"==typeof e[2]&&(e[2]="'"+e[2]+"'"),o=r.Z.createFunction(e[2],t,""),!r.Z.exists(o))throw new Error("JSXGraph: JXG.createRiemannsum: argument 3 'type' has to be string or function.\nPossible parent types: [function,n:number|function,type,start:number|function,end:number|function]");return a=[[0],[0]].concat(e.slice(3)),(h=t.create("curve",a,l)).sum=0,h.Value=function(){return this.sum},h.updateDataArray=function(){var t=d.Z.riemann(n,s(),o(),this.minX(),this.maxX());this.dataX=t[0],this.dataY=t[1],this.sum=t[2]},h.addParentsFromJCFunctions([s,o]),h},t.Z.registerElement("riemannsum",t.Z.createRiemannsum),t.Z.createTracecurve=function(t,e,s){var o,n,a,h;if(2!==e.length)throw new Error("JSXGraph: Can't create trace curve with given parent'\nPossible parent types: [glider, point]");if(n=t.select(e[0]),a=t.select(e[1]),n.type!==i.Z.OBJECT_TYPE_GLIDER||!r.Z.isPoint(a))throw new Error("JSXGraph: Can't create trace curve with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [glider, point]");return(h=r.Z.copyAttributes(s,t.options,"tracecurve")).curvetype="plot",(o=t.create("curve",[[0],[0]],h)).updateDataArray=function(){var t,e,r,s,o,l,c,d,u,p=h.numberpoints,f=n.position,_=n.slideObject,m=_.minX();for(e=(_.maxX()-m)/p,this.dataX=[],this.dataY=[],_.elementClass!==i.Z.OBJECT_CLASS_CURVE&&p++,t=0;t<p;t++){for(s in r=m+t*e,l=_.X(r)/_.Z(r),c=_.Y(r)/_.Z(r),n.setPositionDirectly(i.Z.COORDS_BY_USER,[l,c]),d=!1,this.board.objects)if(this.board.objects.hasOwnProperty(s)&&((o=this.board.objects[s])===n&&(d=!0),d&&o.needsRegularUpdate&&(u=o.visProp.trace,o.visProp.trace=!1,o.needsUpdate=!0,o.update(!0),o.visProp.trace=u,o===a)))break;this.dataX[t]=a.X(),this.dataY[t]=a.Y()}for(s in n.position=f,d=!1,this.board.objects)if(this.board.objects.hasOwnProperty(s)&&((o=this.board.objects[s])===n&&(d=!0),d&&o.needsRegularUpdate&&(u=o.visProp.trace,o.visProp.trace=!1,o.needsUpdate=!0,o.update(!0),o.visProp.trace=u,o===a)))break},o},t.Z.registerElement("tracecurve",t.Z.createTracecurve),t.Z.createStepfunction=function(t,e,i){var s,o;if(2!==e.length)throw new Error("JSXGraph: Can't create step function with given parent'\nPossible parent types: [array, array|function]");return o=r.Z.copyAttributes(i,t.options,"stepfunction"),(s=t.create("curve",e,o)).updateDataArray=function(){var t,e=0,i=this.xterm.length;if(this.dataX=[],this.dataY=[],0!==i)for(this.dataX[e]=this.xterm[0],this.dataY[e]=this.yterm[0],++e,t=1;t<i;++t)this.dataX[e]=this.xterm[t],this.dataY[e]=this.dataY[e-1],++e,this.dataX[e]=this.xterm[t],this.dataY[e]=this.yterm[t],++e},s},t.Z.registerElement("stepfunction",t.Z.createStepfunction),t.Z.createDerivative=function(t,e,s){var o,n,a,h,l;if(1!==e.length&&e[0].class!==i.Z.OBJECT_CLASS_CURVE)throw new Error("JSXGraph: Can't create derivative curve with given parent'\nPossible parent types: [curve]");return l=r.Z.copyAttributes(s,t.options,"curve"),n=e[0],a=d.Z.D(n.X),h=d.Z.D(n.Y),(o=t.create("curve",[function(t){return n.X(t)},function(t){return h(t)/a(t)},n.minX(),n.maxX()],l)).setParents(n),o},t.Z.registerElement("derivative",t.Z.createDerivative),t.Z.createCurveIntersection=function(t,e,i){var r;if(2!==e.length)throw new Error("JSXGraph: Can't create curve intersection with given parent'\nPossible parent types: [array, array|function]");return(r=t.create("curve",[[],[]],i)).updateDataArray=function(){var t=A.intersection(e[0],e[1],this.board);this.dataX=t[0],this.dataY=t[1]},r},t.Z.createCurveUnion=function(t,e,i){var r;if(2!==e.length)throw new Error("JSXGraph: Can't create curve union with given parent'\nPossible parent types: [array, array|function]");return(r=t.create("curve",[[],[]],i)).updateDataArray=function(){var t=A.union(e[0],e[1],this.board);this.dataX=t[0],this.dataY=t[1]},r},t.Z.createCurveDifference=function(t,e,i){var r;if(2!==e.length)throw new Error("JSXGraph: Can't create curve difference with given parent'\nPossible parent types: [array, array|function]");return(r=t.create("curve",[[],[]],i)).updateDataArray=function(){var t=A.difference(e[0],e[1],this.board);this.dataX=t[0],this.dataY=t[1]},r},t.Z.registerElement("curvedifference",t.Z.createCurveDifference),t.Z.registerElement("curveintersection",t.Z.createCurveIntersection),t.Z.registerElement("curveunion",t.Z.createCurveUnion),t.Z.createBoxPlot=function(t,e,i){var s,o,n,a=r.Z.copyAttributes(i,t.options,"boxplot");if(3!==e.length)throw new Error("JSXGraph: Can't create box plot with given parent'\nPossible parent types: [array, number|function, number|function] containing quantiles, axis, width");if(e[0].length<5)throw new Error("JSXGraph: Can't create box plot with given parent[0]'\nparent[0] has to contain at least 5 quantiles.");for(s=t.create("curve",[[],[]],a),n=e[0].length,s.Q=[],o=0;o<n;o++)s.Q[o]=r.Z.createFunction(e[0][o],t);return s.x=r.Z.createFunction(e[1],t),s.w=r.Z.createFunction(e[2],t),s.updateDataArray=function(){var t,e,i,s,o,n,a,h,l;a=r.Z.evaluate(this.visProp.smallwidth),h=r.Z.evaluate(this.visProp.dir),i=(l=this.x())-.5*this.w(),s=l-.5*this.w()*a,o=l+.5*this.w(),t=[l,s,n=l+.5*this.w()*a,l,l,i,i,o,o,l,NaN,i,o,NaN,l,l,s,n,l],e=[this.Q[0](),this.Q[0](),this.Q[0](),this.Q[0](),this.Q[1](),this.Q[1](),this.Q[3](),this.Q[3](),this.Q[1](),this.Q[1](),NaN,this.Q[2](),this.Q[2](),NaN,this.Q[3](),this.Q[4](),this.Q[4](),this.Q[4](),this.Q[4]()],"vertical"===h?(this.dataX=t,this.dataY=e):(this.dataX=e,this.dataY=t)},s.addParentsFromJCFunctions([s.Q,s.x,s.w]),s},t.Z.registerElement("boxplot",t.Z.createBoxPlot),t.Z.createImplicitCurve=function(t,e,i){var s,o;if(1!==e.length&&3!==e.length)throw new Error("JSXGraph: Can't create curve implicitCurve with given parent'\nPossible parent types: [f] or [f, dfx, dfy]\nwith functions f, dfx, dfy");return o=r.Z.copyAttributes(i,t.options,"implicitcurve"),(s=t.create("curve",[[],[]],o)).f=r.Z.createFunction(e[0],t,"x, y"),s.dfx=r.Z.createFunction(e[1],t,"x, y"),s.dfy=r.Z.createFunction(e[2],t,"x, y"),s.updateDataArray=function(){var t,e,i,s=this.board.getBoundingBox(),o=r.Z.evaluate(this.visProp.margin);s[0]-=o,s[1]+=o,s[2]+=o,s[3]-=o,e={resolution_out:Math.max(.01,r.Z.evaluate(this.visProp.resolution_outer)),resolution_in:Math.max(.01,r.Z.evaluate(this.visProp.resolution_inner)),max_steps:r.Z.evaluate(this.visProp.max_steps),alpha_0:r.Z.evaluate(this.visProp.alpha_0),tol_u0:r.Z.evaluate(this.visProp.tol_u0),tol_newton:r.Z.evaluate(this.visProp.tol_newton),tol_cusp:r.Z.evaluate(this.visProp.tol_cusp),tol_progress:r.Z.evaluate(this.visProp.tol_progress),qdt_box:r.Z.evaluate(this.visProp.qdt_box),kappa_0:r.Z.evaluate(this.visProp.kappa_0),delta_0:r.Z.evaluate(this.visProp.delta_0),h_initial:r.Z.evaluate(this.visProp.h_initial),h_critical:r.Z.evaluate(this.visProp.h_critical),h_max:r.Z.evaluate(this.visProp.h_max),loop_dist:r.Z.evaluate(this.visProp.loop_dist),loop_dir:r.Z.evaluate(this.visProp.loop_dir),loop_detection:r.Z.evaluate(this.visProp.loop_detection),unitX:this.board.unitX,unitY:this.board.unitY},this.dataX=[],this.dataY=[],t=new _(s,e,this.f,this.dfx,this.dfy),this.qdt=t.qdt,i=t.plot(),this.dataX=i[0],this.dataY=i[1]},s.elType="implicitcurve",s},t.Z.registerElement("implicitcurve",t.Z.createImplicitCurve);t.Z.Curve;t.Z.createArc=function(e,s,n){var a,l,c;if(!1===(c=r.Z.providePoints(e,s,n,"arc",["center","radiuspoint","anglepoint"]))||c.length<3)throw new Error("JSXGraph: Can't create Arc with parent types '"+typeof s[0]+"' and '"+typeof s[1]+"' and '"+typeof s[2]+"'.\nPossible parent types: [point,point,point], [arc, transformation]");return l=r.Z.copyAttributes(n,e.options,"arc"),(a=e.create("curve",[[0],[0]],l)).elType="arc",a.setParents(c),a.type=i.Z.OBJECT_TYPE_ARC,a.center=c[0],a.radiuspoint=c[1],a.point2=a.radiuspoint,a.anglepoint=c[2],a.point3=a.anglepoint,r.Z.exists(a.center._is_new)?(a.addChild(a.center),delete a.center._is_new):a.center.addChild(a),r.Z.exists(a.radiuspoint._is_new)?(a.addChild(a.radiuspoint),delete a.radiuspoint._is_new):a.radiuspoint.addChild(a),r.Z.exists(a.anglepoint._is_new)?(a.addChild(a.anglepoint),delete a.anglepoint._is_new):a.anglepoint.addChild(a),a.useDirection=l.usedirection,a.updateDataArray=function(){var t,e,i,s,o,n=1,a=this.radiuspoint,l=this.center,d=this.anglepoint,u=r.Z.evaluate(this.visProp.selection);e=h.Z.rad(a,l,d),("minor"===u&&e>Math.PI||"major"===u&&e<Math.PI)&&(n=-1),this.useDirection&&(i=c[1].coords.usrCoords,s=c[3].coords.usrCoords,o=c[2].coords.usrCoords,(i[1]-o[1])*(i[2]-s[2])-(i[2]-o[2])*(i[1]-s[1])<0?(this.radiuspoint=c[1],this.anglepoint=c[2]):(this.radiuspoint=c[2],this.anglepoint=c[1])),a=a.coords.usrCoords,l=l.coords.usrCoords,d=d.coords.usrCoords,t=h.Z.bezierArc(a,l,d,!1,n),this.dataX=t[0],this.dataY=t[1],this.bezierDegree=3,this.updateStdform(),this.updateQuadraticform()},a.Radius=function(){return this.radiuspoint.Dist(this.center)},a.getRadius=function(){return t.Z.deprecated("Arc.getRadius()","Arc.Radius()"),this.Radius()},a.Value=function(t,e){var i;return e=e||h.Z.rad(this.radiuspoint,this.center,this.anglepoint),""===(t=(t=t||"length").toLocaleLowerCase())||0===t.indexOf("len")?i=e*this.Radius():0===t.indexOf("rad")?i=e:0===t.indexOf("deg")?i=180*e/Math.PI:0===t.indexOf("sem")?i=e/Math.PI:0===t.indexOf("cir")&&(i=.5*e/Math.PI),i},a.L=function(){return this.Value("length")},a.hasPoint=function(t,e){var s,n,a,l,c,d,p,f=this.Radius();return r.Z.evaluate(this.visProp.hasinnerpoints)?this.hasPointSector(t,e):(r.Z.isObject(r.Z.evaluate(this.visProp.precision))?(p=this.board._inputDevice,d=r.Z.evaluate(this.visProp.precision[p])):d=this.board.options.precision.hasPoint,d/=Math.min(Math.abs(this.board.unitX),Math.abs(this.board.unitY)),n=new u.Z(i.Z.COORDS_BY_SCREEN,[t,e],this.board),this.transformations.length>0&&(this.updateTransformMatrix(),l=o.Z.inverse(this.transformMat),c=o.Z.matVecMult(l,n.usrCoords),n=new u.Z(i.Z.COORDS_BY_USER,c,this.board)),s=this.center.coords.distance(i.Z.COORDS_BY_USER,n),(a=Math.abs(s-f)<d)&&(a=h.Z.coordsOnArc(this,n)),a)},a.hasPointSector=function(t,e){var r=new u.Z(i.Z.COORDS_BY_SCREEN,[t,e],this.board),s=this.Radius(),o=this.center.coords.distance(i.Z.COORDS_BY_USER,r)<s;return o&&(o=h.Z.coordsOnArc(this,r)),o},a.getTextAnchor=function(){return this.center.coords},a.getLabelAnchor=function(){var t,e,s,n,a,l=h.Z.rad(this.radiuspoint,this.center,this.anglepoint),c=10/this.board.unitX,d=10/this.board.unitY,p=this.point2.coords.usrCoords,f=this.center.coords.usrCoords,_=p[1]-f[1],m=p[2]-f[2],g=r.Z.evaluate(this.visProp.selection),b=this.label?this.label.visProp:this.visProp.label;return("minor"===g&&l>Math.PI||"major"===g&&l<Math.PI)&&(l=-(2*Math.PI-l)),s=(t=new u.Z(i.Z.COORDS_BY_USER,[f[1]+Math.cos(.5*l)*_-Math.sin(.5*l)*m,f[2]+Math.sin(.5*l)*_+Math.cos(.5*l)*m],this.board)).usrCoords[1]-f[1],n=t.usrCoords[2]-f[2],s=s*((a=o.Z.hypot(s,n))+c)/a,n=n*(a+d)/a,e=[f[1]+s,f[2]+n],b.position=h.Z.calcLabelQuadrant(h.Z.rad([1,0],[0,0],e)),new u.Z(i.Z.COORDS_BY_USER,e,this.board)},a.updateQuadraticform=K.prototype.updateQuadraticform,a.updateStdform=K.prototype.updateStdform,a.methodMap=t.Z.deepCopy(a.methodMap,{getRadius:"getRadius",radius:"Radius",Radius:"Radius",center:"center",radiuspoint:"radiuspoint",anglepoint:"anglepoint",Value:"Value",L:"L"}),a.prepareUpdate().update(),a},t.Z.registerElement("arc",t.Z.createArc),t.Z.createSemicircle=function(t,e,i){var s,o,n,a;if(!1===(a=r.Z.providePoints(t,e,i,"point"))||2!==a.length)throw new Error("JSXGraph: Can't create Semicircle with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,point]");return n=r.Z.copyAttributes(i,t.options,"semicircle","center"),(o=t.create("midpoint",a,n)).dump=!1,n=r.Z.copyAttributes(i,t.options,"semicircle"),(s=t.create("arc",[o,a[1],a[0]],n)).elType="semicircle",s.setParents([a[0].id,a[1].id]),s.subs={midpoint:o},s.inherits.push(o),s.midpoint=s.center=o,s},t.Z.registerElement("semicircle",t.Z.createSemicircle),t.Z.createCircumcircleArc=function(t,e,i){var s,o,n,a;if(!1===(a=r.Z.providePoints(t,e,i,"point"))||3!==a.length)throw new Error("JSXGraph: create Circumcircle Arc with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+"'.\nPossible parent types: [point,point,point]");return n=r.Z.copyAttributes(i,t.options,"circumcirclearc","center"),(o=t.create("circumcenter",a,n)).dump=!1,(n=r.Z.copyAttributes(i,t.options,"circumcirclearc")).usedirection=!0,(s=t.create("arc",[o,a[0],a[2],a[1]],n)).elType="circumcirclearc",s.setParents([a[0].id,a[1].id,a[2].id]),s.subs={center:o},s.inherits.push(o),s.center=o,s},t.Z.registerElement("circumcirclearc",t.Z.createCircumcircleArc),t.Z.createMinorArc=function(e,i,r){return r.selection="minor",t.Z.createArc(e,i,r)},t.Z.registerElement("minorarc",t.Z.createMinorArc),t.Z.createMajorArc=function(e,i,r){return r.selection="major",t.Z.createArc(e,i,r)},t.Z.registerElement("majorarc",t.Z.createMajorArc),t.Z.createSector=function(e,s,n){var a,l,c,d,f,_,m="invalid";if(s[0].elementClass===i.Z.OBJECT_CLASS_LINE&&s[1].elementClass===i.Z.OBJECT_CLASS_LINE&&(r.Z.isArray(s[2])||r.Z.isNumber(s[2]))&&(r.Z.isArray(s[3])||r.Z.isNumber(s[3]))&&(r.Z.isNumber(s[4])||r.Z.isFunction(s[4])||r.Z.isString(s[4])))m="2lines";else{if(!1===(_=r.Z.providePoints(e,s,n,"sector",["center","radiusPoint","anglePoint"])))throw new Error("JSXGraph: Can't create Sector with parent types '"+typeof s[0]+"' and '"+typeof s[1]+"' and '"+typeof s[2]+"'.");m="3points"}if(l=r.Z.copyAttributes(n,e.options,"sector"),(a=e.create("curve",[[0],[0]],l)).type=i.Z.OBJECT_TYPE_SECTOR,a.elType="sector",a.autoRadius=function(){var t=20/a.board.unitX,e=1/0,i=50/a.board.unitX;return r.Z.isPoint(a.center)&&(e=.3333*a.center.Dist(a.point2)),Math.max(t,Math.min(e,i))},"2lines"===m)a.Radius=function(){var t=r.Z.evaluate(s[4]);return"auto"===t?this.autoRadius():t},a.line1=e.select(s[0]),a.line2=e.select(s[1]),a.line1.addChild(a),a.line2.addChild(a),a.setParents(s),a.point1={visProp:{}},a.point2={visProp:{}},a.point3={visProp:{}},d=h.Z.meetLineLine(a.line1.stdform,a.line2.stdform,0,e),r.Z.isArray(s[2])?(2===s[2].length&&(s[2]=[1].concat(s[2])),f=h.Z.projectPointToLine({coords:{usrCoords:s[2]}},a.line1,e),f=p.Z.subtract(f.usrCoords,d.usrCoords),a.direction1=o.Z.innerProduct(f,[0,a.line1.stdform[2],-a.line1.stdform[1]],3)>=0?1:-1):a.direction1=s[2]>=0?1:-1,r.Z.isArray(s[3])?(2===s[3].length&&(s[3]=[1].concat(s[3])),f=h.Z.projectPointToLine({coords:{usrCoords:s[3]}},a.line2,e),f=p.Z.subtract(f.usrCoords,d.usrCoords),a.direction2=o.Z.innerProduct(f,[0,a.line2.stdform[2],-a.line2.stdform[1]],3)>=0?1:-1):a.direction2=s[3]>=0?1:-1,a.methodMap=t.Z.deepCopy(a.methodMap,{arc:"arc",center:"center",line1:"line1",line2:"line2"}),a.updateDataArray=function(){var t,e,r,s,n,l,c=[0,0,0];if(e=this.line1,r=this.line2,c=o.Z.crossProduct(e.stdform,r.stdform),Math.abs(c[0])>o.Z.eps*o.Z.eps&&(c[1]/=c[0],c[2]/=c[0],c[0]/=c[0]),t=this.direction1*this.Radius(),s=p.Z.add(c,[0,t*e.stdform[2],-t*e.stdform[1]]),t=this.direction2*this.Radius(),n=p.Z.add(c,[0,t*r.stdform[2],-t*r.stdform[1]]),this.point2.coords=new u.Z(i.Z.COORDS_BY_USER,s,a.board),this.point1.coords=new u.Z(i.Z.COORDS_BY_USER,c,a.board),this.point3.coords=new u.Z(i.Z.COORDS_BY_USER,n,a.board),Math.abs(s[0])<o.Z.eps||Math.abs(c[0])<o.Z.eps||Math.abs(n[0])<o.Z.eps)return this.dataX=[NaN],void(this.dataY=[NaN]);l=h.Z.bezierArc(s,c,n,!0,1),this.dataX=l[0],this.dataY=l[1],this.bezierDegree=3};else if("3points"===m){for(a.point1=_[0],a.point2=_[1],a.point3=_[2],c=0;c<3;c++)r.Z.exists(_[c]._is_new)?(a.addChild(_[c]),delete _[c]._is_new):_[c].addChild(a);a.useDirection=n.usedirection,a.setParents(_),r.Z.exists(_[3])&&(a.point4=_[3],a.point4.addChild(a)),a.methodMap=t.Z.deepCopy(a.methodMap,{arc:"arc",center:"center",radiuspoint:"radiuspoint",anglepoint:"anglepoint"}),a.updateDataArray=function(){var t,e,i,s,o,n=this.point2,a=this.point1,l=this.point3,c=1,d=r.Z.evaluate(this.visProp.selection);if(!n.isReal||!a.isReal||!l.isReal)return this.dataX=[NaN],void(this.dataY=[NaN]);o=h.Z.rad(n,a,l),("minor"===d&&o>Math.PI||"major"===d&&o<Math.PI)&&(c=-1),this.useDirection&&r.Z.exists(this.point4)&&(e=this.point2.coords.usrCoords,i=this.point4.coords.usrCoords,s=this.point3.coords.usrCoords,(e[1]-s[1])*(e[2]-i[2])-(e[2]-s[2])*(e[1]-i[1])>=0&&(l=this.point2,n=this.point3)),n=n.coords.usrCoords,a=a.coords.usrCoords,l=l.coords.usrCoords,t=h.Z.bezierArc(n,a,l,!0,c),this.dataX=t[0],this.dataY=t[1],this.bezierDegree=3},a.Radius=function(){return this.point2.Dist(this.point1)}}return a.center=a.point1,a.radiuspoint=a.point2,a.anglepoint=a.point3,l=r.Z.copyAttributes(n,e.options,"arc"),(l=r.Z.copyAttributes(l,e.options,"sector","arc")).withLabel=!1,l.selection=a.visProp.selection,l.name+="_arc","2lines"===m?(a.updateDataArray(),a.arc=e.create("arc",[function(){return a.point1.coords.usrCoords},function(){var t=a.point2.coords.distance(i.Z.COORDS_BY_USER,a.point1.coords);return 0===t?[a.point1.coords.usrCoords[1],a.point1.coords.usrCoords[2]]:[a.point1.coords.usrCoords[1]+a.Radius()*(a.point2.coords.usrCoords[1]-a.point1.coords.usrCoords[1])/t,a.point1.coords.usrCoords[2]+a.Radius()*(a.point2.coords.usrCoords[2]-a.point1.coords.usrCoords[2])/t]},function(){return a.point3.coords.usrCoords}],l)):a.arc=e.create("arc",[a.point1,function(){var t=a.point2.Dist(a.point1);return 0===t?[a.point1.X(),a.point1.Y()]:[a.point1.X()+a.Radius()*(a.point2.X()-a.point1.X())/t,a.point1.Y()+a.Radius()*(a.point2.Y()-a.point1.Y())/t]},a.point3],l),a.addChild(a.arc),a.hasPointCurve=function(t,e){var s,o,n,a,l,c,d=new u.Z(i.Z.COORDS_BY_SCREEN,[t,e],this.board),p=this.Radius(),f=this.center.coords.distance(i.Z.COORDS_BY_USER,d),_=r.Z.evaluate(this.visProp.selection);return r.Z.isObject(r.Z.evaluate(this.visProp.precision))?(l=this.board._inputDevice,a=r.Z.evaluate(this.visProp.precision[l])):a=this.board.options.precision.hasPoint,a/=Math.min(Math.abs(this.board.unitX),Math.abs(this.board.unitY)),(c=Math.abs(f-p)<a)&&(s=h.Z.rad(this.point2,this.center,d.usrCoords.slice(1)),o=0,n=h.Z.rad(this.point2,this.center,this.point3),("minor"===_&&n>Math.PI||"major"===_&&n<Math.PI)&&(o=n,n=2*Math.PI),(s<o||s>n)&&(c=!1)),c},a.hasPointSector=function(t,e){var s,o,n,a=new u.Z(i.Z.COORDS_BY_SCREEN,[t,e],this.board),l=this.Radius(),c=this.point1.coords.distance(i.Z.COORDS_BY_USER,a)<l,d=r.Z.evaluate(this.visProp.selection);return c&&(s=h.Z.rad(this.radiuspoint,this.center,a.usrCoords.slice(1)),o=0,n=h.Z.rad(this.radiuspoint,this.center,this.anglepoint),("minor"===d&&n>Math.PI||"major"===d&&n<Math.PI)&&(o=n,n=2*Math.PI),(s<o||s>n)&&(c=!1)),c},a.hasPoint=function(t,e){return r.Z.evaluate(this.visProp.highlightonsector)||r.Z.evaluate(this.visProp.hasinnerpoints)?this.hasPointSector(t,e):this.hasPointCurve(t,e)},a.getTextAnchor=function(){return this.point1.coords},a.getLabelAnchor=function(){var t,e,s,n,a,l=h.Z.rad(this.point2,this.point1,this.point3),c=13/this.board.unitX,d=13/this.board.unitY,p=this.point2.coords.usrCoords,f=this.point1.coords.usrCoords,_=p[1]-f[1],m=p[2]-f[2],g=r.Z.evaluate(this.visProp.selection),b=this.label?this.label.visProp:this.visProp.label;return("minor"===g&&l>Math.PI||"major"===g&&l<Math.PI)&&(l=-(2*Math.PI-l)),s=(t=new u.Z(i.Z.COORDS_BY_USER,[f[1]+Math.cos(.5*l)*_-Math.sin(.5*l)*m,f[2]+Math.sin(.5*l)*_+Math.cos(.5*l)*m],this.board)).usrCoords[1]-f[1],n=t.usrCoords[2]-f[2],s=s*((a=o.Z.hypot(s,n))+c)/a,n=n*(a+d)/a,e=[f[1]+s,f[2]+n],b.position=h.Z.calcLabelQuadrant(h.Z.rad([1,0],[0,0],e)),new u.Z(i.Z.COORDS_BY_USER,e,this.board)},a.setRadius=function(t){var e=r.Z.evaluate(t);"undefined"!==("auto"===t||"auto"===e?"auto":r.Z.isNumber(t)?"number":r.Z.isFunction(t)&&!r.Z.isString(e)?"function":"undefined")&&(this.visProp.radius=t),a.Radius=function(){var e=r.Z.evaluate(t);return"auto"===e?this.autoRadius():e}},a.getRadius=function(){return t.Z.deprecated("Sector.getRadius()","Sector.Radius()"),this.Radius()},a.Value=function(t){return this.arc.Value(t)},a.L=function(){return this.arc.L()},a.Area=function(){var t=this.Radius();return.5*t*t*this.Value("radians")},a.Perimeter=function(){return this.L()+2*this.Radius()},"3points"===m&&(a.setPositionDirectly=function(t,e,i){var r,s=new u.Z(t,e,this.board),o=new u.Z(t,i,this.board);return a.point1.draggable()&&a.point2.draggable()&&a.point3.draggable()?(r=p.Z.subtract(s.usrCoords,o.usrCoords),this.board.create("transform",r.slice(1),{type:"translate"}).applyOnce([a.point1,a.point2,a.point3]),this):this}),a.methodMap=t.Z.deepCopy(a.methodMap,{radius:"Radius",Radius:"Radius",getRadius:"Radius",setRadius:"setRadius",Value:"Value",L:"L",Area:"Area",Perimeter:"Perimeter"}),a},t.Z.registerElement("sector",t.Z.createSector),t.Z.createCircumcircleSector=function(t,e,i){var s,o,n,a;if(!1===(a=r.Z.providePoints(t,e,i,"point")))throw new Error("JSXGraph: Can't create circumcircle sector with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+"'.");return(o=t.create("circumcenter",a.slice(0,3),n)).dump=!1,n=r.Z.copyAttributes(i,t.options,"circumcirclesector"),(s=t.create("sector",[o,a[0],a[2],a[1]],n)).elType="circumcirclesector",s.setParents(a),s.center=o,s.subs={center:o},s},t.Z.registerElement("circumcirclesector",t.Z.createCircumcircleSector),t.Z.createMinorSector=function(e,i,r){return r.selection="minor",t.Z.createSector(e,i,r)},t.Z.registerElement("minorsector",t.Z.createMinorSector),t.Z.createMajorSector=function(e,i,r){return r.selection="major",t.Z.createSector(e,i,r)},t.Z.registerElement("majorsector",t.Z.createMajorSector),t.Z.createAngle=function(t,e,s){var n,a,l,c,d,p,f="invalid";if(e[0].elementClass===i.Z.OBJECT_CLASS_LINE&&e[1].elementClass===i.Z.OBJECT_CLASS_LINE&&(r.Z.isArray(e[2])||r.Z.isNumber(e[2]))&&(r.Z.isArray(e[3])||r.Z.isNumber(e[3])))f="2lines";else{if(l={name:""},!1===(p=r.Z.providePoints(t,e,l,"point")))throw new Error("JSXGraph: Can't create angle with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+"'.");f="3points"}if(l=r.Z.copyAttributes(s,t.options,"angle"),r.Z.exists(l.name)&&""!==l.name||(l.name=t.generateName({type:i.Z.OBJECT_TYPE_ANGLE})),a=r.Z.exists(l.radius)?l.radius:0,t.suspendUpdate(),"2lines"===f?(e.push(a),(n=t.create("sector",e,l)).updateDataArraySector=n.updateDataArray,n.setAngle=function(t){},n.free=function(t){}):((n=t.create("sector",[p[1],p[0],p[2]],l)).arc.visProp.priv=!0,n.point=n.point2=n.radiuspoint=p[0],n.pointsquare=n.point3=n.anglepoint=p[2],n.Radius=function(){var t=r.Z.evaluate(a);return"auto"===t?n.autoRadius():t},n.updateDataArraySector=function(){var t,e,i=this.point2,s=this.point1,o=this.point3,n=this.Radius(),a=s.Dist(i),l=1,c=r.Z.evaluate(this.visProp.selection);e=h.Z.rad(i,s,o),("minor"===c&&e>Math.PI||"major"===c&&e<Math.PI)&&(l=-1),i=i.coords.usrCoords,s=s.coords.usrCoords,o=o.coords.usrCoords,i=[1,s[1]+(i[1]-s[1])*n/a,s[2]+(i[2]-s[2])*n/a],o=[1,s[1]+(o[1]-s[1])*n/a,s[2]+(o[2]-s[2])*n/a],t=h.Z.bezierArc(i,s,o,!0,l),this.dataX=t[0],this.dataY=t[1],this.bezierDegree=3},n.setAngle=function(t){var e,i,s,n=this.anglepoint,a=this.radiuspoint;return n.draggable()&&(e=this.board.create("transform",[t,this.center],{type:"rotate"}),n.addTransform(a,e),e.update(),n.moveTo(o.Z.matVecMult(e.matrix,a.coords.usrCoords)),s=r.Z.isFunction(t)?function(){return 2*Math.PI-t()}:function(){return 2*Math.PI-t},i=this.board.create("transform",[s,this.center],{type:"rotate"}),n.coords.on("update",(function(){i.update(),a.moveTo(o.Z.matVecMult(i.matrix,n.coords.usrCoords))})),n.setParents(a),this.hasFixedAngle=!0),this},n.free=function(){var t=this.anglepoint;return t.transformations.length>0&&(t.transformations.pop(),t.isDraggable=!0,t.parents=[],t.coords.off("update")),this.hasFixedAngle=!1,this},n.setParents(p)),r.Z.exists(n.visProp.text)&&n.label.setText(r.Z.evaluate(n.visProp.text)),n.elType="angle",n.type=i.Z.OBJECT_TYPE_ANGLE,n.subs={},n.updateDataArraySquare=function(){var t,e,i,r,s,n,a,l,c=this.Radius();"2lines"===f&&this.updateDataArraySector(),t=this.point2,e=this.point1,i=this.point3,t=t.coords.usrCoords,e=e.coords.usrCoords,i=i.coords.usrCoords,r=h.Z.distance(t,e,3),s=h.Z.distance(i,e,3),t=[1,e[1]+(t[1]-e[1])*c/r,e[2]+(t[2]-e[2])*c/r],i=[1,e[1]+(i[1]-e[1])*c/s,e[2]+(i[2]-e[2])*c/s],n=o.Z.crossProduct(i,e),a=[-t[1]*n[1]-t[2]*n[2],t[0]*n[1],t[0]*n[2]],n=o.Z.crossProduct(t,e),l=[-i[1]*n[1]-i[2]*n[2],i[0]*n[1],i[0]*n[2]],(n=o.Z.crossProduct(a,l))[1]/=n[0],n[2]/=n[0],this.dataX=[e[1],t[1],n[1],i[1],e[1]],this.dataY=[e[2],t[2],n[2],i[2],e[2]],this.bezierDegree=1},n.updateDataArrayNone=function(){this.dataX=[NaN],this.dataY=[NaN],this.bezierDegree=1},n.updateDataArray=function(){var t=r.Z.evaluate(this.visProp.type),e=h.Z.trueAngle(this.point2,this.point1,this.point3),i=r.Z.evaluate(this.visProp.selection);("minor"===i&&e>180||"major"===i&&e<180)&&(e=360-e),Math.abs(e-90)<r.Z.evaluate(this.visProp.orthosensitivity)+o.Z.eps&&(t=r.Z.evaluate(this.visProp.orthotype)),"none"===t?this.updateDataArrayNone():"square"===t?this.updateDataArraySquare():"sector"===t?this.updateDataArraySector():"sectordot"===t&&(this.updateDataArraySector(),this.dot.visProp.visible||this.dot.setAttribute({visible:!0})),(!this.visProp.visible||"sectordot"!==t&&this.dot.visProp.visible)&&this.dot.setAttribute({visible:!1})},c=r.Z.copyAttributes(s,t.options,"angle","dot"),n.dot=t.create("point",[function(){var t,e,i,s,a,l,c,d,u;return r.Z.exists(n.dot)&&!n.dot.visProp.visible?[0,0]:(t=n.point2.coords.usrCoords,e=n.point1.coords.usrCoords,i=n.Radius(),s=h.Z.distance(t,e,3),a=h.Z.rad(n.point2,n.point1,n.point3),("minor"===(u=r.Z.evaluate(n.visProp.selection))&&a>Math.PI||"major"===u&&a<Math.PI)&&(a=-(2*Math.PI-a)),a*=.5,l=Math.cos(a),c=Math.sin(a),t=[1,e[1]+(t[1]-e[1])*i/s,e[2]+(t[2]-e[2])*i/s],d=[[1,0,0],[e[1]-.5*e[1]*l+.5*e[2]*c,.5*l,.5*-c],[e[2]-.5*e[1]*c-.5*e[2]*l,.5*c,.5*l]],o.Z.matVecMult(d,t))}],c),n.dot.dump=!1,n.subs.dot=n.dot,"2lines"===f)for(d=0;d<2;d++)t.select(e[d]).addChild(n.dot);else for(d=0;d<3;d++)t.select(p[d]).addChild(n.dot);return t.unsuspendUpdate(),n.Value=function(t){return""===(t=t||"radians")&&(t="radians"),n.arc.Value(t)},n.getLabelAnchor=function(){var t,e,s,a,l,c,d,p,f,_=12,m=r.Z.evaluate(n.visProp.selection),g=this.label?this.label.visProp:this.visProp.label;return r.Z.exists(this.label)&&r.Z.exists(this.label.visProp.fontsize)&&(_=r.Z.evaluate(this.label.visProp.fontsize)),_/=this.board.unitX,e=n.point2.coords.usrCoords,s=n.point1.coords.usrCoords,a=n.Radius(),l=h.Z.distance(e,s,3),c=h.Z.rad(n.point2,n.point1,n.point3),("minor"===m&&c>Math.PI||"major"===m&&c<Math.PI)&&(c=-(2*Math.PI-c)),c*=.5,d=Math.cos(c),p=Math.sin(c),e=[1,s[1]+(e[1]-s[1])*a/l,s[2]+(e[2]-s[2])*a/l],f=[[1,0,0],[s[1]-.5*s[1]*d+.5*s[2]*p,.5*d,.5*-p],[s[2]-.5*s[1]*p-.5*s[2]*d,.5*p,.5*d]],(t=o.Z.matVecMult(f,e))[1]/=t[0],t[2]/=t[0],t[0]/=t[0],l=h.Z.distance(t,s,3),t=[t[0],s[1]+(t[1]-s[1])*(a+_)/l,s[2]+(t[2]-s[2])*(a+_)/l],g.position=h.Z.calcLabelQuadrant(h.Z.rad([1,0],[0,0],t)),new u.Z(i.Z.COORDS_BY_USER,t,this.board)},n.methodMap=r.Z.deepCopy(n.methodMap,{setAngle:"setAngle",Value:"Value",free:"free"}),n},t.Z.registerElement("angle",t.Z.createAngle),t.Z.createNonreflexAngle=function(e,i,s){var o;return s.selection="minor",s=r.Z.copyAttributes(s,e.options,"nonreflexangle"),(o=t.Z.createAngle(e,i,s)).Value=function(t){var e=h.Z.rad(this.point2,this.point1,this.point3);return""===(t=t||"radians")&&(t="radians"),e=e<Math.PI?e:2*Math.PI-e,this.arc.Value(t,e)},o},t.Z.registerElement("nonreflexangle",t.Z.createNonreflexAngle),t.Z.createReflexAngle=function(e,i,s){var o;return s.selection="major",s=r.Z.copyAttributes(s,e.options,"reflexangle"),(o=t.Z.createAngle(e,i,s)).Value=function(t){var e=h.Z.rad(this.point2,this.point1,this.point3);return""===(t=t||"radians")&&(t="radians"),e=e>=Math.PI?e:2*Math.PI-e,this.arc.Value(t,e)},o},t.Z.registerElement("reflexangle",t.Z.createReflexAngle),t.Z.createOrthogonalProjection=function(t,e,s){var o,n,a,l;if(e[0]=t.select(e[0]),e[1]=t.select(e[1]),r.Z.isPointType(t,e[0])&&e[1].elementClass===i.Z.OBJECT_CLASS_LINE)n=r.Z.providePoints(t,[e[0]],s,"point")[0],o=e[1];else{if(!r.Z.isPointType(t,e[1])||e[0].elementClass!==i.Z.OBJECT_CLASS_LINE)throw new Error("JSXGraph: Can't create perpendicular point with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,line]");n=r.Z.providePoints(t,[e[1]],s,"point")[0],o=e[0]}return l=r.Z.copyAttributes(s,t.options,"orthogonalprojection"),a=t.create("point",[function(){return h.Z.projectPointToLine(n,o,t)}],l),r.Z.exists(n._is_new)?(a.addChild(n),delete n._is_new):n.addChild(a),o.addChild(a),a.elType="orthogonalprojection",a.setParents([n.id,a.id]),a.update(),a.generatePolynomial=function(){var t=o.point1.symbolic.x,e=o.point1.symbolic.y,i=o.point2.symbolic.x,r=o.point2.symbolic.y,s=n.symbolic.x,h=n.symbolic.y,l=a.symbolic.x,c=a.symbolic.y;return["("+e+")*("+l+")-("+e+")*("+i+")+("+c+")*("+i+")-("+t+")*("+c+")+("+t+")*("+r+")-("+l+")*("+r+")","("+h+")*("+e+")-("+h+")*("+r+")-("+c+")*("+e+")+("+c+")*("+r+")+("+s+")*("+t+")-("+s+")*("+i+")-("+l+")*("+t+")+("+l+")*("+i+")"]},a},t.Z.createPerpendicular=function(e,s,o){var n,a,h,l;if(s[0]=e.select(s[0]),s[1]=e.select(s[1]),r.Z.isPointType(e,s[0])&&s[1].elementClass===i.Z.OBJECT_CLASS_LINE)a=s[1],n=r.Z.providePoints(e,[s[0]],o,"point")[0];else{if(!r.Z.isPointType(e,s[1])||s[0].elementClass!==i.Z.OBJECT_CLASS_LINE)throw new Error("JSXGraph: Can't create perpendicular with parent types '"+typeof s[0]+"' and '"+typeof s[1]+"'.\nPossible parent types: [line,point]");a=s[0],n=r.Z.providePoints(e,[s[1]],o,"point")[0]}return l=r.Z.copyAttributes(o,e.options,"perpendicular"),(h=t.Z.createLine(e,[function(){return a.stdform[2]*n.X()-a.stdform[1]*n.Y()},function(){return-a.stdform[2]*n.Z()},function(){return a.stdform[1]*n.Z()}],l)).elType="perpendicular",h.setParents([a.id,n.id]),r.Z.exists(n._is_new)?(h.addChild(n),delete n._is_new):n.addChild(h),a.addChild(h),h},t.Z.createPerpendicularPoint=function(t,e,s){var o,n,a;if(e[0]=t.select(e[0]),e[1]=t.select(e[1]),r.Z.isPointType(t,e[0])&&e[1].elementClass===i.Z.OBJECT_CLASS_LINE)n=r.Z.providePoints(t,[e[0]],s,"point")[0],o=e[1];else{if(!r.Z.isPointType(t,e[1])||e[0].elementClass!==i.Z.OBJECT_CLASS_LINE)throw new Error("JSXGraph: Can't create perpendicular point with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,line]");n=r.Z.providePoints(t,[e[1]],s,"point")[0],o=e[0]}return a=t.create("point",[function(){return h.Z.perpendicular(o,n,t)[0]}],s),r.Z.exists(n._is_new)?(a.addChild(n),delete n._is_new):n.addChild(a),o.addChild(a),a.elType="perpendicularpoint",a.setParents([n.id,o.id]),a.update(),a.generatePolynomial=function(){var t=o.point1.symbolic.x,e=o.point1.symbolic.y,i=o.point2.symbolic.x,r=o.point2.symbolic.y,s=n.symbolic.x,h=n.symbolic.y,l=a.symbolic.x,c=a.symbolic.y;return["("+e+")*("+l+")-("+e+")*("+i+")+("+c+")*("+i+")-("+t+")*("+c+")+("+t+")*("+r+")-("+l+")*("+r+")","("+h+")*("+e+")-("+h+")*("+r+")-("+c+")*("+e+")+("+c+")*("+r+")+("+s+")*("+t+")-("+s+")*("+i+")-("+l+")*("+t+")+("+l+")*("+i+")"]},a},t.Z.createPerpendicularSegment=function(e,s,o){var n,a,l,c,d;if(s[0]=e.select(s[0]),s[1]=e.select(s[1]),r.Z.isPointType(e,s[0])&&s[1].elementClass===i.Z.OBJECT_CLASS_LINE)a=s[1],n=r.Z.providePoints(e,[s[0]],o,"point")[0];else{if(!r.Z.isPointType(e,s[1])||s[0].elementClass!==i.Z.OBJECT_CLASS_LINE)throw new Error("JSXGraph: Can't create perpendicular with parent types '"+typeof s[0]+"' and '"+typeof s[1]+"'.\nPossible parent types: [line,point]");a=s[0],n=r.Z.providePoints(e,[s[1]],o,"point")[0]}return d=r.Z.copyAttributes(o,e.options,"perpendicularsegment","point"),(c=t.Z.createPerpendicularPoint(e,[a,n],d)).dump=!1,r.Z.exists(o.layer)||(o.layer=e.options.layer.line),d=r.Z.copyAttributes(o,e.options,"perpendicularsegment"),(l=t.Z.createLine(e,[function(){return h.Z.perpendicular(a,n,e)[1]?[c,n]:[n,c]}],d)).point=c,r.Z.exists(n._is_new)?(l.addChild(n),delete n._is_new):n.addChild(l),a.addChild(l),l.elType="perpendicularsegment",l.setParents([n.id,a.id]),l.subs={point:c},l.inherits.push(c),l},t.Z.createMidpoint=function(t,e,s){var n,a,h,l,c;for(l=0;l<e.length;++l)e[l]=t.select(e[l]);if(2===e.length&&r.Z.isPointType(t,e[0])&&r.Z.isPointType(t,e[1]))e=r.Z.providePoints(t,e,s,"point"),n=e[0],a=e[1];else{if(1!==e.length||e[0].elementClass!==i.Z.OBJECT_CLASS_LINE)throw new Error("JSXGraph: Can't create midpoint.\nPossible parent types: [point,point], [line]");n=e[0].point1,a=e[0].point2}return c=r.Z.copyAttributes(s,t.options,"midpoint"),h=t.create("point",[function(){var t=n.coords.usrCoords[1]+a.coords.usrCoords[1];return isNaN(t)||Math.abs(n.coords.usrCoords[0])<o.Z.eps||Math.abs(a.coords.usrCoords[0])<o.Z.eps?NaN:.5*t},function(){var t=n.coords.usrCoords[2]+a.coords.usrCoords[2];return isNaN(t)||Math.abs(n.coords.usrCoords[0])<o.Z.eps||Math.abs(a.coords.usrCoords[0])<o.Z.eps?NaN:.5*t}],c),r.Z.exists(n._is_new)?(h.addChild(n),delete n._is_new):n.addChild(h),r.Z.exists(a._is_new)?(h.addChild(a),delete a._is_new):a.addChild(h),h.elType="midpoint",h.setParents([n.id,a.id]),h.prepareUpdate().update(),h.generatePolynomial=function(){var t=n.symbolic.x,e=n.symbolic.y,i=a.symbolic.x,r=a.symbolic.y,s=h.symbolic.x,o=h.symbolic.y;return["("+e+")*("+s+")-("+e+")*("+i+")+("+o+")*("+i+")-("+t+")*("+o+")+("+t+")*("+r+")-("+s+")*("+r+")","("+t+")^2 - 2*("+t+")*("+s+")+("+e+")^2-2*("+e+")*("+o+")-("+i+")^2+2*("+i+")*("+s+")-("+r+")^2+2*("+r+")*("+o+")"]},h},t.Z.createParallelPoint=function(t,e,s){var o,n,a,h,l,c;for(l=0;l<e.length;++l)e[l]=t.select(e[l]);if(3===e.length&&r.Z.isPointType(t,e[0])&&r.Z.isPointType(t,e[1])&&r.Z.isPointType(t,e[2]))e=r.Z.providePoints(t,e,s,"point"),o=e[0],n=e[1],a=e[2];else if(r.Z.isPointType(t,e[0])&&e[1].elementClass===i.Z.OBJECT_CLASS_LINE)a=r.Z.providePoints(t,[e[0]],s,"point")[0],o=e[1].point1,n=e[1].point2;else{if(!r.Z.isPointType(t,e[1])||e[0].elementClass!==i.Z.OBJECT_CLASS_LINE)throw new Error("JSXGraph: Can't create parallel point with parent types '"+typeof e[0]+"', '"+typeof e[1]+"' and '"+typeof e[2]+"'.\nPossible parent types: [line,point], [point,point,point]");a=r.Z.providePoints(t,[e[1]],s,"point")[0],o=e[0].point1,n=e[0].point2}return c=r.Z.copyAttributes(s,t.options,"parallelpoint"),h=t.create("point",[function(){return a.coords.usrCoords[1]+n.coords.usrCoords[1]-o.coords.usrCoords[1]},function(){return a.coords.usrCoords[2]+n.coords.usrCoords[2]-o.coords.usrCoords[2]}],c),r.Z.exists(o._is_new)?(h.addChild(o),delete o._is_new):o.addChild(h),r.Z.exists(n._is_new)?(h.addChild(n),delete n._is_new):n.addChild(h),r.Z.exists(a._is_new)?(h.addChild(a),delete a._is_new):a.addChild(h),h.elType="parallelpoint",h.setParents([o.id,n.id,a.id]),h.prepareUpdate().update(),h.generatePolynomial=function(){var t=o.symbolic.x,e=o.symbolic.y,i=n.symbolic.x,r=n.symbolic.y,s=a.symbolic.x,l=a.symbolic.y,c=h.symbolic.x,d=h.symbolic.y;return["("+r+")*("+c+")-("+r+")*("+s+")-("+e+")*("+c+")+("+e+")*("+s+")-("+d+")*("+i+")+("+d+")*("+t+")+("+l+")*("+i+")-("+l+")*("+t+")","("+d+")*("+t+")-("+d+")*("+s+")-("+r+")*("+t+")+("+r+")*("+s+")-("+c+")*("+e+")+("+c+")*("+l+")+("+i+")*("+e+")-("+i+")*("+l+")"]},h},t.Z.createParallel=function(t,e,i){var s,n,a,h,l,c,d=1;for(l=0;l<e.length;++l)e[l]=t.select(e[l]);return s=null,3===e.length?(s=(e=r.Z.providePoints(t,e,i,"point"))[2],d=0):r.Z.isPointType(t,e[0])?(s=r.Z.providePoints(t,[e[0]],i,"point")[0],h=function(){return e[1].stdform}):r.Z.isPointType(t,e[1])&&(s=r.Z.providePoints(t,[e[1]],i,"point")[0],h=function(){return e[0].stdform}),r.Z.exists(i.layer)||(i.layer=t.options.layer.line),c=r.Z.copyAttributes(i,t.options,"parallel","point"),(n=1===d?t.create("point",[function(){return o.Z.crossProduct([1,0,0],h())}],c):t.create("parallelpoint",e,c)).isDraggable=!0,c=r.Z.copyAttributes(i,t.options,"parallel"),(a=t.create("line",[s,n],c)).elType="parallel",a.subs={point:n},a.inherits.push(n),a.setParents([e[0].id,e[1].id]),3===e.length&&a.addParents(e[2].id),a.point=n,a},t.Z.createArrowParallel=function(e,s,o){var n,a;try{return!1===(a=r.Z.copyAttributes(o,e.options,"arrowparallel")).lastArrow&&(a.lastArrow=!0),(n=t.Z.createParallel(e,s,a).setAttribute({straightFirst:!1,straightLast:!1})).type=i.Z.OBJECT_TYPE_VECTOR,n.elType="arrowparallel",n}catch(t){throw new Error("JSXGraph: Can't create arrowparallel with parent types '"+typeof s[0]+"' and '"+typeof s[1]+"'.\nPossible parent types: [line,point], [point,point,point]")}},t.Z.createNormal=function(t,e,s){var n,a,h,l,c,u,p,f,_;for(l=0;l<e.length;++l)e[l]=t.select(e[l]);if(1===e.length)n=e[0],a=n.slideObject;else{if(2!==e.length)throw new Error("JSXGraph: Can't create normal with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,line], [point,circle], [glider]");if(r.Z.isPointType(t,e[0]))n=r.Z.providePoints(t,[e[0]],s,"point")[0],a=e[1];else{if(!r.Z.isPointType(t,e[1]))throw new Error("JSXGraph: Can't create normal with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,line], [point,circle], [glider]");a=e[0],n=r.Z.providePoints(t,[e[1]],s,"point")[0]}}if(p=r.Z.copyAttributes(s,t.options,"normal"),a.elementClass===i.Z.OBJECT_CLASS_LINE)_=r.Z.copyAttributes(s,t.options,"normal","point"),f=t.create("point",[function(){var t=o.Z.crossProduct([1,0,0],a.stdform);return[t[0],-t[2],t[1]]}],_),f.isDraggable=!0,(h=t.create("line",[n,f],p)).point=f,h.subs={point:f},h.inherits.push(f);else if(a.elementClass===i.Z.OBJECT_CLASS_CIRCLE)h=t.create("line",[a.midpoint,n],p);else if(a.elementClass===i.Z.OBJECT_CLASS_CURVE)"plot"!==r.Z.evaluate(a.visProp.curvetype)?(c=a.X,u=a.Y,h=t.create("line",[function(){return-n.X()*d.Z.D(c)(n.position)-n.Y()*d.Z.D(u)(n.position)},function(){return d.Z.D(c)(n.position)},function(){return d.Z.D(u)(n.position)}],p)):h=t.create("line",[function(){var t,e,i,r,s,h,l,c,d,u,p=Math.floor(n.position),f=n.position-p;if(1===a.bezierdegree)p===a.numberPoints-1&&(p-=1,f=1);else{if(3!==a.bezierDegree)return 0;p=3*Math.floor(n.position*(a.numberPoints-1)/3),i=(n.position*(a.numberPoints-1)-p)/3,p>=a.numberPoints-1&&(p=a.numberPoints-4,i=1)}return p<0?1:1===a.bezierDegree?(a.Y(p)+f*(a.Y(p+1)-a.Y(p)))*(a.Y(p)-a.Y(p+1))-(a.X(p)+f*(a.X(p+1)-a.X(p)))*(a.X(p+1)-a.X(p)):(r=a.points[p].usrCoords,s=a.points[p+1].usrCoords,h=a.points[p+2].usrCoords,l=a.points[p+3].usrCoords,c=(1-i)*(1-i)*(s[1]-r[1])+2*(1-i)*i*(h[1]-s[1])+i*i*(l[1]-h[1]),d=(1-i)*(1-i)*(s[2]-r[2])+2*(1-i)*i*(h[2]-s[2])+i*i*(l[2]-h[2]),c/=u=o.Z.hypot(c,d),d/=u,e=[1,(t=n.coords.usrCoords)[1]-d,t[2]+c],t[2]*e[1]-t[1]*e[2])},function(){var t,e,i,r,s,h,l,c,d,u=Math.floor(n.position);if(1===a.bezierdegree)u===a.numberPoints-1&&(u-=1);else{if(3!==a.bezierDegree)return 0;u=3*Math.floor(n.position*(a.numberPoints-1)/3),e=(n.position*(a.numberPoints-1)-u)/3,u>=a.numberPoints-1&&(u=a.numberPoints-4,e=1)}return u<0?0:1===a.bezierDegree?a.X(u+1)-a.X(u):(i=a.points[u].usrCoords,r=a.points[u+1].usrCoords,s=a.points[u+2].usrCoords,h=a.points[u+3].usrCoords,l=(1-e)*(1-e)*(r[1]-i[1])+2*(1-e)*e*(s[1]-r[1])+e*e*(h[1]-s[1]),c=(1-e)*(1-e)*(r[2]-i[2])+2*(1-e)*e*(s[2]-r[2])+e*e*(h[2]-s[2]),l/=d=o.Z.hypot(l,c),c/=d,[1,(t=n.coords.usrCoords)[1]-c,t[2]+l][2]-t[2])},function(){var t,e,i,r,s,h,l,c,d,u,p=Math.floor(n.position);if(1===a.bezierdegree)p===a.numberPoints-1&&(p-=1);else{if(3!==a.bezierDegree)return 0;p=3*Math.floor(n.position*(a.numberPoints-1)/3),i=(n.position*(a.numberPoints-1)-p)/3,p>=a.numberPoints-1&&(p=a.numberPoints-4,i=1)}return p<0?0:1===a.bezierDegree?a.Y(p+1)-a.Y(p):(r=a.points[p].usrCoords,s=a.points[p+1].usrCoords,h=a.points[p+2].usrCoords,l=a.points[p+3].usrCoords,c=(1-i)*(1-i)*(s[1]-r[1])+2*(1-i)*i*(h[1]-s[1])+i*i*(l[1]-h[1]),d=(1-i)*(1-i)*(s[2]-r[2])+2*(1-i)*i*(h[2]-s[2])+i*i*(l[2]-h[2]),c/=u=o.Z.hypot(c,d),d/=u,e=[1,(t=n.coords.usrCoords)[1]-d,t[2]+c],t[1]-e[1])}],p);else{if(a.type!==i.Z.OBJECT_TYPE_TURTLE)throw new Error("JSXGraph: Can't create normal with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,line], [point,circle], [glider]");h=t.create("line",[function(){var t,e,r=Math.floor(n.position),s=n.position-r;for(e=0;e<a.objects.length;e++)if((t=a.objects[e]).type===i.Z.OBJECT_TYPE_CURVE){if(r<t.numberPoints)break;r-=t.numberPoints}return r===t.numberPoints-1&&(r-=1,s=1),r<0?1:(t.Y(r)+s*(t.Y(r+1)-t.Y(r)))*(t.Y(r)-t.Y(r+1))-(t.X(r)+s*(t.X(r+1)-t.X(r)))*(t.X(r+1)-t.X(r))},function(){var t,e,r=Math.floor(n.position);for(e=0;e<a.objects.length;e++)if((t=a.objects[e]).type===i.Z.OBJECT_TYPE_CURVE){if(r<t.numberPoints)break;r-=t.numberPoints}return r===t.numberPoints-1&&(r-=1),r<0?0:t.X(r+1)-t.X(r)},function(){var t,e,r=Math.floor(n.position);for(e=0;e<a.objects.length;e++)if((t=a.objects[e]).type===i.Z.OBJECT_TYPE_CURVE){if(r<t.numberPoints)break;r-=t.numberPoints}return r===t.numberPoints-1&&(r-=1),r<0?0:t.Y(r+1)-t.Y(r)}],p)}return h.elType="normal",h.setParents(e),r.Z.exists(n._is_new)?(h.addChild(n),delete n._is_new):n.addChild(h),a.addChild(h),h},t.Z.createBisector=function(e,i,s){var o,n,a,l;if(i=r.Z.providePoints(e,i,s,"point"),r.Z.isPoint(i[0])&&r.Z.isPoint(i[1])&&r.Z.isPoint(i[2])){for((l=r.Z.copyAttributes(s,e.options,"bisector","point")).snapToGrid=!1,(o=e.create("point",[function(){return h.Z.angleBisector(i[0],i[1],i[2],e)}],l)).dump=!1,a=0;a<3;a++)r.Z.exists(i[a]._is_new)?(o.addChild(i[a]),delete i[a]._is_new):i[a].addChild(o);return r.Z.exists(s.layer)||(s.layer=e.options.layer.line),l=r.Z.copyAttributes(s,e.options,"bisector"),(n=t.Z.createLine(e,[i[1],o],l)).point=o,n.elType="bisector",n.setParents(i),n.subs={point:o},n.inherits.push(o),n}throw new Error("JSXGraph: Can't create angle bisector with parent types '"+typeof i[0]+"' and '"+typeof i[1]+"'.\nPossible parent types: [point,point,point]")},t.Z.createAngularBisectorsOfTwoLines=function(t,e,s){var n,a,h,l,c=t.select(e[0]),d=t.select(e[1]);if(c.elementClass!==i.Z.OBJECT_CLASS_LINE||d.elementClass!==i.Z.OBJECT_CLASS_LINE)throw new Error("JSXGraph: Can't create angle bisectors of two lines with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [line,line]");return r.Z.exists(s.layer)||(s.layer=t.options.layer.line),h=r.Z.copyAttributes(s,t.options,"bisectorlines","line1"),n=t.create("line",[function(){var t=o.Z.hypot(c.stdform[1],c.stdform[2]),e=o.Z.hypot(d.stdform[1],d.stdform[2]);return c.stdform[0]/t-d.stdform[0]/e},function(){var t=o.Z.hypot(c.stdform[1],c.stdform[2]),e=o.Z.hypot(d.stdform[1],d.stdform[2]);return c.stdform[1]/t-d.stdform[1]/e},function(){var t=o.Z.hypot(c.stdform[1],c.stdform[2]),e=o.Z.hypot(d.stdform[1],d.stdform[2]);return c.stdform[2]/t-d.stdform[2]/e}],h),r.Z.exists(s.layer)||(s.layer=t.options.layer.line),h=r.Z.copyAttributes(s,t.options,"bisectorlines","line2"),a=t.create("line",[function(){var t=o.Z.hypot(c.stdform[1],c.stdform[2]),e=o.Z.hypot(d.stdform[1],d.stdform[2]);return c.stdform[0]/t+d.stdform[0]/e},function(){var t=o.Z.hypot(c.stdform[1],c.stdform[2]),e=o.Z.hypot(d.stdform[1],d.stdform[2]);return c.stdform[1]/t+d.stdform[1]/e},function(){var t=o.Z.hypot(c.stdform[1],c.stdform[2]),e=o.Z.hypot(d.stdform[1],d.stdform[2]);return c.stdform[2]/t+d.stdform[2]/e}],h),l=new j({line1:n,line2:a}),n.dump=!1,a.dump=!1,l.elType="bisectorlines",l.setParents([c.id,d.id]),l.subs={line1:n,line2:a},l},t.Z.createCircumcenter=function(e,i,s){var o,n,a,l,c;if(i=r.Z.providePoints(e,i,s,"point"),r.Z.isPoint(i[0])&&r.Z.isPoint(i[1])&&r.Z.isPoint(i[2])){for(a=i[0],l=i[1],c=i[2],o=t.Z.createPoint(e,[function(){return h.Z.circumcenter(a,l,c,e)}],s),n=0;n<3;n++)r.Z.exists(i[n]._is_new)?(o.addChild(i[n]),delete i[n]._is_new):i[n].addChild(o);return o.elType="circumcenter",o.setParents(i),o.generatePolynomial=function(){var t=a.symbolic.x,e=a.symbolic.y,i=l.symbolic.x,r=l.symbolic.y,s=c.symbolic.x,n=c.symbolic.y,h=o.symbolic.x,d=o.symbolic.y;return[["((",h,")-(",t,"))^2+((",d,")-(",e,"))^2-((",h,")-(",i,"))^2-((",d,")-(",r,"))^2"].join(""),["((",h,")-(",t,"))^2+((",d,")-(",e,"))^2-((",h,")-(",s,"))^2-((",d,")-(",n,"))^2"].join("")]},o}throw new Error("JSXGraph: Can't create circumcircle midpoint with parent types '"+typeof i[0]+"', '"+typeof i[1]+"' and '"+typeof i[2]+"'.\nPossible parent types: [point,point,point]")},t.Z.createIncenter=function(t,e,s){var n,a,h,l,c;if(!((e=r.Z.providePoints(t,e,s,"point")).length>=3&&r.Z.isPoint(e[0])&&r.Z.isPoint(e[1])&&r.Z.isPoint(e[2])))throw new Error("JSXGraph: Can't create incenter with parent types '"+typeof e[0]+"', '"+typeof e[1]+"' and '"+typeof e[2]+"'.\nPossible parent types: [point,point,point]");for(a=e[0],h=e[1],l=e[2],n=t.create("point",[function(){var e,r,s;return e=o.Z.hypot(h.X()-l.X(),h.Y()-l.Y()),r=o.Z.hypot(a.X()-l.X(),a.Y()-l.Y()),s=o.Z.hypot(h.X()-a.X(),h.Y()-a.Y()),new u.Z(i.Z.COORDS_BY_USER,[(e*a.X()+r*h.X()+s*l.X())/(e+r+s),(e*a.Y()+r*h.Y()+s*l.Y())/(e+r+s)],t)}],s),c=0;c<3;c++)r.Z.exists(e[c]._is_new)?(n.addChild(e[c]),delete e[c]._is_new):e[c].addChild(n);return n.elType="incenter",n.setParents(e),n},t.Z.createCircumcircle=function(e,i,s){var o,n,a,h;if(!1===(i=r.Z.providePoints(e,i,s,"point")))throw new Error("JSXGraph: Can't create circumcircle with parent types '"+typeof i[0]+"', '"+typeof i[1]+"' and '"+typeof i[2]+"'.\nPossible parent types: [point,point,point]");try{for(a=r.Z.copyAttributes(s,e.options,"circumcircle","center"),(o=t.Z.createCircumcenter(e,i,a)).dump=!1,r.Z.exists(s.layer)||(s.layer=e.options.layer.circle),a=r.Z.copyAttributes(s,e.options,"circumcircle"),(n=t.Z.createCircle(e,[o,i[0]],a)).elType="circumcircle",n.setParents(i),n.subs={center:o},n.inherits.push(n),h=0;h<3;h++)r.Z.exists(i[h]._is_new)?(n.addChild(i[h]),delete i[h]._is_new):i[h].addChild(n)}catch(t){throw new Error("JSXGraph: Can't create circumcircle with parent types '"+typeof i[0]+"', '"+typeof i[1]+"' and '"+typeof i[2]+"'.\nPossible parent types: [point,point,point]")}return n},t.Z.createIncircle=function(e,i,s){var n,a,h,l;if(!1===(i=r.Z.providePoints(e,i,s,"point")))throw new Error("JSXGraph: Can't create circumcircle with parent types '"+typeof i[0]+"', '"+typeof i[1]+"' and '"+typeof i[2]+"'.\nPossible parent types: [point,point,point]");try{for(l=r.Z.copyAttributes(s,e.options,"incircle","center"),(a=t.Z.createIncenter(e,i,l)).dump=!1,r.Z.exists(s.layer)||(s.layer=e.options.layer.circle),l=r.Z.copyAttributes(s,e.options,"incircle"),(h=t.Z.createCircle(e,[a,function(){var t=o.Z.hypot(i[1].X()-i[2].X(),i[1].Y()-i[2].Y()),e=o.Z.hypot(i[0].X()-i[2].X(),i[0].Y()-i[2].Y()),r=o.Z.hypot(i[1].X()-i[0].X(),i[1].Y()-i[0].Y()),s=(t+e+r)/2;return Math.sqrt((s-t)*(s-e)*(s-r)/s)}],l)).elType="incircle",h.setParents(i),n=0;n<3;n++)r.Z.exists(i[n]._is_new)?(h.addChild(i[n]),delete i[n]._is_new):i[n].addChild(h);h.center=a,h.subs={center:h.center},h.inherits.push(a)}catch(t){throw new Error("JSXGraph: Can't create circumcircle with parent types '"+typeof i[0]+"', '"+typeof i[1]+"' and '"+typeof i[2]+"'.\nPossible parent types: [point,point,point]")}return h},t.Z.createReflection=function(e,s,o){var n,a,h,l,c,d,u,p,f="\nPossible parent types: [point|line|curve|polygon|circle|arc|sector, line]";for(d=0;d<s.length;++d)s[d]=e.select(s[d]);if(u=r.Z.copyAttributes(o,e.options,"reflection"),r.Z.isPoint(s[0]))a=r.Z.providePoints(e,[s[0]],p)[0];else{if(s[0].elementClass!==i.Z.OBJECT_CLASS_CURVE&&s[0].elementClass!==i.Z.OBJECT_CLASS_LINE&&s[0].type!==i.Z.OBJECT_TYPE_POLYGON&&s[0].elementClass!==i.Z.OBJECT_CLASS_CIRCLE)throw new Error("JSXGraph: Can't create reflection element with parent types '"+typeof s[0]+"' and '"+typeof s[1]+"'."+f);a=s[0]}if(s[1].elementClass!==i.Z.OBJECT_CLASS_LINE)throw new Error("JSXGraph: Can't create reflected element with parent types '"+typeof s[0]+"' and '"+typeof s[1]+"'."+f);if(n=s[1],c=t.Z.createTransform(e,[n],{type:"reflect"}),r.Z.isPoint(a))h=t.Z.createPoint(e,[a,c],u);else if(a.elementClass===i.Z.OBJECT_CLASS_CURVE)h=t.Z.createCurve(e,[a,c],u);else if(a.elementClass===i.Z.OBJECT_CLASS_LINE)h=t.Z.createLine(e,[a,c],u);else if(a.type===i.Z.OBJECT_TYPE_POLYGON)h=t.Z.createPolygon(e,[a,c],u);else{if(a.elementClass!==i.Z.OBJECT_CLASS_CIRCLE)throw new Error("JSXGraph: Can't create reflected element with parent types '"+typeof s[0]+"' and '"+typeof s[1]+"'."+f);"euclidean"===u.type.toLowerCase()?(p=r.Z.copyAttributes(o,e.options,"reflection","center"),(l=t.Z.createPoint(e,[a.center,c],p)).prepareUpdate().update().updateVisibility(r.Z.evaluate(l.visProp.visible)).updateRenderer(),h=t.Z.createCircle(e,[l,function(){return a.Radius()}],u)):h=t.Z.createCircle(e,[a,c],u)}return r.Z.exists(a._is_new)&&(h.addChild(a),delete a._is_new),n.addChild(h),h.elType="reflection",h.addParents(n),h.prepareUpdate().update(),r.Z.isPoint(h)&&(h.generatePolynomial=function(){var t=n.point1.symbolic.x,e=n.point1.symbolic.y,i=n.point2.symbolic.x,r=n.point2.symbolic.y,s=a.symbolic.x,o=a.symbolic.y,l=h.symbolic.x,c=h.symbolic.y;return[["((",c,")-(",o,"))*((",e,")-(",r,"))+((",t,")-(",i,"))*((",l,")-(",s,"))"].join(""),["((",l,")-(",t,"))^2+((",c,")-(",e,"))^2-((",s,")-(",t,"))^2-((",o,")-(",e,"))^2"].join("")]}),h},t.Z.createMirrorElement=function(e,s,o){var n,a,h,l,c,d,u,p,f="\nPossible parent types: [point|line|curve|polygon|circle|arc|sector, point]";for(a=0;a<s.length;++a)s[a]=e.select(s[a]);if(u=r.Z.copyAttributes(o,e.options,"mirrorelement"),r.Z.isPoint(s[0]))n=r.Z.providePoints(e,[s[0]],u)[0];else{if(s[0].elementClass!==i.Z.OBJECT_CLASS_CURVE&&s[0].elementClass!==i.Z.OBJECT_CLASS_LINE&&s[0].type!==i.Z.OBJECT_TYPE_POLYGON&&s[0].elementClass!==i.Z.OBJECT_CLASS_CIRCLE)throw new Error("JSXGraph: Can't create mirror element with parent types '"+typeof s[0]+"' and '"+typeof s[1]+"'."+f);n=s[0]}if(!r.Z.isPoint(s[1]))throw new Error("JSXGraph: Can't create mirror element with parent types '"+typeof s[0]+"' and '"+typeof s[1]+"'."+f);if(p=r.Z.copyAttributes(o,e.options,"mirrorelement","point"),h=r.Z.providePoints(e,[s[1]],p)[0],d=t.Z.createTransform(e,[Math.PI,h],{type:"rotate"}),r.Z.isPoint(n))l=t.Z.createPoint(e,[n,d],u);else if(n.elementClass===i.Z.OBJECT_CLASS_CURVE)l=t.Z.createCurve(e,[n,d],u);else if(n.elementClass===i.Z.OBJECT_CLASS_LINE)l=t.Z.createLine(e,[n,d],u);else if(n.type===i.Z.OBJECT_TYPE_POLYGON)l=t.Z.createPolygon(e,[n,d],u);else{if(n.elementClass!==i.Z.OBJECT_CLASS_CIRCLE)throw new Error("JSXGraph: Can't create mirror element with parent types '"+typeof s[0]+"' and '"+typeof s[1]+"'."+f);"euclidean"===u.type.toLowerCase()?(p=r.Z.copyAttributes(o,e.options,"mirrorelement","center"),(c=t.Z.createPoint(e,[n.center,d],p)).prepareUpdate().update().updateVisibility(r.Z.evaluate(c.visProp.visible)).updateRenderer(),l=t.Z.createCircle(e,[c,function(){return n.Radius()}],u)):l=t.Z.createCircle(e,[n,d],u)}return r.Z.exists(n._is_new)&&(l.addChild(n),delete n._is_new),h.addChild(l),l.elType="mirrorelement",l.addParents(h),l.prepareUpdate().update(),l},t.Z.createMirrorPoint=function(e,i,r){var s=t.Z.createMirrorElement(e,i,r);return s.elType="mirrorpoint",s},t.Z.createIntegral=function(e,s,o){var n,a,h,l,c,p,f,_,m,g,b,v,Z,C,y,P=null;if(r.Z.isArray(s[0])&&s[1].elementClass===i.Z.OBJECT_CLASS_CURVE)n=s[0],a=s[1];else{if(!r.Z.isArray(s[1])||s[0].elementClass!==i.Z.OBJECT_CLASS_CURVE)throw new Error("JSXGraph: Can't create integral with parent types '"+typeof s[0]+"' and '"+typeof s[1]+"'.\nPossible parent types: [[number|function,number|function],curve]");n=s[1],a=s[0]}return(h=r.Z.copyAttributes(o,e.options,"integral")).withLabel=!1,y=e.create("curve",[[0],[0]],h),l=n[0],c=n[1],r.Z.isFunction(l)?(f=function(){return a.Y(p())},l=(p=l)()):(p=l,f=a.Y(l)),r.Z.isFunction(c)?(m=function(){return a.Y(_())},c=(_=c)()):(_=c,m=a.Y(c)),h=r.Z.copyAttributes(o,e.options,"integral","curveLeft"),g=e.create("glider",[p,f,a],h),r.Z.isFunction(p)&&g.hideElement(),h=r.Z.copyAttributes(o,e.options,"integral","baseLeft"),b=e.create("point",[function(){return"y"===r.Z.evaluate(y.visProp.axis)?0:g.X()},function(){return"y"===r.Z.evaluate(y.visProp.axis)?g.Y():0}],h),h=r.Z.copyAttributes(o,e.options,"integral","curveRight"),v=e.create("glider",[_,m,a],h),r.Z.isFunction(_)&&v.hideElement(),h=r.Z.copyAttributes(o,e.options,"integral","baseRight"),Z=e.create("point",[function(){return"y"===r.Z.evaluate(y.visProp.axis)?0:v.X()},function(){return"y"===r.Z.evaluate(y.visProp.axis)?v.Y():0}],h),!1!==(h=r.Z.copyAttributes(o,e.options,"integral")).withlabel&&"y"!==h.axis&&(h=r.Z.copyAttributes(o,e.options,"integral","label"),h=r.Z.copyAttributes(h,e.options,"label"),C=function(){var t=d.Z.NewtonCotes([b.X(),Z.X()],a.Y),e=r.Z.evaluate(P.visProp.digits);return"∫ = "+(P.useLocale()?P.formatNumberLocale(t,e):r.Z.toFixed(t,e))},(P=e.create("text",[function(){var t=new u.Z(i.Z.COORDS_BY_SCREEN,[r.Z.evaluate(this.visProp.offset[0])+this.board.origin.scrCoords[1],0],this.board,!1),e=this.board.getBoundingBox(),s=.1*(e[2]-e[0]),o=v.X();return o<e[0]?o=e[0]+s:o>e[2]&&(o=e[2]-s),o+t.usrCoords[1]},function(){var t=new u.Z(i.Z.COORDS_BY_SCREEN,[0,r.Z.evaluate(this.visProp.offset[1])+this.board.origin.scrCoords[2]],this.board,!1),e=this.board.getBoundingBox(),s=.1*(e[1]-e[3]),o=v.Y();return o>e[1]?o=e[1]-s:o<e[3]&&(o=e[3]+s),o+t.usrCoords[2]},""],h)).setText(C),P.dump=!1,g.addChild(P),v.addChild(P)),g.dump=!1,b.dump=!1,v.dump=!1,Z.dump=!1,y.elType="integral",y.setParents([a.id,n]),y.subs={curveLeft:g,baseLeft:b,curveRight:v,baseRight:Z},y.inherits.push(g,b,v,Z),h.withLabel&&(y.subs.label=P,y.inherits.push(P)),y.Value=function(){return d.Z.I([b.X(),Z.X()],a.Y)},y.updateDataArray=function(){var t,e,i,s,o,n,h,l,c;if("y"===r.Z.evaluate(this.visProp.axis)){for(g.Y()<v.Y()?(n=g.X(),l=g.Y(),h=v.X(),c=v.Y()):(n=v.X(),l=v.Y(),h=g.X(),c=g.Y()),s=Math.min(n,h),o=Math.max(n,h),t=[0,n],e=[l,l],i=0;i<a.numberPoints;i++)l<=a.points[i].usrCoords[2]&&s<=a.points[i].usrCoords[1]&&a.points[i].usrCoords[2]<=c&&a.points[i].usrCoords[1]<=o&&(t.push(a.points[i].usrCoords[1]),e.push(a.points[i].usrCoords[2]));t.push(h),e.push(c),t.push(0),e.push(c),t.push(0),e.push(l)}else{for(b.X()<Z.X()?(s=b.X(),o=Z.X()):(s=Z.X(),o=b.X()),t=[s,s],e=[0,a.Y(s)],i=0;i<a.numberPoints;i++)s<=a.points[i].usrCoords[1]&&a.points[i].usrCoords[1]<=o&&(t.push(a.points[i].usrCoords[1]),e.push(a.points[i].usrCoords[2]));t.push(o),e.push(a.Y(o)),t.push(o),e.push(0),t.push(s),e.push(0)}this.dataX=t,this.dataY=e},g.addChild(y),v.addChild(y),b.addChild(y),Z.addChild(y),y.baseLeft=b,y.baseRight=Z,y.curveLeft=g,y.curveRight=v,y.methodMap=t.Z.deepCopy(y.methodMap,{curveLeft:"curveLeft",baseLeft:"baseLeft",curveRight:"curveRight",baseRight:"baseRight",Value:"Value"}),y.label=P,y},t.Z.createInequality=function(t,e,s){var n,a,l;if(l=r.Z.copyAttributes(s,t.options,"inequality"),e[0].elementClass===i.Z.OBJECT_CLASS_LINE)(a=t.create("curve",[[],[]],l)).hasPoint=function(){return!1},a.updateDataArray=function(){var s,n,a,l=t.getBoundingBox(),c=r.Z.evaluate(this.visProp.inverse),d=c?-1:1,u=1.5*Math.max(l[2]-l[0],l[1]-l[3]),p={coords:{usrCoords:[1,.5*(l[0]+l[2]),c?l[1]:l[3]]}},f=e[0].stdform.slice(1),_=f;a=1.5*Math.max(h.Z.perpendicular(e[0],p,t)[0].distance(i.Z.COORDS_BY_USER,p.coords),u),a*=d,p={coords:{usrCoords:[1,.5*(l[0]+l[2]),.5*(l[1]+l[3])]}},s=[1,(p=Math.abs(o.Z.innerProduct(p.coords.usrCoords,e[0].stdform,3))>=o.Z.eps?h.Z.perpendicular(e[0],p,t)[0].usrCoords:p.coords.usrCoords)[1]+f[1]*u,p[2]-f[0]*u],n=[1,p[1]-_[1]*u,p[2]+_[0]*u],this.dataX=[s[1],s[1]+f[0]*a,n[1]+_[0]*a,n[1],s[1]],this.dataY=[s[2],s[2]+f[1]*a,n[2]+_[1]*a,n[2],s[2]]};else if(e[0].elementClass===i.Z.OBJECT_CLASS_CURVE&&"functiongraph"===e[0].visProp.curvetype)(a=t.create("curve",[[],[]],l)).updateDataArray=function(){var t,i,s,o,n,a,h,l,c,d=this.board.getBoundingBox(),u=[],p=e[0].minX(),f=e[0].maxX(),_=.3*(d[1]-d[3]);if(t=r.Z.evaluate(this.visProp.inverse)?1:3,this.dataX=[],this.dataY=[],0!==(o=e[0].points.length))for(d[1]+=_,d[3]-=_,s=-1;s<o-1;){for(n=s+1,i=o;n<o;n++)if(e[0].points[n].isReal()){i=n;break}if(i>=o)break;for(n=i,s=o-1;n<o-1;n++)if(!e[0].points[n+1].isReal()){s=n;break}for(l=e[0].points[i].usrCoords[1],c=e[0].points[s].usrCoords[1],a=d[0]<p?p:d[0],h=d[2]>f?f:d[2],a=0===i?a:Math.max(a,l),h=s===o-1?h:Math.min(h,c),h=s===o-1?f:c,(u=[]).push([1,a=0===i?p:l,d[t]]),u.push([1,a,e[0].points[i].usrCoords[2]]),n=i;n<=s;n++)u.push(e[0].points[n].usrCoords);for(u.push([1,h,e[0].points[s].usrCoords[2]]),u.push([1,h,d[t]]),u.push(u[0]),n=0;n<u.length;n++)this.dataX.push(u[n][1]),this.dataY.push(u[n][2]);s<o-1&&(this.dataX.push(NaN),this.dataY.push(NaN))}},a.hasPoint=function(){return!1};else if(n=r.Z.createFunction(e[0]),a.addParentsFromJCFunctions([n]),!r.Z.exists(n))throw new Error("JSXGraph: Can't create area with the given parents.\nPossible parent types: [line], [function]");return a.addParents(e[0]),a},t.Z.registerElement("arrowparallel",t.Z.createArrowParallel),t.Z.registerElement("bisector",t.Z.createBisector),t.Z.registerElement("bisectorlines",t.Z.createAngularBisectorsOfTwoLines),t.Z.registerElement("msector",t.Z.createMsector),t.Z.registerElement("circumcircle",t.Z.createCircumcircle),t.Z.registerElement("circumcirclemidpoint",t.Z.createCircumcenter),t.Z.registerElement("circumcenter",t.Z.createCircumcenter),t.Z.registerElement("incenter",t.Z.createIncenter),t.Z.registerElement("incircle",t.Z.createIncircle),t.Z.registerElement("integral",t.Z.createIntegral),t.Z.registerElement("midpoint",t.Z.createMidpoint),t.Z.registerElement("mirrorelement",t.Z.createMirrorElement),t.Z.registerElement("mirrorpoint",t.Z.createMirrorPoint),t.Z.registerElement("normal",t.Z.createNormal),t.Z.registerElement("orthogonalprojection",t.Z.createOrthogonalProjection),t.Z.registerElement("parallel",t.Z.createParallel),t.Z.registerElement("parallelpoint",t.Z.createParallelPoint),t.Z.registerElement("perpendicular",t.Z.createPerpendicular),t.Z.registerElement("perpendicularpoint",t.Z.createPerpendicularPoint),t.Z.registerElement("perpendicularsegment",t.Z.createPerpendicularSegment),t.Z.registerElement("reflection",t.Z.createReflection),t.Z.registerElement("inequality",t.Z.createInequality),t.Z.createGrid=function(e,s,n){const a=o.Z.eps,h=5e3;var l,c,d,u,p,f,_,m,g=[],b=[];if((d=s).length>2||d.length>=1&&"axis"!==d[0].elType||d.length>=2&&"axis"!==d[1].elType)throw new Error("JSXGraph: Can't create 'grid' with parent type '"+s[0].elType+"'. Possible parent types: [axis,axis]");return!r.Z.exists(d[0])&&r.Z.exists(e.defaultAxes)&&(d[0]=e.defaultAxes.x),!r.Z.exists(d[1])&&r.Z.exists(e.defaultAxes)&&(d[1]=e.defaultAxes.y),m=function(t,e,i,s,o,n,a){var h,l,c,d,u,p,f;switch(t.toLowerCase()){case".":case"point":return e.visProp.linecap="round",e.visProp.strokewidth=o*e.board.unitX+n*e.board.unitY,[[i,i,NaN],[s,s,NaN]];case"o":case"circle":return e.visProp.linecap="square",e.bezierDegree=3,[[i+o,i+o,i+(l=4*Math.tan(Math.PI/8)/3)*o,i,i-l*o,i-o,i-o,i-o,i-l*o,i,i+l*o,i+o,i+o,NaN],[s,s+l*n,s+n,s+n,s+n,s+l*n,s,s-l*n,s-n,s-n,s-n,s-l*n,s,NaN]];case"regpol":case"regularpolygon":for(e.visProp.linecap="round",d=r.Z.evaluate(e.visProp.polygonvertices),u=[[],[]],h=0;h<=2*Math.PI;h+=2*Math.PI/d)u[0].push(i-o*Math.sin(h)),u[1].push(s-n*Math.cos(h));return u[0].push(NaN),u[1].push(NaN),u;case"[]":case"square":return e.visProp.linecap="square",[[i-o,i+o,i+o,i-o,i-o,NaN],[s+n,s+n,s-n,s-n,s+n,NaN]];case"<>":case"diamond":return e.visProp.linecap="square",[[i,i+o,i,i-o,i,NaN],[s+n,s,s-n,s,s+n,NaN]];case"<<>>":case"diamond2":return e.visProp.linecap="square",[[i,i+(p=o*Math.sqrt(2)),i,i-p,i,NaN],[s+(f=n*Math.sqrt(2)),s,s-f,s,s+f,NaN]];case"x":case"cross":return[[i-o,i+o,NaN,i-o,i+o,NaN],[s+n,s-n,NaN,s-n,s+n,NaN]];case"+":case"plus":return[[i-o,i+o,NaN,i,i,NaN],[s,s,NaN,s-n,s+n,NaN]];case"-":case"minus":return[[i-o,i+o,NaN],[s,s,NaN]];case"|":case"divide":return[[i,i,NaN],[s-n,s+n,NaN]];case"^":case"a":case"A":case"triangleup":return[[i-o,i,i+o,NaN],[s-n,s,s-n,NaN]];case"v":case"triangledown":return[[i-o,i,i+o,NaN],[s+n,s,s+n,NaN]];case"<":case"triangleleft":return[[i+o,i,i+o,NaN],[s+n,s,s-n,NaN]];case">":case"triangleright":return[[i-o,i,i-o,NaN],[s+n,s,s-n,NaN]];case"line":return c=r.Z.evaluate(e.visProp.margin),[[i,i,NaN,a[0]-c/e.board.unitX,a[2]+c/e.board.unitX,NaN],[a[1]+c/e.board.unitY,a[3]-c/e.board.unitY,NaN,s,s,NaN]];default:return[[],[]]}},u=r.Z.copyAttributes(n,e.options,"grid"),r.Z.mergeAttr(u,u.themes[u.theme],!1),p={},r.Z.mergeAttr(p,u,!0,!0),r.Z.mergeAttr(p,u.major,!0,!0),(l=e.create("curve",[[null],[null]],p)).elType="grid",l.type=i.Z.OBJECT_TYPE_GRID,f={},r.Z.mergeAttr(f,u,!0,!0),r.Z.mergeAttr(f,u.minor,!0,!0),f.id===p.id&&(f.id=l.id+"_minor"),f.name===p.name&&(f.name=l.name+"_minor"),(c=e.create("curve",[[null],[null]],f)).elType="grid",c.type=i.Z.OBJECT_TYPE_GRID,l.minorGrid=c,c.majorGrid=l,l.hasPoint=function(){return!1},c.hasPoint=function(){return!1},l.inherits.push(c),l.updateDataArray=function(){var e,i,s,n,c,u,p,f,v=this.board.getBoundingBox(),Z=r.Z.evaluate(this.visProp.gridx),C=r.Z.evaluate(this.visProp.gridy),y=r.Z.evaluate(this.visProp.face),P=r.Z.evaluate(this.visProp.drawzero),E=!0===P||r.Z.isObject(P)&&!0===r.Z.evaluate(P.origin),O=!0===P||r.Z.isObject(P)&&!0===r.Z.evaluate(P.x),x=!0===P||r.Z.isObject(P)&&!0===r.Z.evaluate(P.y),S=r.Z.evaluate(this.visProp.includeboundaries),M=r.Z.evaluate(this.visProp.forcesquare);if(this.dataX=[],this.dataY=[],_=r.Z.evaluate(this.visProp.majorstep),r.Z.isArray(_)||(_=[_,_]),_.length<2&&(_=[_[0],_[0]]),r.Z.exists(Z)&&(t.Z.deprecated("gridX","majorStep"),_[0]=Z),r.Z.exists(C)&&(t.Z.deprecated("gridY","majorStep"),_[1]=C),"auto"===_[0]?(f=Math.pow(10,Math.floor(Math.log(50/this.board.unitX)/Math.LN10)),_[0]=f,r.Z.exists(d[0])&&(_[0]=d[0].ticks[0].getDistanceMajorTicks())):_[0]=r.Z.parseNumber(_[0],Math.abs(v[1]-v[3]),1/this.board.unitX),"auto"===_[1]?(f=Math.pow(10,Math.floor(Math.log(50/this.board.unitY)/Math.LN10)),_[1]=f,r.Z.exists(d[1])&&(_[1]=d[1].ticks[0].getDistanceMajorTicks())):_[1]=r.Z.parseNumber(_[1],Math.abs(v[0]-v[2]),1/this.board.unitY),"min"===M||!0===M?_[0]*this.board.unitX<=_[1]*this.board.unitY?_[1]=_[0]/this.board.unitY*this.board.unitX:_[0]=_[1]/this.board.unitX*this.board.unitY:"max"===M&&(_[0]*this.board.unitX<=_[1]*this.board.unitY?_[0]=_[1]/this.board.unitX*this.board.unitY:_[1]=_[0]/this.board.unitY*this.board.unitX),g=r.Z.evaluate(this.visProp.size),r.Z.isArray(g)||(g=[g,g]),g.length<2&&(g=[g[0],g[0]]),r.Z.isNumber(g[0],!0)&&(g[0]=g[0]+"px"),r.Z.isNumber(g[1],!0)&&(g[1]=g[1]+"px"),g[0]=r.Z.parseNumber(g[0],_[0],1/this.board.unitX),g[1]=r.Z.parseNumber(g[1],_[1],1/this.board.unitY),b[0]=g[0]/2,b[1]=g[1]/2,e=o.Z.roundToStep(v[0],_[0]),i=o.Z.roundToStep(v[1],_[1]),p=isFinite(e)&&isFinite(i)&&isFinite(v[2])&&isFinite(v[3])&&Math.abs(v[2])<Math.abs(_[0]*h)&&Math.abs(v[3])<Math.abs(_[1]*h),"line"===y.toLowerCase()){for(c=r.Z.evaluate(l.visProp.margin),n=i;p&&n>=v[3];n-=_[1])!E&&Math.abs(n)<a||!x&&Math.abs(n)<a||!S&&(n<=v[3]+b[1]||n>=v[1]-b[1])||(u=[[v[0]-c/l.board.unitX,v[2]+c/l.board.unitX,NaN],[n,n,NaN]],r.Z.concat(this.dataX,u[0]),r.Z.concat(this.dataY,u[1]));for(s=e;p&&s<=v[2];s+=_[0])!E&&Math.abs(s)<a||!O&&Math.abs(s)<a||!S&&(s<=v[0]+b[0]||s>=v[2]-b[0])||(u=[[s,s,NaN],[v[1]+c/l.board.unitY,v[3]-c/l.board.unitY,NaN]],r.Z.concat(this.dataX,u[0]),r.Z.concat(this.dataY,u[1]))}else for(n=i;p&&n>=v[3];n-=_[1])for(s=e;p&&s<=v[2];s+=_[0])!E&&Math.abs(n)<a&&Math.abs(s)<a||!O&&Math.abs(n)<a&&Math.abs(s)>=a||!x&&Math.abs(s)<a&&Math.abs(n)>=a||!S&&(s<=v[0]+b[0]||s>=v[2]-b[0]||n<=v[3]+b[1]||n>=v[1]-b[1])||(u=m(y,l,s,n,b[0],b[1],v),r.Z.concat(this.dataX,u[0]),r.Z.concat(this.dataY,u[1]))},c.updateDataArray=function(){var t,e,i,s,n,l,u,p,f,g,v,Z,C,y,P,E,O,x,S,M=this.board.getBoundingBox(),w=[],T=[],N=r.Z.evaluate(this.visProp.minorelements),A=r.Z.evaluate(this.visProp.size),D=r.Z.evaluate(this.visProp.face),k=r.Z.evaluate(this.visProp.drawzero),R=!0===k||r.Z.isObject(k)&&!0===r.Z.evaluate(k.x),L=!0===k||r.Z.isObject(k)&&!0===r.Z.evaluate(k.y),B=r.Z.evaluate(this.majorGrid.visProp.face),I=r.Z.evaluate(this.majorGrid.visProp.drawzero),Y=!0===I||r.Z.isObject(I)&&!0===r.Z.evaluate(I.origin),j=!0===I||r.Z.isObject(I)&&!0===r.Z.evaluate(I.x),X=!0===I||r.Z.isObject(I)&&!0===r.Z.evaluate(I.y),U=r.Z.evaluate(this.visProp.includeboundaries);if(this.dataX=[],this.dataY=[],r.Z.isArray(N)||(N=[N,N]),N.length<2&&(N=[N[0],N[0]]),r.Z.isNumber(N[0],!0)?N[0]=parseFloat(N[0]):(N[0]=3,r.Z.exists(d[0])&&(N[0]=r.Z.evaluate(d[0].getAttribute("ticks").minorticks))),w[0]=_[0]/(N[0]+1),r.Z.isNumber(N[1],!0)?N[1]=parseFloat(N[1]):(N[1]=3,r.Z.exists(d[1])&&(N[1]=r.Z.evaluate(d[1].getAttribute("ticks").minorticks))),w[1]=_[1]/(N[1]+1),r.Z.isArray(A)||(A=[A,A]),A.length<2&&(A=[A[0],A[0]]),r.Z.isNumber(A[0],!0)&&(A[0]=A[0]+"px"),r.Z.isNumber(A[1],!0)&&(A[1]=A[1]+"px"),A[0]=r.Z.parseNumber(A[0],w[0],1/this.board.unitX),A[1]=r.Z.parseNumber(A[1],w[1],1/this.board.unitY),T[0]=.5*A[0],T[1]=.5*A[1],t=o.Z.roundToStep(M[0],w[0]),e=o.Z.roundToStep(M[1],w[1]),u=isFinite(t)&&isFinite(e)&&isFinite(M[2])&&isFinite(M[3])&&Math.abs(M[2])<=Math.abs(w[0]*h)&&Math.abs(M[3])<Math.abs(w[1]*h),"line"!==D.toLowerCase())for(s=e;u&&s>=M[3];s-=w[1])for(i=t;u&&i<=M[2];i+=w[0]){if(p=o.Z.roundToStep(Math.abs(i),_[0]),p=Math.abs(p-Math.abs(i)),f=_[0]-p,g=o.Z.roundToStep(Math.abs(s),_[1]),g=Math.abs(g-Math.abs(s)),v=_[1]-g,"line"===B){if(p-T[0]-b[0]<a||f-T[0]-b[0]<a||g-T[1]-b[1]<a||v-T[1]-b[1]<a)continue}else if((p-T[0]-b[0]<a||f-T[0]-b[0]<a)&&(g-T[1]-b[1]<a||v-T[1]-b[1]<a)&&(Y||b[1]-Math.abs(s)+T[1]<a||b[0]-Math.abs(i)+T[0]<a)&&(j||b[1]-Math.abs(s)+T[1]<a||b[0]+Math.abs(i)-T[0]<a)&&(X||b[0]-Math.abs(i)+T[0]<a||b[1]+Math.abs(s)-T[1]<a))continue;!L&&Math.abs(i)<a||!R&&Math.abs(s)<a||(Z=Math.abs(M[0]%_[0]),C=Math.abs(M[1]%_[1]),y=Math.abs(M[2]%_[0]),P=Math.abs(M[3]%_[1]),E=_[0]-Z,O=_[1]-C,x=_[0]-y,S=_[1]-P,!U&&(i-T[0]-M[0]-b[0]+E<a&&E-b[0]<a||i-T[0]-M[0]-b[0]-Z<a&&Z-b[0]<a||-i-T[0]+M[2]-b[0]+x<a&&x-b[0]<a||-i-T[0]+M[2]-b[0]-y<a&&y-b[0]<a||-s-T[1]+M[1]-b[1]+O<a&&O-b[1]<a||-s-T[1]+M[1]-b[1]-C<a&&C-b[1]<a||s-T[1]-M[3]-b[1]+S<a&&S-b[1]<a||s-T[1]-M[3]-b[1]-P<a&&P-b[1]<a||-s-T[1]+M[1]<a||i-T[0]-M[0]<a||s-T[1]-M[3]<a||-i-T[0]+M[2]<a)||(l=m(D,c,i,s,T[0],T[1],M),r.Z.concat(this.dataX,l[0]),r.Z.concat(this.dataY,l[1])))}else{for(n=r.Z.evaluate(c.visProp.margin),s=e;u&&s>=M[3];s-=w[1]){if(g=o.Z.roundToStep(Math.abs(s),_[1]),g=Math.abs(g-Math.abs(s)),v=_[1]-g,"line"===B){if(g-T[1]-b[1]<a||v-T[1]-b[1]<a)continue}else if((g-T[1]-b[1]<a||v-T[1]-b[1]<a)&&(Y||b[1]-Math.abs(s)+T[1]<a)&&(j||b[1]-Math.abs(s)+T[1]<a)&&(X||b[1]+Math.abs(s)-T[1]<a))continue;!R&&Math.abs(s)<a||(Z=Math.abs(M[0]%_[0]),C=Math.abs(M[1]%_[1]),y=Math.abs(M[2]%_[0]),P=Math.abs(M[3]%_[1]),E=_[0]-Z,O=_[1]-C,x=_[0]-y,S=_[1]-P,!U&&(-s-T[1]+M[1]-b[1]+O<a&&O-b[1]<a||-s-T[1]+M[1]-b[1]-C<a&&C-b[1]<a||s-T[1]-M[3]-b[1]+S<a&&S-b[1]<a||s-T[1]-M[3]-b[1]-P<a&&P-b[1]<a||-s-T[1]+M[1]<a||s-T[1]-M[3]<a)||(l=[[M[0]-n/c.board.unitX,M[2]+n/c.board.unitX,NaN],[s,s,NaN]],r.Z.concat(this.dataX,l[0]),r.Z.concat(this.dataY,l[1])))}for(i=t;u&&i<=M[2];i+=w[0]){if(p=o.Z.roundToStep(Math.abs(i),_[0]),p=Math.abs(p-Math.abs(i)),f=_[0]-p,"line"===B){if(p-T[0]-b[0]<a||f-T[0]-b[0]<a)continue}else if((p-T[0]-b[0]<a||f-T[0]-b[0]<a)&&(Y||b[0]-Math.abs(i)+T[0]<a)&&(j||b[0]+Math.abs(i)-T[0]<a)&&(X||b[0]-Math.abs(i)+T[0]<a))continue;!L&&Math.abs(i)<a||(Z=Math.abs(M[0]%_[0]),C=Math.abs(M[1]%_[1]),y=Math.abs(M[2]%_[0]),P=Math.abs(M[3]%_[1]),E=_[0]-Z,O=_[1]-C,x=_[0]-y,S=_[1]-P,!U&&(i-T[0]-M[0]-b[0]+E<a&&E-b[0]<a||i-T[0]-M[0]-b[0]-Z<a&&Z-b[0]<a||-i-T[0]+M[2]-b[0]+x<a&&x-b[0]<a||-i-T[0]+M[2]-b[0]-y<a&&y-b[0]<a||i-T[0]-M[0]<a||-i-T[0]+M[2]<a)||(l=[[i,i,NaN],[M[1]+n/c.board.unitY,M[3]-n/c.board.unitY,NaN]],r.Z.concat(this.dataX,l[0]),r.Z.concat(this.dataY,l[1])))}}},e.grids.push(l),e.grids.push(c),l},t.Z.registerElement("grid",t.Z.createGrid),t.Z.createLocus=function(t,e,i){var s,o;if(!r.Z.isArray(e)||1!==e.length||!r.Z.isPoint(e[0]))throw new Error("JSXGraph: Can't create locus with parent of type other than point.\nPossible parent types: [point]");return o=e[0],(s=t.create("curve",[[null],[null]],i)).dontCallServer=!1,s.elType="locus",s.setParents([o.id]),s.updateDataArray=function(){var e,i,r;s.board.mode>0||(e=N.generatePolynomials(t,o,!0).join("|"))!==s.spe&&(s.spe=e,i=function(t,e,i,r){var o;s.dataX=t,s.dataY=e,s.eq=i,s.ctime=r,s.generatePolynomial=(o=i,function(t){var e,i="("+t.symbolic.x+")",r="("+t.symbolic.y+")",s=[];for(e=0;e<o.length;e++)s[e]=o[e].replace(/\*\*/g,"^").replace(/x/g,i).replace(/y/g,r);return s})},i((r=N.geometricLocusByGroebnerBase(t,o,i)).datax,r.datay,r.polynomial,r.exectime))},s},t.Z.registerElement("locus",t.Z.createLocus);__webpack_require__(573);t.Z.Image=function(e,s,o,n,a){this.constructor(e,o,i.Z.OBJECT_TYPE_IMAGE,i.Z.OBJECT_CLASS_OTHER),this.element=this.board.select(o.anchor),this.coordsConstructor(s),this.W=r.Z.createFunction(a[0],this.board,""),this.H=r.Z.createFunction(a[1],this.board,""),this.addParentsFromJCFunctions([this.W,this.H]),this.usrSize=[this.W(),this.H()],this.size=[Math.abs(this.usrSize[0]*e.unitX),Math.abs(this.usrSize[1]*e.unitY)],this.url=n,this.elType="image",this.span=[this.coords.usrCoords.slice(0),[this.coords.usrCoords[0],this.W(),0],[this.coords.usrCoords[0],0,this.H()]],this.id=this.board.setId(this,"Im"),this.board.renderer.drawImage(this),this.board.finalizeAdding(this),this.methodMap=t.Z.deepCopy(this.methodMap,{addTransformation:"addTransform",trans:"addTransform",W:"W",Width:"W",H:"H",Height:"H",setSize:"setSize"})},t.Z.Image.prototype=new H.Z,r.Z.copyPrototypeMethods(t.Z.Image,V.Z,"coordsConstructor"),t.Z.extend(t.Z.Image.prototype,{hasPoint:function(t,e){var s,n,a,h,l,c,d,p,f,_=this.transformations.length;return r.Z.isObject(r.Z.evaluate(this.visProp.precision))?(h=this.board._inputDevice,l=r.Z.evaluate(this.visProp.precision[h])):l=this.board.options.precision.hasPoint,0===_?(s=t-this.coords.scrCoords[1],n=this.coords.scrCoords[2]-e,s>=-(a=l)&&s-this.size[0]<=a&&n>=-a&&n-this.size[1]<=a):(d=[(c=(c=new u.Z(i.Z.COORDS_BY_SCREEN,[t,e],this.board)).usrCoords)[0]-this.span[0][0],c[1]-this.span[0][1],c[2]-this.span[0][2]],0<=(p=(f=o.Z.innerProduct)(d,this.span[1]))&&p<=f(this.span[1],this.span[1])&&0<=(p=f(d,this.span[2]))&&p<=f(this.span[2],this.span[2]))},update:function(t){return this.needsUpdate?(this.updateCoords(t),this.updateSize(),this.updateSpan(),this):this},updateRenderer:function(){return this.updateRendererGeneric("updateImage")},updateSize:function(){return this.usrSize=[this.W(),this.H()],this.size=[Math.abs(this.usrSize[0]*this.board.unitX),Math.abs(this.usrSize[1]*this.board.unitY)],this},updateSpan:function(){var t,e,i=this.transformations.length,r=[];if(0===i)this.span=[[this.Z(),this.X(),this.Y()],[this.Z(),this.W(),0],[this.Z(),0,this.H()]];else{for(r[0]=[this.Z(),this.X(),this.Y()],r[1]=[this.Z(),this.X()+this.W(),this.Y()],r[2]=[this.Z(),this.X(),this.Y()+this.H()],t=0;t<i;t++)for(e=0;e<3;e++)r[e]=o.Z.matVecMult(this.transformations[t].matrix,r[e]);for(e=0;e<3;e++)r[e][1]/=r[e][0],r[e][2]/=r[e][0],r[e][0]/=r[e][0];for(e=1;e<3;e++)r[e][0]-=r[0][0],r[e][1]-=r[0][1],r[e][2]-=r[0][2];this.span=r}return this},addTransform:function(t){var e;if(r.Z.isArray(t))for(e=0;e<t.length;e++)this.transformations.push(t[e]);else this.transformations.push(t);return this},getParents:function(){var t=[this.url,[this.Z(),this.X(),this.Y()],this.usrSize];return 0!==this.parents.length&&(t=this.parents),t},setSize:function(t,e){return this.W=r.Z.createFunction(t,this.board,""),this.H=r.Z.createFunction(e,this.board,""),this.addParentsFromJCFunctions([this.W,this.H]),this},W:function(){},H:function(){}}),t.Z.createImage=function(e,i,s){var o,n,a=i[0],h=i[1],l=i[2];if(o=r.Z.copyAttributes(s,e.options,"image"),!(n=V.Z.create(t.Z.Image,e,h,o,a,l)))throw new Error("JSXGraph: Can't create image with parent types '"+typeof i[0]+"' and '"+typeof i[1]+"'.\nPossible parent types: [x,y], [z,x,y], [element,transformation]");return 0!==o.rotate&&n.addRotation(o.rotate),n},t.Z.registerElement("image",t.Z.createImage);t.Z.Image;t.Z.createSlider=function(t,e,s){var n,a,h,l,c,d,p,f,_,m,g,b,v,Z,C,y,P,E,O,x,S,M,w;return P=(w=r.Z.copyAttributes(s,t.options,"slider")).withticks,y=w.withlabel,x=w.snapwidth,E=w.snapvalues,O=w.snapvaluedistance,p=t.create("point",e[0],w.point1),f=t.create("point",e[1],w.point2),(m=t.create("segment",[p,f],w.baseline)).updateStdform(),n=p.coords.usrCoords.slice(1),a=f.coords.usrCoords.slice(1),h=e[2][0],l=e[2][1],c=e[2][2],d=c-h,M=-1===(S=r.Z.evaluate(x))?l:Math.round(l/S)*S,Z=n[0]+(a[0]-n[0])*(M-h)/(c-h),C=n[1]+(a[1]-n[1])*(M-h)/(c-h),w.withlabel=!1,(_=t.create("glider",[Z,C,m],w)).setAttribute({snapwidth:x,snapvalues:E,snapvaluedistance:O}),g=t.create("segment",[p,_],w.highline),_.Value=function(){var t=this._smax-this._smin,e=r.Z.evaluate(this.visProp.snapwidth);return-1===e?this.position*t+this._smin:Math.round((this.position*t+this._smin)/e)*e},_.methodMap=r.Z.deepCopy(_.methodMap,{Value:"Value",setValue:"setValue",smax:"_smax",smin:"_smin",setMax:"setMax",setMin:"setMin",point1:"point1",point2:"point2",baseline:"baseline",highline:"highline",ticks:"ticks",label:"label"}),_._smax=c,_._smin=h,_.setMax=function(t){return this._smax=t,this},_.setValue=function(t){var e=this._smax-this._smin;return Math.abs(e)>o.Z.eps?this.position=(t-this._smin)/e:this.position=0,this.position=Math.max(0,Math.min(1,this.position)),this},_.setMin=function(t){return this._smin=t,this},y&&(v=t.create("text",[function(){return.05*(f.X()-p.X())+f.X()},function(){return.05*(f.Y()-p.Y())+f.Y()},function(){var t,e=r.Z.evaluate(_.visProp.digits),i=r.Z.evaluate(_.visProp.suffixlabel),s=r.Z.evaluate(_.visProp.unitlabel),o=r.Z.evaluate(_.visProp.postlabel);return 2===e&&2!==r.Z.evaluate(_.visProp.precision)&&(e=r.Z.evaluate(_.visProp.precision)),t=null!==i?i:_.name&&""!==_.name?_.name+" = ":"",_.useLocale()?t+=_.formatNumberLocale(_.Value(),e):t+=r.Z.toFixed(_.Value(),e),null!==s&&(t+=s),null!==o&&(t+=o),t}],w.label),_.label=v,_.visProp.withlabel=!0,_.hasLabel=!0),_.point1=p,_.point2=f,_.baseline=m,_.highline=g,P&&(r.Z.exists(w.generatelabeltext)||(w.ticks.generateLabelText=function(t,e,i){var r=_.point1.Dist(_.point2),s=_._smin,n=_._smax,a=this.getDistanceFromZero(e,t)*(n-s)/r+s;return r<o.Z.eps||Math.abs(a)<o.Z.eps?"0":this.formatLabelText(a)}),2,b=t.create("ticks",[_.baseline,_.point1.Dist(p)/2,function(t){var e=_.point1.Dist(_.point2),r=_.point1.coords.distance(i.Z.COORDS_BY_USER,t);return e<o.Z.eps?0:r/e*d+h}],w.ticks),_.ticks=b),_.remove=function(){y&&t.removeObject(v),t.removeObject(g),t.removeObject(m),t.removeObject(f),t.removeObject(p),$.prototype.remove.call(_)},p.dump=!1,f.dump=!1,m.dump=!1,g.dump=!1,y&&(v.dump=!1),_.elType="slider",_.parents=e,_.subs={point1:p,point2:f,baseLine:m,highLine:g},_.inherits.push(p,f,m,g),P&&(b.dump=!1,_.subs.ticks=b,_.inherits.push(b)),_.getParents=function(){return[this.point1.coords.usrCoords.slice(1),this.point2.coords.usrCoords.slice(1),[this._smin,this.position*(this._smax-this._smin)+this._smin,this._smax]]},_.baseline.on("up",(function(t){var e,s;r.Z.evaluate(_.visProp.moveonup)&&!r.Z.evaluate(_.visProp.fixed)&&(e=m.board.getMousePosition(t,0),s=new u.Z(i.Z.COORDS_BY_SCREEN,e,this.board),_.moveTo([s.usrCoords[1],s.usrCoords[2]]),_.triggerEventHandlers(["drag"],[t]))})),_.prepareUpdate().update(),t.isSuspendedUpdate||(_.updateVisibility().updateRenderer(),_.baseline.updateVisibility().updateRenderer(),_.highline.updateVisibility().updateRenderer(),P&&_.ticks.updateVisibility().updateRenderer()),_},t.Z.registerElement("slider",t.Z.createSlider),t.Z.PrefixParser={parse:function(t,e){var i,s,n,a,h,l;if(r.Z.isNumber(t)||r.Z.isString(t))return t;if(!r.Z.isArray(t)||t.length<2)throw new Error("prefixParser.parse: term is not an array, number or string");if(i=t[0],n=t.length,"execute"===e)if(r.Z.isInArray(["+","-","*","/"],i))for(a=this.parse(t[1],e),s=2;s<n;s++)switch(l=this.parse(t[s],e),i){case"+":a+=l;break;case"-":a-=l;break;case"*":a*=l;break;case"/":a/=l}else if("exec"===i){for(h=t[1],l=[],s=2;s<n;s++)l.push(this.parse(t[s],e));if(r.Z.exists(Math[h]))a=Math[h].apply(this,l);else{if(!r.Z.exists(o.Z[h]))throw new Error("PrefixParser.parse: "+h+" is not allowed");a=o.Z[h].apply(this,l)}}else{if("V"===(h=t[0])&&(h="Value"),!r.Z.exists(t[1][h]))throw new Error("PrefixParser.parse: "+h+" is not a method of "+t[1]);for(l=[],s=2;s<n;s++)l.push(this.parse(t[s],e));a=t[1][h].apply(t[1],l)}return a},dimension:function(t){var e,s,o,n,a,h,l,c;if(r.Z.isNumber(t))return 0;if(!r.Z.isArray(t)||t.length<2)throw new Error("PrefixParser.dimension: term is not an array");if(e=t[0],o=t.length,r.Z.isInArray(["+","-","*","/"],e))for(n=this.dimension(t[1]),s=2;s<o;s++)switch(l=this.dimension(t[s]),e){case"+":case"-":l!==n&&(n=NaN);break;case"*":n+=l;break;case"/":n-=l}else if("exec"===e)t[2].type===r.Z.OBJECT_TYPE_MEASUREMENT?(n=t[2].Dimension(),r.Z.exists(t[2].visProp.dim)&&null!==(h=r.Z.evaluate(t[2].visProp.dim))&&(n=h)):n=0;else switch(a=t[0]){case"L":case"Length":case"Perimeter":case"Radius":case"R":n=1;break;case"Area":case"A":n=2;break;default:t[1].type===r.Z.OBJECT_TYPE_MEASUREMENT?(n=t[1].Dimension(),r.Z.exists(t[1].visProp.dim)&&null!==(h=r.Z.evaluate(t[1].visProp.dim))&&(n=h)):(n=0,"Value"!==a&&"V"!==a||[i.Z.OBJECT_TYPE_ARC,i.Z.OBJECT_TYPE_SECTOR,i.Z.OBJECT_TYPE_ANGLE].indexOf(t[1].type)>=0&&(c="",3===t.length&&r.Z.isString(t[2])&&(c=t[2].toLowerCase()),n=""===c?t[1].type===i.Z.OBJECT_TYPE_ANGLE?0:1:0===c.indexOf("len")?1:0))}return n},toPrefix:function(t){var e,i,s,o;if(r.Z.isNumber(t))return t;if(!r.Z.isArray(t)||t.length<2)throw new Error("PrefixParser.toPrefix: term is not an array");for(e=t[0],s=t.length,o=[e],i=1;i<s;i++)r.Z.isInArray(["+","-","*","/"],e)?o.push(this.toPrefix(t[i])):"V"===e&&t[i].type===r.Z.OBJECT_TYPE_MEASUREMENT?o=t[i].toPrefix():"exec"===e?1===i?o.push(t[i]):o.push(this.toPrefix(t[i])):o=[e,t[i].id];return o},getParents:function(t){var e,i,s,o;if(r.Z.isNumber(t))return[];if(!r.Z.isArray(t)||t.length<2)throw new Error("PrefixParser.getParents: term is not an array");for(e=t[0],s=t.length,o=[],i=1;i<s;i++)r.Z.isInArray(["+","-","*","/"],e)?r.Z.concat(o,this.getParents(t[i])):"V"===e&&t[i].type===r.Z.OBJECT_TYPE_MEASUREMENT?r.Z.concat(o,t[i].getParents()):"exec"===e?i>1&&r.Z.concat(o,this.getParents(t[i])):o.push(t[i]);return o}};var Q=t.Z.PrefixParser;t.Z.createTapemeasure=function(e,i,s){var o,n,a,h,l,c,d,u,p,f;return o=i[0],n=i[1],a=r.Z.copyAttributes(s,e.options,"tapemeasure","point1"),d=e.create("point",o,a),a=r.Z.copyAttributes(s,e.options,"tapemeasure","point2"),u=e.create("point",n,a),d.setAttribute({ignoredSnapToPoints:[u.id]}),u.setAttribute({ignoredSnapToPoints:[d.id]}),a=r.Z.copyAttributes(s,e.options,"tapemeasure"),h=a.withticks,l=a.withlabel,2===a.digits&&2!==a.precision&&a.precision,l&&(a.withlabel=!0),c=e.create("segment",[d,u],a),l&&(p=s.name&&""!==s.name?s.name+" = ":"",c.label.setText((function(){var t=r.Z.evaluate(c.label.visProp.digits);return c.label.useLocale()?p+c.label.formatNumberLocale(d.Dist(u),t):p+r.Z.toFixed(d.Dist(u),t)}))),h&&(a=r.Z.copyAttributes(s,e.options,"tapemeasure","ticks"),f=e.create("ticks",[c,.1],a),c.inherits.push(f)),c.remove=function(){h&&c.removeTicks(f),e.removeObject(u),e.removeObject(d),H.Z.prototype.remove.call(this)},c.Value=function(){return d.Dist(u)},d.dump=!1,u.dump=!1,c.elType="tapemeasure",c.getParents=function(){return[[d.X(),d.Y()],[u.X(),u.Y()]]},c.subs={point1:d,point2:u},h&&(f.dump=!1),c.methodMap=t.Z.deepCopy(c.methodMap,{Value:"Value"}),c.prepareUpdate().update(),e.isSuspendedUpdate||(c.updateVisibility().updateRenderer(),c.point1.updateVisibility().updateRenderer(),c.point2.updateVisibility().updateRenderer()),c},t.Z.registerElement("tapemeasure",t.Z.createTapemeasure),t.Z.createMeasurement=function(t,e,i){var s,o,n,a,h,l;for(o=r.Z.copyAttributes(i,t.options,"measurement"),n=e[0],a=e[1],h=e[2],(s=t.create("text",[n,a,""],o)).type=r.Z.OBJECT_TYPE_MEASUREMENT,s.elType="measurement",s.Value=function(){return Q.parse(h,"execute")},s.Dimension=function(){var t=r.Z.evaluate(s.visProp.dim);return null!==t?t:Q.dimension(h)},s.Unit=function(){var t="",e=r.Z.evaluate(s.visProp.units),i=s.Dimension();return r.Z.isObject(e)&&r.Z.exists(e[i])&&!1!==e[i]?t=r.Z.evaluate(e[i]):r.Z.isObject(e)&&r.Z.exists(e["dim"+i])&&!1!==e["dim"+i]?t=r.Z.evaluate(e["dim"+i]):(t=r.Z.evaluate(s.visProp.baseunit),0===i?t="":i>1&&""!==t&&(t=t+"^{"+i+"}")),t},s.getTerm=function(){return h},s.getMethod=function(){var t=h[0];return"V"===t&&(t="Value"),t},s.toPrefix=function(){return Q.toPrefix(h)},s.getParents=function(){return Q.getParents(h)},s.addParents(s.getParents()),l=0;l<s.parents.length;l++)t.select(s.parents[l]).addChild(s);return s.setText((function(){var t,e="",i="",o=s.Dimension(),n=r.Z.evaluate(s.visProp.digits),a=s.Unit(),h=s.Value();if(r.Z.evaluate(s.visProp.showprefix)&&(e=s.visProp.formatprefix.apply(s,[r.Z.evaluate(s.visProp.prefix)])),r.Z.evaluate(s.visProp.showsuffix)&&(i=s.visProp.formatsuffix.apply(s,[r.Z.evaluate(s.visProp.suffix)])),r.Z.isNumber(h))"none"===n||(h="auto"===n?s.useLocale()?s.formatNumberLocale(h):r.Z.autoDigits(h):s.useLocale()?s.formatNumberLocale(h,n):r.Z.toFixed(h,n));else if(r.Z.isArray(h))for(t=0;t<h.length;t++)r.Z.isNumber(h[t])&&("none"===n||("auto"===n?s.useLocale()?h[t]=s.formatNumberLocale(h[t]):h[t]=r.Z.autoDigits(h[t]):s.useLocale()?h[t]=s.formatNumberLocale(h[t],n):h[t]=r.Z.toFixed(h[t],n)));return"coords"===o&&r.Z.isArray(h)&&(2===h.length&&h.unshift(void 0),h=s.visProp.formatcoords.apply(s,[h[1],h[2],h[0]])),"direction"===o&&r.Z.isArray(h)&&(2===h.length&&h.unshift(void 0),h=s.visProp.formatdirection.apply(s,[h[1],h[2]])),r.Z.isString(o)?e+h+i:isNaN(o)?e+"NaN"+i:e+h+a+i})),s.methodMap=r.Z.deepCopy(s.methodMap,{Value:"Value",Dimension:"Dimension",Unit:"Unit",getTerm:"getTerm",Term:"getTerm",getMethod:"getMethod",Method:"getMethod",getParents:"getParents",Parents:"getParents"}),s},t.Z.registerElement("measurement",t.Z.createMeasurement),t.Z.DataSource=function(){return this.data=[],this.columnHeaders=[],this.rowHeaders=[],this},t.Z.extend(t.Z.DataSource.prototype,{loadFromArray:function(t,e,i){var s,o,n;if(r.Z.isArray(e)&&(this.columnHeaders=e,e=!1),r.Z.isArray(i)&&(this.rowHeaders=i,i=!1),this.data=[],e&&(this.columnHeaders=[]),i&&(this.rowHeaders=[]),r.Z.exists(t)){for(this.data=[],s=0;s<t.length;s++)for(this.data[s]=[],o=0;o<t[s].length;o++)n=t[s][o],parseFloat(n).toString()===n?this.data[s][o]=parseFloat(n):this.data[s][o]="-"!==n?n:NaN;if(e&&(this.columnHeaders=this.data[0].slice(1),this.data=this.data.slice(1)),i)for(this.rowHeaders=[],s=0;s<this.data.length;s++)this.rowHeaders.push(this.data[s][0]),this.data[s]=this.data[s].slice(1)}return this},loadFromTable:function(t,e,i){var s,o,n,a,h;if(r.Z.isArray(e)&&(this.columnHeaders=e,e=!1),r.Z.isArray(i)&&(this.rowHeaders=i,i=!1),this.data=[],e&&(this.columnHeaders=[]),i&&(this.rowHeaders=[]),t=document.getElementById(t),r.Z.exists(t)){for(s=t.getElementsByTagName("tr"),this.data=[],o=0;o<s.length;o++)for(a=s[o].getElementsByTagName("td"),this.data[o]=[],n=0;n<a.length;n++)h=a[n].innerHTML,parseFloat(h).toString()===h?this.data[o][n]=parseFloat(h):this.data[o][n]="-"!==h?h:NaN;if(e&&(this.columnHeaders=this.data[0].slice(1),this.data=this.data.slice(1)),i)for(this.rowHeaders=[],o=0;o<this.data.length;o++)this.rowHeaders.push(this.data[o][0]),this.data[o]=this.data[o].slice(1)}return this},addColumn:function(t,e,i){throw new Error("not implemented")},addRow:function(t,e,i){throw new Error("not implemented")},getColumn:function(t){var e,i=[];if(r.Z.isString(t))for(e=0;e<this.columnHeaders.length;e++)if(t===this.columnHeaders[e]){t=e;break}for(e=0;e<this.data.length;e++)this.data[e].length>t&&(i[e]=parseFloat(this.data[e][t]));return i},getRow:function(t){var e,i;if(r.Z.isString(t))for(i=0;i<this.rowHeaders.length;i++)if(t===this.rowHeaders[i]){t=i;break}for(e=[],i=0;i<this.data[t].length;i++)e[i]=this.data[t][i];return e}});var tt=t.Z.DataSource;t.Z.Chart=function(t,e,i){var s,o,n,a,h,l;if(this.constructor(t,i),!r.Z.isArray(e)||0===e.length)throw new Error("JSXGraph: Can't create a chart without data");if(this.elements=[],r.Z.isNumber(e[0]))for(o=e,s=[],n=0;n<o.length;n++)s[n]=n+1;else if(1===e.length&&r.Z.isArray(e[0]))for(o=e[0],s=[],l=r.Z.evaluate(o).length,n=0;n<l;n++)s[n]=n+1;else 2===e.length&&(l=Math.min(e[0].length,e[1].length),s=e[0].slice(0,l),o=e[1].slice(0,l));if(r.Z.isArray(o)&&0===o.length)throw new Error("JSXGraph: Can't create charts without data.");for(h=i.chartstyle.replace(/ /g,"").split(","),n=0;n<h.length;n++){switch(h[n]){case"bar":a=this.drawBar(t,s,o,i);break;case"line":a=this.drawLine(t,s,o,i);break;case"fit":a=this.drawFit(t,s,o,i);break;case"spline":a=this.drawSpline(t,s,o,i);break;case"pie":a=this.drawPie(t,o,i);break;case"point":a=this.drawPoints(t,s,o,i);break;case"radar":a=this.drawRadar(t,e,i)}this.elements.push(a)}return this.id=this.board.setId(this,"Chart"),this.elements},t.Z.Chart.prototype=new H.Z,t.Z.extend(t.Z.Chart.prototype,{drawLine:function(t,e,i,r){return r.fillcolor="none",r.highlightfillcolor="none",t.create("curve",[e,i],r)},drawSpline:function(t,e,i,r){return r.fillColor="none",r.highlightfillcolor="none",t.create("spline",[e,i],r)},drawFit:function(t,e,i,r){var s=r.degree;return s=Math.max(parseInt(s,10),1)||1,r.fillcolor="none",r.highlightfillcolor="none",t.create("functiongraph",[d.Z.regressionPolynomial(s,e,i)],r)},drawBar:function(t,e,i,s){var o,n,a,h,l,c,d,u,p,f,_=[],m=[],g=function(t,i){return function(){return e[t]()-i*a}},b={fixed:!0,withLabel:!1,visible:!1,name:""};if((p=r.Z.copyAttributes(s,t.options,"chart"))&&p.width)a=p.width;else{if(e.length<=1)a=1;else for(a=e[1]-e[0],o=1;o<e.length-1;o++)a=e[o+1]-e[o]<a?e[o+1]-e[o]:a;a*=.8}for(f=r.Z.copyAttributes(s,t.options,"chart","label"),o=0;o<e.length;o++)r.Z.isFunction(e[o])?(h=g(o,-.5),l=g(o,0),c=g(o,.5)):(h=e[o]-.5*a,l=e[o],c=e[o]+.5*a),d=r.Z.isFunction(i[o])?i[o]():i[o],d=i[o],"horizontal"===p.dir?(m[0]=t.create("point",[0,h],b),m[1]=t.create("point",[d,h],b),m[2]=t.create("point",[d,c],b),m[3]=t.create("point",[0,c],b),r.Z.exists(p.labels)&&r.Z.exists(p.labels[o])&&(f.anchorY="middle",(n=t.create("text",[d,l,p.labels[o]],f)).visProp.anchorx=function(t){return function(){return t.X()>=0?"left":"right"}}(n))):(m[0]=t.create("point",[h,0],b),m[1]=t.create("point",[h,d],b),m[2]=t.create("point",[c,d],b),m[3]=t.create("point",[c,0],b),r.Z.exists(p.labels)&&r.Z.exists(p.labels[o])&&(f.anchorX="middle",(n=t.create("text",[l,d,p.labels[o]],f)).visProp.anchory=function(t){return function(){return t.Y()>=0?"bottom":"top"}}(n))),r.Z.isArray(p.colors)&&(u=p.colors,p.fillcolor=u[o%u.length]),_[o]=t.create("polygon",m,p),r.Z.exists(p.labels)&&r.Z.exists(p.labels[o])&&(_[o].text=n);return _},drawPoints:function(t,e,i,r){var s,o=[],n=r.infoboxarray;for(r.fixed=!0,r.name="",s=0;s<e.length;s++)r.infoboxtext=!!n&&n[s%n.length],o[s]=t.create("point",[e[s],i[s]],r);return o},drawPie:function(t,e,s){var o,n,a=[],h=[],l=(p.Z.sum(e),s.colors),c=s.highlightcolors,d=s.labels,f=s.radius||4,_=f,m=s.center||[0,0],g=m[0],b=m[1],v=function(t,i,s){return function(){var o,n,a,h=0;for(n=0;n<=t;n++)h+=parseFloat(r.Z.evaluate(e[n]));for(o=h,n=t+1;n<e.length;n++)o+=parseFloat(r.Z.evaluate(e[n]));return a=0!==o?2*Math.PI*h/o:0,_()*Math[i](a)+s}},Z=function(t,e){var s=-this.point1.coords.usrCoords[1]+this.point2.coords.usrCoords[1],o=-this.point1.coords.usrCoords[2]+this.point2.coords.usrCoords[2];r.Z.exists(this.label)&&(this.label.rendNode.style.fontSize=e*r.Z.evaluate(this.label.visProp.fontsize)+"px",this.label.fullUpdate()),this.point2.coords=new u.Z(i.Z.COORDS_BY_USER,[this.point1.coords.usrCoords[1]+s*t,this.point1.coords.usrCoords[2]+o*t],this.board),this.fullUpdate()},C=function(){this.highlighted||(this.highlighted=!0,this.board.highlightedObjects[this.id]=this,this.board.renderer.highlight(this),Z.call(this,1.1,2))},y=function(){this.highlighted&&(this.highlighted=!1,this.board.renderer.noHighlight(this),Z.call(this,.9090909,1))},P={fixed:!0,withLabel:!1,visible:!1,name:""};if(!r.Z.isArray(d))for(d=[],o=0;o<e.length;o++)d[o]="";for(r.Z.isFunction(f)||(_=function(){return f}),s.highlightonsector=s.highlightonsector||!1,s.straightfirst=!1,s.straightlast=!1,n=t.create("point",[g,b],P),a[0]=t.create("point",[function(){return _()+g},function(){return b}],P),o=0;o<e.length;o++)a[o+1]=t.create("point",[v(o,"cos",g),v(o,"sin",b)],P),s.name=d[o],s.withlabel=""!==s.name,s.fillcolor=l&&l[o%l.length],s.labelcolor=l&&l[o%l.length],s.highlightfillcolor=c&&c[o%c.length],h[o]=t.create("sector",[n,a[o],a[o+1]],s),s.highlightonsector&&(h[o].hasPoint=h[o].hasPointSector),s.highlightbysize&&(h[o].highlight=C,h[o].noHighlight=y);return{sectors:h,points:a,midpoint:n}},drawRadar:function(e,s,o){var n,a,h,l,c,d,p,f,_,m,g,b,v,Z,C,y,P,E,O,x,S,M,w,T,N,A,D,k,R,L,B,I,Y,j,X,U,F,J,z,G,W,H,V=s.length,$=function(){var t,e,s,o,n=r.Z.evaluate(this.visProp.label.offset).slice(0);return t=this.point1.X(),e=this.point2.X(),s=this.point1.Y(),o=this.point2.Y(),e<t&&(n[0]=-n[0]),o<s&&(n[1]=-n[1]),this.setLabelRelativeCoords(n),new u.Z(i.Z.COORDS_BY_USER,[this.point2.X(),this.point2.Y()],this.board)},K=function(t,i){var r,s,o;return r=e.create("transform",[-(C[i]-v[i]),0],{type:"translate"}),s=e.create("transform",[O/(y[i]+Z[i]-(C[i]-v[i])),1],{type:"scale"}),r.melt(s),o=e.create("transform",[t],{type:"rotate"}),r.melt(o),r};if(V<=0)throw new Error("JSXGraph radar chart: no data");if(h=o.paramarray,!r.Z.exists(h))throw new Error("JSXGraph radar chart: need paramArray attribute");if((l=h.length)<=1)throw new Error("JSXGraph radar chart: need more than one param in paramArray");for(n=0;n<V;n++)if(l!==s[n].length)throw new Error("JSXGraph radar chart: use data length equal to number of params ("+s[n].length+" != "+l+")");for(c=[],d=[],a=0;a<l;a++)c[a]=s[0][a],d[a]=c[a];for(n=1;n<V;n++)for(a=0;a<l;a++)s[n][a]>c[a]&&(c[a]=s[n][a]),s[n][a]<d[a]&&(d[a]=s[n][a]);for(p=[],f=[],n=0;n<V;n++)p[n]="",f[n]=[];for(_=[],m=[],g=o.startshiftratio||0,b=o.endshiftratio||0,n=0;n<l;n++)_[n]=(c[n]-d[n])*g,m[n]=(c[n]-d[n])*b;if(v=o.startshiftarray||_,Z=o.endshiftarray||m,C=o.startarray||d,r.Z.exists(o.start))for(n=0;n<l;n++)C[n]=o.start;if(y=o.endarray||c,r.Z.exists(o.end))for(n=0;n<l;n++)y[n]=o.end;if(v.length!==l)throw new Error("JSXGraph radar chart: start shifts length is not equal to number of parameters");if(Z.length!==l)throw new Error("JSXGraph radar chart: end shifts length is not equal to number of parameters");if(C.length!==l)throw new Error("JSXGraph radar chart: starts length is not equal to number of parameters");if(y.length!==l)throw new Error("JSXGraph radar chart: snds length is not equal to number of parameters");for(P=o.labelarray||p,E=o.colors,o.highlightcolors,O=o.radius||10,W=o.strokewidth||1,r.Z.exists(o.highlightonsector)||(o.highlightonsector=!1),x={name:o.name,id:o.id,strokewidth:W,polystrokewidth:o.polystrokewidth||W,strokecolor:o.strokecolor||"black",straightfirst:!1,straightlast:!1,fillcolor:o.fillColor||"#FFFF88",fillopacity:o.fillOpacity||.4,highlightfillcolor:o.highlightFillColor||"#FF7400",highlightstrokecolor:o.highlightStrokeColor||"black",gradient:o.gradient||"none"},M=(S=o.center||[0,0])[0],w=S[1],T=e.create("point",[M,w],{name:"",fixed:!0,withlabel:!1,visible:!1}),Math.PI/2-Math.PI/l,A=N=o.startangle||0,D=[],k=[],n=0;n<l;n++)for(A+=2*Math.PI/l,L=O*Math.cos(A)+M,B=O*Math.sin(A)+w,D[n]=e.create("point",[L,B],{name:"",fixed:!0,withlabel:!1,visible:!1}),k[n]=e.create("line",[T,D[n]],{name:h[n],strokeColor:x.strokecolor,strokeWidth:x.strokewidth,strokeOpacity:1,straightFirst:!1,straightLast:!1,withLabel:!0,highlightStrokeColor:x.highlightstrokecolor}),k[n].getLabelAnchor=$,R=K(A,n),a=0;a<s.length;a++)H=s[a][n],f[a][n]=e.create("point",[H,0],{name:"",fixed:!0,withlabel:!1,visible:!1}),f[a][n].addTransform(f[a][n],R);for(I=[],n=0;n<V;n++)for(x.labelcolor=E&&E[n%E.length],x.strokecolor=E&&E[n%E.length],x.fillcolor=E&&E[n%E.length],I[n]=e.create("polygon",f[n],{withLines:!0,withLabel:!1,fillColor:x.fillcolor,fillOpacity:x.fillopacity,highlightFillColor:x.highlightfillcolor}),a=0;a<l;a++)I[n].borders[a].setAttribute("strokecolor:"+E[n%E.length]),I[n].borders[a].setAttribute("strokewidth:"+x.polystrokewidth);switch(o.legendposition||"none"){case"right":j=o.legendleftoffset||2,X=o.legendtopoffset||1,this.legend=e.create("legend",[M+O+j,w+O-X],{labels:P,colors:E});break;case"none":break;default:t.Z.debug("Unknown legend position")}if(Y=[],o.showcircles){for(U=[],n=0;n<6;n++)U[n]=20*n;if(U[0]="0",(J=(F=o.circlelabelarray||U).length)<2)throw new Error("JSXGraph radar chart: too less circles in circleLabelArray");for(z=[],R=K(N+Math.PI/l,0),x.fillcolor="none",x.highlightfillcolor="none",x.strokecolor=o.strokecolor||"black",x.strokewidth=o.circlestrokewidth||.5,x.layer=0,G=(y[0]-C[0])/(J-1),n=0;n<J;n++)z[n]=e.create("point",[C[0]+n*G,0],{name:F[n],size:0,fixed:!0,withLabel:!0,visible:!0}),z[n].addTransform(z[n],R),Y[n]=e.create("circle",[T,z[n]],x)}return this.rendNode=I[0].rendNode,{circles:Y,lines:k,points:f,midpoint:T,polygons:I}},updateRenderer:function(){return this},update:function(){return this.needsUpdate&&this.updateDataArray(),this},updateDataArray:function(){return this}}),t.Z.createChart=function(i,s,o){var n,a,h,l,c,d,u,p,f,_,m,g,b,v,Z,C,y=[],P=e.Z.isBrowser?i.document.getElementById(s[0]):null;if(1===s.length&&r.Z.isString(s[0])){if(r.Z.exists(P)){if(f=r.Z.copyAttributes(o,i.options,"chart"),n=(P=(new tt).loadFromTable(s[0],f.withheaders,f.withheaders)).data,c=P.columnHeaders,a=P.rowHeaders,_=f.width,m=f.name,g=f.strokecolor,b=f.fillcolor,v=f.highlightstrokecolor,Z=f.highlightfillcolor,i.suspendUpdate(),C=n.length,p=[],f.rows&&r.Z.isArray(f.rows)){for(h=0;h<C;h++)for(l=0;l<f.rows.length;l++)if(f.rows[l]===h||f.withheaders&&f.rows[l]===a[h]){p.push(n[h]);break}}else p=n;for(C=p.length,h=0;h<C;h++){if(u=[],f.chartstyle&&-1!==f.chartstyle.indexOf("bar")){for(d=_||.8,u.push(1-d/2+(h+.5)*d/C),l=1;l<p[h].length;l++)u.push(u[l-1]+1);f.width=d/C}m&&m.length===C?f.name=m[h]:f.withheaders&&(f.name=c[h]),g&&g.length===C?f.strokecolor=g[h]:f.strokecolor=Y.Z.hsv2rgb((h+1)/C*360,.9,.6),b&&b.length===C?f.fillcolor=b[h]:f.fillcolor=Y.Z.hsv2rgb((h+1)/C*360,.9,1),v&&v.length===C?f.highlightstrokecolor=v[h]:f.highlightstrokecolor=Y.Z.hsv2rgb((h+1)/C*360,.9,1),Z&&Z.length===C?f.highlightfillcolor=Z[h]:f.highlightfillcolor=Y.Z.hsv2rgb((h+1)/C*360,.9,.6),f.chartstyle&&-1!==f.chartstyle.indexOf("bar")?y.push(new t.Z.Chart(i,[u,p[h]],f)):y.push(new t.Z.Chart(i,[p[h]],f))}i.unsuspendUpdate()}return y}return f=r.Z.copyAttributes(o,i.options,"chart"),new t.Z.Chart(i,s,f)},t.Z.registerElement("chart",t.Z.createChart),t.Z.Legend=function(t,e,s){var o;if(this.constructor(),o=r.Z.copyAttributes(s,t.options,"legend"),this.board=t,this.coords=new u.Z(i.Z.COORDS_BY_USER,e,this.board),this.myAtts={},this.label_array=o.labelarray||o.labels,this.color_array=o.colorarray||o.colors,this.lines=[],this.myAtts.strokewidth=o.strokewidth||5,this.myAtts.straightfirst=!1,this.myAtts.straightlast=!1,this.myAtts.withlabel=!0,this.myAtts.fixed=!0,this.style=o.legendstyle||o.style,"vertical"!==this.style)throw new Error("JSXGraph: Unknown legend style: "+this.style);this.drawVerticalLegend(t,o)},t.Z.Legend.prototype=new H.Z,t.Z.Legend.prototype.drawVerticalLegend=function(t,e){var s,o=e.linelength||1,n=(e.rowheight||20)/this.board.unitY,a=function(){return this.setLabelRelativeCoords(this.visProp.label.offset),new u.Z(i.Z.COORDS_BY_USER,[this.point2.X(),this.point2.Y()],this.board)};for(s=0;s<this.label_array.length;s++)this.myAtts.name=this.label_array[s],this.myAtts.strokecolor=this.color_array[s%this.color_array.length],this.myAtts.highlightstrokecolor=this.color_array[s%this.color_array.length],this.myAtts.label={offset:[10,0],strokeColor:this.color_array[s%this.color_array.length],strokeWidth:this.myAtts.strokewidth},this.lines[s]=t.create("line",[[this.coords.usrCoords[1],this.coords.usrCoords[2]-s*n],[this.coords.usrCoords[1]+o,this.coords.usrCoords[2]-s*n]],this.myAtts),this.lines[s].getLabelAnchor=a,this.lines[s].prepareUpdate().update().updateVisibility(r.Z.evaluate(this.lines[s].visProp.visible)).updateRenderer()},t.Z.createLegend=function(e,i,s){var o=[0,0];if(!r.Z.exists(i)||2!==i.length)throw new Error("JSXGraph: Legend element needs two numbers as parameters");return o=i,new t.Z.Legend(e,o,s)},t.Z.registerElement("legend",t.Z.createLegend);t.Z.Chart,t.Z.Legend;t.Z.Transformation=function(t,e,r){this.elementClass=i.Z.OBJECT_CLASS_OTHER,this.type=i.Z.OBJECT_TYPE_TRANSFORMATION,this.matrix=[[1,0,0],[0,1,0],[0,0,1]],this.board=t,this.isNumericMatrix=!1,this.setMatrix(t,e,r),this.methodMap={apply:"apply",applyOnce:"applyOnce",bindTo:"bindTo",bind:"bindTo",melt:"melt"}},t.Z.Transformation.prototype={},t.Z.extend(t.Z.Transformation.prototype,{update:function(){return this},setMatrix:function(t,e,i){var s;for(this.isNumericMatrix=!0,s=0;s<i.length;s++)if("number"!=typeof i[s]){this.isNumericMatrix=!1;break}if("translate"===e){if(2!==i.length)throw new Error("JSXGraph: translate transformation needs 2 parameters.");this.evalParam=r.Z.createEvalFunction(t,i,2),this.update=function(){this.matrix[1][0]=this.evalParam(0),this.matrix[2][0]=this.evalParam(1)}}else if("scale"===e){if(2!==i.length)throw new Error("JSXGraph: scale transformation needs 2 parameters.");this.evalParam=r.Z.createEvalFunction(t,i,2),this.update=function(){this.matrix[1][1]=this.evalParam(0),this.matrix[2][2]=this.evalParam(1)}}else if("reflect"===e)i.length<4&&(i[0]=t.select(i[0])),2===i.length&&(i[1]=t.select(i[1])),4===i.length&&(this.evalParam=r.Z.createEvalFunction(t,i,4)),this.update=function(){var t,e,r,s,n,a,h,l;1===i.length?h=i[0].stdform:2===i.length?h=o.Z.crossProduct(i[1].coords.usrCoords,i[0].coords.usrCoords):4===i.length&&(h=o.Z.crossProduct([1,this.evalParam(2),this.evalParam(3)],[1,this.evalParam(0),this.evalParam(1)])),t=h[1],e=h[2],a=(l=[-(r=h[0])*t,-r*e,t*t+e*e])[2],s=l[0]/l[2],n=l[1]/l[2],t=-h[2],e=h[1],this.matrix[1][1]=(t*t-e*e)/a,this.matrix[1][2]=2*t*e/a,this.matrix[2][1]=this.matrix[1][2],this.matrix[2][2]=-this.matrix[1][1],this.matrix[1][0]=s*(1-this.matrix[1][1])-n*this.matrix[1][2],this.matrix[2][0]=n*(1-this.matrix[2][2])-s*this.matrix[2][1]};else if("rotate"===e)3===i.length?this.evalParam=r.Z.createEvalFunction(t,i,3):i.length>0&&i.length<=2&&(this.evalParam=r.Z.createEvalFunction(t,i,1),2!==i.length||r.Z.isArray(i[1])||(i[1]=t.select(i[1]))),this.update=function(){var t,e,s=this.evalParam(0),o=Math.cos(s),n=Math.sin(s);this.matrix[1][1]=o,this.matrix[1][2]=-n,this.matrix[2][1]=n,this.matrix[2][2]=o,i.length>1&&(3===i.length?(t=this.evalParam(1),e=this.evalParam(2)):r.Z.isArray(i[1])?(t=i[1][0],e=i[1][1]):(t=i[1].X(),e=i[1].Y()),this.matrix[1][0]=t*(1-o)+e*n,this.matrix[2][0]=e*(1-o)-t*n)};else if("shear"===e){if(2!==i.length)throw new Error("JSXGraph: shear transformation needs 2 parameters.");this.evalParam=r.Z.createEvalFunction(t,i,2),this.update=function(){this.matrix[1][2]=this.evalParam(0),this.matrix[2][1]=this.evalParam(1)}}else if("generic"===e){if(9!==i.length)throw new Error("JSXGraph: generic transformation needs 9 parameters.");this.evalParam=r.Z.createEvalFunction(t,i,9),this.update=function(){this.matrix[0][0]=this.evalParam(0),this.matrix[0][1]=this.evalParam(1),this.matrix[0][2]=this.evalParam(2),this.matrix[1][0]=this.evalParam(3),this.matrix[1][1]=this.evalParam(4),this.matrix[1][2]=this.evalParam(5),this.matrix[2][0]=this.evalParam(6),this.matrix[2][1]=this.evalParam(7),this.matrix[2][2]=this.evalParam(8)}}},apply:function(t,e){return this.update(),r.Z.exists(e)?o.Z.matVecMult(this.matrix,t.initialCoords.usrCoords):o.Z.matVecMult(this.matrix,t.coords.usrCoords)},applyOnce:function(t){var e,s,n;for(r.Z.isArray(t)||(t=[t]),s=t.length,n=0;n<s;n++)this.update(),e=o.Z.matVecMult(this.matrix,t[n].coords.usrCoords),t[n].coords.setCoordinates(i.Z.COORDS_BY_USER,e)},bindTo:function(t){var e,i;if(r.Z.isArray(t))for(i=t.length,e=0;e<i;e++)t[e].transformations.push(this);else t.transformations.push(this)},setProperty:function(e){t.Z.deprecated("Transformation.setProperty()","Transformation.setAttribute()")},setAttribute:function(t){},melt:function(t){var e,i,r,s,o,n,a=[];for(i=t.matrix.length,r=this.matrix[0].length,e=0;e<i;e++)a[e]=[];for(this.update(),t.update(),e=0;e<i;e++)for(n=0;n<r;n++){for(o=0,s=0;s<i;s++)o+=t.matrix[e][s]*this.matrix[s][n];a[e][n]=o}return this.update=function(){var t=this.matrix.length,i=this.matrix[0].length;for(e=0;e<t;e++)for(n=0;n<i;n++)this.matrix[e][n]=a[e][n]},this},getParents:function(){var t=[[].concat.apply([],this.matrix)];return 0!==this.parents.length&&(t=this.parents),t}}),t.Z.createTransform=function(e,i,r){return new t.Z.Transformation(e,r.type,i)},t.Z.registerElement("transform",t.Z.createTransform);t.Z.Transformation;t.Z.Turtle=function(t,e,s){var o,n,a;return this.constructor(t,s,i.Z.OBJECT_TYPE_TURTLE,i.Z.OBJECT_CLASS_OTHER),this.turtleIsHidden=!1,this.board=t,this.visProp.curveType="plot",this._attributes=r.Z.copyAttributes(this.visProp,t.options,"turtle"),delete this._attributes.id,o=0,n=0,a=90,0!==e.length&&(3===e.length?(o=e[0],n=e[1],a=e[2]):2===e.length?r.Z.isArray(e[0])?(o=e[0][0],n=e[0][1],a=e[1]):(o=e[0],n=e[1]):(o=e[0][0],n=e[0][1])),this.init(o,n,a),this.methodMap=r.Z.deepCopy(this.methodMap,{forward:"forward",fd:"forward",back:"back",bk:"back",right:"right",rt:"right",left:"left",lt:"left",penUp:"penUp",pu:"penUp",up:"penUp",penDown:"penDown",pd:"penDown",down:"penDown",clearScreen:"clearScreen",cs:"clearScreen",clean:"clean",setPos:"setPos",home:"home",hideTurtle:"hideTurtle",ht:"hideTurtle",hide:"hideTurtle",showTurtle:"showTurtle",st:"showTurtle",show:"showTurtle",penSize:"setPenSize",setPenSize:"setPenSize",penColor:"setPenColor",setPenColor:"setPenColor",highlightPenColor:"setHighlightPenColor",setHighlightPenColor:"setHighlightPenColor",getPenColor:"getPenColor",Color:"getPenColor",getHighlightPenColor:"getHighlightPenColor",HighlightColor:"getHighlightPenColor",getPenSize:"getPenSize",Size:"getPenSize",pushTurtle:"pushTurtle",push:"pushTurtle",popTurtle:"popTurtle",pop:"popTurtle",lookTo:"lookTo",pos:"pos",Pos:"pos",moveTo:"moveTo",X:"X",Y:"Y"}),this},t.Z.Turtle.prototype=new H.Z,t.Z.extend(t.Z.Turtle.prototype,{init:function(t,e,i){var r={fixed:!0,name:"",visible:!1,withLabel:!1};this.arrowLen=20/o.Z.hypot(this.board.unitX,this.board.unitY),this.pos=[t,e],this.isPenDown=!0,this.dir=90,this.stack=[],this.objects=[],this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes),this.objects.push(this.curve),this.turtle=this.board.create("point",this.pos,r),this.objects.push(this.turtle),this.turtle2=this.board.create("point",[this.pos[0],this.pos[1]+this.arrowLen],r),this.objects.push(this.turtle2),this.visProp.arrow.lastArrow=!0,this.visProp.arrow.straightFirst=!1,this.visProp.arrow.straightLast=!1,this.arrow=this.board.create("line",[this.turtle,this.turtle2],this.visProp.arrow),this.objects.push(this.arrow),this.subs={arrow:this.arrow},this.inherits.push(this.arrow),this.right(90-i),this.board.update()},forward:function(t){if(0===t)return this;var e,i=t*Math.cos(this.dir*Math.PI/180),r=t*Math.sin(this.dir*Math.PI/180);return this.turtleIsHidden||((e=this.board.create("transform",[i,r],{type:"translate"})).applyOnce(this.turtle),e.applyOnce(this.turtle2)),this.isPenDown&&this.curve.dataX.length>=8192&&(this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes),this.objects.push(this.curve)),this.pos[0]+=i,this.pos[1]+=r,this.isPenDown&&(this.curve.dataX.push(this.pos[0]),this.curve.dataY.push(this.pos[1])),this.board.update(),this},back:function(t){return this.forward(-t)},right:function(t){(this.dir-=t,this.dir%=360,this.turtleIsHidden)||this.board.create("transform",[-t*Math.PI/180,this.turtle],{type:"rotate"}).applyOnce(this.turtle2);return this.board.update(),this},left:function(t){return this.right(-t)},penUp:function(){return this.isPenDown=!1,this},penDown:function(){return this.isPenDown=!0,this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes),this.objects.push(this.curve),this},clean:function(){var t,e;for(t=0;t<this.objects.length;t++)(e=this.objects[t]).type===i.Z.OBJECT_TYPE_CURVE&&(this.board.removeObject(e),this.objects.splice(t,1));return this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes),this.objects.push(this.curve),this.board.update(),this},clearScreen:function(){var t,e,i=this.objects.length;for(t=0;t<i;t++)e=this.objects[t],this.board.removeObject(e);return this.init(0,0,90),this},setPos:function(t,e){return r.Z.isArray(t)?this.pos=t:this.pos=[t,e],this.turtleIsHidden||(this.turtle.setPositionDirectly(i.Z.COORDS_BY_USER,[t,e]),this.turtle2.setPositionDirectly(i.Z.COORDS_BY_USER,[t,e+this.arrowLen]),this.board.create("transform",[-(this.dir-90)*Math.PI/180,this.turtle],{type:"rotate"}).applyOnce(this.turtle2)),this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes),this.objects.push(this.curve),this.board.update(),this},setPenSize:function(t){return this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this.copyAttr("strokeWidth",t)),this.objects.push(this.curve),this},setPenColor:function(t){return this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this.copyAttr("strokeColor",t)),this.objects.push(this.curve),this},getPenAttribute:function(t){var e,i=this.objects.length;return e=4===i?0:i-1,r.Z.evaluate(this.objects[e].visProp[t])},getPenSize:function(){return this.getPenAttribute("strokewidth")},getPenColor:function(){return this.getPenAttribute("strokecolor")},getHighlightPenColor:function(){return this.getPenAttribute("highlightstrokecolor")},setHighlightPenColor:function(t){return this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this.copyAttr("highlightStrokeColor",t)),this.objects.push(this.curve),this},setAttribute:function(t){var e,s,o,n=this.objects.length;for(e=0;e<n;e++)(s=this.objects[e]).type===i.Z.OBJECT_TYPE_CURVE&&s.setAttribute(t);return o=this.visProp.id,this.visProp=r.Z.deepCopy(this.curve.visProp),this.visProp.id=o,this._attributes=r.Z.deepCopy(this.visProp),delete this._attributes.id,this},copyAttr:function(t,e){return this._attributes[t.toLowerCase()]=e,this._attributes},showTurtle:function(){return this.turtleIsHidden=!1,this.arrow.setAttribute({visible:!0}),this.visProp.arrow.visible=!1,this.setPos(this.pos[0],this.pos[1]),this.board.update(),this},hideTurtle:function(){return this.turtleIsHidden=!0,this.arrow.setAttribute({visible:!1}),this.visProp.arrow.visible=!1,this.board.update(),this},home:function(){return this.pos=[0,0],this.setPos(this.pos[0],this.pos[1]),this},pushTurtle:function(){return this.stack.push([this.pos[0],this.pos[1],this.dir]),this},popTurtle:function(){var t=this.stack.pop();return this.pos[0]=t[0],this.pos[1]=t[1],this.dir=t[2],this.setPos(this.pos[0],this.pos[1]),this},lookTo:function(t){var e,i,s,o,n;return r.Z.isArray(t)?(e=this.pos[0],i=this.pos[1],s=t[0],o=t[1],n=Math.atan2(o-i,s-e),this.right(this.dir-180*n/Math.PI)):r.Z.isNumber(t)&&this.right(this.dir-t),this},moveTo:function(t){var e,i,s;return r.Z.isArray(t)&&(e=t[0]-this.pos[0],i=t[1]-this.pos[1],this.turtleIsHidden||((s=this.board.create("transform",[e,i],{type:"translate"})).applyOnce(this.turtle),s.applyOnce(this.turtle2)),this.isPenDown&&this.curve.dataX.length>=8192&&(this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes),this.objects.push(this.curve)),this.pos[0]=t[0],this.pos[1]=t[1],this.isPenDown&&(this.curve.dataX.push(this.pos[0]),this.curve.dataY.push(this.pos[1])),this.board.update()),this},fd:function(t){return this.forward(t)},bk:function(t){return this.back(t)},lt:function(t){return this.left(t)},rt:function(t){return this.right(t)},pu:function(){return this.penUp()},pd:function(){return this.penDown()},ht:function(){return this.hideTurtle()},st:function(){return this.showTurtle()},cs:function(){return this.clearScreen()},push:function(){return this.pushTurtle()},pop:function(){return this.popTurtle()},evalAt:function(t,e){var r,s,o,n,a=this.objects.length;for(r=0,s=0;r<a;r++)if((o=this.objects[r]).elementClass===i.Z.OBJECT_CLASS_CURVE){if(s<=t&&t<s+o.numberPoints)return n=t-s,o[e](n);s+=o.numberPoints}return this[e]()},X:function(t){return r.Z.exists(t)?this.evalAt(t,"X"):this.pos[0]},Y:function(t){return r.Z.exists(t)?this.evalAt(t,"Y"):this.pos[1]},Z:function(t){return 1},minX:function(){return 0},maxX:function(){var t,e=this.objects.length,r=0;for(t=0;t<e;t++)this.objects[t].elementClass===i.Z.OBJECT_CLASS_CURVE&&(r+=this.objects[t].numberPoints);return r},hasPoint:function(t,e){var r,s;for(r=0;r<this.objects.length;r++)if((s=this.objects[r]).type===i.Z.OBJECT_TYPE_CURVE&&s.hasPoint(t,e))return!0;return!1}}),t.Z.createTurtle=function(e,i,s){var o;return i=i||[],o=r.Z.copyAttributes(s,e.options,"turtle"),new t.Z.Turtle(e,i,o)},t.Z.registerElement("turtle",t.Z.createTurtle);t.Z.Turtle;t.Z.Ticks=function(t,e,s){if(this.constructor(t.board,s,i.Z.OBJECT_TYPE_TICKS,i.Z.OBJECT_CLASS_OTHER),this.line=t,this.board=this.line.board,this.fixedTicks=null,this.equidistant=!1,this.labelsData=[],r.Z.isFunction(e))throw this.ticksFunction=e,new Error("Function arguments are no longer supported.");r.Z.isArray(e)?this.fixedTicks=e:this.equidistant=!0,this.ticks=[],this.labels=[],this.labelCounter=0,this.id=this.line.addTicks(this),this.elType="ticks",this.inherits.push(this.labels),this.board.setId(this,"Ti")},t.Z.Ticks.prototype=new H.Z,t.Z.extend(t.Z.Ticks.prototype,{hasPoint:function(t,e){var s,n,a,h,l=this.ticks&&this.ticks.length||0;if(r.Z.isObject(r.Z.evaluate(this.visProp.precision))?(h=this.board._inputDevice,a=r.Z.evaluate(this.visProp.precision[h])):a=this.board.options.precision.hasPoint,a+=.5*r.Z.evaluate(this.visProp.strokewidth),!r.Z.evaluate(this.line.visProp.scalable)||this.line.elementClass===i.Z.OBJECT_CLASS_CURVE)return!1;if(0!==this.line.stdform[1]&&0!==this.line.stdform[2]&&this.line.type!==i.Z.OBJECT_TYPE_AXIS)return!1;for(s=0;s<l;s++)if((n=this.ticks[s])[2]&&!(0===this.line.stdform[1]&&Math.abs(n[0][0]-this.line.point1.coords.scrCoords[1])<o.Z.eps||0===this.line.stdform[2]&&Math.abs(n[1][0]-this.line.point1.coords.scrCoords[2])<o.Z.eps)&&(Math.abs(n[0][0]-n[0][1])>=1||Math.abs(n[1][0]-n[1][1])>=1))if(0===this.line.stdform[1]){if(Math.abs(e-this.line.point1.coords.scrCoords[2])<2*a&&n[0][0]-a<t&&t<n[0][1]+a)return!0}else if(0===this.line.stdform[2]&&Math.abs(t-this.line.point1.coords.scrCoords[1])<2*a&&n[1][0]-a<e&&e<n[1][1]+a)return!0;return!1},setPositionDirectly:function(t,e,s){var n,a,h=new u.Z(t,e,this.board),l=new u.Z(t,s,this.board),c=this.board.getBoundingBox();return this.line.type===i.Z.OBJECT_TYPE_AXIS&&r.Z.evaluate(this.line.visProp.scalable)?(Math.abs(this.line.stdform[1])<o.Z.eps&&Math.abs(h.usrCoords[1]*l.usrCoords[1])>o.Z.eps?(n=l.usrCoords[1]/h.usrCoords[1],c[0]*=n,c[2]*=n,this.board.setBoundingBox(c,this.board.keepaspectratio,"update")):Math.abs(this.line.stdform[2])<o.Z.eps&&Math.abs(h.usrCoords[2]*l.usrCoords[2])>o.Z.eps&&(a=l.usrCoords[2]/h.usrCoords[2],c[3]*=a,c[1]*=a,this.board.setBoundingBox(c,this.board.keepaspectratio,"update")),this):this},calculateTicksCoordinates:function(){var t,e,s,n;if(!(this.line.elementClass===i.Z.OBJECT_CLASS_LINE&&(this.setTicksSizeVariables(),Math.abs(this.dx)<o.Z.eps&&Math.abs(this.dy)<o.Z.eps)))return t=this.getZeroCoordinates(),e=this.line.elementClass===i.Z.OBJECT_CLASS_LINE?this.getLowerAndUpperBounds(t,"ticksdistance"):{lower:this.line.minX(),upper:this.line.maxX(),a1:0,a2:0,m1:0,m2:0},"polar"===r.Z.evaluate(this.visProp.type)&&(n=this.board.getBoundingBox(),s=Math.max(o.Z.hypot(n[0],n[1]),o.Z.hypot(n[2],n[3])),e.upper=s),this.ticks=[],this.labelsData=[],this.equidistant?this.generateEquidistantTicks(t,e):this.generateFixedTicks(t,e),this},setTicksSizeVariables:function(t){var e,i,s,n,a=.5*r.Z.evaluate(this.visProp.majorheight),h=.5*r.Z.evaluate(this.visProp.minorheight);r.Z.exists(t)?(i=this.line.minX(),s=this.line.maxX(),(n=this.line.points.length)<2?(this.dxMaj=0,this.dyMaj=0):o.Z.relDif(t,i)<o.Z.eps?(this.dxMaj=this.line.points[0].usrCoords[2]-this.line.points[1].usrCoords[2],this.dyMaj=this.line.points[1].usrCoords[1]-this.line.points[0].usrCoords[1]):o.Z.relDif(t,s)<o.Z.eps?(this.dxMaj=this.line.points[n-2].usrCoords[2]-this.line.points[n-1].usrCoords[2],this.dyMaj=this.line.points[n-1].usrCoords[1]-this.line.points[n-2].usrCoords[1]):(this.dxMaj=-d.Z.D(this.line.Y)(t),this.dyMaj=d.Z.D(this.line.X)(t))):(this.dxMaj=this.line.stdform[1],this.dyMaj=this.line.stdform[2]),this.dxMin=this.dxMaj,this.dyMin=this.dyMaj,this.dx=this.dxMaj,this.dy=this.dyMaj,e=o.Z.hypot(this.dxMaj*this.board.unitX,this.dyMaj*this.board.unitY),this.dxMaj*=a/e*this.board.unitX,this.dyMaj*=a/e*this.board.unitY,this.dxMin*=h/e*this.board.unitX,this.dyMin*=h/e*this.board.unitY,this.minStyle=r.Z.evaluate(this.visProp.minorheight)<0?"infinite":"finite",this.majStyle=r.Z.evaluate(this.visProp.majorheight)<0?"infinite":"finite"},getZeroCoordinates:function(){var t,e,s,o,n,a,l,c,d=r.Z.evaluate(this.visProp.anchor);return this.line.elementClass===i.Z.OBJECT_CLASS_LINE?this.line.type===i.Z.OBJECT_TYPE_AXIS?h.Z.projectPointToLine({coords:{usrCoords:[1,0,0]}},this.line,this.board):(s=this.line.point1.coords.usrCoords[0],t=this.line.point1.coords.usrCoords[1],e=this.line.point1.coords.usrCoords[2],a=this.line.point2.coords.usrCoords[0],o=this.line.point2.coords.usrCoords[1],n=this.line.point2.coords.usrCoords[2],"right"===d?this.line.point2.coords:"middle"===d?new u.Z(i.Z.COORDS_BY_USER,[.5*(s+a),.5*(t+o),.5*(e+n)],this.board):r.Z.isNumber(d)?new u.Z(i.Z.COORDS_BY_USER,[s+(a-s)*d,t+(o-t)*d,e+(n-e)*d],this.board):this.line.point1.coords):(l=this.line.minX(),c=this.line.maxX(),"right"===d?c:"middle"===d?.5*(l+c):r.Z.isNumber(d)?l*(1-d)+c*d:l)},getLowerAndUpperBounds:function(t,e){var s,n,a,l,c,d,p,f,_,m,g,b,v,Z,C,y=10*o.Z.eps,P=r.Z.evaluate(this.line.visProp.straightfirst),E=r.Z.evaluate(this.line.visProp.straightlast),O=r.Z.evaluate(this.visProp.includeboundaries);return this.line.elementClass===i.Z.OBJECT_CLASS_CURVE?{lower:this.line.minX(),upper:this.line.maxX()}:(c=new u.Z(i.Z.COORDS_BY_USER,this.line.point1.coords.usrCoords,this.board),d=new u.Z(i.Z.COORDS_BY_USER,this.line.point2.coords.usrCoords,this.board),p=Math.abs(c.usrCoords[0])>=o.Z.eps&&c.scrCoords[1]>=0&&c.scrCoords[1]<=this.board.canvasWidth&&c.scrCoords[2]>=0&&c.scrCoords[2]<=this.board.canvasHeight,f=Math.abs(d.usrCoords[0])>=o.Z.eps&&d.scrCoords[1]>=0&&d.scrCoords[1]<=this.board.canvasWidth&&d.scrCoords[2]>=0&&d.scrCoords[2]<=this.board.canvasHeight,r.Z.exists(e)&&"ticksdistance"===e?(h.Z.calcStraight(this.line,c,d,0),Z=this.getDistanceFromZero(t,c),C=this.getDistanceFromZero(t,d),h.Z.calcStraight(this.line,c,d,r.Z.evaluate(this.line.visProp.margin)),Z=this.getDistanceFromZero(t,c)-Z,C=this.getDistanceFromZero(t,d).m2):h.Z.calcLineDelimitingPoints(this.line,c,d),a=r.Z.evaluate(this.line.visProp.firstarrow),l=r.Z.evaluate(this.line.visProp.lastarrow),b=this.getDistanceFromZero(t,c),v=this.getDistanceFromZero(t,d),(a||l)&&(g=this.board.renderer.getArrowHeadData(this.line,r.Z.evaluate(this.line.visProp.strokewidth),""),this.board.renderer.getPositionArrowHead(this.line,c,d,g)),(_=this.getDistanceFromZero(t,c))<(m=this.getDistanceFromZero(t,d))?(s=_,n=m,P||!p||O||(s+=y),E||!f||O||(n-=y)):m<_?(s=m,n=_,E||!f||O||(s+=y),P||!p||O||(n-=y)):(s=0,n=0),{lower:s,upper:n,a1:b=_-b,a2:v=_-v,m1:Z,m2:C})},getDistanceFromZero:function(t,e){var r,s,n,a,h;return r=this.line.point1.coords,s=this.line.point2.coords,h=t.distance(i.Z.COORDS_BY_USER,e),n=[s.usrCoords[0]-r.usrCoords[0],s.usrCoords[1]-r.usrCoords[1],s.usrCoords[2]-r.usrCoords[2]],a=[e.usrCoords[0]-t.usrCoords[0],e.usrCoords[1]-t.usrCoords[1],e.usrCoords[2]-t.usrCoords[2]],o.Z.innerProduct(n,a,3)<0&&(h*=-1),h},generateEquidistantTicks:function(t,e){var s,n,a,h=o.Z.eps,l=r.Z.evaluate(this.visProp.minorticks);if(a=this.getDistanceMajorTicks(),this.line.elementClass===i.Z.OBJECT_CLASS_LINE&&(n=this.getXandYdeltas()),a*=r.Z.evaluate(this.visProp.scale),a/=l+1,this.ticksDelta=a,!(a<o.Z.eps)){for(s=0,r.Z.evaluate(this.visProp.drawzero)||(s=a);s<=e.upper+h&&(s>=e.lower-h&&this.processTickPosition(t,s,a,n),s+=a,!(e.upper-s>1e4*a)););for(s=-a;s>=e.lower-h&&(s<=e.upper+h&&this.processTickPosition(t,s,a,n),!((s-=a)-e.lower>1e4*a)););}},getDistanceMajorTicks:function(){var t,e,i,s,n,a,h,l;return r.Z.evaluate(this.visProp.insertticks)?(a=((i=this.getLowerAndUpperBounds(this.getZeroCoordinates(),"")).upper-i.lower)/6/(n=r.Z.evaluate(this.visProp.scale)),h=r.Z.evaluate(this.visProp.minticksdistance)/n,l=r.Z.evaluate(this.visProp.minorticks),(s=this.getXandYdeltas()).x*=this.board.unitX,s.y*=this.board.unitY,h/=o.Z.hypot(s.x,s.y),h*=l+1,2*(t=Math.pow(10,Math.floor(Math.log(h)/Math.LN10)))>=h?t*=2:5*t>=h&&(t*=5),5*(e=Math.pow(10,Math.floor(Math.log(a)/Math.LN10)))<a?e*=5:2*e<a&&(e*=2),t=Math.max(t,e)):r.Z.evaluate(this.visProp.ticksdistance)},processTickPosition:function(t,e,s,o){var n,a,h,l,c,d=r.Z.evaluate(this.visProp.ticksperlabel),p=null;this.line.elementClass===i.Z.OBJECT_CLASS_LINE?(n=t.usrCoords[1]+e*o.x,a=t.usrCoords[2]+e*o.y):(n=this.line.X(t+e),a=this.line.Y(t+e)),h=new u.Z(i.Z.COORDS_BY_USER,[n,a],this.board),this.line.elementClass===i.Z.OBJECT_CLASS_CURVE&&(p=t+e,this.setTicksSizeVariables(p)),h.major=Math.round(e/s)%(r.Z.evaluate(this.visProp.minorticks)+1)==0,d||(d=r.Z.evaluate(this.visProp.minorticks)+1),c=Math.round(e/s)%d==0,3===(l=this.createTickPath(h,h.major)).length&&(this.ticks.push(l),c&&r.Z.evaluate(this.visProp.drawlabels)?this.labelsData.push(this.generateLabelData(this.generateLabelText(h,t,p),h,this.ticks.length)):this.labelsData.push(null))},generateFixedTicks:function(t,e){var s,n,a,h,l,c,d,p,f=o.Z.eps,_=r.Z.isArray(this.visProp.labels),m=r.Z.evaluate(this.visProp.drawlabels);for(this.line.elementClass===i.Z.OBJECT_CLASS_LINE&&(p=this.getXandYdeltas()),a=0;a<this.fixedTicks.length;a++)this.line.elementClass===i.Z.OBJECT_CLASS_LINE?(d=this.fixedTicks[a],l=t.usrCoords[1]+d*p.x,c=t.usrCoords[2]+d*p.y):(d=t+this.fixedTicks[a],l=this.line.X(d),c=this.line.Y(d)),s=new u.Z(i.Z.COORDS_BY_USER,[l,c],this.board),this.line.elementClass===i.Z.OBJECT_CLASS_CURVE&&this.setTicksSizeVariables(d),3===(h=this.createTickPath(s,!0)).length&&d>=e.lower-f&&d<=e.upper+f&&(this.ticks.push(h),m&&(_||r.Z.exists(this.visProp.labels[a]))?(n=_?r.Z.evaluate(this.visProp.labels[a]):d,this.labelsData.push(this.generateLabelData(this.generateLabelText(s,t,n),s,a))):this.labelsData.push(null))},getXandYdeltas:function(){var t,e,i=this.line.point1.Dist(this.line.point2);return t=this.line.point1.coords.usrCoords,{x:((e=this.line.point2.coords.usrCoords)[1]-t[1])/i,y:(e[2]-t[2])/i}},_isInsideCanvas:function(t,e,i){var r=this.board.canvasWidth,s=this.board.canvasHeight;return void 0===i&&(i=0),t[0]>=i&&t[0]<=r-i&&e[0]>=i&&e[0]<=s-i||t[1]>=i&&t[1]<=r-i&&e[1]>=i&&e[1]<=s-i},createTickPath:function(t,e){var i,s,n,a,l,c,d,u,p,f,_,m,g,b,v,Z,C,y=[-2e6,-2e6],P=[-2e6,-2e6];if(i=t.scrCoords,e?(a=this.dxMaj,l=this.dyMaj,p=this.majStyle,v=r.Z.evaluate(this.visProp.majortickendings[0])>0,Z=r.Z.evaluate(this.visProp.majortickendings[1])>0):(a=this.dxMin,l=this.dyMin,p=this.minStyle,v=r.Z.evaluate(this.visProp.tickendings[0])>0,Z=r.Z.evaluate(this.visProp.tickendings[1])>0),s=[-l*i[1]-a*i[2],l,a],e&&"polar"===r.Z.evaluate(this.visProp.type)){if(m=this.board.getBoundingBox(),b=(g=2*Math.PI)/180,i=t.usrCoords,(_=o.Z.hypot(i[1],i[2]))<Math.max(o.Z.hypot(m[0],m[1]),o.Z.hypot(m[2],m[3]))){for(y=[],P=[],f=0;f<=g;f+=b)y.push(this.board.origin.scrCoords[1]+_*Math.cos(f)*this.board.unitX),P.push(this.board.origin.scrCoords[2]+_*Math.sin(f)*this.board.unitY);return[y,P,e]}}else{if("infinite"===p){if(r.Z.evaluate(this.visProp.ignoreinfinitetickendings)&&(v=Z=!0),n=h.Z.meetLineBoard(s,this.board),v&&Z)y[0]=n[0].scrCoords[1],y[1]=n[1].scrCoords[1],P[0]=n[0].scrCoords[2],P[1]=n[1].scrCoords[2];else if((C=[o.Z.innerProduct(n[0].usrCoords.slice(1,3),this.line.stdform.slice(1,3))+this.line.stdform[0],o.Z.innerProduct(n[1].usrCoords.slice(1,3),this.line.stdform.slice(1,3))+this.line.stdform[0]])[0]<C[1]&&(n.reverse(),C.reverse()),v){if(C[0]<0)return[];C[1]<0?(y[0]=n[0].scrCoords[1],P[0]=n[0].scrCoords[2],y[1]=i[1],P[1]=i[2]):(y[0]=n[0].scrCoords[1],P[0]=n[0].scrCoords[2],y[1]=n[1].scrCoords[1],P[1]=n[1].scrCoords[2])}else if(Z){if(C[1]>0)return[];C[0]>0?(y[0]=i[1],P[0]=i[2],y[1]=n[1].scrCoords[1],P[1]=n[1].scrCoords[2]):(y[0]=n[0].scrCoords[1],P[0]=n[0].scrCoords[2],y[1]=n[1].scrCoords[1],P[1]=n[1].scrCoords[2])}}else u=">"===r.Z.evaluate(this.visProp.face)?Math.PI/4:"<"===r.Z.evaluate(this.visProp.face)?-Math.PI/4:0,c=Math.cos(u)*a-Math.sin(u)*l,d=Math.sin(u)*a+Math.cos(u)*l,y[0]=i[1]+c*v,P[0]=i[2]-d*v,y[1]=i[1],P[1]=i[2],u=-u,c=Math.cos(u)*a-Math.sin(u)*l,d=Math.sin(u)*a+Math.cos(u)*l,y[2]=i[1]-c*Z,P[2]=i[2]+d*Z;if(this._isInsideCanvas(y,P))return[y,P,e]}return[]},formatLabelText:function(t){var e,i,s=r.Z.evaluate(this.visProp.label.usemathjax),o=r.Z.evaluate(this.visProp.label.usekatex),n=r.Z.evaluate(this.visProp.scalesymbol);return r.Z.isNumber(t)?(r.Z.evaluate(this.visProp.label.tofraction)?e=s?"\\("+r.Z.toFraction(t,!0)+"\\)":r.Z.toFraction(t,o):(i=r.Z.evaluate(this.visProp.digits),this.useLocale()?e=this.formatNumberLocale(t,i):((e=(Math.round(1e11*t)/1e11).toString()).length>r.Z.evaluate(this.visProp.maxlabellength)||-1!==e.indexOf("e"))&&(3!==r.Z.evaluate(this.visProp.precision)&&3===i&&(i=r.Z.evaluate(this.visProp.precision)),e=t.toExponential(i).toString())),r.Z.evaluate(this.visProp.beautifulscientificticklabels)&&(e=this.beautifyScientificNotationLabel(e)),e.indexOf(".")>-1&&-1===e.indexOf("e")&&(e=(e=e.replace(/0+$/,"")).replace(/\.$/,""))):e=t.toString(),n.length>0&&("1"===e?e=n:"-1"===e?e="-"+n:"0"!==e&&(e+=n)),r.Z.evaluate(this.visProp.useunicodeminus)&&(e=e.replace(/-/g,"−")),e},beautifyScientificNotationLabel:function(t){return-1===t.indexOf("e")?t:(parseFloat(t.substring(0,t.indexOf("e")))+t.substring(t.indexOf("e"))).replace(/e(.*)$/g,(function(t,e){var i="•10";return i+=e.replace(/-/g,"⁻").replace(/\+/g,"").replace(/0/g,"⁰").replace(/1/g,"¹").replace(/2/g,"²").replace(/3/g,"³").replace(/4/g,"⁴").replace(/5/g,"⁵").replace(/6/g,"⁶").replace(/7/g,"⁷").replace(/8/g,"⁸").replace(/9/g,"⁹")}))},generateLabelText:function(t,e,i){var s;if(!r.Z.exists(i)){if(s=this.getDistanceFromZero(e,t),Math.abs(s)<o.Z.eps)return"0";i=s/r.Z.evaluate(this.visProp.scale)}return this.formatLabelText(i)},generateLabelData:function(t,e,i){var s,o,n,a;return a=r.Z.evaluate(this.visProp.label.fontsize),s=[e.scrCoords[1],e.scrCoords[1]],o=[e.scrCoords[2],e.scrCoords[2]],n=void 0===a?12:a,n*=.5,this._isInsideCanvas(s,o,n)?(s=r.Z.evaluate(this.visProp.label.offset[0]),o=r.Z.evaluate(this.visProp.label.offset[1]),{x:e.usrCoords[1]+s/this.board.unitX,y:e.usrCoords[2]+o/this.board.unitY,t:t,i:i}):null},update:function(){return this.needsUpdate&&0!==this.board.canvasWidth&&0!==this.board.canvasHeight&&this.calculateTicksCoordinates(),this},updateRenderer:function(){return this.needsUpdate?(this.visPropCalc.visible&&this.board.renderer.updateTicks(this),this.updateRendererLabels(),this.setDisplayRendNode(),this.needsUpdate=!1,this):this},updateRendererLabels:function(){var e,i,s,o,n,a,h,l;for(s=this.labelsData.length,o=this.labels.length,e=0,i=0;e<s;e++)null!==this.labelsData[e]&&(h=this.labelsData[e],i<o?((a=this.labels[i]).setText(h.t),a.setCoords(h.x,h.y),i++):(this.labelCounter+=1,n={isLabel:!0,layer:this.board.options.layer.line,highlightStrokeColor:this.board.options.text.strokeColor,highlightStrokeWidth:this.board.options.text.strokeWidth,highlightStrokeOpacity:this.board.options.text.strokeOpacity,priv:this.visProp.priv},(n=r.Z.deepCopy(n,this.visProp.label)).id=this.id+h.i+"Label"+this.labelCounter,a=t.Z.createText(this.board,[h.x,h.y,h.t],n),this.addChild(a),a.setParents(this),a.isDraggable=!1,a.dump=!1,this.labels.push(a)),"inherit"===(l=r.Z.evaluate(this.visProp.label.visible))&&(l=this.visPropCalc.visible),a.prepareUpdate().updateVisibility(l).updateRenderer(),a.distanceX=r.Z.evaluate(this.visProp.label.offset[0]),a.distanceY=r.Z.evaluate(this.visProp.label.offset[1]));for(i=s=i;i<o;i++)this.board.renderer.display(this.labels[i],!1),this.labels[i].visProp.visible=this.labels[i].visPropCalc.visible=!1;return this},hideElement:function(){var e;for(t.Z.deprecated("Element.hideElement()","Element.setDisplayRendNode()"),this.visPropCalc.visible=!1,this.board.renderer.display(this,!1),e=0;e<this.labels.length;e++)r.Z.exists(this.labels[e])&&this.labels[e].hideElement();return this},showElement:function(){var e;for(t.Z.deprecated("Element.showElement()","Element.setDisplayRendNode()"),this.visPropCalc.visible=!0,this.board.renderer.display(this,!1),e=0;e<this.labels.length;e++)r.Z.exists(this.labels[e])&&this.labels[e].showElement();return this}}),t.Z.createTicks=function(e,s,o){var n,a,h=r.Z.copyAttributes(o,e.options,"ticks");if(a=s.length<2?h.ticksdistance:s[1],s[0].elementClass!==i.Z.OBJECT_CLASS_LINE&&s[0].elementClass!==i.Z.OBJECT_CLASS_CURVE)throw new Error("JSXGraph: Can't create Ticks with parent types '"+typeof s[0]+"'.");return n=new t.Z.Ticks(s[0],a,h),r.Z.isFunction(h.generatelabelvalue)&&(n.generateLabelText=h.generatelabelvalue),r.Z.isFunction(h.generatelabeltext)&&(n.generateLabelText=h.generatelabeltext),n.setParents(s[0]),n.isDraggable=!0,n.fullUpdate(s[0].visPropCalc.visible),n},t.Z.createHatchmark=function(t,e,s){var o,n,a,h,l,c=[],d=r.Z.copyAttributes(s,t.options,"hatch");if(e[0].elementClass!==i.Z.OBJECT_CLASS_LINE&&e[0].elementClass!==i.Z.OBJECT_CLASS_CURVE||"number"!=typeof e[1])throw new Error("JSXGraph: Can't create Hatch mark with parent types '"+typeof e[0]+"' and '"+typeof e[1]+" and ''"+typeof e[2]+"'.");for(a=.5*-(((o=e[1])-1)*(h=d.ticksdistance)),n=0;n<o;n++)c[n]=a+n*h;return(l=t.create("ticks",[e[0],c],d)).elType="hatch",e[0].inherits.push(l),l},t.Z.registerElement("ticks",t.Z.createTicks),t.Z.registerElement("hash",t.Z.createHatchmark),t.Z.registerElement("hatch",t.Z.createHatchmark);t.Z.Ticks;t.Z.CA=function(t,e,i){this.node=t,this.createNode=e,this.parser=i},t.Z.extend(t.Z.CA.prototype,{findMapNode:function(t,e){var i,r,s;if("op_assign"===e.value&&e.children[0].value===t)return e.children[1];if(e.children)for(r=e.children.length,i=0;i<r;++i)if(null!==(s=this.findMapNode(t,e.children[i])))return s;return null},setMath:function(t){var e,i;if(("node_op"!=t.type||"op_add"!=t.value&&"op_sub"!=t.value&&"op_mul"!=t.value&&"op_div"!=t.value&&"op_neg"!=t.value&&"op_execfun"!=t.value&&"op_exp"!=t.value)&&"node_var"!=t.type&&"node_const"!=t.type||(t.isMath=!0),t.children)for(i=t.children.length,e=0;e<i;++e)this.setMath(t.children[e])},deriveElementary:function(t,e){var i,s=t.children[0].value,o=t.children[1];switch(s){case"abs":i=this.createNode("node_op","op_div",o[0],this.createNode("node_op","op_execfun",this.createNode("node_var","sqrt"),[this.createNode("node_op","op_mul",r.Z.deepCopy(o[0]),r.Z.deepCopy(o[0]))]));break;case"sqrt":i=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_mul",this.createNode("node_const",2),this.createNode(t.type,t.value,r.Z.deepCopy(t.children[0]),r.Z.deepCopy(t.children[1]))));break;case"sin":i=this.createNode("node_op","op_execfun",this.createNode("node_var","cos"),r.Z.deepCopy(o));break;case"cos":i=this.createNode("node_op","op_neg",this.createNode("node_op","op_execfun",this.createNode("node_var","sin"),r.Z.deepCopy(o)));break;case"tan":i=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_exp",this.createNode("node_op","op_execfun",this.createNode("node_var","cos"),r.Z.deepCopy(o)),this.createNode("node_const",2)));break;case"cot":i=this.createNode("node_op","op_neg",this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_exp",this.createNode("node_op","op_execfun",this.createNode("node_var","sin"),r.Z.deepCopy(o)),this.createNode("node_const",2))));break;case"exp":i=this.createNode(t.type,t.value,r.Z.deepCopy(t.children[0]),r.Z.deepCopy(t.children[1]));break;case"pow":i=this.createNode("node_op","op_mul",this.createNode("node_op","op_execfun",r.Z.deepCopy(t.children[0]),r.Z.deepCopy(t.children[1])),this.createNode("node_op","op_add",this.createNode("node_op","op_mul",this.derivative(t.children[1][0],e),this.createNode("node_op","op_div",r.Z.deepCopy(t.children[1][1]),r.Z.deepCopy(t.children[1][0]))),this.createNode("node_op","op_mul",this.derivative(t.children[1][1],e),this.createNode("node_op","op_execfun",this.createNode("node_var","log"),[r.Z.deepCopy(t.children[1][0])]))));break;case"log":case"ln":i=this.createNode("node_op","op_div",this.createNode("node_const",1),r.Z.deepCopy(o[0]));break;case"log2":case"lb":case"ld":i=this.createNode("node_op","op_mul",this.createNode("node_op","op_div",this.createNode("node_const",1),r.Z.deepCopy(o[0])),this.createNode("node_const",1.4426950408889634));break;case"log10":case"lg":i=this.createNode("node_op","op_mul",this.createNode("node_op","op_div",this.createNode("node_const",1),r.Z.deepCopy(o[0])),this.createNode("node_const",.43429448190325176));break;case"asin":i=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_execfun",this.createNode("node_var","sqrt"),[this.createNode("node_op","op_sub",this.createNode("node_const",1),this.createNode("node_op","op_mul",r.Z.deepCopy(o[0]),r.Z.deepCopy(o[0])))]));break;case"acos":i=this.createNode("node_op","op_neg",this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_execfun",this.createNode("node_var","sqrt"),[this.createNode("node_op","op_sub",this.createNode("node_const",1),this.createNode("node_op","op_mul",r.Z.deepCopy(o[0]),r.Z.deepCopy(o[0])))])));break;case"atan":i=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_add",this.createNode("node_const",1),this.createNode("node_op","op_mul",r.Z.deepCopy(o[0]),r.Z.deepCopy(o[0]))));break;case"acot":i=this.createNode("node_op","op_neg",this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_add",this.createNode("node_const",1),this.createNode("node_op","op_mul",r.Z.deepCopy(o[0]),r.Z.deepCopy(o[0])))));break;case"sinh":i=this.createNode("node_op","op_execfun",this.createNode("node_var","cosh"),[r.Z.deepCopy(o[0])]);break;case"cosh":i=this.createNode("node_op","op_execfun",this.createNode("node_var","sinh"),[r.Z.deepCopy(o[0])]);break;case"tanh":i=this.createNode("node_op","op_sub",this.createNode("node_const",1),this.createNode("node_op","op_exp",this.createNode("node_op","op_execfun",this.createNode("node_var","tanh"),[r.Z.deepCopy(o[0])]),this.createNode("node_const",2)));break;case"asinh":i=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_execfun",this.createNode("node_var","sqrt"),[this.createNode("node_op","op_add",this.createNode("node_op","op_mul",r.Z.deepCopy(o[0]),r.Z.deepCopy(o[0])),this.createNode("node_const",1))]));break;case"acosh":i=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_execfun",this.createNode("node_var","sqrt"),[this.createNode("node_op","op_sub",this.createNode("node_op","op_mul",r.Z.deepCopy(o[0]),r.Z.deepCopy(o[0])),this.createNode("node_const",1))]));break;case"atanh":i=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_sub",this.createNode("node_const",1),this.createNode("node_op","op_mul",r.Z.deepCopy(o[0]),r.Z.deepCopy(o[0]))));break;default:throw i=this.createNode("node_const",0),console.log('Derivative of "'+s+'" not yet implemented'),new Error("Error("+this.line+"): ")}return i},derivative:function(t,e){var i;switch(t.type){case"node_op":switch(t.value){case"op_execfun":i="pow"==t.children[0].value?this.deriveElementary(t,e):0===t.children[1].length?this.createNode("node_const",0):this.createNode("node_op","op_mul",this.deriveElementary(t,e),this.derivative(t.children[1][0],e));break;case"op_div":i=this.createNode("node_op","op_div",this.createNode("node_op","op_sub",this.createNode("node_op","op_mul",this.derivative(t.children[0],e),r.Z.deepCopy(t.children[1])),this.createNode("node_op","op_mul",r.Z.deepCopy(t.children[0]),this.derivative(t.children[1],e))),this.createNode("node_op","op_mul",r.Z.deepCopy(t.children[1]),r.Z.deepCopy(t.children[1])));break;case"op_mul":i=this.createNode("node_op","op_add",this.createNode("node_op","op_mul",r.Z.deepCopy(t.children[0]),this.derivative(t.children[1],e)),this.createNode("node_op","op_mul",this.derivative(t.children[0],e),r.Z.deepCopy(t.children[1])));break;case"op_neg":i=this.createNode("node_op","op_neg",this.derivative(t.children[0],e));break;case"op_add":case"op_sub":i=this.createNode("node_op",t.value,this.derivative(t.children[0],e),this.derivative(t.children[1],e));break;case"op_exp":i=this.createNode("node_op","op_mul",r.Z.deepCopy(t),this.createNode("node_op","op_add",this.createNode("node_op","op_mul",this.derivative(t.children[0],e),this.createNode("node_op","op_div",r.Z.deepCopy(t.children[1]),r.Z.deepCopy(t.children[0]))),this.createNode("node_op","op_mul",this.derivative(t.children[1],e),this.createNode("node_op","op_execfun",this.createNode("node_var","log"),[r.Z.deepCopy(t.children[0])]))))}break;case"node_var":i=t.value===e?this.createNode("node_const",1):this.createNode("node_const",0);break;case"node_const":i=this.createNode("node_const",0)}return i},expandDerivatives:function(t,e,i){var s,o,n,a,h,l,c,d,u,p,f,_;if(0,!t)return 0;for(this.line=t.line,this.col=t.col,s=t.children.length,o=0;o<s;++o)if(t.children[o]&&t.children[o].type)t.children[o]=this.expandDerivatives(t.children[o],t,i);else if(r.Z.isArray(t.children[o]))for(n=0;n<t.children[o].length;++n)t.children[o][n]&&t.children[o][n].type&&(t.children[o][n]=this.expandDerivatives(t.children[o][n],t,i));if("node_op"===t.type)if("op_execfun"===t.value)if(t.children[0]&&"D"===t.children[0].value){if(_=!1,"node_var"==t.children[1][0].type&&(d=t.children[1][0].value,null!==(a=this.findMapNode(d,i))&&(_=!0)),_?(p=a.children[0],u=t.children[1].length>=2?t.children[1][1].value:a.children[0][0],h=a.children[1]):(h=t.children[1][0],p=["x"],u=t.children[1].length>=2?t.children[1][1].value:"x"),c=h,(f=t.children[1].length>=3?t.children[1][2].value:1)>=1)for(;f>=1;)c=this.derivative(c,u),c=this.removeTrivialNodes(c),f--;l="node_op"==e.type&&"op_assign"==e.value?this.createNode("node_op","op_map",p,c):c,this.setMath(l),t.type=l.type,t.value=l.value,l.children.length>0&&(t.children[0]=l.children[0]),l.children.length>1&&(t.children[1]=l.children[1])}return t},removeTrivialNodes:function(t){var e,i,s,o,n;if(r.Z.isArray(t))for(i=t.length,e=0;e<i;++e)t[e]=this.removeTrivialNodes(t[e]);if("node_op"!=t.type||!t.children)return t;for(i=t.children.length,e=0;e<i;++e){this.mayNotBeSimplified=!1;do{t.children[e]=this.removeTrivialNodes(t.children[e])}while(this.mayNotBeSimplified)}switch(t.value){case"op_map":if(s=t.children[0],"node_var"==(o=t.children[1]).type)for(e=0;e<s.length;++e)if(s[e]==o.value){o.isMath=!0;break}break;case"op_add":if(s=t.children[0],o=t.children[1],"node_const"==s.type&&0===s.value)return o;if("node_const"==o.type&&0===o.value)return s;if("node_const"==s.type&&"node_const"==o.type)return s.value+=o.value,s;break;case"op_mul":if(s=t.children[0],o=t.children[1],"node_const"==s.type&&1==s.value)return o;if("node_const"==o.type&&1==o.value)return s;if("node_const"==s.type&&0===s.value)return s;if("node_const"==o.type&&0===o.value)return o;if("node_const"==o.type&&0===o.value)return o;if("node_op"==s.type&&"op_neg"==s.value&&"node_op"==o.type&&"op_neg"==o.value)return t.children=[s.children[0],o.children[0]],this.mayNotBeSimplified=!0,t;if("op_neg"==s.value&&"op_neg"!=o.value)return t.type="node_op",t.value="op_neg",t.children=[this.createNode("node_op","op_mul",s.children[0],o)],this.mayNotBeSimplified=!0,t;if("op_neg"!=s.value&&"op_neg"==o.value)return t.type="node_op",t.value="op_neg",t.children=[this.createNode("node_op","op_mul",s,o.children[0])],this.mayNotBeSimplified=!0,t;if("op_div"==s.value&&"node_const"==s.children[0].type&&1==s.children[0].value)return t.type="node_op",t.value="op_div",t.children=[o,s.children[1]],this.mayNotBeSimplified=!0,t;if("op_div"==o.value&&"node_const"==o.children[0].type&&1==o.children[0].value)return t.type="node_op",t.value="op_div",t.children=[s,o.children[1]],this.mayNotBeSimplified=!0,t;if("node_const"!=s.type&&"node_const"==o.type)return t.children=[o,s],this.mayNotBeSimplified=!0,t;if("node_const"!=s.type&&"node_op"==o.type&&"op_neg"==o.value&&"node_const"==o.children[0].type)return t.children=[o,s],this.mayNotBeSimplified=!0,t;if("node_op"==s.type&&"op_execfun"!=s.value&&("node_var"==o.type||"node_op"==o.type&&"op_execfun"==o.value))return t.children=[o,s],this.mayNotBeSimplified=!0,t;if("node_op"!=s.type&&"node_op"==o.type&&"op_neg"==o.value&&"node_var"==o.children[0].type)return t.children=[o,s],this.mayNotBeSimplified=!0,t;if("node_const"!=s.type&&"node_op"==o.type&&("op_mul"==o.value||"op_div"==o.value)&&"node_const"==o.children[0].type)return n=o.children[0],o.children[0]=s,t.children=[n,o],this.mayNotBeSimplified=!0,t;if("node_const"!=o.type&&"node_op"==s.type&&"op_mul"==s.value&&"node_const"==s.children[0].type)return t.children=[s.children[0],this.createNode("node_op","op_mul",s.children[1],o)],this.mayNotBeSimplified=!0,t;if("node_const"==s.type&&"node_const"==o.type)return s.value*=o.value,s;if("node_const"==s.type&&"node_op"==o.type&&("op_mul"==o.value||"op_div"==o.value)&&"node_const"==o.children[0].type)return o.children[0].value*=s.value,o;if(s.hash=this.parser.compile(s),o.hash=this.parser.compile(o),s.hash===o.hash)return t.value="op_exp",t.children[1]=this.createNode("node_const",2),t;if("node_const"==s.type&&"node_op"==o.type&&("op_mul"==o.value||"op_div"==o.value)&&"node_const"==o.children[0].type)return o.children[0].value*=s.value,o;if("node_op"==o.type&&"op_exp"==o.value&&(s.hash||(s.hash=this.parser.compile(s)),o.children[0].hash||(o.children[0].hash=this.parser.compile(o.children[0])),s.hash===o.children[0].hash))return o.children[1]=this.createNode("node_op","op_add",o.children[1],this.createNode("node_const",1)),this.mayNotBeSimplified=!0,o;if("node_op"==s.type&&"op_exp"==s.value&&"node_op"==o.type&&"op_exp"==o.value&&(s.children[0].hash=this.parser.compile(s.children[0]),o.children[0].hash=this.parser.compile(o.children[0]),s.children[0].hash===o.children[0].hash))return s.children[1]=this.createNode("node_op","op_add",s.children[1],o.children[1]),this.mayNotBeSimplified=!0,s;break;case"op_sub":if(s=t.children[0],o=t.children[1],"node_const"==s.type&&0===s.value)return t.value="op_neg",t.children[0]=o,t;if("node_const"==o.type&&0===o.value)return s;if("node_const"==s.type&&"node_const"==o.type&&s.value==o.value)return this.createNode("node_const",0);if("node_var"==s.type&&"node_var"==o.type&&s.value==o.value)return this.createNode("node_const",0);if("node_const"==s.type&&"node_const"==o.type)return s.value-=o.value,s;if("node_op"==s.type&&"op_mul"==s.value&&"node_op"==o.type&&"op_mul"==o.value&&(s.children[1].hash=this.parser.compile(s.children[1]),o.children[1].hash=this.parser.compile(o.children[1]),s.children[1].hash===o.children[1].hash))return t.value="op_mul",t.children=[this.createNode("node_op","op_sub",s.children[0],o.children[0]),s.children[1]],this.mayNotBeSimplified=!0,t;if("node_op"==s.type&&"op_mul"==s.value&&(s.children[1].hash=this.parser.compile(s.children[1]),o.hash=this.parser.compile(o),s.children[1].hash===o.hash))return t.value="op_mul",t.children=[this.createNode("node_op","op_sub",s.children[0],this.createNode("node_const",1)),o],this.mayNotBeSimplified=!0,t;if("node_op"==o.type&&"op_mul"==o.value&&(o.children[1].hash=this.parser.compile(o.children[1]),s.hash=this.parser.compile(s),o.children[1].hash===s.hash))return t.value="op_mul",t.children=[this.createNode("node_op","op_sub",this.createNode("node_const",1),o.children[0]),s],this.mayNotBeSimplified=!0,t;break;case"op_neg":if("node_const"==(s=t.children[0]).type&&0===s.value)return s;if("node_op"==s.type&&"op_neg"==s.value)return s.children[0];break;case"op_div":if(s=t.children[0],o=t.children[1],"node_const"==s.type&&"node_const"==o.type&&s.value==o.value&&0!==s.value)return s.value=1,s;if("node_const"==s.type&&0===s.value&&"node_const"==o.type&&0!==o.value)return s.value=0,s;if("node_const"==s.type&&0===s.value&&("node_op"==o.type||"node_var"==o.type))return t.type="node_const",t.value=0,t;if("node_var"==s.type&&"node_var"==o.type&&s.value==o.value)return this.createNode("node_const",1);if("node_const"==s.type&&0!==s.value&&"node_const"==o.type&&0===o.value)return s.value>0?s.value=1/0:s.value=-1/0,s;if("node_op"==s.type&&"op_neg"==s.value&&"node_op"==o.type&&"op_neg"==o.value)return t.children=[s.children[0],o.children[0]],this.mayNotBeSimplified=!0,t;if("op_neg"==s.value&&"op_neg"!=o.value)return t.type="node_op",t.value="op_neg",t.children=[this.createNode("node_op","op_div",s.children[0],o)],this.mayNotBeSimplified=!0,t;if("op_neg"!=s.value&&"op_neg"==o.value)return t.type="node_op",t.value="op_neg",t.children=[this.createNode("node_op","op_div",s,o.children[0])],this.mayNotBeSimplified=!0,t;if("node_op"==s.type&&"op_exp"==s.value&&(o.hash||(o.hash=this.parser.compile(o)),s.children[0].hash||(s.children[0].hash=this.parser.compile(s.children[0])),o.hash===s.children[0].hash))return s.children[1]=this.createNode("node_op","op_sub",s.children[1],this.createNode("node_const",1)),this.mayNotBeSimplified=!0,s;if("node_const"!=o.type&&"node_op"==s.type&&"op_mul"==s.value&&"node_const"==s.children[0].type)return t.value="op_mul",t.children=[s.children[0],this.createNode("node_op","op_div",s.children[1],o)],this.mayNotBeSimplified=!0,t;if("node_op"==s.type&&"op_exp"==s.value&&"node_op"==o.type&&"op_exp"==o.value&&(s.children[0].hash=this.parser.compile(s.children[0]),o.children[0].hash=this.parser.compile(o.children[0]),s.children[0].hash===o.children[0].hash))return s.children[1]=this.createNode("node_op","op_sub",s.children[1],o.children[1]),this.mayNotBeSimplified=!0,s;break;case"op_exp":if(s=t.children[0],"node_const"==(o=t.children[1]).type&&0===o.value)return o.value=1,o;if("node_const"==o.type&&1==o.value)return s;if("node_const"==s.type&&1==s.value)return s;if("node_const"==s.type&&0===s.value&&"node_const"==o.type&&0!==o.value)return s;if("node_op"==s.type&&"op_exp"==s.value)return t.children=[s.children[0],this.createNode("node_op","op_mul",s.children[1],o)],t}switch(t.value){case"op_add":if(s=t.children[0],o=t.children[1],"node_const"==s.type&&"node_const"==o.type&&s.value==o.value)return s.value+=o.value,s;if("node_var"==s.type&&"node_var"==o.type&&s.value==o.value)return t.children[0]=this.createNode("node_const",2),t.value="op_mul",t;if("node_op"==s.type&&"op_neg"==s.value)return t.value="op_sub",t.children[0]=o,t.children[1]=s.children[0],this.mayNotBeSimplified=!0,t;if("node_op"==o.type&&"op_neg"==o.value)return t.value="op_sub",t.children[1]=o.children[0],this.mayNotBeSimplified=!0,t;if("node_op"==s.type&&"op_mul"==s.value&&"node_op"==o.type&&"op_mul"==o.value&&(s.children[1].hash=this.parser.compile(s.children[1]),o.children[1].hash=this.parser.compile(o.children[1]),s.children[1].hash===o.children[1].hash))return t.value="op_mul",t.children=[this.createNode("node_op","op_add",s.children[0],o.children[0]),s.children[1]],this.mayNotBeSimplified=!0,t;if("node_op"==s.type&&"op_mul"==s.value&&(s.children[1].hash=this.parser.compile(s.children[1]),o.hash=this.parser.compile(o),s.children[1].hash===o.hash))return t.value="op_mul",t.children=[this.createNode("node_op","op_add",s.children[0],this.createNode("node_const",1)),o],this.mayNotBeSimplified=!0,t;if("node_op"==o.type&&"op_mul"==o.value&&(o.children[1].hash=this.parser.compile(o.children[1]),s.hash=this.parser.compile(s),o.children[1].hash===s.hash))return t.value="op_mul",t.children=[this.createNode("node_op","op_add",this.createNode("node_const",1),o.children[0]),s],this.mayNotBeSimplified=!0,t;break;case"op_sub":if(s=t.children[0],"node_op"==(o=t.children[1]).type&&"op_neg"==o.value)return t.value="op_add",t.children[1]=o.children[0],this.mayNotBeSimplified=!0,t;break;case"op_execfun":return this.simplifyElementary(t)}return t},simplifyElementary:function(t){var e=t.children[0].value,i=t.children[1];if(0==i.length)return t;switch(e){case"sin":case"tan":if("node_const"==i[0].type&&0===i[0].value)return t.type="node_const",t.value=0,t;if("node_var"==i[0].type&&"PI"==i[0].value)return t.type="node_const",t.value=0,t;if("node_op"==i[0].type&&"op_mul"==i[0].value&&"node_const"==i[0].children[0].type&&i[0].children[0].value%1==0&&"node_var"==i[0].children[1].type&&"PI"==i[0].children[1].value)return t.type="node_const",t.value=0,t;break;case"cos":if("node_const"==i[0].type&&0===i[0].value)return t.type="node_const",t.value=1,t;if("node_var"==i[0].type&&"PI"==i[0].value)return t.type="node_op",t.value="op_neg",t.children=[this.createNode("node_const",1)],t;break;case"exp":if("node_const"==i[0].type&&0===i[0].value)return t.type="node_const",t.value=1,t;break;case"pow":if("node_const"==i[1].type&&0===i[1].value)return t.type="node_const",t.value=1,t}return t}});t.Z.CA;t.Z.Dump={addMarkers:function(t,e,i){var s,o,n;for(s in r.Z.isArray(e)||(e=[e]),r.Z.isArray(i)||(i=[i]),o=Math.min(e.length,i.length),e.length=o,i.length=o,t.objects)if(t.objects.hasOwnProperty(s))for(n=0;n<o;n++)t.objects[s][e[n]]=i[n]},deleteMarkers:function(t,e){var i,s,o;for(i in r.Z.isArray(e)||(e=[e]),s=e.length,e.length=s,t.objects)if(t.objects.hasOwnProperty(i))for(o=0;o<s;o++)delete t.objects[i][e[o]]},str:function(t){return"string"==typeof t&&"function"!==t.slice(0,7)&&(t='"'+t+'"'),t},minimizeObject:function(e,i){var s,o,n,a={},h=r.Z.deepCopy(e),l=[];for(n=1;n<arguments.length;n++)l.push(arguments[n]);for(a=r.Z.deepCopy(a,t.Z.Options.elements,!0),n=l.length;n>0;n--)a=r.Z.deepCopy(a,l[n-1],!0);for(s in a)a.hasOwnProperty(s)&&(o=s.toLowerCase(),"object"!=typeof a[s]&&a[s]===h[o]&&delete h[o]);return h},prepareAttributes:function(e,i){var r,s;for(s in r=this.minimizeObject(i.getAttributes(),t.Z.Options[i.elType]),i.subs)i.subs.hasOwnProperty(s)&&(r[s]=this.minimizeObject(i.subs[s].getAttributes(),t.Z.Options[i.elType][s],t.Z.Options[i.subs[s].elType]),r[s].id=i.subs[s].id,r[s].name=i.subs[s].name);return r.id=i.id,r.name=i.name,r},setBoundingBox:function(t,e,i){return t.push({obj:i,method:"setBoundingBox",params:[e.getBoundingBox(),e.keepaspectratio]}),t},dump:function(t){var e,i,s,o,n=[],a=[],h=t.objectsList.length;for(this.addMarkers(t,"dumped",!1),e=0;e<h;e++)if(s={},!(i=t.objectsList[e]).dumped&&i.dump){for(s.type=i.getType(),s.parents=i.getParents().slice(),"point"===s.type&&1===s.parents[0]&&(s.parents=s.parents.slice(1)),o=0;o<s.parents.length;o++)r.Z.isString(s.parents[o])&&"'"!==s.parents[o][0]&&'"'!==s.parents[o][0]?s.parents[o]='"'+s.parents[o]+'"':r.Z.isArray(s.parents[o])&&(s.parents[o]="["+s.parents[o].toString()+"]");s.attributes=this.prepareAttributes(t,i),"glider"===s.type&&i.onPolygon&&n.push({obj:i.id,prop:"onPolygon",val:!0}),a.push(s)}return this.deleteMarkers(t,"dumped"),{elements:a,props:n,methods:[]}},arrayToParamStr:function(t,e){var i,r=[];for(i=0;i<t.length;i++)r.push(e.call(this,t[i]));return r.join(", ")},toJCAN:function(t){var e,i,s;switch(typeof t){case"object":if(t){if(i=[],r.Z.isArray(t)){for(e=0;e<t.length;e++)i.push(this.toJCAN(t[e]));return"["+i.join(",")+"]"}for(s in t)t.hasOwnProperty(s)&&i.push(s+": "+this.toJCAN(t[s]));return"<<"+i.join(", ")+">> "}return"null";case"string":return"'"+t.replace(/\\/g,"\\\\").replace(/(["'])/g,"\\$1")+"'";case"number":case"boolean":return t.toString();case"null":return"null"}},toJessie:function(t){var e,i,r,s=this.dump(t),o=[];for(s.methods=this.setBoundingBox(s.methods,t,"$board"),i=s.elements,e=0;e<i.length;e++)i[e].attributes.name.length>0&&o.push("// "+i[e].attributes.name),o.push("s"+e+" = "+i[e].type+"("+i[e].parents.join(", ")+") "+this.toJCAN(i[e].attributes).replace(/\n/,"\\n")+";"),"axis"===i[e].type&&(r=i[e].attributes.id,null===t.objects[r].defaultTicks&&o.push("s"+e+".removeAllTicks();")),o.push("");for(e=0;e<s.methods.length;e++)o.push(s.methods[e].obj+"."+s.methods[e].method+"("+this.arrayToParamStr(s.methods[e].params,this.toJCAN)+");"),o.push("");for(e=0;e<s.props.length;e++)o.push(s.props[e].obj+"."+s.props[e].prop+" = "+this.toJCAN(s.props[e].val)+";"),o.push("");return o.join("\n")},toJavaScript:function(t){var e,i,s,o=this.dump(t),n=[];for(o.methods=this.setBoundingBox(o.methods,t,"board"),i=o.elements,e=0;e<i.length;e++)n.push('board.create("'+i[e].type+'", ['+i[e].parents.join(", ")+"], "+r.Z.toJSON(i[e].attributes)+");"),"axis"===i[e].type&&(s=i[e].attributes.id,null===t.objects[s].defaultTicks&&n.push('board.objects["'+s+'"].removeTicks(board.objects["'+s+'"].defaultTicks);'));for(e=0;e<o.methods.length;e++)n.push(o.methods[e].obj+"."+o.methods[e].method+"("+this.arrayToParamStr(o.methods[e].params,r.Z.toJSON)+");"),n.push("");for(e=0;e<o.props.length;e++)n.push(o.props[e].obj+"."+o.props[e].prop+" = "+r.Z.toJSON(o.props[e].val)+";"),n.push("");return n.join("\n")}};t.Z.Dump;t.Z.createComb=function(e,i,s){var o,n,a,h,l;if(2!==i.length)throw l=i.map((function(t){return"'"+typeof t+"'"})),new Error("JSXGraph: Can't create comb with parent types "+l.join(", ")+".\nPossible parent types: [point,point], [[x1,y1],[x2,y2]]");if(r.Z.isArray(i[0])&&i[0].length>1)h=r.Z.copyAttributes(s,e.options,"comb","point1"),o=e.create("point",i[0],h);else if(r.Z.isString(i[0])||r.Z.isPoint(i[0]))o=e.select(i[0]);else if(r.Z.isFunction(i[0])&&r.Z.isPoint(i[0]()))o=i[0]();else{if(!(r.Z.isFunction(i[0])&&i[0]().length&&i[0]().length>=2))throw new Error("JSXGraph: Can't create comb with parent types '"+typeof i[0]+"' and '"+typeof i[1]+"'.\nPossible parent types: [point,point], [[x1,y1],[x2,y2]]");h=r.Z.copyAttributes(s,e.options,"comb","point1"),o=t.Z.createPoint(e,i[0](),h)}if(r.Z.isArray(i[1])&&i[1].length>1)h=r.Z.copyAttributes(s,e.options,"comb","point2"),n=e.create("point",i[1],h);else if(r.Z.isString(i[1])||r.Z.isPoint(i[1]))n=e.select(i[1]);else if(r.Z.isFunction(i[1])&&r.Z.isPoint(i[1]()))n=i[1]();else{if(!(r.Z.isFunction(i[1])&&i[1]().length&&i[1]().length>=2))throw new Error("JSXGraph: Can't create comb with parent types '"+typeof i[0]+"' and '"+typeof i[1]+"'.\nPossible parent types: [point,point], [[x1,y1],[x2,y2]]");h=r.Z.copyAttributes(s,e.options,"comb","point2"),n=t.Z.createPoint(e,i[1](),h)}return h=r.Z.copyAttributes(s,e.options,"comb"),(a=e.create("curve",[[0],[0]],h)).updateDataArray=function(){var t,e,i,s,h,l,c,d,u,p,f=0,_=o.Dist(n),m=o,g=n;for(d=r.Z.evaluate(a.visProp.frequency),u=-r.Z.evaluate(a.visProp.angle),p=r.Z.evaluate(a.visProp.width),r.Z.evaluate(a.visProp.reverse)&&(m=n,g=o,u=-u),t=Math.cos(u),e=Math.sin(u),i=(g.X()-m.X())/_,s=(g.Y()-m.Y())/_,t*=p/Math.abs(e),e*=p/Math.abs(e),this.dataX=[],this.dataY=[];f<_;)h=m.X()+i*f,l=m.Y()+s*f,e*=c=Math.min(t,_-f)/Math.abs(t),t*=c,this.dataX.push(h),this.dataY.push(l),this.dataX.push(h+i*t+s*e),this.dataY.push(l-i*e+s*t),this.dataX.push(NaN),this.dataY.push(NaN),f+=d},a},t.Z.registerElement("comb",t.Z.createComb);var et=function(){q.prototype.remove.call(this),this.board.removeObject(this.toppoint),this.board.removeObject(this.glider),this.board.removeObject(this.baseline),this.board.removeObject(this.basepoint),this.board.removeObject(this.label),this._isPrivateTangent&&this.board.removeObject(this.tangent)},it=function(){return this.tangent.getSlope()},rt=function(){return this.tangent.Direction()};t.Z.createSlopeTriangle=function(e,s,o){var n,a,h,l,c,d,u,p,f,_=!1;if(1===s.length&&s[0].type===i.Z.OBJECT_TYPE_TANGENT)a=s[0],h=a.glider;else if(1===s.length&&s[0].type===i.Z.OBJECT_TYPE_GLIDER)h=s[0],f=r.Z.copyAttributes(o,e.options,"slopetriangle","tangent"),a=e.create("tangent",[h],f),_=!0;else{if(2!==s.length||s[0].elementClass!==i.Z.OBJECT_CLASS_LINE||!r.Z.isPoint(s[1]))throw new Error("JSXGraph: Can't create slope triangle with parent types '"+typeof s[0]+"'.");a=s[0],h=s[1]}return f=r.Z.copyAttributes(o,e.options,"slopetriangle","basepoint"),u=e.create("point",[function(){return[h.X()+1,h.Y()]}],f),f=r.Z.copyAttributes(o,e.options,"slopetriangle","baseline"),d=e.create("line",[h,u],f),f=r.Z.copyAttributes(o,e.options,"slopetriangle","glider"),l=e.create("glider",[h.X()+1,h.Y(),d],f),f=r.Z.copyAttributes(o,e.options,"slopetriangle","toppoint"),c=e.create("point",[function(){return[l.X(),l.Y()+(l.X()-h.X())*a.getSlope()]}],f),f=r.Z.copyAttributes(o,e.options,"slopetriangle"),(n=e.create("polygon",[h,l,c],f)).Value=it,n.Direction=rt,n.tangent=a,n._isPrivateTangent=_,n.borders[2].setArrow(!1,!1),f=r.Z.copyAttributes(o,e.options,"slopetriangle","label"),(f=r.Z.copyAttributes(f,e.options,"label")).isLabel=!0,f.anchor=n.borders[1],f.priv=n.borders[1].visProp.priv,f.id=n.borders[1].id+"Label",(p=e.create("text",[0,0,function(){return""}],f)).needsUpdate=!0,p.dump=!1,n.borders[1].label=p,n.borders[1].hasLabel=!0,n.borders[1].visProp.withlabel=!0,p._setText((function(){var t=r.Z.evaluate(p.visProp.digits);return p.useLocale()?p.formatNumberLocale(n.Value(),t):r.Z.toFixed(n.Value(),t)})),p.fullUpdate(),n.glider=l,n.basepoint=u,n.baseline=d,n.toppoint=c,n.label=p,n.subs={glider:l,basePoint:u,baseLine:d,topPoint:c,label:p},n.inherits.push(l,u,d,c,p),n.methodMap=t.Z.deepCopy(n.methodMap,{tangent:"tangent",glider:"glider",basepoint:"basepoint",baseline:"baseline",toppoint:"toppoint",label:"label",Value:"Value",V:"Value",Direction:"Direction"}),n.remove=et,n},t.Z.registerElement("slopetriangle",t.Z.createSlopeTriangle);var st=function(){this._value=this.rendNodeCheckbox.checked,this.board.update()};t.Z.createCheckbox=function(i,s,o){var n,a,h=r.Z.copyAttributes(o,i.options,"checkbox");return a=[s[0],s[1],'<span style="display:inline"><input type="checkbox" /><label for=""></label></span>'],(n=i.create("text",a,h)).type=r.Z.OBJECT_TYPE_CHECKBOX,n.rendNodeCheckbox=n.rendNode.childNodes[0].childNodes[0],n.rendNodeLabel=n.rendNode.childNodes[0].childNodes[1],n.rendNodeTag=n.rendNodeCheckbox,n.rendNodeTag.disabled=!!h.disabled,n.rendNodeCheckbox.id=n.rendNode.id+"_checkbox",n.rendNodeLabel.id=n.rendNode.id+"_label",n.rendNodeLabel.setAttribute("for",n.rendNodeCheckbox.id),n.setText(s[2]),n.visPropOld.fontsize="0px",i.renderer.updateTextStyle(n,!1),n.rendNodeCheckbox.checked=h.checked,n._value=h.checked,n.Value=function(){return this._value},n.update=function(){return this.needsUpdate&&(t.Z.Text.prototype.update.call(this),this._value=this.rendNodeCheckbox.checked),this},e.Z.addEvent(n.rendNodeCheckbox,"change",st,n),n},t.Z.registerElement("checkbox",t.Z.createCheckbox);var ot=function(t){this._value=this.rendNodeInput.value,this.board.update()};t.Z.createInput=function(i,s,o){var n,a,h=r.Z.copyAttributes(o,i.options,"input");return a=[s[0],s[1],'<span style="display:inline; white-space:nowrap; padding:0px;"><span></span><input type="text" maxlength="'+h.maxlength+'" style="width:100%"/></span>'],(n=i.create("text",a,h)).type=r.Z.OBJECT_TYPE_INPUT,n.rendNodeLabel=n.rendNode.childNodes[0].childNodes[0],n.rendNodeInput=n.rendNode.childNodes[0].childNodes[1],n.rendNodeInput.value=s[2],n.rendNodeTag=n.rendNodeInput,n.rendNodeTag.disabled=!!h.disabled,n.rendNodeLabel.id=n.rendNode.id+"_label",n.rendNodeInput.id=n.rendNode.id+"_input",n.setText(s[3]),n._value=s[2],n.update=function(){return this.needsUpdate&&(t.Z.Text.prototype.update.call(this),this._value=this.rendNodeInput.value),this},n.Value=function(){return this._value},n.set=function(t){return this._value=t,this.rendNodeInput.value=t,this},e.Z.addEvent(n.rendNodeInput,"input",ot,n),e.Z.addEvent(n.rendNodeInput,"mousedown",(function(t){r.Z.exists(t.stopPropagation)&&t.stopPropagation()}),n),e.Z.addEvent(n.rendNodeInput,"touchstart",(function(t){r.Z.exists(t.stopPropagation)&&t.stopPropagation()}),n),e.Z.addEvent(n.rendNodeInput,"pointerdown",(function(t){r.Z.exists(t.stopPropagation)&&t.stopPropagation()}),n),n.visPropOld.fontsize="0px",i.renderer.updateTextStyle(n,!1),n},t.Z.registerElement("input",t.Z.createInput);var nt=function(){this._handler&&this._handler(),this.board.update()};t.Z.createButton=function(i,s,o){var n,a,h=r.Z.copyAttributes(o,i.options,"button");return a=[s[0],s[1],'<button type="button" style="width:100%;"></button>'],(n=i.create("text",a,h)).type=r.Z.OBJECT_TYPE_BUTTON,n.rendNodeButton=n.rendNode.childNodes[0],n.rendNodeButton.id=n.rendNode.id+"_button",n.rendNodeTag=n.rendNodeButton,n.rendNodeTag.disabled=!!h.disabled,n.setText(s[2]),n.visPropOld.fontsize="0px",i.renderer.updateTextStyle(n,!1),s[3]&&(r.Z.isString(s[3])?(n._jc=new t.Z.JessieCode,n._jc.use(i),n._handler=function(){n._jc.parse(s[3])}):n._handler=s[3]),e.Z.addEvent(n.rendNodeButton,"click",nt,n),e.Z.addEvent(n.rendNodeButton,"mousedown",(function(t){r.Z.exists(t.stopPropagation)&&t.stopPropagation()}),n),e.Z.addEvent(n.rendNodeButton,"touchstart",(function(t){r.Z.exists(t.stopPropagation)&&t.stopPropagation()}),n),e.Z.addEvent(n.rendNodeButton,"pointerdown",(function(t){r.Z.exists(t.stopPropagation)&&t.stopPropagation()}),n),n},t.Z.registerElement("button",t.Z.createButton),t.Z.createVectorField=function(t,e,i){var s,o;if(!(e.length>=3&&(r.Z.isArray(e[0])||r.Z.isFunction(e[0])||r.Z.isString(e[0]))&&r.Z.isArray(e[1])&&3===e[1].length&&r.Z.isArray(e[2])&&3===e[2].length))throw new Error("JSXGraph: Can't create vector field with parent types '"+typeof e[0]+"', '"+typeof e[1]+"', '"+typeof e[2]+"'.");return o=r.Z.copyAttributes(i,t.options,"vectorfield"),(s=t.create("curve",[[],[]],o)).elType="vectorfield",s.setF=function(t,e){var i,o;return r.Z.isArray(t)?(i=r.Z.createFunction(t[0],this.board,e),o=r.Z.createFunction(t[1],this.board,e),this.F=function(t,e){return[i(t,e),o(t,e)]}):this.F=r.Z.createFunction(t,s.board,e),this},s.setF(e[0],"x, y"),s.xData=e[1],s.yData=e[2],s.updateDataArray=function(){var e,i,s,o,n,a,h,l,c,d,u,p,f=r.Z.evaluate(this.visProp.scale),_=r.Z.evaluate(this.xData[0]),m=r.Z.evaluate(this.xData[1]),g=(r.Z.evaluate(this.xData[2])-_)/m,b=r.Z.evaluate(this.yData[0]),v=r.Z.evaluate(this.yData[1]),Z=(r.Z.evaluate(this.yData[2])-b)/v,C=r.Z.evaluate(this.visProp.arrowhead.enabled);for(C&&(d=(c=r.Z.evaluate(this.visProp.arrowhead.size))/t.unitX,u=c/t.unitY,p=r.Z.evaluate(this.visProp.arrowhead.angle)),this.dataX=[],this.dataY=[],s=0,e=_;s<=m;e+=g,s++)for(o=0,i=b;o<=v;i+=Z,o++)(n=this.F(e,i))[0]*=f,n[1]*=f,r.Z.concat(this.dataX,[e,e+n[0],NaN]),r.Z.concat(this.dataY,[i,i+n[1],NaN]),C&&Math.abs(n[0])+Math.abs(n[1])>0&&(h=(a=Math.atan2(n[1],n[0]))+p,l=a-p,r.Z.concat(this.dataX,[e+n[0]-Math.cos(h)*d,e+n[0],e+n[0]-Math.cos(l)*d,NaN]),r.Z.concat(this.dataY,[i+n[1]-Math.sin(h)*u,i+n[1],i+n[1]-Math.sin(l)*u,NaN]))},s.methodMap=r.Z.deepCopy(s.methodMap,{setF:"setF"}),s},t.Z.registerElement("vectorfield",t.Z.createVectorField),t.Z.createSlopeField=function(t,e,i){var s,o,n;if(!(e.length>=3&&(r.Z.isFunction(e[0])||r.Z.isString(e[0]))&&r.Z.isArray(e[1])&&3===e[1].length&&r.Z.isArray(e[2])&&3===e[2].length))throw new Error("JSXGraph: Can't create slope field with parent types '"+typeof e[0]+"', '"+typeof e[1]+"', '"+typeof e[2]+"'.");return o=r.Z.createFunction(e[0],t,"x, y"),e[0]=function(t,e){var i=o(t,e),r=Math.sqrt(1+i*i);return[1/r,i/r]},n=r.Z.copyAttributes(i,t.options,"slopefield"),(s=t.create("vectorfield",e,n)).elType="slopefield",s.setF=function(t,e){var i=r.Z.createFunction(t,s.board,e);this.F=function(t,e){var r=i(t,e),s=Math.sqrt(1+r*r);return[1/s,r/s]}},s.methodMap=r.Z.deepCopy(s.methodMap,{setF:"setF"}),s},t.Z.registerElement("slopefield",t.Z.createSlopeField),t.Z.createSmartLabel=function(t,e,s){var o,n,a,h,l,c;if(0===e.length||[i.Z.OBJECT_CLASS_POINT,i.Z.OBJECT_CLASS_LINE,i.Z.OBJECT_CLASS_CIRCLE].indexOf(e[0].elementClass)<0&&[i.Z.OBJECT_TYPE_POLYGON,i.Z.OBJECT_TYPE_ANGLE].indexOf(e[0].type)<0)throw new Error("JSXGraph: Can't create smartlabel with parent types '"+typeof e[0]+"', '"+typeof e[1]+"'.");return a=e[0],h=e[1]||"",a.elementClass===i.Z.OBJECT_CLASS_POINT?n=r.Z.copyAttributes(s,t.options,"smartlabelpoint"):a.elementClass===i.Z.OBJECT_CLASS_LINE?((n=r.Z.copyAttributes(s,t.options,"smartlabelline")).rotate=function(){return 180*Math.atan(a.getSlope())/Math.PI},n.visible=function(){return!(a.L()<1.5)}):a.elementClass===i.Z.OBJECT_CLASS_CIRCLE?(n=r.Z.copyAttributes(s,t.options,"smartlabelcircle")).visible=function(){return!(a.Radius()<1.5)}:a.type===i.Z.OBJECT_TYPE_POLYGON?n=r.Z.copyAttributes(s,t.options,"smartlabelpolygon"):a.type===i.Z.OBJECT_TYPE_ANGLE&&((n=r.Z.copyAttributes(s,t.options,"smartlabelangle")).rotate=function(){var t=a.center.coords.usrCoords,e=a.getLabelAnchor().usrCoords,i=180*Math.atan2(e[2]-t[2],e[1]-t[1])/Math.PI;return i>90&&i<270?i+180:i},n.anchorX=function(){var t=a.center.coords.usrCoords,e=a.getLabelAnchor().usrCoords,i=180*Math.atan2(e[2]-t[2],e[1]-t[1])/Math.PI;return i>90&&i<270?"right":"left"}),l=function(t,e,i,s){var o;switch(s){case"length":o=function(){return e.L()};break;case"slope":o=function(){return e.Slope()};break;case"area":o=function(){return e.Area()};break;case"radius":o=function(){return e.Radius()};break;case"perimeter":o=function(){return e.Perimeter()};break;case"rad":o=function(){return e.Value()};break;case"deg":o=function(){return 180*e.Value()/Math.PI};break;default:o=function(){return 0}}return function(){var e,i="",s=r.Z.evaluate(h),n=r.Z.evaluate(t.visProp.digits),a=r.Z.evaluate(t.visProp.unit),l=r.Z.evaluate(t.visProp.prefix),c=r.Z.evaluate(t.visProp.suffix),d=r.Z.evaluate(t.visProp.usemathjax)||r.Z.evaluate(t.visProp.usekatex);return""===s?(e=t.useLocale()?t.formatNumberLocale(o(),n):r.Z.toFixed(o(),n),i=d?["\\(",l,e,"\\,",a,c,"\\)"].join(""):[l,e,a,c].join("")):i=s,i}},a.elementClass===i.Z.OBJECT_CLASS_POINT?(o=t.create("text",[function(){return a.X()},function(){return a.Y()},""],n),c=function(){var t,e,i="",s=r.Z.evaluate(h),n=r.Z.evaluate(o.visProp.digits),l=r.Z.evaluate(o.visProp.unit),c=r.Z.evaluate(o.visProp.prefix),d=r.Z.evaluate(o.visProp.suffix),u=r.Z.evaluate(o.visProp.dir),p=r.Z.evaluate(o.visProp.usemathjax)||r.Z.evaluate(o.visProp.usekatex);return o.useLocale()?(t=o.formatNumberLocale(a.X(),n),e=o.formatNumberLocale(a.Y(),n)):(t=r.Z.toFixed(a.X(),n),e=r.Z.toFixed(a.Y(),n)),""===s?"row"===u?i=p?["\\(",c,t,"\\,",l," / ",e,"\\,",l,d,"\\)"].join(""):[c,t," ",l," / ",e," ",l,d].join(""):0===u.indexOf("col")&&(i=p?["\\(",c,"\\left(\\array{",t,"\\,",l,"\\\\ ",e,"\\,",l,"}\\right)",d,"\\)"].join(""):[c,t," ",l,"<br/>",e," ",l,d].join("")):i=s,i}):a.elementClass===i.Z.OBJECT_CLASS_LINE?"length"===n.measure?c=l(o=t.create("text",[function(){return.5*(a.point1.X()+a.point2.X())},function(){return.5*(a.point1.Y()+a.point2.Y())},""],n),a,0,"length"):"slope"===n.measure&&(c=l(o=t.create("text",[function(){return.25*a.point1.X()+.75*a.point2.X()},function(){return.25*a.point1.Y()+.75*a.point2.Y()},""],n),a,0,"slope")):a.elementClass===i.Z.OBJECT_CLASS_CIRCLE?"radius"===n.measure?c=l(o=t.create("text",[function(){return a.center.X()+.5*a.Radius()},function(){return a.center.Y()},""],n),a,0,"radius"):"area"===n.measure?c=l(o=t.create("text",[function(){return a.center.X()},function(){return a.center.Y()+.5*a.Radius()},""],n),a,0,"area"):"circumference"!==n.measure&&"perimeter"!==n.measure||(c=l(o=t.create("text",[function(){return a.getLabelAnchor()},""],n),a,0,"perimeter")):a.type===i.Z.OBJECT_TYPE_POLYGON?"area"===n.measure?c=l(o=t.create("text",[function(){return a.getTextAnchor()},""],n),a,0,"area"):"perimeter"===n.measure&&(c=l(o=t.create("text",[function(){var t=a.borders.length-1;return t>=0?[.5*(a.borders[t].point1.X()+a.borders[t].point2.X()),.5*(a.borders[t].point1.Y()+a.borders[t].point2.Y())]:a.getTextAnchor()},""],n),a,0,"perimeter")):a.type===i.Z.OBJECT_TYPE_ANGLE&&(c=l(o=t.create("text",[function(){return a.getLabelAnchor()},""],n),a,0,n.measure)),r.Z.exists(o)&&(o.setText(c),a.addChild(o),o.setParents([a])),o},t.Z.registerElement("smartlabel",t.Z.createSmartLabel),t.Z.ForeignObject=function(e,s,o,n,a){this.constructor(e,o,i.Z.OBJECT_TYPE_FOREIGNOBJECT,i.Z.OBJECT_CLASS_OTHER),this.element=this.board.select(o.anchor),this.coordsConstructor(s),this._useUserSize=!1,this.size=[1,1],r.Z.exists(a)&&a.length>0&&(this._useUserSize=!0,this.W=r.Z.createFunction(a[0],this.board,""),this.H=r.Z.createFunction(a[1],this.board,""),this.addParentsFromJCFunctions([this.W,this.H]),this.usrSize=[this.W(),this.H()]),this.content=n,this.elType="foreignobject",this.id=this.board.setId(this,"Im"),this.board.renderer.drawForeignObject(this),this.board.finalizeAdding(this),this.methodMap=t.Z.deepCopy(this.methodMap,{addTransformation:"addTransform",trans:"addTransform",W:"W",Width:"W",H:"H",Height:"H"})},t.Z.ForeignObject.prototype=new H.Z,r.Z.copyPrototypeMethods(t.Z.ForeignObject,V.Z,"coordsConstructor"),t.Z.extend(t.Z.ForeignObject.prototype,{hasPoint:function(t,e){var s,n,a,h,l,c,d,p,f,_=this.transformations.length;return r.Z.isObject(r.Z.evaluate(this.visProp.precision))?(h=this.board._inputDevice,l=r.Z.evaluate(this.visProp.precision[h])):l=this.board.options.precision.hasPoint,0===_?(s=t-this.coords.scrCoords[1],n=this.coords.scrCoords[2]-e,s>=-(a=l)&&s-this.size[0]<=a&&n>=-a&&n-this.size[1]<=a):(d=[(c=(c=new u.Z(i.Z.COORDS_BY_SCREEN,[t,e],this.board)).usrCoords)[0]-this.span[0][0],c[1]-this.span[0][1],c[2]-this.span[0][2]],0<=(p=(f=o.Z.innerProduct)(d,this.span[1]))&&p<=f(this.span[1],this.span[1])&&0<=(p=f(d,this.span[2]))&&p<=f(this.span[2],this.span[2]))},update:function(t){return this.needsUpdate?(this.updateCoords(t),this.updateSize(),this):this},updateRenderer:function(){return this.updateRendererGeneric("updateForeignObject")},updateSize:function(){var t=[0,0];return this._useUserSize?(this.usrSize=[this.W(),this.H()],this.size=[Math.abs(this.usrSize[0]*this.board.unitX),Math.abs(this.usrSize[1]*this.board.unitY)]):this.rendNode.hasChildNodes()&&(t=this.rendNode.childNodes[0].getBoundingClientRect(),this.size=[t.width,t.height]),this},updateSpan:function(){var t,e,i=this.transformations.length,r=[];if(0===i)this.span=[[this.Z(),this.X(),this.Y()],[this.Z(),this.W(),0],[this.Z(),0,this.H()]];else{for(r[0]=[this.Z(),this.X(),this.Y()],r[1]=[this.Z(),this.X()+this.W(),this.Y()],r[2]=[this.Z(),this.X(),this.Y()+this.H()],t=0;t<i;t++)for(e=0;e<3;e++)r[e]=o.Z.matVecMult(this.transformations[t].matrix,r[e]);for(e=0;e<3;e++)r[e][1]/=r[e][0],r[e][2]/=r[e][0],r[e][0]/=r[e][0];for(e=1;e<3;e++)r[e][0]-=r[0][0],r[e][1]-=r[0][1],r[e][2]-=r[0][2];this.span=r}return this},addTransform:function(t){var e;if(r.Z.isArray(t))for(e=0;e<t.length;e++)this.transformations.push(t[e]);else this.transformations.push(t);return this},getParents:function(){var t=[this.url,[this.Z(),this.X(),this.Y()],this.usrSize];return 0!==this.parents.length&&(t=this.parents),t},setSize:function(t,e){return this.W=r.Z.createFunction(t,this.board,""),this.H=r.Z.createFunction(e,this.board,""),this._useUserSize=!0,this.addParentsFromJCFunctions([this.W,this.H]),this},W:function(){},H:function(){}}),t.Z.createForeignObject=function(e,i,s){var o,n,a=i[0],h=i[1],l=[];if(i.length>=2&&(l=i[2]),o=r.Z.copyAttributes(s,e.options,"foreignobject"),!(n=V.Z.create(t.Z.ForeignObject,e,h,o,a,l)))throw new Error("JSXGraph: Can't create foreignObject with parent types '"+typeof i[0]+"' and '"+typeof i[1]+"'.\nPossible parent types: [string, [x, y], [w, h]], [string, [x, y]], [element,transformation]");return n},t.Z.registerElement("foreignobject",t.Z.createForeignObject),t.Z.registerElement("fo",t.Z.createForeignObject);t.Z.ForeignObject;t.Z.extend(k.Z,{axes3d:{axesPosition:"center",xAxis:{visible:!0,point2:{name:"x"}},yAxis:{visible:!0,point2:{name:"y"}},zAxis:{visible:!0,point2:{name:"z"}},xPlaneRear:{visible:!0,layer:0,mesh3d:{layer:1}},yPlaneRear:{visible:!0,layer:0,mesh3d:{layer:1}},zPlaneRear:{visible:!0,layer:0,mesh3d:{layer:1}},xPlaneFront:{visible:!1,layer:0,mesh3d:{layer:1}},yPlaneFront:{visible:!1,layer:0,mesh3d:{layer:1}},zPlaneFront:{visible:!1,layer:0,mesh3d:{layer:1}},xPlaneRearYAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},xPlaneRearZAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},xPlaneFrontYAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},xPlaneFrontZAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},yPlaneRearXAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},yPlaneRearZAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},yPlaneFrontXAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},yPlaneFrontZAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},zPlaneRearXAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},zPlaneRearYAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},zPlaneFrontXAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},zPlaneFrontYAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1}},axis3d:{highlight:!1,fixed:!0,strokecolor:"black",strokeWidth:1,tabindex:null,point1:{visible:!1,name:""},point2:{visible:!1,name:"",label:{visible:!0}}},curve3d:{highlight:!1,tabindex:-1,strokeWidth:1,numberPointsHigh:200},intersectionline3d:{point1:{visible:!1,name:""},point2:{visible:!1,name:""}},line3d:{strokeWidth:1,strokeColor:"black",fixed:!0,tabindex:null,gradient:"linear",gradientSecondColor:"#ffffff",point:{visible:!1,name:""},point1:{visible:!1,name:""},point2:{visible:!1,name:""}},mesh3d:{strokeWidth:1,strokeColor:"#9a9a9a",strokeOpacity:.6,highlight:!1,fillColor:"#9a9a9a",fillOpacity:.1,tabindex:null,visible:"inherit"},plane3d:{strokeWidth:0,strokeColor:"black",strokeOpacity:1,highlight:!1,tabindex:null,gradient:"linear",gradientSecondColor:"#ffffff",gradientAngle:Math.PI,fillColor:"#a7a7a7",fillOpacity:.6,point:{visible:!1,name:"",fixed:!0}},point3d:{infoboxDigits:"auto",strokeWidth:0,gradient:"radial",gradientSecondColor:"#555555",fillColor:"yellow",highlightStrokeColor:"#555555"},polygon3d:{highlight:!1,tabindex:-1,strokeWidth:1,fillColor:"none"},sphere3d:{highlight:!1,strokeWidth:1,strokeColor:"#00ff80",fillColor:"white",gradient:"radial",gradientSecondColor:"#00ff80",gradientFX:.7,gradientFY:.3,fillOpacity:.4},surface3d:{highlight:!1,tabindex:-1,strokeWidth:1,stepsU:30,stepsV:30},vectorfield3d:{scale:1,arrowhead:{enabled:!0,size:5,angle:.125*Math.PI}},view3d:{needsRegularUpdate:!0,projection:"parallel",verticalDrag:{enabled:!0,key:"shift"},az:{pointer:{enabled:!0,speed:1,outside:!0,button:-1,key:"none"},keyboard:{enabled:!0,step:10,key:"ctrl"},continuous:!0,slider:{visible:!0,style:6,point1:{frozen:!0},point2:{frozen:!0},min:0,max:2*Math.PI,start:1}},el:{pointer:{enabled:!0,speed:1,outside:!0,button:-1,key:"none"},keyboard:{enabled:!0,step:10,key:"ctrl"},continuous:!0,slider:{visible:!0,style:6,point1:{frozen:!0},point2:{frozen:!0},min:0,max:2*Math.PI,start:.3}},trackball:{enabled:!1,outside:!0,button:-1,key:"none"},r:"auto",fov:.4*Math.PI,values:[[0,1.57],[.78,.62],[0,0],[5.49,.62],[4.71,0],[3.93,.62],[3.14,0],[2.36,.62],[1.57,1.57]],_currentView:-1}});t.Z.Options;t.Z.View3D=function(t,e,s){this.constructor(t,s,i.Z.OBJECT_TYPE_VIEW3D,i.Z.OBJECT_CLASS_3D),this.objects={},this.elementsByName={},this.defaultAxes=null,this.matrix3D=[[1,0,0,0],[0,1,0,0],[0,0,1,0]],this.cameraTransform=[],this.llftCorner=e[0],this.size=e[1],this.bbox3D=e[2],this.r=-1,this.focalDist=-1,this.projectionType="parallel",this.timeoutAzimuth=null,this.id=this.board.setId(this,"V"),this.board.finalizeAdding(this),this.elType="view3d",this.methodMap=r.Z.deepCopy(this.methodMap,{})},t.Z.View3D.prototype=new H.Z,t.Z.extend(t.Z.View3D.prototype,{create:function(t,e,i){var r=[];return t.indexOf("3d")>0&&r.push(this),this.board.create(t,r.concat(e),i)},select:function(t,e){var i,s,o,n,a=t;if(null===a)return a;if(r.Z.isString(a)&&""!==a)r.Z.exists(this.objects[a])?a=this.objects[a]:r.Z.exists(this.elementsByName[a])&&(a=this.elementsByName[a]);else if(!e&&(r.Z.isFunction(a)||r.Z.isObject(a)&&!r.Z.isFunction(a.setAttribute))){for(s={},n=(i=r.Z.filterElements(this.objectsList,a)).length,o=0;o<n;o++)s[i[o].id]=i[o];a=new j(s)}else r.Z.isObject(a)&&r.Z.exists(a.id)&&!r.Z.exists(this.objects[a.id])&&(a=null);return a},updateParallelProjection:function(){var t,e,i,r,s=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]];return i=this.el_slide.Value(),t=this.r,e=this.az_slide.Value(),r=t*Math.sin(i),s[1][1]=t*Math.cos(e),s[1][2]=-t*Math.sin(e),s[1][3]=0,s[2][1]=r*Math.sin(e),s[2][2]=r*Math.cos(e),s[2][3]=Math.cos(i),s[3][1]=t*Math.cos(i)*Math.sin(e),s[3][2]=t*Math.cos(i)*Math.cos(e),s[3][3]=-Math.sin(i),s},_projectToSphere:function(t,e,i){var r,s=o.Z.hypot(e,i);return s<.7071067811865475*t?Math.sqrt(t*t-s*s):(r=t/1.414213562373095)*r/s},updateProjectionTrackball:function(t){var e,i,s,n,a,l,c,d,u,p,f,_,m=100,g=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]];return r.Z.exists(this._trackball)?((e=this._trackball.dx)*e+(i=this._trackball.dy)*i>o.Z.eps&&(m=.25*(this.size[0]*this.board.unitX+this.size[1]*this.board.unitY),a=this._trackball.x,l=this._trackball.y,n=[this._projectToSphere(m,a,l),a,l],a-=e,l-=i,s=[this._projectToSphere(m,a,l),a,l],_=o.Z.crossProduct(n,s),u=o.Z.hypot(_[0],_[1],_[2]),_[0]/=-u,_[1]/=-u,_[2]/=u,d=(d=(d=h.Z.distance(n,s,3)/(2*m))>1?1:d)<-1?-1:d,c=2*Math.asin(d),d=1-(p=Math.cos(c)),f=Math.sin(c),g[1][1]=p+_[0]*_[0]*d,g[2][1]=_[0]*_[1]*d-_[2]*f,g[3][1]=_[0]*_[2]*d+_[1]*f,g[1][2]=_[1]*_[0]*d+_[2]*f,g[2][2]=p+_[1]*_[1]*d,g[3][2]=_[1]*_[2]*d-_[0]*f,g[1][3]=_[2]*_[0]*d-_[1]*f,g[2][3]=_[2]*_[1]*d+_[0]*f,g[3][3]=p+_[2]*_[2]*d,null!==t&&(g[1][0]=t[0]-g[1][1]*t[0]-g[1][2]*t[0]-g[1][3]*t[0],g[2][0]=t[1]-g[2][1]*t[1]-g[2][2]*t[1]-g[2][3]*t[1],g[3][0]=t[2]-g[3][1]*t[2]-g[3][2]*t[2]-g[3][3]*t[2])),g=o.Z.matMatMult(this.matrix3DRot,g)):this.matrix3DRot},_updateCentralProjection:function(){var t,e,i,s,n,a,h,l,c,d,u,p,f,_=[.5*(this.bbox3D[0][0]+this.bbox3D[0][1]),.5*(this.bbox3D[1][0]+this.bbox3D[1][1]),.5*(this.bbox3D[2][0]+this.bbox3D[2][1])];return f=function(t,e,i){return[i*Math.cos(t)*Math.cos(e),-i*Math.sin(t)*Math.cos(e),i*Math.sin(e)]},i=this.az_slide.Value()+3*Math.PI*.5,e=this.el_slide.Value(),"auto"===(t=r.Z.evaluate(this.visProp.r))&&(t=1.01*o.Z.hypot(this.bbox3D[0][0]-this.bbox3D[0][1],this.bbox3D[1][0]-this.bbox3D[1][1],this.bbox3D[2][0]-this.bbox3D[2][1])),s=f(i,e+Math.PI/2,1),u=[(d=f(i,e,t))[0],d[1],d[2]],d[0]+=_[0],d[1]+=_[1],d[2]+=_[2],c=o.Z.norm(u,3),n=[u[0]/c,u[1]/c,u[2]/c],c=o.Z.norm(s,3),l=[s[0]/c,s[1]/c,s[2]/c],a=o.Z.crossProduct(l,n),h=o.Z.crossProduct(n,a),l=o.Z.matVecMult([a,h,n],d),this.cameraTransform=[[1,0,0,0],[-l[0],a[0],a[1],a[2]],[-l[1],h[0],h[1],h[2]],[-l[2],n[0],n[1],n[2]]],this.focalDist=1/Math.tan(.5*r.Z.evaluate(this.visProp.fov)),p=[[0,0,0,-1],[0,this.focalDist,0,0],[0,0,this.focalDist,0],[320/-12,0,0,28/-12]],o.Z.matMatMult(p,this.cameraTransform)},update:function(){var t,e,i,s,n,a=null,h=!1;if(!r.Z.exists(this.el_slide)||!r.Z.exists(this.az_slide)||!this.needsUpdate)return this;if(t=[[1,0,0],[0,1,0],[0,0,1]],this.projectionType=r.Z.evaluate(this.visProp.projection).toLowerCase(),r.Z.evaluate(this.visProp.trackball.enabled)&&r.Z.exists(this.matrix3DRot)&&(this._hasMoveTrackball&&("central"===this.projectionType&&(a=[.5*(this.bbox3D[0][0]+this.bbox3D[0][1]),.5*(this.bbox3D[1][0]+this.bbox3D[1][1]),.5*(this.bbox3D[2][0]+this.bbox3D[2][1])]),this.matrix3DRot=this.updateProjectionTrackball(a)),h=!0),"central"===this.projectionType)i=.8,t[1][1]=this.size[0]/i,t[2][2]=this.size[1]/i,t[1][0]=this.llftCorner[0]+.5*t[1][1]*i,t[2][0]=this.llftCorner[1]+.5*t[2][2]*i,this.viewPortTransform=t,h||(this.matrix3DRot=this._updateCentralProjection()),this.matrix3D=this.matrix3DRot.slice();else e=[[1,0,0,0],[-.5*(this.bbox3D[0][0]+this.bbox3D[0][1]),1,0,0],[-.5*(this.bbox3D[1][0]+this.bbox3D[1][1]),0,1,0],[-.5*(this.bbox3D[2][0]+this.bbox3D[2][1]),0,0,1]],s=this.bbox3D[0][1]-this.bbox3D[0][0],n=this.bbox3D[1][1]-this.bbox3D[1][0],t[1][1]=this.size[0]/s,t[2][2]=this.size[1]/n,t[1][0]=this.llftCorner[0]+.5*t[1][1]*s,t[2][0]=this.llftCorner[1]+.5*t[2][2]*n,h||(this.matrix3DRot=this.updateParallelProjection()),this.matrix3D=o.Z.matMatMult(t,o.Z.matMatMult(this.matrix3DRot,e).slice(0,3));return this},updateRenderer:function(){return this.needsUpdate=!1,this},removeObject:function(e,i){var s;if(r.Z.isArray(e)){for(s=0;s<e.length;s++)this.removeObject(e[s]);return this}if(e=this.select(e),!r.Z.exists(e)||r.Z.isString(e))return this;try{delete this.objects[e.id]}catch(i){t.Z.debug("View3D "+e.id+": Could not be removed: "+i)}return this.board.removeObject(e,i),this},worldToView:function(t,e=!0){var i,r=o.Z.matVecMult(this.cameraTransform,t);if(r[3]-=r[0]*this.focalDist,e)return r;for(i=1;i<4;i++)r[i]/=r[0];return r.slice(1,4)},project3DTo2D:function(t,e,i){var r,s;return 3===arguments.length?r=[1,t,e,i]:3===t.length?(r=t.slice()).unshift(1):r=t,s=o.Z.matVecMult(this.matrix3D,r),"central"===this.projectionType?(s[1]/=s[0],s[2]/=s[0],s[3]/=s[0],s[0]/=s[0],o.Z.matVecMult(this.viewPortTransform,s.slice(0,3))):s},_getW0:function(t,e,i){var r,s=o.Z.inverse(t),n=s[0][0]+e[1]*s[0][1]+e[2]*s[0][2],a=s[3][0]+e[1]*s[3][1]+e[2]*s[3][2];return r=i*s[0][3]-s[3][3],[1/((a*s[0][3]-n*s[3][3])/r),(a-n*i)/r]},project2DTo3DPlane:function(t,e,i){var r,s,n,a,h,l,c,d,u=e.slice(1);if(i=i||[1,0,0,0],a=o.Z.norm(u,3),n=o.Z.innerProduct(i.slice(1),u,3)/a,"parallel"===this.projectionType){(r=this.matrix3D.slice(0,3)).push([0,u[0],u[1],u[2]]),(s=t.coords.usrCoords.slice()).push(n);try{1===r[2][3]&&(r[2][1]=r[2][2]=.001*o.Z.eps),h=o.Z.Numerics.Gauss(r,s)}catch(t){h=[0,NaN,NaN,NaN]}}else{r=this.matrix3DRot,s=t.coords.usrCoords.slice(),l=o.Z.Numerics.Gauss(this.viewPortTransform,s),c=(d=this._getW0(r,l,n))[0],s=[l[0]*c,l[1]*c,l[2]*c,d[1]*c];try{1===r[2][3]&&(r[2][1]=r[2][2]=.001*o.Z.eps),(h=o.Z.Numerics.Gauss(r,s))[1]/=h[0],h[2]/=h[0],h[3]/=h[0],h[0]/=h[0]}catch(t){h=[0,NaN,NaN,NaN]}}return h},project2DTo3DVertical:function(t,e){var i=this.matrix3D[2],r=i[3],s=t.coords.usrCoords[2];return s-=i[0]*e[0]+i[1]*e[1]+i[2]*e[2],Math.abs(r)<o.Z.eps?e:e.slice(0,3).concat([s/r])},project3DToCube:function(t){var e=this.bbox3D;return t[1]<e[0][0]&&(t[1]=e[0][0]),t[1]>e[0][1]&&(t[1]=e[0][1]),t[2]<e[1][0]&&(t[2]=e[1][0]),t[2]>e[1][1]&&(t[2]=e[1][1]),t[3]<e[2][0]&&(t[3]=e[2][0]),t[3]>e[2][1]&&(t[3]=e[2][1]),t},intersectionLineCube:function(t,e,i){var r,s,o,n;for(r=i,s=0;s<3;s++)0!==e[s]&&(o=(this.bbox3D[s][0]-t[s])/e[s],n=(this.bbox3D[s][1]-t[s])/e[s],r=i<0?Math.max(r,Math.min(o,n)):Math.min(r,Math.max(o,n)));return r},isInCube:function(t){return t[0]>this.bbox3D[0][0]-o.Z.eps&&t[0]<this.bbox3D[0][1]+o.Z.eps&&t[1]>this.bbox3D[1][0]-o.Z.eps&&t[1]<this.bbox3D[1][1]+o.Z.eps&&t[2]>this.bbox3D[2][0]-o.Z.eps&&t[2]<this.bbox3D[2][1]+o.Z.eps},intersectionPlanePlane:function(t,e,i){var r,s,n,a,h=[[],[]];return i=i||e.d,r=o.Z.Geometry.meet3Planes(t.normal,t.d,e.normal,i,o.Z.crossProduct(t.normal,e.normal),0),s=o.Z.Geometry.meetPlanePlane(t.vec1,t.vec2,e.vec1,e.vec2),n=this.intersectionLineCube(r,s,1/0),a=o.Z.axpy(n,s,r),this.isInCube(a)&&(h[0]=a),n=this.intersectionLineCube(r,s,-1/0),a=o.Z.axpy(n,s,r),this.isInCube(a)&&(h[1]=a),h},getMesh:function(t,e,i){var s,o,n,a,h,l,c,d=[0,0,0],u=e[2],p=i[2],f=[],_=[];for(l=(r.Z.evaluate(e[1])-r.Z.evaluate(e[0]))/u,c=(r.Z.evaluate(i[1])-r.Z.evaluate(i[0]))/p,s=0;s<=u;s++){for(n=e[0]+l*s,o=0;o<=p;o++)a=i[0]+c*o,d=r.Z.isFunction(t)?t(n,a):[t[0](n,a),t[1](n,a),t[2](n,a)],h=this.project3DTo2D(d),f.push(h[1]),_.push(h[2]);f.push(NaN),_.push(NaN)}for(o=0;o<=p;o++){for(a=i[0]+c*o,s=0;s<=u;s++)n=e[0]+l*s,d=r.Z.isFunction(t)?t(n,a):[t[0](n,a),t[1](n,a),t[2](n,a)],h=this.project3DTo2D(d),f.push(h[1]),_.push(h[2]);f.push(NaN),_.push(NaN)}return[f,_]},animateAzimuth:function(){var t=this.az_slide._smin,e=this.az_slide._smax-t,i=this.az_slide.Value()+.1;this.az_slide.position=(i-t)/e,this.az_slide.position>1&&(this.az_slide.position=0),this.board.update(),this.timeoutAzimuth=setTimeout(function(){this.animateAzimuth()}.bind(this),200)},stopAzimuth:function(){clearTimeout(this.timeoutAzimuth),this.timeoutAzimuth=null},isVerticalDrag:function(){var t=this.board;return!!r.Z.evaluate(this.visProp.verticaldrag.enabled)&&t["_"+r.Z.evaluate(this.visProp.verticaldrag.key)+"Key"]},setView:function(t,e,i){return i=i||this.r,this.az_slide.setValue(t),this.el_slide.setValue(e),this.r=i,this.board.update(),this},nextView:function(){var t=r.Z.evaluate(this.visProp.values),e=this.visProp._currentview;return e=(e+1)%t.length,this.setCurrentView(e),this},previousView:function(){var t=r.Z.evaluate(this.visProp.values),e=this.visProp._currentview;return e=(e+t.length-1)%t.length,this.setCurrentView(e),this},setCurrentView:function(t){var e=r.Z.evaluate(this.visProp.values);return(t<0||t>=e.length)&&(t=(t%e.length+e.length)%e.length),this.setView(e[t][0],e[t][1],e[t][2]),this.visProp._currentview=t,this},_azEventHandler:function(t){var e=this.az_slide._smax,i=this.az_slide._smin,s=(e-i)/this.board.canvasWidth*r.Z.evaluate(this.visProp.az.pointer.speed),o=t.movementX,n=this.az_slide.Value(),a=this.el_slide.Value();return this.board.mode===this.board.BOARD_MODE_DRAG||(r.Z.evaluate(this.visProp.az.keyboard.enabled)&&("ArrowRight"===t.key?n+=r.Z.evaluate(this.visProp.az.keyboard.step)*Math.PI/180:"ArrowLeft"===t.key&&(n-=r.Z.evaluate(this.visProp.az.keyboard.step)*Math.PI/180)),r.Z.evaluate(this.visProp.az.pointer.enabled)&&0!==o&&null==t.key&&(n+=o*s),r.Z.evaluate(this.visProp.az.continuous)?n=(n+e)%e:n>0?n=Math.min(e,n):n<0&&(n=Math.max(i,n)),this.setView(n,a)),this},_elEventHandler:function(t){var e=this.el_slide._smax,i=this.el_slide._smin,s=(e-i)/this.board.canvasHeight*r.Z.evaluate(this.visProp.el.pointer.speed),o=t.movementY,n=this.az_slide.Value(),a=this.el_slide.Value();return this.board.mode===this.board.BOARD_MODE_DRAG||(r.Z.evaluate(this.visProp.el.keyboard.enabled)&&("ArrowUp"===t.key?a-=r.Z.evaluate(this.visProp.el.keyboard.step)*Math.PI/180:"ArrowDown"===t.key&&(a+=r.Z.evaluate(this.visProp.el.keyboard.step)*Math.PI/180)),r.Z.evaluate(this.visProp.el.pointer.enabled)&&0!==o&&null==t.key&&(a+=o*s),r.Z.evaluate(this.visProp.el.continuous)?a=(a+e)%e:a>0?a=Math.min(e,a):a<0&&(a=Math.max(i,a)),this.setView(n,a)),this},_trackballHandler:function(t){var e,r,s,o=this.board.getMousePosition(t);return s=new u.Z(i.Z.COORDS_BY_USER,[this.llftCorner[0]+.5*this.size[0],this.llftCorner[1]+.5*this.size[1]],this.board),e=o[0]-s.scrCoords[1],r=o[1]-s.scrCoords[2],this._trackball={dx:t.movementX,dy:t.movementY,x:e,y:r},this.board.update(),this},pointerDownHandler:function(t){var i,s,o;this._hasMoveAz=!1,this._hasMoveEl=!1,this._hasMoveTrackball=!1,this.board.mode===this.board.BOARD_MODE_NONE&&(r.Z.evaluate(this.visProp.trackball.enabled)?(i=r.Z.evaluate(this.visProp.trackball.button),s=r.Z.evaluate(this.visProp.trackball.key),-1!==i&&i!==t.button||!("none"===s||s.indexOf("shift")>-1&&t.shiftKey||s.indexOf("ctrl")>-1&&t.ctrlKey)||(o=r.Z.evaluate(this.visProp.trackball.outside)?document:this.board.containerObj,e.Z.addEvent(o,"pointermove",this._trackballHandler,this),this._hasMoveTrackball=!0)):(r.Z.evaluate(this.visProp.az.pointer.enabled)&&(i=r.Z.evaluate(this.visProp.az.pointer.button),s=r.Z.evaluate(this.visProp.az.pointer.key),-1!==i&&i!==t.button||!("none"===s||s.indexOf("shift")>-1&&t.shiftKey||s.indexOf("ctrl")>-1&&t.ctrlKey)||(o=r.Z.evaluate(this.visProp.az.pointer.outside)?document:this.board.containerObj,e.Z.addEvent(o,"pointermove",this._azEventHandler,this),this._hasMoveAz=!0)),r.Z.evaluate(this.visProp.el.pointer.enabled)&&(i=r.Z.evaluate(this.visProp.el.pointer.button),s=r.Z.evaluate(this.visProp.el.pointer.key),-1!==i&&i!==t.button||!("none"===s||s.indexOf("shift")>-1&&t.shiftKey||s.indexOf("ctrl")>-1&&t.ctrlKey)||(o=r.Z.evaluate(this.visProp.el.pointer.outside)?document:this.board.containerObj,e.Z.addEvent(o,"pointermove",this._elEventHandler,this),this._hasMoveEl=!0))),e.Z.addEvent(document,"pointerup",this.pointerUpHandler,this))},pointerUpHandler:function(t){var i;this._hasMoveAz&&(i=r.Z.evaluate(this.visProp.az.pointer.outside)?document:this.board.containerObj,e.Z.removeEvent(i,"pointermove",this._azEventHandler,this),this._hasMoveAz=!1),this._hasMoveEl&&(i=r.Z.evaluate(this.visProp.el.pointer.outside)?document:this.board.containerObj,e.Z.removeEvent(i,"pointermove",this._elEventHandler,this),this._hasMoveEl=!1),this._hasMoveTrackball&&(i=r.Z.evaluate(this.visProp.az.pointer.outside)?document:this.board.containerObj,e.Z.removeEvent(i,"pointermove",this._trackballHandler,this),this._hasMoveTrackball=!1),e.Z.removeEvent(document,"pointerup",this.pointerUpHandler,this)}}),t.Z.createView3D=function(i,s,n){var a,h,l,c,d,u,p,f,_=s[0],m=s[1];return h=r.Z.copyAttributes(n,i.options,"view3d"),(a=new t.Z.View3D(i,s,h)).defaultAxes=a.create("axes3d",s,n),d=_[0],u=_[1],p=m[0],f=m[1],(l=r.Z.copyAttributes(n,i.options,"view3d","az","slider")).name="az",(c=r.Z.copyAttributes(n,i.options,"view3d","el","slider")).name="el",a.az_slide=i.create("slider",[[d-1,u-2],[d+p+1,u-2],[r.Z.evaluate(l.min),r.Z.evaluate(l.start),r.Z.evaluate(l.max)]],l),a.el_slide=i.create("slider",[[d-1,u],[d-1,u+f],[r.Z.evaluate(c.min),r.Z.evaluate(c.start),r.Z.evaluate(c.max)]],c),a.board.highlightInfobox=function(t,e,i){var s,n,h,l,c,d,u='<span style="color:black; font-size:200%">⇄ </span>',p=i.board,f=null;for(a.isVerticalDrag()&&(u='<span style="color:black; font-size:200%">⇅ </span>'),n=0;n<i.parents.length&&!(f=p.objects[i.parents[n]]).is3D;n++);if(f){if(l=[1,0,0,f.coords[3]],a._w0=o.Z.innerProduct(a.matrix3D[0],l,4),h=a.project2DTo3DPlane(f.element2D,[1,0,0,1],l),!a.isInCube(h))return void a.board.highlightCustomInfobox("",f);s=r.Z.evaluate(f.visProp.infoboxdigits),d=a.board.infobox,c="auto"===s?d.useLocale()?[u,"(",d.formatNumberLocale(f.X())," | ",d.formatNumberLocale(f.Y())," | ",d.formatNumberLocale(f.Z()),")"]:[u,"(",r.Z.autoDigits(f.X())," | ",r.Z.autoDigits(f.Y())," | ",r.Z.autoDigits(f.Z()),")"]:d.useLocale()?[u,"(",d.formatNumberLocale(f.X(),s)," | ",d.formatNumberLocale(f.Y(),s)," | ",d.formatNumberLocale(f.Z(),s),")"]:[u,"(",r.Z.toFixed(f.X(),s)," | ",r.Z.toFixed(f.Y(),s)," | ",r.Z.toFixed(f.Z(),s),")"],a.board.highlightCustomInfobox(c.join(""),f)}else a.board.highlightCustomInfobox("("+t+", "+e+")",i)},a.BOARD_MODE_NONE=0,e.Z.addEvent(i.containerObj,"keydown",(function(t){var e,i=!1;!r.Z.evaluate(a.visProp.el.keyboard.enabled)||"ArrowUp"!==t.key&&"ArrowDown"!==t.key||("none"===(e=r.Z.evaluate(a.visProp.el.keyboard.key))||e.indexOf("shift")>-1&&t.shiftKey||e.indexOf("ctrl")>-1&&t.ctrlKey)&&(a._elEventHandler(t),i=!0),!r.Z.evaluate(a.visProp.el.keyboard.enabled)||"ArrowLeft"!==t.key&&"ArrowRight"!==t.key||("none"===(e=r.Z.evaluate(a.visProp.az.keyboard.key))||e.indexOf("shift")>-1&&t.shiftKey||e.indexOf("ctrl")>-1&&t.ctrlKey)&&(a._azEventHandler(t),i=!0),"PageUp"===t.key?(a.nextView(),i=!0):"PageDown"===t.key&&(a.previousView(),i=!0),i&&t.preventDefault()}),a),e.Z.addEvent(i.containerObj,"pointerdown",a.pointerDownHandler,a),a.board.update(),a},t.Z.registerElement("view3d",t.Z.createView3D);t.Z.View3D;t.Z.GeometryElement3D=function(t,e){this.elType=e,this.id=this.board.setId(this,e),this.view=t,this.element2D=null,this.is3D=!0,this.view.objects[this.id]=this,""!==this.name&&(this.view.elementsByName[this.name]=this)},t.Z.extend(t.Z.GeometryElement3D.prototype,{setAttr2D:function(t){var e=t;return e.name=this.name,e},setAttribute:function(e){var i,s,o,n,a,h={};for(i=0;i<arguments.length;i++)n=arguments[i],r.Z.isString(n)?(a=n.split(":"),h[r.Z.trim(a[0])]=r.Z.trim(a[1])):r.Z.isArray(n)?h[n[0]]=n[1]:t.Z.extend(h,n);for(i in h)if(h.hasOwnProperty(i))switch(s=i.replace(/\s+/g,"").toLowerCase(),o=h[i],s){case"numberpointshigh":case"stepsu":case"stepsv":r.Z.exists(this.visProp[s])&&(!t.Z.Validator[s]||t.Z.Validator[s]&&t.Z.Validator[s](o)||t.Z.Validator[s]&&r.Z.isFunction(o)&&t.Z.Validator[s](o()))&&(o=(!o.toLowerCase||"false"!==o.toLowerCase())&&o,this._set(s,o));break;default:r.Z.exists(this.element2D)&&this.element2D.setAttribute(h)}},getAttribute:function(t){var e;switch(t=t.toLowerCase()){case"numberpointshigh":case"stepsu":case"stepsv":e=this.visProp[t];break;default:r.Z.exists(this.element2D)&&(e=this.element2D.getAttribute(t))}return e},getAttributes:function(){var t,e,i={},s=["numberpointshigh","stepsu","stepsv"],o=s.length;for(r.Z.exists(this.element2D)&&(i=r.Z.merge(this.element2D.getAttributes())),t=0;t<o;t++)e=s[t],r.Z.exists(this.visProp[e])&&(i[e]=this.visProp[e]);return i},remove:function(){}});t.Z.GeometryElement3D;t.Z.createAxes3D=function(t,e,i){var s,o,n,a,h,l,c,d,u,p,f,_,m,g,b,v,Z,C=e[0],y=["x","y","z"],P="Axis",E=["Rear","Front"],O=[0,0,0],x=[0,0,0],S={};if(r.Z.exists(C.bbox3D))for(s=0;s<y.length;s++)O[s]=C.bbox3D[s][0],x[s]=C.bbox3D[s][1];else for(s=0;s<y.length;s++)O[s]=e[1][s],x[s]=e[2][1];for(c=(l=r.Z.copyAttributes(i,t.options,"axes3d")).axesposition,s=0;s<y.length;s++)b=(d=y[s])+P,"center"===c?(u=[0,0,0],(p=[0,0,0])[s]=x[s],S[b]=C.create("axis3d",[u,p],l[b.toLowerCase()])):(b+="Border",u=O.slice(),p=x.slice(),2===s?(u[1]=x[1],p[0]=O[0]):(u[s]=x[s],p[2]=O[2]),p[s]=x[s],l[b.toLowerCase()].lastArrow=!1,S[b]=C.create("axis3d",[u,p],l[b.toLowerCase()]),Z={visible:!0,minorTicks:0,tickEndings:[0,1],drawLabels:!1},2===s&&(Z.tickEndings=[1,0]),S[b+"Ticks"]=C.create("ticks",[S[b],1],Z));for(S.O=C.create("intersection",[S[y[0]+P],S[y[1]+P]],{name:"",visible:!1,withLabel:!1}),s=0;s<y.length;s++)for(a=(s+1)%3,h=(s+2)%3,d=y[s],o=0;o<E.length;o++)(u=[0,0,0])[s]=0===o?O[s]:x[s],_=[0,0,0],(f=[0,0,0])[a]=1,_[h]=1,m=[O[a],x[a]],g=[O[h],x[h]],b=d+"Plane"+E[o],l=r.Z.copyAttributes(i,t.options,"axes3d",b),S[b]=C.create("plane3d",[u,f,_,m,g],l),S[b].elType="axisplane3d";for(s=0;s<y.length;s++)for(d=y[s],o=0;o<E.length;o++)for(n=1;n<=2;n++)b=d+"Plane"+E[o]+y[a=(s+n)%3].toUpperCase()+"Axis",v=d+"Plane"+E[o],(u=[0,0,0])[s]=(p=[0,0,0])[s]=0===o?O[s]:x[s],u[a]=O[a],p[a]=x[a],l=r.Z.copyAttributes(i,t.options,"axes3d",b),S[b]=C.create("axis3d",[u,p],l),S[v].addChild(S[b]),S[v].element2D.inherits.push(S[b]);return S},t.Z.registerElement("axes3d",t.Z.createAxes3D),t.Z.createAxis3D=function(t,e,i){var s,o,n,a,h,l,c=e[0],d=e[1],u=e[2];return s=r.Z.copyAttributes(i.point1,t.options,"axis3d","point1"),o=c.create("point",[(a=d[0],h=d[1],l=d[2],function(){return c.project3DTo2D(a,h,l)[1]}),function(t,e,i){return function(){return c.project3DTo2D(t,e,i)[2]}}(d[0],d[1],d[2])],s),s=r.Z.copyAttributes(i.point2,t.options,"axis3d","point2"),n=c.create("point",[function(t,e,i){return function(){return c.project3DTo2D(t,e,i)[1]}}(u[0],u[1],u[2]),function(t,e,i){return function(){return c.project3DTo2D(t,e,i)[2]}}(u[0],u[1],u[2])],s),s=r.Z.copyAttributes(i,t.options,"axis3d"),c.create("arrow",[o,n],s)},t.Z.registerElement("axis3d",t.Z.createAxis3D),t.Z.createMesh3D=function(e,i,s){var o,n=i[0],a=i[1],h=i[2],l=i[3],c=i[4],d=i[5];return(o=n.create("curve",[[],[]],s)).updateDataArray=function(){var e,i,s,o,u=l[0],p=l[1],f=d[0],_=d[1],m=[0,0,0],g=[0,0,0],b=[0,0,0];if(this.dataX=[],this.dataY=[],r.Z.isFunction(a))b=a().slice(1);else for(o=0;o<3;o++)b[o]=r.Z.evaluate(a[o]);for(o=0;o<3;o++)m[o]=r.Z.evaluate(h[o]),g[o]=r.Z.evaluate(c[o]);for(e=t.Z.Math.norm(m,3),i=t.Z.Math.norm(g,3),o=0;o<3;o++)m[o]/=e,g[o]/=i;s=n.getMesh([function(t,e){return b[0]+t*m[0]+e*g[0]},function(t,e){return b[1]+t*m[1]+e*g[1]},function(t,e){return b[2]+t*m[2]+e*g[2]}],[Math.ceil(u),Math.floor(p),(Math.ceil(p)-Math.floor(u))/1],[Math.ceil(f),Math.floor(_),(Math.ceil(_)-Math.floor(f))/1]),this.dataX=s[0],this.dataY=s[1]},o},t.Z.registerElement("mesh3d",t.Z.createMesh3D),t.Z.Circle3D=function(t,e,s,n,a){this.constructor(t.board,a,i.Z.OBJECT_TYPE_CIRCLE3D,i.Z.OBJECT_CLASS_3D),this.constructor3D(t,"circle3d"),this.center=this.board.select(e),this.normal=[0,0,0],this.curve,this.frame1,this.frame2,this.updateNormal=function(){var t,e;for(t=0;t<3;t++)this.normal[t]=r.Z.evaluate(s[t]);if(e=o.Z.norm(this.normal),Math.abs(e)>o.Z.eps)for(t=0;t<3;t++)this.normal[t]/=e},r.Z.exists(this.center._is_new)?(this.addChild(this.center),delete this.center._is_new):this.center.addChild(this),this.updateRadius=r.Z.createFunction(n,this.board),this.addParentsFromJCFunctions([this.updateRadius]),this.updateNormal();this.frame1=o.Z.crossProduct(this.normal,[1,0,0]);var h=o.Z.crossProduct(this.normal,[-.5,.8660254037844386,0]);o.Z.norm(h)>o.Z.norm(this.frame1)&&(this.frame1=h),this.frame2=o.Z.crossProduct(this.normal,this.frame1),this.normalizeFrame(),this.curve=t.create("curve3d",[t=>this.center.X()+this.Radius()*(Math.cos(t)*this.frame1[0]+Math.sin(t)*this.frame2[0]),t=>this.center.Y()+this.Radius()*(Math.cos(t)*this.frame1[1]+Math.sin(t)*this.frame2[1]),t=>this.center.Z()+this.Radius()*(Math.cos(t)*this.frame1[2]+Math.sin(t)*this.frame2[2]),[0,2*Math.PI]],a)},t.Z.Circle3D.prototype=new t.Z.GeometryElement,r.Z.copyPrototypeMethods(t.Z.Circle3D,t.Z.GeometryElement3D,"constructor3D"),t.Z.extend(t.Z.Circle3D.prototype,{update:function(){return this.updateNormal(),this.updateFrame(),this.curve.visProp.visible=!isNaN(this.Radius()),this},updateRenderer:function(){return this.needsUpdate=!1,this},setRadius:function(t){return this.updateRadius=r.Z.createFunction(t,this.board),this.addParentsFromJCFunctions([this.updateRadius]),this.board.update(),this},Radius:function(t){return r.Z.exists(t)?(this.setRadius(t),this.Radius()):Math.abs(this.updateRadius())},normalizeFrame:function(){var t,e=o.Z.norm(this.frame1),i=o.Z.norm(this.frame2);for(t=0;t<3;t++)this.frame1[t]/=e,this.frame2[t]/=i},updateFrame:function(){this.frame1=o.Z.crossProduct(this.frame2,this.normal),this.frame2=o.Z.crossProduct(this.normal,this.frame1),this.normalizeFrame()},projectCoords:function(t,e){return this.curve.projectCoords(t,e)},projectScreenCoords:function(t,e){return this.curve.projectScreenCoords(t,e)}}),t.Z.createCircle3D=function(e,i,s){var o,n=i[0],a=r.Z.copyAttributes(s,e.options,"circle3d"),h=r.Z.providePoints3D(n,[i[1]],s,"line3d",["point"])[0],l=i[2],c=i[3];return(o=new t.Z.Circle3D(n,h,l,c,a)).center.addChild(o),o.addChild(o.curve),o.update(),o},t.Z.registerElement("circle3d",t.Z.createCircle3D),t.Z.createIntersectionCircle3D=function(t,e,s){var o,n,a,l=e[0],c=e[1],d=e[2],u=r.Z.copyAttributes(s,t.options,"intersectioncircle3d");a=h.Z.intersectionFunction3D(l,c,d),n=l.create("point3d",a[0],{visible:!1}),o=l.create("circle3d",[n,a[1],a[2]],u);try{c.addChild(o),d.addChild(o)}catch(t){throw new Error("JSXGraph: Can't create 'intersection' with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.")}return o.type=i.Z.OBJECT_TYPE_INTERSECTION_CIRCLE3D,o.elType="intersectioncircle3d",o.setParents([c.id,d.id]),o},t.Z.registerElement("intersectioncircle3d",t.Z.createIntersectionCircle3D),t.Z.Point3D=function(t,e,s,o){this.constructor(t.board,o,i.Z.OBJECT_TYPE_POINT3D,i.Z.OBJECT_CLASS_3D),this.constructor3D(t,"point3d"),this.board.finalizeAdding(this),this.coords=[0,0,0,0],this.F=e,this.slide=s,this.X=function(){return this.coords[1]},this.Y=function(){return this.coords[2]},this.Z=function(){return this.coords[3]},this._params=[],this._c2d=null,this.methodMap=r.Z.deepCopy(this.methodMap,{})},t.Z.Point3D.prototype=new t.Z.GeometryElement,r.Z.copyPrototypeMethods(t.Z.Point3D,t.Z.GeometryElement3D,"constructor3D"),t.Z.extend(t.Z.Point3D.prototype,{updateCoords:function(){var t;if(r.Z.isFunction(this.F))this.coords=r.Z.evaluate(this.F),this.coords.unshift(1);else for(this.coords[0]=1,t=0;t<3;t++)r.Z.isFunction(this.F[t])&&(this.coords[t+1]=r.Z.evaluate(this.F[t]));return this},initCoords:function(){var t;if(r.Z.isFunction(this.F))this.coords=r.Z.evaluate(this.F),this.coords.unshift(1);else for(this.coords[0]=1,t=0;t<3;t++)this.coords[t+1]=r.Z.evaluate(this.F[t]);return this},normalizeCoords:function(){return Math.abs(this.coords[0])>o.Z.eps&&(this.coords[1]/=this.coords[0],this.coords[2]/=this.coords[0],this.coords[3]/=this.coords[0],this.coords[0]=1),this},setPosition:function(t,e){var i=this.coords;return 3===t.length?(i[0]=1,i[1]=t[0],i[2]=t[1],i[3]=t[2]):(i[0]=t[0],i[1]=t[1],i[2]=t[2],i[3]=t[2],this.normalizeCoords()),this},update:function(t){var e,r;return this.element2D.draggable()&&0!==h.Z.distance(this._c2d,this.element2D.coords.usrCoords)?this.slide?(this.coords=this.slide.projectScreenCoords([this.element2D.X(),this.element2D.Y()],this._params),this.element2D.coords.setCoordinates(i.Z.COORDS_BY_USER,this.view.project3DTo2D(this.coords))):(this.view.isVerticalDrag()?e=this.view.project2DTo3DVertical(this.element2D,this.coords):(r=[1,0,0,this.coords[3]],e=this.view.project2DTo3DPlane(this.element2D,[1,0,0,1],r)),0!==e[0]&&(this.coords=this.view.project3DToCube(e))):(this.updateCoords(),this.slide&&(this.coords=this.slide.projectCoords([this.X(),this.Y(),this.Z()],this._params)),this.element2D.coords.setCoordinates(i.Z.COORDS_BY_USER,this.view.project3DTo2D([1,this.X(),this.Y(),this.Z()]))),this._c2d=this.element2D.coords.usrCoords.slice(),this},updateRenderer:function(){return this.needsUpdate=!1,this},isIllDefined:function(){return r.Z.cmpArrays(this.coords,[0,0,0,0])},distance:function(t){var e=o.Z.eps*o.Z.eps,i=this.coords,r=t.coords;return i[0]*i[0]>e&&r[0]*r[0]>e?o.Z.hypot(r[1]-i[1],r[2]-i[2],r[3]-i[3]):Number.POSITIVE_INFINITY},__evt__update3D:function(t){}}),t.Z.createPoint3D=function(e,i,s){var o,n,a,h,l,c=i[0];if(a=i.length>2&&r.Z.exists(i[i.length-1].is3D)?i.pop():null,2===i.length)n=i[1];else{if(4!==i.length)throw new Error("JSXGraph: Can't create point3d with parent types '"+typeof i[0]+"' and '"+typeof i[1]+"'.\nPossible parent types: [[x,y,z]], [x,y,z]");n=i.slice(1)}return o=r.Z.copyAttributes(s,e.options,"point3d"),(l=new t.Z.Point3D(c,n,a,o)).initCoords(),h=c.project3DTo2D(l.coords),o=l.setAttr2D(o),l.element2D=c.create("point",h,o),l.addChild(l.element2D),l.inherits.push(l.element2D),l.element2D.setParents(l),l.slide&&(l.slide.addChild(l),l.setParents(l.slide)),l._c2d=l.element2D.coords.usrCoords.slice(),l},t.Z.registerElement("point3d",t.Z.createPoint3D),t.Z.Curve3D=function(t,e,s,o,n,a,h){this.constructor(t.board,h,i.Z.OBJECT_TYPE_CURVE3D,i.Z.OBJECT_CLASS_3D),this.constructor3D(t,"curve3d"),this.board.finalizeAdding(this),this.F=e,this.X=s,this.Y=o,this.Z=n,this.dataX=null,this.dataY=null,this.dataZ=null,null!==this.F&&(this.X=function(t){return this.F(t)[0]},this.Y=function(t){return this.F(t)[1]},this.Z=function(t){return this.F(t)[2]}),this.range=a,this.methodMap=r.Z.deepCopy(this.methodMap,{})},t.Z.Curve3D.prototype=new t.Z.GeometryElement,r.Z.copyPrototypeMethods(t.Z.Curve3D,t.Z.GeometryElement3D,"constructor3D"),t.Z.extend(t.Z.Curve3D.prototype,{updateDataArray2D:function(){var t,e,i,s,o,n,a,h,l,c=r.Z.evaluate(this.visProp.numberpointshigh),d=[0,0,0];if(a=[],h=[],r.Z.exists(this.dataX))for(c=this.dataX.length,n=0;n<c;n++)d=[this.dataX[n],this.dataY[n],this.dataZ[n]],o=this.view.project3DTo2D(d),a.push(o[1]),h.push(o[2]);else if(r.Z.isArray(this.X))for(c=this.X.length,n=0;n<c;n++)d=[this.X[n],this.Y[n],this.Z[n]],o=this.view.project3DTo2D(d),a.push(o[1]),h.push(o[2]);else for(t=r.Z.evaluate(this.range),e=r.Z.evaluate(t[0]),s=((i=r.Z.evaluate(t[1]))-e)/(c-1),l=0,n=e;l<c&&n<=i;l++,n+=s)d=null!==this.F?this.F(n):[this.X(n),this.Y(n),this.Z(n)],o=this.view.project3DTo2D(d),a.push(o[1]),h.push(o[2]);return{X:a,Y:h}},updateDataArray:function(){},update:function(){return this.updateDataArray(),this},updateRenderer:function(){return this.needsUpdate=!1,this},initParamsIfNeeded:function(t){0===t.length&&t.unshift(.5*(this.range[0]+this.range[1]))},projectCoords:function(t,e){return this.initParamsIfNeeded(e),h.Z.projectCoordsToParametric(t,this,e)},projectScreenCoords:function(t,e){return this.initParamsIfNeeded(e),h.Z.projectScreenCoordsToParametric(t,this,e)}}),t.Z.createCurve3D=function(e,i,s){var o,n,a,h,l,c,d,u=i[0];return 3===i.length?(o=i[1],l=i[2],n=null,a=null,h=null):(n=i[1],a=i[2],h=i[3],l=i[4],o=null),c=r.Z.copyAttributes(s,e.options,"curve3d"),c=(d=new t.Z.Curve3D(u,o,n,a,h,l,c)).setAttr2D(c),d.element2D=u.create("curve",[[],[]],c),d.element2D.updateDataArray=function(){var t=d.updateDataArray2D();this.dataX=t.X,this.dataY=t.Y},d.addChild(d.element2D),d.inherits.push(d.element2D),d.element2D.setParents(d),d.element2D.prepareUpdate().update(),e.isSuspendedUpdate||d.element2D.updateVisibility().updateRenderer(),d},t.Z.registerElement("curve3d",t.Z.createCurve3D),t.Z.createVectorfield3D=function(t,e,i){var s,n,a=e[0];if(!(e.length>=5&&(r.Z.isArray(e[1])||r.Z.isFunction(e[0])||r.Z.isString(e[0]))&&r.Z.isArray(e[2])&&3===e[1].length&&r.Z.isArray(e[3])&&3===e[2].length&&r.Z.isArray(e[4])&&3===e[3].length))throw new Error("JSXGraph: Can't create vector field 3D with parent types '"+typeof e[0]+"', '"+typeof e[1]+"', '"+typeof e[2]+"'.'"+typeof e[1]+"', ");return n=r.Z.copyAttributes(i,t.options,"vectorfield3d"),(s=a.create("curve3d",[[],[],[]],n)).setF=function(t,e){var i,o,n;return r.Z.isArray(t)?(i=r.Z.createFunction(t[0],this.board,e),o=r.Z.createFunction(t[1],this.board,e),n=r.Z.createFunction(t[2],this.board,e),this.F=function(t,e,r){return[i(t,e,r),o(t,e,r),n(t,e,r)]}):this.F=r.Z.createFunction(t,s.board,e),this},s.setF(e[1],"x, y, z"),s.xData=e[2],s.yData=e[3],s.zData=e[4],s.updateDataArray=function(){var e,i,s,n,a,h,l,c,d,u,p,f,_,m,g,b,v,Z=r.Z.evaluate(this.visProp.scale),C=[r.Z.evaluate(this.xData[0]),r.Z.evaluate(this.yData[0]),r.Z.evaluate(this.zData[0])],y=[r.Z.evaluate(this.xData[1]),r.Z.evaluate(this.yData[1]),r.Z.evaluate(this.zData[1])],P=[r.Z.evaluate(this.xData[2]),r.Z.evaluate(this.yData[2]),r.Z.evaluate(this.zData[2])],E=[(P[0]-C[0])/y[0],(P[1]-C[1])/y[1],(P[2]-C[2])/y[2]],O=r.Z.evaluate(this.visProp.arrowhead.enabled);for(O&&(_=r.Z.evaluate(this.visProp.arrowhead.size),v=r.Z.evaluate(this.visProp.arrowhead.angle),m=_/t.unitX,g=_/t.unitY,b=_/Math.sqrt(t.unitX*t.unitY)),this.dataX=[],this.dataY=[],this.dataZ=[],i=0,h=C[0];i<=y[0];h+=E[0],i++)for(s=0,l=C[1];s<=y[1];l+=E[1],s++)for(e=0,c=C[2];e<=y[2];c+=E[2],e++)n=this.F(h,l,c),(a=o.Z.norm(n))<Number.EPSILON||(n[0]*=Z,n[1]*=Z,n[2]*=Z,r.Z.concat(this.dataX,[h,h+n[0],NaN]),r.Z.concat(this.dataY,[l,l+n[1],NaN]),r.Z.concat(this.dataZ,[c,c+n[2],NaN]),O&&(a*=Z,d=Math.atan2(n[1],n[0]),u=(f=Math.asin(n[2]/a))-v,p=f+v,r.Z.concat(this.dataX,[h+n[0]-m*Math.cos(d)*Math.cos(u),h+n[0],h+n[0]-m*Math.cos(d)*Math.cos(p),NaN]),r.Z.concat(this.dataY,[l+n[1]-g*Math.sin(d)*Math.cos(u),l+n[1],l+n[1]-g*Math.sin(d)*Math.cos(p),NaN]),r.Z.concat(this.dataZ,[c+n[2]-b*Math.sin(p),c+n[2],c+n[2]-b*Math.sin(u),NaN])))},s.methodMap=r.Z.deepCopy(s.methodMap,{setF:"setF"}),s},t.Z.registerElement("vectorfield3D",t.Z.createVectorfield3D),t.Z.Line3D=function(t,e,s,o,n){this.constructor(t.board,n,i.Z.OBJECT_TYPE_LINE3D,i.Z.OBJECT_CLASS_3D),this.constructor3D(t,"line3d"),this.board.finalizeAdding(this),this.point=e,this.direction=s,this.range=o||[-1/0,1/0],this.point1=null,this.point2=null,this.methodMap=r.Z.deepCopy(this.methodMap,{})},t.Z.Line3D.prototype=new t.Z.GeometryElement,r.Z.copyPrototypeMethods(t.Z.Line3D,t.Z.GeometryElement3D,"constructor3D"),t.Z.extend(t.Z.Line3D.prototype,{getPointCoords:function(t){var e,i,s,o=[];if(e=[this.point.X(),this.point.Y(),this.point.Z()],r.Z.isFunction(this.direction))o=this.direction();else for(i=1;i<4;i++)o.push(r.Z.evaluate(this.direction[i]));return s=r.Z.evaluate(t),t=this.view.intersectionLineCube(e,o,s),[e[0]+o[0]*t,e[1]+o[1]*t,e[2]+o[2]*t]},update:function(){return this},updateRenderer:function(){return this.needsUpdate=!1,this},projectCoords:function(t){var e,i=this.getPointCoords(0),r=this.getPointCoords(1),s=[r[0]-i[0],r[1]-i[1],r[2]-i[2]],n=[t[0]-i[0],t[1]-i[1],t[2]-i[2]],a=o.Z.innerProduct(n,s)/o.Z.innerProduct(s,s),h=Math.min(Math.max(a,this.range[0]),this.range[1]);return(e=this.getPointCoords(h).slice()).unshift(1),e},projectScreenCoords:function(t){var e,i,r,s=this.getPointCoords(0),n=this.getPointCoords(1),a=this.view.project3DTo2D(s).slice(1,3),h=this.view.project3DTo2D(n).slice(1,3),l=[h[0]-a[0],h[1]-a[1]],c=o.Z.innerProduct(l,l),d=[t[0]-a[0],t[1]-a[1]],u=o.Z.innerProduct(d,l)/c;if("central"===this.view.projectionType){const t=this.getPointCoords(.5),i=this.view.project3DTo2D(t).slice(1,3),r=[i[0]-a[0],i[1]-a[1]],s=o.Z.innerProduct(r,l)/c;e=(1-s)*u/((1-2*s)*u+s)}else e=u;return i=Math.min(Math.max(e,this.range[0]),this.range[1]),(r=this.getPointCoords(i).slice()).unshift(1),r}}),t.Z.createLine3D=function(e,i,s){var o,n,a,h,l,c,d,u,p,f=i[0];return o=r.Z.copyAttributes(s,e.options,"line3d"),r.Z.isPoint3D(i[2])||3===i.length&&(r.Z.isArray(i[2])||r.Z.isFunction(i[2]))?(c=r.Z.providePoints3D(f,[i[1]],s,"line3d",["point1"])[0],d=r.Z.providePoints3D(f,[i[2]],s,"line3d",["point2"])[0],h=function(){return[d.X()-c.X(),d.Y()-c.Y(),d.Z()-c.Z()]},l=[0,1],p=new t.Z.Line3D(f,c,h,l,o),(u=r.Z.providePoints3D(f,[[0,0,0],[0,0,0]],{visible:!1},"line3d",["point1","point2"]))[0].F=function(){var t=0;return r.Z.evaluate(p.visProp.straightfirst)&&(t=-1/0),p.getPointCoords(t)},u[1].F=function(){var t=1;return r.Z.evaluate(p.visProp.straightlast)&&(t=1/0),p.getPointCoords(t)},u[0].prepareUpdate().update(),u[1].prepareUpdate().update(),(o=p.setAttr2D(o)).straightfirst=!1,o.straightlast=!1,p.element2D=f.create("segment",[u[0].element2D,u[1].element2D],o),p.endpoints=u,p.addChild(u[0]),p.addChild(u[1]),p.setParents(u)):(a=r.Z.providePoints3D(f,[i[1]],s,"line3d",["point"])[0],r.Z.isFunction(i[2])?h=i[2]:3===i[2].length?h=[1].concat(i[2]):4===i[2].length&&(h=i[2]),l=i[3],n=r.Z.providePoints3D(f,[[0,0,0],[0,0,0]],s,"line3d",["point1","point2"]),p=new t.Z.Line3D(f,a,h,l,o),n[0].F=function(){return p.getPointCoords(r.Z.evaluate(p.range[0]))},n[0].prepareUpdate().update(),c=n[0],n[1].F=function(){return p.getPointCoords(r.Z.evaluate(p.range[1]))},n[1].prepareUpdate().update(),d=n[1],(o=p.setAttr2D(o)).straightfirst=!1,o.straightlast=!1,p.element2D=f.create("segment",[c.element2D,d.element2D],o),p.endpoints=n),p.addChild(p.element2D),p.inherits.push(p.element2D),p.element2D.setParents(p),p.point1=c,p.point2=d,p.point1._is_new?(p.addChild(p.point1),delete p.point1._is_new):p.point1.addChild(p),p.point2._is_new?(p.addChild(p.point2),delete p.point2._is_new):p.point2.addChild(p),r.Z.exists(a)&&(a._is_new?(p.addChild(a),delete a._is_new):a.addChild(p)),p.update(),p.element2D.prepareUpdate().update().updateRenderer(),p},t.Z.registerElement("line3d",t.Z.createLine3D),t.Z.Plane3D=function(t,e,s,o,n,a,h){this.constructor(t.board,h,i.Z.OBJECT_TYPE_PLANE3D,i.Z.OBJECT_CLASS_3D),this.constructor3D(t,"plane3d"),this.board.finalizeAdding(this),this.point=e,this.direction1=s,this.direction2=n,this.range1=o||[-1/0,1/0],this.range2=a||[-1/0,1/0],this.vec1=[0,0,0],this.vec2=[0,0,0],this.grid=null,this.normal=[0,0,0],this.d=0,this.updateNormal(),this.methodMap=r.Z.deepCopy(this.methodMap,{})},t.Z.Plane3D.prototype=new t.Z.GeometryElement,r.Z.copyPrototypeMethods(t.Z.Plane3D,t.Z.GeometryElement3D,"constructor3D"),t.Z.extend(t.Z.Plane3D.prototype,{updateNormal:function(){var t,e;for(t=0;t<3;t++)this.vec1[t]=r.Z.evaluate(this.direction1[t]),this.vec2[t]=r.Z.evaluate(this.direction2[t]);if(this.normal=o.Z.crossProduct(this.vec1,this.vec2),e=o.Z.norm(this.normal),Math.abs(e)>o.Z.eps)for(t=0;t<3;t++)this.normal[t]/=e;return this.d=o.Z.innerProduct(this.point.coords.slice(1),this.normal,3),this},updateDataArray:function(){var t,e,i,s,n,a,l,c,d,u,p,f,_,m,g=["xPlaneRear","yPlaneRear","zPlaneRear"],b=[],v=[0,0,0],Z=[0,0,0],C=[0,0,0],y=[0,0,0],P=this.view;if(this.dataX=[],this.dataY=[],this.updateNormal(),"axisplane3d"!==this.elType&&P.defaultAxes&&r.Z.evaluate(this.range1[0])===-1/0&&r.Z.evaluate(this.range1[1])===1/0&&r.Z.evaluate(this.range2[0])===-1/0&&r.Z.evaluate(this.range2[1])===1/0){for(u=0;u<g.length;u++){if(3===(y=P.intersectionPlanePlane(this,P.defaultAxes[g[u]]))[0].length&&3===y[1].length){for(d=0;d<b.length&&!(h.Z.distance(y[0],b[d][0],3)<o.Z.eps&&h.Z.distance(y[1],b[d][1],3)<o.Z.eps||h.Z.distance(y[0],b[d][1],3)<o.Z.eps&&h.Z.distance(y[1],b[d][0],3)<o.Z.eps);d++);d===b.length&&b.push(y.slice())}if((y=[0,0,0])[u]=P.bbox3D[u][1],c=o.Z.innerProduct(y,P.defaultAxes[g[u]].normal,3),3===(y=P.intersectionPlanePlane(this,P.defaultAxes[g[u]],c))[0].length&&3===y[1].length){for(d=0;d<b.length&&!(h.Z.distance(y[0],b[d][0],3)<o.Z.eps&&h.Z.distance(y[1],b[d][1],3)<o.Z.eps||h.Z.distance(y[0],b[d][1],3)<o.Z.eps&&h.Z.distance(y[1],b[d][0],3)<o.Z.eps);d++);d===b.length&&b.push(y.slice())}}0,_=0,d=0;do{for(3===(y=b[_][d]).length&&(n=P.project3DTo2D(y),this.dataX.push(n[1]),this.dataY.push(n[2])),d=(d+1)%2,y=b[_][d],m=_,u=0;u<b.length;u++){if(u!==_&&h.Z.distance(y,b[u][0])<o.Z.eps){_=u,d=0;break}if(u!==_&&h.Z.distance(y,b[u][1])<o.Z.eps){_=u,d=1;break}}if(_===m){console.log("Error: update plane3d: did not find next",_);break}}while(0!==_);n=P.project3DTo2D(b[0][0]),this.dataX.push(n[1]),this.dataY.push(n[2])}else{for(t=r.Z.evaluate(this.range1[0]),e=r.Z.evaluate(this.range1[1]),i=r.Z.evaluate(this.range2[0]),s=r.Z.evaluate(this.range2[1]),C=this.point.coords.slice(1),v=this.vec1.slice(),Z=this.vec2.slice(),a=o.Z.norm(v,3),l=o.Z.norm(Z,3),d=0;d<3;d++)v[d]/=a,Z[d]/=l;for(u=0;u<4;u++){switch(u){case 0:p=t,f=i;break;case 1:p=e,f=i;break;case 2:p=e,f=s;break;case 3:p=t,f=s}for(d=0;d<3;d++)y[d]=C[d]+p*v[d]+f*Z[d];n=P.project3DTo2D(y),this.dataX.push(n[1]),this.dataY.push(n[2])}this.dataX.push(this.dataX[0]),this.dataY.push(this.dataY[0])}return{X:this.dataX,Y:this.dataY}},update:function(){return this},updateRenderer:function(){return this.needsUpdate=!1,this}}),t.Z.createPlane3D=function(e,i,s){var o,n,a,h,l=i[0],c=i[2],d=i[3],u=i[4]||[-1/0,1/0],p=i[5]||[-1/0,1/0];return n=r.Z.providePoints3D(l,[i[1]],s,"plane3d",["point"])[0],o=r.Z.copyAttributes(s,e.options,"plane3d"),a=new t.Z.Plane3D(l,n,c,u,d,p,o),n.addChild(a),o=a.setAttr2D(o),a.element2D=l.create("curve",[[],[]],o),a.element2D.updateDataArray=function(){var t=a.updateDataArray();this.dataX=t.X,this.dataY=t.Y},a.addChild(a.element2D),a.inherits.push(a.element2D),a.element2D.setParents(a),o=r.Z.copyAttributes(s.mesh3d,e.options,"mesh3d"),Math.abs(a.range1[0])!==1/0&&Math.abs(a.range1[1])!==1/0&&Math.abs(a.range2[0])!==1/0&&Math.abs(a.range2[1])!==1/0&&(h=l.create("mesh3d",[function(){return n.coords},c,u,d,p],o),a.grid=h,a.addChild(h),a.inherits.push(h),h.setParents(a)),a.element2D.prepareUpdate().update(),e.isSuspendedUpdate||a.element2D.updateVisibility().updateRenderer(),a},t.Z.registerElement("plane3d",t.Z.createPlane3D),t.Z.createIntersectionLine3D=function(t,e,s){var o,n,a,l=e[0],c=e[1],d=e[2],u=r.Z.copyAttributes(s,t.options,"intersectionline3d"),p=[];for(n=0;n<2;n++)a=h.Z.intersectionFunction3D(l,c,d,n),p[n]=l.create("point3d",a,u["point"+(n+1)]);o=l.create("line3d",p,u);try{c.addChild(o),d.addChild(o)}catch(t){throw new Error("JSXGraph: Can't create 'intersection' with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.")}return o.type=i.Z.OBJECT_TYPE_INTERSECTION_LINE3D,o.elType="intersectionline3d",o.setParents([c.id,d.id]),o},t.Z.registerElement("intersectionline3d",t.Z.createIntersectionLine3D),t.Z.Polygon3D=function(t,e,r){var s;for(this.constructor(t.board,r,i.Z.OBJECT_TYPE_POLYGON3D,i.Z.OBJECT_CLASS_3D),this.constructor3D(t,"polygon3d"),this.board.finalizeAdding(this),this.vertices=[],s=0;s<e.length;s++)this.vertices[s]=this.board.select(e[s]),this.vertices[s]._is_new&&(delete this.vertices[s]._is_new,this.vertices[s]._is_new_pol=!0)},t.Z.Polygon3D.prototype=new t.Z.GeometryElement,r.Z.copyPrototypeMethods(t.Z.Polygon3D,t.Z.GeometryElement3D,"constructor3D"),t.Z.extend(t.Z.Polygon3D.prototype,{update:function(){return this},updateRenderer:function(){return this.needsUpdate=!1,this}}),t.Z.createPolygon3D=function(e,s,o){var n,a,h,l,c,d,u=s[0],p=[],f=[],_=!1;if(c=r.Z.copyAttributes(o,e.options,"polygon3d"),null===(l=e.select(s[1]))&&(l=s[1]),r.Z.isObject(l)&&l.type===i.Z.OBJECT_TYPE_POLYGON3D&&r.Z.isTransformationOrArray(s[2]))for(_=!0,h=l.vertices.length-1,d=r.Z.copyAttributes(o,e.options,"polygon3d","vertices"),a=0;a<h;a++)d.withlabel&&(d.name=""===l.vertices[a].name?"":l.vertices[a].name+"'"),p.push(e.create("point3d",[l.vertices[a],s[2]],d));else if(!1===(p=r.Z.providePoints3D(u,s.slice(1),o,"polygon3d",["vertices"])))throw new Error("JSXGraph: Can't create polygon3d with parent types other than 'point' and 'coordinate arrays' or a function returning an array of coordinates. Alternatively, a polygon3d and a transformation can be supplied");for((n=new t.Z.Polygon3D(u,p,c)).isDraggable=!0,c=n.setAttr2D(c),a=0;a<p.length;a++)f.push(p[a].element2D);if(n.element2D=e.create("polygon",f,c),n.addChild(n.element2D),n.inherits.push(n.element2D),n.element2D.setParents(n),_)for(n.prepareUpdate().update().updateVisibility().updateRenderer(),h=l.vertices.length-1,a=0;a<h;a++)p[a].prepareUpdate().update().updateVisibility().updateRenderer();return n},t.Z.registerElement("polygon3d",t.Z.createPolygon3D),t.Z.Sphere3D=function(t,e,s,o,n){this.constructor(t.board,n,i.Z.OBJECT_TYPE_SPHERE3D,i.Z.OBJECT_CLASS_3D),this.constructor3D(t,"sphere3d"),this.board.finalizeAdding(this),this.method=e,this.center=this.board.select(s),this.point2=null,this.points=[],this.element2D=null,this.aux2D=[],this.projectionType=t.projectionType,"twoPoints"===e?(this.point2=this.board.select(o),this.radius=this.Radius()):"pointRadius"===e&&(this.updateRadius=r.Z.createFunction(o,this.board),this.updateRadius(),this.addParentsFromJCFunctions([this.updateRadius])),r.Z.exists(this.center._is_new)?(this.addChild(this.center),delete this.center._is_new):this.center.addChild(this),"twoPoints"===e&&(r.Z.exists(this.point2._is_new)?(this.addChild(this.point2),delete this.point2._is_new):this.point2.addChild(this)),this.methodMap=r.Z.deepCopy(this.methodMap,{center:"center",point2:"point2",Radius:"Radius"})},t.Z.Sphere3D.prototype=new t.Z.GeometryElement,r.Z.copyPrototypeMethods(t.Z.Sphere3D,t.Z.GeometryElement3D,"constructor3D"),t.Z.extend(t.Z.Sphere3D.prototype,{update:function(){return this.projectionType!==this.view.projectionType&&this.rebuildProjection(),this},updateRenderer:function(){return this.needsUpdate=!1,this},setRadius:function(t){return this.updateRadius=r.Z.createFunction(t,this.board),this.addParentsFromJCFunctions([this.updateRadius]),this.board.update(),this},Radius:function(t){return r.Z.exists(t)?(this.setRadius(t),this.Radius()):"twoPoints"===this.method?this.center.isIllDefined()||this.point2.isIllDefined()?NaN:this.center.distance(this.point2):"pointRadius"===this.method?Math.abs(this.updateRadius()):NaN},focusFn:function(t){const e=this;return function(){const i=e.view.cameraTransform[3],r=e.Radius();return e.view.project3DTo2D([e.center.X()+t*r*i[1],e.center.Y()+t*r*i[2],e.center.Z()+t*r*i[3]]).slice(1,3)}},innerVertexFn:function(){const t=this;return function(){const e=t.view,i=e.worldToView(t.center.coords,!1),r=Math.sqrt(i[0]*i[0]+i[1]*i[1]),s=e.cameraTransform,n=[-(i[0]*s[1][1]+i[1]*s[2][1])/r,-(i[0]*s[1][2]+i[1]*s[2][2])/r,-(i[0]*s[1][3]+i[1]*s[2][3])/r],a=t.Radius(),h=Math.atan(-r/i[2])+Math.acos(a/o.Z.norm(i)),l=Math.cos(h),c=Math.sin(h);return e.project3DTo2D([t.center.X()+a*(c*n[0]+l*s[3][1]),t.center.Y()+a*(c*n[1]+l*s[3][2]),t.center.Z()+a*(c*n[2]+l*s[3][3])])}},buildCentralProjection:function(){const t=this.view,e={visible:!1,withLabel:!1},i=t.create("point",this.focusFn(-1),e),r=t.create("point",this.focusFn(1),e),s=t.create("point",this.innerVertexFn(t),e);this.aux2D=[i,r,s],this.element2D=t.create("ellipse",this.aux2D,this.visProp)},buildParallelProjection:function(){const t=this;this.aux2D=[],this.element2D=this.view.create("circle",[function(){const e=[1,t.center.X(),t.center.Y(),t.center.Z()];return t.view.project3DTo2D(e)},function(){const e=t.view.bbox3D[0][1]-t.view.bbox3D[0][0];return t.Radius()*t.view.size[0]/e}],this.visProp)},rebuildProjection:function(){if(this.element2D){this.view.board.removeObject(this.element2D);for(let t in this.aux2D)this.view.board.removeObject(this.aux2D[t])}this.projectionType=this.view.projectionType,"central"===this.projectionType?this.buildCentralProjection():this.buildParallelProjection(),this.addChild(this.element2D),this.inherits.push(this.element2D)}}),t.Z.createSphere3D=function(e,i,s){var o,n,a,h,l,c,d=i[0];for(o=r.Z.copyAttributes(s,e.options,"sphere3d"),n=[],c=1;c<i.length;c++)if(r.Z.isPointType3D(e,i[c])){if(a=0===n.length?"center":"point",!1===(h=r.Z.providePoints3D(d,[i[c]],s,"sphere3d",[a])[0]))throw new Error("JSXGraph: Can't create sphere3d from this type. Please provide a point type.");n.push(h)}else n.push(i[c]);if(r.Z.isPoint3D(n[0])&&r.Z.isPoint3D(n[1]))l=new t.Z.Sphere3D(d,"twoPoints",n[0],n[1],o);else if((r.Z.isNumber(n[0])||r.Z.isFunction(n[0])||r.Z.isString(n[0]))&&r.Z.isPoint3D(n[1]))l=new t.Z.Sphere3D(d,"pointRadius",n[1],n[0],o);else{if(!(r.Z.isNumber(n[1])||r.Z.isFunction(n[1])||r.Z.isString(n[1]))||!r.Z.isPoint3D(n[0]))throw new Error("JSXGraph: Can't create sphere3d with parent types '"+typeof i[1]+"' and '"+typeof i[2]+"'.\nPossible parent types: [point,point], [point,number], [point,function]");l=new t.Z.Sphere3D(d,"pointRadius",n[0],n[1],o)}return l.rebuildProjection(),l.element2D.prepareUpdate().update().updateRenderer(),l},t.Z.registerElement("sphere3d",t.Z.createSphere3D),t.Z.Surface3D=function(t,e,s,o,n,a,h,l){this.constructor(t.board,l,i.Z.OBJECT_TYPE_SURFACE3D,i.Z.OBJECT_CLASS_3D),this.constructor3D(t,"surface3d"),this.board.finalizeAdding(this),this.F=e,this.X=s,this.Y=o,this.Z=n,null!==this.F&&(this.X=function(t,e){return this.F(t,e)[0]},this.Y=function(t,e){return this.F(t,e)[1]},this.Z=function(t,e){return this.F(t,e)[2]}),this.range_u=a,this.range_v=h,this.methodMap=r.Z.deepCopy(this.methodMap,{})},t.Z.Surface3D.prototype=new t.Z.GeometryElement,r.Z.copyPrototypeMethods(t.Z.Surface3D,t.Z.GeometryElement3D,"constructor3D"),t.Z.extend(t.Z.Surface3D.prototype,{updateDataArray:function(){var t,e,i=r.Z.evaluate(this.visProp.stepsu),s=r.Z.evaluate(this.visProp.stepsv),o=r.Z.evaluate(this.range_u),n=r.Z.evaluate(this.range_v);return t=null!==this.F?this.F:[this.X,this.Y,this.Z],o.push(i),n.push(s),{X:(e=this.view.getMesh(t,o,n))[0],Y:e[1]}},update:function(){return this},updateRenderer:function(){return this.needsUpdate=!1,this},initParamsIfNeeded:function(t){0===t.length&&t.unshift(.5*(this.range_u[0]+this.range_u[1]),.5*(this.range_v[0]+this.range_v[1]))},projectCoords:function(t,e){return this.initParamsIfNeeded(e),h.Z.projectCoordsToParametric(t,this,e)},projectScreenCoords:function(t,e){return this.initParamsIfNeeded(e),h.Z.projectScreenCoordsToParametric(t,this,e)}}),t.Z.createParametricSurface3D=function(e,i,s){var o,n,a,h,l,c,d,u,p=i[0];return 4===i.length?(o=i[1],l=i[2],c=i[3],n=null,a=null,h=null):(n=i[1],a=i[2],h=i[3],l=i[4],c=i[5],o=null),d=r.Z.copyAttributes(s,e.options,"surface3d"),d=(u=new t.Z.Surface3D(p,o,n,a,h,l,c,d)).setAttr2D(d),u.element2D=p.create("curve",[[],[]],d),u.element2D.updateDataArray=function(){var t=u.updateDataArray();this.dataX=t.X,this.dataY=t.Y},u.addChild(u.element2D),u.inherits.push(u.element2D),u.element2D.setParents(u),u.element2D.prepareUpdate().update(),e.isSuspendedUpdate||u.element2D.updateVisibility().updateRenderer(),u},t.Z.registerElement("parametricsurface3d",t.Z.createParametricSurface3D),t.Z.createFunctiongraph3D=function(t,e,i){var r=e[0],s=e[1],o=e[2],n=e[3];return r.create("parametricsurface3d",[function(t,e){return t},function(t,e){return e},s,o,n],i)},t.Z.registerElement("functiongraph3d",t.Z.createFunctiongraph3D);let at=.75,ht="#000";t.Z.themes.mono_thin={board:{showInfobox:!1,showCopyright:!0,defaultAxes:{x:{ticks:{minorTicks:0,majorHeight:10,majorTickEndings:[1,0]}},y:{ticks:{minorTicks:0,majorHeight:10,majorTickEndings:[0,1]}}}},navbar:{strokeColor:"#bbb",fillColor:"none"},elements:{strokeColor:ht,highlightStrokeColor:ht,fillColor:"none",highlightFillColor:"none",strokeOpacity:.6,highlightStrokeOpacity:1},angle:{strokeColor:ht,fillColor:"#aaaaaa55",fillOpacity:.3,highlightFillColor:"#aaaaaa33",highlightFillOpacity:.3,label:{strokeColor:ht}},arc:{strokeColor:ht,strokeWidth:at,highlightStrokeColor:ht,highlightStrokeWidth:at},axis:{},boxplot:{strokeWidth:at,strokeColor:ht,fillColor:ht,fillOpacity:.2,highlightStrokeWidth:at,highlightStrokeColor:ht,highlightFillColor:ht,highlightFillOpacity:.1},circle:{strokeWidth:at,highlightStrokeWidth:1.125,strokeColor:ht,highlightFillColor:"none",highlightStrokeColor:ht,center:{size:at,fillColor:ht,strokeColor:ht,highlightStrokeWidth:3,highlightFillColor:ht,highlightStrokeColor:ht},point2:{size:at,fillColor:ht,strokeColor:ht,highlightStrokeWidth:3,highlightFillColor:ht,highlightStrokeColor:ht}},circumcircle:{strokeWidth:at,highlightStrokeWidth:1.125,strokeColor:ht,highlightFillColor:"none",highlightStrokeColor:ht,center:{size:at,fillColor:ht,strokeColor:ht,highlightStrokeWidth:3,highlightFillColor:ht,highlightStrokeColor:ht}},circumcirclearc:{strokeColor:ht,strokeWidth:at,highlightStrokeColor:ht,highlightStrokeWidth:at},circumcirclesector:{strokeColor:ht,fillColor:"#aaaaaa55",fillOpacity:.3,highlightFillColor:"#aaaaaa33",highlightFillOpacity:.3},comb:{strokeColor:ht,strokeWidth:at},conic:{strokeWidth:at,highlightStrokeWidth:1.125,strokeColor:ht,highlightStrokeColor:ht,fillColor:"none",highlightFillColor:"none"},curve:{strokeColor:ht,strokeWidth:at,highlightStrokeColor:ht,highlightStrokeWidth:at},grid:{strokeWidth:at},hatch:{strokeColor:ht,strokeWidth:at},incircle:{strokeWidth:at,highlightStrokeWidth:1.125,strokeColor:ht,highlightFillColor:"none",highlightStrokeColor:ht,center:{size:at,fillColor:ht,strokeColor:ht,highlightStrokeWidth:3,highlightFillColor:ht,highlightStrokeColor:ht}},inequality:{fillColor:"#aaaaaa55",fillOpacity:.2},label:{strokeColor:ht},line:{strokeColor:ht,strokeWidth:at,highlightStrokeColor:ht,highlightStrokeWidth:at,point1:{size:at,fillColor:ht,strokeColor:ht,highlightStrokeWidth:3,highlightFillColor:ht,highlightStrokeColor:ht},point2:{size:at,fillColor:ht,strokeColor:ht,highlightStrokeWidth:3,highlightFillColor:ht,highlightStrokeColor:ht}},normal:{strokeColor:ht},parallel:{strokeColor:ht},perpendicular:{strokeColor:ht},perpendicularsegment:{strokeColor:ht},point:{size:at,fillColor:ht,strokeColor:ht,highlightStrokeWidth:3,highlightFillColor:ht,highlightStrokeColor:ht},polygon:{fillColor:"#aaaaaa55",highlightFillColor:"#aaaaaa33",fillOpacity:.3,highlightFillOpacity:.3,vertices:{size:at,fillColor:ht,strokeColor:ht,highlightStrokeWidth:3,highlightFillColor:ht,highlightStrokeColor:ht},borders:{strokeColor:ht,strokeWidth:at,highlightStrokeColor:ht,highlightStrokeWidth:at}},sector:{strokeColor:ht,fillColor:"#aaaaaa55",fillOpacity:.3,highlightFillColor:"#aaaaaa33",highlightFillOpacity:.3},semicircle:{center:{size:at,fillColor:ht,strokeColor:ht,highlightStrokeWidth:3,highlightFillColor:ht,highlightStrokeColor:ht}},slider:{size:at,fillColor:ht,strokeColor:ht,highlightStrokeWidth:3,highlightFillColor:ht,highlightStrokeColor:ht,baseline:{strokeWidth:at,strokeColor:ht,highlightStrokeColor:ht},label:{strokeColor:ht},highline:{strokeWidth:2.25,name:"",strokeColor:ht,highlightStrokeColor:ht},ticks:{strokeColor:ht}},slopefield:{strokeWidth:.5625,highlightStrokeWidth:at,highlightStrokeColor:ht,highlightStrokeOpacity:.8},tapemeasure:{strokeColor:ht,strokeWidth:at,highlightStrokeColor:ht,highlightStrokeWidth:at,point1:{size:at,fillColor:ht,strokeColor:ht,highlightStrokeWidth:3,highlightFillColor:ht,highlightStrokeColor:ht},point2:{size:at,fillColor:ht,strokeColor:ht,highlightStrokeWidth:3,highlightFillColor:ht,highlightStrokeColor:ht},ticks:{strokeWidth:at}},text:{strokeColor:ht},tracecurve:{strokeColor:ht},turtle:{strokeWidth:at,strokeColor:ht,arrow:{strokeWidth:1.5,strokeColor:"#aaaaaa55"}},vectorfield:{strokeWidth:.5625,highlightStrokeWidth:at,highlightStrokeColor:ht,highlightStrokeOpacity:.8}};t.Z.COORDS_BY_SCREEN,t.Z.COORDS_BY_USER,t.Z.Dump,t.Z.Expect,t.Z.JSXGraph,t.Z.Math,t.Z.Options,t.Z.boards,t.Z.elements,t.Z.palette,t.Z.paletteWong,t.Z.Board,t.Z.Chart,t.Z.Circle,t.Z.Complex,t.Z.Composition,t.Z.Coords,t.Z.CoordsElement,t.Z.Curve,t.Z.GeometryElement,t.Z.Group,t.Z.Image,t.Z.JessieCode,t.Z.PrefixParser,t.Z.Line,t.Z.Point,t.Z.Polygon,t.Z.Text,t.Z.Ticks,t.Z.Transformation,t.Z.Turtle,t.Z.View3D,t.Z.LMS2rgb,t.Z.addEvent,t.Z.autoDigits,t.Z.autoHighlight,t.Z.bind,t.Z.capitalize,t.Z.clearVisPropOld,t.Z.clone,t.Z.cloneAndCopy,t.Z.cmpArrays,t.Z.coordsArrayToMatrix,t.Z.copyAttributes,t.Z.createEvalFunction,t.Z.createFunction,t.Z.createHTMLSlider,t.Z.darkenColor,t.Z.debug,t.Z.debugInt,t.Z.debugLine,t.Z.debugWST,t.Z.deepCopy,t.Z.def,t.Z.deprecated,t.Z.eliminateDuplicates,t.Z.escapeHTML,t.Z.evalSlider,t.Z.evaluate,t.Z.filterElements,t.Z.getBoardByContainerId,t.Z.getCSSTransformMatrix,t.Z.getCSSTransform,t.Z.getDimensions,t.Z.getOffset,t.Z.getPosition,t.Z.getProp,t.Z.hex2rgb,t.Z.hsv2rgb,t.Z.isAndroid,t.Z.isApple,t.Z.isArray,t.Z.isDesktop,t.Z.isInArray,t.Z.isInObject,t.Z.isMetroApp,t.Z.isMobile,t.Z.isMozilla,t.Z.isBoard,t.Z.isName,t.Z.isNode,t.Z.isNumber,t.Z.isObject,t.Z.isPoint,t.Z.isPoint3D,t.Z.isPointType,t.Z.isPointType3D,t.Z.isString,t.Z.isTouchDevice,t.Z.isTransformationOrArray,t.Z.isWebWorker,t.Z.isWebkitAndroid,t.Z.isWebkitApple,t.Z.keys,t.Z.lightenColor,t.Z.merge,t.Z.normalizePointFace,t.Z.providePoints,t.Z.registerElement,t.Z.registerReader,t.Z.removeAllEvents,t.Z.removeElementFromArray,t.Z.removeEvent,t.Z.rgb2LMS,t.Z.rgb2bw,t.Z.rgb2cb,t.Z.rgb2css,t.Z.rgb2hex,t.Z.rgb2hsv,t.Z.rgbParser,t.Z.rgba2rgbo,t.Z.rgbo2rgba,t.Z.sanitizeHTML,t.Z.shortcut,t.Z.str2Bool,t.Z.supportsCanvas,t.Z.supportsPointerEvents,t.Z.supportsSVG,t.Z.supportsVML,t.Z.swap,t.Z.timedChunk,t.Z.toFixed,t.Z.toFullscreen,t.Z.toJSON,t.Z.trim,t.Z.trimNumber,t.Z.truncate,t.Z.unescapeHTML,t.Z.uniqueArray,t.Z.useBlackWhiteOptions,t.Z.useStandardOptions,t.Z.warn;e.Z.isBrowser?window.JXG=t.Z:e.Z.isWebWorker()&&(self.JXG=t.Z);var lt=t.Z}(),__webpack_exports__=__webpack_exports__.default,__webpack_exports__}()}));
|
|
55
|
+
!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.JXG=e():t.JXG=e()}("undefined"!=typeof self?self:this,(function(){return function(){"use strict";var __webpack_modules__={561:function(t,e,i){var s,r=i(443),o="1.9.2";s={version:o,licenseText:"JSXGraph v1.9.2 Copyright (C) see https://jsxgraph.org",COORDS_BY_USER:1,COORDS_BY_SCREEN:2,OBJECT_TYPE_ARC:1,OBJECT_TYPE_ARROW:2,OBJECT_TYPE_AXIS:3,OBJECT_TYPE_AXISPOINT:4,OBJECT_TYPE_TICKS:5,OBJECT_TYPE_CIRCLE:6,OBJECT_TYPE_CONIC:7,OBJECT_TYPE_CURVE:8,OBJECT_TYPE_GLIDER:9,OBJECT_TYPE_IMAGE:10,OBJECT_TYPE_LINE:11,OBJECT_TYPE_POINT:12,OBJECT_TYPE_SLIDER:13,OBJECT_TYPE_CAS:14,OBJECT_TYPE_GXTCAS:15,OBJECT_TYPE_POLYGON:16,OBJECT_TYPE_SECTOR:17,OBJECT_TYPE_TEXT:18,OBJECT_TYPE_ANGLE:19,OBJECT_TYPE_INTERSECTION:20,OBJECT_TYPE_TURTLE:21,OBJECT_TYPE_VECTOR:22,OBJECT_TYPE_OPROJECT:23,OBJECT_TYPE_GRID:24,OBJECT_TYPE_TANGENT:25,OBJECT_TYPE_HTMLSLIDER:26,OBJECT_TYPE_CHECKBOX:27,OBJECT_TYPE_INPUT:28,OBJECT_TYPE_BUTTON:29,OBJECT_TYPE_TRANSFORMATION:30,OBJECT_TYPE_FOREIGNOBJECT:31,OBJECT_TYPE_VIEW3D:32,OBJECT_TYPE_POINT3D:33,OBJECT_TYPE_LINE3D:34,OBJECT_TYPE_PLANE3D:35,OBJECT_TYPE_CURVE3D:36,OBJECT_TYPE_SURFACE3D:37,OBJECT_TYPE_MEASUREMENT:38,OBJECT_TYPE_INTERSECTION_LINE3D:39,OBJECT_TYPE_SPHERE3D:40,OBJECT_TYPE_CIRCLE3D:41,OBJECT_TYPE_INTERSECTION_CIRCLE3D:42,OBJECT_CLASS_POINT:1,OBJECT_CLASS_LINE:2,OBJECT_CLASS_CIRCLE:3,OBJECT_CLASS_CURVE:4,OBJECT_CLASS_AREA:5,OBJECT_CLASS_OTHER:6,OBJECT_CLASS_TEXT:7,OBJECT_CLASS_3D:8},r.A.extendConstants(r.A,s),e.A=s},904:function(t,e,i){var s=i(443),r=i(561),o=i(454),n=i(188),a=i(477);s.A.Coords=function(t,e,i,s){this.board=i,this.usrCoords=[],this.scrCoords=[],this.emitter=!n.A.exists(s)||s,this.emitter&&o.A.eventify(this),this.setCoordinates(t,e,!1,!0)},s.A.extend(s.A.Coords.prototype,{normalizeUsrCoords:function(){Math.abs(this.usrCoords[0])>a.A.eps&&(this.usrCoords[1]/=this.usrCoords[0],this.usrCoords[2]/=this.usrCoords[0],this.usrCoords[0]=1)},usr2screen:function(t){var e=Math.round,i=this.board,s=this.usrCoords,r=i.origin.scrCoords;!0===t?(this.scrCoords[0]=e(s[0]),this.scrCoords[1]=e(s[0]*r[1]+s[1]*i.unitX),this.scrCoords[2]=e(s[0]*r[2]-s[2]*i.unitY)):(this.scrCoords[0]=s[0],this.scrCoords[1]=s[0]*r[1]+s[1]*i.unitX,this.scrCoords[2]=s[0]*r[2]-s[2]*i.unitY)},screen2usr:function(){var t=this.board.origin.scrCoords,e=this.scrCoords,i=this.board;this.usrCoords[0]=1,this.usrCoords[1]=(e[1]-t[1])/i.unitX,this.usrCoords[2]=(t[2]-e[2])/i.unitY},distance:function(t,e){var i,s,o=this.usrCoords,n=this.scrCoords;return t===r.A.COORDS_BY_USER?(i=e.usrCoords,(s=o[0]-i[0])*s>a.A.eps*a.A.eps?Number.POSITIVE_INFINITY:a.A.hypot(o[1]-i[1],o[2]-i[2])):(i=e.scrCoords,a.A.hypot(n[1]-i[1],n[2]-i[2]))},setCoordinates:function(t,e,i,s){var o=this.usrCoords,n=this.scrCoords,a=[o[0],o[1],o[2]],l=[n[0],n[1],n[2]];return t===r.A.COORDS_BY_USER?(2===e.length?(o[0]=1,o[1]=e[0],o[2]=e[1]):(o[0]=e[0],o[1]=e[1],o[2]=e[2],this.normalizeUsrCoords()),this.usr2screen(i)):(2===e.length?(n[1]=e[0],n[2]=e[1]):(n[1]=e[1],n[2]=e[2]),this.screen2usr()),!this.emitter||s||l[1]===n[1]&&l[2]===n[2]||this.triggerEventHandlers(["update"],[a,l]),this},copy:function(t,e){return void 0===e&&(e=0),this[t].slice(e)},isReal:function(){return!isNaN(this.usrCoords[1]+this.usrCoords[2])&&Math.abs(this.usrCoords[0])>a.A.eps},__evt__update:function(t,e){},__evt:function(){}}),e.A=s.A.Coords},102:function(t,e,i){var s=i(443),r=i(477),o=i(571),n=i(171),a=i(588),l=i(904),h=i(561),u=i(188);s.A.CoordsElement=function(t,e){var i;for(u.A.exists(t)||(t=[1,0,0]),i=0;i<t.length;++i)t[i]=parseFloat(t[i]);this.coords=new l.A(h.A.COORDS_BY_USER,t,this.board),this.initialCoords=new l.A(h.A.COORDS_BY_USER,t,this.board),this.position=null,this.isConstrained=!1,this.onPolygon=!1,this.slideObject=null,this.slideObjects=[],this.needsUpdateFromParent=!0,this.groups=[],this.Xjc=null,this.Yjc=null,this.methodMap=u.A.deepCopy(this.methodMap,{move:"moveTo",moveTo:"moveTo",moveAlong:"moveAlong",visit:"visit",glide:"makeGlider",makeGlider:"makeGlider",intersect:"makeIntersection",makeIntersection:"makeIntersection",X:"X",Y:"Y",Coords:"Coords",free:"free",setPosition:"setGliderPosition",setGliderPosition:"setGliderPosition",addConstraint:"addConstraint",dist:"Dist",Dist:"Dist",onPolygon:"onPolygon",startAnimation:"startAnimation",stopAnimation:"stopAnimation"}),u.A.exists(this.element)&&this.addAnchor(t,e),this.isDraggable=!0},s.A.extend(s.A.CoordsElement.prototype,{updateConstraint:function(){return this},updateCoords:function(t){return this.needsUpdate?(u.A.exists(t)||(t=!1),u.A.evaluate(this.visProp.frozen)||this.updateConstraint(),this.type===h.A.OBJECT_TYPE_GLIDER&&(this.isConstrained&&(t=!1),t?this.updateGliderFromParent():this.updateGlider()),this.updateTransform(t),this):this},updateGlider:function(){var t,e,i,s,n,a,c,d,p,_,f,A,g,m,y,b,v,C,P,x,E=2*Math.PI,O=!1,M=this.slideObject,S=[];if(this.needsUpdateFromParent=!1,M.elementClass===h.A.OBJECT_CLASS_CIRCLE)u.A.evaluate(this.visProp.isgeonext)&&(E=1),m=o.A.projectPointToCircle(this,M,this.board),y=o.A.rad([M.center.X()+1,M.center.Y()],M.center,this)/E;else if(M.elementClass===h.A.OBJECT_CLASS_LINE){if(this.onPolygon){if(s=M.point1.coords.usrCoords,e=(n=M.point2.coords.usrCoords)[t=1]-s[t],Math.abs(e)<r.A.eps&&(e=n[t=2]-s[t]),c=(o.A.projectPointToLine(this,M,this.board).usrCoords[t]-s[t])/e,a=M.parentPolygon,c<0){for(t=0;t<a.borders.length;t++)if(M===a.borders[t]){M=a.borders[(t-1+a.borders.length)%a.borders.length];break}}else if(c>1)for(t=0;t<a.borders.length;t++)if(M===a.borders[t]){M=a.borders[(t+1+a.borders.length)%a.borders.length];break}M.id!==this.slideObject.id&&(this.slideObject=M)}s=M.point1.coords,n=M.point2.coords,(e=s.distance(h.A.COORDS_BY_USER,n))<r.A.eps?(m=s,O=!0,y=0):(m=o.A.projectPointToLine(this,M,this.board),s=s.usrCoords.slice(0),n=n.usrCoords.slice(0),Math.abs(n[0])<r.A.eps?(e=n[t=1],Math.abs(e)<r.A.eps&&(e=n[t=2]),y=((e=(m.usrCoords[t]-s[t])/e)>=0?1:-1)*(e=Math.abs(e))/(e+1)):Math.abs(s[0])<r.A.eps?(e=s[t=1],Math.abs(e)<r.A.eps&&(e=s[t=2]),y=(e=(m.usrCoords[t]-n[t])/e)<0?(1-2*e)/(1-e):1/(e+1)):(e=n[t=1]-s[t],Math.abs(e)<r.A.eps&&(e=n[t=2]-s[t]),y=(m.usrCoords[t]-s[t])/e)),null!==(v=this.findClosestSnapValue(y))?(y=(u.A.evaluate(this.visProp.snapvalues)[v]-this._smin)/(this._smax-this._smin),this.update(!0)):(b=u.A.evaluate(this.visProp.snapwidth),u.A.evaluate(b)>0&&Math.abs(this._smax-this._smin)>=r.A.eps&&(i=(y=Math.max(Math.min(y,1),0))*(this._smax-this._smin)+this._smin,y=((i=Math.round(i/b)*b)-this._smin)/(this._smax-this._smin),this.update(!0))),s=M.point1.coords,!u.A.evaluate(M.visProp.straightfirst)&&Math.abs(s.usrCoords[0])>r.A.eps&&y<0&&(m=s,O=!0,y=0),n=M.point2.coords,!u.A.evaluate(M.visProp.straightlast)&&Math.abs(n.usrCoords[0])>r.A.eps&&y>1&&(m=n,O=!0,y=1)}else if(M.type===h.A.OBJECT_TYPE_TURTLE)this.updateConstraint(),m=(C=o.A.projectPointToTurtle(this,M,this.board))[0],y=C[1];else if(M.elementClass===h.A.OBJECT_CLASS_CURVE)if(M.type===h.A.OBJECT_TYPE_ARC||M.type===h.A.OBJECT_TYPE_SECTOR)m=o.A.projectPointToCircle(this,M,this.board),d=o.A.rad(M.radiuspoint,M.center,this),p=0,_=o.A.rad(M.radiuspoint,M.center,M.anglepoint),y=d,("minor"===(b=u.A.evaluate(M.visProp.selection))&&_>Math.PI||"major"===b&&_<Math.PI)&&(p=_,_=2*Math.PI),(d<p||d>_)&&(y=_,(d<p&&d>.5*p||d>_&&d>.5*_+Math.PI)&&(y=p),this.needsUpdateFromParent=!0,this.updateGliderFromParent()),E=_-p,this.visProp.isgeonext&&(E=1),Math.abs(E)>r.A.eps&&(y/=E);else if(this.updateConstraint(),M.transformations.length>0){for(x=!1,(C=M.getTransformationSource())[0]&&(x=C[0],S.push(M),S.push(C[1]));C[0]&&u.A.exists(C[1]._transformationSource);)C=C[1].getTransformationSource(),S.push(C[1]);if(P=this.coords.usrCoords,x){for(t=0;t<S.length;t++)S[t].updateTransformMatrix(),g=r.A.inverse(S[t].transformMat),P=r.A.matVecMult(g,P);for(f=new l.A(h.A.COORDS_BY_USER,P,this.board).usrCoords,P=(A=o.A.projectCoordsToCurve(f[1],f[2],this.position||0,S[S.length-1],this.board))[0].usrCoords,t=S.length-2;t>=0;t--)P=r.A.matVecMult(S[t].transformMat,P);A[0]=new l.A(h.A.COORDS_BY_USER,P,this.board)}else M.updateTransformMatrix(),g=r.A.inverse(M.transformMat),P=r.A.matVecMult(g,P),f=new l.A(h.A.COORDS_BY_USER,P,this.board).usrCoords,A=o.A.projectCoordsToCurve(f[1],f[2],this.position||0,M,this.board);m=A[0],y=A[1]}else m=(C=o.A.projectPointToCurve(this,M,this.board))[0],y=C[1];else u.A.isPoint(M)&&(m=o.A.projectPointToPoint(this,M,this.board),y=this.position);this.coords.setCoordinates(h.A.COORDS_BY_USER,m.usrCoords,O),this.position=y},findClosestSnapValue:function(t){var e,i,s,o,n=null;if(s=u.A.evaluate(this.visProp.snapvalues),o=u.A.evaluate(this.visProp.snapvaluedistance),u.A.isArray(s)&&Math.abs(this._smax-this._smin)>=r.A.eps&&o>0)for(e=0;e<s.length;e++)(i=Math.abs(t*(this._smax-this._smin)+this._smin-s[e]))<o&&(o=i,n=e);return n},updateGliderFromParent:function(){var t,e,i,s,n,a,c,d,p,_,f,A,g=this.slideObject,m=[],y=2*Math.PI;if(this.needsUpdateFromParent){if(g.elementClass===h.A.OBJECT_CLASS_CIRCLE)i=g.Radius(),u.A.evaluate(this.visProp.isgeonext)&&(y=1),n=[g.center.X()+i*Math.cos(this.position*y),g.center.Y()+i*Math.sin(this.position*y)];else if(g.elementClass===h.A.OBJECT_CLASS_LINE)t=g.point1.coords.usrCoords,e=g.point2.coords.usrCoords,0===t[0]&&0===t[1]&&0===t[2]||0===e[0]&&0===e[1]&&0===e[2]?n=[0,0,0]:Math.abs(e[0])<r.A.eps?(s=Math.min(Math.abs(this.position),1-r.A.eps),s/=1-s,this.position<0&&(s=-s),n=[t[0]+s*e[0],t[1]+s*e[1],t[2]+s*e[2]]):Math.abs(t[0])<r.A.eps?(s=Math.max(this.position,r.A.eps),s=(s=Math.min(s,2-r.A.eps))>1?(s-1)/(s-2):(1-s)/s,n=[e[0]+s*t[0],e[1]+s*t[1],e[2]+s*t[2]]):(s=this.position,n=[t[0]+s*(e[0]-t[0]),t[1]+s*(e[1]-t[1]),t[2]+s*(e[2]-t[2])]);else if(g.type===h.A.OBJECT_TYPE_TURTLE)this.coords.setCoordinates(h.A.COORDS_BY_USER,[g.Z(this.position),g.X(this.position),g.Y(this.position)]),this.updateConstraint(),n=o.A.projectPointToTurtle(this,g,this.board)[0].usrCoords;else if(g.elementClass===h.A.OBJECT_CLASS_CURVE){for(d=!1,(a=g.getTransformationSource())[0]&&(d=a[0],m.push(g),m.push(a[1]));a[0]&&u.A.exists(a[1]._transformationSource);)a=a[1].getTransformationSource(),m.push(a[1]);if(d?this.coords.setCoordinates(h.A.COORDS_BY_USER,[m[m.length-1].Z(this.position),m[m.length-1].X(this.position),m[m.length-1].Y(this.position)]):this.coords.setCoordinates(h.A.COORDS_BY_USER,[g.Z(this.position),g.X(this.position),g.Y(this.position)]),g.type===h.A.OBJECT_TYPE_ARC||g.type===h.A.OBJECT_TYPE_SECTOR)p=o.A.rad([g.center.X()+1,g.center.Y()],g.center,g.radiuspoint),_=0,A=o.A.rad(g.radiuspoint,g.center,g.anglepoint),("minor"===g.visProp.selection&&A>Math.PI||"major"===g.visProp.selection&&A<Math.PI)&&(_=A,A=2*Math.PI),y=A-_,u.A.evaluate(this.visProp.isgeonext)&&(y=1),((f=this.position*y)<_||f>A)&&(((f=A)<_&&f>.5*_||f>A&&f>.5*A+Math.PI)&&(f=_),this.position=f,Math.abs(y)>r.A.eps&&(this.position/=y)),i=g.Radius(),n=[g.center.X()+i*Math.cos(this.position*y+p),g.center.Y()+i*Math.sin(this.position*y+p)];else if(this.updateConstraint(),d)for(n=o.A.projectPointToCurve(this,m[m.length-1],this.board)[0].usrCoords,c=m.length-2;c>=0;c--)n=new l.A(h.A.COORDS_BY_USER,r.A.matVecMult(m[c].transformMat,n),this.board).usrCoords;else n=o.A.projectPointToCurve(this,g,this.board)[0].usrCoords}else u.A.isPoint(g)&&(n=o.A.projectPointToPoint(this,g,this.board).usrCoords);this.coords.setCoordinates(h.A.COORDS_BY_USER,n,!1)}else this.needsUpdateFromParent=!0},updateRendererGeneric:function(t){return this.needsUpdate&&this.board.renderer?(this.visPropCalc.visible&&(this.isReal=!isNaN(this.coords.usrCoords[1]+this.coords.usrCoords[2]),this.isReal=Math.abs(this.coords.usrCoords[0])>r.A.eps&&this.isReal,this.isReal||this.updateVisibility(!1)),this.visPropCalc.visible&&this.board.renderer[t](this),this.hasLabel&&this.visPropCalc.visible&&this.label&&this.label.visPropCalc.visible&&this.isReal&&(this.label.update(),this.board.renderer.updateText(this.label)),this.setDisplayRendNode(),this.needsUpdate=!1,this):this},X:function(){return this.coords.usrCoords[1]},Y:function(){return this.coords.usrCoords[2]},Z:function(){return this.coords.usrCoords[0]},Coords:function(t){return t?this.coords.usrCoords.slice():this.coords.usrCoords.slice(1)},XEval:function(){return this.coords.usrCoords[1]},YEval:function(){return this.coords.usrCoords[2]},ZEval:function(){return this.coords.usrCoords[0]},Dist:function(t){return this.isReal&&t.isReal?this.coords.distance(h.A.COORDS_BY_USER,t.coords):NaN},snapToGrid:function(t){return this.handleSnapToGrid(t)},handleSnapToPoints:function(t){var e,i,s,r,n,a,l,c,d=0,p=1/0,_=null,f=u.A.evaluate(this.visProp.ignoredsnaptopoints),A=!1;if(r=this.board.objectsList.length,f&&(l=f.length),u.A.evaluate(this.visProp.snaptopoints)||t){for(n=u.A.evaluate(this.visProp.attractorunit),a=u.A.evaluate(this.visProp.attractordistance),e=0;e<r;e++){if(i=this.board.objectsList[e],f){for(A=!1,c=0;c<l;c++)if(i===this.board.select(f[c])){A=!0;break}if(A)continue}u.A.isPoint(i)&&i!==this&&i.visPropCalc.visible&&(s=o.A.projectPointToPoint(this,i,this.board),(d="screen"===n?s.distance(h.A.COORDS_BY_SCREEN,this.coords):s.distance(h.A.COORDS_BY_USER,this.coords))<a&&d<p&&(p=d,_=s))}null!==_&&this.coords.setCoordinates(h.A.COORDS_BY_USER,_.usrCoords)}return this},snapToPoints:function(t){return this.handleSnapToPoints(t)},handleAttractors:function(){var t,e,i,s,r=0,n=u.A.evaluate(this.visProp.attractorunit),a=u.A.evaluate(this.visProp.attractordistance),c=u.A.evaluate(this.visProp.snatchdistance),d=u.A.evaluate(this.visProp.attractors),p=d.length;if(0!==a){for(t=0;t<p;t++)if(e=this.board.select(d[t]),u.A.exists(e)&&e!==this){if(u.A.isPoint(e)?i=o.A.projectPointToPoint(this,e,this.board):e.elementClass===h.A.OBJECT_CLASS_LINE?(s=o.A.projectCoordsToSegment(this.coords.usrCoords,e.point1.coords.usrCoords,e.point2.coords.usrCoords),i=!u.A.evaluate(e.visProp.straightfirst)&&s[1]<0?e.point1.coords:!u.A.evaluate(e.visProp.straightlast)&&s[1]>1?e.point2.coords:new l.A(h.A.COORDS_BY_USER,s[0],this.board)):e.elementClass===h.A.OBJECT_CLASS_CIRCLE?i=o.A.projectPointToCircle(this,e,this.board):e.elementClass===h.A.OBJECT_CLASS_CURVE?i=o.A.projectPointToCurve(this,e,this.board)[0]:e.type===h.A.OBJECT_TYPE_TURTLE?i=o.A.projectPointToTurtle(this,e,this.board)[0]:e.type===h.A.OBJECT_TYPE_POLYGON&&(i=new l.A(h.A.COORDS_BY_USER,o.A.projectCoordsToPolygon(this.coords.usrCoords,e),this.board)),(r="screen"===n?i.distance(h.A.COORDS_BY_SCREEN,this.coords):i.distance(h.A.COORDS_BY_USER,this.coords))<a){this.type===h.A.OBJECT_TYPE_GLIDER&&(e===this.slideObject||this.slideObject&&this.onPolygon&&this.slideObject.parentPolygon===e)||this.makeGlider(e);break}r>=c&&(e===this.slideObject||this.slideObject&&this.onPolygon&&this.slideObject.parentPolygon===e)&&this.popSlideObject()}return this}},setPositionDirectly:function(t,e){var i,s,o,n,c=this.coords;if(this.relativeCoords)return s=new l.A(t,e,this.board),u.A.evaluate(this.visProp.islabel)?(o=a.A.subtract(s.scrCoords,c.scrCoords),this.relativeCoords.scrCoords[1]+=o[1],this.relativeCoords.scrCoords[2]+=o[2]):(o=a.A.subtract(s.usrCoords,c.usrCoords),this.relativeCoords.usrCoords[1]+=o[1],this.relativeCoords.usrCoords[2]+=o[2]),this;for(this.coords.setCoordinates(t,e),this.handleSnapToGrid(),this.handleSnapToPoints(),this.handleAttractors(),i=this.transformations.length-1;i>=0;i--)t===h.A.COORDS_BY_SCREEN?n=new l.A(t,e,this.board).usrCoords:(2===e.length&&(e=[1].concat(e)),n=e),this.initialCoords.setCoordinates(h.A.COORDS_BY_USER,r.A.matVecMult(r.A.inverse(this.transformations[i].matrix),n));return this.prepareUpdate().update(),this.board.isSuspendedUpdate&&this.type===h.A.OBJECT_TYPE_GLIDER&&this.updateGlider(),this},setPositionByTransform:function(t,e){var i;return e=new l.A(t,e,this.board),i=this.board.create("transform",e.usrCoords.slice(1),{type:"translate"}),this.transformations.length>0&&this.transformations[this.transformations.length-1].isNumericMatrix?this.transformations[this.transformations.length-1].melt(i):this.addTransform(this,i),this.prepareUpdate().update(),this},setPosition:function(t,e){return this.setPositionDirectly(t,e)},setGliderPosition:function(t){return this.type===h.A.OBJECT_TYPE_GLIDER&&(this.position=t,this.board.update()),this},makeGlider:function(t){var e,i,r,o=this.board.select(t),n=!1;if(o.type===h.A.OBJECT_TYPE_POLYGON){for(e=Number.MAX_VALUE,i=0;i<o.borders.length;i++)(r=s.A.Math.Geometry.distPointLine(this.coords.usrCoords,o.borders[i].stdform))<e&&(e=r,t=o.borders[i]);o=this.board.select(t),n=!0}if(!u.A.exists(o))throw new Error("JSXGraph: slide object undefined.");if(o.type===h.A.OBJECT_TYPE_TICKS)throw new Error("JSXGraph: gliders on ticks are not possible.");return this.slideObject=this.board.select(t),this.slideObjects.push(this.slideObject),this.addParents(t),this.type=h.A.OBJECT_TYPE_GLIDER,this.elType="glider",this.visProp.snapwidth=-1,this.slideObject.addChild(this),this.isDraggable=!0,this.onPolygon=n,this.generatePolynomial=function(){return this.slideObject.generatePolynomial(this)},this.updateGlider(),this.needsUpdateFromParent=!0,this.updateGliderFromParent(),this},popSlideObject:function(){this.slideObjects.length>0&&(this.slideObjects.pop(),this.slideObject.removeChild(this),0===this.slideObjects.length?(this.type=this._org_type,this.type===h.A.OBJECT_TYPE_POINT?this.elType="point":this.elementClass===h.A.OBJECT_CLASS_TEXT?this.elType="text":this.type===h.A.OBJECT_TYPE_IMAGE?this.elType="image":this.type===h.A.OBJECT_TYPE_FOREIGNOBJECT&&(this.elType="foreignobject"),this.slideObject=null):this.slideObject=this.slideObjects[this.slideObjects.length-1])},free:function(){var t,e;if(this.type!==h.A.OBJECT_TYPE_GLIDER){if(this.transformations.length=0,delete this.updateConstraint,this.isConstrained=!1,this.isDraggable)return;this.isDraggable=!0,this.elementClass===h.A.OBJECT_CLASS_POINT&&(this.type=h.A.OBJECT_TYPE_POINT,this.elType="point"),this.XEval=function(){return this.coords.usrCoords[1]},this.YEval=function(){return this.coords.usrCoords[2]},this.ZEval=function(){return this.coords.usrCoords[0]},this.Xjc=null,this.Yjc=null}for(t in this.board.objects)this.board.objects.hasOwnProperty(t)&&(e=this.board.objects[t]).descendants&&(delete e.descendants[this.id],delete e.childElements[this.id],this.hasLabel&&(delete e.descendants[this.label.id],delete e.childElements[this.label.id]));this.ancestors={},this.parents=[],this.slideObject=null,this.slideObjects=[],this.elementClass===h.A.OBJECT_CLASS_POINT?(this.type=h.A.OBJECT_TYPE_POINT,this.elType="point"):this.elementClass===h.A.OBJECT_CLASS_TEXT?(this.type=this._org_type,this.elType="text"):this.elementClass===h.A.OBJECT_CLASS_OTHER&&(this.type=this._org_type,this.elType="image")},addConstraint:function(t){var e,i,s=[],r=["X","Y"],o=function(t){return function(){return t}},n=function(t){return function(){return t.Value()}};for(this.elementClass===h.A.OBJECT_CLASS_POINT&&(this.type=h.A.OBJECT_TYPE_CAS),this.isDraggable=!1,e=0;e<t.length;e++)i=t[e],u.A.isString(i)?(s[e]=this.board.jc.snippet(i,!0,null,!0),this.addParentsFromJCFunctions([s[e]]),2===t.length&&(this[r[e]+"jc"]=t[e])):u.A.isFunction(i)?s[e]=i:u.A.isNumber(i)?s[e]=o(i):u.A.isObject(i)&&u.A.isFunction(i.Value)&&(s[e]=n(i)),s[e].origin=i;return 1===t.length?this.updateConstraint=function(){var t=s[0]();return u.A.isArray(t)?this.coords.setCoordinates(h.A.COORDS_BY_USER,t):this.coords=t,this}:2===t.length?(this.XEval=s[0],this.YEval=s[1],this.addParents([s[0].origin,s[1].origin]),this.updateConstraint=function(){return this.coords.setCoordinates(h.A.COORDS_BY_USER,[this.XEval(),this.YEval()]),this}):(this.ZEval=s[0],this.XEval=s[1],this.YEval=s[2],this.addParents([s[0].origin,s[1].origin,s[2].origin]),this.updateConstraint=function(){return this.coords.setCoordinates(h.A.COORDS_BY_USER,[this.ZEval(),this.XEval(),this.YEval()]),this}),this.isConstrained=!0,this.prepareUpdate().update(),this.board.isSuspendedUpdate||(this.updateVisibility().updateRenderer(),this.hasLabel&&this.label.fullUpdate()),this},addAnchor:function(t,e){this.relativeCoords=e?new l.A(h.A.COORDS_BY_SCREEN,t.slice(0,2),this.board):new l.A(h.A.COORDS_BY_USER,t,this.board),this.element.addChild(this),e&&this.addParents(this.element),this.XEval=function(){var t,e,i;return u.A.evaluate(this.visProp.islabel)?(i=u.A.evaluate(this.visProp.offset),t=parseFloat(i[0]),e=this.element.getLabelAnchor(),new l.A(h.A.COORDS_BY_SCREEN,[t+this.relativeCoords.scrCoords[1]+e.scrCoords[1],0],this.board).usrCoords[1]):(e=this.element.getTextAnchor(),this.relativeCoords.usrCoords[1]+e.usrCoords[1])},this.YEval=function(){var t,e,i;return u.A.evaluate(this.visProp.islabel)?(i=u.A.evaluate(this.visProp.offset),t=-parseFloat(i[1]),e=this.element.getLabelAnchor(),new l.A(h.A.COORDS_BY_SCREEN,[0,t+this.relativeCoords.scrCoords[2]+e.scrCoords[2]],this.board).usrCoords[2]):(e=this.element.getTextAnchor(),this.relativeCoords.usrCoords[2]+e.usrCoords[2])},this.ZEval=u.A.createFunction(1,this.board,""),this.updateConstraint=function(){this.coords.setCoordinates(h.A.COORDS_BY_USER,[this.ZEval(),this.XEval(),this.YEval()])},this.isConstrained=!0,this.updateConstraint()},updateTransform:function(t){var e;if(0===this.transformations.length)return this;for(e=0;e<this.transformations.length;e++)this.transformations[e].update();return this},addTransform:function(t,e){var i,s=u.A.isArray(e)?e:[e],r=s.length;for(0===this.transformations.length&&(this.baseElement=t),i=0;i<r;i++)this.transformations.push(s[i]);return this},startAnimation:function(t,e,i){var s=u.A.evaluate(t),r=u.A.evaluate(e),o=this;return i=u.A.evaluate(i)||250,this.type!==h.A.OBJECT_TYPE_GLIDER||u.A.exists(this.intervalCode)||(this.intervalCode=window.setInterval((function(){o._anim(s,r)}),i),u.A.exists(this.intervalCount)||(this.intervalCount=0)),this},stopAnimation:function(){return u.A.exists(this.intervalCode)&&(window.clearInterval(this.intervalCode),delete this.intervalCode),this},moveAlong:function(t,e,i){i=i||{};var s,r,o,a,l,c=[],d=[],p=e/this.board.attr.animationdelay,_=function(e,i){return function(){return t[e][i]}};if(u.A.isArray(t)){for(o=t.length,s=0;s<o;s++)u.A.isPoint(t[s])?d[s]=t[s]:d[s]={elementClass:h.A.OBJECT_CLASS_POINT,X:_(s,0),Y:_(s,1)};if(0===(e=e||0))return this.setPosition(h.A.COORDS_BY_USER,[d[d.length-1].X(),d[d.length-1].Y()]),this.board.update(this);if(!u.A.exists(i.interpolate)||i.interpolate)for(r=n.A.Neville(d),s=0;s<p;s++)c[s]=[],c[s][0]=r[0]((p-s)/p*r[3]()),c[s][1]=r[1]((p-s)/p*r[3]());else{for(o=t.length-1,s=0;s<p;++s)l=s/p*o-(a=Math.floor(s/p*o)),c[s]=[],c[s][0]=(1-l)*d[a].X()+l*d[a+1].X(),c[s][1]=(1-l)*d[a].Y()+l*d[a+1].Y();c.push([d[o].X(),d[o].Y()]),c.reverse()}this.animationPath=c}else u.A.isFunction(t)&&(this.animationPath=t,this.animationStart=(new Date).getTime());return this.animationCallback=i.callback,this.board.addAnimation(this),this},moveTo:function(t,e,i){i=i||{},t=new l.A(h.A.COORDS_BY_USER,t,this.board);var s,o=this.board.attr.animationdelay,n=Math.ceil(e/o),a=[],c=this.coords.usrCoords[1],d=this.coords.usrCoords[2],p=t.usrCoords[1]-c,_=t.usrCoords[2]-d,f=function(t){return i.effect&&"<>"===i.effect?Math.pow(Math.sin(t/n*Math.PI/2),2):t/n};if(!u.A.exists(e)||0===e||Math.abs(t.usrCoords[0]-this.coords.usrCoords[0])>r.A.eps)return this.setPosition(h.A.COORDS_BY_USER,t.usrCoords),this.board.update(this);if(!u.A.exists(i.callback)&&Math.abs(p)<r.A.eps&&Math.abs(_)<r.A.eps)return this;for(s=n;s>=0;s--)a[n-s]=[t.usrCoords[0],c+p*f(s),d+_*f(s)];return this.animationPath=a,this.animationCallback=i.callback,this.board.addAnimation(this),this},visit:function(t,e,i){t=new l.A(h.A.COORDS_BY_USER,t,this.board);var s,r,o,n=this.board.attr.animationdelay,a=[],c=this.coords.usrCoords[1],d=this.coords.usrCoords[2],p=t.usrCoords[1]-c,_=t.usrCoords[2]-d,f=function(t){var e=t<o/2?2*t/o:2*(o-t)/o;return i.effect&&"<>"===i.effect?Math.pow(Math.sin(e*Math.PI/2),2):e};for(u.A.isNumber(i)?i={repeat:i}:(i=i||{},u.A.exists(i.repeat)||(i.repeat=1)),o=Math.ceil(e/(n*i.repeat)),r=0;r<i.repeat;r++)for(s=o;s>=0;s--)a[r*(o+1)+o-s]=[t.usrCoords[0],c+p*f(s),d+_*f(s)];return this.animationPath=a,this.animationCallback=i.callback,this.board.addAnimation(this),this},_anim:function(t,e){var i,s,r,n,a,l,u,c,d;return this.intervalCount+=1,this.intervalCount>e&&(this.intervalCount=0),this.slideObject.elementClass===h.A.OBJECT_CLASS_LINE?(u=this.slideObject.point1.coords.scrCoords,c=this.slideObject.point2.coords.scrCoords,i=Math.round((c[1]-u[1])*this.intervalCount/e),s=Math.round((c[2]-u[2])*this.intervalCount/e),t>0?n=this.slideObject.point1:(n=this.slideObject.point2,i*=-1,s*=-1),this.coords.setCoordinates(h.A.COORDS_BY_SCREEN,[n.coords.scrCoords[1]+i,n.coords.scrCoords[2]+s])):this.slideObject.elementClass===h.A.OBJECT_CLASS_CURVE?(a=t>0?Math.round(this.intervalCount/e*this.board.canvasWidth):Math.round((e-this.intervalCount)/e*this.board.canvasWidth),this.coords.setCoordinates(h.A.COORDS_BY_SCREEN,[a,0]),d=o.A.projectPointToCurve(this,this.slideObject,this.board),this.coords=d[0],this.position=d[1]):this.slideObject.elementClass===h.A.OBJECT_CLASS_CIRCLE&&(r=2*Math.PI,r*=t<0?this.intervalCount/e:(e-this.intervalCount)/e,l=this.slideObject.Radius(),this.coords.setCoordinates(h.A.COORDS_BY_USER,[this.slideObject.center.coords.usrCoords[1]+l*Math.cos(r),this.slideObject.center.coords.usrCoords[2]+l*Math.sin(r)])),this.board.update(this),this},getTextAnchor:function(){return this.coords},getLabelAnchor:function(){return this.coords},getParents:function(){var t=[this.Z(),this.X(),this.Y()];return 0!==this.parents.length&&(t=this.parents),this.type===h.A.OBJECT_TYPE_GLIDER&&(t=[this.X(),this.Y(),this.slideObject.id]),t}}),s.A.CoordsElement.create=function(t,e,i,s,r,o){var n,a,l=!1;for(a=0;a<i.length;a++)(u.A.isFunction(i[a])||u.A.isString(i[a]))&&(l=!0);if(l)(n=new t(e,[0,0],s,r,o)).addConstraint(i);else if(u.A.isNumber(i[0])&&u.A.isNumber(i[1]))n=new t(e,i,s,r,o),u.A.exists(s.slideobject)?n.makeGlider(s.slideobject):n.baseElement=n,n.isDraggable=!0;else{if(!u.A.isObject(i[0])||!u.A.isTransformationOrArray(i[1]))return!1;(n=new t(e,[0,0],s,r,o)).addTransform(i[0],i[1]),n.isDraggable=!1}return n.handleSnapToGrid(),n.handleSnapToPoints(),n.handleAttractors(),n.addParents(i),n},e.A=s.A.CoordsElement},144:function(t,e,i){var s=i(443),r=i(561),o=i(904),n=i(477),a=i(588),l=i(378),h=i(454),u=i(873),c=i(188);s.A.GeometryElement=function(t,e,i,s){var o,n,a;if(this.needsUpdate=!0,this.isDraggable=!1,this.isReal=!0,this.childElements={},this.hasLabel=!1,this.highlighted=!1,this.notExistingParents={},this.traces={},this.numTraces=0,this.transformations=[],this.baseElement=null,this.descendants={},this.ancestors={},this.parents=[],this.symbolic={},this.rendNode=null,this.elType="",this.dump=!0,this.subs={},this.inherits=[],this._pos=-1,this.stdform=[1,0,0,0,1,1,0,0],this.methodMap={setLabel:"setLabel",label:"label",setName:"setName",getName:"getName",Name:"getName",addTransform:"addTransform",setProperty:"setAttribute",setAttribute:"setAttribute",addChild:"addChild",animate:"animate",on:"on",off:"off",trigger:"trigger",addTicks:"addTicks",removeTicks:"removeTicks",removeAllTicks:"removeAllTicks",Bounds:"bounds"},this.quadraticform=[[1,0,0],[0,1,0],[0,0,1]],this.visProp={},this.visPropCalc={visible:!1},h.A.eventify(this),this.mouseover=!1,this.lastDragTime=new Date,this.view=null,arguments.length>0){for(n in this.board=t,this.type=i,this._org_type=i,this.elementClass=s||r.A.OBJECT_CLASS_OTHER,this.id=e.id,o=e.name,c.A.exists(o)||(o=this.board.generateName(this)),""!==o&&(this.board.elementsByName[o]=this),this.name=o,this.needsRegularUpdate=e.needsregularupdate,c.A.clearVisPropOld(this),a=this.resolveShortcuts(e))a.hasOwnProperty(n)&&this._set(n,a[n]);this.visProp.draft=a.draft&&a.draft.draft}},s.A.extend(s.A.GeometryElement.prototype,{addChild:function(t){var e,i;for(e in this.childElements[t.id]=t,this.addDescendants(t),t.ancestors[this.id]=this,this.descendants)if(this.descendants.hasOwnProperty(e))for(i in this.descendants[e].ancestors[this.id]=this,this.ancestors)this.ancestors.hasOwnProperty(i)&&(this.descendants[e].ancestors[this.ancestors[i].id]=this.ancestors[i]);for(e in this.ancestors)if(this.ancestors.hasOwnProperty(e))for(i in this.descendants)this.descendants.hasOwnProperty(i)&&(this.ancestors[e].descendants[this.descendants[i].id]=this.descendants[i]);return this},addDescendants:function(t){var e;for(e in this.descendants[t.id]=t,t.childElements)t.childElements.hasOwnProperty(e)&&this.addDescendants(t.childElements[e]);return this},addParents:function(t){var e,i,s;for(i=(s=c.A.isArray(t)?t:arguments).length,e=0;e<i;++e)c.A.exists(s[e])&&(c.A.isId(this.board,s[e])?this.parents.push(s[e]):c.A.exists(s[e].id)&&this.parents.push(s[e].id));this.parents=c.A.uniqueArray(this.parents)},setParents:function(t){this.parents=[],this.addParents(t)},addParentsFromJCFunctions:function(t){var e,i,s;for(e=0;e<t.length;e++)for(i in t[e].deps)s=t[e].deps[i],this.addParents(s),s.addChild(this);return this},removeChild:function(t){return delete this.childElements[t.id],this.removeDescendants(t),delete t.ancestors[this.id],this},removeDescendants:function(t){var e;for(e in delete this.descendants[t.id],t.childElements)t.childElements.hasOwnProperty(e)&&this.removeDescendants(t.childElements[e]);return this},countChildren:function(){var t,e,i=0;for(t in e=this.childElements)e.hasOwnProperty(t)&&t.indexOf("Label")<0&&i++;return i},getName:function(){return this.name},addTransform:function(t){return this},draggable:function(){return this.isDraggable&&!c.A.evaluate(this.visProp.fixed)&&this.type!==r.A.OBJECT_TYPE_GLIDER},setPosition:function(t,e){var i,s,o,n,a=[];if(!c.A.exists(this.parents))return this;for(o=this.parents.length,s=0;s<o;++s)if(i=this.board.select(this.parents[s]),c.A.isPoint(i)){if(!i.draggable())return this;a.push(i)}for(3===e.length&&(e=e.slice(1)),n=this.board.create("transform",e,{type:"translate"}),(o=a.length)>0?n.applyOnce(a):this.transformations.length>0&&this.transformations[this.transformations.length-1].isNumericMatrix?this.transformations[this.transformations.length-1].melt(n):this.addTransform(n),s=0;s<o;++s)a[s].type===r.A.OBJECT_TYPE_GLIDER&&a[s].updateGlider();return this},setPositionDirectly:function(t,e,i){var s=new o.A(t,e,this.board,!1),n=new o.A(t,i,this.board,!1),l=a.A.subtract(s.usrCoords,n.usrCoords);return this.setPosition(r.A.COORDS_BY_USER,l),this},generatePolynomial:function(){return[]},animate:function(t,e,i){i=i||{};var s,r,o,n=this.board.attr.animationdelay,a=Math.ceil(e/n),l=this,h=function(t,e,i){var s,r,n,h,c;for(s=u.A.rgb2hsv(t),n=((r=u.A.rgb2hsv(e))[0]-s[0])/a,h=(r[1]-s[1])/a,c=(r[2]-s[2])/a,l.animationData[i]=[],o=0;o<a;o++)l.animationData[i][a-o-1]=u.A.hsv2rgb(s[0]+(o+1)*n,s[1]+(o+1)*h,s[2]+(o+1)*c)},d=function(t,e,i,s){var r,n;if(t=parseFloat(t),e=parseFloat(e),!isNaN(t)&&!isNaN(e))for(n=(e-t)/a,l.animationData[i]=[],o=0;o<a;o++)r=t+(o+1)*n,l.animationData[i][a-o-1]=s?Math.floor(r):r};for(s in this.animationData={},t)if(t.hasOwnProperty(s))switch(r=s.toLowerCase()){case"strokecolor":case"fillcolor":h(this.visProp[r],t[s],r);break;case"size":if(!c.A.isPoint(this))break;d(this.visProp[r],t[s],r,!0);break;case"strokeopacity":case"strokewidth":case"fillopacity":d(this.visProp[r],t[s],r,!1)}return this.animationCallback=i.callback,this.board.addAnimation(this),this},update:function(){return c.A.evaluate(this.visProp.trace)&&this.cloneToBackground(),this},updateRenderer:function(){return this},fullUpdate:function(t){return this.prepareUpdate().update().updateVisibility(t).updateRenderer()},setDisplayRendNode:function(t){var e,i,s,r,o;if(void 0===t&&(t=this.visPropCalc.visible),t===this.visPropOld.visible)return this;for(this.board.renderer.display(this,t),i=this.inherits.length,s=0;s<i;s++)if(o=this.inherits[s],c.A.isArray(o))for(r=o.length,e=0;e<r;e++)c.A.exists(o[e])&&c.A.exists(o[e].rendNode)&&"inherit"===c.A.evaluate(o[e].visProp.visible)&&o[e].setDisplayRendNode(t);else c.A.exists(o)&&c.A.exists(o.rendNode)&&"inherit"===c.A.evaluate(o.visProp.visible)&&o.setDisplayRendNode(t);return this.hasLabel&&c.A.exists(this.label)&&c.A.exists(this.label.rendNode)&&"inherit"===c.A.evaluate(this.label.visProp.visible)&&this.label.setDisplayRendNode(t),this},hide:function(){return this.setAttribute({visible:!1}),this},hideElement:function(){return this.hide(),this},show:function(){return this.setAttribute({visible:!0}),this},showElement:function(){return this.show(),this},updateVisibility:function(t){var e,i,s,r,o,n;if(this.needsUpdate){if(c.A.exists(this.view)&&!1===c.A.evaluate(this.view.visProp.visible))this.visPropCalc.visible=!1;else for(void 0!==t?this.visPropCalc.visible=t:(n=c.A.evaluate(this.visProp.visible),c.A.exists(this.hiddenByParent)&&this.hiddenByParent&&(n=!1),"inherit"!==n&&(this.visPropCalc.visible=n)),i=this.inherits.length,s=0;s<i;s++)if(o=this.inherits[s],c.A.isArray(o))for(r=o.length,e=0;e<r;e++)c.A.exists(o[e])&&"inherit"===c.A.evaluate(o[e].visProp.visible)&&o[e].prepareUpdate().updateVisibility(this.visPropCalc.visible);else c.A.exists(o)&&"inherit"===c.A.evaluate(o.visProp.visible)&&o.prepareUpdate().updateVisibility(this.visPropCalc.visible);c.A.exists(this.label)&&c.A.exists(this.label.visProp)&&c.A.evaluate(this.label.visProp.visible)&&this.label.prepareUpdate().updateVisibility(this.visPropCalc.visible)}return this},_set:function(t,e){var i;if(t=t.toLocaleLowerCase(),this.visProp.hasOwnProperty(t)&&t.indexOf("color")>=0&&c.A.isString(e)&&9===e.length&&"#"===e.charAt(0))e=u.A.rgba2rgbo(e),this.visProp[t]=e[0],this.visProp[t.replace("color","opacity")]=e[1];else if(null===e||!c.A.isObject(e)||c.A.exists(e.id)||c.A.exists(e.name))this.visProp[t]=e;else for(i in this.visProp[t]={},e)e.hasOwnProperty(i)&&(this.visProp[t][i.toLocaleLowerCase()]=e[i])},resolveShortcuts:function(t){var e,i,s,r=["traceattributes","traceAttributes"];for(e in l.A.shortcuts)if(l.A.shortcuts.hasOwnProperty(e)){if(c.A.exists(t[e]))for(i=0;i<l.A.shortcuts[e].length;i++)c.A.exists(t[l.A.shortcuts[e][i]])||(t[l.A.shortcuts[e][i]]=t[e]);for(s=0;s<r.length;s++)c.A.isObject(t[r[s]])&&(t[r[s]]=this.resolveShortcuts(t[r[s]]))}return t},setLabel:function(t){this.hasLabel||this.setAttribute({withlabel:!0}),this.setLabelText(t)},setLabelText:function(t){return c.A.exists(this.label)&&(t=t.replace(/</g,"<").replace(/>/g,">"),this.label.setText(t)),this},setName:function(t){t=t.replace(/</g,"<").replace(/>/g,">"),"slider"!==this.elType&&this.setLabelText(t),this.setAttribute({name:t})},setProperty:function(){s.A.deprecated("setProperty()","setAttribute()"),this.setAttribute.apply(this,arguments)},setAttribute:function(t){var e,i,o,n,a,l,h,d,p,_={};for(e=0;e<arguments.length;e++)l=arguments[e],c.A.isString(l)?(d=l.split(":"),_[c.A.trim(d[0])]=c.A.trim(d[1])):c.A.isArray(l)?_[l[0]]=l[1]:s.A.extend(_,l);for(e in _=this.resolveShortcuts(_))if(_.hasOwnProperty(e)){if(n=e.replace(/\s+/g,"").toLowerCase(),a=_[e],c.A.isObject(a)&&c.A.exists(this.visProp[n])){if(this.visProp[n]=c.A.merge(this.visProp[n],a),this.type===r.A.OBJECT_TYPE_TICKS&&c.A.exists(this.labels))for(o=this.labels.length,i=0;i<o;i++)this.labels[i].setAttribute(a);else if(c.A.exists(this[n]))if(c.A.isArray(this[n]))for(i=0;i<this[n].length;i++)this[n][i].setAttribute(a);else this[n].setAttribute(a);continue}switch(p=this.visProp[n],n){case"checked":c.A.exists(this.rendNodeTag)&&(this.rendNodeCheckbox.checked=!!a);break;case"disabled":c.A.exists(this.rendNodeTag)&&(this.rendNodeTag.disabled=!!a);break;case"face":c.A.isPoint(this)&&(this.visProp.face=a,this.board.renderer.changePointStyle(this));break;case"generatelabelvalue":this.type===r.A.OBJECT_TYPE_TICKS&&c.A.isFunction(a)&&(this.generateLabelValue=a);break;case"gradient":this.visProp.gradient=a,this.board.renderer.setGradient(this);break;case"gradientsecondcolor":a=u.A.rgba2rgbo(a),this.visProp.gradientsecondcolor=a[0],this.visProp.gradientsecondopacity=a[1],this.board.renderer.updateGradient(this);break;case"gradientsecondopacity":this.visProp.gradientsecondopacity=a,this.board.renderer.updateGradient(this);break;case"infoboxtext":c.A.isString(a)?this.infoboxText=a:this.infoboxText=!1;break;case"labelcolor":h=(a=u.A.rgba2rgbo(a))[1],a=a[0],0===h&&c.A.exists(this.label)&&this.hasLabel&&this.label.hideElement(),c.A.exists(this.label)&&this.hasLabel&&(this.label.visProp.strokecolor=a,this.board.renderer.setObjectStrokeColor(this.label,a,h)),this.elementClass===r.A.OBJECT_CLASS_TEXT&&(this.visProp.strokecolor=a,this.visProp.strokeopacity=h,this.board.renderer.setObjectStrokeColor(this,a,h));break;case"layer":this.board.renderer.setLayer(this,c.A.evaluate(a)),this._set(n,a);break;case"maxlength":c.A.exists(this.rendNodeTag)&&(this.rendNodeTag.maxlength=!!a);break;case"name":p=this.name,delete this.board.elementsByName[this.name],this.name=a,this.board.elementsByName[this.name]=this;break;case"needsregularupdate":this.needsRegularUpdate=!("false"===a||!1===a),this.board.renderer.setBuffering(this,this.needsRegularUpdate?"auto":"static");break;case"onpolygon":this.type===r.A.OBJECT_TYPE_GLIDER&&(this.onPolygon=!!a);break;case"radius":this.type!==r.A.OBJECT_TYPE_ANGLE&&this.type!==r.A.OBJECT_TYPE_SECTOR||this.setRadius(a);break;case"rotate":(this.elementClass===r.A.OBJECT_CLASS_TEXT&&"internal"===c.A.evaluate(this.visProp.display)||this.type===r.A.OBJECT_TYPE_IMAGE)&&this.addRotation(a);break;case"tabindex":c.A.exists(this.rendNode)&&(this.rendNode.setAttribute("tabindex",a),this._set(n,a));break;case"trace":"false"===a||!1===a?(this.clearTrace(),this.visProp.trace=!1):this.visProp.trace="pause"!==a;break;case"visible":this.visProp.visible="false"!==a&&("true"===a||a),this.setDisplayRendNode(c.A.evaluate(this.visProp.visible)),c.A.evaluate(this.visProp.visible)&&c.A.exists(this.updateSize)&&this.updateSize();break;case"withlabel":this.visProp.withlabel=a,c.A.evaluate(a)?(this.label||this.createLabel(),this.label.setAttribute({visible:"inherit"})):this.label&&this.hasLabel&&this.label.setAttribute({visible:!1}),this.hasLabel=a;break;case"straightfirst":case"straightlast":for(i in this._set(n,a),this.childElements)this.childElements.hasOwnProperty(i)&&"glider"===this.childElements[i].elType&&this.childElements[i].fullUpdate();break;default:c.A.exists(this.visProp[n])&&(!s.A.Validator[n]||s.A.Validator[n]&&s.A.Validator[n](a)||s.A.Validator[n]&&c.A.isFunction(a)&&s.A.Validator[n](a()))&&(a=(!a.toLowerCase||"false"!==a.toLowerCase())&&a,this._set(n,a))}this.triggerEventHandlers(["attribute:"+n],[p,a,this])}return this.triggerEventHandlers(["attribute"],[_,this]),c.A.evaluate(this.visProp.needsregularupdate)?this.board.update(this):this.board.fullUpdate(),this.elementClass===r.A.OBJECT_CLASS_TEXT&&this.updateSize(),this},getProperty:function(){s.A.deprecated("getProperty()","getAttribute()"),this.getProperty.apply(this,arguments)},getAttribute:function(t){var e;switch(t=t.toLowerCase()){case"needsregularupdate":e=this.needsRegularUpdate;break;case"labelcolor":e=this.label.visProp.strokecolor;break;case"infoboxtext":e=this.infoboxText;break;case"withlabel":e=this.hasLabel;break;default:e=this.visProp[t]}return e},setDash:function(t){return this.setAttribute({dash:t}),this},prepareUpdate:function(){return this.needsUpdate=!0,this},remove:function(){return this.board.renderer.remove(this.rendNode),this.hasLabel&&this.board.renderer.remove(this.board.renderer.getElementById(this.label.id)),this},getTextAnchor:function(){return new o.A(r.A.COORDS_BY_USER,[0,0],this.board)},getLabelAnchor:function(){return new o.A(r.A.COORDS_BY_USER,[0,0],this.board)},setArrow:function(t,e){return this.visProp.firstarrow=t,this.visProp.lastarrow=e,e&&(this.type=r.A.OBJECT_TYPE_VECTOR,this.elType="arrow"),this.prepareUpdate().update().updateVisibility().updateRenderer(),this},createGradient:function(){var t=c.A.evaluate(this.visProp.gradient);"linear"!==t&&"radial"!==t||this.board.renderer.setGradient(this)},createLabel:function(){var t,e=this;return s.A.elements.text?((t=c.A.deepCopy(this.visProp.label,null)).id=this.id+"Label",t.isLabel=!0,t.anchor=this,t.priv=this.visProp.priv,this.visProp.withlabel&&(this.label=s.A.elements.text(this.board,[0,0,function(){return c.A.isFunction(e.name)?e.name():e.name}],t),this.label.needsUpdate=!0,this.label.dump=!1,this.label.fullUpdate(),this.hasLabel=!0)):s.A.debug("JSXGraph: Can't create label: text element is not available. Make sure you include base/text"),this},highlight:function(t){return t=c.A.def(t,!1),!c.A.evaluate(this.visProp.highlight)||this.highlighted&&!t||(this.highlighted=!0,this.board.highlightedObjects[this.id]=this,this.board.renderer.highlight(this)),this},noHighlight:function(){return this.highlighted&&(this.highlighted=!1,delete this.board.highlightedObjects[this.id],this.board.renderer.noHighlight(this)),this},clearTrace:function(){var t;for(t in this.traces)this.traces.hasOwnProperty(t)&&this.board.renderer.remove(this.traces[t]);return this.numTraces=0,this},cloneToBackground:function(){return this},bounds:function(){return[0,0,0,0]},normalize:function(){return this.stdform=n.A.normalize(this.stdform),this},toJSON:function(){var t,e,i=['{"name":',this.name];for(e in i.push(', "id":'+this.id),t=[],this.visProp)this.visProp.hasOwnProperty(e)&&c.A.exists(this.visProp[e])&&t.push('"'+e+'":'+this.visProp[e]);return i.push(', "visProp":{'+t.toString()+"}"),i.push("}"),i.join("")},addRotation:function(t){var e,i,s,o,n,a=this;return this.elementClass!==r.A.OBJECT_CLASS_TEXT&&this.type!==r.A.OBJECT_TYPE_IMAGE||0===t||(e=this.board.create("transform",[function(){return-a.X()},function(){return-a.Y()}],{type:"translate"}),i=this.board.create("transform",[function(){return a.X()},function(){return a.Y()}],{type:"translate"}),s=this.board.create("transform",[function(){return a.board.unitX/a.board.unitY},function(){return 1}],{type:"scale"}),o=this.board.create("transform",[function(){return a.board.unitY/a.board.unitX},function(){return 1}],{type:"scale"}),n=this.board.create("transform",[function(){return c.A.evaluate(t)*Math.PI/180}],{type:"rotate"}),e.bindTo(this),s.bindTo(this),n.bindTo(this),o.bindTo(this),i.bindTo(this)),this},highlightStrokeColor:function(t){return s.A.deprecated("highlightStrokeColor()","setAttribute()"),this.setAttribute({highlightStrokeColor:t}),this},strokeColor:function(t){return s.A.deprecated("strokeColor()","setAttribute()"),this.setAttribute({strokeColor:t}),this},strokeWidth:function(t){return s.A.deprecated("strokeWidth()","setAttribute()"),this.setAttribute({strokeWidth:t}),this},fillColor:function(t){return s.A.deprecated("fillColor()","setAttribute()"),this.setAttribute({fillColor:t}),this},highlightFillColor:function(t){return s.A.deprecated("highlightFillColor()","setAttribute()"),this.setAttribute({highlightFillColor:t}),this},labelColor:function(t){return s.A.deprecated("labelColor()","setAttribute()"),this.setAttribute({labelColor:t}),this},dash:function(t){return s.A.deprecated("dash()","setAttribute()"),this.setAttribute({dash:t}),this},visible:function(t){return s.A.deprecated("visible()","setAttribute()"),this.setAttribute({visible:t}),this},shadow:function(t){return s.A.deprecated("shadow()","setAttribute()"),this.setAttribute({shadow:t}),this},getType:function(){return this.elType},getParents:function(){return c.A.isArray(this.parents)?this.parents:[]},snapToGrid:function(){return this},snapToPoints:function(){return this},getAttributes:function(){var t,e=c.A.deepCopy(this.visProp),i=[],s=i.length;for(e.id=this.id,e.name=this.name,t=0;t<s;t++)delete e[i[t]];return e},hasPoint:function(t,e){return!1},addTicks:function(t){return""!==t.id&&c.A.exists(t.id)||(t.id=this.id+"_ticks_"+(this.ticks.length+1)),this.board.renderer.drawTicks(t),this.ticks.push(t),t.id},removeAllTicks:function(){var t;if(c.A.exists(this.ticks)){for(t=this.ticks.length-1;t>=0;t--)this.removeTicks(this.ticks[t]);this.ticks=[],this.board.update()}},removeTicks:function(t){var e,i;if(c.A.exists(this.defaultTicks)&&this.defaultTicks===t&&(this.defaultTicks=null),c.A.exists(this.ticks))for(e=this.ticks.length-1;e>=0;e--)if(this.ticks[e]===t){if(this.board.removeObject(this.ticks[e]),this.ticks[e].ticks)for(i=0;i<this.ticks[e].ticks.length;i++)c.A.exists(this.ticks[e].labels[i])&&this.board.removeObject(this.ticks[e].labels[i]);delete this.ticks[e];break}},getSnapSizes:function(){var t,e,i;return t=c.A.evaluate(this.visProp.snapsizex),e=c.A.evaluate(this.visProp.snapsizey),t<=0&&this.board.defaultAxes&&this.board.defaultAxes.x.defaultTicks&&(t=(i=this.board.defaultAxes.x.defaultTicks).ticksDelta*(c.A.evaluate(i.visProp.minorticks)+1)),e<=0&&this.board.defaultAxes&&this.board.defaultAxes.y.defaultTicks&&(e=(i=this.board.defaultAxes.y.defaultTicks).ticksDelta*(c.A.evaluate(i.visProp.minorticks)+1)),[t,e]},handleSnapToGrid:function(t,e){var i,o,n,a,l,h,u,d,p,_,f,A=c.A.evaluate(this.visProp.attracttogrid),g=c.A.evaluate(this.visProp.attractorunit),m=c.A.evaluate(this.visProp.attractordistance);return!c.A.exists(this.coords)||c.A.evaluate(this.visProp.fixed)||(c.A.evaluate(this.visProp.snaptogrid)||A||!0===t)&&(i=this.coords.usrCoords[1],o=this.coords.usrCoords[2],_=(p=this.getSnapSizes())[0],f=p[1],_>0&&f>0&&(d=this.board.getBoundingBox(),n=Math.round(i/_)*_,a=Math.round(o/f)*f,l=new s.A.Coords(r.A.COORDS_BY_USER,[n,a],this.board),(!A||l.distance("screen"===g?r.A.COORDS_BY_SCREEN:r.A.COORDS_BY_USER,this.coords)<m)&&(i=n,o=a,e||(h=Math.min(d[0],d[2]),u=Math.max(d[0],d[2]),i<h&&i>h-_?i+=_:i>u&&i<u+_&&(i-=_),h=Math.min(d[1],d[3]),u=Math.max(d[1],d[3]),o<h&&o>h-f?o+=f:o>u&&o<u+f&&(o-=f)),this.coords.setCoordinates(r.A.COORDS_BY_USER,[i,o])))),this},getBoundingBox:function(){var t,e,i,s,o,n=[1/0,1/0,-1/0,-1/0];if(this.type===r.A.OBJECT_TYPE_POLYGON){if((e=this.vertices.length-1)<=0)return n;for(t=0;t<e;t++)i=this.vertices[t].X(),n[0]=i<n[0]?i:n[0],n[2]=i>n[2]?i:n[2],i=this.vertices[t].Y(),n[1]=i<n[1]?i:n[1],n[3]=i>n[3]?i:n[3]}else if(this.elementClass===r.A.OBJECT_CLASS_CIRCLE)s=this.center.X(),o=this.center.Y(),n=[s-this.radius,o+this.radius,s+this.radius,o-this.radius];else if(this.elementClass===r.A.OBJECT_CLASS_CURVE){if(0===(e=this.vertices.length))return n;for(t=0;t<e;t++)i=this.points[t].coords.usrCoords[1],n[0]=i<n[0]?i:n[0],n[2]=i>n[2]?i:n[2],i=this.points[t].coords.usrCoords[1],n[1]=i<n[1]?i:n[1],n[3]=i>n[3]?i:n[3]}return n},addEvent:s.A.shortcut(s.A.GeometryElement.prototype,"on"),removeEvent:s.A.shortcut(s.A.GeometryElement.prototype,"off"),formatNumberLocale:function(t,e){var i,s,r,o={},n={maximumfractiondigits:"maximumFractionDigits",minimumfractiondigits:"minimumFractionDigits",compactdisplay:"compactDisplay",currencydisplay:"currencyDisplay",currencysign:"currencySign",localematcher:"localeMatcher",numberingsystem:"numberingSystem",signdisplay:"signDisplay",unitdisplay:"unitDisplay",usegrouping:"useGrouping",roundingmode:"roundingMode",roundingpriority:"roundingPriority",roundingincrement:"roundingIncrement",trailingzerodisplay:"trailingZeroDisplay",minimumintegerdigits:"minimumIntegerDigits",minimumsignificantdigits:"minimumSignificantDigits",maximumsignificantdigits:"maximumSignificantDigits"};if(c.A.exists(Intl)&&this.useLocale()){for(r in i=c.A.evaluate(this.visProp.intl.locale)||c.A.evaluate(this.board.attr.intl.locale),s=c.A.evaluate(this.visProp.intl.options)||{})s.hasOwnProperty(r)&&(n.hasOwnProperty(r)?o[n[r]]=c.A.evaluate(s[r]):o[r]=c.A.evaluate(s[r]));return r="maximumfractiondigits",c.A.exists(s[r])||(o[n[r]]=e),Intl.NumberFormat(i,o).format(t)}return t},useLocale:function(){var t;return!(!c.A.exists(this.visProp.intl)||!c.A.exists(this.visProp.intl.enabled))&&(!0===(t=c.A.evaluate(this.visProp.intl.enabled))||"inherit"===t&&!0===c.A.evaluate(this.board.attr.intl.enabled))},__evt__over:function(t){},__evt__mouseover:function(t){},__evt__out:function(t){},__evt__mouseout:function(t){},__evt__move:function(t){},__evt__mousemove:function(t){},__evt__drag:function(t){},__evt__mousedrag:function(t){},__evt__pendrag:function(t){},__evt__touchdrag:function(t){},__evt__keydrag:function(t){},__evt__down:function(t){},__evt__mousedown:function(t){},__evt__pendown:function(t){},__evt__touchdown:function(t){},__evt__click:function(t){},__evt__dblclick:function(t){},__evt__mouseclick:function(t){},__evt__mousedblclick:function(t){},__evt__pointerclick:function(t){},__evt__pointerdblclick:function(t){},__evt__up:function(t){},__evt__mouseup:function(t){},__evt__penup:function(t){},__evt__touchup:function(t){},__evt__attribute:function(t,e){},__evt__attribute_:function(t,e,i){},__evt:function(){}}),e.A=s.A.GeometryElement},925:function(t,e,i){var s=i(443),r=i(561),o=i(144),n=i(86),a=i(133),l=i(188),h=i(477),u=i(102),c=function(){this._val=parseFloat(this.rendNodeRange.value),this.rendNodeOut.value=this.rendNodeRange.value,this.board.update()};s.A.Text=function(t,e,i,s){var o;this.constructor(t,i,r.A.OBJECT_TYPE_TEXT,r.A.OBJECT_CLASS_TEXT),this.element=this.board.select(i.anchor),this.coordsConstructor(e,l.A.evaluate(this.visProp.islabel)),this.content="",this.plaintext="",this.plaintextOld=null,this.orgText="",this.needsSizeUpdate=!1,this.hiddenByParent=!1,this.size=[1,1],this.id=this.board.setId(this,"T"),this.board.renderer.drawText(this),this.board.finalizeAdding(this),o=this.visProp.visible,this.visProp.visible=!0,this.setText(s),this.visProp.visible=o,l.A.isString(this.content)&&this.notifyParents(this.content),this.elType="text",this.methodMap=l.A.deepCopy(this.methodMap,{setText:"setTextJessieCode",move:"setCoords",Size:"getSize",setAutoPosition:"setAutoPosition"})},s.A.Text.prototype=new o.A,l.A.copyPrototypeMethods(s.A.Text,u.A,"coordsConstructor"),s.A.extend(s.A.Text.prototype,{hasPoint:function(t,e){var i,s,r,o,n,a,u,c;return l.A.isObject(l.A.evaluate(this.visProp.precision))?(u=this.board._inputDevice,c=l.A.evaluate(this.visProp.precision[u])):c=this.board.options.precision.hasPoint,this.transformations.length>0&&(t=(i=h.A.matVecMult(h.A.inverse(this.board.renderer.joinTransforms(this,this.transformations)),[1,t,e]))[1],e=i[2]),s=(i="right"===(n=this.getAnchorX())?this.coords.scrCoords[1]-this.size[0]:"middle"===n?this.coords.scrCoords[1]-.5*this.size[0]:this.coords.scrCoords[1])+this.size[0],r=(o="top"===(a=this.getAnchorY())?this.coords.scrCoords[2]+this.size[1]:"middle"===a?this.coords.scrCoords[2]+.5*this.size[1]:this.coords.scrCoords[2])-this.size[1],"all"===l.A.evaluate(this.visProp.dragarea)?t>=i-c&&t<s+c&&e>=r-c&&e<=o+c:e>=r-c&&e<=o+c&&(t>=i-c&&t<=i+2*c||t>=s-2*c&&t<=s+c)},_createFctUpdateText:function(t){var e,i,s,r,o,n,a=l.A.evaluate(this.visProp.parse),h=l.A.evaluate(this.visProp.usemathjax),u=l.A.evaluate(this.visProp.usekatex),c=!1;if(this.orgText=t,l.A.isFunction(t))this.updateText=function(){r=t().toString(),this.plaintext=!a||h||u?r:this.replaceSub(this.replaceSup(this.convertGeonextAndSketchometry2CSS(r,!1)))};else if(l.A.isNumber(t)&&l.A.evaluate(this.visProp.formatnumber)?l.A.evaluate(this.visProp.tofraction)?this.content=h?"\\("+l.A.toFraction(t,!0)+"\\)":l.A.toFraction(t,u):(s=l.A.evaluate(this.visProp.digits),this.useLocale()?this.content=this.formatNumberLocale(t,s):this.content=l.A.toFixed(t,s)):l.A.isString(t)&&a?(l.A.evaluate(this.visProp.useasciimathml)?this.content="'`"+t+"`'":h||u?(this.content=this.valueTagToJessieCode(t),l.A.isArray(this.content)||(this.content=this.content.replace(/\\/g,"\\\\"))):this.content=this.poorMansTeX(this.valueTagToJessieCode(t)),c=!0):this.content=t,c){if(l.A.isArray(this.content)){for(n=this,o=0;o<this.content.length;o++)if('"'!==this.content[o][0])for(i in this.content[o]=this.board.jc.snippet(this.content[o],!0,"",!1),this.content[o].deps)this.addParents(this.content[o].deps[i]),this.content[o].deps[i].addChild(this);e=function(){var t,e,i=l.A.evaluate(n.visProp.digits),s="";for(t=0;t<n.content.length;t++)l.A.isFunction(n.content[t])?(e=n.content[t](),e=n.useLocale()?n.formatNumberLocale(e,i):l.A.toFixed(e,i)):'"'===(e=n.content[t])[0]&&'"'===e[e.length-1]&&(e=e.slice(1,-1)),s+=e;return s}}else for(i in(e=this.board.jc.snippet(this.content,!0,"",!1)).deps)this.addParents(e.deps[i]),e.deps[i].addChild(this);this.updateText=function(){this.plaintext=this.unescapeTicks(e())}}else this.updateText=function(){this.plaintext=this.content}},_setText:function(t){return this._createFctUpdateText(t),this.updateText(),this.fullUpdate(),this.board.infobox&&this.id===this.board.infobox.id||this.updateSize(),this},setTextJessieCode:function(t){var e;return this.visProp.castext=t,e=l.A.isFunction(t)?function(){return l.A.sanitizeHTML(t())}:l.A.isNumber(t)?t:l.A.sanitizeHTML(t),this._setText(e)},setText:function(t){return this._setText(t)},updateSize:function(){var t,e,i,s=l.A.evaluate(this.visProp.display);return a.A.isBrowser&&"no"!==this.board.renderer.type?(i=this.rendNode,"html"===s||"vml"===this.board.renderer.type?l.A.exists(i.offsetWidth)?(e=this,window.setTimeout((function(){e.size=[i.offsetWidth,i.offsetHeight],e.needsUpdate=!0,e.updateRenderer()}),0)):this.size=this.crudeSizeEstimate():"internal"===s&&("svg"===this.board.renderer.type?(e=this,window.setTimeout((function(){try{t=i.getBBox(),e.size=[t.width,t.height],e.needsUpdate=!0,e.updateRenderer()}catch(t){}}),0)):"canvas"===this.board.renderer.type&&(this.size=this.crudeSizeEstimate())),this):this},crudeSizeEstimate:function(){var t=parseFloat(l.A.evaluate(this.visProp.fontsize));return[t*this.plaintext.length*.45,.9*t]},utf8_decode:function(t){return t.replace(/&#x(\w+);/g,(function(t,e){return String.fromCharCode(parseInt(e,16))}))},replaceSub:function(t){if(!t.indexOf)return t;for(var e,i=t.indexOf("_{");i>=0;)(e=(t=t.slice(0,i)+t.slice(i).replace(/_\{/,"<sub>")).indexOf("}",i+4))>=0&&(t=t.slice(0,e)+t.slice(e).replace(/\}/,"</sub>")),i=t.indexOf("_{");for(i=t.indexOf("_");i>=0;)i=(t=t.slice(0,i)+t.slice(i).replace(/_(.?)/,"<sub>$1</sub>")).indexOf("_");return t},replaceSup:function(t){if(!t.indexOf)return t;for(var e,i=t.indexOf("^{");i>=0;)(e=(t=t.slice(0,i)+t.slice(i).replace(/\^\{/,"<sup>")).indexOf("}",i+4))>=0&&(t=t.slice(0,e)+t.slice(e).replace(/\}/,"</sup>")),i=t.indexOf("^{");for(i=t.indexOf("^");i>=0;)i=(t=t.slice(0,i)+t.slice(i).replace(/\^(.?)/,"<sup>$1</sup>")).indexOf("^");return t},getSize:function(){return this.size},setCoords:function(t,e){var i,s,o;return l.A.isArray(t)&&t.length>1&&(e=t[1],t=t[0]),l.A.evaluate(this.visProp.islabel)&&l.A.exists(this.element)?(s=(t-(i=this.element.getLabelAnchor()).usrCoords[1])*this.board.unitX,o=-(e-i.usrCoords[2])*this.board.unitY,this.relativeCoords.setCoordinates(r.A.COORDS_BY_SCREEN,[s,o])):this.coords.setCoordinates(r.A.COORDS_BY_USER,[t,e]),this.fullUpdate(),this},update:function(t){return this.needsUpdate?(this.updateCoords(t),this.updateText(),"internal"===l.A.evaluate(this.visProp.display)&&l.A.isString(this.plaintext)&&(this.plaintext=this.utf8_decode(this.plaintext)),this.checkForSizeUpdate(),this.needsSizeUpdate&&this.updateSize(),this):this},checkForSizeUpdate:function(){this.board.infobox&&this.id===this.board.infobox.id?this.needsSizeUpdate=!1:(this.needsSizeUpdate=this.plaintextOld!==this.plaintext,this.needsSizeUpdate&&(this.plaintextOld=this.plaintext))},updateRenderer:function(){return l.A.evaluate(this.visProp.autoposition)&&this.setAutoPosition().updateConstraint(),this.updateRendererGeneric("updateText")},expandShortMath:function(t){return t.replace(/([)0-9.])\s*([(a-zA-Z_])/g,"$1*$2")},generateTerm:function(t,e,i){var s,r,o,a,h='""';if(o=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t||"").replace(/\r/g,"")).replace(/\n/g,"")).replace(/"/g,"'")).replace(/'/g,"\\'")).replace(/&arc;/g,"∠")).replace(/<arc\s*\/>/g,"∠")).replace(/<arc\s*\/>/g,"∠")).replace(/<sqrt\s*\/>/g,"√")).replace(/<value>/g,"<value>")).replace(/<\/value>/g,"</value>")).indexOf("<value>"),a=t.indexOf("</value>"),o>=0)for(;o>=0;)h+=' + "'+this.replaceSub(this.replaceSup(t.slice(0,o)))+'"',r=(r=t.slice(o+7,a)).replace(/\s+/g,""),!0===e&&(r=this.expandShortMath(r)),(s=(s=(s=i?r:n.A.geonext2JS(r,this.board)).replace(/\\"/g,"'")).replace(/\\'/g,"'")).indexOf("toFixed")<0&&l.A.isNumber(l.A.bind(this.board.jc.snippet(s,!0,"",!1),this)())?h+="+("+s+").toFixed("+l.A.evaluate(this.visProp.digits)+")":h+="+("+s+")",o=(t=t.slice(a+8)).indexOf("<value>"),a=t.indexOf("</value>");return h+=' + "'+this.replaceSub(this.replaceSup(t))+'"',h=(h=(h=this.convertGeonextAndSketchometry2CSS(h)).replace(/&/g,"&")).replace(/"/g,"'")},valueTagToJessieCode:function(t){var e,i,s,r,o=[],n='"';if(s=(t=(t=(t=(t=(t=t||"").replace(/\r/g,"")).replace(/\n/g,"")).replace(/<value>/g,"<value>")).replace(/<\/value>/g,"</value>")).indexOf("<value>"),r=t.indexOf("</value>"),s>=0)for(;s>=0;)o.push(n+this.escapeTicks(t.slice(0,s))+n),i=(i=t.slice(s+7,r)).replace(/\s+/g,""),e=(e=i=this.expandShortMath(i)).replace(/\\"/g,"'").replace(/\\'/g,"'"),o.push("("+e+")"),s=(t=t.slice(r+8)).indexOf("<value>"),r=t.indexOf("</value>");for(o.push(n+this.escapeTicks(t)+n),s=0;s<o.length;s++)o[s]=o[s].replace(/&/g,"&");return o},poorMansTeX:function(t){var e,i;if(l.A.isArray(t)){for(i=[],e=0;e<t.length;e++)i.push(this.poorMansTeX(t[e]));return i}return t=t.replace(/<arc\s*\/*>/g,"∠").replace(/<arc\s*\/*>/g,"∠").replace(/<sqrt\s*\/*>/g,"√").replace(/<sqrt\s*\/*>/g,"√"),this.convertGeonextAndSketchometry2CSS(this.replaceSub(this.replaceSup(t)),!0)},escapeTicks:function(t){return t.replace(/"/g,"%22").replace(/'/g,"%27")},unescapeTicks:function(t){return t.replace(/%22/g,'"').replace(/%27/g,"'")},convertGeonext2CSS:function(t){return l.A.isString(t)&&(t=(t=(t=(t=t.replace(/(<|<)overline(>|>)/g,"<span style=text-decoration:overline;>")).replace(/(<|<)\/overline(>|>)/g,"</span>")).replace(/(<|<)arrow(>|>)/g,"<span style=text-decoration:overline;>")).replace(/(<|<)\/arrow(>|>)/g,"</span>")),t},convertSketchometry2CSS:function(t,e){var i='<span class="sketcho sketcho-inherit sketcho-',s='"></span>';return l.A.isString(t)&&(e&&(i=this.escapeTicks(i),s=this.escapeTicks(s)),t=(t=t.replace(/(<|<)sketchofont(>|>)/g,i)).replace(/(<|<)\/sketchofont(>|>)/g,s)),t},convertGeonextAndSketchometry2CSS:function(t,e){return t=this.convertGeonext2CSS(t),t=this.convertSketchometry2CSS(t,e)},notifyParents:function(t){var e,i=null;t=(t=t.replace(/<value>/g,"<value>")).replace(/<\/value>/g,"</value>");do{null!==(i=(e=/<value>([\w\s*/^\-+()[\],<>=!]+)<\/value>/).exec(t))&&(n.A.findDependencies(this,i[1],this.board),t=(t=t.slice(i.index)).replace(e,""))}while(null!==i);return this},getParents:function(){var t;return t=void 0!==this.relativeCoords?[this.relativeCoords.usrCoords[1],this.relativeCoords.usrCoords[2],this.orgText]:[this.Z(),this.X(),this.Y(),this.orgText],0!==this.parents.length&&(t=this.parents),t},bounds:function(){var t=this.coords.usrCoords;return l.A.evaluate(this.visProp.islabel)||0===this.board.unitY||0===this.board.unitX?[0,0,0,0]:[t[1],t[2]+this.size[1]/this.board.unitY,t[1]+this.size[0]/this.board.unitX,t[2]]},getAnchorX:function(){var t=l.A.evaluate(this.visProp.anchorx);if("auto"===t)switch(this.visProp.position){case"top":case"bot":return"middle";case"rt":case"lrt":case"urt":return"left";default:return"right"}return t},getAnchorY:function(){var t=l.A.evaluate(this.visProp.anchory);if("auto"===t)switch(this.visProp.position){case"top":case"ulft":case"urt":return"bottom";case"bot":case"lrt":case"llft":return"top";default:return"middle"}return t},getNumberOfConflicts:function(t,e,i,s){var r,o,n,a,l,h=0;for(a=this.board.options.precision.hasPoint,this.board.options.precision.hasPoint=.25*(i+s),r=0,n=this.board.objectsList.length;r<n;r++)l=(o=this.board.objectsList[r]).visProp.hasinnerpoints,o.visProp.hasinnerpoints=!1,o.visPropCalc.visible&&"axis"!==o.elType&&"ticks"!==o.elType&&o!==this.board.infobox&&o!==this&&o.hasPoint(t,e)&&h++,o.visProp.hasinnerpoints=l;return this.board.options.precision.hasPoint=a,h},setAutoPosition:function(){var t,e,i,s,r,o,n,a,h,u,c,d,p,_,f,A,g,m=this.size[0],y=this.size[1],b={conflicts:1/0,angle:0,r:0},v=2*Math.PI/12;if(this===this.board.infobox||!this.visPropCalc.visible||!l.A.evaluate(this.visProp.islabel)||!this.element)return this;if(c=l.A.evaluate(this.visProp.offset),i=(r=this.element.getLabelAnchor()).scrCoords[1],s=r.scrCoords[2],_=c[0],f=c[1],0===(u=this.getNumberOfConflicts(i+_,s-f,m,y)))return this;for(d=l.A.evaluate(this.visProp.autopositionmindistance),a=l.A.evaluate(this.visProp.autopositionmaxdistance),h=.2*d,o=Math.atan2(f,_),b.conflicts=u,b.angle=o,b.r=d;b.conflicts>0&&d<=a;){for(p=1,n=o+v;p<12&&b.conflicts>0&&(t=i+d*(A=Math.cos(n)),e=s-d*(g=Math.sin(n)),(u=this.getNumberOfConflicts(t,e,m,y))<b.conflicts&&(b.conflicts=u,b.angle=n,b.r=d),0!==b.conflicts);p++)n+=v;d+=h}return d=b.r,A=Math.cos(b.angle),g=Math.sin(b.angle),this.visProp.offset=[d*A,d*g],this.visProp.anchorx=A<-.2?"right":A>.2?"left":"middle",this}}),s.A.createText=function(t,e,i){var r,o=l.A.copyAttributes(i,t.options,"text"),n=e.slice(0,-1),a=e[e.length-1];if(o.anchor=o.parent||o.anchor,!(r=u.A.create(s.A.Text,t,n,o,a)))throw new Error("JSXGraph: Can't create text with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [x,y], [z,x,y], [element,transformation]");return 0!==o.rotate&&r.addRotation(o.rotate),r},s.A.registerElement("text",s.A.createText),s.A.createHTMLSlider=function(t,e,i){var r,o,n=l.A.copyAttributes(i,t.options,"htmlslider");if(2!==e.length||2!==e[0].length||3!==e[1].length)throw new Error("JSXGraph: Can't create htmlslider with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parents are: [[x,y], [min, start, max]]");n.anchor=n.parent||n.anchor,n.fixed=n.fixed||!0,o=[e[0][0],e[0][1],'<form style="display:inline"><input type="range" /><span></span><input type="text" /></form>'],(r=s.A.createText(t,o,n)).type=l.A.OBJECT_TYPE_HTMLSLIDER,r.rendNodeForm=r.rendNode.childNodes[0],r.rendNodeRange=r.rendNodeForm.childNodes[0],r.rendNodeRange.min=e[1][0],r.rendNodeRange.max=e[1][2],r.rendNodeRange.step=n.step,r.rendNodeRange.value=e[1][1],r.rendNodeLabel=r.rendNodeForm.childNodes[1],r.rendNodeLabel.id=r.rendNode.id+"_label",n.withlabel&&(r.rendNodeLabel.innerHTML=r.name+"="),r.rendNodeOut=r.rendNodeForm.childNodes[2],r.rendNodeOut.value=e[1][1];try{r.rendNodeForm.id=r.rendNode.id+"_form",r.rendNodeRange.id=r.rendNode.id+"_range",r.rendNodeOut.id=r.rendNode.id+"_out"}catch(t){s.A.debug(t)}return r.rendNodeRange.style.width=n.widthrange+"px",r.rendNodeRange.style.verticalAlign="middle",r.rendNodeOut.style.width=n.widthout+"px",r._val=e[1][1],s.A.supportsVML()?a.A.addEvent(r.rendNodeForm,"change",c,r):a.A.addEvent(r.rendNodeForm,"input",c,r),r.Value=function(){return this._val},r},s.A.registerElement("htmlslider",s.A.createHTMLSlider),e.A=s.A.Text},443:function(t,e){var i={};try{"object"!=typeof JXG||JXG.extend||(i=JXG)}catch(t){}i.extend=function(t,e,i,s){var r;for(r in i=i||!1,s=s||!1,e)(!i||i&&e.hasOwnProperty(r))&&(t[s?r.toLowerCase():r]=e[r])},i.defineConstant=function(t,e,s,r){(r=r||!1)&&i.exists(t[e])||Object.defineProperty(t,e,{value:s,writable:!1,enumerable:!0,configurable:!1})},i.extendConstants=function(t,e,i,s){var r,o;for(r in i=i||!1,s=s||!1,e)(!i||i&&e.hasOwnProperty(r))&&(o=s?r.toUpperCase():r,this.defineConstant(t,o,e[r]))},i.extend(i,{boards:{},readers:{},elements:{},registerElement:function(t,e){t=t.toLowerCase(),this.elements[t]=e},registerReader:function(t,e){var i,s;for(i=0;i<e.length;i++)s=e[i].toLowerCase(),"function"!=typeof this.readers[s]&&(this.readers[s]=t)},shortcut:function(t,e){return function(){return t[e].apply(this,arguments)}},getRef:function(t,e){return i.deprecated("JXG.getRef()","Board.select()"),t.select(e)},getReference:function(t,e){return i.deprecated("JXG.getReference()","Board.select()"),t.select(e)},getBoardByContainerId:function(t){var e;for(e in JXG.boards)if(JXG.boards.hasOwnProperty(e)&&JXG.boards[e].container===t)return JXG.boards[e];return null},deprecated:function(t,e){var s=t+" is deprecated.";e&&(s+=" Please use "+e+" instead."),i.warn(s)},warn:function(t){"object"==typeof window&&window.console&&console.warn?console.warn("WARNING:",t):"object"==typeof document&&document.getElementById("warning")&&(document.getElementById("debug").innerHTML+="WARNING: "+t+"<br />")},debugInt:function(t){var e,i;for(e=0;e<arguments.length;e++)i=arguments[e],"object"==typeof window&&window.console&&console.log?console.log(i):"object"==typeof document&&document.getElementById("debug")&&(document.getElementById("debug").innerHTML+=i+"<br/>")},debugWST:function(t){var e=new Error;i.debugInt.apply(this,arguments),e&&e.stack&&(i.debugInt("stacktrace"),i.debugInt(e.stack.split("\n").slice(1).join("\n")))},debugLine:function(t){var e=new Error;i.debugInt.apply(this,arguments),e&&e.stack&&i.debugInt("Called from",e.stack.split("\n").slice(2,3).join("\n"))},debug:function(t){i.debugInt.apply(this,arguments)},themes:{}}),e.A=i},571:function(t,e,i){var s=i(443),r=i(561),o=i(904),n=i(477),a=i(171),l=i(188),h=i(713);n.A.Geometry={},s.A.extend(n.A.Geometry,{angle:function(t,e,i){var r,o,n,a,l=[],h=[],u=[];return s.A.deprecated("Geometry.angle()","Geometry.rad()"),t.coords?(l[0]=t.coords.usrCoords[1],l[1]=t.coords.usrCoords[2]):(l[0]=t[0],l[1]=t[1]),e.coords?(h[0]=e.coords.usrCoords[1],h[1]=e.coords.usrCoords[2]):(h[0]=e[0],h[1]=e[1]),i.coords?(u[0]=i.coords.usrCoords[1],u[1]=i.coords.usrCoords[2]):(u[0]=i[0],u[1]=i[1]),r=l[0]-h[0],o=l[1]-h[1],n=u[0]-h[0],a=u[1]-h[1],Math.atan2(r*a-o*n,r*n+o*a)},trueAngle:function(t,e,i){return 57.29577951308232*this.rad(t,e,i)},rad:function(t,e,i){var s,r,o,n,a,l,h;return t.coords?(s=t.coords.usrCoords[1],r=t.coords.usrCoords[2]):(s=t[0],r=t[1]),e.coords?(o=e.coords.usrCoords[1],n=e.coords.usrCoords[2]):(o=e[0],n=e[1]),i.coords?(a=i.coords.usrCoords[1],l=i.coords.usrCoords[2]):(a=i[0],l=i[1]),(h=Math.atan2(l-n,a-o)-Math.atan2(r-n,s-o))<0&&(h+=6.283185307179586),h},angleBisector:function(t,e,i,s){var n,a,h,u,c,d=t.coords.usrCoords,p=e.coords.usrCoords,_=i.coords.usrCoords;return l.A.exists(s)||(s=t.board),0===p[0]?new o.A(r.A.COORDS_BY_USER,[1,.5*(d[1]+_[1]),.5*(d[2]+_[2])],s):(u=d[1]-p[1],c=d[2]-p[2],n=Math.atan2(c,u),u=_[1]-p[1],c=_[2]-p[2],h=.5*(n+(a=Math.atan2(c,u))),n>a&&(h+=Math.PI),u=Math.cos(h)+p[1],c=Math.sin(h)+p[2],new o.A(r.A.COORDS_BY_USER,[1,u,c],s))},reflection:function(t,e,i){var s,n,a,h,u,c,d=e.coords.usrCoords,p=t.point1.coords.usrCoords,_=t.point2.coords.usrCoords;return l.A.exists(i)||(i=e.board),h=_[1]-p[1],u=_[2]-p[2],s=d[1]-p[1],c=(h*(d[2]-p[2])-u*s)/(h*h+u*u),n=d[1]+2*c*u,a=d[2]-2*c*h,new o.A(r.A.COORDS_BY_USER,[n,a],i)},rotation:function(t,e,i,s){var n,a,h,u,c,d,p=e.coords.usrCoords,_=t.coords.usrCoords;return l.A.exists(s)||(s=e.board),n=p[1]-_[1],a=p[2]-_[2],c=n*(h=Math.cos(i))-a*(u=Math.sin(i))+_[1],d=n*u+a*h+_[2],new o.A(r.A.COORDS_BY_USER,[c,d],s)},perpendicular:function(t,e,i){var s,a,h,u,c,d=t.point1.coords.usrCoords,p=t.point2.coords.usrCoords,_=e.coords.usrCoords;return l.A.exists(i)||(i=e.board),e===t.point1?(s=d[1]+p[2]-d[2],a=d[2]-p[1]+d[1],c=d[0]*p[0],Math.abs(c)<n.A.eps&&(s=p[2],a=-p[1]),u=[c,s,a],h=!0):e===t.point2?(s=p[1]+d[2]-p[2],a=p[2]-d[1]+p[1],c=d[0]*p[0],Math.abs(c)<n.A.eps&&(s=d[2],a=-d[1]),u=[c,s,a],h=!1):Math.abs(n.A.innerProduct(_,t.stdform,3))<n.A.eps?(s=_[1]+p[2]-_[2],a=_[2]-p[1]+_[1],c=p[0],Math.abs(c)<n.A.eps&&(s=p[2],a=-p[1]),h=!0,Math.abs(c)>n.A.eps&&Math.abs(s-_[1])<n.A.eps&&Math.abs(a-_[2])<n.A.eps&&(s=_[1]+d[2]-_[2],a=_[2]-d[1]+_[1],h=!1),u=[c,s,a]):(u=[0,t.stdform[1],t.stdform[2]],u=n.A.crossProduct(u,_),u=n.A.crossProduct(u,t.stdform),h=!0),[new o.A(r.A.COORDS_BY_USER,u,i),h]},circumcenterMidpoint:function(){s.A.deprecated("Geometry.circumcenterMidpoint()","Geometry.circumcenter()"),this.circumcenter.apply(this,arguments)},circumcenter:function(t,e,i,s){var a,h,u,c,d=t.coords.usrCoords,p=e.coords.usrCoords,_=i.coords.usrCoords;return l.A.exists(s)||(s=t.board),a=[p[0]-d[0],-p[2]+d[2],p[1]-d[1]],h=[.5*(d[0]+p[0]),.5*(d[1]+p[1]),.5*(d[2]+p[2])],u=n.A.crossProduct(a,h),a=[_[0]-p[0],-_[2]+p[2],_[1]-p[1]],h=[.5*(p[0]+_[0]),.5*(p[1]+_[1]),.5*(p[2]+_[2])],c=n.A.crossProduct(a,h),new o.A(r.A.COORDS_BY_USER,n.A.crossProduct(u,c),s)},distance:function(t,e,i){var s,r=0;for(i||(i=Math.min(t.length,e.length)),s=0;s<i;s++)r+=(t[s]-e[s])*(t[s]-e[s]);return Math.sqrt(r)},affineDistance:function(t,e,i){var s;return(s=this.distance(t,e,i))>n.A.eps&&(Math.abs(t[0])<n.A.eps||Math.abs(e[0])<n.A.eps)?1/0:s},affineRatio:function(t,e,i){var s;return l.A.exists(t.usrCoords)&&(t=t.usrCoords),l.A.exists(e.usrCoords)&&(e=e.usrCoords),l.A.exists(i.usrCoords)&&(i=i.usrCoords),s=e[1]-t[1],Math.abs(s)>n.A.eps?(i[1]-t[1])/s:(i[2]-t[2])/(e[2]-t[2])},sortVertices:function(t){for(var e,i=h.A.each(t,h.A.coordsArray),s=i.length,r=null;i[0][0]===i[s-1][0]&&i[0][1]===i[s-1][1]&&i[0][2]===i[s-1][2];)r=i.pop(),s--;return e=i[0],i.sort((function(t,i){return(t[2]===e[2]&&t[1]===e[1]?-1/0:Math.atan2(t[2]-e[2],t[1]-e[1]))-(i[2]===e[2]&&i[1]===e[1]?-1/0:Math.atan2(i[2]-e[2],i[1]-e[1]))})),null!==r&&i.push(r),i},signedTriangle:function(t,e,i){var s=h.A.coordsArray(t),r=h.A.coordsArray(e),o=h.A.coordsArray(i);return.5*((r[1]-s[1])*(o[2]-s[2])-(r[2]-s[2])*(o[1]-s[1]))},signedPolygon:function(t,e){var i,s,r=0,o=h.A.each(t,h.A.coordsArray);for(void 0===e&&(e=!0),e?o.unshift(o[o.length-1]):o=this.sortVertices(o),s=o.length,i=1;i<s;i++)r+=o[i-1][1]*o[i][2]-o[i][1]*o[i-1][2];return.5*r},GrahamScan:function(t){var e,i=1,s=h.A.each(t,h.A.coordsArray),r=s.length;for(r=(s=this.sortVertices(s)).length,e=2;e<r;e++){for(;this.signedTriangle(s[i-1],s[i],s[e])<=0;){if(i>1)i-=1;else if(e===r-1)break;e+=1}i+=1,s=l.A.swap(s,i,e)}return s.slice(0,i)},calcStraight:function(t,e,i,s){var o,a,h,u,c,d,p,_,f,A;if(l.A.exists(s)||(s=10),d=l.A.evaluate(t.visProp.straightfirst),p=l.A.evaluate(t.visProp.straightlast),Math.abs(e.scrCoords[0])<n.A.eps&&(d=!0),Math.abs(i.scrCoords[0])<n.A.eps&&(p=!0),(d||p)&&((_=[])[0]=t.stdform[0]-t.stdform[1]*t.board.origin.scrCoords[1]/t.board.unitX+t.stdform[2]*t.board.origin.scrCoords[2]/t.board.unitY,_[1]=t.stdform[1]/t.board.unitX,_[2]=-t.stdform[2]/t.board.unitY,!isNaN(_[0]+_[1]+_[2]))){if(!1,!1,o=!d&&Math.abs(e.usrCoords[0])>=n.A.eps&&e.scrCoords[1]>=0&&e.scrCoords[1]<=t.board.canvasWidth&&e.scrCoords[2]>=0&&e.scrCoords[2]<=t.board.canvasHeight,a=!p&&Math.abs(i.usrCoords[0])>=n.A.eps&&i.scrCoords[1]>=0&&i.scrCoords[1]<=t.board.canvasWidth&&i.scrCoords[2]>=0&&i.scrCoords[2]<=t.board.canvasHeight,u=(h=this.meetLineBoard(_,t.board,s))[0],c=h[1],!o&&!a){if(!d&&p&&!this.isSameDirection(e,i,u)&&!this.isSameDirection(e,i,c))return;if(d&&!p&&!this.isSameDirection(i,e,u)&&!this.isSameDirection(i,e,c))return}o?a||(A=this.isSameDir(e,i,u,c)?c:u):a?f=this.isSameDir(e,i,u,c)?u:c:this.isSameDir(e,i,u,c)?(f=u,A=c):(A=u,f=c),f&&e.setCoordinates(r.A.COORDS_BY_USER,f.usrCoords),A&&i.setCoordinates(r.A.COORDS_BY_USER,A.usrCoords)}},calcLineDelimitingPoints:function(t,e,i){var s,o,a,h,u,c,d,p,_,f,A;if(u=l.A.evaluate(t.visProp.straightfirst),c=l.A.evaluate(t.visProp.straightlast),Math.abs(e.scrCoords[0])<n.A.eps&&(u=!0),Math.abs(i.scrCoords[0])<n.A.eps&&(c=!0),(d=[])[0]=t.stdform[0]-t.stdform[1]*t.board.origin.scrCoords[1]/t.board.unitX+t.stdform[2]*t.board.origin.scrCoords[2]/t.board.unitY,d[1]=t.stdform[1]/t.board.unitX,d[2]=-t.stdform[2]/t.board.unitY,!isNaN(d[0]+d[1]+d[2])){if(f=!u,A=!c,o=t.board.getBoundingBox(),t.getSlope()>=0?(a=this.projectPointToLine({coords:{usrCoords:[1,o[2],o[1]]}},t,t.board),h=this.projectPointToLine({coords:{usrCoords:[1,o[0],o[3]]}},t,t.board)):(a=this.projectPointToLine({coords:{usrCoords:[1,o[0],o[1]]}},t,t.board),h=this.projectPointToLine({coords:{usrCoords:[1,o[2],o[3]]}},t,t.board)),!f&&!A){if(!u&&!c){if(s=e.distance(r.A.COORDS_BY_USER,i),Math.abs(e.distance(r.A.COORDS_BY_USER,a)+a.distance(r.A.COORDS_BY_USER,i)-s)>n.A.eps)return;if(Math.abs(e.distance(r.A.COORDS_BY_USER,h)+h.distance(r.A.COORDS_BY_USER,i)-s)>n.A.eps)return}if(!u&&c&&!this.isSameDirection(e,i,a)&&!this.isSameDirection(e,i,h))return;if(u&&!c&&!this.isSameDirection(i,e,a)&&!this.isSameDirection(i,e,h))return}f?A||(_=this.isSameDir(e,i,a,h)?h:a):A?p=this.isSameDir(e,i,a,h)?a:h:this.isSameDir(e,i,a,h)?(p=a,_=h):(_=a,p=h),p&&e.setCoordinates(r.A.COORDS_BY_USER,p.usrCoords),_&&i.setCoordinates(r.A.COORDS_BY_USER,_.usrCoords)}},calcLabelQuadrant:function(t){return t<0&&(t+=2*Math.PI),["rt","urt","top","ulft","lft","llft","lrt"][Math.floor((t+Math.PI/8)/(Math.PI/4))%8]},isSameDir:function(t,e,i,s){var r=e.usrCoords[1]-t.usrCoords[1],o=e.usrCoords[2]-t.usrCoords[2],a=s.usrCoords[1]-i.usrCoords[1],l=s.usrCoords[2]-i.usrCoords[2];return Math.abs(e.usrCoords[0])<n.A.eps&&(r=e.usrCoords[1],o=e.usrCoords[2]),Math.abs(t.usrCoords[0])<n.A.eps&&(r=-t.usrCoords[1],o=-t.usrCoords[2]),r*a+o*l>=0},isSameDirection:function(t,e,i){var s,r,o,a,l=!1;return s=e.usrCoords[1]-t.usrCoords[1],r=e.usrCoords[2]-t.usrCoords[2],o=i.usrCoords[1]-t.usrCoords[1],a=i.usrCoords[2]-t.usrCoords[2],Math.abs(s)<n.A.eps&&(s=0),Math.abs(r)<n.A.eps&&(r=0),Math.abs(o)<n.A.eps&&(o=0),Math.abs(a)<n.A.eps&&(a=0),(s>=0&&o>=0||s<=0&&o<=0)&&(l=r>=0&&a>=0||r<=0&&a<=0),l},det3p:function(t,e,i){return(t[1]-i[1])*(e[2]-i[2])-(e[1]-i[1])*(t[2]-i[2])},windingNumber:function(t,e,i){var s,r,o,a,h,u,c=0,d=e.length,p=t[1],_=t[2],f=0;if(0===d)return 0;if((i=i||!1)&&(f=1),isNaN(p)||isNaN(_))return 1;if(l.A.exists(e[0].coords)?(s=e[0].coords,r=e[d-1].coords):(s=e[0],r=e[d-1]),s.usrCoords[1]===p&&s.usrCoords[2]===_)return 1;for(u=0;u<d-f;u++)if(l.A.exists(e[u].coords)?(r=e[u].coords.usrCoords,o=e[(u+1)%d].coords.usrCoords):(r=e[u].usrCoords,o=e[(u+1)%d].usrCoords),!(0===r[0]||0===o[0]||isNaN(r[1])||isNaN(o[1])||isNaN(r[2])||isNaN(o[2]))){if(o[2]===_){if(o[1]===p)return 1;if(r[2]===_&&o[1]>p==r[1]<p)return 0}if(r[2]<_!=o[2]<_)if(h=2*(o[2]>r[2]?1:0)-1,r[1]>=p)if(o[1]>p)c+=h;else{if(0===(a=this.det3p(r,o,t)))return 0;a>0+n.A.eps==o[2]>r[2]&&(c+=h)}else o[1]>p&&(a=this.det3p(r,o,t))>0+n.A.eps==o[2]>r[2]&&(c+=h)}return c},pnpoly:function(t,e,i,s){var n,a,h,u,c,d,p,_,f=i,A=!1;for(s===r.A.COORDS_BY_USER?(d=(_=new o.A(r.A.COORDS_BY_USER,[t,e],this.board)).scrCoords[1],p=_.scrCoords[2]):(d=t,p=e),n=0,a=(c=i.length)-2;n<c-1;a=n++)h=l.A.exists(f[n].coords)?f[n].coords:f[n],u=l.A.exists(f[a].coords)?f[a].coords:f[a],h.scrCoords[2]>p!=u.scrCoords[2]>p&&d<(u.scrCoords[1]-h.scrCoords[1])*(p-h.scrCoords[2])/(u.scrCoords[2]-h.scrCoords[2])+h.scrCoords[1]&&(A=!A);return A},intersectionFunction:function(t,e,i,a,h,u){var c,d,p=this;return c=e.elementClass===r.A.OBJECT_CLASS_CURVE&&(e.type===r.A.OBJECT_TYPE_ARC||e.type===r.A.OBJECT_TYPE_SECTOR),d=i.elementClass===r.A.OBJECT_CLASS_CURVE&&(i.type===r.A.OBJECT_TYPE_ARC||i.type===r.A.OBJECT_TYPE_SECTOR),e.elementClass!==r.A.OBJECT_CLASS_CURVE&&i.elementClass!==r.A.OBJECT_CLASS_CURVE||e.elementClass!==r.A.OBJECT_CLASS_CURVE&&e.elementClass!==r.A.OBJECT_CLASS_CIRCLE||i.elementClass!==r.A.OBJECT_CLASS_CURVE&&i.elementClass!==r.A.OBJECT_CLASS_CIRCLE?e.elementClass===r.A.OBJECT_CLASS_CURVE&&!c&&i.elementClass===r.A.OBJECT_CLASS_LINE||i.elementClass===r.A.OBJECT_CLASS_CURVE&&!d&&e.elementClass===r.A.OBJECT_CLASS_LINE?function(){return p.meetCurveLine(e,i,a,e.board,l.A.evaluate(u))}:e.type===r.A.OBJECT_TYPE_POLYGON||i.type===r.A.OBJECT_TYPE_POLYGON?e.elementClass===r.A.OBJECT_CLASS_LINE?function(){var t,s=l.A.evaluate(e.visProp.straightfirst),r=l.A.evaluate(e.visProp.straightlast),o=l.A.evaluate(i.visProp.straightfirst),n=l.A.evaluate(i.visProp.straightlast);return t=!(l.A.evaluate(u)||s&&r&&o&&n),p.meetPolygonLine(i,e,a,e.board,t)}:i.elementClass===r.A.OBJECT_CLASS_LINE?function(){var t,s=l.A.evaluate(e.visProp.straightfirst),r=l.A.evaluate(e.visProp.straightlast),o=l.A.evaluate(i.visProp.straightfirst),n=l.A.evaluate(i.visProp.straightlast);return t=!(l.A.evaluate(u)||s&&r&&o&&n),p.meetPolygonLine(e,i,a,e.board,t)}:function(){return p.meetPathPath(e,i,a,e.board)}:e.elementClass===r.A.OBJECT_CLASS_LINE&&i.elementClass===r.A.OBJECT_CLASS_LINE?function(){var t,s,n=l.A.evaluate(e.visProp.straightfirst),h=l.A.evaluate(e.visProp.straightlast),c=l.A.evaluate(i.visProp.straightfirst),d=l.A.evaluate(i.visProp.straightlast);return l.A.evaluate(u)||n&&h&&c&&d?p.meet(e.stdform,i.stdform,a,e.board):(t=p.meetSegmentSegment(e.point1.coords.usrCoords,e.point2.coords.usrCoords,i.point1.coords.usrCoords,i.point2.coords.usrCoords),s=!n&&t[1]<0||!h&&t[1]>1||!c&&t[2]<0||!d&&t[2]>1?[0,NaN,NaN]:t[0],new o.A(r.A.COORDS_BY_USER,s,e.board))}:function(){var t,h,_,f=p.meet(e.stdform,i.stdform,a,e.board),A=!0;return l.A.evaluate(u)?f:(e.elementClass!==r.A.OBJECT_CLASS_LINE||(t=l.A.evaluate(e.visProp.straightfirst),h=l.A.evaluate(e.visProp.straightlast),t&&h||(_=p.affineRatio(e.point1.coords,e.point2.coords,f),!(!h&&_>1+n.A.eps||!t&&_<0-n.A.eps))))&&(i.elementClass!==r.A.OBJECT_CLASS_LINE||(t=l.A.evaluate(i.visProp.straightfirst),h=l.A.evaluate(i.visProp.straightlast),t&&h||(_=p.affineRatio(i.point1.coords,i.point2.coords,f),!(!h&&_>1+n.A.eps||!t&&_<0-n.A.eps))))?c&&((A=p.coordsOnArc(e,f))&&d&&(A=p.coordsOnArc(i,f)),!A)?new o.A(s.A.COORDS_BY_USER,[0,NaN,NaN],e.board):f:new o.A(s.A.COORDS_BY_USER,[0,NaN,NaN],e.board)}:function(){return p.meetCurveCurve(e,i,a,h,e.board)}},otherIntersectionFunction:function(t,e,i,o){var n,a,h,u=this;return a=t[0],h=t[1],n=a.board,function(){var t,c,d,p,_=e.length,f=l.A.evaluate(o);for(t=_;t>=0;t--){for(a.elementClass===r.A.OBJECT_CLASS_CIRCLE&&[r.A.OBJECT_CLASS_CIRCLE,r.A.OBJECT_CLASS_LINE].indexOf(h.elementClass)>=0?d=u.meet(a.stdform,h.stdform,t,n):a.elementClass===r.A.OBJECT_CLASS_CURVE&&[r.A.OBJECT_CLASS_CURVE,r.A.OBJECT_CLASS_CIRCLE].indexOf(h.elementClass)>=0?d=u.meetCurveCurve(a,h,t,0,n,"segment"):a.elementClass===r.A.OBJECT_CLASS_CURVE&&h.elementClass===r.A.OBJECT_CLASS_LINE&&(d=l.A.exists(a.dataX)?s.A.Math.Geometry.meetCurveLine(a,h,t,a.board,l.A.evaluate(i)):s.A.Math.Geometry.meetCurveLineContinuous(a,h,t,a.board)),p=!1,c=0;!p&&c<_;c++)d.distance(s.A.COORDS_BY_USER,e[c].coords)<f&&(p=!0);if(!p)return d}return d}},intersectionFunction3D:function(t,e,i,s){var o,n=this;return e.type===r.A.OBJECT_TYPE_PLANE3D?i.type===r.A.OBJECT_TYPE_PLANE3D?o=()=>t.intersectionPlanePlane(e,i)[s]:i.type===r.A.OBJECT_TYPE_SPHERE3D&&(o=n.meetPlaneSphere(e,i)):e.type===r.A.OBJECT_TYPE_SPHERE3D&&(i.type===r.A.OBJECT_TYPE_PLANE3D?o=n.meetPlaneSphere(i,e):i.type===r.A.OBJECT_TYPE_SPHERE3D&&(o=n.meetSphereSphere(e,i))),o},coordsOnArc:function(t,e){var i=this.rad(t.radiuspoint,t.center,e.usrCoords.slice(1)),s=0,r=this.rad(t.radiuspoint,t.center,t.anglepoint),o=l.A.evaluate(t.visProp.selection);return("minor"===o&&r>Math.PI||"major"===o&&r<Math.PI)&&(s=r,r=2*Math.PI),!(i<s||i>r)},meet:function(t,e,i,s){var r=n.A.eps;return Math.abs(t[3])<r&&Math.abs(e[3])<r?this.meetLineLine(t,e,i,s):Math.abs(t[3])>=r&&Math.abs(e[3])<r?this.meetLineCircle(e,t,i,s):Math.abs(t[3])<r&&Math.abs(e[3])>=r?this.meetLineCircle(t,e,i,s):this.meetCircleCircle(t,e,i,s)},meetLineBoard:function(t,e,i){var s,a,h,u,c=[];for(l.A.exists(i)||(i=0),c[0]=n.A.crossProduct(t,[i,0,1]),c[1]=n.A.crossProduct(t,[i,1,0]),c[2]=n.A.crossProduct(t,[-i-e.canvasHeight,0,1]),c[3]=n.A.crossProduct(t,[-i-e.canvasWidth,1,0]),h=0;h<4;h++)if(Math.abs(c[h][0])>n.A.eps){for(u=2;u>0;u--)c[h][u]/=c[h][0];c[h][0]=1}return Math.abs(c[1][0])<n.A.eps?(s=c[0],a=c[2]):Math.abs(c[0][0])<n.A.eps?(s=c[1],a=c[3]):c[1][2]<0?(s=c[0],a=c[3][2]>e.canvasHeight?c[2]:c[3]):c[1][2]>e.canvasHeight?(s=c[2],a=c[3][2]<0?c[0]:c[3]):(s=c[1],a=c[3][2]<0?c[0]:c[3][2]>e.canvasHeight?c[2]:c[3]),[new o.A(r.A.COORDS_BY_SCREEN,s.slice(1),e),new o.A(r.A.COORDS_BY_SCREEN,a.slice(1),e)]},meetLineLine:function(t,e,i,s){var a=isNaN(t[5]+e[5])?[0,0,0]:n.A.crossProduct(t,e);return Math.abs(a[0])<1e-14&&(a[0]=0),new o.A(r.A.COORDS_BY_USER,a,s)},meetLineCircle:function(t,e,i,s){var a,h,u,c,d,p,_,f,A;return e[4]<n.A.eps?Math.abs(n.A.innerProduct([1,e[6],e[7]],t,3))<n.A.eps?new o.A(r.A.COORDS_BY_USER,e.slice(6,8),s):new o.A(r.A.COORDS_BY_USER,[NaN,NaN],s):(u=e[0],h=e.slice(1,3),a=e[3],c=t[0],d=t.slice(1,3),p=a,(f=(_=h[0]*d[1]-h[1]*d[0])*_-4*p*(a*c*c-(h[0]*d[0]+h[1]*d[1])*c+u))>-n.A.eps*n.A.eps?(A=[(-_+(f=Math.sqrt(Math.abs(f))))/(2*p),(-_-f)/(2*p)],0===l.A.evaluate(i)?new o.A(r.A.COORDS_BY_USER,[-A[0]*-d[1]-c*d[0],-A[0]*d[0]-c*d[1]],s):new o.A(r.A.COORDS_BY_USER,[-A[1]*-d[1]-c*d[0],-A[1]*d[0]-c*d[1]],s)):new o.A(r.A.COORDS_BY_USER,[0,0,0],s))},meetCircleCircle:function(t,e,i,s){var a;return t[4]<n.A.eps?Math.abs(this.distance(t.slice(6,2),e.slice(6,8))-e[4])<n.A.eps?new o.A(r.A.COORDS_BY_USER,t.slice(6,8),s):new o.A(r.A.COORDS_BY_USER,[0,0,0],s):e[4]<n.A.eps?Math.abs(this.distance(e.slice(6,2),t.slice(6,8))-t[4])<n.A.eps?new o.A(r.A.COORDS_BY_USER,e.slice(6,8),s):new o.A(r.A.COORDS_BY_USER,[0,0,0],s):(a=[e[3]*t[0]-t[3]*e[0],e[3]*t[1]-t[3]*e[1],e[3]*t[2]-t[3]*e[2],0,1,1/0,1/0,1/0],a=n.A.normalize(a),this.meetLineCircle(a,t,i,s))},meetCurveCurve:function(t,e,i,s,n,h){var u;return u=l.A.exists(h)&&"newton"===h?a.A.generalizedNewton(t,e,l.A.evaluate(i),s):3===t.bezierDegree||3===e.bezierDegree?this.meetBezierCurveRedBlueSegments(t,e,i):this.meetCurveRedBlueSegments(t,e,i),new o.A(r.A.COORDS_BY_USER,u,n)},meetCurveLine:function(t,e,i,s,o){var n,a;return l.A.exists(s)||(s=t.board),t.elementClass===r.A.OBJECT_CLASS_CURVE?(n=t,a=e):(n=e,a=t),this.meetCurveLineDiscrete(n,a,i,s,!o)},meetCurveLineContinuous:function(t,e,i,s,l){var h,u,c,d,p,_,f,A,g,m,y,b,v,C=n.A.eps,P=n.A.eps;for(d=this.meetCurveLineDiscrete(t,e,i,s,l),p=d.usrCoords[1],_=d.usrCoords[2],h=function(e){var i,s;return e>t.maxX()||e<t.minX()?1/0:(i=t.X(e)-p)*i+(s=t.Y(e)-_)*s},u=function(i){var s=e.stdform[0]+e.stdform[1]*t.X(i)+e.stdform[2]*t.Y(i);return s*s},A=(t.maxX()-t.minX())/50,g=t.minX(),y=1e-4,m=NaN,b=0;b<50&&(c=a.A.root(h,[Math.max(g,t.minX()),Math.min(g+A,t.maxX())]),!((v=Math.abs(h(c)))<=y&&(m=c,(y=v)<C)));b++)g+=A;return c=m,v=u(c=a.A.root(u,[Math.max(c-A,t.minX()),Math.min(c+A,t.maxX())])),f=isNaN(v)||Math.abs(v)>P?0:1,new o.A(r.A.COORDS_BY_USER,[f,t.X(c),t.Y(c)],s)},meetCurveLineDiscrete:function(t,e,i,s,a){var h,u,c,d,p,_,f,A=l.A.evaluate(i),g=e.point1.coords.usrCoords,m=e.point2.coords.usrCoords,y=0,b=t.numberPoints,v=l.A.evaluate(e.visProp.straightfirst),C=l.A.evaluate(e.visProp.straightlast);for(_=new o.A(r.A.COORDS_BY_USER,[0,NaN,NaN],s),0===g[0]?g=[1,m[1]+e.stdform[2],m[2]-e.stdform[1]]:0===m[0]&&(m=[1,g[1]+e.stdform[2],g[2]-e.stdform[1]]),d=t.points[0].usrCoords,h=1;h<b;h+=t.bezierDegree)if(c=d.slice(0),d=t.points[h].usrCoords,this.distance(c,d)>n.A.eps)for(f=3===t.bezierDegree?this.meetBeziersegmentBeziersegment([t.points[h-1].usrCoords.slice(1),t.points[h].usrCoords.slice(1),t.points[h+1].usrCoords.slice(1),t.points[h+2].usrCoords.slice(1)],[g.slice(1),m.slice(1)],a):[this.meetSegmentSegment(c,d,g,m)],u=0;u<f.length;u++)if(0<=(p=f[u])[1]&&p[1]<=1){if(y===A)return a&&(!v&&p[2]<0||!C&&p[2]>1)?_:_=new o.A(r.A.COORDS_BY_USER,p[0],s);y+=1}return _},meetCurveRedBlueSegments:function(t,e,i){var s,r,o,n,a,h,u,c,d,p=l.A.evaluate(i),_=0,f=e.numberPoints,A=t.numberPoints;if(f<=1||A<=1)return[0,NaN,NaN];for(s=1;s<A;s++)for(o=t.points[s-1].usrCoords,n=t.points[s].usrCoords,c=Math.min(o[1],n[1]),d=Math.max(o[1],n[1]),h=e.points[0].usrCoords,r=1;r<f;r++)if(a=h,h=e.points[r].usrCoords,Math.min(a[1],h[1])<d&&Math.max(a[1],h[1])>c&&(u=this.meetSegmentSegment(o,n,a,h))[1]>=0&&u[2]>=0&&(u[1]<1&&u[2]<1||s===A-1&&1===u[1]||r===f-1&&1===u[2])){if(_===p)return u[0];_++}return[0,NaN,NaN]},meetSegmentSegment:function(t,e,i,s){var r,o,a,l=n.A.crossProduct(t,e),h=n.A.crossProduct(i,s),u=n.A.crossProduct(l,h);return Math.abs(u[0])<n.A.eps?[u,1/0,1/0]:(u[1]/=u[0],u[2]/=u[0],u[0]/=u[0],a=t[o=Math.abs(e[1]-e[0]*t[1])<n.A.eps?2:1]/t[0],r=(u[o]-a)/(0!==e[0]?e[o]/e[0]-a:e[o]),a=i[o=Math.abs(s[1]-s[0]*i[1])<n.A.eps?2:1]/i[0],[u,r,(u[o]-a)/(0!==s[0]?s[o]/s[0]-a:s[o])])},meetPathPath:function(t,e,i,a){var h,u,c,d,p=l.A.evaluate(i);return(c=(h=s.A.Math.Clip._getPath(t,a)).length)>0&&this.distance(h[0].coords.usrCoords,h[c-1].coords.usrCoords,3)<n.A.eps&&h.pop(),(c=(u=s.A.Math.Clip._getPath(e,a)).length)>0&&this.distance(u[0].coords.usrCoords,u[c-1].coords.usrCoords,3)<n.A.eps*n.A.eps&&u.pop(),i<0||s.A.Math.Clip.isEmptyCase(h,u,"intersection")?new o.A(r.A.COORDS_BY_USER,[0,0,0],a):(s.A.Math.Clip.makeDoublyLinkedList(h),s.A.Math.Clip.makeDoublyLinkedList(u),p<(d=s.A.Math.Clip.findIntersections(h,u,a)[0]).length?d[p].coords:new o.A(r.A.COORDS_BY_USER,[0,0,0],a))},meetPolygonLine:function(t,e,i,s,n){var a,h,u,c=l.A.evaluate(i),d=[0,0,0],p=t.borders.length,_=[];for(a=0;a<p;a++)u=t.borders[a],h=this.meetSegmentSegment(u.point1.coords.usrCoords,u.point2.coords.usrCoords,e.point1.coords.usrCoords,e.point2.coords.usrCoords),(!n||h[2]>=0&&h[2]<1)&&h[1]>=0&&h[1]<1&&_.push(h[0]);return c>=0&&c<_.length&&(d=_[c]),new o.A(r.A.COORDS_BY_USER,d,s)},meetPlaneSphere:function(t,e){var i=function(){return t.normal[0]*e.center.X()+t.normal[1]*e.center.Y()+t.normal[2]*e.center.Z()-t.d};return[[function(){return e.center.X()-i()*t.normal[0]},function(){return e.center.Y()-i()*t.normal[1]},function(){return e.center.Z()-i()*t.normal[2]}],[()=>t.normal[0],()=>t.normal[1],()=>t.normal[2]],function(){var t=e.Radius(),s=i();return Math.sqrt(t*t-s*s)}]},meetSphereSphere:function(t,e){var i=function(){var i=t.center.distance(e.center),s=t.Radius(),r=e.Radius();return(s-r)*(s+r)/(i*i)};return[[function(){var s=i();return.5*((1-s)*t.center.X()+(1+s)*e.center.X())},function(){var s=i();return.5*((1-s)*t.center.Y()+(1+s)*e.center.Y())},function(){var s=i();return.5*((1-s)*t.center.Z()+(1+s)*e.center.Z())}],[()=>e.center.X()-t.center.X(),()=>e.center.Y()-t.center.Y(),()=>e.center.Z()-t.center.Z()],function(){var s=t.center.distance(e.center),r=t.Radius(),o=e.Radius(),n=i(),a=.5*(r*r+o*o-.5*s*s*(1+n*n));return Math.sqrt(a)}]},_bezierSplit:function(t){var e,i,s,r,o,n;return e=[.5*(t[0][0]+t[1][0]),.5*(t[0][1]+t[1][1])],i=[.5*(t[1][0]+t[2][0]),.5*(t[1][1]+t[2][1])],s=[.5*(t[2][0]+t[3][0]),.5*(t[2][1]+t[3][1])],n=[.5*((r=[.5*(e[0]+i[0]),.5*(e[1]+i[1])])[0]+(o=[.5*(i[0]+s[0]),.5*(i[1]+s[1])])[0]),.5*(r[1]+o[1])],[[t[0],e,r,n],[n,o,s,t[3]]]},_bezierBbox:function(t){var e=[];return 4===t.length?(e[0]=Math.min(t[0][0],t[1][0],t[2][0],t[3][0]),e[1]=Math.max(t[0][1],t[1][1],t[2][1],t[3][1]),e[2]=Math.max(t[0][0],t[1][0],t[2][0],t[3][0]),e[3]=Math.min(t[0][1],t[1][1],t[2][1],t[3][1])):(e[0]=Math.min(t[0][0],t[1][0]),e[1]=Math.max(t[0][1],t[1][1]),e[2]=Math.max(t[0][0],t[1][0]),e[3]=Math.min(t[0][1],t[1][1])),e},_bezierOverlap:function(t,e){return t[2]>=e[0]&&t[0]<=e[2]&&t[1]>=e[3]&&t[3]<=e[1]},_bezierListConcat:function(t,e,i,s){var r,o=l.A.exists(s),n=0,a=e.length,h=t.length;for(h>0&&a>0&&(1===t[h-1][1]&&0===e[0][1]||o&&1===t[h-1][2]&&0===e[0][2])&&(n=1),r=n;r<a;r++)o&&(e[r][2]*=.5,e[r][2]+=s),e[r][1]*=.5,e[r][1]+=i,t.push(e[r])},_bezierMeetSubdivision:function(t,e,i){var s,r,o,n,a,l,h,u,c,d,p,_,f=[];return r=this._bezierBbox(e),s=this._bezierBbox(t),this._bezierOverlap(r,s)?i<5?(l=(o=this._bezierSplit(t))[0],h=o[1],n=(o=this._bezierSplit(e))[0],a=o[1],this._bezierListConcat(f,this._bezierMeetSubdivision(l,n,i+1),0,0),this._bezierListConcat(f,this._bezierMeetSubdivision(l,a,i+1),0,.5),this._bezierListConcat(f,this._bezierMeetSubdivision(h,n,i+1),.5,0),this._bezierListConcat(f,this._bezierMeetSubdivision(h,a,i+1),.5,.5),f):(p=[1].concat(t[0]),_=[1].concat(t[3]),c=[1].concat(e[0]),d=[1].concat(e[3]),(u=this.meetSegmentSegment(p,_,c,d))[1]>=0&&u[2]>=0&&u[1]<=1&&u[2]<=1?[u]:[]):[]},_bezierLineMeetSubdivision:function(t,e,i,s){var r,o,n,a,l,h,u,c,d,p,_=[];return r=this._bezierBbox(e),o=this._bezierBbox(t),s&&!this._bezierOverlap(o,r)?[]:i<5?(a=(n=this._bezierSplit(t))[0],l=n[1],this._bezierListConcat(_,this._bezierLineMeetSubdivision(a,e,i+1),0),this._bezierListConcat(_,this._bezierLineMeetSubdivision(l,e,i+1),.5),_):(d=[1].concat(t[0]),p=[1].concat(t[3]),u=[1].concat(e[0]),c=[1].concat(e[1]),(h=this.meetSegmentSegment(d,p,u,c))[1]>=0&&h[1]<=1&&(!s||h[2]>=0&&h[2]<=1)?[h]:[])},meetBeziersegmentBeziersegment:function(t,e,i){var s,r,o;for((s=4===t.length&&4===e.length?this._bezierMeetSubdivision(t,e,0):this._bezierLineMeetSubdivision(t,e,0,i)).sort((function(t,e){return 1e7*(t[1]-e[1])+(t[2]-e[2])})),r=[],o=0;o<s.length;o++)0!==o&&s[o][1]===s[o-1][1]&&s[o][2]===s[o-1][2]||r.push(s[o]);return r},meetBezierCurveRedBlueSegments:function(t,e,i){var s,o,a,h,u,c,d,p,_,f,A,g,m,y=l.A.evaluate(i),b=0,v=0,C=[];if(e.numberPoints<e.bezierDegree+1||t.numberPoints<t.bezierDegree+1)return[0,NaN,NaN];for(1===t.bezierDegree&&3===e.bezierDegree&&(c=t,t=e,e=c),g=e.numberPoints-e.bezierDegree,m=t.numberPoints-t.bezierDegree,t.type===r.A.OBJECT_TYPE_SECTOR&&(b=3,m-=3),e.type===r.A.OBJECT_TYPE_SECTOR&&(v=3,g-=3),o=b;o<m;o+=t.bezierDegree)for(d=[(s=t.points)[o].usrCoords.slice(1),s[o+1].usrCoords.slice(1)],3===t.bezierDegree&&(d[2]=s[o+2].usrCoords.slice(1),d[3]=s[o+3].usrCoords.slice(1)),_=this._bezierBbox(d),a=v;a<g;a+=e.bezierDegree)if(p=[(s=e.points)[a].usrCoords.slice(1),s[a+1].usrCoords.slice(1)],3===e.bezierDegree&&(p[2]=s[a+2].usrCoords.slice(1),p[3]=s[a+3].usrCoords.slice(1)),f=this._bezierBbox(p),this._bezierOverlap(_,f)){if(0===(A=this.meetBeziersegmentBeziersegment(d,p)).length)continue;for(h=0;h<A.length;h++)(u=A[h])[1]<-n.A.eps||u[1]>1+n.A.eps||u[2]<-n.A.eps||u[2]>1+n.A.eps||C.push(u);if(C.length>y)return C[y][0]}return C.length>y?C[y][0]:[0,NaN,NaN]},bezierSegmentEval:function(t,e){var i,s,r,o=1-t;return s=0,r=0,s+=(i=o*o*o)*e[0][0],r+=i*e[0][1],s+=(i=3*t*o*o)*e[1][0],r+=i*e[1][1],s+=(i=3*t*t*o)*e[2][0],r+=i*e[2][1],[1,s+=(i=t*t*t)*e[3][0],r+=i*e[3][1]]},bezierArc:function(t,e,i,s,r){var o,a,h,u,c,d,p,_,f,A,g,m,y,b,v,C,P,x,E=e[1],O=e[2],M=e[0],S=[],w=[];for(c=this.distance(e,t),E/=M,O/=M,d=this.rad(t.slice(1),e.slice(1),i.slice(1)),-1===r&&(d=2*Math.PI-d),_=d/4,(o=t)[1]/=o[0],o[2]/=o[0],o[0]/=o[0],u=o.slice(0),s?(S=[E,E+.333*(o[1]-E),E+.666*(o[1]-E),o[1]],w=[O,O+.333*(o[2]-O),O+.666*(o[2]-O),o[2]]):(S=[o[1]],w=[o[2]]);d>n.A.eps;)d>_?(p=_,d-=_):(p=d,d=0),x=[[1,0,0],[E*(1-(f=Math.cos(r*p)))+O*(A=Math.sin(r*p)),f,-A],[O*(1-f)-E*A,A,f]],u=[(C=n.A.matVecMult(x,o))[0]/C[0],C[1]/C[0],C[2]/C[0]],g=o[1]-E,m=o[2]-O,y=u[1]-E,b=u[2]-O,P=n.A.hypot(g+y,m+b),v=Math.abs(b-m)>n.A.eps?(g+y)*(c/P-.5)/(b-m)*8/3:(m+b)*(c/P-.5)/(g-y)*8/3,a=[1,o[1]-v*m,o[2]+v*g],h=[1,u[1]+v*b,u[2]-v*y],l.A.concat(S,[a[1],h[1],u[1]]),l.A.concat(w,[a[2],h[2],u[2]]),o=u.slice(0);return s&&(l.A.concat(S,[u[1]+.333*(E-u[1]),u[1]+.666*(E-u[1]),E]),l.A.concat(w,[u[2]+.333*(O-u[2]),u[2]+.666*(O-u[2]),O])),[S,w]},projectPointToCircle:function(t,e,i){var s,a,h,u,c,d=e.center.coords.usrCoords;return l.A.exists(i)||(i=t.board),l.A.isPoint(t)?(s=t.coords.distance(r.A.COORDS_BY_USER,e.center.coords),a=t.coords.usrCoords):(s=t.distance(r.A.COORDS_BY_USER,e.center.coords),a=t.usrCoords),Math.abs(s)<n.A.eps&&(s=n.A.eps),c=e.Radius()/s,h=d[1]+c*(a[1]-d[1]),u=d[2]+c*(a[2]-d[2]),new o.A(r.A.COORDS_BY_USER,[h,u],i)},projectPointToLine:function(t,e,i){var s,a=[0,e.stdform[1],e.stdform[2]];return l.A.exists(i)||(i=l.A.exists(t.coords)?t.board:e.board),s=l.A.exists(t.coords)?t.coords.usrCoords:t.usrCoords,a=n.A.crossProduct(a,s),new o.A(r.A.COORDS_BY_USER,n.A.crossProduct(a,e.stdform),i)},projectCoordsToSegment:function(t,e,i){var s,r=[i[1]-e[1],i[2]-e[2]],o=[t[1]-e[1],t[2]-e[2]];return Math.abs(r[0])<n.A.eps&&Math.abs(r[1])<n.A.eps?[e,0]:(s=n.A.innerProduct(o,r),[[1,(s/=n.A.innerProduct(r,r))*r[0]+e[1],s*r[1]+e[2]],s])},projectCoordsToBeziersegment:function(t,e,i){var r;return r=s.A.Math.Numerics.fminbr((function(s){var r=[1,e.X(i+s),e.Y(i+s)];return r[1]-=t[1],r[2]-=t[2],r[1]*r[1]+r[2]*r[2]}),[0,1]),[[1,e.X(r+i),e.Y(r+i)],r]},projectPointToCurve:function(t,e,i){l.A.exists(i)||(i=t.board);var s=t.X(),r=t.Y(),o=t.position;return l.A.exists(o)||(o="functiongraph"===l.A.evaluate(e.visProp.curvetype)?s:0),this.projectCoordsToCurve(s,r,o,e,i)},projectCoordsToCurve:function(t,e,i,s,n){var h,u,c,d,p,_,f,A,g,m,y,b,v,C,P,x,E,O,M,S,w,T,N=Number.POSITIVE_INFINITY;if(l.A.exists(n)||(n=s.board),"plot"===l.A.evaluate(s.visProp.curvetype)){if(i=0,p=N,h=0===s.numberPoints?[0,1,1]:[s.Z(0),s.X(0),s.Y(0)],s.numberPoints>1)for(A=[1,t,e],3===s.bezierDegree?d=0:y=[s.Z(0),s.X(0),s.Y(0)],c=0;c<s.numberPoints-1;c++)3===s.bezierDegree?v=this.projectCoordsToBeziersegment(A,s,d):(b=[s.Z(c+1),s.X(c+1),s.Y(c+1)],v=this.projectCoordsToSegment(A,y,b)),f=v[1],g=v[0],0<=f&&f<=1?(_=this.distance(g,A),m=c+f):f<0?(g=y,_=this.distance(y,A),m=c):f>1&&c===s.numberPoints-2&&(g=b,_=this.distance(g,A),m=s.numberPoints-1),_<p&&(p=_,i=m,h=g),3===s.bezierDegree?(d++,c+=2):y=b;u=new o.A(r.A.COORDS_BY_USER,h,n)}else{if("functiongraph"===l.A.evaluate(s.visProp.curvetype)){let i=Math.abs(e-s.Y(t));isNaN(i)?(w=s.minX(),T=s.maxX()):(w=t-i,T=t+i)}else w=s.minX(),T=s.maxX();for(C=function(i){var r,o;return i<s.minX()||i>s.maxX()?1/0:(r=t-s.X(i))*r+(o=e-s.Y(i))*o},E=C(i),O=(T-w)/50,P=w,c=0;c<50;c++)((x=C(P))<E||E===1/0||isNaN(E))&&(i=P,E=x),P+=O;for(M=O,c=0;c<20&&isNaN(C(i-M));c++,M*=.5);for(isNaN(C(i-M))&&(M=0),S=O,c=0;c<20&&isNaN(C(i+S));c++,S*=.5);isNaN(C(i+S))&&(S=0),i=(i=(i=a.A.fminbr(C,[Math.max(i-M,w),Math.min(i+S,T)]))<w?w:i)>T?T:i,u=new o.A(r.A.COORDS_BY_USER,[s.X(i),s.Y(i)],n)}return[s.updateTransform(u),i]},projectCoordsToPolygon:function(t,e){var i,r,o,n,a,l=e.vertices.length,h=1/0;for(i=0;i<l-1;i++)0<=(o=s.A.Math.Geometry.projectCoordsToSegment(t,e.vertices[i].coords.usrCoords,e.vertices[i+1].coords.usrCoords))[1]&&o[1]<=1?(r=s.A.Math.Geometry.distance(o[0],t,3),n=o[0]):o[1]<0?(r=s.A.Math.Geometry.distance(e.vertices[i].coords.usrCoords,t,3),n=e.vertices[i].coords.usrCoords):(r=s.A.Math.Geometry.distance(e.vertices[i+1].coords.usrCoords,t,3),n=e.vertices[i+1].coords.usrCoords),r<h&&(a=n.slice(0),h=r);return a},projectPointToTurtle:function(t,e,i){var s,n,a,h,u,c,d,p,_,f,A=0,g=0,m=Number.POSITIVE_INFINITY,y=e.objects.length;for(l.A.exists(i)||(i=t.board),u=0;u<y;u++)(d=e.objects[u]).elementClass===r.A.OBJECT_CLASS_CURVE&&(s=(_=this.projectPointToCurve(t,d))[0],f=_[1],(c=this.distance(s.usrCoords,t.coords.usrCoords))<m&&(a=s.usrCoords[1],h=s.usrCoords[2],n=f,m=c,p=d,g=A),A+=d.numberPoints);return s=new o.A(r.A.COORDS_BY_USER,[a,h],i),[p.updateTransform(s),n+g]},projectPointToPoint:function(t,e){return e.coords},projectPointToBoard:function(t,e){var i,s,r,o=e||t.board,a=[[1,1,0,0,3,0,1],[-1,2,1,0,1,2,1],[-1,1,2,2,1,2,3],[1,2,3,0,3,2,3]],l=t.coords||t,h=o.getBoundingBox();for(i=0;i<4;i++)(r=a[i])[0]*l.usrCoords[r[1]]<r[0]*h[r[2]]&&((s=n.A.crossProduct([1,h[r[3]],h[r[4]]],[1,h[r[5]],h[r[6]]]))[3]=0,s=n.A.normalize(s),l=this.projectPointToLine({coords:l},{stdform:s},o));return l},projectCoordsToParametric:function(t,e,i){var s,r,o,a=i.length;return 1===a?s=.1*(e.range[1]-e.range[0]):2===a&&(s=.1*Math.min(e.range_u[1]-e.range_u[0],e.range_v[1]-e.range_v[0])),r=s/5e6,o=function(i,s,r,o){var n=t[0]-e.X.apply(null,r),a=t[1]-e.Y.apply(null,r),l=t[2]-e.Z.apply(null,r);return 1===i?(o[0]=r[0]-e.range[0],o[1]=-r[0]+e.range[1]):2===i&&(o[0]=r[0]-e.range_u[0],o[1]=-r[0]+e.range_u[1],o[2]=r[1]-e.range_v[0],o[3]=-r[1]+e.range_v[1]),n*n+a*a+l*l},n.A.Nlp.FindMinimum(o,a,2*a,i,s,r,0,200),[1,e.X.apply(null,i),e.Y.apply(null,i),e.Z.apply(null,i)]},projectScreenCoordsToParametric:function(t,e,i){var s,r,o,a=i.length;return 1===a?s=.1*(e.range[1]-e.range[0]):2===a&&(s=.1*Math.min(e.range_u[1]-e.range_u[0],e.range_v[1]-e.range_v[0])),r=s/5e6,o=function(i,s,r,o){var n=[1,e.X.apply(null,r),e.Y.apply(null,r),e.Z.apply(null,r)],a=e.view.project3DTo2D(n),l=t[0]-a[1],h=t[1]-a[2];return 1===i?(o[0]=r[0]-e.range[0],o[1]=-r[0]+e.range[1]):2===i&&(o[0]=r[0]-e.range_u[0],o[1]=-r[0]+e.range_u[1],o[2]=r[1]-e.range_v[0],o[3]=-r[1]+e.range_v[1]),l*l+h*h},n.A.Nlp.FindMinimum(o,a,2*a,i,s,r,0,200),[1,e.X.apply(null,i),e.Y.apply(null,i),e.Z.apply(null,i)]},distPointLine:function(t,e){var i,s=e[1],r=e[2],o=e[0];return Math.abs(s)+Math.abs(r)<n.A.eps?Number.POSITIVE_INFINITY:(i=s*t[1]+r*t[2]+o,s*=s,r*=r,Math.abs(i)/Math.sqrt(s+r))},distPointSegment:function(t,e,i){var s,r,o,a,l,h,u=n.A.eps*n.A.eps,c=1e6;return s=(s=t[1]-e[1])===1/0?c:s===-1/0?-c:s,r=(r=t[2]-e[2])===1/0?c:r===-1/0?-c:r,(l=(o=(o=i[1]-e[1])===1/0?c:o===-1/0?-c:o)*o+(a=(a=i[2]-e[2])===1/0?c:a===-1/0?-c:a)*a)>u&&((h=(s*o+r*a)/l)<0?h=0:h>1&&(h=1),s-=h*o,r-=h*a),n.A.hypot(s,r)},reuleauxPolygon:function(t,e){var i,s=2*Math.PI,r=s/e,o=(e-1)/2,a=0,l=function(l,h){return function(u,c){var d=(u%s+s)%s,p=Math.floor(d/r)%e;return c||(a=t[0].Dist(t[o]),i=n.A.Geometry.rad([t[0].X()+1,t[0].Y()],t[0],t[o%e])),isNaN(p)?p:(d=.5*d+p*r*.5+i,t[p][l]()+a*Math[h](d))}};return[l("X","cos"),l("Y","sin"),0,s]},meet3Planes:function(t,e,i,s,r,o){var a,l,h,u,c,d=[0,0,0];for(a=n.A.crossProduct(r,t),l=n.A.crossProduct(t,i),h=n.A.crossProduct(i,r),u=n.A.innerProduct(t,h,3),c=0;c<3;c++)d[c]=(e*h[c]+s*a[c]+o*l[c])/u;return d},meetPlanePlane:function(t,e,i,s){var r,o,a,h=[0,0,0],u=[0,0,0];for(r=0;r<3;r++)h[r]=l.A.evaluate(t[r]),u[r]=l.A.evaluate(e[r]);for(o=n.A.crossProduct(h,u),r=0;r<3;r++)h[r]=l.A.evaluate(i[r]),u[r]=l.A.evaluate(s[r]);return a=n.A.crossProduct(h,u),n.A.crossProduct(o,a)},project3DTo3DPlane:function(t,e,i){var s,r;return i=i||[0,0,0],s=n.A.norm(e),r=(n.A.innerProduct(t,e,3)-n.A.innerProduct(i,e,3))/s,n.A.axpy(-r,e,t)},getPlaneBounds:function(t,e,i,s,r){var o,n,l,h,u;return t[2]+e[0]!==0?(l=[[t[0],e[0]],[t[1],e[1]]],h=[s-i[0],s-i[1]],o=(u=a.A.Gauss(l,h))[0],n=u[1],h=[r-i[0],r-i[1]],[o,(u=a.A.Gauss(l,h))[0],n,u[1]]):null}}),e.A=n.A.Geometry},733:function(t,e,i){var s=i(443),r=i(477),o=i(188);s.A.Math.DoubleBits=function(){var t,e,i,s,r,o,n,a,l=new Float64Array(1),h=new Uint32Array(l.buffer);void 0!==Float64Array&&(l[0]=1,1072693248===h[1]?(t=function(t){return l[0]=t,[h[0],h[1]]},e=function(t,e){return h[0]=t,h[1]=e,l[0]},i=function(t){return l[0]=t,h[0]},s=function(t){return l[0]=t,h[1]},this.doubleBits=t,this.pack=e,this.lo=i,this.hi=s):1072693248===h[0]&&(r=function(t){return l[0]=t,[h[1],h[0]]},o=function(t,e){return h[1]=t,h[0]=e,l[0]},n=function(t){return l[0]=t,h[1]},a=function(t){return l[0]=t,h[0]},this.doubleBits=r,this.pack=o,this.lo=n,this.hi=a))},s.A.extend(s.A.Math.DoubleBits.prototype,{sign:function(t){return this.hi(t)>>>31},exponent:function(t){return(this.hi(t)<<1>>>21)-1023},fraction:function(t){var e=this.lo(t),i=this.hi(t),s=1048575&i;return 2146435072&i&&(s+=1<<20),[e,s]},denormalized:function(t){return!(2146435072&this.hi(t))}});var n=new s.A.Math.DoubleBits,a=function(t,e){if(void 0!==t&&void 0!==e){if(r.A.IntervalArithmetic.isInterval(t)){if(!r.A.IntervalArithmetic.isSingleton(t))throw new TypeError("JXG.Math.IntervalArithmetic: interval `lo` must be a singleton");this.lo=t.lo}else this.lo=t;if(r.A.IntervalArithmetic.isInterval(e)){if(!r.A.IntervalArithmetic.isSingleton(e))throw new TypeError("JXG.Math.IntervalArithmetic: interval `hi` must be a singleton");this.hi=e.hi}else this.hi=e}else{if(void 0!==t)return Array.isArray(t)?new a(t[0],t[1]):new a(t,t);this.lo=this.hi=0}};s.A.extend(a.prototype,{print:function(){console.log("[",this.lo,this.hi,"]")},set:function(t,e){return this.lo=t,this.hi=e,this},bounded:function(t,e){return this.set(r.A.IntervalArithmetic.prev(t),r.A.IntervalArithmetic.next(e))},boundedSingleton:function(t){return this.bounded(t,t)},assign:function(t,e){if("number"!=typeof t||"number"!=typeof e)throw new TypeError("JXG.Math.Interval#assign: arguments must be numbers");return isNaN(t)||isNaN(e)||t>e?this.setEmpty():this.set(t,e)},setEmpty:function(){return this.set(Number.POSITIVE_INFINITY,Number.NEGATIVE_INFINITY)},setWhole:function(){return this.set(Number.NEGATIVE_INFINITY,Number.POSITIVE_INFINITY)},open:function(t,e){return this.assign(r.A.IntervalArithmetic.next(t),r.A.IntervalArithmetic.prev(e))},halfOpenLeft:function(t,e){return this.assign(r.A.IntervalArithmetic.next(t),e)},halfOpenRight:function(t,e){return this.assign(t,r.A.IntervalArithmetic.prev(e))},toArray:function(){return[this.lo,this.hi]},clone:function(){return(new a).set(this.lo,this.hi)}}),s.A.Math.IntervalArithmetic={Interval:function(t,e){return new a(t,e)},isInterval:function(t){return null!==t&&"object"==typeof t&&"number"==typeof t.lo&&"number"==typeof t.hi},isSingleton:function(t){return t.lo===t.hi},add:function(t,e){return o.A.isNumber(t)&&(t=this.Interval(t)),o.A.isNumber(e)&&(e=this.Interval(e)),new a(this.addLo(t.lo,e.lo),this.addHi(t.hi,e.hi))},sub:function(t,e){return o.A.isNumber(t)&&(t=this.Interval(t)),o.A.isNumber(e)&&(e=this.Interval(e)),new a(this.subLo(t.lo,e.hi),this.subHi(t.hi,e.lo))},mul:function(t,e){var i,s,r,n,l;return o.A.isNumber(t)&&(t=this.Interval(t)),o.A.isNumber(e)&&(e=this.Interval(e)),this.isEmpty(t)||this.isEmpty(e)?this.EMPTY.clone():(i=t.lo,s=t.hi,r=e.lo,n=e.hi,l=new a,i<0?s>0?r<0?n>0?(l.lo=Math.min(this.mulLo(i,n),this.mulLo(s,r)),l.hi=Math.max(this.mulHi(i,r),this.mulHi(s,n))):(l.lo=this.mulLo(s,r),l.hi=this.mulHi(i,r)):n>0?(l.lo=this.mulLo(i,n),l.hi=this.mulHi(s,n)):(l.lo=0,l.hi=0):r<0?n>0?(l.lo=this.mulLo(i,n),l.hi=this.mulHi(i,r)):(l.lo=this.mulLo(s,n),l.hi=this.mulHi(i,r)):n>0?(l.lo=this.mulLo(i,n),l.hi=this.mulHi(s,r)):(l.lo=0,l.hi=0):s>0?r<0?n>0?(l.lo=this.mulLo(s,r),l.hi=this.mulHi(s,n)):(l.lo=this.mulLo(s,r),l.hi=this.mulHi(i,n)):n>0?(l.lo=this.mulLo(i,r),l.hi=this.mulHi(s,n)):(l.lo=0,l.hi=0):(l.lo=0,l.hi=0),l)},div:function(t,e){return o.A.isNumber(t)&&(t=this.Interval(t)),o.A.isNumber(e)&&(e=this.Interval(e)),this.isEmpty(t)||this.isEmpty(e)?this.EMPTY.clone():this.zeroIn(e)?0!==e.lo?0!==e.hi?this.divZero(t):this.divNegative(t,e.lo):0!==e.hi?this.divPositive(t,e.hi):this.EMPTY.clone():this.divNonZero(t,e)},positive:function(t){return new a(t.lo,t.hi)},negative:function(t){return o.A.isNumber(t)?new a(-t):new a(-t.hi,-t.lo)},isEmpty:function(t){return t.lo>t.hi},isWhole:function(t){return t.lo===-1/0&&t.hi===1/0},zeroIn:function(t){return this.hasValue(t,0)},hasValue:function(t,e){return!this.isEmpty(t)&&(t.lo<=e&&e<=t.hi)},hasInterval:function(t,e){return!!this.isEmpty(t)||!this.isEmpty(e)&&e.lo<=t.lo&&t.hi<=e.hi},intervalsOverlap:function(t,e){return!this.isEmpty(t)&&!this.isEmpty(e)&&(t.lo<=e.lo&&e.lo<=t.hi||e.lo<=t.lo&&t.lo<=e.hi)},divNonZero:function(t,e){var i=t.lo,s=t.hi,r=e.lo,o=e.hi,n=new a;return s<0?o<0?(n.lo=this.divLo(s,r),n.hi=this.divHi(i,o)):(n.lo=this.divLo(i,r),n.hi=this.divHi(s,o)):i<0?o<0?(n.lo=this.divLo(s,o),n.hi=this.divHi(i,o)):(n.lo=this.divLo(i,r),n.hi=this.divHi(s,r)):o<0?(n.lo=this.divLo(s,o),n.hi=this.divHi(i,r)):(n.lo=this.divLo(i,o),n.hi=this.divHi(s,r)),n},divPositive:function(t,e){return 0===t.lo&&0===t.hi?t:this.zeroIn(t)?this.WHOLE:t.hi<0?new a(Number.NEGATIVE_INFINITY,this.divHi(t.hi,e)):new a(this.divLo(t.lo,e),Number.POSITIVE_INFINITY)},divNegative:function(t,e){return 0===t.lo&&0===t.hi?t:this.zeroIn(t)?this.WHOLE:t.hi<0?new a(this.divLo(t.hi,e),Number.POSITIVE_INFINITY):new a(Number.NEGATIVE_INFINITY,this.divHi(t.lo,e))},divZero:function(t){return 0===t.lo&&0===t.hi?t:this.WHOLE},fmod:function(t,e){var i,s;return o.A.isNumber(t)&&(t=this.Interval(t)),o.A.isNumber(e)&&(e=this.Interval(e)),this.isEmpty(t)||this.isEmpty(e)?this.EMPTY.clone():(i=t.lo<0?e.lo:e.hi,s=(s=t.lo/i)<0?Math.ceil(s):Math.floor(s),this.sub(t,this.mul(e,new a(s))))},multiplicativeInverse:function(t){return o.A.isNumber(t)&&(t=this.Interval(t)),this.isEmpty(t)?this.EMPTY.clone():this.zeroIn(t)?0!==t.lo?0!==t.hi?this.WHOLE:new a(Number.NEGATIVE_INFINITY,this.divHi(1,t.lo)):0!==t.hi?new a(this.divLo(1,t.hi),Number.POSITIVE_INFINITY):this.EMPTY.clone():new a(this.divLo(1,t.hi),this.divHi(1,t.lo))},pow:function(t,e){var i,s;if(o.A.isNumber(t)&&(t=this.Interval(t)),this.isEmpty(t))return this.EMPTY.clone();if(this.isInterval(e)){if(!this.isSingleton(e))return this.EMPTY.clone();e=e.lo}return 0===e?0===t.lo&&0===t.hi?this.EMPTY.clone():this.ONE.clone():e<0?this.pow(this.multiplicativeInverse(t),-e):e%1==0?t.hi<0?(i=this.powLo(-t.hi,e),s=this.powHi(-t.lo,e),1&~e?new a(i,s):new a(-s,-i)):t.lo<0?1&~e?new a(0,this.powHi(Math.max(-t.lo,t.hi),e)):new a(-this.powLo(-t.lo,e),this.powHi(t.hi,e)):new a(this.powLo(t.lo,e),this.powHi(t.hi,e)):(console.warn("power is not an integer, you should use nth-root instead, returning an empty interval"),this.EMPTY.clone())},sqrt:function(t){return o.A.isNumber(t)&&(t=this.Interval(t)),this.nthRoot(t,2)},nthRoot:function(t,e){var i,s,r,n,l;if(o.A.isNumber(t)&&(t=this.Interval(t)),this.isEmpty(t)||e<0)return this.EMPTY.clone();if(this.isInterval(e)){if(!this.isSingleton(e))return this.EMPTY.clone();e=e.lo}return i=1/e,t.hi<0?e%1!=0||1&~e?this.EMPTY.clone():(s=this.powHi(-t.lo,i),r=this.powLo(-t.hi,i),new a(-s,-r)):t.lo<0?(n=this.powHi(t.hi,i),e%1!=0||1&~e?new a(0,n):(l=-this.powHi(-t.lo,i),new a(l,n))):new a(this.powLo(t.lo,i),this.powHi(t.hi,i))},exp:function(t){return o.A.isNumber(t)&&(t=this.Interval(t)),this.isEmpty(t)?this.EMPTY.clone():new a(this.expLo(t.lo),this.expHi(t.hi))},log:function(t){var e;return o.A.isNumber(t)&&(t=this.Interval(t)),this.isEmpty(t)?this.EMPTY.clone():(e=t.lo<=0?Number.NEGATIVE_INFINITY:this.logLo(t.lo),new a(e,this.logHi(t.hi)))},ln:function(t){return this.log(t)},log10:function(t){return this.isEmpty(t)?this.EMPTY.clone():this.div(this.log(t),this.log(new a(10,10)))},log2:function(t){return this.isEmpty(t)?this.EMPTY.clone():this.div(this.log(t),this.log(new a(2,2)))},hull:function(t,e){var i=this.isEmpty(t),s=this.isEmpty(e);return i&&s?this.EMPTY.clone():i?e.clone():s?t.clone():new a(Math.min(t.lo,e.lo),Math.max(t.hi,e.hi))},intersection:function(t,e){var i,s;return this.isEmpty(t)||this.isEmpty(e)?this.EMPTY.clone():(i=Math.max(t.lo,e.lo))<=(s=Math.min(t.hi,e.hi))?new a(i,s):this.EMPTY.clone()},union:function(t,e){if(!this.intervalsOverlap(t,e))throw new Error("Interval#unions do not overlap");return new a(Math.min(t.lo,e.lo),Math.max(t.hi,e.hi))},difference:function(t,e){if(this.isEmpty(t)||this.isWhole(e))return this.EMPTY.clone();if(this.intervalsOverlap(t,e)){if(t.lo<e.lo&&e.hi<t.hi)throw new Error("Interval.difference: difference creates multiple intervals");return e.lo<=t.lo&&e.hi===1/0||e.hi>=t.hi&&e.lo===-1/0?this.EMPTY.clone():e.lo<=t.lo?(new a).halfOpenLeft(e.hi,t.hi):(new a).halfOpenRight(t.lo,e.lo)}return t.clone()},width:function(t){return this.isEmpty(t)?0:this.subHi(t.hi,t.lo)},abs:function(t){return o.A.isNumber(t)&&(t=this.Interval(t)),this.isEmpty(t)?this.EMPTY.clone():t.lo>=0?t.clone():t.hi<=0?this.negative(t):new a(0,Math.max(-t.lo,t.hi))},max:function(t,e){var i=this.isEmpty(t),s=this.isEmpty(e);return i&&s?this.EMPTY.clone():i?e.clone():s?t.clone():new a(Math.max(t.lo,e.lo),Math.max(t.hi,e.hi))},min:function(t,e){var i=this.isEmpty(t),s=this.isEmpty(e);return i&&s?this.EMPTY.clone():i?e.clone():s?t.clone():new a(Math.min(t.lo,e.lo),Math.min(t.hi,e.hi))},onlyInfinity:function(t){return!isFinite(t.lo)&&t.lo===t.hi},_handleNegative:function(t){var e;return t.lo<0&&(t.lo===-1/0?(t.lo=0,t.hi=1/0):(e=Math.ceil(-t.lo/this.piTwiceLow),t.lo+=this.piTwiceLow*e,t.hi+=this.piTwiceLow*e)),t},cos:function(t){var e,i,s,r,o,n,l,h;return this.isEmpty(t)||this.onlyInfinity(t)?this.EMPTY.clone():(e=(new a).set(t.lo,t.hi),this._handleNegative(e),i=this.PI_TWICE,s=this.fmod(e,i),this.width(s)>=i.lo?new a(-1,1):s.lo>=this.piHigh?(r=this.cos(this.sub(s,this.PI)),this.negative(r)):(o=s.lo,n=s.hi,l=this.cosLo(n),h=this.cosHi(o),n<=this.piLow?new a(l,h):n<=i.lo?new a(-1,Math.max(l,h)):new a(-1,1)))},sin:function(t){return this.isEmpty(t)||this.onlyInfinity(t)?this.EMPTY.clone():this.cos(this.sub(t,this.PI_HALF))},tan:function(t){var e,i,s;return this.isEmpty(t)||this.onlyInfinity(t)?this.EMPTY.clone():(e=(new a).set(t.lo,t.hi),this._handleNegative(e),s=this.PI,(i=this.fmod(e,s)).lo>=this.piHalfLow&&(i=this.sub(i,s)),i.lo<=-this.piHalfLow||i.hi>=this.piHalfLow?this.WHOLE.clone():new a(this.tanLo(i.lo),this.tanHi(i.hi)))},asin:function(t){var e,i;return this.isEmpty(t)||t.hi<-1||t.lo>1?this.EMPTY.clone():(e=t.lo<=-1?-this.piHalfHigh:this.asinLo(t.lo),i=t.hi>=1?this.piHalfHigh:this.asinHi(t.hi),new a(e,i))},acos:function(t){var e,i;return this.isEmpty(t)||t.hi<-1||t.lo>1?this.EMPTY.clone():(e=t.hi>=1?0:this.acosLo(t.hi),i=t.lo<=-1?this.piHigh:this.acosHi(t.lo),new a(e,i))},acot:function(t){return this.isEmpty(t)?this.EMPTY.clone():new a(this.acotLo(t.lo),this.acotHi(t.hi))},atan:function(t){return this.isEmpty(t)?this.EMPTY.clone():new a(this.atanLo(t.lo),this.atanHi(t.hi))},sinh:function(t){return this.isEmpty(t)?this.EMPTY.clone():new a(this.sinhLo(t.lo),this.sinhHi(t.hi))},cosh:function(t){return this.isEmpty(t)?this.EMPTY.clone():t.hi<0?new a(this.coshLo(t.hi),this.coshHi(t.lo)):t.lo>=0?new a(this.coshLo(t.lo),this.coshHi(t.hi)):new a(1,this.coshHi(-t.lo>t.hi?t.lo:t.hi))},tanh:function(t){return this.isEmpty(t)?this.EMPTY.clone():new a(this.tanhLo(t.lo),this.tanhHi(t.hi))},equal:function(t,e){return this.isEmpty(t)?this.isEmpty(e):!this.isEmpty(e)&&t.lo===e.lo&&t.hi===e.hi},notEqual:function(t,e){return this.isEmpty(t)?!this.isEmpty(e):this.isEmpty(e)||t.hi<e.lo||t.lo>e.hi},lt:function(t,e){return o.A.isNumber(t)&&(t=this.Interval(t)),o.A.isNumber(e)&&(e=this.Interval(e)),!this.isEmpty(t)&&!this.isEmpty(e)&&t.hi<e.lo},gt:function(t,e){return o.A.isNumber(t)&&(t=this.Interval(t)),o.A.isNumber(e)&&(e=this.Interval(e)),!this.isEmpty(t)&&!this.isEmpty(e)&&t.lo>e.hi},leq:function(t,e){return o.A.isNumber(t)&&(t=this.Interval(t)),o.A.isNumber(e)&&(e=this.Interval(e)),!this.isEmpty(t)&&!this.isEmpty(e)&&t.hi<=e.lo},geq:function(t,e){return o.A.isNumber(t)&&(t=this.Interval(t)),o.A.isNumber(e)&&(e=this.Interval(e)),!this.isEmpty(t)&&!this.isEmpty(e)&&t.lo>=e.hi},piLow:3.141592653589793,piHigh:3.1415926535897936,piHalfLow:1.5707963267948966,piHalfHigh:1.5707963267948968,piTwiceLow:6.283185307179586,piTwiceHigh:6.283185307179587,identity:function(t){return t},_prev:function(t){return t===1/0?t:this.nextafter(t,-1/0)},_next:function(t){return t===-1/0?t:this.nextafter(t,1/0)},prev:function(t){return this._prev(t)},next:function(t){return this._next(t)},toInteger:function(t){return t<0?Math.ceil(t):Math.floor(t)},addLo:function(t,e){return this.prev(t+e)},addHi:function(t,e){return this.next(t+e)},subLo:function(t,e){return this.prev(t-e)},subHi:function(t,e){return this.next(t-e)},mulLo:function(t,e){return this.prev(t*e)},mulHi:function(t,e){return this.next(t*e)},divLo:function(t,e){return this.prev(t/e)},divHi:function(t,e){return this.next(t/e)},intLo:function(t){return this.toInteger(this.prev(t))},intHi:function(t){return this.toInteger(this.next(t))},logLo:function(t){return this.prev(Math.log(t))},logHi:function(t){return this.next(Math.log(t))},expLo:function(t){return this.prev(Math.exp(t))},expHi:function(t){return this.next(Math.exp(t))},sinLo:function(t){return this.prev(Math.sin(t))},sinHi:function(t){return this.next(Math.sin(t))},cosLo:function(t){return this.prev(Math.cos(t))},cosHi:function(t){return this.next(Math.cos(t))},tanLo:function(t){return this.prev(Math.tan(t))},tanHi:function(t){return this.next(Math.tan(t))},asinLo:function(t){return this.prev(Math.asin(t))},asinHi:function(t){return this.next(Math.asin(t))},acosLo:function(t){return this.prev(Math.acos(t))},acosHi:function(t){return this.next(Math.acos(t))},acotLo:function(t){return this.prev(r.A.acot(t))},acotHi:function(t){return this.next(r.A.acot(t))},atanLo:function(t){return this.prev(Math.atan(t))},atanHi:function(t){return this.next(Math.atan(t))},sinhLo:function(t){return this.prev(r.A.sinh(t))},sinhHi:function(t){return this.next(r.A.sinh(t))},coshLo:function(t){return this.prev(r.A.cosh(t))},coshHi:function(t){return this.next(r.A.cosh(t))},tanhLo:function(t){return this.prev(r.A.tanh(t))},tanhHi:function(t){return this.next(r.A.tanh(t))},sqrtLo:function(t){return this.prev(Math.sqrt(t))},sqrtHi:function(t){return this.next(Math.sqrt(t))},powLo:function(t,e){var i;if(e%1!=0)return this.prev(Math.pow(t,e));for(i=1&~e?1:t,e>>=1;e>0;)t=this.mulLo(t,t),1&~e||(i=this.mulLo(t,i)),e>>=1;return i},powHi:function(t,e){var i;if(e%1!=0)return this.next(Math.pow(t,e));for(i=1&~e?1:t,e>>=1;e>0;)t=this.mulHi(t,t),1&~e||(i=this.mulHi(t,i)),e>>=1;return i},disable:function(){this.next=this.prev=this.identity},enable:function(){this.prev=function(t){return this._prev(t)},this.next=function(t){return this._next(t)}},SMALLEST_DENORM:Math.pow(2,-1074),UINT_MAX:-1>>>0,nextafter:function(t,e){var i,s;return isNaN(t)||isNaN(e)?NaN:t===e?t:0===t?e<0?-this.SMALLEST_DENORM:this.SMALLEST_DENORM:(s=n.hi(t),i=n.lo(t),e>t==t>0?i===this.UINT_MAX?(s+=1,i=0):i+=1:0===i?(i=this.UINT_MAX,s-=1):i-=1,n.pack(i,s))}},s.A.Math.IntervalArithmetic.PI=new a(r.A.IntervalArithmetic.piLow,r.A.IntervalArithmetic.piHigh),s.A.Math.IntervalArithmetic.PI_HALF=new a(r.A.IntervalArithmetic.piHalfLow,r.A.IntervalArithmetic.piHalfHigh),s.A.Math.IntervalArithmetic.PI_TWICE=new a(r.A.IntervalArithmetic.piTwiceLow,r.A.IntervalArithmetic.piTwiceHigh),s.A.Math.IntervalArithmetic.ZERO=new a(0),s.A.Math.IntervalArithmetic.ONE=new a(1),s.A.Math.IntervalArithmetic.WHOLE=(new a).setWhole(),s.A.Math.IntervalArithmetic.EMPTY=(new a).setEmpty(),e.A=s.A.Math.IntervalArithmetic},477:function(t,e,i){var s,r=i(443),o=i(188),n=function(t){var e,i;return t.memo||(e={},i=Array.prototype.join,t.memo=function(){var r=i.call(arguments);return e[r]!==s?e[r]:e[r]=t.apply(this,arguments)}),t.memo};r.A.Math={eps:1e-6,relDif:function(t,e){var i=Math.abs(t),s=Math.abs(e);return 0===(s=Math.max(i,s))?0:Math.abs(t-e)/s},mod:function(t,e){return t-Math.floor(t/e)*e},wrap:function(t,e,i){return e+this.mod(t-e,i-e)},clamp:function(t,e,i){return Math.min(Math.max(t,e),i)},wrapAndClamp:function(t,e,i,s){var r=.5*(e+i),o=.5*s;return this.clamp(this.wrap(t,r-o,r+o),e,i)},vector:function(t,e){var i,s;for(e=e||0,i=[],s=0;s<t;s++)i[s]=e;return i},matrix:function(t,e,i){var s,r,o;for(i=i||0,e=e||t,s=[],r=0;r<t;r++)for(s[r]=[],o=0;o<e;o++)s[r][o]=i;return s},identity:function(t,e){var i,r;for(e===s&&"number"!=typeof e&&(e=t),i=this.matrix(t,e),r=0;r<Math.min(t,e);r++)i[r][r]=1;return i},frustum:function(t,e,i,s,r,o){var n=this.matrix(4,4);return n[0][0]=2*r/(e-t),n[0][1]=0,n[0][2]=(e+t)/(e-t),n[0][3]=0,n[1][0]=0,n[1][1]=2*r/(s-i),n[1][2]=(s+i)/(s-i),n[1][3]=0,n[2][0]=0,n[2][1]=0,n[2][2]=-(o+r)/(o-r),n[2][3]=-o*r*2/(o-r),n[3][0]=0,n[3][1]=0,n[3][2]=-1,n[3][3]=0,n},projection:function(t,e,i,s){var r=i*Math.tan(t/2),o=r*e;return this.frustum(-o,o,-r,r,i,s)},matVecMult:function(t,e){var i,s,r,o=t.length,n=e.length,a=[];if(3===n)for(i=0;i<o;i++)a[i]=t[i][0]*e[0]+t[i][1]*e[1]+t[i][2]*e[2];else for(i=0;i<o;i++){for(s=0,r=0;r<n;r++)s+=t[i][r]*e[r];a[i]=s}return a},matMatMult:function(t,e){var i,s,r,o,n=t.length,a=n>0?e[0].length:0,l=e.length,h=this.matrix(n,a);for(i=0;i<n;i++)for(s=0;s<a;s++){for(r=0,o=0;o<l;o++)r+=t[i][o]*e[o][s];h[i][s]=r}return h},transpose:function(t){var e,i,s,r,o;for(r=t.length,o=t.length>0?t[0].length:0,e=this.matrix(o,r),i=0;i<o;i++)for(s=0;s<r;s++)e[i][s]=t[s][i];return e},inverse:function(t){var e,i,s,r,o,n,a,l=t.length,h=[],u=[],c=[];for(e=0;e<l;e++){for(h[e]=[],i=0;i<l;i++)h[e][i]=t[e][i];u[e]=e}for(i=0;i<l;i++){for(o=Math.abs(h[i][i]),n=i,e=i+1;e<l;e++)Math.abs(h[e][i])>o&&(o=Math.abs(h[e][i]),n=e);if(o<=this.eps)return[];if(n>i){for(s=0;s<l;s++)a=h[i][s],h[i][s]=h[n][s],h[n][s]=a;a=u[i],u[i]=u[n],u[n]=a}for(r=1/h[i][i],e=0;e<l;e++)h[e][i]*=r;for(h[i][i]=r,s=0;s<l;s++)if(s!==i){for(e=0;e<l;e++)e!==i&&(h[e][s]-=h[e][i]*h[i][s]);h[i][s]=-r*h[i][s]}}for(e=0;e<l;e++){for(s=0;s<l;s++)c[u[s]]=h[e][s];for(s=0;s<l;s++)h[e][s]=c[s]}return h},innerProduct:function(t,e,i){var r,n=0;for(i!==s&&o.A.isNumber(i)||(i=t.length),r=0;r<i;r++)n+=t[r]*e[r];return n},crossProduct:function(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]},norm:function(t,e){var i,r=0;for(e!==s&&o.A.isNumber(e)||(e=t.length),i=0;i<e;i++)r+=t[i]*t[i];return Math.sqrt(r)},axpy:function(t,e,i){var s,r=e.length,o=[];for(s=0;s<r;s++)o[s]=t*e[s]+i[s];return o},factorial:n((function(t){return t<0?NaN:0===(t=Math.floor(t))||1===t?1:t*this.factorial(t-1)})),binomial:n((function(t,e){var i,s;if(e>t||e<0)return NaN;if(e=Math.round(e),t=Math.round(t),0===e||e===t)return 1;for(i=1,s=0;s<e;s++)i*=t-s,i/=s+1;return i})),cosh:Math.cosh||function(t){return.5*(Math.exp(t)+Math.exp(-t))},sinh:Math.sinh||function(t){return.5*(Math.exp(t)-Math.exp(-t))},acosh:Math.acosh||function(t){return Math.log(t+Math.sqrt(t*t-1))},asinh:Math.asinh||function(t){return t===-1/0?t:Math.log(t+Math.sqrt(t*t+1))},cot:function(t){return 1/Math.tan(t)},acot:function(t){return(t>=0?.5:-.5)*Math.PI-Math.atan(t)},nthroot:function(t,e){var i=1/e;return e<=0||Math.floor(e)!==e?NaN:0===t?0:t>0?Math.exp(i*Math.log(t)):e%2==1?-Math.exp(i*Math.log(-t)):NaN},cbrt:Math.cbrt||function(t){return this.nthroot(t,3)},pow:function(t,e){return 0===t?0===e?1:0:Math.floor(e)===e?Math.pow(t,e):t>0?Math.exp(e*Math.log(t)):NaN},ratpow:function(t,e,i){var s;return 0===e?1:0===i?NaN:(s=this.gcd(e,i),this.nthroot(this.pow(t,e/s),i/s))},log10:function(t){return Math.log(t)/Math.log(10)},log2:function(t){return Math.log(t)/Math.log(2)},log:function(t,e){return void 0!==e&&o.A.isNumber(e)?Math.log(t)/Math.log(e):Math.log(t)},sign:Math.sign||function(t){return 0===(t=+t)||isNaN(t)?t:t>0?1:-1},squampow:function(t,e){var i;if(Math.floor(e)===e){for(i=1,e<0&&(t=1/t,e*=-1);0!==e;)1&e&&(i*=t),e>>=1,t*=t;return i}return this.pow(t,e)},gcd:function(t,e){var i;if(t=Math.abs(t),e=Math.abs(e),!o.A.isNumber(t)||!o.A.isNumber(e))return NaN;for(e>t&&(i=t,t=e,e=i);;){if(0===(t%=e))return e;if(0===(e%=t))return t}},lcm:function(t,e){var i;return o.A.isNumber(t)&&o.A.isNumber(e)?0!==(i=t*e)?i/this.gcd(t,e):0:NaN},roundToStep:function(t,e,i,s){var n,a,l=t;if(!o.A.exists(e)&&!o.A.exists(i)&&!o.A.exists(s))return l;if(r.A.exists(s)&&(l=Math.min(l,s)),r.A.exists(i)&&(l=Math.max(l,i)),a=i||0,r.A.exists(e)){if(n=(l-a)/e,Number.isInteger(n))return l;l=a+(n=Math.round(n))*e}return r.A.exists(s)&&(l=Math.min(l,s)),r.A.exists(i)&&(l=Math.max(l,i)),l},erf:function(t){return this.ProbFuncs.erf(t)},erfc:function(t){return this.ProbFuncs.erfc(t)},erfi:function(t){return this.ProbFuncs.erfi(t)},ndtr:function(t){return this.ProbFuncs.ndtr(t)},ndtri:function(t){return this.ProbFuncs.ndtri(t)},hypot:function(){var t,e,i,s;for(e=arguments.length,t=0,s=0;t<e;t++)s+=(i=arguments[t])*i;return Math.sqrt(s)},hstep:function(t){return t>0?1:t<0?0:.5},gamma:function(t){var e,i,s,r,o,n=[1,676.5203681218851,-1259.1392167224028,771.3234287776531,-176.6150291621406,12.507343278686905,-.13857109526572012,9984369578019572e-21,1.5056327351493116e-7];if(t<.5)i=Math.PI/(Math.sin(Math.PI*t)*this.gamma(1-t));else{for(t-=1,e=n[0],o=n.length,r=1;r<o;r++)e+=n[r]/(t+r);s=t+7+.5,i=Math.sqrt(2*Math.PI)*Math.pow(s,t+.5)*Math.exp(-s)*e}return i},lt:function(t,e){return t<e},leq:function(t,e){return t<=e},gt:function(t,e){return t>e},geq:function(t,e){return t>=e},eq:function(t,e){return t===e},neq:function(t,e){return t!==e},and:function(t,e){return t&&e},not:function(t){return!t},or:function(t,e){return t||e},xor:function(t,e){return(t||e)&&!(t&&e)},decToFraction:function(t,e){var i,s,r,n,a,l,h,u,c,d=0;for(e=o.A.def(e,.001),s=(t=1e-12*Math.round(1e12*t))<0?-1:1,t=Math.abs(t),i=Math.floor(t),t-=Math.floor(t),l=1,n=a=r=0,c=0,h=u=1;t-Math.floor(t)>e&&d<20;)t=1/(t-r),n=l+(r=Math.floor(t))*a,h=c+r*u,l=a,c=u,a=n,u=h,d++;return[s,i,n,h]},normalize:function(t){var e,i,s=2*t[3],r=t[4]/s;return t[5]=r,t[6]=-t[1]/s,t[7]=-t[2]/s,isFinite(r)?Math.abs(r)>=1?(t[0]=(t[6]*t[6]+t[7]*t[7]-r*r)/(2*r),t[1]=-t[6]/r,t[2]=-t[7]/r,t[3]=1/(2*r),t[4]=1):(i=r<=0?-1:1,t[0]=i*(t[6]*t[6]+t[7]*t[7]-r*r)*.5,t[1]=-i*t[6],t[2]=-i*t[7],t[3]=i/2,t[4]=i*r):(e=this.hypot(t[1],t[2]),t[0]/=e,t[1]/=e,t[2]/=e,t[3]=0,t[4]=1),t},toGL:function(t){var e,i,s;if(e="function"==typeof Float32Array?new Float32Array(16):new Array(16),4!==t.length&&4!==t[0].length)return e;for(i=0;i<4;i++)for(s=0;s<4;s++)e[i+4*s]=t[i][s];return e},Vieta:function(t){var e,i,s,r=t.length,o=[];for(o=t.slice(),e=1;e<r;++e){for(s=o[e],o[e]*=o[e-1],i=e-1;i>=1;--i)o[i]+=o[i-1]*s;o[0]+=s}return o}},e.A=r.A.Math},171:function(t,e,i){var s=i(443),r=i(188),o=i(133),n=i(477),a={rk4:{s:4,A:[[0,0,0,0],[.5,0,0,0],[0,.5,0,0],[0,0,1,0]],b:[1/6,1/3,1/3,1/6],c:[0,.5,.5,1]},heun:{s:2,A:[[0,0],[1,0]],b:[.5,.5],c:[0,1]},euler:{s:1,A:[[0]],b:[1],c:[0]}};n.A.Numerics={Gauss:function(t,e){var i,s,o,a,l,h=n.A.eps,u=t.length>0?t[0].length:0;if(u!==e.length||u!==t.length)throw new Error("JXG.Math.Numerics.Gauss: Dimensions don't match. A must be a square matrix and b must be of the same length as A.");for(a=[],l=e.slice(0,u),i=0;i<u;i++)a[i]=t[i].slice(0,u);for(s=0;s<u;s++){for(i=u-1;i>s;i--)if(Math.abs(a[i][s])>h)if(Math.abs(a[s][s])<h)r.A.swap(a,i,s),r.A.swap(l,i,s);else for(a[i][s]/=a[s][s],l[i]-=a[i][s]*l[s],o=s+1;o<u;o++)a[i][o]-=a[i][s]*a[s][o];if(Math.abs(a[s][s])<h)throw new Error("JXG.Math.Numerics.Gauss(): The given matrix seems to be singular.")}return this.backwardSolve(a,l,!0),l},backwardSolve:function(t,e,i){var s,r,o,n,a;for(s=i?e:e.slice(0,e.length),r=t.length,o=t.length>0?t[0].length:0,n=r-1;n>=0;n--){for(a=o-1;a>n;a--)s[n]-=t[n][a]*s[a];s[n]/=t[n][n]}return s},gaussBareiss:function(t){var e,i,s,r,o,a,l,h,u,c=n.A.eps;if((l=t.length)<=0)return 0;for(t[0].length<l&&(l=t[0].length),h=[],r=0;r<l;r++)h[r]=t[r].slice(0,l);for(i=1,s=1,e=0;e<l-1;e++){if(a=h[e][e],Math.abs(a)<c){for(r=e+1;r<l&&!(Math.abs(h[r][e])>=c);r++);if(r===l)return 0;for(o=e;o<l;o++)u=h[r][o],h[r][o]=h[e][o],h[e][o]=u;s=-s,a=h[e][e]}for(r=e+1;r<l;r++)for(o=e+1;o<l;o++)u=a*h[r][o]-h[r][e]*h[e][o],h[r][o]=u/i;i=a}return s*h[l-1][l-1]},det:function(t){return 2===t.length&&2===t[0].length?t[0][0]*t[1][1]-t[1][0]*t[0][1]:this.gaussBareiss(t)},Jacobi:function(t){var e,i,s,r,o,a,l,h,u,c=n.A.eps*n.A.eps,d=0,p=t.length,_=[[0,0,0],[0,0,0],[0,0,0]],f=[[0,0,0],[0,0,0],[0,0,0]],A=0;for(e=0;e<p;e++){for(i=0;i<p;i++)_[e][i]=0,f[e][i]=t[e][i],d+=Math.abs(f[e][i]);_[e][e]=1}if(1===p)return[f,_];if(d<=0)return[f,_];d/=p*p;do{for(h=0,u=0,i=1;i<p;i++)for(e=0;e<i;e++)if((r=Math.abs(f[e][i]))>u&&(u=r),h+=r,r>=c){for(r=.5*Math.atan2(2*f[e][i],f[e][e]-f[i][i]),o=Math.sin(r),a=Math.cos(r),s=0;s<p;s++)l=f[s][e],f[s][e]=a*l+o*f[s][i],f[s][i]=-o*l+a*f[s][i],l=_[s][e],_[s][e]=a*l+o*_[s][i],_[s][i]=-o*l+a*_[s][i];for(f[e][e]=a*f[e][e]+o*f[i][e],f[i][i]=-o*f[e][i]+a*f[i][i],f[e][i]=0,s=0;s<p;s++)f[e][s]=f[s][e],f[i][s]=f[s][i]}A+=1}while(Math.abs(h)/d>c&&A<2e3);return[f,_]},NewtonCotes:function(t,e,i){var s,o,n,a=0,l=i&&r.A.isNumber(i.number_of_nodes)?i.number_of_nodes:28,h={trapez:!0,simpson:!0,milne:!0},u=i&&i.integration_type&&h.hasOwnProperty(i.integration_type)&&h[i.integration_type]?i.integration_type:"milne",c=(t[1]-t[0])/l;switch(u){case"trapez":for(a=.5*(e(t[0])+e(t[1])),s=t[0],o=0;o<l-1;o++)a+=e(s+=c);a*=c;break;case"simpson":if(l%2>0)throw new Error("JSXGraph: INT_SIMPSON requires config.number_of_nodes dividable by 2.");for(n=l/2,a=e(t[0])+e(t[1]),s=t[0],o=0;o<n-1;o++)a+=2*e(s+=2*c);for(s=t[0]-c,o=0;o<n;o++)a+=4*e(s+=2*c);a*=c/3;break;default:if(l%4>0)throw new Error("JSXGraph: Error in INT_MILNE: config.number_of_nodes must be a multiple of 4");for(n=.25*l,a=7*(e(t[0])+e(t[1])),s=t[0],o=0;o<n-1;o++)a+=14*e(s+=4*c);for(s=t[0]-3*c,o=0;o<n;o++)a+=32*(e(s+=4*c)+e(s+2*c));for(s=t[0]-2*c,o=0;o<n;o++)a+=12*e(s+=4*c);a*=2*c/45}return a},Romberg:function(t,e,i){var s,o,n,a,l,h,u,c,d=[],p=0,_=1/0,f=i&&r.A.isNumber(i.max_iterations)?i.max_iterations:20,A=i&&r.A.isNumber(i.eps)?i.eps:i.eps||1e-7;for(s=t[0],n=(o=t[1])-s,l=1,d[0]=.5*n*(e(s)+e(o)),h=0;h<f;++h){for(a=0,n*=.5,l*=2,c=1,u=1;u<l;u+=2)a+=e(s+u*n);for(d[h+1]=.5*d[h]+a*n,p=d[h+1],u=h-1;u>=0;--u)c*=4,d[u]=d[u+1]+(d[u+1]-d[u])/(c-1),p=d[u];if(Math.abs(p-_)<A*Math.abs(p))break;_=p}return p},GaussLegendre:function(t,e,i){var s,o,n,a,l,h,u,c,d=0,p=[],_=[],f=i&&r.A.isNumber(i.n)?i.n:12;if(f>18&&(f=18),p[2]=[.5773502691896257],_[2]=[1],p[4]=[.33998104358485626,.8611363115940526],_[4]=[.6521451548625461,.34785484513745385],p[6]=[.2386191860831969,.6612093864662645,.932469514203152],_[6]=[.46791393457269104,.3607615730481386,.17132449237917036],p[8]=[.1834346424956498,.525532409916329,.7966664774136267,.9602898564975363],_[8]=[.362683783378362,.31370664587788727,.22238103445337448,.10122853629037626],p[10]=[.14887433898163122,.4333953941292472,.6794095682990244,.8650633666889845,.9739065285171717],_[10]=[.29552422471475287,.26926671930999635,.21908636251598204,.1494513491505806,.06667134430868814],p[12]=[.1252334085114689,.3678314989981802,.5873179542866175,.7699026741943047,.9041172563704749,.9815606342467192],_[12]=[.24914704581340277,.2334925365383548,.20316742672306592,.16007832854334622,.10693932599531843,.04717533638651183],p[14]=[.10805494870734367,.31911236892788974,.5152486363581541,.6872929048116855,.827201315069765,.9284348836635735,.9862838086968123],_[14]=[.2152638534631578,.2051984637212956,.18553839747793782,.15720316715819355,.12151857068790319,.08015808715976021,.03511946033175186],p[16]=[.09501250983763744,.2816035507792589,.45801677765722737,.6178762444026438,.755404408355003,.8656312023878318,.9445750230732326,.9894009349916499],_[16]=[.1894506104550685,.18260341504492358,.16915651939500254,.14959598881657674,.12462897125553388,.09515851168249279,.062253523938647894,.027152459411754096],p[18]=[.0847750130417353,.2518862256915055,.41175116146284263,.5597708310739475,.6916870430603532,.8037049589725231,.8926024664975557,.9558239495713977,.9915651684209309],_[18]=[.1691423829631436,.16427648374583273,.15468467512626524,.14064291467065065,.12255520671147846,.10094204410628717,.07642573025488905,.0497145488949698,.02161601352648331],p[3]=[0,.7745966692414834],_[3]=[.8888888888888888,.5555555555555556],p[5]=[0,.5384693101056831,.906179845938664],_[5]=[.5688888888888889,.47862867049936647,.23692688505618908],p[7]=[0,.4058451513773972,.7415311855993945,.9491079123427585],_[7]=[.4179591836734694,.3818300505051189,.27970539148927664,.1294849661688697],p[9]=[0,.3242534234038089,.6133714327005904,.8360311073266358,.9681602395076261],_[9]=[.3302393550012598,.31234707704000286,.26061069640293544,.1806481606948574,.08127438836157441],p[11]=[0,.26954315595234496,.5190961292068118,.7301520055740494,.8870625997680953,.978228658146057],_[11]=[.2729250867779006,.26280454451024665,.23319376459199048,.18629021092773426,.1255803694649046,.05566856711617366],p[13]=[0,.2304583159551348,.44849275103644687,.6423493394403402,.8015780907333099,.9175983992229779,.9841830547185881],_[13]=[.2325515532308739,.22628318026289723,.2078160475368885,.17814598076194574,.13887351021978725,.09212149983772845,.04048400476531588],p[15]=[0,.20119409399743451,.3941513470775634,.5709721726085388,.7244177313601701,.8482065834104272,.937273392400706,.9879925180204854],_[15]=[.2025782419255613,.19843148532711158,.1861610000155622,.16626920581699392,.13957067792615432,.10715922046717194,.07036604748810812,.03075324199611727],p[17]=[0,.17848418149584785,.3512317634538763,.5126905370864769,.6576711592166907,.7815140038968014,.8802391537269859,.9506755217687678,.9905754753144174],_[17]=[.17944647035620653,.17656270536699264,.16800410215645004,.15404576107681028,.13513636846852548,.11188384719340397,.08503614831717918,.0554595293739872,.02414830286854793],s=t[0],o=t[1],a=f+1>>1,u=p[f],c=_[f],h=.5*(o-s),l=.5*(o+s),!0&f)for(d=c[0]*e(l),n=1;n<a;++n)d+=c[n]*(e(l+h*u[n])+e(l-h*u[n]));else for(d=0,n=0;n<a;++n)d+=c[n]*(e(l+h*u[n])+e(l-h*u[n]));return h*d},_rescale_error:function(t,e,i){var s,r,o=2220446049250313e-31;return t=Math.abs(t),0!==i&&0!==t&&(t=(s=Math.pow(200*t/i,1.5))<1?i*s:i),e>20041683600089728e-310&&(r=50*o*e)>t&&(t=r),t},_gaussKronrod:function(t,e,i,s,r,o,n){var a,l,h,u,c,d,p,_,f,A,g,m=t[0],y=t[1],b=.5*(m+y),v=.5*(y-m),C=Math.abs(v),P=e(b),x=0,E=P*o[i-1],O=Math.abs(E),M=0,S=[],w=[];for(i%2==0&&(x=P*r[i/2-1]),a=Math.floor((i-1)/2),c=0;c<a;c++)A=(_=e(b-(p=v*s[d=2*c+1])))+(f=e(b+p)),S[d]=_,w[d]=f,x+=r[c]*A,E+=o[d]*A,O+=o[d]*(Math.abs(_)+Math.abs(f));for(a=Math.floor(i/2),c=0;c<a;c++)_=e(b-(p=v*s[g=2*c])),f=e(b+p),S[g]=_,w[g]=f,E+=o[g]*(_+f),O+=o[g]*(Math.abs(_)+Math.abs(f));for(h=.5*E,M=o[i-1]*Math.abs(P-h),c=0;c<i-1;c++)M+=o[c]*(Math.abs(S[c]-h)+Math.abs(w[c]-h));return u=(E-x)*v,O*=C,M*=C,l=E*=v,n.abserr=this._rescale_error(u,O,M),n.resabs=O,n.resasc=M,l},GaussKronrod15:function(t,e,i){return this._gaussKronrod(t,e,8,[.9914553711208126,.9491079123427585,.8648644233597691,.7415311855993945,.5860872354676911,.4058451513773972,.20778495500789848,0],[.1294849661688697,.27970539148927664,.3818300505051189,.4179591836734694],[.022935322010529224,.06309209262997856,.10479001032225019,.14065325971552592,.1690047266392679,.19035057806478542,.20443294007529889,.20948214108472782],i)},GaussKronrod21:function(t,e,i){return this._gaussKronrod(t,e,11,[.9956571630258081,.9739065285171717,.9301574913557082,.8650633666889845,.7808177265864169,.6794095682990244,.5627571346686047,.4333953941292472,.2943928627014602,.14887433898163122,0],[.06667134430868814,.1494513491505806,.21908636251598204,.26926671930999635,.29552422471475287],[.011694638867371874,.032558162307964725,.054755896574351995,.07503967481091996,.0931254545836976,.10938715880229764,.12349197626206584,.13470921731147334,.14277593857706009,.14773910490133849,.1494455540029169],i)},GaussKronrod31:function(t,e,i){return this._gaussKronrod(t,e,16,[.9980022986933971,.9879925180204854,.9677390756791391,.937273392400706,.8972645323440819,.8482065834104272,.790418501442466,.7244177313601701,.650996741297417,.5709721726085388,.4850818636402397,.3941513470775634,.29918000715316884,.20119409399743451,.1011420669187175,0],[.03075324199611727,.07036604748810812,.10715922046717194,.13957067792615432,.16626920581699392,.1861610000155622,.19843148532711158,.2025782419255613],[.005377479872923349,.015007947329316122,.02546084732671532,.03534636079137585,.04458975132476488,.05348152469092809,.06200956780067064,.06985412131872826,.07684968075772038,.08308050282313302,.08856444305621176,.09312659817082532,.09664272698362368,.09917359872179196,.10076984552387559,.10133000701479154],i)},_workspace:function(t,e){return{limit:e,size:0,nrmax:0,i:0,alist:[t[0]],blist:[t[1]],rlist:[0],elist:[0],order:[0],level:[0],qpsrt:function(){var t,e,i,s,r,o=this.size-1,n=this.limit,a=this.nrmax,l=this.order[a];if(o<2)return this.order[0]=0,this.order[1]=1,void(this.i=l);for(t=this.elist[l];a>0&&t>this.elist[this.order[a-1]];)this.order[a]=this.order[a-1],a--;for(r=o<n/2+2?o:n-o+1,i=a+1;i<r&&t<this.elist[this.order[i]];)this.order[i-1]=this.order[i],i++;for(this.order[i-1]=l,e=this.elist[o],s=r-1;s>i-2&&e>=this.elist[this.order[s]];)this.order[s+1]=this.order[s],s--;this.order[s+1]=o,l=this.order[a],this.i=l,this.nrmax=a},set_initial_result:function(t,e){this.size=1,this.rlist[0]=t,this.elist[0]=e},update:function(t,e,i,s,r,o,n,a){var l=this.i,h=this.size,u=this.level[this.i]+1;a>s?(this.alist[l]=r,this.rlist[l]=n,this.elist[l]=a,this.level[l]=u,this.alist[h]=t,this.blist[h]=e,this.rlist[h]=i,this.elist[h]=s,this.level[h]=u):(this.blist[l]=e,this.rlist[l]=i,this.elist[l]=s,this.level[l]=u,this.alist[h]=r,this.blist[h]=o,this.rlist[h]=n,this.elist[h]=a,this.level[h]=u),this.size++,u>this.maximum_level&&(this.maximum_level=u),this.qpsrt()},retrieve:function(){var t=this.i;return{a:this.alist[t],b:this.blist[t],r:this.rlist[t],e:this.elist[t]}},sum_results:function(){var t,e=this.size,i=0;for(t=0;t<e;t++)i+=this.rlist[t];return i},subinterval_too_small:function(t,e,i){var s=1.0000000000000222*(Math.abs(e)+22250738585072014e-321);return Math.abs(t)<=s&&Math.abs(i)<=s}}},Qag:function(t,e,i){var o,a,l,h,u,c,d,p,_,f,A,g,m,y,b,v,C,P,x=this._workspace(t,1e3),E=i&&r.A.isNumber(i.limit)?i.limit:15,O=i&&r.A.isNumber(i.epsrel)?i.epsrel:1e-7,M=i&&r.A.isNumber(i.epsabs)?i.epsabs:1e-7,S=i&&r.A.isFunction(i.q)?i.q:this.GaussKronrod15,w={},T=0,N=0,j=0,D=0,k=0,R=0,L=0,B=0,I=0,Y=0;if(E>x.limit&&s.A.warn("iteration limit exceeds available workspace"),M<=0&&(O<50*n.A.eps||O<5e-29)&&s.A.warn("tolerance cannot be acheived with given epsabs and epsrel"),l=S.apply(this,[t,e,w]),h=w.abserr,u=w.resabs,c=w.resasc,x.set_initial_result(l,h),d=Math.max(M,O*Math.abs(l)),h<=11102230246251565e-30*u&&h>d)return s.A.warn("cannot reach tolerance because of roundoff error on first attempt"),-1/0;if(h<=d&&h!==c||0===h)return l;if(1===E)return s.A.warn("a maximum of one iteration was insufficient"),-1/0;o=l,a=h,T=1;do{k=0,R=0,L=0,B=0,I=0,Y=0,g=(C=x.retrieve()).a,m=C.b,y=C.r,b=C.e,p=g,f=_=.5*(g+m),A=m,k=S.apply(this,[[p,_],e,w]),B=w.abserr,v=w.resasc,R=S.apply(this,[[f,A],e,w]),a+=(Y=B+(I=w.abserr))-b,o+=(L=k+R)-y,v!==B&&w.resasc!==I&&(P=y-L,Math.abs(P)<=1e-5*Math.abs(L)&&Y>=.99*b&&N++,T>=10&&Y>b&&j++),a>(d=Math.max(M,O*Math.abs(o)))&&((N>=6||j>=20)&&(D=2),x.subinterval_too_small(p,f,A)&&(D=3)),x.update(p,_,k,B,f,A,R,I),g=(C=x.retrieve()).a_i,m=C.b_i,y=C.r_i,b=C.e_i,T++}while(T<E&&!D&&a>d);return x.sum_results()},I:function(t,e){return this.Qag(t,e,{q:this.GaussKronrod15,limit:15,epsrel:1e-7,epsabs:1e-7})},Newton:function(t,e,i){var s,o=0,a=n.A.eps,l=t.apply(i,[e]);for(r.A.isArray(e)&&(e=e[0]);o<50&&Math.abs(l)>a;)s=this.D(t,i)(e),Math.abs(s)>a?e-=l/s:e+=.2*Math.random()-1,l=t.apply(i,[e]),o+=1;return e},root:function(t,e,i){return this.chandrupatla(t,e,i)},generalizedNewton:function(t,e,i,s){var r,o,a,l,h,u,c,d,p,_,f,A,g,m,y=0;for(this.generalizedNewton.t1memo?(r=this.generalizedNewton.t1memo,o=this.generalizedNewton.t2memo):(r=i,o=s),_=(d=t.X(r)-e.X(o))*d+(p=t.Y(r)-e.Y(o))*p,f=this.D(t.X,t),A=this.D(e.X,e),g=this.D(t.Y,t),m=this.D(e.Y,e);_>n.A.eps&&y<10;)a=f(r),l=-A(o),h=g(r),r-=((u=-m(o))*d-l*p)/(c=a*u-l*h),o-=(a*p-h*d)/c,_=(d=t.X(r)-e.X(o))*d+(p=t.Y(r)-e.Y(o))*p,y+=1;return this.generalizedNewton.t1memo=r,this.generalizedNewton.t2memo=o,Math.abs(r)<Math.abs(o)?[t.X(r),t.Y(r)]:[e.X(o),e.Y(o)]},Neville:function(t){var e=[],i=function(i){return function(s,r){var o,a,l,h=n.A.binomial,u=t.length,c=u-1,d=0,p=0;if(!r)for(l=1,o=0;o<u;o++)e[o]=h(c,o)*l,l*=-1;for(a=s,o=0;o<u;o++){if(0===a)return t[o][i]();l=e[o]/a,a-=1,d+=t[o][i]()*l,p+=l}return d/p}};return[i("X"),i("Y"),0,function(){return t.length-1}]},splineDef:function(t,e){var i,s,r,o=Math.min(t.length,e.length),n=[],a=[],l=[],h=[],u=[],c=[];if(2===o)return[0,0];for(s=0;s<o;s++)i={X:t[s],Y:e[s]},l.push(i);for(l.sort((function(t,e){return t.X-e.X})),s=0;s<o;s++)t[s]=l[s].X,e[s]=l[s].Y;for(s=0;s<o-1;s++)h.push(t[s+1]-t[s]);for(s=0;s<o-2;s++)u.push(6*(e[s+2]-e[s+1])/h[s+1]-6*(e[s+1]-e[s])/h[s]);for(n.push(2*(h[0]+h[1])),a.push(u[0]),s=0;s<o-3;s++)r=h[s+1]/n[s],n.push(2*(h[s+1]+h[s+2])-r*h[s+1]),a.push(u[s+1]-r*a[s]);for(c[o-3]=a[o-3]/n[o-3],s=o-4;s>=0;s--)c[s]=(a[s]-h[s+1]*c[s+1])/n[s];for(s=o-3;s>=0;s--)c[s+1]=c[s];return c[0]=0,c[o-1]=0,c},splineEval:function(t,e,i,s){var o,n,a,l,h,u,c,d=Math.min(e.length,i.length),p=1,_=!1,f=[];for(r.A.isArray(t)?(p=t.length,_=!0):t=[t],o=0;o<p;o++){if(t[o]<e[0]||e[o]>e[d-1])return NaN;for(n=1;n<d&&!(t[o]<=e[n]);n++);a=i[n-=1],l=(i[n+1]-i[n])/(e[n+1]-e[n])-(e[n+1]-e[n])/6*(s[n+1]+2*s[n]),h=s[n]/2,u=(s[n+1]-s[n])/(6*(e[n+1]-e[n])),c=t[o]-e[n],f.push(a+(l+(h+u*c)*c)*c)}return _?f:f[0]},generatePolynomialTerm:function(t,e,i,s){var o,n=[];for(o=e;o>=0;o--)r.A.concat(n,["(",t[o].toPrecision(s),")"]),o>1?r.A.concat(n,["*",i,"<sup>",o,"<","/sup> + "]):1===o&&r.A.concat(n,["*",i," + "]);return n.join("")},lagrangePolynomial:function(t){var e=[],i=this,s=function(i,s){var r,o,n,a,l=t.length,h=0,u=0;if(!s)for(r=0;r<l;r++){for(e[r]=1,n=t[r].X(),o=0;o<l;o++)o!==r&&(e[r]*=n-t[o].X());e[r]=1/e[r]}for(r=0;r<l;r++){if(i===(n=t[r].X()))return t[r].Y();u+=a=e[r]/(i-n),h+=a*t[r].Y()}return h/u};return s.getTerm=function(e,s,r){return i.lagrangePolynomialTerm(t,e,s,r)()},s.getCoefficients=function(){return i.lagrangePolynomialCoefficients(t)()},s},lagrangePolynomialTerm:function(t,e,i,r){var a=this;return function(){var l,h,u,c,d,p=t.length,_=!0;for(i=i||"x",void 0===r&&(r=" * "),h=p-1,l=a.lagrangePolynomialCoefficients(t)(),u="",c=0;c<l.length;c++)d=l[c],Math.abs(d)<n.A.eps||(s.A.exists(e)&&(d=o.A._round10(d,-e)),_?(u+=d>0?d:"-"+-d,_=!1):u+=d>0?" + "+d:" - "+-d,h-c>1?u+=r+i+"^"+(h-c):h-c==1&&(u+=r+i));return u}},lagrangePolynomialCoefficients:function(t){return function(){var e,i,s,r,o=t.length,a=[],l=[],h=[];for(i=0;i<o;i++)h[i]=0;for(e=0;e<o;e++){for(s=t[e].Y(),r=t[e].X(),a=[],i=0;i<o;i++)i!==e&&(s/=r-t[i].X(),a.push(t[i].X()));for(l=[1].concat(n.A.Vieta(a)),i=0;i<l.length;i++)h[i]+=(i%2==1?-1:1)*l[i]*s}return h}},_initCubicPoly:function(t,e,i,s){return[t,i,-3*t+3*e-2*i-s,2*t-2*e+i+s]},CardinalSpline:function(t,e,i){var s,o,a,l,h=[],u=this;return l=r.A.isFunction(e)?e:function(){return e},void 0===i&&(i="uniform"),o=function(e){return function(r,o){var c,d,p,_,f,A,g,m,y,b;if(t.length<2)return NaN;if(!o)for(a=l(),p={X:function(){return 2*t[0].X()-t[1].X()},Y:function(){return 2*t[0].Y()-t[1].Y()},Dist:function(t){var e=this.X()-t.X(),i=this.Y()-t.Y();return n.A.hypot(e,i)}},_={X:function(){return 2*t[t.length-1].X()-t[t.length-2].X()},Y:function(){return 2*t[t.length-1].Y()-t[t.length-2].Y()},Dist:function(t){var e=this.X()-t.X(),i=this.Y()-t.Y();return n.A.hypot(e,i)}},b=(s=[p].concat(t,[_])).length,h[e]=[],c=0;c<b-3;c++)"centripetal"===i?(g=s[c].Dist(s[c+1]),m=s[c+2].Dist(s[c+1]),y=s[c+3].Dist(s[c+2]),g=Math.sqrt(g),m=Math.sqrt(m),y=Math.sqrt(y),m<n.A.eps&&(m=1),g<n.A.eps&&(g=m),y<n.A.eps&&(y=m),f=(s[c+1][e]()-s[c][e]())/g-(s[c+2][e]()-s[c][e]())/(m+g)+(s[c+2][e]()-s[c+1][e]())/m,A=(s[c+2][e]()-s[c+1][e]())/m-(s[c+3][e]()-s[c+1][e]())/(y+m)+(s[c+3][e]()-s[c+2][e]())/y,f*=m,A*=m,h[e][c]=u._initCubicPoly(s[c+1][e](),s[c+2][e](),a*f,a*A)):h[e][c]=u._initCubicPoly(s[c+1][e](),s[c+2][e](),a*(s[c+2][e]()-s[c][e]()),a*(s[c+3][e]()-s[c+1][e]()));return isNaN(r)?NaN:(b=t.length,r<=0?t[0][e]():r>=b?t[b-1][e]():(c=Math.floor(r))===r?t[c][e]():(r-=c,void 0===(d=h[e][c])?NaN:((d[3]*r+d[2])*r+d[1])*r+d[0]))}},[o("X"),o("Y"),0,function(){return t.length-1}]},CatmullRomSpline:function(t,e){return this.CardinalSpline(t,.5,e)},regressionPolynomial:function(t,e,i){var s,o,a,l,h,u,c="";if(r.A.isPoint(t)&&r.A.isFunction(t.Value))o=function(){return t.Value()};else if(r.A.isFunction(t))o=t;else{if(!r.A.isNumber(t))throw new Error("JSXGraph: Can't create regressionPolynomial from degree of type'"+typeof t+"'.");o=function(){return t}}if(3===arguments.length&&r.A.isArray(e)&&r.A.isArray(i))h=0;else if(2===arguments.length&&r.A.isArray(e)&&e.length>0&&r.A.isPoint(e[0]))h=1;else{if(!(2===arguments.length&&r.A.isArray(e)&&e.length>0&&e[0].usrCoords&&e[0].scrCoords))throw new Error("JSXGraph: Can't create regressionPolynomial. Wrong parameters.");h=2}return(u=function(t,u){var d,p,_,f,A,g,m,y,b,v=e.length;if(b=Math.floor(o()),!u){if(1===h)for(a=[],l=[],d=0;d<v;d++)a[d]=e[d].X(),l[d]=e[d].Y();if(2===h)for(a=[],l=[],d=0;d<v;d++)a[d]=e[d].usrCoords[1],l[d]=e[d].usrCoords[2];if(0===h)for(a=[],l=[],d=0;d<v;d++)r.A.isFunction(e[d])?a.push(e[d]()):a.push(e[d]),r.A.isFunction(i[d])?l.push(i[d]()):l.push(i[d]);for(_=[],p=0;p<v;p++)_.push([1]);for(d=1;d<=b;d++)for(p=0;p<v;p++)_[p][d]=_[p][d-1]*a[p];A=l,f=n.A.transpose(_),g=n.A.matMatMult(f,_),m=n.A.matVecMult(f,A),s=n.A.Numerics.Gauss(g,m),c=n.A.Numerics.generatePolynomialTerm(s,b,"x",3)}for(y=s[b],d=b-1;d>=0;d--)y=y*t+s[d];return y}).getTerm=function(){return c},u},bezier:function(t){var e,i,s=function(s){return function(r,o){var n=3*Math.floor(r),a=r%1,l=1-a;return o||(i=3*Math.floor((t.length-1)/3),e=Math.floor(i/3)),r<0?t[0][s]():r>=e?t[i][s]():isNaN(r)?NaN:l*l*(l*t[n][s]()+3*a*t[n+1][s]())+(3*l*t[n+2][s]()+a*t[n+3][s]())*a*a}};return[s("X"),s("Y"),0,function(){return Math.floor(t.length/3)}]},bspline:function(t,e){var i,s=function(s){return function(r,o){var n,a,l,h,u=t.length,c=u-1,d=e;if(c<=0)return NaN;if(c+2<=d&&(d=c+1),r<=0)return t[0][s]();if(r>=c-d+2)return t[c][s]();for(l=Math.floor(r)+d-1,i=function(t,e){var i,s=[];for(i=0;i<t+e+1;i++)s[i]=i<e?0:i<=t?i-e+1:t-e+2;return s}(c,d),h=function(t,e,i,s){var r,o,n,a,l,h=[];for(e[s]<=t&&t<e[s+1]?h[s]=1:h[s]=0,r=2;r<=i;r++)for(o=s-r+1;o<=s;o++)n=o<=s-r+1||o<0?0:h[o],a=o>=s?0:h[o+1],l=e[o+r-1]-e[o],h[o]=0===l?0:(t-e[o])/l*n,0!=(l=e[o+r]-e[o+1])&&(h[o]+=(e[o+r]-t)/l*a);return h}(r,i,d,l),n=0,a=l-d+1;a<=l;a++)a<u&&a>=0&&(n+=t[a][s]()*h[a]);return n}};return[s("X"),s("Y"),0,function(){return t.length-1}]},D:function(t,e){return r.A.exists(e)?function(i,s){var r=1e-5;return(t.apply(e,[i+r,s])-t.apply(e,[i-r,s]))/2e-5}:function(e,i){var s=1e-5;return(t(e+s,i)-t(e-s,i))/2e-5}},_riemannValue:function(t,e,i,s){var r,o,n,a;if(s<0&&("trapezoidal"!==i&&(t+=s),s*=-1,"lower"===i?i="upper":"upper"===i&&(i="lower")),a=.01*s,"right"===i)r=e(t+s);else if("middle"===i)r=e(t+.5*s);else if("left"===i||"trapezoidal"===i)r=e(t);else if("lower"===i){for(r=e(t),n=t+a;n<=t+s;n+=a)(o=e(n))<r&&(r=o);(o=e(t+s))<r&&(r=o)}else if("upper"===i){for(r=e(t),n=t+a;n<=t+s;n+=a)(o=e(n))>r&&(r=o);(o=e(t+s))>r&&(r=o)}else r="random"===i?e(t+s*Math.random()):"simpson"===i?(e(t)+4*e(t+.5*s)+e(t+s))/6:e(t);return r},riemann:function(t,e,i,s,o){var n,a,l,h,u,c,d,p,_,f,A,g,m,y,b=[],v=[],C=s,P=0;if(r.A.isArray(t)?(y=t[0],m=t[1]):m=t,(e=Math.floor(e))<=0)return[b,v,P];for(a=(o-s)/e,n=0;n<e;n++){if("simpson"===i){for(P+=this._riemannValue(C,m,i,a)*a,A=.5*a,d=m(C),p=m(C+A),h=((_=m(C+2*A))+d-2*p)/(A*A)*.5,u=(_-d)/(2*A),c=p,l=0;l<30;l++)f=l*a/30-A,b.push(C+f+A),v.push(h*f*f+u*f+c);C+=a,g=_}else g=this._riemannValue(C,m,i,a),b.push(C),v.push(g),C+=a,"trapezoidal"===i?(P+=.5*(g+(_=m(C)))*a,g=_):P+=g*a,b.push(C),v.push(g);b.push(C),v.push(g)}for(n=0;n<e;n++){if("simpson"===i&&y){for(P-=this._riemannValue(C,y,i,-a)*a,A=.5*a,d=y(C),p=y(C-A),h=((_=y(C-2*A))+d-2*p)/(A*A)*.5,u=(_-d)/(2*A),c=p,l=0;l<30;l++)f=l*a/30-A,b.push(C-f-A),v.push(h*f*f+u*f+c);C-=a,g=_}else g=y?this._riemannValue(C,y,i,-a):0,b.push(C),v.push(g),C-=a,y&&("trapezoidal"===i?(P-=.5*(g+(_=y(C)))*a,g=_):P-=g*a);b.push(C),v.push(g),b.push(C),v.push(m(C))}return[b,v,P]},riemannsum:function(t,e,i,r,o){return s.A.deprecated("Numerics.riemannsum()","Numerics.riemann()[2]"),this.riemann(t,e,i,r,o)[2]},rungeKutta:function(t,e,i,s,o){var n,l,h,u,c,d,p=[],_=[],f=(i[1]-i[0])/s,A=i[0],g=e.length,m=[],y=0;for(r.A.isString(t)&&(t=a[t]||a.euler),d=t.s,p=e.slice(),l=0;l<=s;l++){for(m[y]=p.slice(),y++,u=[],h=0;h<d;h++){for(n=0;n<g;n++)_[n]=0;for(c=0;c<h;c++)for(n=0;n<g;n++)_[n]+=t.A[h][c]*f*u[c][n];for(n=0;n<g;n++)_[n]+=p[n];u.push(o(A+t.c[h]*f,_))}for(n=0;n<g;n++)_[n]=0;for(c=0;c<d;c++)for(n=0;n<g;n++)_[n]+=t.b[c]*u[c][n];for(n=0;n<g;n++)p[n]=p[n]+f*_[n];A+=f}return m},maxIterationsRoot:80,maxIterationsMinimize:500,findBracket:function(t,e,i){var s,o,n,a,l,h,u,c,d,p;if(r.A.isArray(e))return e;for(s=e,n=t.call(i,s),p=(a=[s-.1*(o=0===s?1:s),s+.1*o,s-1,s+1,s-.5*o,s+.5*o,s-.6*o,s+.6*o,s-1*o,s+1*o,s-2*o,s+2*o,s-5*o,s+5*o,s-10*o,s+10*o,s-50*o,s+50*o,s-100*o,s+100*o]).length,d=0;d<p&&(l=a[d],!(n*(h=t.call(i,l))<=0));d++);return l<s&&(u=s,s=l,l=u,c=n,n=h,h=c),[s,n,l,h]},fzero:function(t,e,i){var s,o,a,l,h,u,c,d,p,_,f,A,g,m,y,b=n.A.eps,v=this.maxIterationsRoot,C=0;if(r.A.isArray(e)){if(e.length<2)throw new Error("JXG.Math.Numerics.fzero: length of array x0 has to be at least two.");s=e[0],l=t.call(i,s),o=e[1],h=t.call(i,o)}else s=(c=this.findBracket(t,e,i))[0],l=c[1],o=c[2],h=c[3];if(Math.abs(l)<=b)return s;if(Math.abs(h)<=b)return o;if(l*h>0)return r.A.isArray(e)?this.fminbr(t,[s,o],i):this.Newton(t,s,i);for(a=s,u=l;C<v;){if(d=o-s,Math.abs(u)<Math.abs(h)&&(s=o,o=a,a=s,l=h,h=u,u=l),A=2*b*Math.abs(o)+.5*b,y=.5*(a-o),Math.abs(y)<=A||Math.abs(h)<=b)return o;Math.abs(d)>=A&&Math.abs(l)>Math.abs(h)&&(f=a-o,s===a?(g=f*(p=h/l),m=1-p):(g=(_=h/l)*(f*(m=l/u)*(m-(p=h/u))-(o-s)*(p-1)),m=(m-1)*(p-1)*(_-1)),g>0?m=-m:g=-g,g<.75*f*m-.5*Math.abs(A*m)&&g<Math.abs(d*m*.5)&&(y=g/m)),Math.abs(y)<A&&(y=y>0?A:-A),s=o,l=h,o+=y,((h=t.call(i,o))>0&&u>0||h<0&&u<0)&&(a=s,u=l),C++}return o},chandrupatla:function(t,e,i){var s,o,a,l,h,u,c,d,p,_,f,A,g,m,y,b,v,C,P,x,E=0,O=this.maxIterationsRoot,M=1+.001*Math.random(),S=.5*M,w=n.A.eps;if(r.A.isArray(e)){if(e.length<2)throw new Error("JXG.Math.Numerics.fzero: length of array x0 has to be at least two.");s=e[0],a=t.call(i,s),o=e[1],l=t.call(i,o)}else s=(h=this.findBracket(t,e,i))[0],a=h[1],o=h[2],l=h[3];if(a*l>0)return r.A.isArray(e)?this.fminbr(t,[s,o],i):this.Newton(t,s,i);u=s,c=o,_=a,f=l;do{if(p=u+S*(c-u),g=t.call(i,p),Math.sign(g)===Math.sign(_)?(d=u,u=p,A=_,_=g):(d=c,c=u,A=f,f=_),m=u=p,y=_=g,Math.abs(f)<Math.abs(_)&&(m=c,y=f),(b=(2*w*Math.abs(m)+5e-6)/Math.abs(c-u))>.5||0===y)break;v=(u-c)/(d-c),C=(_-f)/(A-f),P=1-Math.sqrt(1-v),x=Math.sqrt(v),(S=P<C&&C<x?_/(f-_)*(A/(f-A))+_/(A-_)*(f/(A-f))*((d-u)/(c-u)):.5*M)<b&&(S=b),S>1-b&&(S=1-b),E++}while(E<=O);return m},fminbr:function(t,e,i){var s,o,a,l,h,u,c,d,p,_,f,A,g,m,y,b,v=.5*(3-Math.sqrt(5)),C=n.A.eps,P=n.A.eps,x=this.maxIterationsMinimize,E=0;if(!r.A.isArray(e)||e.length<2)throw new Error("JXG.Math.Numerics.fminbr: length of array x0 has to be at least two.");for(a=l=(s=e[0])+v*((o=e[1])-s),h=l,u=c=t.call(i,l),d=c;E<x;){if(p=o-s,_=.5*(s+o),f=P*Math.abs(a)+C/3,Math.abs(a-_)+.5*p<=2*f)return a;A=v*(a<_?o-a:s-a),Math.abs(a-h)>=f&&(g=(a-l)*(m=(a-l)*(u-d))-(a-h)*(y=(a-h)*(u-c)),(m=2*(m-y))>0?g=-g:m=-m,Math.abs(g)<Math.abs(A*m)&&g>m*(s-a+2*f)&&g<m*(o-a-2*f)&&(A=g/m)),Math.abs(A)<f&&(A=A>0?f:-f),y=a+A,(b=t.call(i,y))<=u?(y<a?o=a:s=a,l=h,h=a,a=y,c=d,d=u,u=b):(y<a?s=y:o=y,b<=d||h===a?(l=h,h=y,c=d,d=b):(b<=c||l===a||l===h)&&(l=y,c=b)),E+=1}return a},glomin:function(t,e){var i,s,r,o,a,l,h,u,c,d,p,_,f,A,g,m,y,b,v,C,P,x,E,O,M,S,w,T,N=1e7,j=n.A.eps,D=n.A.eps*n.A.eps,k=n.A.eps*n.A.eps*n.A.eps;if(M=e[0],S=e[1],w=t(M)<t(S)?M:S,T=i=S,s=M,P=y=t(S),y<(m=v=t(M))?m=y:T=M,S<=M)return m;for(c=.5*(1+16*k)*N,u=3,o=s-(g=w<=M||S<=w?.5*(M+S):w),h=9/11,(b=t(g))<m&&(T=g,m=b);;){if(l=g-i,O=S-s,d=f=(a=s-i)*a*(x=v-b)-o*o*(E=v-y),p=_=2*(o*E-a*x),u<1e6||v<=m)for(;p*(f*(P-v)+O*p*(v-m+j))<O*c*f*(O*p-f)&&(C=t(r=s+f/p))<m&&(T=r,m=C),p=1,!(O<=(f=1e-5*(S-M)*(u=1611*u%1048576))););else for(p=1,f=1e-5*(S-M)*(u=1611*u%1048576);f<O;)p*(f*(P-v)+O*p*(v-m+j))<O*c*f*(O*p-f)&&(C=t(r=s+f/p))<m&&(T=r,m=C),p=1,f=1e-5*(S-M)*(u=1611*u%1048576);for(d=(h=.5*(1+h))*(d+2*(f=c*o*a*l)*(A=Math.sqrt((v-m+j)/c))),f=(f=-.5*(o+(x+2.01*D)/(o*c)))<A||o<0?s+A:s+f,r=0<d*(p+=.5*_)?s+d/p:f;(S<=(r=Math.max(r,f))?(r=S,C=P):C=t(r),C<m&&(T=r,m=C),o=r-s,!(r<=f))&&(d=2*(v-C)/(N*o),!((1+9*k)*o<=Math.abs(d)))&&!(.5*c*(o*o+d*d)<=v-m+(C-m)+2*j);)r=.5*(s+r),h*=.9;if(S<=r)break;i=g,g=s,s=r,y=b,b=v,v=C}return[T,m]},polzeros:function(t,e,i,r,o){var n,a,l,h=[],u=[],c=[],d=function(t,e,i){var r,o,n=t.length-1;if(i=i||!1)for(o=s.A.C.mult(n,t[n]),r=n-1;r>0;r--)o.mult(e),o.add(s.A.C.mult(t[r],r));else for(o=s.A.C.copy(t[n]),r=n-1;r>=0;r--)o.mult(e),o.add(t[r]);return o},p=function(t,e,i){var r,o,n=t.length-1;if(i=i||!1)for(o=s.A.C.mult(n,t[0]),r=n-1;r>0;r--)o.mult(e),o.add(s.A.C.mult(t[n-r],r));else for(o=s.A.C.copy(t[0]),r=n-1;r>=0;r--)o.mult(e),o.add(t[n-r]);return o},_=function(t,e){var i,s,r=t.length-1;for(s=t[r],i=r-1;i>=0;i--)s=s*e+t[i];return s};for(i=i||Number.EPSILON,r=r||30,a=t.length,s.A.isNumber(e)&&e>=0&&e<a-1&&(a=e+1),n=0;n<a;n++)h.push(new s.A.Complex(t[n]));for(n=0;n<a;n++)if(0!==h[n].real||0!==h[n].imaginary){l=n;break}for(n=0;n<l;n++)u.push(new s.A.Complex(0));for(n=(a=(h=h.slice(l)).length)-1;n>=0&&(0===h[n].real&&0===h[n].imaginary);n--)h.pop();if(0===(a=h.length))return[];if(o)for(n=0;n<a-1;n++)c.push(new s.A.Complex(o[n]));else c=function(t){var e,i,r,o,n=t.length-1,a=2*Math.PI/n,l=Math.PI/n*.5,h=[];for((r=s.A.C.mult(-1,t[n-1])).div(s.A.C.mult(n,t[n])),o=s.A.C.div(d(t,r),t[n]),0===(i=Math.pow(s.A.C.abs(o),1/n))&&(i=1),e=0;e<n;e++)t=new s.A.Complex(i*Math.cos(a*e+l),i*Math.sin(a*e+l)),h[e]=s.A.C.add(r,t);return h}(h);return function(t,e,i,r){var o,n,a,l,h,u,c,f,A,g=[],m=[],y=0,b=r.length;for(n=0;n<b;n++)g.push(!1);for(n=0;n<t.length;n++)m.push(s.A.C.abs(t[n])*(4*n+1));for(o=0;o<i&&y<b;o++)for(n=0;n<b;n++)if(!g[n])if(u=d(t,r[n]),h=s.A.C.abs(r[n]),s.A.C.abs(u)<e*_(m,h)){if(g[n]=!0,++y===b)break}else{for(h>1?(l=s.A.C.div(1,r[n]),(A=p(t,l,!0)).div(p(t,l)),A.mult(l),u=s.A.C.sub(b,A),u=s.A.C.div(r[n],u)):u.div(d(t,r[n],!0)),c=new s.A.Complex(0),a=0;a<b;a++)a!==n&&(f=s.A.C.sub(r[n],r[a]),f=s.A.C.div(1,f),c.add(f));c.mult(u),c=s.A.C.sub(1,c),u.div(c),r[n].sub(u)}return o}(h,i,r,c),(c=u.concat(c)).sort((function(t,e){return t.real<e.real?-1:t.real>e.real?1:0})),c},RamerDouglasPeucker:function(t,e){var i,s,r,o=[],a=[],l=function(t,e,i,s,r){var o=function(t,e,i){var s,r,o,a,l,h,u,c,d,p,_,f=n.A.eps*n.A.eps,A=1e4,g=0,m=e;if(i-e<2)return[-1,0];if(o=t[e].scrCoords,a=t[i].scrCoords,isNaN(o[1])||isNaN(o[2]))return[NaN,e];if(isNaN(a[1])||isNaN(a[2]))return[NaN,i];for(r=e+1;r<i;r++){if(l=t[r].scrCoords,isNaN(l[1])||isNaN(l[2]))return[NaN,r];h=(h=(h=l[1]-o[1])==1/0?A:h)===-1/0?-A:h,u=(u=(u=l[2]-o[2])==1/0?A:u)===-1/0?-A:u,(p=(c=(c=(c=a[1]-o[1])==1/0?A:c)===-1/0?-A:c)*c+(d=(d=(d=a[2]-o[2])==1/0?A:d)===-1/0?-A:d)*d)>f?((_=(h*c+u*d)/p)<0?_=0:_>1&&(_=1),s=(h-=_*c)*h+(u-=_*d)*u):(_=0,s=h*h+u*u),s>g&&(g=s,m=r)}return[Math.sqrt(g),m]}(t,e,i),a=o[1];if(isNaN(o[0])){l(t,e,a-1,s,r),r.push(t[a]);do{++a}while(a<=i&&isNaN(t[a].scrCoords[1]+t[a].scrCoords[2]));a<=i&&r.push(t[a]),l(t,a+1,i,s,r)}else o[0]>s?(l(t,e,a,s,r),l(t,a,i,s,r)):r.push(t[i])};for(r=t.length,i=0;;){for(;i<r&&isNaN(t[i].scrCoords[1]+t[i].scrCoords[2]);)i+=1;for(s=i+1;s<r&&!isNaN(t[s].scrCoords[1]+t[s].scrCoords[2]);)s+=1;if(s--,i<r&&s>i&&((a=[])[0]=t[i],l(t,i,s,e,a),o=o.concat(a)),i>=r)break;s<r-1&&o.push(t[s+1]),i=s+1}return o},RamerDouglasPeuker:function(t,e){return s.A.deprecated("Numerics.RamerDouglasPeuker()","Numerics.RamerDouglasPeucker()"),this.RamerDouglasPeucker(t,e)},Visvalingam:function(t,e){var i,r,o,n,a,l,h,u,c,d=[],p=[],_=[];if((r=t.length)<=2)return t;for(d[0]={used:!0,lft:null,node:null},a=0,i=1;i<r-1;i++)o=Math.abs(s.A.Math.Numerics.det([t[i-1].usrCoords,t[i].usrCoords,t[i+1].usrCoords])),isNaN(o)||(c={v:o,idx:i},p.push(c),d[i]={used:!0,lft:a,node:c},d[a].rt=i,a=i);for(d[r-1]={used:!0,rt:null,lft:a,node:null},d[a].rt=r-1,n=-1/0;p.length>e;)p.sort((function(t,e){return e.v-t.v})),d[i=p.pop().idx].used=!1,n=d[i].node.v,a=d[i].lft,l=d[i].rt,d[a].rt=l,d[l].lft=a,null!==(h=d[a].lft)&&(o=Math.abs(s.A.Math.Numerics.det([t[h].usrCoords,t[a].usrCoords,t[l].usrCoords])),d[a].node.v=o>=n?o:n),null!==(u=d[l].rt)&&(o=Math.abs(s.A.Math.Numerics.det([t[a].usrCoords,t[l].usrCoords,t[u].usrCoords])),d[l].node.v=o>=n?o:n);_=[t[i=0]];do{i=d[i].rt,_.push(t[i])}while(null!==d[i].rt);return _}},e.A=n.A.Numerics},588:function(t,e,i){var s=i(443),r=i(477),o=i(188);r.A.Statistics={sum:function(t){var e,i=t.length,s=0;for(e=0;e<i;e++)s+=t[e];return s},prod:function(t){var e,i=t.length,s=1;for(e=0;e<i;e++)s*=t[e];return s},mean:function(t){return t.length>0?this.sum(t)/t.length:0},median:function(t){var e,i;return t.length>0?(ArrayBuffer.isView(t)?(e=new Float64Array(t)).sort():(e=t.slice(0)).sort((function(t,e){return t-e})),1&(i=e.length)?e[parseInt(.5*i,10)]:.5*(e[.5*i-1]+e[.5*i])):0},percentile:function(t,e){var i,s,r,n,a,l=[];if(t.length>0){for(ArrayBuffer.isView(t)?(i=new Float64Array(t)).sort():(i=t.slice(0)).sort((function(t,e){return t-e})),s=i.length,n=o.A.isArray(e)?e:[e],r=0;r<n.length;r++)a=s*n[r]*.01,parseInt(a,10)===a?l.push(.5*(i[a-1]+i[a])):l.push(i[parseInt(a,10)]);return o.A.isArray(e)?l:l[0]}return 0},variance:function(t){var e,i,s,r=t.length;if(r>1){for(e=this.mean(t),i=0,s=0;s<r;s++)i+=(t[s]-e)*(t[s]-e);return i/(t.length-1)}return 0},sd:function(t){return Math.sqrt(this.variance(t))},weightedMean:function(t,e){if(t.length!==e.length)throw new Error("JSXGraph error (Math.Statistics.weightedMean): Array dimension mismatch.");return t.length>0?this.mean(this.multiply(t,e)):0},max:function(t){return Math.max.apply(this,t)},min:function(t){return Math.min.apply(this,t)},range:function(t){return[this.min(t),this.max(t)]},abs:function(t){var e,i,s;if(o.A.isArray(t))if(t.map)s=t.map(Math.abs);else for(i=t.length,s=[],e=0;e<i;e++)s[e]=Math.abs(t[e]);else s=ArrayBuffer.isView(t)?t.map(Math.abs):Math.abs(t);return s},add:function(t,e){var i,s,r=[];if(t=o.A.evalSlider(t),e=o.A.evalSlider(e),o.A.isArray(t)&&o.A.isNumber(e))for(s=t.length,i=0;i<s;i++)r[i]=t[i]+e;else if(o.A.isNumber(t)&&o.A.isArray(e))for(s=e.length,i=0;i<s;i++)r[i]=t+e[i];else if(o.A.isArray(t)&&o.A.isArray(e))for(s=Math.min(t.length,e.length),i=0;i<s;i++)r[i]=t[i]+e[i];else r=t+e;return r},div:function(t,e){var i,s,r=[];if(t=o.A.evalSlider(t),e=o.A.evalSlider(e),o.A.isArray(t)&&o.A.isNumber(e))for(s=t.length,i=0;i<s;i++)r[i]=t[i]/e;else if(o.A.isNumber(t)&&o.A.isArray(e))for(s=e.length,i=0;i<s;i++)r[i]=t/e[i];else if(o.A.isArray(t)&&o.A.isArray(e))for(s=Math.min(t.length,e.length),i=0;i<s;i++)r[i]=t[i]/e[i];else r=t/e;return r},divide:function(){s.A.deprecated("Statistics.divide()","Statistics.div()"),r.A.Statistics.div.apply(r.A.Statistics,arguments)},mod:function(t,e,i){var s,n,a=[],l=function(t,e){return t%e};if((i=o.A.def(i,!1))&&(l=r.A.mod),t=o.A.evalSlider(t),e=o.A.evalSlider(e),o.A.isArray(t)&&o.A.isNumber(e))for(n=t.length,s=0;s<n;s++)a[s]=l(t[s],e);else if(o.A.isNumber(t)&&o.A.isArray(e))for(n=e.length,s=0;s<n;s++)a[s]=l(t,e[s]);else if(o.A.isArray(t)&&o.A.isArray(e))for(n=Math.min(t.length,e.length),s=0;s<n;s++)a[s]=l(t[s],e[s]);else a=l(t,e);return a},multiply:function(t,e){var i,s,r=[];if(t=o.A.evalSlider(t),e=o.A.evalSlider(e),o.A.isArray(t)&&o.A.isNumber(e))for(s=t.length,i=0;i<s;i++)r[i]=t[i]*e;else if(o.A.isNumber(t)&&o.A.isArray(e))for(s=e.length,i=0;i<s;i++)r[i]=t*e[i];else if(o.A.isArray(t)&&o.A.isArray(e))for(s=Math.min(t.length,e.length),i=0;i<s;i++)r[i]=t[i]*e[i];else r=t*e;return r},subtract:function(t,e){var i,s,r=[];if(t=o.A.evalSlider(t),e=o.A.evalSlider(e),o.A.isArray(t)&&o.A.isNumber(e))for(s=t.length,i=0;i<s;i++)r[i]=t[i]-e;else if(o.A.isNumber(t)&&o.A.isArray(e))for(s=e.length,i=0;i<s;i++)r[i]=t-e[i];else if(o.A.isArray(t)&&o.A.isArray(e))for(s=Math.min(t.length,e.length),i=0;i<s;i++)r[i]=t[i]-e[i];else r=t-e;return r},TheilSenRegression:function(t){var e,i,s=[],o=[],n=[];for(e=0;e<t.length;e++){for(o.length=0,i=0;i<t.length;i++)Math.abs(t[i].usrCoords[1]-t[e].usrCoords[1])>r.A.eps&&(o[i]=(t[i].usrCoords[2]-t[e].usrCoords[2])/(t[i].usrCoords[1]-t[e].usrCoords[1]));s[e]=this.median(o),n.push(t[e].usrCoords[2]-s[e]*t[e].usrCoords[1])}return[this.median(n),this.median(s),-1]},generateGaussian:function(t,e){var i,s,r;if(this.hasSpare)return this.hasSpare=!1,this.spare*e+t;do{r=(i=2*Math.random()-1)*i+(s=2*Math.random()-1)*s}while(r>=1||0===r);return r=Math.sqrt(-2*Math.log(r)/r),this.spare=s*r,this.hasSpare=!0,t+e*i*r},randomNormal:function(t,e){return this.generateGaussian(t,e)},randomUniform:function(t,e){return Math.random()*(e-t)+t},randomExponential:function(t){var e;if(t<=0)return NaN;do{e=Math.random()}while(0===e);return-Math.log(e)/t},randomGamma:function(t,e,i){var s,r,o,n,a,l;if(t<=0)return NaN;if(e=e||1,i=i||0,1===t)return e*this.randomExponential(1)+i;if(t<1){a=Math.E/(t+Math.E);do{s=Math.random();do{r=Math.random()}while(0===r);s<a?(o=Math.pow(r,1/t),l=Math.exp(-o)):(o=1-Math.log(r),l=Math.pow(o,t-1)),s=Math.random()}while(s>=l);return e*o+i}do{n=Math.tan(Math.PI*Math.random()),(o=Math.sqrt(2*t-1)*n+t-1)>0&&(r=Math.random())}while(o<=0||r>(1+n*n)*Math.exp((t-1)*Math.log(o/(t-1))-Math.sqrt(2*t-1)*n));return e*o+i},randomBeta:function(t,e){var i;return t<=0||e<=0?NaN:(i=this.randomGamma(t))/(i+this.randomGamma(e))},randomChisquare:function(t){return t<=0?NaN:2*this.randomGamma(.5*t)},randomF:function(t,e){return t<=0||e<=0?NaN:this.randomChisquare(t)*e/(this.randomChisquare(e)*t)},randomT:function(t){var e,i;return t<=0?NaN:(e=this.randomNormal(0,1),i=this.randomChisquare(t),e/Math.sqrt(i/t))},randomBinomial:function(t,e){var i,s,r,o,n;if(e<0||e>1||t<0)return NaN;if(0===e)return 0;if(1===e)return t;if(0===t)return 0;if(1===t)return Math.random()<e?1:0;if(e>.5)return t-this.randomBinomial(t,1-e);if(t<100){if(i=-1,s=0,0===(r=Math.log(1-e)))return 0;do{i+=1,s+=Math.floor(Math.log(Math.random())/r)+1}while(s<t)}else n=t-(o=1+Math.floor(.5*t))+1,i=(i=this.randomBeta(o,n))>=e?this.randomBinomial(o-1,e/i):o+this.randomBinomial(n-1,(e-i)/(1-i));return i},randomGeometric:function(t){var e;return t<0||t>1?NaN:(e=Math.random(),Math.ceil(Math.log(e)/Math.log(1-t)))},randomPoisson:function(t){var e,i,s=Math.exp(-t),r=0,o=1;if(t<=0)return NaN;if(t<10){do{o*=Math.random(),r+=1}while(o>s);e=r-1}else r=Math.floor(7/8*t),e=(i=this.randomGamma(r))<t?r+this.randomPoisson(t-i):this.randomBinomial(r-1,t/i);return e},randomHypergeometric:function(t,e,i){var s,r,o,n=t+e-i,a=Math.min(t,e),l=a;if(t<1||e<1||i>t+e)return NaN;for(s=i;l*s>0;)r=Math.random(),l-=Math.floor(r+l/(n+s)),s-=1;return o=a-l,t<=e?o:i-o},histogram:function(t,e){var i,r,o,n,a,l,h,u,c,d=[],p=[];for(l=e.bins||10,!1===(u=e.range||!1)?(n=Math.min.apply(null,t),a=Math.max.apply(null,t)):(n=u[0],a=u[1]),h=l>0?(a-n)/(l-1):0,i=0;i<l;i++)d.push(0),p.push(n+i*h);for(r=t.length,i=0;i<r;i++)(o=Math.floor((t[i]-n)/h))>=0&&o<l&&(d[o]+=1);if(e.density)for(c=s.A.Math.Statistics.sum(d),i=0;i<l;i++)d[i]/=c;if(e.cumulative)for(i=1;i<l;i++)d[i]+=d[i-1];return[d,p]}},e.A=r.A.Statistics},378:function(t,e,i){var s=i(443),r=i(561),o=i(477),n=i(873),a=i(188);s.A.Options={jc:{enabled:!0,compile:!0},board:{animationDelay:35,axis:!1,boundingBox:[-5,5,5,-5],browserPan:!1,clickDelay:600,dblClickSuppressClick:!1,defaultAxes:{x:{name:"x",fixed:!0,ticks:{label:{visible:"inherit",anchorX:"middle",anchorY:"top",fontSize:12,offset:[0,-3]},tickEndings:[0,1],majorTickEndings:[1,1],drawZero:!1,needsRegularUpdate:!1,visible:"inherit"}},y:{name:"y",fixed:!0,ticks:{label:{visible:"inherit",anchorX:"right",anchorY:"middle",fontSize:12,offset:[-6,0]},tickEndings:[1,0],majorTickEndings:[1,1],drawZero:!1,needsRegularUpdate:!1,visible:"inherit"}}},description:"",document:!1,drag:{enabled:!0},fullscreen:{symbol:'<svg height="1em" width="1em" version="1.1" viewBox="10 10 18 18"><path fill="#666" d="m 10,16 2,0 0,-4 4,0 0,-2 L 10,10 l 0,6 0,0 z"></path><path fill="#666" d="m 20,10 0,2 4,0 0,4 2,0 L 26,10 l -6,0 0,0 z"></path><path fill="#666" d="m 24,24 -4,0 0,2 L 26,26 l 0,-6 -2,0 0,4 0,0 z"></path><path fill="#666" d="M 12,20 10,20 10,26 l 6,0 0,-2 -4,0 0,-4 0,0 z"></path></svg>',scale:.85,id:null},ignoreLabels:!0,intl:{enabled:!1},keepAspectRatio:!1,keyboard:{enabled:!0,dx:10,dy:10,panShift:!0,panCtrl:!1},logging:{enabled:!1},minimizeReflow:"none",maxBoundingBox:[-1/0,1/0,1/0,-1/0],maxFrameRate:40,maxNameLength:1,moveTarget:null,offsetX:0,offsetY:0,pan:{enabled:!0,needShift:!0,needTwoFingers:!1},registerEvents:!0,renderer:"auto",resize:{enabled:!0,throttle:10},screenshot:{scale:1,type:"png",symbol:"⌘",css:"background-color:#eeeeee; opacity:1.0; border:2px solid black; border-radius:10px; text-align:center",cssButton:"padding: 4px 10px; border: solid #356AA0 1px; border-radius: 5px; position: absolute; right: 2ex; top: 2ex; background-color: rgba(255, 255, 255, 0.3);"},selection:{enabled:!1,name:"selectionPolygon",needShift:!1,needCtrl:!0,fillColor:"#ffff00",visible:!1,withLines:!1,vertices:{visible:!1}},showClearTraces:!1,showCopyright:!0,showFullscreen:!1,showInfobox:!0,showNavigation:!0,showReload:!1,showScreenshot:!1,showZoom:!0,takeFirst:!1,takeSizeFromFile:!1,theme:"default",title:"",viewport:[0,0,0,0],zoom:{enabled:!0,factorX:1.25,factorY:1.25,wheel:!0,needShift:!0,center:"auto",min:1e-4,max:1e4,pinch:!0,pinchHorizontal:!0,pinchVertical:!0,pinchSensitivity:7},zoomX:1,zoomY:1},navbar:{strokeColor:"#333333",fillColor:"transparent",highlightFillColor:"#aaaaaa",padding:"2px",position:"absolute",fontSize:"14px",cursor:"pointer",zIndex:"100",right:"5px",bottom:"5px"},elements:{dash:0,dashScale:!1,draft:{draft:!1,strokeColor:"#565656",fillColor:"#565656",strokeOpacity:.8,fillOpacity:.8,strokeWidth:1},dragToTopOfLayer:!1,fillColor:n.A.palette.red,fillOpacity:1,fixed:!1,frozen:!1,gradient:null,gradientAngle:0,gradientCX:.5,gradientCY:.5,gradientEndOffset:1,gradientFX:.5,gradientFY:.5,gradientFR:0,gradientR:.5,gradientSecondColor:"#ffffff",gradientSecondOpacity:1,gradientStartOffset:0,highlight:!0,highlightFillColor:"none",highlightFillOpacity:1,highlightStrokeColor:"#c3d9ff",highlightStrokeOpacity:1,highlightStrokeWidth:2,isLabel:!1,layer:0,lineCap:"butt",needsRegularUpdate:!0,nonnegativeOnly:!1,precision:"inherit",priv:!1,rotatable:!0,scalable:!0,shadow:{enabled:!1,color:[0,0,0],opacity:1,blur:3,blend:.1,offset:[5,5]},snapToGrid:!1,strokeColor:n.A.palette.blue,strokeOpacity:1,strokeWidth:2,tabindex:0,trace:!1,traceAttributes:{},transitionDuration:100,transitionProperties:["fill","fill-opacity","stroke","stroke-opacity","stroke-width"],visible:!0,viewport:"inherit",withLabel:!1},ticks:{generateLabelText:null,generateLabelValue:null,drawLabels:!1,label:{},beautifulScientificTickLabels:!1,useUnicodeMinus:!0,anchor:"left",drawZero:!1,insertTicks:!1,minTicksDistance:10,minorHeight:4,majorHeight:10,tickEndings:[1,1],majorTickEndings:[1,1],ignoreInfiniteTickEndings:!0,minorTicks:4,ticksPerLabel:!1,scale:1,scaleSymbol:"",labels:[],maxLabelLength:5,precision:3,digits:3,ticksDistance:1,face:"|",strokeOpacity:1,strokeWidth:1,strokeColor:"#000000",highlightStrokeColor:"#888888",fillColor:"none",highlightFillColor:"none",visible:"inherit",includeBoundaries:!1,type:"linear",intl:{enabled:"inherit",options:{}},minorTicksInArrow:!1,majorTicksInArrow:!0,labelInArrow:!0,minorTicksInMargin:!1,majorTicksInMargin:!0,labelInMargin:!0},hatch:{drawLabels:!1,drawZero:!0,majorHeight:20,anchor:"middle",face:"|",strokeWidth:2,strokeColor:n.A.palette.blue,ticksDistance:.2},precision:{touch:30,touchMax:100,mouse:4,pen:4,epsilon:1e-4,hasPoint:4},layer:{numlayers:20,unused9:19,unused8:18,unused7:17,unused6:16,unused5:15,unused4:14,unused3:13,unused2:12,unused1:11,unused0:10,text:9,point:9,glider:9,arc:8,line:7,circle:6,curve:5,turtle:5,polygon:3,sector:3,angle:3,integral:3,axis:2,ticks:2,grid:1,image:0,trace:0},angle:{withLabel:!0,radius:"auto",type:"sector",orthoType:"square",orthoSensitivity:1,fillColor:n.A.palette.orange,highlightFillColor:n.A.palette.orange,strokeColor:n.A.palette.orange,fillOpacity:.3,highlightFillOpacity:.3,radiuspoint:{withLabel:!1,visible:!1,name:""},pointsquare:{withLabel:!1,visible:!1,name:""},dot:{visible:!1,strokeColor:"none",fillColor:"#000000",size:2,face:"o",withLabel:!1,name:""},label:{position:"top",offset:[0,0],strokeColor:n.A.palette.blue},arc:{visible:!1,fillColor:"none"}},arc:{selection:"auto",hasInnerPoints:!1,label:{anchorX:"auto",anchorY:"auto"},firstArrow:!1,lastArrow:!1,fillColor:"none",highlightFillColor:"none",strokeColor:n.A.palette.blue,highlightStrokeColor:"#c3d9ff",useDirection:!1,center:{},radiusPoint:{},anglePoint:{}},arrow:{firstArrow:!1,lastArrow:{type:1,highlightSize:6,size:6}},arrowparallel:{firstArrow:!1,lastArrow:{type:1,highlightSize:6,size:6}},axis:{name:"",needsRegularUpdate:!1,strokeWidth:1,lastArrow:{type:1,highlightSize:8,size:8},strokeColor:"#666666",highlightStrokeWidth:1,highlightStrokeColor:"#888888",position:"static",anchor:"",anchorDist:"10%",ticksAutoPos:!1,ticksAutoPosThreshold:"5%",withTicks:!0,straightFirst:!0,straightLast:!0,margin:-4,withLabel:!1,scalable:!1,ticks:{label:{offset:[4,-9],parse:!1,needsRegularUpdate:!1,display:"internal",visible:"inherit",layer:9},visible:"inherit",needsRegularUpdate:!1,strokeWidth:1,strokeColor:"#666666",highlightStrokeColor:"#888888",drawLabels:!0,drawZero:!1,insertTicks:!0,minTicksDistance:5,minorHeight:10,majorHeight:-1,tickEndings:[0,1],majorTickEndings:[1,1],minorTicks:4,ticksDistance:1,strokeOpacity:.25},point1:{needsRegularUpdate:!1,visible:!1},point2:{needsRegularUpdate:!1,visible:!1},tabindex:-1,label:{position:"lft",offset:[10,10]}},bisector:{strokeColor:"#000000",point:{visible:!1,fixed:!1,withLabel:!1,name:""}},bisectorlines:{line1:{strokeColor:"#000000"},line2:{strokeColor:"#000000"}},boxplot:{dir:"vertical",smallWidth:.5,strokeWidth:2,strokeColor:n.A.palette.blue,fillColor:n.A.palette.blue,fillOpacity:.2,highlightStrokeWidth:2,highlightStrokeColor:n.A.palette.blue,highlightFillColor:n.A.palette.blue,highlightFillOpacity:.1},button:{disabled:!1,display:"html"},cardinalspline:{createPoints:!0,isArrayOfCoordinates:!0,points:{strokeOpacity:.05,fillOpacity:.05,highlightStrokeOpacity:1,highlightFillOpacity:1,withLabel:!1,name:"",fixed:!1}},chart:{chartStyle:"line",colors:["#B02B2C","#3F4C6B","#C79810","#D15600","#FFFF88","#c3d9ff","#4096EE","#008C00"],highlightcolors:null,fillcolor:null,highlightonsector:!1,highlightbysize:!1,fillOpacity:.6,withLines:!1,label:{}},checkbox:{disabled:!1,checked:!1,display:"html"},circle:{hasInnerPoints:!1,fillColor:"none",highlightFillColor:"none",strokeColor:n.A.palette.blue,highlightStrokeColor:"#c3d9ff",center:{visible:!1,withLabel:!1,fixed:!1,fillColor:n.A.palette.red,strokeColor:n.A.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",layer:9,name:""},point2:{fillColor:n.A.palette.red,strokeColor:n.A.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",layer:9,visible:!1,withLabel:!1,fixed:!1,name:""},label:{position:"urt"}},circumcircle:{fillColor:"none",highlightFillColor:"none",strokeColor:n.A.palette.blue,highlightStrokeColor:"#c3d9ff",center:{visible:!1,fixed:!1,withLabel:!1,fillColor:n.A.palette.red,strokeColor:n.A.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",name:""}},circumcirclearc:{fillColor:"none",highlightFillColor:"none",strokeColor:n.A.palette.blue,highlightStrokeColor:"#c3d9ff",center:{visible:!1,withLabel:!1,fixed:!1,name:""}},circumcirclesector:{useDirection:!0,fillColor:n.A.palette.yellow,highlightFillColor:n.A.palette.yellow,fillOpacity:.3,highlightFillOpacity:.3,strokeColor:n.A.palette.blue,highlightStrokeColor:"#c3d9ff",point:{visible:!1,fixed:!1,withLabel:!1,name:""}},comb:{frequency:.2,width:.4,angle:Math.PI/3,reverse:!1,point1:{visible:!1,withLabel:!1,fixed:!1,name:""},point2:{visible:!1,withLabel:!1,fixed:!1,name:""},strokeWidth:1,strokeColor:"#0000ff",fillColor:"none"},conic:{fillColor:"none",highlightFillColor:"none",strokeColor:n.A.palette.blue,highlightStrokeColor:"#c3d9ff",foci:{fixed:!1,visible:!1,withLabel:!1,name:""},center:{visible:!1,withLabel:!1,name:""},point:{withLabel:!1,name:""},line:{visible:!1}},curve:{strokeWidth:1,strokeColor:n.A.palette.blue,fillColor:"none",fixed:!0,curveType:null,doAdvancedPlot:!0,doAdvancedPlotOld:!1,firstArrow:!1,handDrawing:!1,label:{position:"lft"},lastArrow:!1,lineCap:"round",numberPointsHigh:1600,numberPointsLow:400,plotVersion:2,recursionDepthHigh:17,recursionDepthLow:15},foreignobject:{fixed:!0,visible:!0,needsRegularUpdate:!1,attractors:[]},functiongraph:{},glider:{label:{}},grid:{needsRegularUpdate:!1,hasGrid:!1,highlight:!1,gridX:null,gridY:null,majorStep:"auto",minorElements:0,forceSquare:!1,includeBoundaries:!1,size:void 0,face:void 0,margin:void 0,drawZero:void 0,polygonVertices:void 0,major:{size:5,face:"line",margin:0,drawZero:!0,polygonVertices:6},minor:{visible:"inherit",size:3,face:"point",margin:0,drawZero:!0,polygonVertices:6},snapToGrid:!1,strokeColor:"#c0c0c0",strokeWidth:1,strokeOpacity:.5,dash:0,theme:0,themes:[{},{forceSquare:"min",major:{face:"line"}},{major:{face:"line"},minor:{size:3,face:"point"},minorElements:"auto"},{major:{face:"line"},minor:{face:"line",strokeOpacity:.25},minorElements:"auto"},{major:{face:"line"},minor:{face:"+",size:"95%"},minorElements:"auto"},{major:{face:"+",size:10,strokeOpacity:1},minor:{face:"point",size:3},minorElements:"auto"},{major:{face:"circle",size:8,fillColor:"#c0c0c0"},minor:{face:"point",size:3},minorElements:"auto"}]},group:{needsRegularUpdate:!0},htmlslider:{widthRange:100,widthOut:34,step:.01,frozen:!0,isLabel:!1,strokeColor:"#000000",display:"html",anchorX:"left",anchorY:"middle",withLabel:!1},image:{imageString:null,fillOpacity:1,highlightFillOpacity:.6,cssClass:"JXGimage",highlightCssClass:"JXGimageHighlight",rotate:0,snapSizeX:1,snapSizeY:1,attractors:[]},implicitcurve:{margin:1,resolution_outer:5,resolution_inner:5,max_steps:1024,alpha_0:.05,tol_u0:o.A.eps,tol_newton:1e-7,tol_cusp:.05,tol_progress:1e-4,qdt_box:.2,kappa_0:.2,delta_0:.05,h_initial:.1,h_critical:.001,h_max:1,loop_dist:.09,loop_dir:.99,loop_detection:!0},incircle:{fillColor:"none",highlightFillColor:"none",strokeColor:n.A.palette.blue,highlightStrokeColor:"#c3d9ff",center:{visible:!1,fixed:!1,withLabel:!1,fillColor:n.A.palette.red,strokeColor:n.A.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",name:""}},inequality:{fillColor:n.A.palette.red,fillOpacity:.2,strokeColor:"none",inverse:!1},infobox:{distanceX:-20,distanceY:25,intl:{enabled:"inherit",options:{}},fontSize:12,isLabel:!1,strokeColor:"#bbbbbb",display:"html",anchorX:"left",anchorY:"middle",cssClass:"JXGinfobox",rotate:0,visible:!0,parse:!1,transitionDuration:0,needsRegularUpdate:!1,tabindex:null,viewport:[0,0,0,0]},integral:{axis:"x",withLabel:!0,fixed:!0,strokeWidth:0,strokeOpacity:0,fillColor:n.A.palette.red,fillOpacity:.3,highlightFillColor:n.A.palette.red,highlightFillOpacity:.2,curveLeft:{visible:!0,withLabel:!1,color:n.A.palette.red,fillOpacity:.8,layer:9},baseLeft:{visible:!1,fixed:!1,withLabel:!1,name:""},curveRight:{visible:!0,withLabel:!1,color:n.A.palette.red,fillOpacity:.8,layer:9},baseRight:{visible:!1,fixed:!1,withLabel:!1,name:""},label:{fontSize:20,digits:4,intl:{enabled:!1,options:{}}}},input:{disabled:!1,maxlength:524288,display:"html"},intersection:{alwaysIntersect:!0},label:{visible:"inherit",strokeColor:"#000000",strokeOpacity:1,highlightStrokeOpacity:.666666,highlightStrokeColor:"#000000",fixed:!0,position:"urt",distance:1.5,offset:[10,10],autoPosition:!1,autoPositionMinDistance:12,autoPositionMaxDistance:28},legend:{style:"vertical",labels:["1","2","3","4","5","6","7","8"],colors:["#B02B2C","#3F4C6B","#C79810","#D15600","#FFFF88","#c3d9ff","#4096EE","#008C00"],rowHeight:20,strokeWidth:5},line:{firstArrow:!1,lastArrow:!1,margin:0,straightFirst:!0,straightLast:!0,fillColor:"none",highlightFillColor:"none",strokeColor:n.A.palette.blue,highlightStrokeColor:"#c3d9ff",withTicks:!1,point1:{fillColor:n.A.palette.red,strokeColor:n.A.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",layer:9,visible:!1,withLabel:!1,fixed:!1,name:""},point2:{fillColor:n.A.palette.red,strokeColor:n.A.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",layer:9,visible:!1,withLabel:!1,fixed:!1,name:""},ticks:{drawLabels:!0,label:{offset:[4,-9]},drawZero:!1,insertTicks:!1,ticksDistance:1,minTicksDistance:50,minorHeight:4,majorHeight:-1,minorTicks:4,strokeOpacity:.3,visible:"inherit"},label:{position:"llft"},snapToGrid:!1,snapSizeX:1,snapSizeY:1,touchFirstPoint:!1,touchLastPoint:!1},locus:{translateToOrigin:!1,translateTo10:!1,stretch:!1,toOrigin:null,to10:null},measurement:{baseUnit:"",units:{},dim:null,showPrefix:!0,showSuffix:!0,prefix:"",suffix:"",formatPrefix:function(t){return t},formatSuffix:function(t){return t},formatCoords:function(t,e,i){return"("+t+", "+e+")"},formatDirection:function(t,e){return"("+t+", "+e+")"}},metapostspline:{createPoints:!0,isArrayOfCoordinates:!0,points:{strokeOpacity:.5,fillOpacity:.5,highlightStrokeOpacity:1,highlightFillOpacity:1,withLabel:!1,name:"",fixed:!1}},mirrorelement:{fixed:!0,point:{},center:{},type:"Euclidean"},nonreflexangle:{},normal:{strokeColor:"#000000",point:{visible:!1,fixed:!1,withLabel:!1,name:""}},orthogonalprojection:{},otherintersection:{alwaysIntersect:!0,precision:.001},parallel:{strokeColor:"#000000",point:{visible:!1,fixed:!1,withLabel:!1,name:""},label:{position:"llft"}},parallelogram:{parallelpoint:{withLabel:!1,name:""}},parallelpoint:{},perpendicular:{strokeColor:"#000000",straightFirst:!0,straightLast:!0},perpendicularsegment:{strokeColor:"#000000",straightFirst:!1,straightLast:!1,point:{visible:!1,fixed:!0,withLabel:!1,name:""}},point:{withLabel:!0,label:{},style:5,face:"o",size:3,sizeUnit:"screen",strokeWidth:2,transitionProperties:["fill","fill-opacity","stroke","stroke-opacity","stroke-width","width","height","rx","ry"],fillColor:n.A.palette.red,strokeColor:n.A.palette.red,highlightFillColor:"#c3d9ff",highlightStrokeColor:"#c3d9ff",zoom:!1,showInfobox:"inherit",infoboxDigits:"auto",draft:!1,attractors:[],attractorUnit:"user",attractorDistance:0,snatchDistance:0,snapToGrid:!1,attractToGrid:!1,snapSizeX:1,snapSizeY:1,snapToPoints:!1,ignoredSnapToPoints:[]},polygon:{hasInnerPoints:!1,fillColor:n.A.palette.yellow,highlightFillColor:n.A.palette.yellow,fillOpacity:.3,highlightFillOpacity:.2,withLines:!0,borders:{withLabel:!1,strokeWidth:1,highlightStrokeWidth:1,layer:5,label:{position:"top"},visible:"inherit"},highlightByStrokeWidth:!1,vertices:{layer:9,withLabel:!1,name:"",strokeColor:n.A.palette.red,fillColor:n.A.palette.red,fixed:!1,visible:"inherit"},label:{offset:[0,0]}},polygonalchain:{fillColor:"none",highlightFillColor:"none"},prescribedangle:{anglePoint:{size:2,visible:!1,withLabel:!1}},reflection:{fixed:!0,center:{},type:"Euclidean"},reflexangle:{},regularpolygon:{hasInnerPoints:!1,fillColor:n.A.palette.yellow,highlightFillColor:n.A.palette.yellow,fillOpacity:.3,highlightFillOpacity:.2,withLines:!0,borders:{withLabel:!1,strokeWidth:1,highlightStrokeWidth:1,layer:5,label:{position:"top"}},vertices:{layer:9,withLabel:!0,strokeColor:n.A.palette.red,fillColor:n.A.palette.red,fixed:!1},label:{offset:[0,0]}},riemannsum:{withLabel:!1,fillOpacity:.3,fillColor:n.A.palette.yellow},sector:{fillColor:n.A.palette.yellow,highlightFillColor:n.A.palette.yellow,fillOpacity:.3,highlightFillOpacity:.3,highlightOnSector:!1,highlightStrokeWidth:0,selection:"auto",arc:{visible:!1,fillColor:"none",withLabel:!1,name:"",center:{visible:!1,withLabel:!1,name:""},radiusPoint:{visible:!1,withLabel:!1,name:""},anglePoint:{visible:!1,withLabel:!1,name:""}},radiusPoint:{visible:!1,withLabel:!1},center:{visible:!1,withLabel:!1},anglePoint:{visible:!1,withLabel:!1},label:{offset:[0,0],anchorX:"auto",anchorY:"auto"}},segment:{label:{position:"top"}},semicircle:{center:{visible:!1,withLabel:!1,fixed:!1,fillColor:n.A.palette.red,strokeColor:n.A.palette.red,highlightFillColor:"#eeeeee",highlightStrokeColor:n.A.palette.red,name:""}},slider:{snapWidth:-1,snapValues:[],snapValueDistance:0,precision:2,digits:2,intl:{enabled:"inherit",options:{}},firstArrow:!1,lastArrow:!1,withTicks:!0,withLabel:!0,suffixLabel:null,unitLabel:null,postLabel:null,layer:9,showInfobox:!1,name:"",visible:!0,strokeColor:"#000000",highlightStrokeColor:"#888888",fillColor:"#ffffff",highlightFillColor:"none",size:6,point1:{needsRegularUpdate:!1,showInfobox:!1,withLabel:!1,visible:!1,fixed:!0,name:""},point2:{needsRegularUpdate:!1,showInfobox:!1,withLabel:!1,visible:!1,fixed:!0,name:""},baseline:{needsRegularUpdate:!1,visible:"inherit",fixed:!0,scalable:!1,tabindex:null,name:"",strokeWidth:1,strokeColor:"#000000",highlightStrokeColor:"#888888"},ticks:{needsRegularUpdate:!1,fixed:!0,drawLabels:!1,digits:2,includeBoundaries:!0,drawZero:!0,label:{offset:[-4,-14],display:"internal"},minTicksDistance:30,insertTicks:!0,ticksDistance:1,minorHeight:4,majorHeight:5,minorTicks:0,strokeOpacity:1,strokeWidth:1,tickEndings:[0,1],majortickEndings:[0,1],strokeColor:"#000000",visible:"inherit"},highline:{strokeWidth:3,visible:"inherit",fixed:!0,tabindex:null,name:"",strokeColor:"#000000",highlightStrokeColor:"#888888"},label:{visible:"inherit",strokeColor:"#000000"},moveOnUp:!0},slopefield:{strokeWidth:.5,highlightStrokeWidth:.5,highlightStrokeColor:n.A.palette.blue,highlightStrokeOpacity:.8,scale:1,arrowhead:{enabled:!1,size:5,angle:.125*Math.PI}},slopetriangle:{fillColor:n.A.palette.red,fillOpacity:.4,highlightFillColor:n.A.palette.red,highlightFillOpacity:.3,borders:{lastArrow:{type:1,size:6}},glider:{fixed:!0,visible:!1,withLabel:!1},baseline:{visible:!1,withLabel:!1,name:""},basepoint:{visible:!1,withLabel:!1,name:""},tangent:{visible:!1,withLabel:!1,name:""},toppoint:{visible:!1,withLabel:!1,name:""},label:{visible:!0,position:"first"}},smartlabelangle:{cssClass:"smart-label-solid smart-label-angle",highlightCssClass:"smart-label-solid smart-label-angle",anchorX:"left",anchorY:"middle",unit:"",prefix:"",suffix:"",measure:"deg",useMathJax:!0},smartlabelcircle:{cssClass:"smart-label-solid smart-label-circle",highlightCssClass:"smart-label-solid smart-label-circle",anchorX:"middle",useMathJax:!0,unit:"",prefix:"",suffix:"",measure:"radius"},smartlabelline:{cssClass:"smart-label-solid smart-label-line",highlightCssClass:"smart-label-solid smart-label-line",anchorX:"middle",useMathJax:!0,unit:"",measure:"length"},smartlabelpoint:{cssClass:"smart-label-solid smart-label-point",highlightCssClass:"smart-label-solid smart-label-point",anchorX:"middle",anchorY:"top",useMathJax:!0,dir:"row",unit:""},smartlabelpolygon:{cssClass:"smart-label-solid smart-label-polygon",highlightCssClass:"smart-label-solid smart-label-polygon",anchorX:"middle",useMathJax:!0,unit:"",measure:"area"},stepfunction:{},tangent:{},tapemeasure:{strokeColor:"#000000",strokeWidth:2,highlightStrokeColor:"#000000",withTicks:!0,withLabel:!0,rotate:0,precision:2,digits:2,point1:{visible:!0,strokeColor:"#000000",fillColor:"#ffffff",fillOpacity:0,highlightFillOpacity:.1,size:6,snapToPoints:!0,attractorUnit:"screen",attractorDistance:20,showInfobox:!1,withLabel:!1,name:""},point2:{visible:!0,strokeColor:"#000000",fillColor:"#ffffff",fillOpacity:0,highlightFillOpacity:.1,size:6,snapToPoints:!0,attractorUnit:"screen",attractorDistance:20,showInfobox:!1,withLabel:!1,name:""},ticks:{drawLabels:!1,drawZero:!0,insertTicks:!0,ticksDistance:.1,minorHeight:8,majorHeight:16,minorTicks:4,tickEndings:[0,1],majorTickEndings:[0,1],strokeOpacity:1,strokeWidth:1,strokeColor:"#000000",visible:"inherit",label:{anchorY:"top",anchorX:"middle",offset:[0,-10]}},label:{position:"top"}},text:{fontSize:12,fontUnit:"px",formatNumber:!1,digits:2,intl:{enabled:"inherit",options:{minimumFractionDigits:0,maximumFractionDigits:2}},parse:!0,useCaja:!1,isLabel:!1,strokeColor:"#000000",highlightStrokeColor:"#000000",highlightStrokeOpacity:.666666,cssDefaultStyle:"font-family: Arial, Helvetica, Geneva, sans-serif;",highlightCssDefaultStyle:"font-family: Arial, Helvetica, Geneva, sans-serif;",cssStyle:"",highlightCssStyle:"",transitionProperties:["color","opacity"],useASCIIMathML:!1,useMathJax:!1,useKatex:!1,katexMacros:{},toFraction:!1,display:"html",anchor:null,anchorX:"left",anchorY:"middle",cssClass:"JXGtext",highlightCssClass:"JXGtext",dragArea:"all",withLabel:!1,rotate:0,visible:!0,snapSizeX:1,snapSizeY:1,attractors:[]},tracecurve:{strokeColor:"#000000",fillColor:"none",numberPoints:100},turtle:{strokeWidth:1,fillColor:"none",strokeColor:"#000000",arrow:{strokeWidth:2,withLabel:!1,strokeColor:n.A.palette.red,lastArrow:!0}},vectorfield:{strokeWidth:.5,highlightStrokeWidth:.5,highlightStrokeColor:n.A.palette.blue,highlightStrokeOpacity:.8,scale:1,arrowhead:{enabled:!0,size:5,angle:.125*Math.PI}},shortcuts:{color:["strokeColor","fillColor"],opacity:["strokeOpacity","fillOpacity"],highlightColor:["highlightStrokeColor","highlightFillColor"],highlightOpacity:["highlightStrokeOpacity","highlightFillOpacity"],strokeWidth:["strokeWidth","highlightStrokeWidth"]}},s.A.Validator=function(){var t,e=function(t){return a.A.isString(t)},i=function(t){return Math.abs(t-Math.round(t))<o.A.eps},r=function(t){return i(t)&&t>0},n=function(t){return t>0},l=function(t){return t>=0},h={},u={attractorDistance:l,color:e,display:function(t){return"html"===t||"internal"===t},doAdvancedPlot:!1,draft:!1,drawLabels:!1,drawZero:!1,face:function(t){return a.A.exists(s.A.normalizePointFace(t))},factor:a.A.isNumber,fillColor:e,fillOpacity:a.A.isNumber,firstArrow:!1,fontSize:i,dash:i,gridX:a.A.isNumber,gridY:a.A.isNumber,hasGrid:!1,highlightFillColor:e,highlightFillOpacity:a.A.isNumber,highlightStrokeColor:e,highlightStrokeOpacity:a.A.isNumber,insertTicks:!1,lastArrow:!1,layer:function(t){return i(t)&&t>=0},majorHeight:i,minorHeight:i,minorTicks:l,minTicksDistance:r,numberPointsHigh:r,numberPointsLow:r,opacity:a.A.isNumber,radius:a.A.isNumber,RDPsmoothing:!1,renderer:function(t){return"vml"===t||"svg"===t||"canvas"===t||"no"===t},right:function(t){return/^[0-9]+px$/.test(t)},showCopyright:!1,showInfobox:!1,showNavigation:!1,size:l,snapSizeX:n,snapSizeY:n,snapWidth:a.A.isNumber,snapToGrid:!1,snatchDistance:l,straightFirst:!1,straightLast:!1,stretch:!1,strokeColor:e,strokeOpacity:a.A.isNumber,strokeWidth:l,takeFirst:!1,takeSizeFromFile:!1,to10:!1,toOrigin:!1,translateTo10:!1,translateToOrigin:!1,useASCIIMathML:!1,useDirection:!1,useMathJax:!1,withLabel:!1,withTicks:!1,zoom:!1};for(t in u)u.hasOwnProperty(t)&&(h[t.toLowerCase()]=u[t]);return h}(),s.A.normalizePointFace=function(t){return{cross:"x",x:"x",circle:"o",o:"o",square:"[]","[]":"[]",plus:"+","+":"+",divide:"|","|":"|",minus:"-","-":"-",diamond:"<>","<>":"<>",diamond2:"<<>>","<<>>":"<<>>",triangleup:"^",A:"^",a:"^","^":"^",triangledown:"v",v:"v",triangleleft:"<","<":"<",triangleright:">",">":">"}[t]},s.A.useStandardOptions=function(t){var e,i,o,n,a=s.A.Options,l=t.hasGrid;for(e in t.options.grid.hasGrid=a.grid.hasGrid,t.options.grid.gridX=a.grid.gridX,t.options.grid.gridY=a.grid.gridY,t.options.grid.gridColor=a.grid.gridColor,t.options.grid.gridOpacity=a.grid.gridOpacity,t.options.grid.gridDash=a.grid.gridDash,t.options.grid.snapToGrid=a.grid.snapToGrid,t.options.grid.snapSizeX=a.grid.SnapSizeX,t.options.grid.snapSizeY=a.grid.SnapSizeY,t.takeSizeFromFile=a.takeSizeFromFile,n=function(t,e){t.visProp.fillcolor=e.fillColor,t.visProp.highlightfillcolor=e.highlightFillColor,t.visProp.strokecolor=e.strokeColor,t.visProp.highlightstrokecolor=e.highlightStrokeColor},t.objects)if(t.objects.hasOwnProperty(e))if((o=t.objects[e]).elementClass===r.A.OBJECT_CLASS_POINT)n(o,a.point);else if(o.elementClass===r.A.OBJECT_CLASS_LINE)for(n(o,a.line),i=0;i<o.ticks.length;i++)o.ticks[i].majorTicks=a.line.ticks.majorTicks,o.ticks[i].minTicksDistance=a.line.ticks.minTicksDistance,o.ticks[i].visProp.minorheight=a.line.ticks.minorHeight,o.ticks[i].visProp.majorheight=a.line.ticks.majorHeight;else o.elementClass===r.A.OBJECT_CLASS_CIRCLE?n(o,a.circle):o.type===r.A.OBJECT_TYPE_ANGLE?n(o,a.angle):o.type===r.A.OBJECT_TYPE_ARC?n(o,a.arc):o.type===r.A.OBJECT_TYPE_POLYGON?n(o,a.polygon):o.type===r.A.OBJECT_TYPE_CONIC?n(o,a.conic):o.type===r.A.OBJECT_TYPE_CURVE?n(o,a.curve):o.type===r.A.OBJECT_TYPE_SECTOR&&(o.arc.visProp.fillcolor=a.sector.fillColor,o.arc.visProp.highlightfillcolor=a.sector.highlightFillColor,o.arc.visProp.fillopacity=a.sector.fillOpacity,o.arc.visProp.highlightfillopacity=a.sector.highlightFillOpacity);t.fullUpdate(),l&&!t.hasGrid?t.removeGrids(t):!l&&t.hasGrid&&t.create("grid",[])},s.A.useBlackWhiteOptions=function(t){var e=s.A.Options;e.point.fillColor=n.A.rgb2bw(e.point.fillColor),e.point.highlightFillColor=n.A.rgb2bw(e.point.highlightFillColor),e.point.strokeColor=n.A.rgb2bw(e.point.strokeColor),e.point.highlightStrokeColor=n.A.rgb2bw(e.point.highlightStrokeColor),e.line.fillColor=n.A.rgb2bw(e.line.fillColor),e.line.highlightFillColor=n.A.rgb2bw(e.line.highlightFillColor),e.line.strokeColor=n.A.rgb2bw(e.line.strokeColor),e.line.highlightStrokeColor=n.A.rgb2bw(e.line.highlightStrokeColor),e.circle.fillColor=n.A.rgb2bw(e.circle.fillColor),e.circle.highlightFillColor=n.A.rgb2bw(e.circle.highlightFillColor),e.circle.strokeColor=n.A.rgb2bw(e.circle.strokeColor),e.circle.highlightStrokeColor=n.A.rgb2bw(e.circle.highlightStrokeColor),e.arc.fillColor=n.A.rgb2bw(e.arc.fillColor),e.arc.highlightFillColor=n.A.rgb2bw(e.arc.highlightFillColor),e.arc.strokeColor=n.A.rgb2bw(e.arc.strokeColor),e.arc.highlightStrokeColor=n.A.rgb2bw(e.arc.highlightStrokeColor),e.polygon.fillColor=n.A.rgb2bw(e.polygon.fillColor),e.polygon.highlightFillColor=n.A.rgb2bw(e.polygon.highlightFillColor),e.sector.fillColor=n.A.rgb2bw(e.sector.fillColor),e.sector.highlightFillColor=n.A.rgb2bw(e.sector.highlightFillColor),e.curve.strokeColor=n.A.rgb2bw(e.curve.strokeColor),e.grid.gridColor=n.A.rgb2bw(e.grid.gridColor),s.A.useStandardOptions(t)},s.A.Options.normalizePointFace=s.A.normalizePointFace,e.A=s.A.Options},86:function(t,e,i){var s=i(443),r=i(561),o=i(188);s.A.GeonextParser={replacePow:function(t){var e,i,s,r,o,n,a,l,h,u,c,d;for(u=(t=t.replace(/(\s*)\^(\s*)/g,"^")).indexOf("^"),r=-1;u>=0&&u<t.length-1;){if(r===u)throw new Error("JSXGraph: Error while parsing expression '"+t+"'");if(r=u,h=t.slice(0,u),c=t.slice(u+1),")"===h.charAt(h.length-1)){for(e=1,i=h.length-2;i>=0&&e>0;)")"===(s=h.charAt(i))?e++:"("===s&&(e-=1),i-=1;if(0!==e)throw new Error("JSXGraph: Missing '(' in expression");for(o="",a=h.substring(0,i+1),l=i;l>=0&&a.slice(l,l+1).match(/([\w.]+)/);)o=RegExp.$1+o,l-=1;o=(o+=h.substring(i+1,h.length)).replace(/([()+*%^\-/\][])/g,"\\$1")}else o="[\\w\\.]+";if(c.match(/^([\w.]*\()/)){for(e=1,i=RegExp.$1.length;i<c.length&&e>0;)")"===(s=c.charAt(i))?e-=1:"("===s&&(e+=1),i+=1;if(0!==e)throw new Error("JSXGraph: Missing ')' in expression");n=(n=c.substring(0,i)).replace(/([()+*%^\-/[\]])/g,"\\$1")}else n="[\\w\\.]+";d=new RegExp("("+o+")\\^("+n+")"),u=(t=t.replace(d,"pow($1,$2)")).indexOf("^")}return t},replaceIf:function(t){var e,i,s,r,o,n,a,l,h,u="",c=null,d=null,p=null;if((s=t.indexOf("If("))<0)return t;for(t=t.replace(/""/g,"0");s>=0;){for(e=t.slice(0,s),i=t.slice(s+3),o=1,r=0,n=-1,a=-1;r<i.length&&o>0;)")"===(l=i.charAt(r))?o-=1:"("===l?o+=1:","===l&&1===o&&(n<0?n=r:a=r),r+=1;if(h=i.slice(0,r-1),i=i.slice(r),n<0)return"";if(a<0)return"";c=h.slice(0,n),d=h.slice(n+1,a),p=h.slice(a+1),u+=e+"(("+(c=this.replaceIf(c))+")?("+(d=this.replaceIf(d))+"):("+(p=this.replaceIf(p))+"))",c=null,d=null,s=(t=i).indexOf("If(")}return u+=i},replaceNameById:function(t,e,i){var s,r,o,n,a=0,l=["X","Y","L","V"],h=function(t){return i?"$('"+t+"')":t};for(n=0;n<l.length;n++)for(a=t.indexOf(l[n]+"(");a>=0;)a>=0&&(s=t.indexOf(")",a+2))>=0&&(r=(r=t.slice(a+2,s)).replace(/\\(['"])?/g,"$1"),(o=e.elementsByName[r])&&(t=t.slice(0,a+2)+(i?"$('":"")+h(o.id)+t.slice(s))),s=t.indexOf(")",a+2),a=t.indexOf(l[n]+"(",s);for(a=t.indexOf("Dist(");a>=0;)a>=0&&(s=t.indexOf(",",a+5))>=0&&(r=(r=t.slice(a+5,s)).replace(/\\(['"])?/g,"$1"),(o=e.elementsByName[r])&&(t=t.slice(0,a+5)+h(o.id)+t.slice(s))),s=t.indexOf(",",a+5),a=t.indexOf(",",s),(s=t.indexOf(")",a+1))>=0&&(r=(r=t.slice(a+1,s)).replace(/\\(['"])?/g,"$1"),(o=e.elementsByName[r])&&(t=t.slice(0,a+1)+h(o.id)+t.slice(s))),s=t.indexOf(")",a+1),a=t.indexOf("Dist(",s);for(l=["Deg","Rad"],n=0;n<l.length;n++)for(a=t.indexOf(l[n]+"(");a>=0;)a>=0&&(s=t.indexOf(",",a+4))>=0&&(r=(r=t.slice(a+4,s)).replace(/\\(['"])?/g,"$1"),(o=e.elementsByName[r])&&(t=t.slice(0,a+4)+h(o.id)+t.slice(s))),s=t.indexOf(",",a+4),a=t.indexOf(",",s),(s=t.indexOf(",",a+1))>=0&&(r=(r=t.slice(a+1,s)).replace(/\\(['"])?/g,"$1"),(o=e.elementsByName[r])&&(t=t.slice(0,a+1)+h(o.id)+t.slice(s))),s=t.indexOf(",",a+1),a=t.indexOf(",",s),(s=t.indexOf(")",a+1))>=0&&(r=(r=t.slice(a+1,s)).replace(/\\(['"])?/g,"$1"),(o=e.elementsByName[r])&&(t=t.slice(0,a+1)+h(o.id)+t.slice(s))),s=t.indexOf(")",a+1),a=t.indexOf(l[n]+"(",s);return t},replaceIdByObj:function(t){var e=/(X|Y|L)\(([\w_]+)\)/g;return t=t.replace(e,"$('$2').$1()"),e=/(V)\(([\w_]+)\)/g,t=t.replace(e,"$('$2').Value()"),e=/(Dist)\(([\w_]+),([\w_]+)\)/g,t=t.replace(e,"dist($('$2'), $('$3'))"),e=/(Deg)\(([\w_]+),([ \w[\w_]+),([\w_]+)\)/g,t=t.replace(e,"deg($('$2'),$('$3'),$('$4'))"),e=/Rad\(([\w_]+),([\w_]+),([\w_]+)\)/g,t=t.replace(e,"rad($('$1'),$('$2'),$('$3'))"),e=/N\((.+)\)/g,t=t.replace(e,"($1)")},geonext2JS:function(t,e){var i,s,r,o=["Abs","ACos","ASin","ATan","Ceil","Cos","Exp","Factorial","Floor","Log","Max","Min","Random","Round","Sin","Sqrt","Tan","Trunc"],n=["abs","acos","asin","atan","ceil","cos","exp","factorial","floor","log","max","min","random","round","sin","sqrt","tan","ceil"];for(s=t=(t=(t=t.replace(/</g,"<")).replace(/>/g,">")).replace(/&/g,"&"),s=this.replaceNameById(s,e),s=this.replaceIf(s),s=this.replacePow(s),s=this.replaceIdByObj(s),r=0;r<o.length;r++)i=new RegExp(["(\\W|^)(",o[r],")"].join(""),"ig"),s=s.replace(i,["$1",n[r]].join(""));return s=(s=(s=(s=(s=s.replace(/True/g,"true")).replace(/False/g,"false")).replace(/fasle/g,"false")).replace(/Pi/g,"PI")).replace(/"/g,"'")},findDependencies:function(t,e,i){var s,n,a,l;for(n in o.A.exists(i)||(i=t.board),s=i.elementsByName)s.hasOwnProperty(n)&&n!==t.name&&(s[n].elementClass===r.A.OBJECT_CLASS_TEXT&&o.A.evaluate(s[n].visProp.islabel)||(l=(l=n.replace(/\[/g,"\\[")).replace(/\]/g,"\\]"),a=new RegExp("\\(([\\w\\[\\]'_ ]+,)*("+l+")(,[\\w\\[\\]'_ ]+)*\\)","g"),e.search(a)>=0&&s[n].addChild(t)))},gxt2jc:function(t,e){var i;return i=t=(t=(t=t.replace(/</g,"<")).replace(/>/g,">")).replace(/&/g,"&"),i=(i=(i=(i=this.replaceNameById(i,e,!0)).replace(/True/g,"true")).replace(/False/g,"false")).replace(/fasle/g,"false")}},e.A=s.A.GeonextParser},428:function(__unused_webpack_module,__webpack_exports__,__webpack_require__){var _jxg_js__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(443),_base_constants_js__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(561),_base_text_js__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(925),_math_math_js__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(477),_math_ia_js__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(733),_math_geometry_js__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(571),_math_statistics_js__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__(588),_utils_type_js__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__(188),_utils_env_js__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__(133);Object.create||(Object.create=function(t,e){if("object"!=typeof t&&"function"!=typeof t)throw new TypeError("Object prototype may only be an Object: "+t);if(null===t)throw new Error("This browser's implementation of Object.create is a shim and doesn't support 'null' as the first argument.");if(void 0!==e)throw new Error("This browser's implementation of Object.create is a shim and doesn't support a second argument.");function i(){}return i.prototype=t,new i});var priv={modules:{math:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A,"math/geometry":_math_geometry_js__WEBPACK_IMPORTED_MODULE_5__.A,"math/statistics":_math_statistics_js__WEBPACK_IMPORTED_MODULE_6__.A,"math/numerics":_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.Numerics}},r,_ccache;_jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.JessieCode=function(t,e){this.scope={id:0,hasChild:!0,args:[],locals:{},context:null,previous:null},this.scopes=[],this.scopes.push(this.scope),this.dpstack=[[]],this.pscope=0,this.propstack=[{}],this.propscope=0,this.lhs=[],this.isLHS=!1,this.warnLog="jcwarn",this.$log=[],this.builtIn=this.defineBuiltIn(),this.operands=this.getPossibleOperands(),this.board=null,this.forceValueCall=!1,this.lineToElement={},this.parCurLine=1,this.parCurColumn=0,this.line=1,this.col=1,_jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.CA&&(this.CA=new _jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.CA(this.node,this.createNode,this)),this.code="","string"==typeof t&&this.parse(t,e)},_jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.extend(_jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.JessieCode.prototype,{node:function(t,e,i){return{type:t,value:e,children:i}},createNode:function(t,e,i){var s,r=this.node(t,e,[]);for(s=2;s<arguments.length;s++)r.children.push(arguments[s]);return"node_const"===r.type&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isNumber(r.value)&&(r.isMath=!0),r.line=this.parCurLine,r.col=this.parCurColumn,r},pushScope:function(t){var e={args:t,locals:{},context:null,previous:this.scope};return this.scope.hasChild=!0,this.scope=e,e.id=this.scopes.push(e)-1,e},popScope:function(){var t=this.scope.previous;return this.scope=null!==t?t:this.scope,this.scope},getElementById:function(t){return this.board.objects[t]},log:function(){this.$log.push(arguments),"object"==typeof console&&console.log&&console.log.apply(console,arguments)},creator:(_ccache={},(r=function(t){var e,i;return"function"==typeof _ccache[this.board.id+t]?e=_ccache[this.board.id+t]:(i=this,(e=function(e,s){var r;return void 0===(r=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(s)?s:{}).name&&void 0===r.id&&(r.name=0!==i.lhs[i.scope.id]?i.lhs[i.scope.id]:""),i.board.create(t,e,r)}).creator=!0,_ccache[this.board.id+t]=e),e}).clearCache=function(){_ccache={}},r),letvar:function(t,e){this.builtIn[t]&&this._warn('"'+t+'" is a predefined value.'),this.scope.locals[t]=e},isLocalVariable:function(t){for(var e=this.scope;null!==e;){if(_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(e.locals[t]))return e;e=e.previous}return null},isParameter:function(t){for(var e=this.scope;null!==e;){if(_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.indexOf(e.args,t)>-1)return e;e=e.previous}return null},isCreator:function(t){return!!_jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.elements[t]},isMathMethod:function(t){return"E"!==t&&!!Math[t]},isBuiltIn:function(t){return!!this.builtIn[t]},getvar:function(t,e,i){var s;if(e=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.def(e,!1),null!==(s=this.isLocalVariable(t)))return s.locals[t];if("$board"===t||"EULER"===t||"PI"===t)return this.builtIn[t];if(i){if(this.isBuiltIn(t))return this.builtIn[t];if(this.isMathMethod(t))return Math[t];if(this.isCreator(t))return this.creator(t)}return e||(s=this.board.select(t))===t?void 0:s},resolve:function(t){for(var e=this.scope;null!==e;){if(_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(e.locals[t]))return e.locals[t];e=e.previous}},getvarJS:function(t,e,i){var s,r="";return e=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.def(e,!1),i=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.def(i,!1),null!==this.isParameter(t)?t:null===this.isLocalVariable(t)||i?this.isCreator(t)?"(function () { var a = Array.prototype.slice.call(arguments, 0), props = "+(i?"a.pop()":"{}")+"; return $jc$.board.create.apply($jc$.board, ['"+t+"'].concat([a, props])); })":(i&&this._error("Syntax error (attribute values are allowed with element creators only)"),this.isBuiltIn(t)?(r=this.builtIn[t].src||this.builtIn[t],_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isNumber(r)||r.match(/board\.select/)?r:(t=r.split(".").pop(),_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(this.board.mathLib)&&null!==(s=new RegExp("^Math."+t)).exec(r)?r.replace(s,"$jc$.board.mathLib."+t):_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(this.board.mathLibJXG)&&null!==(s=new RegExp("^JXG.Math.")).exec(r)?r.replace(s,"$jc$.board.mathLibJXG."):r)):this.isMathMethod(t)?"$jc$.board.mathLib."+t:e?"":(_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isId(this.board,t)?(r="$jc$.board.objects['"+t+"']","slider"===this.board.objects[t].elType&&(r+=".Value()")):_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isName(this.board,t)?(r="$jc$.board.elementsByName['"+t+"']","slider"===this.board.elementsByName[t].elType&&(r+=".Value()")):_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isGroup(this.board,t)&&(r="$jc$.board.groups['"+t+"']"),r)):"$jc$.resolve('"+t+"')"},makeMap:function(t){return t.isMap=!0,t},functionCodeJS:function(t){var e=t.children[0].join(", "),i="",s="";return"op_map"===t.value&&(i="{ return ",s=" }"),"function ("+e+") {\nvar $oldscope$ = $jc$.scope;\n$jc$.scope = $jc$.scopes["+this.scope.id+"];\nvar r = (function () "+i+this.compile(t.children[1],!0)+s+")();\n$jc$.scope = $oldscope$;\nreturn r;\n}"},defineFunction:function(node){var fun,i,that=this,list=node.children[0],scope=this.pushScope(list),_that;if(this.board.options.jc.compile){for(this.isLHS=!1,i=0;i<list.length;i++)scope.locals[list[i]]=list[i];this.replaceNames(node.children[1]),fun=function(jc){var fun,str="var f = function($jc$) { return "+jc.functionCodeJS(node)+"}; f;";try{for(fun=eval(str)(jc),scope.argtypes=[],i=0;i<list.length;i++)scope.argtypes.push(that.resolveType(list[i],node));return fun}catch(t){return jc._warn("error compiling function\n\n"+str+"\n\n"+t.toString()),function(){}}}(this),this.popScope()}else fun=function(t,e,i){return function(){var s,r;for(r=e.scope,e.scope=e.scopes[i],s=0;s<t.length;s++)e.scope.locals[t[s]]=arguments[s];return s=e.execute(node.children[1]),e.scope=r,s}}(list,this,scope.id);return fun.node=node,fun.scope=scope,fun.toJS=fun.toString,fun.toString=(_that=this,function(){return _that.compile(_that.replaceIDs(_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.deepCopy(node)))}),fun.deps={},this.collectDependencies(node.children[1],node.children[0],fun.deps),fun},mergeAttributes:function(t){var e,i={};for(e=0;e<arguments.length;e++)i=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.deepCopy(i,arguments[e],!0);return i},setProp:function(t,e,i){var s,r,o={};t.elementClass!==_base_constants_js__WEBPACK_IMPORTED_MODULE_1__.A.OBJECT_CLASS_POINT||"X"!==e&&"Y"!==e?t.elementClass!==_base_constants_js__WEBPACK_IMPORTED_MODULE_1__.A.OBJECT_CLASS_TEXT||"X"!==e&&"Y"!==e?t.type&&t.elementClass&&t.visProp?_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t[t.methodMap[e]])&&"function"!=typeof t[t.methodMap[e]]?t[t.methodMap[e]]=i:(o[e]=i,t.setAttribute(o)):t[e]=i:("number"==typeof i?t[e]=function(){return i}:"function"==typeof i?(t.isDraggable=!1,t[e]=i):"string"==typeof i&&(t.isDraggable=!1,t[e]=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.createFunction(i,this.board),t[e+"jc"]=i),t[e].origin=i,this.board.update()):(e=e.toLowerCase(),t.isDraggable&&"number"==typeof i?(s="x"===e?i:t.X(),r="y"===e?i:t.Y(),t.setPosition(_base_constants_js__WEBPACK_IMPORTED_MODULE_1__.A.COORDS_BY_USER,[s,r])):!t.isDraggable||"function"!=typeof i&&"string"!=typeof i?t.isDraggable||(s="x"===e?i:t.XEval.origin,r="y"===e?i:t.YEval.origin,t.addConstraint([s,r])):(s="x"===e?i:t.coords.usrCoords[1],r="y"===e?i:t.coords.usrCoords[2],t.addConstraint([s,r])),this.board.update())},_genericParse:function(t,e,i,s){var r,o,n,a,l=t.replace(/\r\n/g,"\n").split("\n"),h=[];s||(this.code+=t+"\n"),_base_text_js__WEBPACK_IMPORTED_MODULE_2__.A&&(o=_base_text_js__WEBPACK_IMPORTED_MODULE_2__.A.prototype.setText,_base_text_js__WEBPACK_IMPORTED_MODULE_2__.A.prototype.setText=_base_text_js__WEBPACK_IMPORTED_MODULE_2__.A.prototype.setTextJessieCode);try{for(_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(i)||(i=!1),r=0;r<l.length;r++)i&&(l[r]=_jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.GeonextParser.geonext2JS(l[r],this.board)),h.push(l[r]);switch(t=h.join("\n"),n=parser.parse(t),this.CA&&(n=this.CA.expandDerivatives(n,null,n),n=this.CA.removeTrivialNodes(n)),e){case"parse":a=this.execute(n);break;case"manipulate":a=this.compile(n);break;case"getAst":a=n;break;default:a=!1}}catch(t){throw t}finally{_base_text_js__WEBPACK_IMPORTED_MODULE_2__.A&&(_base_text_js__WEBPACK_IMPORTED_MODULE_2__.A.prototype.setText=o)}return a},parse:function(t,e,i){return this._genericParse(t,"parse",e,i)},manipulate:function(t,e,i){return this._genericParse(t,"manipulate",e,i)},getAST:function(t,e,i){return this._genericParse(t,"getAst",e,i)},snippet:function(t,e,i,s,r){var o;return e=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.def(e,!0),i=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.def(i,""),s=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.def(s,!1),this.forceValueCall=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.def(r,!0),o=(e?" function ("+i+") { return ":"")+t+(e?"; }":"")+";",this.parse(o,s,!0)},replaceIDs:function(t){var e,i;if(t.replaced&&(i=this.board.objects[t.children[1][0].value],_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(i)&&""!==i.name&&(t.type="node_var",t.value=i.name,t.children.length=0,delete t.replaced)),_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isArray(t))for(e=0;e<t.length;e++)t[e]=this.replaceIDs(t[e]);if(t.children)for(e=t.children.length;e>0;e--)_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t.children[e-1])&&(t.children[e-1]=this.replaceIDs(t.children[e-1]));return t},replaceNames:function(t,e){var i,s,r=!1;if(void 0!==e&&(r=e),s=t.value,"node_op"===t.type&&"op_lhs"===s&&1===t.children.length?this.isLHS=!0:"node_var"===t.type&&(this.isLHS?this.letvar(s,!0):!_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(this.getvar(s,!0))&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(this.board.elementsByName[s])&&(r&&"slider"!==this.board.elementsByName[s].elType&&(r=!1),t=this.createReplacementNode(t,r))),_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isArray(t))for(i=0;i<t.length;i++)t[i]=this.replaceNames(t[i],r);if(t.children)for(this.forceValueCall&&("op_execfun"===t.value&&"V"!==t.children[0].value&&"$"!==t.children[0].value&&(_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(Math[t.children[0].value])||_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A[t.children[0].value]))&&"node_var"===t.children[1][0].type||"op_return"===t.value&&1===t.children.length&&"node_var"===t.children[0].type)&&(r=!0),i=t.children.length;i>0;i--)_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t.children[i-1])&&(t.children[i-1]=this.replaceNames(t.children[i-1],r));return"node_op"===t.type&&"op_lhs"===t.value&&1===t.children.length&&(this.isLHS=!1),t},createReplacementNode:function(t,e){var i=t.value,s=this.board.elementsByName[i];return(t=this.createNode("node_op","op_execfun",this.createNode("node_var",!0===e?"$value":"$"),[this.createNode("node_str",s.id)])).replaced=!0,t},collectDependencies:function(t,e,i){var s,r,o,n;if(_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isArray(t))for(n=t.length,s=0;s<n;s++)this.collectDependencies(t[s],e,i);else if(r=t.value,"node_var"===t.type&&e.indexOf(r)<0&&(o=this.getvar(r))&&o.visProp&&o.elType&&o.elementClass&&o.id&&"slider"===o.elType&&(i[o.id]=o),"node_op"===t.type&&"op_execfun"===t.value&&t.children.length>1&&("$"===t.children[0].value||"$value"===t.children[0].value)&&t.children[1].length>0&&(i[o=t.children[1][0].value]=this.board.objects[o]),t.children)for(s=t.children.length;s>0;s--)_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t.children[s-1])&&this.collectDependencies(t.children[s-1],e,i)},resolveProperty:function(t,e,i){return i=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.def(i,!1),t&&t.methodMap&&(_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t.subs)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t.subs[e])?t=t.subs:_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t.methodMap[e])?e=t.methodMap[e]:(t=t.visProp,e=e.toLowerCase())),_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isFunction(t)&&this._error("Accessing function properties is not allowed."),_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t)||this._error(t+" is not an object"),_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t[e])||this._error("unknown property "+e),i&&"function"==typeof t[e]?function(){return t[e].apply(t,arguments)}:t[e]},resolveType:function(t,e){var i,s;if(_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isArray(e))for(i=0;i<e.length;i++)if("any"!==(s=this.resolveType(t,e[i])))return s;if("node_op"===e.type&&"op_execfun"===e.value&&"node_var"===e.children[0].type&&e.children[0].value===t)return"function";if("node_op"===e.type){for(i=0;i<e.children.length;i++)if("node_var"===e.children[0].type&&e.children[0].value===t&&("op_add"===e.value||"op_sub"===e.value||"op_mul"===e.value||"op_div"===e.value||"op_mod"===e.value||"op_exp"===e.value||"op_neg"===e.value))return"any";for(i=0;i<e.children.length;i++)if("any"!==(s=this.resolveType(t,e.children[i])))return s}return"any"},getLHS:function(t){var e;if("node_var"===t.type)e={o:this.scope.locals,what:t.value};else if("node_op"===t.type&&"op_property"===t.value)e={o:this.execute(t.children[0]),what:t.children[1]};else{if("node_op"!==t.type||"op_extvalue"!==t.value)throw new Error("Syntax error: Invalid left-hand side of assignment.");e={o:this.execute(t.children[0]),what:this.execute(t.children[1])}}return e},getLHSCompiler:function(t,e){var i;if("node_var"===t.type)i=t.value;else if("node_op"===t.type&&"op_property"===t.value)i=[this.compile(t.children[0],e),"'"+t.children[1]+"'"];else{if("node_op"!==t.type||"op_extvalue"!==t.value)throw new Error("Syntax error: Invalid left-hand side of assignment.");i=[this.compile(t.children[0],e),"node_const"===t.children[1].type?t.children[1].value:this.compile(t.children[1],e)]}return i},execute:function(t){var e,i,s,r,o,n,a,l,h,u,c=[];if(e=0,!t)return e;switch(this.line=t.line,this.col=t.col,t.type){case"node_op":switch(t.value){case"op_none":t.children[0]&&this.execute(t.children[0]),t.children[1]&&(e=this.execute(t.children[1]));break;case"op_assign":i=this.getLHS(t.children[0]),this.lhs[this.scope.id]=i.what,i.o.type&&i.o.elementClass&&i.o.methodMap&&"label"===i.what&&this._error("Left-hand side of assignment is read-only."),e=this.execute(t.children[1]),i.o!==this.scope.locals||_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isArray(i.o)&&"number"==typeof i.what?this.setProp(i.o,i.what,e):this.letvar(i.what,e),this.lhs[this.scope.id]=0;break;case"op_if":this.execute(t.children[0])&&(e=this.execute(t.children[1]));break;case"op_conditional":case"op_if_else":e=this.execute(t.children[0])?this.execute(t.children[1]):this.execute(t.children[2]);break;case"op_while":for(;this.execute(t.children[0]);)this.execute(t.children[1]);break;case"op_do":do{this.execute(t.children[0])}while(this.execute(t.children[1]));break;case"op_for":for(this.execute(t.children[0]);this.execute(t.children[1]);this.execute(t.children[2]))this.execute(t.children[3]);break;case"op_proplst":t.children[0]&&this.execute(t.children[0]),t.children[1]&&this.execute(t.children[1]);break;case"op_emptyobject":e={};break;case"op_proplst_val":this.propstack.push({}),this.propscope++,this.execute(t.children[0]),e=this.propstack[this.propscope],this.propstack.pop(),this.propscope--;break;case"op_prop":this.propstack[this.propscope][t.children[0]]=this.execute(t.children[1]);break;case"op_array":for(e=[],o=t.children[0].length,s=0;s<o;s++)e.push(this.execute(t.children[0][s]));break;case"op_extvalue":e=this.execute(t.children[0]),e="number"==typeof(s=this.execute(t.children[1]))&&Math.abs(Math.round(s)-s)<_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.eps?e[s]:undefined;break;case"op_return":if(0!==this.scope)return this.execute(t.children[0]);this._error("Unexpected return.");break;case"op_map":t.children[1].isMath||"node_var"===t.children[1].type||this._error("execute: In a map only function calls and mathematical expressions are allowed."),(l=this.defineFunction(t)).isMap=!0,e=l;break;case"op_function":(l=this.defineFunction(t)).isMap=!1,e=l;break;case"op_execfun":if(this.dpstack.push([]),this.pscope++,n=t.children[1],_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t.children[2]))if(t.children[3])for(a=t.children[2],h={},s=0;s<a.length;s++)h=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.deepCopy(h,this.execute(a[s]),!0);else h=this.execute(t.children[2]);for(t.children[0]._isFunctionName=!0,l=this.execute(t.children[0]),delete t.children[0]._isFunctionName,u=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(l)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(l.sc)?l.sc:this,!l.creator&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t.children[2])&&this._error("Unexpected value. Only element creators are allowed to have a value after the function call."),s=0;s<n.length;s++)_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(l.scope)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(l.scope.argtypes)&&"function"===l.scope.argtypes[s]?(n[s]._isFunctionName=!0,c[s]=this.execute(n[s]),delete n[s]._isFunctionName):c[s]=this.execute(n[s]),this.dpstack[this.pscope].push({line:t.children[1][s].line,col:t.children[1][s].ecol});if("function"!=typeof l||l.creator)if("function"==typeof l&&l.creator){r=this.line;try{for((e=l(c,h)).jcLineStart=r,e.jcLineEnd=t.eline,s=r;s<=t.line;s++)this.lineToElement[s]=e;e.debugParents=this.dpstack[this.pscope]}catch(t){this._error(t.toString())}}else this._error("Function '"+l+"' is undefined.");else e=l.apply(u,c);this.dpstack.pop(),this.pscope--;break;case"op_property":r=this.execute(t.children[0]),i=t.children[1],e=this.resolveProperty(r,i,!1),_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(e)&&["number","string","boolean"].indexOf(typeof e)<0&&(e.sc=r);break;case"op_use":this._warn("Use of the 'use' operator is deprecated."),this.use(t.children[0].toString());break;case"op_delete":this._warn("Use of the 'delete' operator is deprecated. Please use the remove() function."),i=this.getvar(t.children[0]),e=this.del(i);break;case"op_eq":e=this.execute(t.children[0])==this.execute(t.children[1]);break;case"op_neq":e=this.execute(t.children[0])!=this.execute(t.children[1]);break;case"op_approx":e=Math.abs(this.execute(t.children[0])-this.execute(t.children[1]))<_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.eps;break;case"op_gt":e=this.execute(t.children[0])>this.execute(t.children[1]);break;case"op_lt":e=this.execute(t.children[0])<this.execute(t.children[1]);break;case"op_geq":e=this.execute(t.children[0])>=this.execute(t.children[1]);break;case"op_leq":e=this.execute(t.children[0])<=this.execute(t.children[1]);break;case"op_or":e=this.execute(t.children[0])||this.execute(t.children[1]);break;case"op_and":e=this.execute(t.children[0])&&this.execute(t.children[1]);break;case"op_not":e=!this.execute(t.children[0]);break;case"op_add":e=this.add(this.execute(t.children[0]),this.execute(t.children[1]));break;case"op_sub":e=this.sub(this.execute(t.children[0]),this.execute(t.children[1]));break;case"op_div":e=this.div(this.execute(t.children[0]),this.execute(t.children[1]));break;case"op_mod":e=this.mod(this.execute(t.children[0]),this.execute(t.children[1]),!0);break;case"op_mul":e=this.mul(this.execute(t.children[0]),this.execute(t.children[1]));break;case"op_exp":e=this.pow(this.execute(t.children[0]),this.execute(t.children[1]));break;case"op_neg":e=this.neg(this.execute(t.children[0]))}break;case"node_var":e=this.getvar(t.value,!1,t._isFunctionName);break;case"node_const":e=null===t.value?null:Number(t.value);break;case"node_const_bool":e=t.value;break;case"node_str":e=t.value.replace(/\\(.)/g,"$1")}return e},compile:function(t,e){var i,s,r,o="";if(_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(e)||(e=!1),!t)return o;switch(t.type){case"node_op":switch(t.value){case"op_none":t.children[0]&&(o=this.compile(t.children[0],e)),t.children[1]&&(o+=this.compile(t.children[1],e));break;case"op_assign":e?(i=this.getLHSCompiler(t.children[0],e),_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isArray(i)?o="$jc$.setProp("+i[0]+", "+i[1]+", "+this.compile(t.children[1],e)+");\n":(this.isLocalVariable(i)!==this.scope&&(this.scope.locals[i]=!0),o="$jc$.scopes["+this.scope.id+"].locals['"+i+"'] = "+this.compile(t.children[1],e)+";\n")):o=(i=this.compile(t.children[0]))+" = "+this.compile(t.children[1],e)+";\n";break;case"op_if":o=" if ("+this.compile(t.children[0],e)+") "+this.compile(t.children[1],e);break;case"op_if_else":o=" if ("+this.compile(t.children[0],e)+")"+this.compile(t.children[1],e),o+=" else "+this.compile(t.children[2],e);break;case"op_conditional":o="(("+this.compile(t.children[0],e)+")?("+this.compile(t.children[1],e),o+="):("+this.compile(t.children[2],e)+"))";break;case"op_while":o=" while ("+this.compile(t.children[0],e)+") {\n"+this.compile(t.children[1],e)+"}\n";break;case"op_do":o=" do {\n"+this.compile(t.children[0],e)+"} while ("+this.compile(t.children[1],e)+");\n";break;case"op_for":o=" for ("+this.compile(t.children[0],e)+this.compile(t.children[1],e)+"; "+this.compile(t.children[2],e).slice(0,-2)+") {\n"+this.compile(t.children[3],e)+"\n}\n";break;case"op_proplst":t.children[0]&&(o=this.compile(t.children[0],e)+", "),o+=this.compile(t.children[1],e);break;case"op_prop":o=t.children[0]+": "+this.compile(t.children[1],e);break;case"op_emptyobject":o=e?"{}":"<< >>";break;case"op_proplst_val":o=this.compile(t.children[0],e);break;case"op_array":for(r=[],s=0;s<t.children[0].length;s++)r.push(this.compile(t.children[0][s],e));o="["+r.join(", ")+"]";break;case"op_extvalue":o=this.compile(t.children[0],e)+"["+this.compile(t.children[1],e)+"]";break;case"op_return":o=" return "+this.compile(t.children[0],e)+";\n";break;case"op_map":t.children[1].isMath||"node_var"===t.children[1].type||this._error("compile: In a map only function calls and mathematical expressions are allowed."),r=t.children[0],o=e?" $jc$.makeMap(function ("+r.join(", ")+") { return "+this.compile(t.children[1],e)+"; })":"map ("+r.join(", ")+") -> "+this.compile(t.children[1],e);break;case"op_function":r=t.children[0],this.pushScope(r),o=e?this.functionCodeJS(t):" function ("+r.join(", ")+") "+this.compile(t.children[1],e),this.popScope();break;case"op_execfunmath":console.log("op_execfunmath: TODO"),o="-1";break;case"op_execfun":if(t.children[2]){for(r=[],s=0;s<t.children[2].length;s++)r.push(this.compile(t.children[2][s],e));i=e?"$jc$.mergeAttributes("+r.join(", ")+")":r.join(", ")}for(t.children[0].withProps=!!t.children[2],r=[],s=0;s<t.children[1].length;s++)r.push(this.compile(t.children[1][s],e));o=this.compile(t.children[0],e)+"("+r.join(", ")+(t.children[2]&&e?", "+i:"")+")"+(t.children[2]&&!e?" "+i:""),e&&(o+="\n"),e&&"$"===t.children[0].value&&(o="$jc$.board.objects["+this.compile(t.children[1][0],e)+"]");break;case"op_property":o=e&&"X"!==t.children[1]&&"Y"!==t.children[1]?"$jc$.resolveProperty("+this.compile(t.children[0],e)+", '"+t.children[1]+"', true)":this.compile(t.children[0],e)+"."+t.children[1];break;case"op_use":this._warn("Use of the 'use' operator is deprecated."),o=e?"$jc$.use('":"use('",o+=t.children[0].toString()+"');";break;case"op_delete":this._warn("Use of the 'delete' operator is deprecated. Please use the remove() function."),o=e?"$jc$.del(":"remove(",o+=this.compile(t.children[0],e)+")";break;case"op_eq":o="("+this.compile(t.children[0],e)+" === "+this.compile(t.children[1],e)+")";break;case"op_neq":o="("+this.compile(t.children[0],e)+" !== "+this.compile(t.children[1],e)+")";break;case"op_approx":o="("+this.compile(t.children[0],e)+" ~= "+this.compile(t.children[1],e)+")";break;case"op_gt":o=e?"$jc$.gt("+this.compile(t.children[0],e)+", "+this.compile(t.children[1],e)+")":"("+this.compile(t.children[0],e)+" > "+this.compile(t.children[1],e)+")";break;case"op_lt":o=e?"$jc$.lt("+this.compile(t.children[0],e)+", "+this.compile(t.children[1],e)+")":"("+this.compile(t.children[0],e)+" < "+this.compile(t.children[1],e)+")";break;case"op_geq":o=e?"$jc$.geq("+this.compile(t.children[0],e)+", "+this.compile(t.children[1],e)+")":"("+this.compile(t.children[0],e)+" >= "+this.compile(t.children[1],e)+")";break;case"op_leq":o=e?"$jc$.leq("+this.compile(t.children[0],e)+", "+this.compile(t.children[1],e)+")":"("+this.compile(t.children[0],e)+" <= "+this.compile(t.children[1],e)+")";break;case"op_or":o="("+this.compile(t.children[0],e)+" || "+this.compile(t.children[1],e)+")";break;case"op_and":o="("+this.compile(t.children[0],e)+" && "+this.compile(t.children[1],e)+")";break;case"op_not":o="!("+this.compile(t.children[0],e)+")";break;case"op_add":o=e?"$jc$.add("+this.compile(t.children[0],e)+", "+this.compile(t.children[1],e)+")":"("+this.compile(t.children[0],e)+" + "+this.compile(t.children[1],e)+")";break;case"op_sub":o=e?"$jc$.sub("+this.compile(t.children[0],e)+", "+this.compile(t.children[1],e)+")":"("+this.compile(t.children[0],e)+" - "+this.compile(t.children[1],e)+")";break;case"op_div":o=e?"$jc$.div("+this.compile(t.children[0],e)+", "+this.compile(t.children[1],e)+")":"("+this.compile(t.children[0],e)+" / "+this.compile(t.children[1],e)+")";break;case"op_mod":o=e?"$jc$.mod("+this.compile(t.children[0],e)+", "+this.compile(t.children[1],e)+", true)":"("+this.compile(t.children[0],e)+" % "+this.compile(t.children[1],e)+")";break;case"op_mul":o=e?"$jc$.mul("+this.compile(t.children[0],e)+", "+this.compile(t.children[1],e)+")":"("+this.compile(t.children[0],e)+" * "+this.compile(t.children[1],e)+")";break;case"op_exp":o=e?"$jc$.pow("+this.compile(t.children[0],e)+", "+this.compile(t.children[1],e)+")":"("+this.compile(t.children[0],e)+"^"+this.compile(t.children[1],e)+")";break;case"op_neg":o=e?"$jc$.neg("+this.compile(t.children[0],e)+")":"(-"+this.compile(t.children[0],e)+")"}break;case"node_var":o=e?this.getvarJS(t.value,!1,t.withProps):t.value;break;case"node_const":case"node_const_bool":o=t.value;break;case"node_str":o="'"+t.value+"'"}return t.needsBrackets&&(o="{\n"+o+" }\n"),t.needsAngleBrackets&&(o=e?"{\n"+o+" }\n":"<< "+o+" >>\n"),o},getName:function(t,e){var i="";return _utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t.getName)?(i=t.getName(),_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(i)&&""!==i||!e||(i=t.id)):e&&(i=t.id),i},X:function(t){return t.X()},Y:function(t){return t.Y()},V:function(t){return t.Value()},L:function(t){return t.L()},area:function(t){return _utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t.Area)||this._error("Error: Can't calculate area."),t.Area()},perimeter:function(t){return _utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t.Perimeter)||this._error("Error: Can't calculate perimeter."),t.Perimeter()},dist:function(t,e){return _utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t.Dist)||this._error("Error: Can't calculate distance."),t.Dist(e)},radius:function(t){return _utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t.Radius)||this._error("Error: Can't calculate radius."),t.Radius()},slope:function(t){return _utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(t.Slope)||this._error("Error: Can't calculate slope."),t.Slope()},add:function(t,e){var i,s,r;if(t=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.evalSlider(t),e=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.evalSlider(e),_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(t)||_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(e))r=_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.add(t,e);else if(_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isArray(t)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isArray(e))for(s=Math.min(t.length,e.length),r=[],i=0;i<s;i++)r[i]=t[i]+e[i];else _utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isNumber(t)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isNumber(e)?r=t+e:_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isString(t)||_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isString(e)?r=t.toString()+e.toString():this._error("Operation + not defined on operands "+typeof t+" and "+typeof e);return r},sub:function(t,e){var i,s,r;if(t=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.evalSlider(t),e=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.evalSlider(e),_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(t)||_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(e))r=_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.sub(t,e);else if(_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isArray(t)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isArray(e))for(s=Math.min(t.length,e.length),r=[],i=0;i<s;i++)r[i]=t[i]-e[i];else _utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isNumber(t)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isNumber(e)?r=t-e:this._error("Operation - not defined on operands "+typeof t+" and "+typeof e);return r},neg:function(t){var e,i,s;if(t=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.evalSlider(t),_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(t))s=_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.negative(t);else if(_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isArray(t))for(i=t.length,s=[],e=0;e<i;e++)s[e]=-t[e];else _utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isNumber(t)?s=-t:this._error("Unary operation - not defined on operand "+typeof t);return s},mul:function(t,e){var i,s,r;if(t=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.evalSlider(t),e=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.evalSlider(e),_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isArray(t)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isNumber(e)&&(i=t,e=t=e),_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(t)||_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(e))r=_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.mul(t,e);else if(_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isArray(t)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isArray(e))s=Math.min(t.length,e.length),r=_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.innerProduct(t,e,s);else if(_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isNumber(t)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isArray(e))for(s=e.length,r=[],i=0;i<s;i++)r[i]=t*e[i];else _utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isNumber(t)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isNumber(e)?r=t*e:this._error("Operation * not defined on operands "+typeof t+" and "+typeof e);return r},div:function(t,e){var i,s,r;if(t=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.evalSlider(t),e=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.evalSlider(e),_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(t)||_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(e))r=_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.div(t,e);else if(_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isArray(t)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isNumber(e))for(s=t.length,r=[],i=0;i<s;i++)r[i]=t[i]/e;else _utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isNumber(t)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isNumber(e)?r=t/e:this._error("Operation * not defined on operands "+typeof t+" and "+typeof e);return r},mod:function(t,e){var i,s,r;if(t=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.evalSlider(t),e=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.evalSlider(e),_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(t)||_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(e))return _math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.fmod(t,e);if(_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isArray(t)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isNumber(e))for(s=t.length,r=[],i=0;i<s;i++)r[i]=_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.mod(t[i],e,!0);else _utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isNumber(t)&&_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.isNumber(e)?r=_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.mod(t,e,!0):this._error("Operation * not defined on operands "+typeof t+" and "+typeof e);return r},pow:function(t,e){return t=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.evalSlider(t),e=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.evalSlider(e),_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(t)||_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(e)?_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.pow(t,e):_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.pow(t,e)},lt:function(t,e){return _math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(t)||_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(e)?_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.lt(t,e):t<e},leq:function(t,e){return _math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(t)||_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(e)?_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.leq(t,e):t<=e},gt:function(t,e){return _math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(t)||_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(e)?_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.gt(t,e):t>e},geq:function(t,e){return _math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(t)||_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.isInterval(e)?_math_ia_js__WEBPACK_IMPORTED_MODULE_4__.A.geq(t,e):t>=e},randint:function(t,e,i){return _utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(i)||(i=1),Math.round(Math.random()*(e-t)/i)*i+t},DDD:function(t){console.log("Dummy derivative function. This should never appear!")},ifthen:function(t,e,i){return t?e:i},del:function(t){"object"==typeof t&&_jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.exists(t.type)&&_jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.exists(t.elementClass)&&this.board.removeObject(t)},eval:function(t){return _jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.evaluate(t)},use:function(t){var e,i,s=!1;if("string"==typeof t){for(e in _jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.boards)if(_jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.boards.hasOwnProperty(e)&&_jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.boards[e].container===t){i=_jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.boards[e],s=!0;break}}else i=t,s=!0;s?(this.board=i,this.builtIn.$board=i,this.builtIn.$board.src="$jc$.board"):this._error("Board '"+t+"' not found!")},findSymbol:function(t,e){var i,s;for(s=-1===(e=_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.def(e,-1))?this.scope:this.scopes[e];null!==s;){for(i in s.locals)if(s.locals.hasOwnProperty(i)&&s.locals[i]===t)return[i,s];s=s.previous}return[]},importModule:function(t){return priv.modules[t.toLowerCase()]},defineBuiltIn:function(){var t=this,e={PI:Math.PI,EULER:Math.E,D:t.DDD,X:t.X,Y:t.Y,V:t.V,Value:t.V,L:t.L,Length:t.L,acosh:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.acosh,acot:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.acot,asinh:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.asinh,binomial:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.binomial,cbrt:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.cbrt,cosh:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.cosh,cot:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.cot,deg:_math_geometry_js__WEBPACK_IMPORTED_MODULE_5__.A.trueAngle,A:t.area,area:t.area,Area:t.area,perimeter:t.perimeter,Perimeter:t.perimeter,dist:t.dist,Dist:t.dist,R:t.radius,radius:t.radius,Radius:t.radius,erf:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.erf,erfc:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.erfc,erfi:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.erfi,factorial:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.factorial,gcd:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.gcd,lb:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.log2,lcm:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.lcm,ld:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.log2,lg:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.log10,ln:Math.log,log:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.log,log10:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.log10,log2:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.log2,ndtr:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.ndtr,ndtri:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.ndtri,nthroot:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.nthroot,pow:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.pow,rad:_math_geometry_js__WEBPACK_IMPORTED_MODULE_5__.A.rad,ratpow:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.ratpow,trunc:_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.trunc,sinh:_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A.sinh,slope:t.slope,Slope:t.slope,randint:t.randint,IfThen:t.ifthen,import:t.importModule,eval:t.eval,use:t.use,remove:t.del,$:t.getElementById,$value:function(e){return t.getElementById(e).Value()},getName:t.getName,name:t.getName,$board:t.board,$log:t.log};return e.rad.sc=_math_geometry_js__WEBPACK_IMPORTED_MODULE_5__.A,e.deg.sc=_math_geometry_js__WEBPACK_IMPORTED_MODULE_5__.A,e.factorial.sc=_math_math_js__WEBPACK_IMPORTED_MODULE_3__.A,e.X.src="$jc$.X",e.Y.src="$jc$.Y",e.V.src="$jc$.V",e.Value.src="$jc$.V",e.L.src="$jc$.L",e.Length.src="$jc$.L",e.acosh.src="JXG.Math.acosh",e.acot.src="JXG.Math.acot",e.asinh.src="JXG.Math.asinh",e.binomial.src="JXG.Math.binomial",e.cbrt.src="JXG.Math.cbrt",e.cot.src="JXG.Math.cot",e.cosh.src="JXG.Math.cosh",e.deg.src="JXG.Math.Geometry.trueAngle",e.erf.src="JXG.Math.erf",e.erfc.src="JXG.Math.erfc",e.erfi.src="JXG.Math.erfi",e.A.src="$jc$.area",e.area.src="$jc$.area",e.Area.src="$jc$.area",e.perimeter.src="$jc$.perimeter",e.Perimeter.src="$jc$.perimeter",e.dist.src="$jc$.dist",e.Dist.src="$jc$.dist",e.R.src="$jc$.radius",e.radius.src="$jc$.radius",e.Radius.src="$jc$.radius",e.factorial.src="JXG.Math.factorial",e.gcd.src="JXG.Math.gcd",e.lb.src="JXG.Math.log2",e.lcm.src="JXG.Math.lcm",e.ld.src="JXG.Math.log2",e.lg.src="JXG.Math.log10",e.ln.src="Math.log",e.log.src="JXG.Math.log",e.log10.src="JXG.Math.log10",e.log2.src="JXG.Math.log2",e.ndtr.src="JXG.Math.ndtr",e.ndtri.src="JXG.Math.ndtri",e.nthroot.src="JXG.Math.nthroot",e.pow.src="JXG.Math.pow",e.rad.src="JXG.Math.Geometry.rad",e.ratpow.src="JXG.Math.ratpow",e.trunc.src="JXG.trunc",e.sinh.src="JXG.Math.sinh",e.slope.src="$jc$.slope",e.Slope.src="$jc$.slope",e.randint.src="$jc$.randint",e.import.src="$jc$.importModule",e.eval.src="$jc$.eval",e.use.src="$jc$.use",e.remove.src="$jc$.del",e.IfThen.src="$jc$.ifthen",e.$.src="(function (n) { return $jc$.board.select(n); })",e.$value.src="(function (n) { return $jc$.board.select(n).Value(); })",e.getName.src="$jc$.getName",e.name.src="$jc$.getName",e.$board&&(e.$board.src="$jc$.board"),e.$log.src="$jc$.log",e=_jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.merge(e,t._addedBuiltIn)},_addedBuiltIn:{},addBuiltIn:function(t,e){if(_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(this.builtIn)){if(_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(this.builtIn[t]))return;this.builtIn[t]=e,this.builtIn[t].src="$jc$."+t}_utils_type_js__WEBPACK_IMPORTED_MODULE_7__.A.exists(this._addedBuiltIn[t])||(this._addedBuiltIn[t]=e,this._addedBuiltIn[t].src="$jc$."+t,_jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.JessieCode.prototype[t]=e)},getPossibleOperands:function(){var t,e,i,s,r,o,n,a,l,h,u,c,d,p,_=["E"],f=this.builtIn||this.defineBuiltIn(),A=Math;for(d=function(t,e){return t.toLowerCase().localeCompare(e.toLowerCase())},p=function(t,e){var i=null;if("jc"===e)i=f[t];else{if("Math"!==e)return;i=A[t]}if(!(_.indexOf(t)>=0))return _jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.isFunction(i)?{name:t,type:"function",numParams:i.length,origin:e}:_jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.isNumber(i)?{name:t,type:"constant",value:i,origin:e}:void(t.startsWith("$")||void 0!==i&&console.error("undefined type",i))},t=Object.getOwnPropertyNames(f).sort(d),e=Object.getOwnPropertyNames(A).sort(d),i=[],s=0,r=0;s<t.length||r<e.length;)t[s]===e[r]?(o=p(e[r],"Math"),_jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.exists(o)&&i.push(o),s++,r++):!_jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.exists(e[r])||t[s].toLowerCase().localeCompare(e[r].toLowerCase())<0?(o=p(t[s],"jc"),_jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.exists(o)&&i.push(o),s++):(o=p(e[r],"Math"),_jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.exists(o)&&i.push(o),r++);for(l=[],h=[],u=[],c={},n=i.length,s=0;s<n;s++){switch((a=i[s]).type){case"function":l.push(a.name),"jc"===a.origin&&h.push(a.name);break;case"constant":u.push(a.name)}c[a.name]=a}return{all:c,list:i,functions:l,functions_jessiecode:h,constants:u}},_debug:function(t){"object"==typeof console?console.log(t):_utils_env_js__WEBPACK_IMPORTED_MODULE_8__.A.isBrowser&&document&&null!==document.getElementById("debug")&&(document.getElementById("debug").innerHTML+=t+"<br />")},_error:function(t){var e=new Error("Error("+this.line+"): "+t);throw e.line=this.line,e},_warn:function(t){"object"==typeof console?console.log("Warning("+this.line+"): "+t):_utils_env_js__WEBPACK_IMPORTED_MODULE_8__.A.isBrowser&&document&&null!==document.getElementById(this.warnLog)&&(document.getElementById(this.warnLog).innerHTML+="Warning("+this.line+"): "+t+"<br />")},_log:function(t){"object"!=typeof window&&"object"==typeof self&&self.postMessage?self.postMessage({type:"log",msg:"Log: "+t.toString()}):console.log("Log: ",arguments)}});var parser=function(){var t=function(t,e,i,s){for(i=i||{},s=t.length;s--;i[t[s]]=e);return i},e=[2,14],i=[1,13],s=[1,37],r=[1,14],o=[1,15],n=[1,21],a=[1,16],l=[1,17],h=[1,33],u=[1,18],c=[1,19],d=[1,12],p=[1,59],_=[1,60],f=[1,58],A=[1,46],g=[1,48],m=[1,49],y=[1,50],b=[1,51],v=[1,52],C=[1,53],P=[1,54],x=[1,45],E=[1,38],O=[1,39],M=[5,7,8,14,15,16,17,19,20,21,23,26,27,50,51,58,65,74,75,76,77,78,79,80,82,91,93],S=[5,7,8,12,14,15,16,17,19,20,21,23,26,27,50,51,58,65,74,75,76,77,78,79,80,82,91,93],w=[8,10,16,32,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,57,64,65,66,83,86],T=[2,48],N=[1,72],j=[10,16,32,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,57,66,83,86],D=[1,78],k=[8,10,16,32,34,35,37,41,42,43,45,46,47,48,50,51,53,54,55,57,64,65,66,83,86],R=[1,82],L=[8,10,16,32,34,35,37,39,45,46,47,48,50,51,53,54,55,57,64,65,66,83,86],B=[1,83],I=[1,84],Y=[1,85],X=[8,10,16,32,34,35,37,39,41,42,43,50,51,53,54,55,57,64,65,66,83,86],U=[1,89],F=[1,90],z=[1,91],J=[1,92],G=[1,97],H=[8,10,16,32,34,35,37,39,41,42,43,45,46,47,48,53,54,55,57,64,65,66,83,86],W=[1,103],V=[1,104],$=[8,10,16,32,34,35,37,39,41,42,43,45,46,47,48,50,51,57,64,65,66,83,86],K=[1,105],q=[1,106],Z=[1,107],Q=[1,126],tt=[1,139],et=[83,86],it=[1,150],st=[10,66,86],rt=[8,10,16,20,32,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,57,64,65,66,82,83,86],ot=[1,167],nt=[10,86],at={trace:function(){},yy:{},symbols_:{error:2,Program:3,StatementList:4,EOF:5,IfStatement:6,IF:7,"(":8,Expression:9,")":10,Statement:11,ELSE:12,LoopStatement:13,WHILE:14,FOR:15,";":16,DO:17,UnaryStatement:18,USE:19,IDENTIFIER:20,DELETE:21,ReturnStatement:22,RETURN:23,EmptyStatement:24,StatementBlock:25,"{":26,"}":27,ExpressionStatement:28,AssignmentExpression:29,ConditionalExpression:30,LeftHandSideExpression:31,"=":32,LogicalORExpression:33,"?":34,":":35,LogicalANDExpression:36,"||":37,EqualityExpression:38,"&&":39,RelationalExpression:40,"==":41,"!=":42,"~=":43,AdditiveExpression:44,"<":45,">":46,"<=":47,">=":48,MultiplicativeExpression:49,"+":50,"-":51,UnaryExpression:52,"*":53,"/":54,"%":55,ExponentExpression:56,"^":57,"!":58,MemberExpression:59,CallExpression:60,PrimaryExpression:61,FunctionExpression:62,MapExpression:63,".":64,"[":65,"]":66,BasicLiteral:67,ObjectLiteral:68,ArrayLiteral:69,NullLiteral:70,BooleanLiteral:71,StringLiteral:72,NumberLiteral:73,NULL:74,TRUE:75,FALSE:76,STRING:77,NUMBER:78,NAN:79,INFINITY:80,ElementList:81,"<<":82,">>":83,PropertyList:84,Property:85,",":86,PropertyName:87,Arguments:88,AttributeList:89,Attribute:90,FUNCTION:91,ParameterDefinitionList:92,MAP:93,"->":94,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",7:"IF",8:"(",10:")",12:"ELSE",14:"WHILE",15:"FOR",16:";",17:"DO",19:"USE",20:"IDENTIFIER",21:"DELETE",23:"RETURN",26:"{",27:"}",32:"=",34:"?",35:":",37:"||",39:"&&",41:"==",42:"!=",43:"~=",45:"<",46:">",47:"<=",48:">=",50:"+",51:"-",53:"*",54:"/",55:"%",57:"^",58:"!",64:".",65:"[",66:"]",74:"NULL",75:"TRUE",76:"FALSE",77:"STRING",78:"NUMBER",79:"NAN",80:"INFINITY",82:"<<",83:">>",86:",",91:"FUNCTION",93:"MAP",94:"->"},productions_:[0,[3,2],[6,5],[6,7],[13,5],[13,9],[13,7],[18,2],[18,2],[22,2],[22,3],[24,1],[25,3],[4,2],[4,0],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[11,1],[28,2],[9,1],[29,1],[29,3],[30,1],[30,5],[33,1],[33,3],[36,1],[36,3],[38,1],[38,3],[38,3],[38,3],[40,1],[40,3],[40,3],[40,3],[40,3],[44,1],[44,3],[44,3],[49,1],[49,3],[49,3],[49,3],[56,1],[56,3],[52,1],[52,2],[52,2],[52,2],[31,1],[31,1],[59,1],[59,1],[59,1],[59,3],[59,4],[61,1],[61,1],[61,1],[61,1],[61,3],[67,1],[67,1],[67,1],[67,1],[70,1],[71,1],[71,1],[72,1],[73,1],[73,1],[73,1],[69,2],[69,3],[68,2],[68,3],[84,1],[84,3],[85,3],[87,1],[87,1],[87,1],[60,2],[60,3],[60,2],[60,4],[60,3],[88,2],[88,3],[89,1],[89,3],[90,1],[90,1],[81,1],[81,3],[62,4],[62,5],[63,5],[63,6],[92,1],[92,3]],performAction:function(t,e,i,s,r,o,n){var a=o.length-1;switch(r){case 1:return o[a-1];case 2:this.$=lt.createNode(ht(n[a-4]),"node_op","op_if",o[a-2],o[a]);break;case 3:this.$=lt.createNode(ht(n[a-6]),"node_op","op_if_else",o[a-4],o[a-2],o[a]);break;case 4:this.$=lt.createNode(ht(n[a-4]),"node_op","op_while",o[a-2],o[a]);break;case 5:this.$=lt.createNode(ht(n[a-8]),"node_op","op_for",o[a-6],o[a-4],o[a-2],o[a]);break;case 6:this.$=lt.createNode(ht(n[a-6]),"node_op","op_do",o[a-5],o[a-2]);break;case 7:this.$=lt.createNode(ht(n[a-1]),"node_op","op_use",o[a]);break;case 8:this.$=lt.createNode(ht(n[a-1]),"node_op","op_delete",o[a]);break;case 9:this.$=lt.createNode(ht(n[a-1]),"node_op","op_return",void 0);break;case 10:this.$=lt.createNode(ht(n[a-2]),"node_op","op_return",o[a-1]);break;case 11:case 14:this.$=lt.createNode(ht(n[a]),"node_op","op_none");break;case 12:this.$=o[a-1],this.$.needsBrackets=!0;break;case 13:this.$=lt.createNode(ht(n[a-1]),"node_op","op_none",o[a-1],o[a]);break;case 15:case 16:case 17:case 18:case 19:case 20:case 21:case 23:case 24:case 26:case 28:case 30:case 32:case 36:case 41:case 44:case 48:case 50:case 52:case 54:case 55:case 56:case 58:case 62:case 81:case 84:case 85:case 86:this.$=o[a];break;case 22:case 65:case 93:this.$=o[a-1];break;case 25:this.$=lt.createNode(ht(n[a-2]),"node_op","op_assign",o[a-2],o[a]),this.$.isMath=!1;break;case 27:this.$=lt.createNode(ht(n[a-4]),"node_op","op_conditional",o[a-4],o[a-2],o[a]),this.$.isMath=!1;break;case 29:this.$=lt.createNode(ht(n[a-2]),"node_op","op_or",o[a-2],o[a]),this.$.isMath=!1;break;case 31:this.$=lt.createNode(ht(n[a-2]),"node_op","op_and",o[a-2],o[a]),this.$.isMath=!1;break;case 33:this.$=lt.createNode(ht(n[a-2]),"node_op","op_eq",o[a-2],o[a]),this.$.isMath=!1;break;case 34:this.$=lt.createNode(ht(n[a-2]),"node_op","op_neq",o[a-2],o[a]),this.$.isMath=!1;break;case 35:this.$=lt.createNode(ht(n[a-2]),"node_op","op_approx",o[a-2],o[a]),this.$.isMath=!1;break;case 37:this.$=lt.createNode(ht(n[a-2]),"node_op","op_lt",o[a-2],o[a]),this.$.isMath=!1;break;case 38:this.$=lt.createNode(ht(n[a-2]),"node_op","op_gt",o[a-2],o[a]),this.$.isMath=!1;break;case 39:this.$=lt.createNode(ht(n[a-2]),"node_op","op_leq",o[a-2],o[a]),this.$.isMath=!1;break;case 40:this.$=lt.createNode(ht(n[a-2]),"node_op","op_geq",o[a-2],o[a]),this.$.isMath=!1;break;case 42:this.$=lt.createNode(ht(n[a-2]),"node_op","op_add",o[a-2],o[a]),this.$.isMath=!0;break;case 43:this.$=lt.createNode(ht(n[a-2]),"node_op","op_sub",o[a-2],o[a]),this.$.isMath=!0;break;case 45:this.$=lt.createNode(ht(n[a-2]),"node_op","op_mul",o[a-2],o[a]),this.$.isMath=!0;break;case 46:this.$=lt.createNode(ht(n[a-2]),"node_op","op_div",o[a-2],o[a]),this.$.isMath=!0;break;case 47:this.$=lt.createNode(ht(n[a-2]),"node_op","op_mod",o[a-2],o[a]),this.$.isMath=!0;break;case 49:this.$=lt.createNode(ht(n[a-2]),"node_op","op_exp",o[a-2],o[a]),this.$.isMath=!0;break;case 51:this.$=lt.createNode(ht(n[a-1]),"node_op","op_not",o[a]),this.$.isMath=!1;break;case 53:this.$=lt.createNode(ht(n[a-1]),"node_op","op_neg",o[a]),this.$.isMath=!0;break;case 57:case 63:case 64:case 66:case 67:case 68:case 97:this.$=o[a],this.$.isMath=!1;break;case 59:case 91:this.$=lt.createNode(ht(n[a-2]),"node_op","op_property",o[a-2],o[a]),this.$.isMath=!0;break;case 60:case 90:this.$=lt.createNode(ht(n[a-3]),"node_op","op_extvalue",o[a-3],o[a-1]),this.$.isMath=!0;break;case 61:this.$=lt.createNode(ht(n[a]),"node_var",o[a]);break;case 69:this.$=o[a],this.$.isMath=!0;break;case 70:this.$=lt.createNode(ht(n[a]),"node_const",null);break;case 71:this.$=lt.createNode(ht(n[a]),"node_const_bool",!0);break;case 72:this.$=lt.createNode(ht(n[a]),"node_const_bool",!1);break;case 73:this.$=lt.createNode(ht(n[a]),"node_str",o[a].substring(1,o[a].length-1));break;case 74:this.$=lt.createNode(ht(n[a]),"node_const",parseFloat(o[a]));break;case 75:this.$=lt.createNode(ht(n[a]),"node_const",NaN);break;case 76:this.$=lt.createNode(ht(n[a]),"node_const",1/0);break;case 77:this.$=lt.createNode(ht(n[a-1]),"node_op","op_array",[]);break;case 78:this.$=lt.createNode(ht(n[a-2]),"node_op","op_array",o[a-1]);break;case 79:this.$=lt.createNode(ht(n[a-1]),"node_op","op_emptyobject",{}),this.$.needsAngleBrackets=!0;break;case 80:this.$=lt.createNode(ht(n[a-2]),"node_op","op_proplst_val",o[a-1]),this.$.needsAngleBrackets=!0;break;case 82:this.$=lt.createNode(ht(n[a-2]),"node_op","op_proplst",o[a-2],o[a]);break;case 83:this.$=lt.createNode(ht(n[a-2]),"node_op","op_prop",o[a-2],o[a]);break;case 87:case 89:this.$=lt.createNode(ht(n[a-1]),"node_op","op_execfun",o[a-1],o[a]),this.$.isMath=!0;break;case 88:this.$=lt.createNode(ht(n[a-2]),"node_op","op_execfun",o[a-2],o[a-1],o[a],!0),this.$.isMath=!1;break;case 92:this.$=[];break;case 94:case 98:case 104:this.$=[o[a]];break;case 95:case 99:case 105:this.$=o[a-2].concat(o[a]);break;case 96:this.$=lt.createNode(ht(n[a]),"node_var",o[a]),this.$.isMath=!0;break;case 100:this.$=lt.createNode(ht(n[a-3]),"node_op","op_function",[],o[a]),this.$.isMath=!1;break;case 101:this.$=lt.createNode(ht(n[a-4]),"node_op","op_function",o[a-2],o[a]),this.$.isMath=!1;break;case 102:this.$=lt.createNode(ht(n[a-4]),"node_op","op_map",[],o[a]);break;case 103:this.$=lt.createNode(ht(n[a-5]),"node_op","op_map",o[a-3],o[a])}},table:[t([5,7,8,14,15,16,17,19,20,21,23,26,50,51,58,65,74,75,76,77,78,79,80,82,91,93],e,{3:1,4:2}),{1:[3]},{5:[1,3],6:6,7:i,8:s,9:20,11:4,13:7,14:r,15:o,16:n,17:a,18:8,19:l,20:h,21:u,22:9,23:c,24:11,25:5,26:d,28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{1:[2,1]},t(M,[2,13]),t(S,[2,15]),t(S,[2,16]),t(S,[2,17]),t(S,[2,18]),t(S,[2,19]),t(S,[2,20]),t(S,[2,21]),t([7,8,14,15,16,17,19,20,21,23,26,27,50,51,58,65,74,75,76,77,78,79,80,82,91,93],e,{4:61}),{8:[1,62]},{8:[1,63]},{8:[1,64]},{6:6,7:i,8:s,9:20,11:65,13:7,14:r,15:o,16:n,17:a,18:8,19:l,20:h,21:u,22:9,23:c,24:11,25:5,26:d,28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{20:[1,66]},{20:[1,67]},{8:s,9:69,16:[1,68],20:h,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{16:[1,70]},t(S,[2,11]),t(w,[2,23]),t(w,[2,24]),t([8,10,16,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,64,65,66,83,86],T,{32:[1,71],57:N}),t([8,10,16,32,35,39,41,42,43,45,46,47,48,50,51,53,54,55,57,64,65,66,83,86],[2,26],{34:[1,73],37:[1,74]}),t(j,[2,54],{88:77,8:D,64:[1,75],65:[1,76]}),t(j,[2,55],{88:79,8:D,64:[1,81],65:[1,80]}),t(k,[2,28],{39:R}),t(w,[2,56]),t(w,[2,57]),t(w,[2,58]),t(L,[2,30],{41:B,42:I,43:Y}),t(w,[2,61]),t(w,[2,62]),t(w,[2,63]),t(w,[2,64]),{8:s,9:86,20:h,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:[1,87]},{8:[1,88]},t(X,[2,32],{45:U,46:F,47:z,48:J}),t(w,[2,66]),t(w,[2,67]),t(w,[2,68]),t(w,[2,69]),{20:G,72:98,73:99,77:b,78:v,79:C,80:P,83:[1,93],84:94,85:95,87:96},{8:s,20:h,29:102,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,66:[1,100],67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,81:101,82:x,91:E,93:O},t(H,[2,36],{50:W,51:V}),t(w,[2,70]),t(w,[2,71]),t(w,[2,72]),t(w,[2,73]),t(w,[2,74]),t(w,[2,75]),t(w,[2,76]),t($,[2,41],{53:K,54:q,55:Z}),t(w,[2,44]),t(w,[2,50]),{8:s,20:h,31:109,50:p,51:_,52:108,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,20:h,31:109,50:p,51:_,52:110,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,20:h,31:109,50:p,51:_,52:111,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{6:6,7:i,8:s,9:20,11:4,13:7,14:r,15:o,16:n,17:a,18:8,19:l,20:h,21:u,22:9,23:c,24:11,25:5,26:d,27:[1,112],28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,9:113,20:h,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,9:114,20:h,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,9:115,20:h,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{14:[1,116]},t(S,[2,7]),t(S,[2,8]),t(S,[2,9]),{16:[1,117]},t(S,[2,22]),{8:s,20:h,29:118,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,20:h,31:109,50:p,51:_,52:119,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,20:h,29:120,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,20:h,31:109,36:121,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{20:[1,122]},{8:s,9:123,20:h,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},t(w,[2,87],{89:124,90:125,68:127,20:Q,82:x}),{8:s,10:[1,128],20:h,29:102,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,81:129,82:x,91:E,93:O},t(w,[2,89]),{8:s,9:130,20:h,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{20:[1,131]},{8:s,20:h,31:109,38:132,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,20:h,31:109,40:133,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,20:h,31:109,40:134,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,20:h,31:109,40:135,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{10:[1,136]},{10:[1,137],20:tt,92:138},{10:[1,140],20:tt,92:141},{8:s,20:h,31:109,44:142,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,20:h,31:109,44:143,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,20:h,31:109,44:144,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,20:h,31:109,44:145,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},t(w,[2,79]),{83:[1,146],86:[1,147]},t(et,[2,81]),{35:[1,148]},{35:[2,84]},{35:[2,85]},{35:[2,86]},t(w,[2,77]),{66:[1,149],86:it},t(st,[2,98]),{8:s,20:h,31:109,49:151,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,20:h,31:109,49:152,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,20:h,31:109,50:p,51:_,52:153,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,20:h,31:109,50:p,51:_,52:154,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,20:h,31:109,50:p,51:_,52:155,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},t(w,[2,51]),t([8,10,16,32,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,64,65,66,83,86],T,{57:N}),t(w,[2,52]),t(w,[2,53]),t([5,7,8,10,12,14,15,16,17,19,20,21,23,26,27,32,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,57,58,64,65,66,74,75,76,77,78,79,80,82,83,86,91,93],[2,12]),{10:[1,156]},{10:[1,157]},{16:[1,158]},{8:[1,159]},t(S,[2,10]),t(w,[2,25]),t(w,[2,49]),{35:[1,160]},t(k,[2,29],{39:R}),t(w,[2,59]),{66:[1,161]},t([8,10,16,32,34,35,37,39,41,42,43,45,46,47,48,50,51,53,54,55,57,64,65,66,83],[2,88],{86:[1,162]}),t(w,[2,94]),t(w,[2,96]),t(w,[2,97]),t(rt,[2,92]),{10:[1,163],86:it},{66:[1,164]},t(w,[2,91]),t(L,[2,31],{41:B,42:I,43:Y}),t(X,[2,33],{45:U,46:F,47:z,48:J}),t(X,[2,34],{45:U,46:F,47:z,48:J}),t(X,[2,35],{45:U,46:F,47:z,48:J}),t(w,[2,65]),{25:165,26:d},{10:[1,166],86:ot},t(nt,[2,104]),{94:[1,168]},{10:[1,169],86:ot},t(H,[2,37],{50:W,51:V}),t(H,[2,38],{50:W,51:V}),t(H,[2,39],{50:W,51:V}),t(H,[2,40],{50:W,51:V}),t(w,[2,80]),{20:G,72:98,73:99,77:b,78:v,79:C,80:P,85:170,87:96},{8:s,20:h,29:171,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},t(w,[2,78]),{8:s,20:h,29:172,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},t($,[2,42],{53:K,54:q,55:Z}),t($,[2,43],{53:K,54:q,55:Z}),t(w,[2,45]),t(w,[2,46]),t(w,[2,47]),{6:6,7:i,8:s,9:20,11:173,13:7,14:r,15:o,16:n,17:a,18:8,19:l,20:h,21:u,22:9,23:c,24:11,25:5,26:d,28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{6:6,7:i,8:s,9:20,11:174,13:7,14:r,15:o,16:n,17:a,18:8,19:l,20:h,21:u,22:9,23:c,24:11,25:5,26:d,28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,9:175,20:h,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,9:176,20:h,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,20:h,29:177,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},t(w,[2,60]),{20:Q,68:127,82:x,90:178},t(rt,[2,93]),t(w,[2,90]),t(w,[2,100]),{25:179,26:d},{20:[1,180]},{8:s,9:181,20:h,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{94:[1,182]},t(et,[2,82]),t(et,[2,83]),t(st,[2,99]),t(M,[2,2],{12:[1,183]}),t(S,[2,4]),{16:[1,184]},{10:[1,185]},t(w,[2,27]),t(w,[2,95]),t(w,[2,101]),t(nt,[2,105]),t(w,[2,102]),{8:s,9:186,20:h,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{6:6,7:i,8:s,9:20,11:187,13:7,14:r,15:o,16:n,17:a,18:8,19:l,20:h,21:u,22:9,23:c,24:11,25:5,26:d,28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{8:s,9:188,20:h,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},{16:[1,189]},t(w,[2,103]),t(S,[2,3]),{10:[1,190]},t(S,[2,6]),{6:6,7:i,8:s,9:20,11:191,13:7,14:r,15:o,16:n,17:a,18:8,19:l,20:h,21:u,22:9,23:c,24:11,25:5,26:d,28:10,29:22,30:23,31:24,33:25,36:28,38:32,40:40,44:47,49:55,50:p,51:_,52:56,56:57,58:f,59:26,60:27,61:29,62:30,63:31,65:A,67:34,68:35,69:36,70:41,71:42,72:43,73:44,74:g,75:m,76:y,77:b,78:v,79:C,80:P,82:x,91:E,93:O},t(S,[2,5])],defaultActions:{3:[2,1],97:[2,84],98:[2,85],99:[2,86]},parseError:function(t,e){if(!e.recoverable){var i=new Error(t);throw i.hash=e,i}this.trace(t)},parse:function(t){var e=this,i=[0],s=[null],r=[],o=this.table,n="",a=0,l=0,h=0,u=r.slice.call(arguments,1),c=Object.create(this.lexer),d={yy:{}};for(var p in this.yy)Object.prototype.hasOwnProperty.call(this.yy,p)&&(d.yy[p]=this.yy[p]);c.setInput(t,d.yy),d.yy.lexer=c,d.yy.parser=this,void 0===c.yylloc&&(c.yylloc={});var _=c.yylloc;r.push(_);var f=c.options&&c.options.ranges;"function"==typeof d.yy.parseError?this.parseError=d.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var A,g,m,y,b,v,C,P,x,E=function(){var t;return"number"!=typeof(t=c.lex()||1)&&(t=e.symbols_[t]||t),t},O={};;){if(m=i[i.length-1],this.defaultActions[m]?y=this.defaultActions[m]:(null==A&&(A=E()),y=o[m]&&o[m][A]),void 0===y||!y.length||!y[0]){var M="";for(v in x=[],o[m])this.terminals_[v]&&v>2&&x.push("'"+this.terminals_[v]+"'");M=c.showPosition?"Parse error on line "+(a+1)+":\n"+c.showPosition()+"\nExpecting "+x.join(", ")+", got '"+(this.terminals_[A]||A)+"'":"Parse error on line "+(a+1)+": Unexpected "+(1==A?"end of input":"'"+(this.terminals_[A]||A)+"'"),this.parseError(M,{text:c.match,token:this.terminals_[A]||A,line:c.yylineno,loc:_,expected:x})}if(y[0]instanceof Array&&y.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+A);switch(y[0]){case 1:i.push(A),s.push(c.yytext),r.push(c.yylloc),i.push(y[1]),A=null,g?(A=g,g=null):(l=c.yyleng,n=c.yytext,a=c.yylineno,_=c.yylloc,h>0&&h--);break;case 2:if(C=this.productions_[y[1]][1],O.$=s[s.length-C],O._$={first_line:r[r.length-(C||1)].first_line,last_line:r[r.length-1].last_line,first_column:r[r.length-(C||1)].first_column,last_column:r[r.length-1].last_column},f&&(O._$.range=[r[r.length-(C||1)].range[0],r[r.length-1].range[1]]),void 0!==(b=this.performAction.apply(O,[n,l,a,d.yy,y[1],s,r].concat(u))))return b;C&&(i=i.slice(0,-1*C*2),s=s.slice(0,-1*C),r=r.slice(0,-1*C)),i.push(this.productions_[y[1]][0]),s.push(O.$),r.push(O._$),P=o[i[i.length-2]][i[i.length-1]],i.push(P);break;case 3:return!0}}return!0}},lt={node:function(t,e,i){return{type:t,value:e,children:i}},createNode:function(t,e,i,s){var r,o=this.node(e,i,[]);for(r=3;r<arguments.length;r++)o.children.push(arguments[r]);return o.line=t[0],o.col=t[1],o.eline=t[2],o.ecol=t[3],o}},ht=function(t){return[t.first_line,t.first_column,t.last_line,t.last_column]},ut=function(){var t={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,i=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var s=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),i.length-1&&(this.yylineno-=i.length-1);var r=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:i?(i.length===s.length?this.yylloc.first_column:0)+s[s.length-i.length].length-i[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[r[0],r[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var i,s,r;if(this.options.backtrack_lexer&&(r={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(r.yylloc.range=this.yylloc.range.slice(0))),(s=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=s.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:s?s[s.length-1].length-s[s.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],i=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),i)return i;if(this._backtrack){for(var o in r)this[o]=r[o];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,i,s;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var r=this._currentRules(),o=0;o<r.length;o++)if((i=this._input.match(this.rules[r[o]]))&&(!e||i[0].length>e[0].length)){if(e=i,s=o,this.options.backtrack_lexer){if(!1!==(t=this.test_match(i,r[o])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,r[s]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var t=this.next();return t||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,i,s){switch(i){case 0:case 5:case 6:break;case 1:case 2:return 78;case 3:case 4:return 77;case 7:return 7;case 8:return 12;case 9:return 14;case 10:return 17;case 11:return 15;case 12:return 91;case 13:return 93;case 14:return 19;case 15:return 23;case 16:return 21;case 17:return 75;case 18:return 76;case 19:return 74;case 20:return 80;case 21:case 22:return 94;case 23:return 82;case 24:return 83;case 25:return 26;case 26:return 27;case 27:return 16;case 28:return"#";case 29:return 34;case 30:return 35;case 31:return 79;case 32:return 64;case 33:return 65;case 34:return 66;case 35:return 8;case 36:return 10;case 37:return 58;case 38:case 39:return 57;case 40:return 53;case 41:return 54;case 42:return 55;case 43:return 50;case 44:return 51;case 45:return 47;case 46:return 45;case 47:return 48;case 48:return 46;case 49:return 41;case 50:return 43;case 51:return 42;case 52:return 39;case 53:return 37;case 54:return 32;case 55:return 86;case 56:return 5;case 57:return 20;case 58:return"INVALID"}},rules:[/^(?:\s+)/,/^(?:[0-9]+\.[0-9]*|[0-9]*\.[0-9]+\b)/,/^(?:[0-9]+)/,/^(?:"(\\["]|[^"])*")/,/^(?:'(\\[']|[^'])*')/,/^(?:\/\/.*)/,/^(?:\/\*(.|\n|\r)*?\*\/)/,/^(?:if\b)/,/^(?:else\b)/,/^(?:while\b)/,/^(?:do\b)/,/^(?:for\b)/,/^(?:function\b)/,/^(?:map\b)/,/^(?:use\b)/,/^(?:return\b)/,/^(?:delete\b)/,/^(?:true\b)/,/^(?:false\b)/,/^(?:null\b)/,/^(?:Infinity\b)/,/^(?:->)/,/^(?:=>)/,/^(?:<<)/,/^(?:>>)/,/^(?:\{)/,/^(?:\})/,/^(?:;)/,/^(?:#)/,/^(?:\?)/,/^(?::)/,/^(?:NaN\b)/,/^(?:\.)/,/^(?:\[)/,/^(?:\])/,/^(?:\()/,/^(?:\))/,/^(?:!)/,/^(?:\^)/,/^(?:\*\*)/,/^(?:\*)/,/^(?:\/)/,/^(?:%)/,/^(?:\+)/,/^(?:-)/,/^(?:<=)/,/^(?:<)/,/^(?:>=)/,/^(?:>)/,/^(?:==)/,/^(?:~=)/,/^(?:!=)/,/^(?:&&)/,/^(?:\|\|)/,/^(?:=)/,/^(?:,)/,/^(?:$)/,/^(?:[A-Za-z_\$][A-Za-z0-9_]*)/,/^(?:.)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58],inclusive:!0}}};return t}();function ct(){this.yy={}}return at.lexer=ut,ct.prototype=at,at.Parser=ct,new ct}();parser.yy.parseError=parser.parseError,__webpack_exports__.A=_jxg_js__WEBPACK_IMPORTED_MODULE_0__.A.JessieCode},873:function(t,e,i){var s=i(443),r=i(188),o=i(477),n={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"00ffff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000000",blanchedalmond:"ffebcd",blue:"0000ff",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"00ffff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dodgerblue:"1e90ff",feldspar:"d19275",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"ff00ff",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgrey:"d3d3d3",lightgreen:"90ee90",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslateblue:"8470ff",lightslategray:"778899",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"00ff00",limegreen:"32cd32",linen:"faf0e6",magenta:"ff00ff",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370d8",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"d87093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",red:"ff0000",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",violetred:"d02090",wheat:"f5deb3",white:"ffffff",whitesmoke:"f5f5f5",yellow:"ffff00",yellowgreen:"9acd32"},a=[{re:/^\s*rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*([\d.]{1,3})\s*\)\s*$/,example:["rgba(123, 234, 45, 0.5)","rgba(255,234,245,1.0)"],process:function(t){return[parseInt(t[1],10),parseInt(t[2],10),parseInt(t[3],10)]}},{re:/^\s*rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)\s*$/,example:["rgb(123, 234, 45)","rgb(255,234,245)"],process:function(t){return[parseInt(t[1],10),parseInt(t[2],10),parseInt(t[3],10)]}},{re:/^(\w{2})(\w{2})(\w{2})$/,example:["#00ff00","336699"],process:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:["#fb0","f0f"],process:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}}];s.A.rgbParser=function(t,e,i){var s,o,l,h,u,c,d,p,_,f,A=t;if(!r.A.exists(t))return[];if(r.A.exists(e)&&r.A.exists(i)&&(A=[t,e,i]),s=A,f=!1,r.A.isArray(s)){for(c=0;c<3;c++)f=f||/\./.test(A[c].toString());for(c=0;c<3;c++)f=f&&A[c]>=0&&A[c]<=1;return f?[Math.ceil(255*A[0]),Math.ceil(255*A[1]),Math.ceil(255*A[2])]:A}for("string"==typeof A&&(s=A),"#"===s.charAt(0)&&(s=s.slice(1,7)),s=s.replace(/ /g,"").toLowerCase(),s=n[s]||s,c=0;c<a.length;c++)l=a[c].re,h=a[c].process,(u=l.exec(s))&&(d=(o=h(u))[0],p=o[1],_=o[2]);return isNaN(d)||isNaN(p)||isNaN(_)?[]:[d=d<0||isNaN(d)?0:d>255?255:d,p=p<0||isNaN(p)?0:p>255?255:p,_=_<0||isNaN(_)?0:_>255?255:_]},s.A.isColor=function(t){var e=(new Option).style;return e.color=t,""!==e.color},s.A.rgb2css=function(t,e,i){var r;return"rgb("+(r=s.A.rgbParser(t,e,i))[0]+", "+r[1]+", "+r[2]+")"},s.A.rgb2hex=function(t,e,i){var r,o,n;return o=(r=s.A.rgbParser(t,e,i))[1],n=r[2],r=(r=r[0]).toString(16),o=o.toString(16),n=n.toString(16),1===r.length&&(r="0"+r),1===o.length&&(o="0"+o),1===n.length&&(n="0"+n),"#"+r+o+n},s.A.hex2rgb=function(t){return s.A.deprecated("JXG.hex2rgb()","JXG.rgb2css()"),s.A.rgb2css(t)},s.A.hsv2rgb=function(t,e,i){var s,r,n,a,l,h,u,c,d;if(t=(t%360+360)%360,0===e){if(!(isNaN(t)||t<o.A.eps))return"#ffffff";s=i,r=i,n=i}else switch(h=t>=360?0:t,u=i*(1-e),c=i*(1-e*(a=(h/=60)-(l=Math.floor(h)))),d=i*(1-e*(1-a)),l){case 0:s=i,r=d,n=u;break;case 1:s=c,r=i,n=u;break;case 2:s=u,r=i,n=d;break;case 3:s=u,r=c,n=i;break;case 4:s=d,r=u,n=i;break;case 5:s=i,r=u,n=c}return["#",s=2===(s=Math.round(255*s).toString(16)).length?s:1===s.length?"0"+s:"00",r=2===(r=Math.round(255*r).toString(16)).length?r:1===r.length?"0"+r:"00",n=2===(n=Math.round(255*n).toString(16)).length?n:1===n.length?"0"+n:"00"].join("")},s.A.rgb2hsv=function(t,e,i){var r,o,n,a,l,h,u,c,d,p,_,f,A;return o=(r=s.A.rgbParser(t,e,i))[1],n=r[2],a=(r=r[0])/255,l=o/255,h=n/255,f=Math.max(r,o,n),c=(A=Math.min(r,o,n))/255,p=0,(_=u=f/255)>0&&(p=(_-c)/_),d=1/(u-c),p>0&&(f===r?d*=l-h:d=f===o?2+(h-a)*d:4+(a-l)*d),(d*=60)<0&&(d+=360),f===A&&(d=0),[d,p,_]},s.A.rgb2LMS=function(t,e,i){var r,o,n,a,l,h,u,c=[[.05059983,.08585369,.0095242],[.01893033,.08925308,.01370054],[.00292202,.00975732,.07145979]];return o=(r=s.A.rgbParser(t,e,i))[1],n=r[2],r=r[0],r=Math.pow(r,.476190476),o=Math.pow(o,.476190476),n=Math.pow(n,.476190476),(u=[a=r*c[0][0]+o*c[0][1]+n*c[0][2],l=r*c[1][0]+o*c[1][1]+n*c[1][2],h=r*c[2][0]+o*c[2][1]+n*c[2][2]]).l=a,u.m=l,u.s=h,u},s.A.LMS2rgb=function(t,e,i){var s,r,o,n,a=[[30.830854,-29.832659,1.610474],[-6.481468,17.715578,-2.532642],[-.37569,-1.199062,14.273846]],l=function(t){for(var e=127,i=64;i>0;){if(Math.pow(e,.476190476)>t)e-=i;else{if(Math.pow(e+1,.476190476)>t)return e;e+=i}i/=2}return 254===e&&13.994955247<t?255:e};return s=t*a[0][0]+e*a[0][1]+i*a[0][2],r=t*a[1][0]+e*a[1][1]+i*a[1][2],o=t*a[2][0]+e*a[2][1]+i*a[2][2],(n=[s=l(s),r=l(r),o=l(o)]).r=s,n.g=r,n.b=o,n},s.A.rgba2rgbo=function(t){var e;return 9===t.length&&"#"===t.charAt(0)?(e=parseInt(t.slice(7,9).toUpperCase(),16)/255,t=t.slice(0,7)):e=1,[t,e]},s.A.rgbo2rgba=function(t,e){var i;return"none"===t||"transparent"===t?t:(1===(i=Math.round(255*e).toString(16)).length&&(i="0"+i),s.A.rgb2hex(t)+i)},s.A.rgb2bw=function(t){var e,i,r,o="0123456789ABCDEF";return"none"===t?t:(r=s.A.rgbParser(t),e=Math.floor(.3*r[0]+.59*r[1]+.11*r[2]),t="#"+(i=o.charAt(e>>4&15)+o.charAt(15&e))+i+i)},s.A.rgb2cb=function(t,e){var i,r,o,n,a,l,h,u,c,d,p,_="0123456789ABCDEF";if("none"===t)return t;switch(r=(a=s.A.rgb2LMS(t))[0],o=a[1],n=a[2],e=e.toLowerCase()){case"protanopia":l=-.06150039994295001,h=.08277001656812001,u=-.013200141220000003,c=.05858939668799999,d=-.07934519995360001,p=.013289415272000003,r=n/o<.6903216543277437?-(h*o+u*n)/l:-(d*o+p*n)/c;break;case"tritanopia":l=-.00058973116217,h=.007690316482,u=-.01011703519052,c=.025495080838999994,d=-.0422740347,p=.017005316784,n=o/r<.8349489908460004?-(l*r+h*o)/u:-(c*r+d*o)/p;break;default:l=-.06150039994295001,h=.08277001656812001,u=-.013200141220000003,c=.05858939668799999,d=-.07934519995360001,p=.013289415272000003,o=n/r<.5763833686400911?-(l*r+u*n)/h:-(c*r+p*n)/d}return i=s.A.LMS2rgb(r,o,n),t="#"+(_.charAt(i[0]>>4&15)+_.charAt(15&i[0])),t+=_.charAt(i[1]>>4&15)+_.charAt(15&i[1]),t+=_.charAt(i[2]>>4&15)+_.charAt(15&i[2])},s.A.shadeColor=function(t,e){var i=s.A.rgbParser(t),r=i[0],o=i[1],n=i[2];return r=(r=(r=parseInt(r+255*e))>0?r:0)<255?r:255,o=(o=(o=parseInt(o+255*e))>0?o:0)<255?o:255,n=(n=(n=parseInt(n+255*e))>0?n:0)<255?n:255,r=Math.round(r),o=Math.round(o),n=Math.round(n),s.A.rgb2hex([r,o,n])},s.A.lightenColor=function(t,e){return s.A.shadeColor(t,e)},s.A.darkenColor=function(t,e){return s.A.shadeColor(t,-1*e)},s.A.autoHighlight=function(t){var e=s.A.rgba2rgbo(t),i=e[0],r=e[1];return"#"===t.charAt(0)?(r*=r<.3?1.8:.4,s.A.rgbo2rgba(i,r)):t},s.A.contrast=function(t,e,i,r){var o,n,a,l,h;return e=e||"#000000",i=i||"#ffffff",r=r||7,o=s.A.rgbParser(t),n=s.A.rgbParser("#000000"),h=(a=.2126*Math.pow(o[0]/255,2.2)+.7152*Math.pow(o[1]/255,2.2)+.0722*Math.pow(o[2]/255,2.2))>(l=.2126*Math.pow(n[0]/255,2.2)+.7152*Math.pow(n[1]/255,2.2)+.0722*Math.pow(n[2]/255,2.2))?Math.floor((a+.05)/(l+.05)):Math.floor((l+.05)/(a+.05)),(h-=1)>r?e:i},s.A.setClassicColors=function(){s.A.Options.elements.strokeColor="blue",s.A.Options.elements.fillColor="red",s.A.Options.hatch.strokeColor="blue",s.A.Options.angle.fillColor="#ff7f00",s.A.Options.angle.highlightFillColor="#ff7f00",s.A.Options.angle.strokeColor="#ff7f00",s.A.Options.angle.label.strokeColor="blue",s.A.Options.arc.strokeColor="blue",s.A.Options.circle.center.fillColor="red",s.A.Options.circle.center.strokeColor="blue",s.A.Options.circumcircle.strokeColor="blue",s.A.Options.circumcircle.center.fillColor="red",s.A.Options.circumcircle.center.strokeColor="blue",s.A.Options.circumcirclearc.strokeColor="blue",s.A.Options.circumcirclesector.strokeColor="blue",s.A.Options.circumcirclesector.fillColor="green",s.A.Options.circumcirclesector.highlightFillColor="green",s.A.Options.conic.strokeColor="blue",s.A.Options.curve.strokeColor="blue",s.A.Options.incircle.strokeColor="blue",s.A.Options.incircle.center.fillColor="red",s.A.Options.incircle.center.strokeColor="blue",s.A.Options.inequality.fillColor="red",s.A.Options.integral.fillColor="red",s.A.Options.integral.curveLeft.color="red",s.A.Options.integral.curveRight.color="red",s.A.Options.line.strokeColor="blue",s.A.Options.point.fillColor="red",s.A.Options.point.strokeColor="red",s.A.Options.polygon.fillColor="green",s.A.Options.polygon.highlightFillColor="green",s.A.Options.polygon.vertices.strokeColor="red",s.A.Options.polygon.vertices.fillColor="red",s.A.Options.regularpolygon.fillColor="green",s.A.Options.regularpolygon.highlightFillColor="green",s.A.Options.regularpolygon.vertices.strokeColor="red",s.A.Options.regularpolygon.vertices.fillColor="red",s.A.Options.riemannsum.fillColor="yellow",s.A.Options.sector.fillColor="green",s.A.Options.sector.highlightFillColor="green",s.A.Options.semicircle.center.fillColor="red",s.A.Options.semicircle.center.strokeColor="blue",s.A.Options.slopetriangle.fillColor="red",s.A.Options.slopetriangle.highlightFillColor="red",s.A.Options.turtle.arrow.strokeColor="blue"},s.A.extend(s.A,{paletteWong:{black:"#000000",orange:"#E69F00",skyblue:"#56B4E9",bluishgreen:"#009E73",yellow:"#F0E442",darkblue:"#0072B2",vermillion:"#D55E00",reddishpurple:"#CC79A7",blue:"#0072B2",red:"#D55E00",green:"#009E73",purple:"#CC79A7",white:"#ffffff"}}),s.A.palette=s.A.paletteWong,e.A=s.A},133:function(t,e,i){var s=i(443),r=i(188);s.A.extendConstants(s.A,{}),s.A.extend(s.A,{isTouchEvent:function(t){return s.A.exists(t.touches)},isPointerEvent:function(t){return s.A.exists(t.pointerId)},isMouseEvent:function(t){return!s.A.isTouchEvent(t)&&!s.A.isPointerEvent(t)},getNumberOfTouchPoints:function(t){var e=-1;return s.A.isTouchEvent(t)&&(e=t.touches.length),e},isFirstTouch:function(t){var e=s.A.getNumberOfTouchPoints(t);return s.A.isPointerEvent(t)?t.isPrimary:1===e},isBrowser:"object"==typeof window&&"object"==typeof document,supportsES6:function(){try{return new Function("(a = 0) => a"),!0}catch(t){return!1}},supportsVML:function(){return this.isBrowser&&!!document.namespaces},supportsSVG:function(){return!!this.isBrowser&&(!!document.createElementNS&&!!document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect)},supportsCanvas:function(){var t=!1;return this.isNode()&&(t=!0),t||this.isBrowser&&!!document.createElement("canvas").getContext},isNode:function(){return!this.isBrowser&&"undefined"!=typeof process&&-1!==process.release.name.search(/node|io.js/)},isWebWorker:function(){return!this.isBrowser&&"object"==typeof self&&"function"==typeof self.postMessage},supportsPointerEvents:function(){return!!(this.isBrowser&&window.navigator&&(window.PointerEvent||window.navigator.pointerEnabled||window.navigator.msPointerEnabled))},isTouchDevice:function(){return this.isBrowser&&void 0!==window.ontouchstart},isAndroid:function(){return r.A.exists(navigator)&&navigator.userAgent.toLowerCase().indexOf("android")>-1},isWebkitAndroid:function(){return this.isAndroid()&&navigator.userAgent.indexOf(" AppleWebKit/")>-1},isApple:function(){return r.A.exists(navigator)&&(navigator.userAgent.indexOf("iPad")>-1||navigator.userAgent.indexOf("iPhone")>-1)},isWebkitApple:function(){return this.isApple()&&navigator.userAgent.search(/Mobile\/[0-9A-Za-z.]*Safari/)>-1},isMetroApp:function(){return"object"==typeof window&&window.clientInformation&&window.clientInformation.appVersion&&window.clientInformation.appVersion.indexOf("MSAppHost")>-1},isMozilla:function(){return r.A.exists(navigator)&&navigator.userAgent.toLowerCase().indexOf("mozilla")>-1&&-1===navigator.userAgent.toLowerCase().indexOf("apple")},isFirefoxOS:function(){return r.A.exists(navigator)&&-1===navigator.userAgent.toLowerCase().indexOf("android")&&-1===navigator.userAgent.toLowerCase().indexOf("apple")&&navigator.userAgent.toLowerCase().indexOf("mobile")>-1&&navigator.userAgent.toLowerCase().indexOf("mozilla")>-1},isDesktop:function(){return!0},isMobile:function(){return!0},ieVersion:function(){var t,e,i=3;if("object"!=typeof document)return 0;e=(t=document.createElement("div")).getElementsByTagName("i");do{t.innerHTML="\x3c!--[if gt IE "+ ++i+"]><i></i><![endif]--\x3e"}while(e[0]);return i>4?i:void 0}(),getDimensions:function(t,e){var i,s,o,n,a,l,h,u,c,d=/\d+(\.\d*)?px/;if(!this.isBrowser||null===t)return{width:500,height:500};if(e=e||document,i=r.A.isString(t)?e.getElementById(t):t,!r.A.exists(i))throw new Error("\nJSXGraph: HTML container element '"+t+"' not found.");return"none"!==(s=i.style.display)&&null!==s?i.clientWidth>0&&i.clientHeight>0?{width:i.clientWidth,height:i.clientHeight}:(c=window.getComputedStyle?window.getComputedStyle(i):i.style,{width:d.test(c.width)?parseFloat(c.width):0,height:d.test(c.height)?parseFloat(c.height):0}):(n=(o=i.style).visibility,a=o.position,l=o.display,o.visibility="hidden",o.position="absolute",o.display="block",h=i.clientWidth,u=i.clientHeight,o.display=l,o.position=a,o.visibility=n,{width:h,height:u})},addEvent:function(t,e,i,s,o){var n=function(){return i.apply(s,arguments)};n.origin=i,"object"==typeof s&&r.A.exists(s.BOARD_MODE_NONE)&&(s["x_internal"+e]=s["x_internal"+e]||[],s["x_internal"+e].push(n)),r.A.exists(t)&&r.A.exists(t.addEventListener)&&(o=o||!1,t.addEventListener(e,n,o)),r.A.exists(t)&&r.A.exists(t.attachEvent)&&t.attachEvent("on"+e,n)},removeEvent:function(t,e,i,o){var n;if(r.A.exists(o))if(r.A.exists(o["x_internal"+e]))if(r.A.isArray(o["x_internal"+e]))if(-1!==(n=r.A.indexOf(o["x_internal"+e],i,"origin"))){try{r.A.exists(t)&&r.A.exists(t.removeEventListener)&&t.removeEventListener(e,o["x_internal"+e][n],!1),r.A.exists(t)&&r.A.exists(t.detachEvent)&&t.detachEvent("on"+e,o["x_internal"+e][n])}catch(t){s.A.debug("removeEvent: event not registered in browser: ("+e+" -- "+i+")")}o["x_internal"+e].splice(n,1)}else s.A.debug("removeEvent: no such event function in internal list: "+i);else s.A.debug("owner[x_internal + "+e+"] is not an array");else s.A.debug("removeEvent: no such type: "+e);else s.A.debug("no such owner")},removeAllEvents:function(t,e,i){var r;if(i["x_internal"+e]){for(r=i["x_internal"+e].length-1;r>=0;r--)s.A.removeEvent(t,e,i["x_internal"+e][r].origin,i);i["x_internal"+e].length>0&&s.A.debug("removeAllEvents: Not all events could be removed.")}},getPosition:function(t,e,i){var s,o,n,a=0,l=0;if(t||(t=window.event),i=i||document,n=t.touches,r.A.exists(n)&&0===n.length&&(n=t.changedTouches),r.A.exists(e)&&r.A.exists(n))if(-1===e){for(o=n.length,s=0;s<o;s++)if(n[s]){t=n[s];break}}else t=n[e];return t.clientX&&(a=t.clientX,l=t.clientY),[a,l]},getOffset:function(t){var e,i=t,s=t,r=i.offsetLeft-i.scrollLeft,o=i.offsetTop-i.scrollTop;for(r=(e=this.getCSSTransform([r,o],i))[0],o=e[1],i=i.offsetParent;i;){for(r+=i.offsetLeft,o+=i.offsetTop,i.offsetParent&&(r+=i.clientLeft-i.scrollLeft,o+=i.clientTop-i.scrollTop),r=(e=this.getCSSTransform([r,o],i))[0],o=e[1],s=s.parentNode;s!==i;)r+=s.clientLeft-s.scrollLeft,o+=s.clientTop-s.scrollTop,r=(e=this.getCSSTransform([r,o],s))[0],o=e[1],s=s.parentNode;i=i.offsetParent}return[r,o]},getStyle:function(t,e){var i,r=t.ownerDocument;return r.defaultView&&r.defaultView.getComputedStyle?i=r.defaultView.getComputedStyle(t,null).getPropertyValue(e):t.currentStyle&&s.A.ieVersion>=9?i=t.currentStyle[e]:t.style&&(e=e.replace(/-([a-z]|[0-9])/gi,(function(t,e){return e.toUpperCase()})),i=t.style[e]),i},getProp:function(t,e){var i=parseInt(this.getStyle(t,e),10);return isNaN(i)?0:i},getCSSTransform:function(t,e){var i,s,o,n,a,l,h,u=["transform","webkitTransform","MozTransform","msTransform","oTransform"];for(a=u.length,i=0,o="";i<a;i++)if(r.A.exists(e.style[u[i]])){o=e.style[u[i]];break}if(""!==o&&(n=o.indexOf("("))>0){for(a=o.length,s=0,l=(h=o.substring(n+1,a-1).split(",")).length;s<l;s++)h[s]=parseFloat(h[s]);0===o.indexOf("matrix")?(t[0]+=h[4],t[1]+=h[5]):0===o.indexOf("translateX")?t[0]+=h[0]:0===o.indexOf("translateY")?t[1]+=h[0]:0===o.indexOf("translate")&&(t[0]+=h[0],t[1]+=h[1])}return r.A.exists(e.style.zoom)&&""!==(o=e.style.zoom)&&(t[0]*=parseFloat(o),t[1]*=parseFloat(o)),t},getCSSTransformMatrix:function(t){var e,i,s,o,n,a,l,h,u=t.ownerDocument,c=["transform","webkitTransform","MozTransform","msTransform","oTransform"],d=[[1,0,0],[0,1,0],[0,0,1]];if(u.defaultView&&u.defaultView.getComputedStyle)s=(h=u.defaultView.getComputedStyle(t,null)).getPropertyValue("-webkit-transform")||h.getPropertyValue("-moz-transform")||h.getPropertyValue("-ms-transform")||h.getPropertyValue("-o-transform")||h.getPropertyValue("transform");else for(a=c.length,e=0,s="";e<a;e++)if(r.A.exists(t.style[c[e]])){s=t.style[c[e]];break}if(""!==s&&(n=s.indexOf("("))>0){for(a=s.length,i=0,l=(o=s.substring(n+1,a-1).split(",")).length;i<l;i++)o[i]=parseFloat(o[i]);0===s.indexOf("matrix")?d=[[1,0,0],[0,o[0],o[1]],[0,o[2],o[3]]]:0===s.indexOf("scaleX")?d[1][1]=o[0]:0===s.indexOf("scaleY")?d[2][2]=o[0]:0===s.indexOf("scale")&&(d[1][1]=o[0],d[2][2]=o[1])}return r.A.exists(t.style.zoom)&&""!==(s=t.style.zoom)&&(d[1][1]*=parseFloat(s),d[2][2]*=parseFloat(s)),d},timedChunk:function(t,e,i,s){var r=t.slice(),o=function(){var n=+new Date;do{e.call(i,r.shift())}while(r.length>0&&+new Date-n<300);r.length>0?window.setTimeout(o,1):s(t)};window.setTimeout(o,1)},scaleJSXGraphDiv:function(t,e,i,r){var o,n,a,l,h,u,c,d,p,_,f,A,g=r;for(n=(a=i.getElementById(t).getBoundingClientRect()).height,o=a.width,u=(d=i.getElementById(e))._cssFullscreenStore.w,f=(c=d._cssFullscreenStore.h)/u,u>o*g&&(c=(u=o*g)*f),c>n*g&&(u=(c=n*g)/f),l=u,p=f<n/o?o*g/u:n*g/c,_=.5*(n-(h=c)),A=0;A<4;A++)try{d.style.width=l+"px !important",d.style.height=h+"px !important",d.style.margin="0 auto",d.style.transform=d._cssFullscreenStore.transform+" matrix("+p+",0,0,"+p+",0,"+_+")";break}catch(t){s.A.debug("JXG.scaleJSXGraphDiv:\n"+t)}4===A&&s.A.debug("JXG.scaleJSXGraphDiv: Could not set any CSS property.")}}),e.A=s.A},454:function(t,e,i){var s=i(443),r=i(188);s.A.EventEmitter={eventHandlers:{},suspended:{},trigger:function(t,e){var i,s,r,o,n,a;for(n=t.length,s=0;s<n;s++)if(o=this.eventHandlers[t[s]],!this.suspended[t[s]]){if(this.suspended[t[s]]=!0,o)for(a=o.length,i=0;i<a;i++)(r=o[i]).handler.apply(r.context,e);this.suspended[t[s]]=!1}return this},on:function(t,e,i){return r.A.isArray(this.eventHandlers[t])||(this.eventHandlers[t]=[]),i=r.A.def(i,this),this.eventHandlers[t].push({handler:e,context:i}),this},off:function(t,e){var i;return t&&r.A.isArray(this.eventHandlers[t])?(e?((i=r.A.indexOf(this.eventHandlers[t],e,"handler"))>-1&&this.eventHandlers[t].splice(i,1),0===this.eventHandlers[t].length&&delete this.eventHandlers[t]):delete this.eventHandlers[t],this):this},eventify:function(t){t.eventHandlers={clicks:0},t.on=this.on,t.off=this.off,t.triggerEventHandlers=this.trigger,t.trigger=this.trigger,t.suspended={}}},e.A=s.A.EventEmitter},713:function(t,e,i){var s=i(443),r=i(188),o=i(561),n=i(904);s.A.Expect={each:function(t,e,i){var s,o,n=[];if(r.A.exists(t.length))for(o=t.length,s=0;s<o;s++)n.push(e.call(this,t[s],i));return n},coords:function(t,e){var i=t;return t&&t.elementClass===o.A.OBJECT_CLASS_POINT?i=t.coords:t.usrCoords&&t.scrCoords&&t.usr2screen&&(i=t),e&&(i=new n.A(o.A.COORDS_BY_USER,i.usrCoords,i.board)),i},coordsArray:function(t,e){var i;return(i=r.A.isArray(t)?t:this.coords(t).usrCoords).length<3&&i.unshift(1),e&&(i=[i[0],i[1],i[2]]),i}},e.A=s.A.Expect},188:function(t,e,i){var s=i(443),r=i(561),o=i(477);s.A.extend(s.A,{isBoard:function(t){return null!==t&&"object"==typeof t&&this.isNumber(t.BOARD_MODE_NONE)&&this.isObject(t.objects)&&this.isObject(t.jc)&&this.isFunction(t.update)&&!!t.containerObj&&this.isString(t.id)},isId:function(t,e){return"string"==typeof e&&!!t.objects[e]},isName:function(t,e){return"string"==typeof e&&!!t.elementsByName[e]},isGroup:function(t,e){return"string"==typeof e&&!!t.groups[e]},isString:function(t){return"string"==typeof t},isNumber:function(t,e,i){var s="number"==typeof t||"[Object Number]"===Object.prototype.toString.call(t);return i=void 0===i||i,(e=e||!1)&&(s=s||""+parseFloat(t)===t),i||(s=s&&!isNaN(t)),s},isFunction:function(t){return"function"==typeof t},isArray:function(t){return Array.isArray?Array.isArray(t):null!==t&&"object"==typeof t&&"function"==typeof t.splice&&"function"==typeof t.join},isObject:function(t){return"object"==typeof t&&!this.isArray(t)},isDocumentOrFragment:function(t){return this.isObject(t)&&(9===t.nodeType||11===t.nodeType)},isPoint:function(t){return!(null===t||"object"!=typeof t||!this.exists(t.elementClass))&&t.elementClass===r.A.OBJECT_CLASS_POINT},isPoint3D:function(t){return!(null===t||"object"!=typeof t||!this.exists(t.type))&&t.type===r.A.OBJECT_TYPE_POINT3D},isPointType:function(t,e){var i,s;return!!this.isArray(e)||(!!(this.isFunction(e)&&(i=e(),this.isArray(i)&&i.length>1))||(s=t.select(e),this.isPoint(s)))},isPointType3D:function(t,e){var i,s;return!!(this.isArray(e)&&e.length>=3)||(!!(this.isFunction(e)&&(i=e(),this.isArray(i)&&i.length>=3))||(s=t.select(e),this.isPoint3D(s)))},isTransformationOrArray:function(t){if(null!==t){if(this.isArray(t)&&t.length>0)return this.isTransformationOrArray(t[0]);if("object"==typeof t)return t.type===r.A.OBJECT_TYPE_TRANSFORMATION}return!1},isEmpty:function(t){return 0===Object.keys(t).length},exists:function(t,e){var i=!(null==t||null===t);return(e=e||!1)?i&&""!==t:i},def:function(t,e){return this.exists(t)?t:e},str2Bool:function(t){return!this.exists(t)||("boolean"==typeof t?t:!!this.isString(t)&&"true"===t.toLowerCase())},cssParse:function(t){var e=t;return this.isString(e)?(e='{"'+(e=(e=(e=(e=e.replace(/\s*;\s*$/g,"")).replace(/\s*;\s*/g,'","')).replace(/\s*:\s*/g,'":"')).trim())+'"}',JSON.parse(e)):{}},cssStringify:function(t){var e,i,s="";if(!this.isObject(t))return"";for(e in t)t.hasOwnProperty(e)&&(i=t[e],(this.isString(i)||this.isNumber(i))&&(s+=e+":"+i+"; "));return s=s.trim()},createEvalFunction:function(t,e,i){var r,o,n,a=[],l={};for(o=0;o<i;o++)for(n in a[o]=s.A.createFunction(e[o],t),a[o].deps)l[n]=a[o].deps;return(r=function(t){return a[t]()}).deps=l,r},createFunction:function(t,e,i,s){var r=null;return this.isString(t)?r=e.jc.snippet(t,!0,i,!1):this.isFunction(t)?(r=t).deps=this.isObject(t.deps)?t.deps:{}:this.isNumber(t)&&((r=function(){return t}).deps={}),null!==r&&(r.origin=t),r},providePoints:function(t,e,i,s,r){var o,n,a,l,h,u=0,c=[];for(this.isArray(e)||(e=[e]),a=e.length,this.exists(r)&&(u=r.length),0===u&&(l=this.copyAttributes(i,t.options,s)),o=0;o<a;++o)if(u>0&&(n=Math.min(o,u-1),l=this.copyAttributes(i,t.options,s,r[n].toLowerCase())),this.isArray(e[o])&&e[o].length>1?(c.push(t.create("point",e[o],l)),c[c.length-1]._is_new=!0):this.isFunction(e[o])?(h=e[o](),this.isArray(h)&&h.length>1&&(c.push(t.create("point",[e[o]],l)),c[c.length-1]._is_new=!0)):c.push(t.select(e[o])),!this.isPoint(c[o]))return!1;return c},providePoints3D:function(t,e,i,s,r){var o,n,a,l,h,u=0,c=[];for(this.isArray(e)||(e=[e]),a=e.length,this.exists(r)&&(u=r.length),0===u&&(l=this.copyAttributes(i,t.board.options,s)),o=0;o<a;++o)if(u>0&&(n=Math.min(o,u-1),l=this.copyAttributes(i,t.board.options,s,r[n])),this.isArray(e[o])&&e[o].length>1?(c.push(t.create("point3d",e[o],l)),c[c.length-1]._is_new=!0):this.isFunction(e[o])?(h=e[o](),this.isArray(h)&&h.length>1&&(c.push(t.create("point3d",[e[o]],l)),c[c.length-1]._is_new=!0)):c.push(t.select(e[o])),!this.isPoint3D(c[o]))return!1;return c},bind:function(t,e){return function(){return t.apply(e,arguments)}},evaluate:function(t){return this.isFunction(t)?t():t},indexOf:function(t,e,i){var s,r=this.exists(i);if(Array.indexOf&&!r)return t.indexOf(e);for(s=0;s<t.length;s++)if(r&&t[s][i]===e||!r&&t[s]===e)return s;return-1},eliminateDuplicates:function(t){var e,i=t.length,s=[],r={};for(e=0;e<i;e++)r[t[e]]=0;for(e in r)r.hasOwnProperty(e)&&s.push(e);return s},swap:function(t,e,i){var s;return s=t[e],t[e]=t[i],t[i]=s,t},uniqueArray:function(t){var e,i,r,o=[];if(0===t.length)return[];for(e=0;e<t.length;e++)if(r=this.isArray(t[e]),this.exists(t[e]))for(i=e+1;i<t.length;i++)r&&s.A.cmpArrays(t[e],t[i])?t[e]=[]:r||t[e]!==t[i]||(t[e]="");else t[e]="";for(i=0,e=0;e<t.length;e++)(r=this.isArray(t[e]))||""===t[e]?r&&0!==t[e].length&&(o[i]=t[e].slice(0),i++):(o[i]=t[e],i++);return t=o,o},isInArray:function(t,e){return s.A.indexOf(t,e)>-1},coordsArrayToMatrix:function(t,e){var i,s=[],r=[];for(i=0;i<t.length;i++)e?(s.push(t[i].usrCoords[1]),r.push(t[i].usrCoords[2])):r.push([t[i].usrCoords[1],t[i].usrCoords[2]]);return e&&(r=[s,r]),r},cmpArrays:function(t,e){var i;if(t===e)return!0;if(t.length!==e.length)return!1;for(i=0;i<t.length;i++)if(this.isArray(t[i])&&this.isArray(e[i])){if(!this.cmpArrays(t[i],e[i]))return!1}else if(t[i]!==e[i])return!1;return!0},removeElementFromArray:function(t,e){var i;for(i=0;i<t.length;i++)if(t[i]===e)return t.splice(i,1),t;return t},trunc:function(t,e){return e=s.A.def(e,0),this.toFixed(t,e)},_decimalAdjust:function(t,e,i){return void 0===i||0==+i?Math[t](e):(e=+e,i=+i,isNaN(e)||"number"!=typeof i||i%1!=0?NaN:(e=e.toString().split("e"),+((e=(e=Math[t](+(e[0]+"e"+(e[1]?+e[1]-i:-i)))).toString().split("e"))[0]+"e"+(e[1]?+e[1]+i:i))))},_round10:function(t,e){return this._decimalAdjust("round",t,e)},_floor10:function(t,e){return this._decimalAdjust("floor",t,e)},_ceil10:function(t,e){return this._decimalAdjust("ceil",t,e)},toFixed:function(t,e){return this._round10(t,-e).toFixed(e)},autoDigits:function(t){var e=Math.abs(t);return e>=.1?this.toFixed(t,2):e>=.01?this.toFixed(t,4):e>=1e-4?this.toFixed(t,6):t},parseNumber:function(t,e,i){var s;return this.isString(t)&&t.indexOf("%")>-1?(s=t.replace(/\s+%\s+/,""),parseFloat(s)*e*.01):this.isString(t)&&t.indexOf("fr")>-1?(s=t.replace(/\s+fr\s+/,""),parseFloat(s)*e):this.isString(t)&&t.indexOf("px")>-1?(s=t.replace(/\s+px\s+/,""),s=parseFloat(s),this.isFunction(i)?i(s):this.isNumber(i)?s*i:s):parseFloat(t)},parsePosition:function(t){var e,i,s="",r="";if(""!==(t=t.trim()))for(e=t.split(/[ ,]+/),i=0;i<e.length;i++)"left"===e[i]||"right"===e[i]?s=e[i]:r=e[i];return{side:s,pos:r}},keys:function(t,e){var i,s=[];for(i in t)e?t.hasOwnProperty(i)&&s.push(i):s.push(i);return s},clone:function(t){var e={};return e.prototype=t,e},cloneAndCopy:function(t,e){var i,s=function(){};for(i in s.prototype=t,e)s[i]=e[i];return s},merge:function(t,e){var i,s,r,o;for(i in e)if(e.hasOwnProperty(i))if(r=e[i],this.isArray(r))for(t[i]||(t[i]=[]),s=0;s<r.length;s++)o=e[i][s],"object"==typeof e[i][s]?t[i][s]=this.merge(t[i][s],o):t[i][s]=e[i][s];else"object"==typeof r?(t[i]||(t[i]={}),t[i]=this.merge(t[i],r)):("boolean"==typeof t&&(t={}),t[i]=r);return t},deepCopy:function(t,e,i){var s,r,o,n;if(i=i||!1,"object"!=typeof t||null===t)return t;if(this.isArray(t))for(s=[],r=0;r<t.length;r++)null!==(o=t[r])&&"object"==typeof o?this.exists(o.board)?s[r]=o.id:s[r]=this.deepCopy(o,{},i):s[r]=o;else{for(r in s={},t)t.hasOwnProperty(r)&&(n=i?r.toLowerCase():r,null!==(o=t[r])&&"object"==typeof o?this.exists(o.board)?s[n]=o.id:s[n]=this.deepCopy(o,{},i):s[n]=o);for(r in e)e.hasOwnProperty(r)&&(n=i?r.toLowerCase():r,null!==(o=e[r])&&"object"==typeof o?this.isArray(o)||!this.exists(s[n])?s[n]=this.deepCopy(o,{},i):s[n]=this.deepCopy(s[n],o,i):s[n]=o)}return s},mergeAttr:function(t,e,i,s){var r,o,n;for(r in i=i||!0,s=s||!1,e)e.hasOwnProperty(r)&&(o=i?r.toLowerCase():r,n=e[r],!this.isObject(n)||null===n||this.isDocumentOrFragment(n)||this.exists(n.board)||"string"==typeof n.valueOf()?s&&!this.exists(n)||(t[o]=n):(void 0!==t[o]&&null!==t[o]&&this.isObject(t[o])||(t[o]={}),this.mergeAttr(t[o],n,i)))},keysToLowerCase:function(t){var e,i,s=Object.keys(t),r=s.length,o={};if("object"!=typeof t)return t;for(;r--;)e=s[r],t.hasOwnProperty(e)&&("object"!=typeof(i=t[e])||null===i||this.isArray(i)||this.exists(i.nodeType)||this.exists(i.board)?o[e.toLowerCase()]=i:o[e.toLowerCase()]=this.keysToLowerCase(i));return o},copyAttributes:function(t,e,i){var r,o,n,a,l,h;for(r=(a=arguments.length)<3||{circle:1,curve:1,foreignobject:1,image:1,line:1,point:1,polygon:1,text:1,ticks:1,integral:1}[i]?s.A.deepCopy(e.elements,null,!0):{},a<4&&this.exists(i)&&this.exists(e.layer[i])&&(r.layer=e.layer[i]),l=e,h=!0,n=2;n<a;n++){if(o=arguments[n],!this.exists(l[o])){h=!1;break}l=l[o]}for(h&&(r=s.A.deepCopy(r,l,!0)),l="object"==typeof t?this.keysToLowerCase(t):{},h=!0,n=3;n<a;n++){if(o=arguments[n].toLowerCase(),!this.exists(l[o])){h=!1;break}l=l[o]}if(h&&this.mergeAttr(r,l,!0),"board"===arguments[2])return r;for(l=e,h=!0,n=2;n<a;n++){if(o=arguments[n],!this.exists(l[o])){h=!1;break}l=l[o]}return h&&this.exists(l.label)&&(r.label=s.A.deepCopy(l.label,r.label,!0)),r.label=s.A.deepCopy(e.label,r.label,!0),r},copyPrototypeMethods:function(t,e,i){var s;for(s in t.prototype[i]=e.prototype.constructor,e.prototype)e.prototype.hasOwnProperty(s)&&(t.prototype[s]=e.prototype[s])},toJSON:function(t,e){var i,r,o,n;if(e=s.A.def(e,!1),void 0!==JSON&&JSON.stringify&&!e)try{return JSON.stringify(t)}catch(t){}switch(typeof t){case"object":if(t){if(i=[],this.isArray(t)){for(o=0;o<t.length;o++)i.push(s.A.toJSON(t[o],e));return"["+i.join(",")+"]"}for(r in t)if(t.hasOwnProperty(r)){try{n=s.A.toJSON(t[r],e)}catch(t){n=""}e?i.push(r+":"+n):i.push('"'+r+'":'+n)}return"{"+i.join(",")+"} "}return"null";case"string":return"'"+t.replace(/(["'])/g,"\\$1")+"'";case"number":case"boolean":return t.toString()}return"0"},clearVisPropOld:function(t){return t.visPropOld={cssclass:"",cssdefaultstyle:"",cssstyle:"",fillcolor:"",fillopacity:"",firstarrow:!1,fontsize:-1,lastarrow:!1,left:-1e5,linecap:"",shadow:!1,strokecolor:"",strokeopacity:"",strokewidth:"",tabindex:-1e5,transitionduration:0,top:-1e5,visible:null},t},isInObject:function(t,e){var i;for(i in t)if(t.hasOwnProperty(i)&&t[i]===e)return!0;return!1},escapeHTML:function(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")},unescapeHTML:function(t){return t.replace(/<\/?[^>]+>/gi,"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")},capitalize:function(t){return t.charAt(0).toUpperCase()+t.substring(1).toLowerCase()},trimNumber:function(t){return"."!==(t=(t=t.replace(/^0+/,"")).replace(/0+$/,""))[t.length-1]&&","!==t[t.length-1]||(t=t.slice(0,-1)),"."!==t[0]&&","!==t[0]||(t="0"+t),t},filterElements:function(t,e){var i,s,r,o,n,a,l,h=t.length,u=[];if("function"!=typeof e&&"object"!=typeof e)return u;for(i=0;i<h;i++){if(l=!0,r=t[i],"object"==typeof e){for(s in e)if(e.hasOwnProperty(s)&&(o=s.toLowerCase(),n="function"==typeof r[s]?r[s]():r[s],a=r.visProp&&"function"==typeof r.visProp[o]?r.visProp[o]():r.visProp&&r.visProp[o],!(l="function"==typeof e[s]?e[s](n)||e[s](a):n===e[s]||a===e[s])))break}else"function"==typeof e&&(l=e(r));l&&u.push(r)}return u},trim:function(t){return t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},toFraction:function(t,e,i){var s=o.A.decToFraction(t,i),r="";return 0===s[1]&&0===s[2]?r+="0":(s[0]<0&&(r+="-"),0===s[2]?r+=s[1]:1===s[2]&&1===s[3]||(0!==s[1]&&(r+=s[1]+" "),r+=!0===e?"\\frac{"+s[2]+"}{"+s[3]+"}":s[2]+"/"+s[3])),r},concat:function(t,e){var i,s=e.length;for(i=0;i<s;i++)t.push(e[i]);return t},sanitizeHTML:function(t,e){return"function"==typeof html_sanitize&&e?html_sanitize(t,(function(){}),(function(t){return t})):(t&&"string"==typeof t&&(t=t.replace(/</g,"<").replace(/>/g,">")),t)},evalSlider:function(t){return t&&t.type===r.A.OBJECT_TYPE_GLIDER&&"function"==typeof t.Value?t.Value():t},stack2jsxgraph:function(t){var e;return"["===(e=t.replace(/%pi/g,"PI").replace(/%e/g,"EULER").replace(/%phi/g,"1.618033988749895").replace(/%gamma/g,"0.5772156649015329").trim())[0]&&"]"===e[e.length-1]&&(e=e.slice(1,-1).split(/\s*,\s*/)),e}}),e.A=s.A}},__webpack_module_cache__={};function __webpack_require__(t){var e=__webpack_module_cache__[t];if(void 0!==e)return e.exports;var i=__webpack_module_cache__[t]={exports:{}};return __webpack_modules__[t](i,i.exports,__webpack_require__),i.exports}__webpack_require__.d=function(t,e){for(var i in e)__webpack_require__.o(e,i)&&!__webpack_require__.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},__webpack_require__.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)};var __webpack_exports__={};__webpack_require__.d(__webpack_exports__,{default:function(){return src}});var jxg=__webpack_require__(443),env=__webpack_require__(133),constants=__webpack_require__(561),utils_type=__webpack_require__(188);jxg.A.XML={cleanWhitespace:function(t){for(var e=t.firstChild;utils_type.A.exists(e);)3!==e.nodeType||/\S/.test(e.nodeValue)?1===e.nodeType&&this.cleanWhitespace(e):t.removeChild(e),e=e.nextSibling},parse:function(t){var e,i;return i="function"==typeof DOMParser||"object"==typeof DOMParser?DOMParser:function(){this.parseFromString=function(t){var e;return"function"==typeof ActiveXObject&&(e=new ActiveXObject("MSXML.DomDocument")).loadXML(t),e}},e=(new i).parseFromString(t,"text/xml"),this.cleanWhitespace(e),e}};var xml=jxg.A.XML,utils_event=__webpack_require__(454),expect=__webpack_require__(713),math=__webpack_require__(477);math.A.ProbFuncs={MAXNUM:17014118346046923e22,SQRTH:.7071067811865476,SQRT2:1.4142135623730951,MAXLOG:708.3964185322641,P:[2.461969814735305e-10,.5641895648310689,7.463210564422699,48.63719709856814,196.5208329560771,526.4451949954773,934.5285271719576,1027.5518868951572,557.5353353693994],Q:[13.228195115474499,86.70721408859897,354.9377788878199,975.7085017432055,1823.9091668790973,2246.3376081871097,1656.6630919416134,557.5353408177277],R:[.5641895835477551,1.275366707599781,5.019050422511805,6.160210979930536,7.4097426995044895,2.9788666537210022],S:[2.2605286322011726,9.396035249380015,12.048953980809666,17.08144507475659,9.608968090632859,3.369076451000815],T:[9.604973739870516,90.02601972038427,2232.005345946843,7003.325141128051,55592.30130103949],U:[33.56171416475031,521.3579497801527,4594.323829709801,22629.000061389095,49267.39426086359],M:128,MINV:.0078125,expx2:function(t,e){var i,s,r,o;return t=Math.abs(t),e<0&&(t=-t),i=(r=this.MINV*Math.floor(this.M*t+.5))*r,s=2*r*(o=t-r)+o*o,e<0&&(i=-i,s=-s),i+s>this.MAXLOG?1/0:i=Math.exp(i)*Math.exp(s)},polevl:function(t,e,i){var s,r;if(utils_type.A.exists(e.reduce))return e.reduce((function(e,i){return e*t+i}),0);for(r=0,s=0;r<=i;r++)s=s*t+e[r];return s},p1evl:function(t,e,i){var s,r;if(utils_type.A.exists(e.reduce))return e.reduce((function(e,i){return e*t+i}),1);for(r=0,s=1;r<i;r++)s=s*t+e[r];return s},ndtr:function(t){var e,i,s;return e=t*this.SQRTH,(s=Math.abs(e))<1?i=.5+.5*this.erf(e):(i=.5*this.erfce(s),s=this.expx2(t,-1),i*=Math.sqrt(s),e>0&&(i=1-i)),i},_underflow:function(t){return console.log("erfc","UNDERFLOW"),t<0?2:0},erfc:function(t){var e,i,s,r,o;return(s=t<0?-t:t)<1?1-this.erf(t):(o=-t*t)<-this.MAXLOG?this._underflow(t):(o=this.expx2(t,-1),s<8?(e=this.polevl(s,this.P,8),i=this.p1evl(s,this.Q,8)):(e=this.polevl(s,this.R,5),i=this.p1evl(s,this.S,6)),r=o*e/i,t<0&&(r=2-r),0===r?this._underflow(t):r)},erfce:function(t){var e,i;return t<8?(e=this.polevl(t,this.P,8),i=this.p1evl(t,this.Q,8)):(e=this.polevl(t,this.R,5),i=this.p1evl(t,this.S,6)),e/i},erf:function(t){var e;return Math.abs(t)>1?1-this.erfc(t):(e=t*t,t*this.polevl(e,this.T,4)/this.p1evl(e,this.U,5))},s2pi:2.5066282746310007,P0:[-59.96335010141079,98.00107541859997,-56.67628574690703,13.931260938727968,-1.2391658386738125],Q0:[1.9544885833814176,4.676279128988815,86.36024213908905,-225.46268785411937,200.26021238006066,-82.03722561683334,15.90562251262117,-1.1833162112133],P1:[4.0554489230596245,31.525109459989388,57.16281922464213,44.08050738932008,14.684956192885803,2.1866330685079025,-.1402560791713545,-.03504246268278482,-.0008574567851546854],Q1:[15.779988325646675,45.39076351288792,41.3172038254672,15.04253856929075,2.504649462083094,-.14218292285478779,-.03808064076915783,-.0009332594808954574],P2:[3.2377489177694603,6.915228890689842,3.9388102529247444,1.3330346081580755,.20148538954917908,.012371663481782003,.00030158155350823543,26580697468673755e-22,6.239745391849833e-9],Q2:[6.02427039364742,3.6798356385616087,1.3770209948908132,.21623699359449663,.013420400608854318,.00032801446468212774,28924786474538068e-22,6.790194080099813e-9],ndtri:function(t){var e,i,s,r,o;return t<=0?-1/0:t>=1?1/0:(o=1,(i=t)>.8646647167633873&&(i=1-i,o=0),i>.1353352832366127?(e=(i-=.5)+i*((r=i*i)*this.polevl(r,this.P0,4)/this.p1evl(r,this.Q0,8)),e*=this.s2pi):(s=1/(e=Math.sqrt(-2*Math.log(i))),e=e-Math.log(e)/e-(e<8?s*this.polevl(s,this.P1,8)/this.p1evl(s,this.Q1,8):s*this.polevl(s,this.P2,8)/this.p1evl(s,this.Q2,8)),0!==o&&(e=-e),e))},erfi:function(t){return this.ndtri(.5*(t+1))*this.SQRTH}};var probfuncs=math.A.ProbFuncs,ia=__webpack_require__(733);math.A.Extrapolate={upper:15,infty:1e4,wynnEps:function(t,e,i){var s,r,o,n,a;if(i[e]=t,0===e)a=t;else{for(o=0,s=e;s>0;s--)r=o,o=i[s-1],n=i[s]-o,Math.abs(n)<=1e-15?i[s-1]=1e20:i[s-1]=1*r+1/n;a=i[e%2]}return a},aitken:function(t,e,i){var s,r,o,n,a,l;if(i[e]=t,e<2)s=t;else{for(n=e/2,a=1;a<=n;a++)r=i[(l=e-2*a)+2]-2*i[l+1]+i[l],Math.abs(r)<1e-15?i[l]=1e20:(o=i[l]-i[l+1],i[l]-=o*o/r);s=i[e%2]}return s},brezinski:function(t,e,i){var s,r,o,n,a,l,h,u;if(i[e]=t,e<3)s=t;else{for(l=e/3,u=e,h=1;h<=l;h++)o=i[(u-=3)+1]-i[u],n=i[u+2]-i[u+1],r=(a=i[u+3]-i[u+2])*(n-o)-o*(a-n),Math.abs(r)<1e-15?i[u]=1e20:i[u]=i[u+1]-o*n*(a-n)/r;s=i[e%3]}return s},iteration:function(t,e,i,s,r){var o,n,a,l,h=NaN,u=[],c="finite",d=e;for(r=r||0,o=1;o<=this.upper;o++){if(n=i(t+(d=0===r?e/(o+1):.5*d),!0),a=this[s](n,o-1,u),isNaN(a)){c="NaN";break}if(0!==n&&a/n>this.infty){h=a,c="infinite";break}if(l=a-h,Math.abs(l)<1e-7)break;h=a}return[h,c,1-(o-1)/this.upper]},levin:function(t,e,i,s,r,o){var n,a,l,h;if(h=1/(s+e),r[e]=t/i,o[e]=1/i,e>0&&(r[e-1]=r[e]-r[e-1],o[e-1]=o[e]-o[e-1],e>1))for(l=(s+e-1)*h,n=2;n<=e;n++)a=(s+e-n)*Math.pow(l,n-2)*h,r[e-n]=r[e-n+1]-a*r[e-n],o[e-n]=o[e-n+1]-a*o[e-n],h*=l;return Math.abs(o[0])<1e-15?1e20:r[0]/o[0]},iteration_levin:function(t,e,i,s){var r,o,n,a,l,h,u,c=NaN,d=[],p=[],_="finite",f=e;for(s=s||0,a=i(t+e,!0),r=1;r<=this.upper;r++){if(l=(o=i(t+(f=0===s?e/(r+1):.5*f),!0))-a,u="u"===(Math.abs(l)<1?"u":"t")?(1+r)*l:l,a=o,h=(n=this.levin(o,r-1,u,1,d,p))-c,isNaN(n)){_="NaN";break}if(0!==o&&n/o>this.infty){c=n,_="infinite";break}if(Math.abs(h)<1e-7)break;c=n}return[c,_,1-(r-1)/this.upper]},limit:function(t,e,i){return this.iteration_levin(t,e,i,0)}};var extrapolate=math.A.Extrapolate,geometry=__webpack_require__(571);math.A.Quadtree=function(t,e,i){e=e||{capacity:10,pointType:"coords"},this.config={},this.config.capacity=e.capacity||10,this.config.pointType=e.pointType||"coords",this.points=[],this.xlb=t[0],this.xub=t[2],this.ylb=t[3],this.yub=t[1],this.parent=i||null,this.northWest=null,this.northEast=null,this.southEast=null,this.southWest=null},utils_type.A.extend(math.A.Quadtree.prototype,{contains:function(t,e){return this.xlb<t&&t<=this.xub&&this.ylb<e&&e<=this.yub},insert:function(t){switch(this.config.pointType){case"coords":if(!this.contains(t.usrCoords[1],t.usrCoords[2]))return!1;break;case"object":if(!this.contains(t.x,t.y))return!1}return this.points.length<this.config.capacity&&null===this.northWest?(this.points.push(t),!0):(null===this.northWest&&this.subdivide(),!!this.northWest.insert(t)||(!!this.northEast.insert(t)||(!!this.southEast.insert(t)||!!this.southWest.insert(t))))},subdivide:function(){var t=this.xlb+.5*(this.xub-this.xlb),e=this.ylb+.5*(this.yub-this.ylb);this.northWest=new math.A.Quadtree([this.xlb,this.yub,t,e],this.config,this),this.northEast=new math.A.Quadtree([t,this.yub,this.xub,e],this.config,this),this.southEast=new math.A.Quadtree([this.xlb,e,t,this.ylb],this.config,this),this.southWest=new math.A.Quadtree([t,e,this.xub,this.ylb],this.config,this)},_query:function(t,e){var i;if(this.contains(t,e)){if(null===this.northWest)return this;if(i=this.northWest._query(t,e))return i;if(i=this.northEast._query(t,e))return i;if(i=this.southEast._query(t,e))return i;if(i=this.southWest._query(t,e))return i}return!1},query:function(t,e){var i,s;return utils_type.A.exists(e)?(i=t,s=e):(i=t.usrCoords[1],s=t.usrCoords[2]),this._query(i,s)},hasPoint:function(t,e,i){var s,r,o;if(this.contains(t,e)){switch(o=this.points.length,this.config.pointType){case"coords":for(r=0;r<o;r++)if(geometry.A.distance([t,e],this.points[r].usrCoords.slice(1),2)<i)return!0;break;case"object":for(r=0;r<o;r++)if(geometry.A.distance([t,e],[this.points[r].x,this.points[r].y],2)<i)return!0}if(null===this.northWest)return!1;if(s=this.northWest.hasPoint(t,e,i))return s;if(s=this.northEast.hasPoint(t,e,i))return s;if(s=this.southEast.hasPoint(t,e,i))return s;if(s=this.southWest.hasPoint(t,e,i))return s}return!1},getAllPoints:function(){var t=[];return this.getAllPointsRecursive(t),t},getAllPointsRecursive(t){Array.prototype.push.apply(t,this.points.slice()),null!==this.northWest&&(this.northWest.getAllPointsRecursive(t),this.northEast.getAllPointsRecursive(t),this.southEast.getAllPointsRecursive(t),this.southWest.getAllPointsRecursive(t))}});var qdt=math.A.Quadtree;math.A.BoxQuadtree=function(t,e,i){var s,r,o,n;t--,this.depth=t,this.capacity=e,this.items=[],this.northWest=null,this.northEast=null,this.southEast=null,this.southWest=null,this.bbox=null,this.cx=null,this.cy=null,i&&(s=i[0],r=i[1],o=i[2],n=i[3],this.cx=.5*(s+o),this.cy=.5*(r+n),this.bbox=[s,r,o,n])},utils_type.A.extend(math.A.BoxQuadtree.prototype,{insert:function(t){var e,i,s,r,o,n,a,l,h,u,c,d=[],p=[],_=[],f=[];if(null===this.bbox){for(i=t.length,s=n=1/0,o=r=-1/0,e=0;e<t.length;e++)s=(a=t[e]).xlb<s?a.xlb:s,r=a.yub>r?a.yub:r,o=a.xub>o?a.xub:o,n=a.ylb<n?a.ylb:n;this.cx=.5*(s+o),this.cy=.5*(r+n),this.bbox=[s,r,o,n]}else s=this.bbox[0],r=this.bbox[1],o=this.bbox[2],n=this.bbox[3];if(0===this.depth||this.items.length+t.length<this.capacity)return this.items=this.items.concat(t),this;for(i=t.length,e=0;e<i;e++)l=(a=t[e]).xlb<=this.cx&&a.yub>this.cy,u=a.xlb<=this.cx&&a.ylb<=this.cy,h=a.xub>this.cx&&a.yub>this.cy,c=a.xub>this.cx&&a.ylb<=this.cy,l&&h&&c&&u?this.items.push(a):(l&&d.push(a),u&&_.push(a),h&&p.push(a),c&&f.push(a));return this.subdivide(d,_,p,f,s,r,o,n),this},insertItem:function(t){var e,i,s,r,o,n,a,l,h=[],u=[],c=[],d=[];return null===this.bbox?(e=r=1/0,s=i=-1/0,e=t.xlb<e?t.xlb:e,i=t.yub>i?t.yub:i,s=t.xub>s?t.xub:s,r=t.ylb<r?t.ylb:r,this.cx=.5*(e+s),this.cy=.5*(i+r),this.bbox=[e,i,s,r]):(e=this.bbox[0],i=this.bbox[1],s=this.bbox[2],r=this.bbox[3]),0===this.depth||this.items.length+1<this.capacity?(this.items.push(t),this):(o=t.xlb<=this.cx&&t.yub>this.cy,a=t.xlb<=this.cx&&t.ylb<=this.cy,n=t.xub>this.cx&&t.yub>this.cy,l=t.xub>this.cx&&t.ylb<=this.cy,o&&n&&l&&a?this.items.push(t):(o&&h.push(t),a&&c.push(t),n&&u.push(t),l&&d.push(t)),this.subdivide(h,c,u,d,e,i,s,r),this)},subdivide:function(t,e,i,s,r,o,n,a){return t.length>0&&(null===this.northWest&&(this.northWest=new JXG.Math.BoxQuadtree(this.depth,this.capacity,[r,o,this.cx,this.cy])),this.northWest.insert(t)),e.length>0&&(null===this.southWest&&(this.southWest=new JXG.Math.BoxQuadtree(this.depth,this.capacity,[r,this.cy,this.cx,a])),this.southWest.insert(e)),i.length>0&&(null===this.northEast&&(this.northEast=new JXG.Math.BoxQuadtree(this.depth,this.capacity,[this.cx,o,n,this.cy])),this.northEast.insert(i)),s.length>0&&(null===this.southEast&&(this.southEast=new JXG.Math.BoxQuadtree(this.depth,this.capacity,[this.cx,this.cy,n,a])),this.southEast.insert(s)),this},find:function(t){var e,i,s,r=[];for(i=this.items.length,e=0;e<i;e++)s=this.items[e],t[2]>=s.xlb&&t[0]<=s.xub&&t[3]<=s.yub&&t[1]>=s.ylb&&r.push(this.items[e]);return null!==this.northWest&&t[0]<=this.cx&t[1]>=this.cy&&utils_type.A.concat(r,this.northWest.find(t)),null!==this.southWest&&t[0]<=this.cx&t[3]<=this.cy&&utils_type.A.concat(r,this.southWest.find(t)),null!==this.northEast&&t[2]>=this.cx&t[1]>=this.cy&&utils_type.A.concat(r,this.northEast.find(t)),null!==this.southEast&&t[2]>=this.cx&t[3]<=this.cy&&utils_type.A.concat(r,this.southEast.find(t)),r},analyzeTree:function(){var t,e={number_items:this.items.length,depth:1};return null!==this.northWest&&(t=this.northWest.analyzeTree(),e.number_items+=t.number_items,e.depth=Math.max(e.depth,1+t.depth)),null!==this.southWest&&(t=this.southWest.analyzeTree(),e.number_items+=t.number_items,e.depth=Math.max(e.depth,1+t.depth)),null!==this.northEast&&(t=this.northEast.analyzeTree(),e.number_items+=t.number_items,e.depth=Math.max(e.depth,1+t.depth)),null!==this.southEast&&(t=this.southEast.analyzeTree(),e.number_items+=t.number_items,e.depth=Math.max(e.depth,1+t.depth)),e},plot:function(){var t,e=[],i=[];return e.push(this.bbox[0]),i.push(this.bbox[3]),e.push(this.bbox[2]),i.push(this.bbox[3]),e.push(this.bbox[2]),i.push(this.bbox[1]),e.push(this.bbox[0]),i.push(this.bbox[1]),e.push(this.bbox[0]),i.push(this.bbox[3]),e.push(NaN),i.push(NaN),null!==this.northWest&&(t=this.northWest.plot(),utils_type.A.concat(e,t[0]),utils_type.A.concat(i,t[1])),null!==this.northEast&&(t=this.northEast.plot(),utils_type.A.concat(e,t[0]),utils_type.A.concat(i,t[1])),null!==this.southEast&&(t=this.southEast.plot(),utils_type.A.concat(e,t[0]),utils_type.A.concat(i,t[1])),null!==this.southWest&&(t=this.southWest.plot(),utils_type.A.concat(e,t[0]),utils_type.A.concat(i,t[1])),[e,i]}});var bqdt=math.A.BoxQuadtree,numerics=__webpack_require__(171);jxg.A.Math.Nlp={arr:function(t){return new Float64Array(t)},arr2:function(t,e){for(var i=0,s=new Array(t);i<t;)s[i]=this.arr(e),i++;return s},arraycopy:function(t,e,i,s,r){for(var o=0;o<r;)i[o+s]=t[o+e],o++},lastNumberOfEvaluations:0,GetLastNumberOfEvaluations:function(){return this.lastNumberOfEvaluations},Normal:0,MaxIterationsReached:1,DivergingRoundingErrors:2,FindMinimum:function(t,e,i,s,r,o,n,a,l){var h,u,c=i+2,d=this.arr(e+1),p=this;return this.lastNumberOfEvaluations=0,l&&console.log("Experimental feature 'testForRoundingErrors' is activated."),d[0]=0,this.arraycopy(s,0,d,1,e),u=function(e,i,s,r){var o,n,a=p.arr(e);return p.lastNumberOfEvaluations=p.lastNumberOfEvaluations+1,p.arraycopy(s,1,a,0,e),o=p.arr(i),n=t(e,i,a,o),p.arraycopy(o,0,r,1,i),n},h=this.cobylb(u,e,i,c,d,r,o,n,a,l),this.arraycopy(d,1,s,0,e),h},cobylb:function(t,e,i,s,r,o,n,a,l,h){var u,c,d,p,_,f,A,g,m,y,b,v,C,P,x,E,O,M,S,w,T,N,j,D,k,R,L,B,I,Y=-1,X=0,U=0,F=e+1,z=i+1,J=o,G=0,H=!1,W=!1,V=0,$=0,K=0,q=this.arr(1+s),Z=this.arr2(1+e,1+F),Q=this.arr2(1+e,1+e),tt=this.arr2(1+s,1+F),et=this.arr2(1+e,1+z),it=this.arr(1+e),st=this.arr(1+e),rt=this.arr(1+e),ot=this.arr(1+e),nt=this.arr(1+e);for(a>=2&&console.log("The initial value of RHO is "+J+" and PARMU is set to zero."),g=0,f=1/J,c=1;c<=e;++c)Z[c][F]=r[c],Z[c][c]=J,Q[c][c]=f;m=F,y=!1;t:for(;;){if(g>=l&&g>0){Y=this.MaxIterationsReached;break t}for(++g,X=t(e,i,r,q),U=0,p=1;p<=i;++p)U=Math.max(U,-q[p]);if(g!==a-1&&3!==a||this.PrintIterationResult(g,X,U,r,e,a),q[z]=X,q[s]=U,b=!0,!y){for(b=!1,c=1;c<=s;++c)tt[c][m]=q[c];if(g<=F){if(m<=e)if(tt[z][F]<=X)r[m]=Z[m][F];else{for(Z[m][F]=r[m],p=1;p<=s;++p)tt[p][m]=tt[p][F],tt[p][F]=q[p];for(p=1;p<=m;++p){for(Z[m][p]=-J,f=0,c=p;c<=m;++c)f-=Q[c][p];Q[m][p]=f}}if(g<=e){r[m=g]+=J;continue t}}y=!0}e:for(;;){i:do{if(!b){for(v=tt[z][F]+G*tt[s][F],C=F,d=1;d<=e;++d)(f=tt[z][d]+G*tt[s][d])<v?(C=d,v=f):f===v&&0===G&&tt[s][d]<tt[s][C]&&(C=d);if(C<=e){for(c=1;c<=s;++c)f=tt[c][F],tt[c][F]=tt[c][C],tt[c][C]=f;for(c=1;c<=e;++c){for(f=Z[c][C],Z[c][C]=0,Z[c][F]+=f,A=0,p=1;p<=e;++p)Z[c][p]-=f,A-=Q[p][c];Q[C][c]=A}}if(P=0,h)for(c=1;c<=e;++c)for(d=1;d<=e;++d)f=this.DOT_PRODUCT_ROW_COL(Q,c,Z,d,1,e)-(c===d?1:0),P=Math.max(P,Math.abs(f));if(P>.1){Y=this.DivergingRoundingErrors;break t}for(p=1;p<=z;++p){for(q[p]=-tt[p][F],d=1;d<=e;++d)nt[d]=tt[p][d]+q[p];for(c=1;c<=e;++c)et[c][p]=(p===z?-1:1)*this.DOT_PRODUCT_ROW_COL(nt,-1,Q,c,1,e)}for(H=!0,V=.25*J,x=2.1*J,d=1;d<=e;++d){for(E=0,O=0,p=1;p<=e;++p)E+=Q[d][p]*Q[d][p],O+=Z[p][d]*Z[p][d];it[d]=1/Math.sqrt(E),st[d]=Math.sqrt(O),(it[d]<V||st[d]>x)&&(H=!1)}if(!y&&!H){for(m=0,f=x,d=1;d<=e;++d)st[d]>f&&(m=d,f=st[d]);if(0===m)for(d=1;d<=e;++d)it[d]<f&&(m=d,f=it[d]);for(f=.5*J*it[m],p=1;p<=e;++p)ot[p]=f*Q[m][p];for(M=0,S=0,u=0,p=1;p<=z;++p)u=this.DOT_PRODUCT_ROW_COL(ot,-1,et,p,1,e),p<z&&(f=tt[p][F],M=Math.max(M,-u-f),S=Math.max(S,u-f));for(w=G*(M-S)>2*u?-1:1,f=0,c=1;c<=e;++c)ot[c]=w*ot[c],Z[c][m]=ot[c],f+=Q[m][c]*ot[c];for(p=1;p<=e;++p)Q[m][p]/=f;for(d=1;d<=e;++d){if(d!==m)for(f=this.DOT_PRODUCT_ROW_COL(Q,d,ot,-1,1,e),p=1;p<=e;++p)Q[d][p]-=f*Q[m][p];r[d]=Z[d][F]+ot[d]}continue t}if(!(W=this.trstlp(e,i,et,q,J,ot))){for(f=0,p=1;p<=e;++p)f+=ot[p]*ot[p];if(f<.25*J*J){y=!0;break i}}for(u=0,T=0,q[z]=0,p=1;p<=z;++p)u=q[p]-this.DOT_PRODUCT_ROW_COL(ot,-1,et,p,1,e),p<z&&(T=Math.max(T,u));if(G<1.5*(N=($=tt[s][F]-T)>0?u/$:0))for(G=2*N,a>=2&&console.log("Increase in PARMU to "+G),j=tt[z][F]+G*tt[s][F],d=1;d<=e;++d)if((f=tt[z][d]+G*tt[s][d])<j||f===j&&0===G&&tt[s][d]<tt[s][F])continue e;for(K=G*$-u,p=1;p<=e;++p)r[p]=Z[p][F]+ot[p];y=!0;continue t}for(b=!1,D=tt[z][F]+G*tt[s][F]-(X+G*U),0===G&&X===tt[z][F]&&(K=$,D=tt[s][F]-U),k=D<=0?1:0,m=0,d=1;d<=e;++d)(f=Math.abs(this.DOT_PRODUCT_ROW_COL(Q,d,ot,-1,1,e)))>k&&(m=d,k=f),rt[d]=f*it[d];for(R=1.1*J,_=0,d=1;d<=e;++d)if(rt[d]>=V||rt[d]>=it[d]){if(f=st[d],D>0){for(f=0,p=1;p<=e;++p)f+=Math.pow(ot[p]-Z[p][d],2);f=Math.sqrt(f)}f>R&&(_=d,R=f)}if(_>0&&(m=_),0!==m){for(f=0,c=1;c<=e;++c)Z[c][m]=ot[c],f+=Q[m][c]*ot[c];for(p=1;p<=e;++p)Q[m][p]/=f;for(d=1;d<=e;++d)if(d!==m)for(f=this.DOT_PRODUCT_ROW_COL(Q,d,ot,-1,1,e),p=1;p<=e;++p)Q[d][p]-=f*Q[m][p];for(p=1;p<=s;++p)tt[p][m]=q[p];if(D>0&&D>=.1*K)continue e}}while(0);if(H){if(J<=n){Y=this.Normal;break t}if(L=0,B=0,(J*=.5)<=1.5*n&&(J=n),G>0){for(I=0,p=1;p<=z;++p){for(B=L=tt[p][F],c=1;c<=e;++c)L=Math.min(L,tt[p][c]),B=Math.max(B,tt[p][c]);p<=i&&L<.5*B&&(f=Math.max(B,0)-L,I=I<=0?f:Math.min(I,f))}0===I?G=0:B-L<G*I&&(G=(B-L)/I)}a>=2&&console.log("Reduction in RHO to "+J+" and PARMU = "+G),2===a&&this.PrintIterationResult(g,tt[z][F],tt[s][F],this.COL(Z,F),e,a)}else y=!1}}switch(Y){case this.Normal:if(a>=1&&console.log("%nNormal return from subroutine COBYLA%n"),W)return a>=1&&this.PrintIterationResult(g,X,U,r,e,a),Y;break;case this.MaxIterationsReached:a>=1&&console.log("%nReturn from subroutine COBYLA because the MAXFUN limit has been reached.%n");break;case this.DivergingRoundingErrors:a>=1&&console.log("%nReturn from subroutine COBYLA because rounding errors are becoming damaging.%n")}for(p=1;p<=e;++p)r[p]=Z[p][F];return X=tt[z][F],U=tt[s][F],a>=1&&this.PrintIterationResult(g,X,U,r,e,a),Y},trstlp:function(t,e,i,s,r,o){var n,a,l,h,u,c,d,p,_,f,A,g,m,y,b,v,C,P,x,E,O,M,S,w,T,N,j,D,k,R,L,B,I,Y=0,X=0,U=0,F=this.arr2(1+t,1+t),z=this.arr(2+e),J=this.arr(2+e),G=this.arr(1+t),H=this.arr(1+t),W=this.arr(2+e),V=this.arr(2+e),$=e,K=0;for(l=1;l<=t;++l)F[l][l]=1,o[l]=0;if(n=0,a=0,e>=1){for(h=1;h<=e;++h)s[h]>a&&(a=s[h],n=h);for(h=1;h<=e;++h)V[h]=h,J[h]=a-s[h]}u=!0;do{t:for(;;){(!u||u&&0===a)&&(n=$=e+1,V[$]=$,J[$]=0),u=!1,c=0,d=0,p=0,_=0;e:do{if(f=$===e?a:-this.DOT_PRODUCT_ROW_COL(o,-1,i,$,1,t),0===d||f<c?(c=f,X=K,d=3):K>X?(X=K,d=3):--d,0===d)break t;if(A=0,n<=K){if(n<K){g=V[n],m=J[n],h=n;do{for(v=V[b=h+1],C=this.DOT_PRODUCT(this.PART(this.COL(F,h),1,t),this.PART(this.COL(i,v),1,t)),Y=math.A.hypot(C,z[b]),P=z[b]/Y,x=C/Y,z[b]=P*z[h],z[h]=Y,l=1;l<=t;++l)Y=P*F[l][b]+x*F[l][h],F[l][b]=P*F[l][h]-x*F[l][b],F[l][h]=Y;V[h]=v,J[h]=J[b],h=b}while(h<K);V[h]=g,J[h]=m}if(--K,$>e)for(Y=1/z[K],h=1;h<=t;++h)G[h]=Y*F[h][K];else for(Y=this.DOT_PRODUCT_ROW_COL(G,-1,F,K+1,1,t),h=1;h<=t;++h)G[h]-=Y*F[h][K+1]}else{for(v=V[n],h=1;h<=t;++h)H[h]=i[h][v];for(E=0,h=t;h>K;){for(C=0,O=0,l=1;l<=t;++l)C+=Y=F[l][h]*H[l],O+=Math.abs(Y);if(M=O+.1*Math.abs(C),S=O+.2*Math.abs(C),(O>=M||M>=S)&&(C=0),0===E)E=C;else for(b=h+1,P=C/(Y=math.A.hypot(C,E)),x=E/Y,E=Y,l=1;l<=t;++l)Y=P*F[l][h]+x*F[l][b],F[l][b]=P*F[l][b]-x*F[l][h],F[l][h]=Y;--h}if(0===E){A=-1,h=K;do{for(w=0,T=0,l=1;l<=t;++l)w+=Y=F[l][h]*H[l],T+=Math.abs(Y);if(M=T+.1*Math.abs(w),S=T+.2*Math.abs(w),T<M&&M<S){if((Y=w/z[h])>0&&V[h]<=e&&(I=J[h]/Y,(A<0||I<A)&&(A=I)),h>=2)for(N=V[h],l=1;l<=t;++l)H[l]-=Y*i[l][N];W[h]=Y}else W[h]=0}while(--h>0);if(A<0)break t;for(h=1;h<=K;++h)J[h]=Math.max(0,J[h]-A*W[h]);if(n<K){g=V[n],m=J[n],h=n;do{for(N=V[b=h+1],C=this.DOT_PRODUCT(this.PART(this.COL(F,h),1,t),this.PART(this.COL(i,N),1,t)),Y=math.A.hypot(C,z[b]),P=z[b]/Y,x=C/Y,z[b]=P*z[h],z[h]=Y,l=1;l<=t;++l)Y=P*F[l][b]+x*F[l][h],F[l][b]=P*F[l][h]-x*F[l][b],F[l][h]=Y;V[h]=N,J[h]=J[b],h=b}while(h<K);V[h]=g,J[h]=m}if(0===(Y=this.DOT_PRODUCT(this.PART(this.COL(F,K),1,t),this.PART(this.COL(i,v),1,t))))break t;z[K]=Y,J[n]=0,J[K]=A}else z[++K]=E,J[n]=J[K],J[K]=0;if(V[n]=V[K],V[K]=v,$>e&&v!==$){for(h=K-1,C=this.DOT_PRODUCT(this.PART(this.COL(F,h),1,t),this.PART(this.COL(i,v),1,t)),Y=math.A.hypot(C,z[K]),P=z[K]/Y,x=C/Y,z[K]=P*z[h],z[h]=Y,l=1;l<=t;++l)Y=P*F[l][K]+x*F[l][h],F[l][K]=P*F[l][h]-x*F[l][K],F[l][h]=Y;V[K]=V[h],V[h]=v,Y=J[h],J[h]=J[K],J[K]=Y}if($>e)for(Y=1/z[K],h=1;h<=t;++h)G[h]=Y*F[h][K];else for(v=V[K],Y=(this.DOT_PRODUCT_ROW_COL(G,-1,i,v,1,t)-1)/z[K],h=1;h<=t;++h)G[h]-=Y*F[h][K]}for(j=r*r,k=0,D=0,l=1;l<=t;++l)Math.abs(o[l])>=1e-6*r&&(j-=o[l]*o[l]),k+=o[l]*G[l],D+=G[l]*G[l];if(j<=0)break t;if(Y=Math.sqrt(D*j),Math.abs(k)>=1e-6*Y&&(Y=Math.sqrt(D*j+k*k)),p=_=j/(Y+k),$===e){if(S=p+.2*a,p>=(M=p+.1*a)||M>=S)break e;p=Math.min(p,a)}for(h=1;h<=t;++h)H[h]=o[h]+p*G[h];if($===e)for(U=a,a=0,h=1;h<=K;++h)Y=s[v=V[h]]-this.DOT_PRODUCT_ROW_COL(H,-1,i,v,1,t),a=Math.max(a,Y);h=K;do{for(R=0,L=0,l=1;l<=t;++l)R+=Y=F[l][h]*H[l],L+=Math.abs(Y);if(M=L+.1*Math.abs(R),S=L+.2*Math.abs(R),(L>=M||M>=S)&&(R=0),W[h]=R/z[h],h>=2)for(v=V[h],l=1;l<=t;++l)H[l]-=W[h]*i[l][v]}while(h-- >=2);for($>e&&(W[K]=Math.max(0,W[K])),h=1;h<=t;++h)H[h]=o[h]+p*G[h];if($>K)for(h=K+1;h<=$;++h){for(y=a-s[v=V[h]],B=a+Math.abs(s[v]),l=1;l<=t;++l)y+=Y=i[l][v]*H[l],B+=Math.abs(Y);M=B+.1*Math.abs(y),S=B+.2*Math.abs(y),(B>=M||M>=S)&&(y=0),W[h]=y}for(A=1,n=0,h=1;h<=$;++h)W[h]<0&&(Y=J[h]/(J[h]-W[h]))<A&&(A=Y,n=h);for(Y=1-A,h=1;h<=t;++h)o[h]=Y*o[h]+A*H[h];for(h=1;h<=$;++h)J[h]=Math.max(0,Y*J[h]+A*W[h]);$===e&&(a=U+A*(a-U))}while(n>0);if(p===_)return!0}}while($===e);return!1},PrintIterationResult:function(t,e,i,s,r,o){o>1&&console.log("NFVALS = "+t+" F = "+e+" MAXCV = "+i),o>1&&console.log("X = "+this.PART(s,1,r))},ROW:function(t,e){return t[e].slice()},COL:function(t,e){var i,s=t.length,r=[];for(i=0;i<s;++i)r[i]=t[i][e];return r},PART:function(t,e,i){return t.slice(e,i+1)},FORMAT:function(t){return t.join(",")},DOT_PRODUCT:function(t,e){var i,s=0,r=t.length;for(i=0;i<r;++i)s+=t[i]*e[i];return s},DOT_PRODUCT_ROW_COL:function(t,e,i,s,r,o){var n,a=0;if(-1===e)for(n=r;n<=o;++n)a+=t[n]*i[n][s];else if(-1===s)for(n=r;n<=o;++n)a+=t[e][n]*i[n];else for(n=r;n<=o;++n)a+=t[e][n]*i[n][s];return a}};var nlp=jxg.A.Math.Nlp,base_coords=__webpack_require__(904),statistics=__webpack_require__(588);math.A.Plot={checkReal:function(t){var e,i,s=!1,r=t.length;for(e=0;e<r;e++)if(i=t[e].usrCoords,!isNaN(i[1])&&!isNaN(i[2])&&Math.abs(i[0])>math.A.eps){s=!0;break}return s},updateParametricCurveNaive:function(t,e,i,s){var r,o,n=!1,a=(i-e)/s;for(r=0;r<s;r++)o=e+r*a,t.points[r].setCoordinates(constants.A.COORDS_BY_USER,[t.X(o,n),t.Y(o,n)],!1),t.points[r]._t=o,n=!0;return t},isSegmentOutside:function(t,e,i,s,r){return e<0&&s<0||e>r.canvasHeight&&s>r.canvasHeight||t<0&&i<0||t>r.canvasWidth&&i>r.canvasWidth},isDistOK:function(t,e,i,s){return Math.abs(t)<i&&Math.abs(e)<s&&!isNaN(t+e)},isSegmentDefined:function(t,e,i,s){return!(isNaN(t+e)&&isNaN(i+s))},updateParametricCurveOld:function(t,e,i){var s,r,o,n,a,l,h,u,c,d,p,_=!1,f=new base_coords.A(constants.A.COORDS_BY_USER,[0,0],t.board,!1),A=[],g=[],m=[],y=[],b=!1,v=0,C=function(t,e,i){var s,r=i[1]-t[1],o=i[2]-t[2],n=e[0]-t[1],a=e[1]-t[2],l=n*n+a*a;return l>=math.A.eps&&(s=(r*n+o*a)/l)>0&&(s<=1?(r-=s*n,o-=s*a):(r-=n,o-=a)),math.A.hypot(r,o)};for(jxg.A.deprecated("Curve.updateParametricCurveOld()"),t.board.updateQuality===t.board.BOARD_QUALITY_LOW?(c=15,d=10,p=10):(c=21,d=.7,p=.7),y[0]=i-e,s=1;s<c;s++)y[s]=.5*y[s-1];s=1,A[0]=1,g[0]=0,r=e,f.setCoordinates(constants.A.COORDS_BY_USER,[t.X(r,_),t.Y(r,_)],!1),_=!0,a=f.scrCoords[1],l=f.scrCoords[2],r=i,f.setCoordinates(constants.A.COORDS_BY_USER,[t.X(r,_),t.Y(r,_)],!1),o=f.scrCoords[1],n=f.scrCoords[2],m[0]=[o,n],h=1,u=0,t.points=[],t.points[v++]=new base_coords.A(constants.A.COORDS_BY_SCREEN,[a,l],t.board,!1);do{for(b=this.isDistOK(o-a,n-l,d,p)||this.isSegmentOutside(a,l,o,n,t.board);u<c&&(!b||u<6)&&(u<=7||this.isSegmentDefined(a,l,o,n));)A[h]=s,g[h]=u,m[h]=[o,n],h+=1,r=e+(s=2*s-1)*y[++u],f.setCoordinates(constants.A.COORDS_BY_USER,[t.X(r,_),t.Y(r,_)],!1,!0),o=f.scrCoords[1],n=f.scrCoords[2],b=this.isDistOK(o-a,n-l,d,p)||this.isSegmentOutside(a,l,o,n,t.board);v>1&&C(t.points[v-2].scrCoords,[o,n],t.points[v-1].scrCoords)<.015&&(v-=1),t.points[v]=new base_coords.A(constants.A.COORDS_BY_SCREEN,[o,n],t.board,!1),t.points[v]._t=r,v+=1,a=o,l=n,o=m[h-=1][0],n=m[h][1],u=g[h]+1,s=2*A[h]}while(h>0&&v<5e5);return t.numberPoints=t.points.length,t},_insertPoint_v2:function(t,e,i){var s=!isNaN(this._lastCrds[1]+this._lastCrds[2]),r=!isNaN(e.scrCoords[1]+e.scrCoords[2]),o=t.board.canvasWidth,n=t.board.canvasHeight,a=500;(!(r=r&&e.scrCoords[1]>-500&&e.scrCoords[2]>-500&&e.scrCoords[1]<o+a&&e.scrCoords[2]<n+a)&&s||r&&(!s||Math.abs(e.scrCoords[1]-this._lastCrds[1])>.7||Math.abs(e.scrCoords[2]-this._lastCrds[2])>.7))&&(e._t=i,t.points.push(e),this._lastCrds=e.copy("scrCoords"))},neighborhood_isNaN_v2:function(t,e){var i,s,r=new base_coords.A(constants.A.COORDS_BY_USER,[0,0],t.board,!1);return i=e+math.A.eps,r.setCoordinates(constants.A.COORDS_BY_USER,[t.X(i,!0),t.Y(i,!0)],!1),s=r.usrCoords,!!(isNaN(s[1]+s[2])||(i=e-math.A.eps,r.setCoordinates(constants.A.COORDS_BY_USER,[t.X(i,!0),t.Y(i,!0)],!1),s=r.usrCoords,isNaN(s[1]+s[2])))},_borderCase:function(t,e,i,s,r,o,n,a){var l,h,u,c,d,p,_=null,f=!1;if(a<=1){if(h=new base_coords.A(constants.A.COORDS_BY_USER,[0,0],t.board,!1),isNaN(e[1]+e[2])&&!isNaN(s[1]+s[2])&&!this.neighborhood_isNaN_v2(t,r))return!1;if(isNaN(i[1]+i[2])&&!isNaN(s[1]+s[2])&&!this.neighborhood_isNaN_v2(t,o))return!1;if(isNaN(s[1]+s[2])&&(!isNaN(e[1]+e[2])||!isNaN(i[1]+i[2]))&&!this.neighborhood_isNaN_v2(t,n))return!1;c=0;do{if(isNaN(e[1]+e[2])&&!isNaN(s[1]+s[2]))d=r,p=n;else if(isNaN(i[1]+i[2])&&!isNaN(s[1]+s[2]))d=o,p=n;else if(isNaN(s[1]+s[2])&&!isNaN(i[1]+i[2]))d=n,p=o;else{if(!isNaN(s[1]+s[2])||isNaN(e[1]+e[2]))return!1;d=n,p=r}l=.5*(d+p),h.setCoordinates(constants.A.COORDS_BY_USER,[t.X(l,!0),t.Y(l,!0)],!1),u=h.usrCoords,(f=isNaN(u[1]+u[2]))?d=l:p=l,++c}while(f&&c<30);if(c<30&&(_=u.slice(),s=u.slice(),p=l),null!==_)return this._insertPoint_v2(t,new base_coords.A(constants.A.COORDS_BY_USER,_,t.board,!1)),!0}return!1},_plotRecursive_v2:function(t,e,i,s,r,o,n){var a,l,h,u,c,d=0,p=new base_coords.A(constants.A.COORDS_BY_USER,[0,0],t.board,!1);if(!(t.numberPoints>65536))return o<this.nanLevel&&this._isUndefined(t,e,i,s,r)||o<this.nanLevel&&this._isOutside(e,i,s,r,t.board)?this:(a=.5*(i+r),p.setCoordinates(constants.A.COORDS_BY_USER,[t.X(a,!0),t.Y(a,!0)],!1),l=p.scrCoords,this._borderCase(t,e,s,l,i,r,a,o)||(h=this._triangleDists(e,s,l),u=o<this.smoothLevel&&h[3]<n,c=o<=this.jumpLevel&&(isNaN(h[0])||isNaN(h[1])||isNaN(h[2]))||o<this.jumpLevel&&(h[2]>.99*h[0]||h[1]>.99*h[0]||h[0]===1/0||h[1]===1/0||h[2]===1/0),o<this.smoothLevel+2&&h[0]<.5*(h[1]+h[2])&&(d=0,u=!1),--o,c?this._insertPoint_v2(t,new base_coords.A(constants.A.COORDS_BY_SCREEN,[NaN,NaN],t.board,!1),a):o<=d||u?this._insertPoint_v2(t,p,a):(this._plotRecursive_v2(t,e,i,l,a,o,n),isNaN(p.scrCoords[1]+p.scrCoords[2])||this._insertPoint_v2(t,p,a),this._plotRecursive_v2(t,l,a,s,r,o,n))),this)},updateParametricCurve_v2:function(t,e,i){var s,r,o,n,a,l,h,u,c,d=!1,p=new base_coords.A(constants.A.COORDS_BY_USER,[0,0],t.board,!1),_=new base_coords.A(constants.A.COORDS_BY_USER,[0,0],t.board,!1);return t.board.updateQuality===t.board.BOARD_QUALITY_LOW?(a=utils_type.A.evaluate(t.visProp.recursiondepthlow)||13,l=2,this.smoothLevel=a-6,this.jumpLevel=3):(a=utils_type.A.evaluate(t.visProp.recursiondepthhigh)||17,l=2,this.smoothLevel=a-9,this.jumpLevel=2),this.nanLevel=a-4,t.points=[],"x"===this.xterm?(h=.3*((u=t.board.getBoundingBox())[2]-u[0]),s=Math.max(e,u[0]-h),r=Math.min(i,u[2]+h)):(s=e,r=i),p.setCoordinates(constants.A.COORDS_BY_USER,[t.X(s,d),t.Y(s,d)],!1),d=!0,_.setCoordinates(constants.A.COORDS_BY_USER,[t.X(r,d),t.Y(r,d)],!1),c=this._findStartPoint(t,p.scrCoords,s,_.scrCoords,r),p.setCoordinates(constants.A.COORDS_BY_SCREEN,c[0],!1),s=c[1],c=this._findStartPoint(t,_.scrCoords,r,p.scrCoords,s),_.setCoordinates(constants.A.COORDS_BY_SCREEN,c[0],!1),r=c[1],this._visibleArea=[s,r],o=p.copy("scrCoords"),n=_.copy("scrCoords"),p._t=s,t.points.push(p),this._lastCrds=p.copy("scrCoords"),this._plotRecursive_v2(t,o,s,n,r,a,l),_._t=r,t.points.push(_),t.numberPoints=t.points.length,t},_insertLimesPoint:function(t,e,i,s,r){var o,n,a;Math.abs(this._lastUsrCrds[1])===1/0&&Math.abs(r.left_x)===1/0||Math.abs(this._lastUsrCrds[2])===1/0&&Math.abs(r.left_y)===1/0||((o=new base_coords.A(constants.A.COORDS_BY_USER,[r.left_x,r.left_y],t.board))._t=i,t.points.push(o),isNaN(r.left_x)||isNaN(r.left_y)||isNaN(r.right_x)||isNaN(r.right_y)||!(Math.abs(r.left_x-r.right_x)>math.A.eps||Math.abs(r.left_y-r.right_y)>math.A.eps)||((n=new base_coords.A(constants.A.COORDS_BY_SCREEN,e,t.board))._t=i,t.points.push(n)),(a=new base_coords.A(constants.A.COORDS_BY_USER,[r.right_x,r.right_y],t.board))._t=i,t.points.push(a),this._lastScrCrds=a.copy("scrCoords"),this._lastUsrCrds=a.copy("usrCoords"))},_insertPoint:function(t,e,i,s,r){var o,n=!isNaN(this._lastScrCrds[1]+this._lastScrCrds[2]),a=!isNaN(e[1]+e[2]),l=t.board.canvasWidth,h=t.board.canvasHeight,u=500;utils_type.A.exists(r)?this._insertLimesPoint(t,e,i,s,r):(a=a&&e[1]>-500&&e[2]>-500&&e[1]<l+u&&e[2]<h+u,(n||a)&&(a&&n&&Math.abs(e[1]-this._lastScrCrds[1])<.8&&Math.abs(e[2]-this._lastScrCrds[2])<.8||Math.abs(e[1])===1/0&&Math.abs(this._lastUsrCrds[1])===1/0||Math.abs(e[2])===1/0&&Math.abs(this._lastUsrCrds[2])===1/0||((o=new base_coords.A(constants.A.COORDS_BY_SCREEN,e,t.board))._t=i,t.points.push(o),this._lastScrCrds=o.copy("scrCoords"),this._lastUsrCrds=o.copy("usrCoords"))))},_triangleDists:function(t,e,i){var s;return s=[t[0]*e[0],.5*(t[1]+e[1]),.5*(t[2]+e[2])],[geometry.A.distance(t,e,3),geometry.A.distance(t,i,3),geometry.A.distance(i,e,3),geometry.A.distance(i,s,3)]},_isUndefined:function(t,e,i,s,r){var o,n,a;if(!isNaN(e[1]+e[2])||!isNaN(s[1]+s[2]))return!1;for(a=new base_coords.A(constants.A.COORDS_BY_USER,[0,0],t.board,!1),n=0;n<20;++n)if(o=i+Math.random()*(r-i),a.setCoordinates(constants.A.COORDS_BY_USER,[t.X(o,!0),t.Y(o,!0)],!1),!isNaN(a.scrCoords[0]+a.scrCoords[1]+a.scrCoords[2]))return!1;return!0},_isOutside:function(t,e,i,s,r){var o=500,n=r.canvasWidth,a=r.canvasHeight;return!!(t[1]<-500&&i[1]<-500||t[2]<-500&&i[2]<-500||t[1]>n+o&&i[1]>n+o||t[2]>a+o&&i[2]>a+o)},_isOutsidePoint:function(t,e){var i=500,s=e.canvasWidth,r=e.canvasHeight;return!!(t[1]<-500||t[2]<-500||t[1]>s+i||t[2]>r+i)},_findStartPoint:function(t,e,i,s,r){return[e,i]},_getBorderPos:function(t,e,i,s,r,o,n){var a,l,h,u,c,d;if(l=new base_coords.A(constants.A.COORDS_BY_USER,[0,0],t.board,!1),u=0,isNaN(i[1]+i[2])&&!isNaN(r[1]+r[2]))d=e,c=s;else if(isNaN(n[1]+n[2])&&!isNaN(r[1]+r[2]))d=o,c=s;else if(isNaN(r[1]+r[2])&&!isNaN(n[1]+n[2]))d=s,c=o;else{if(!isNaN(r[1]+r[2])||isNaN(i[1]+i[2]))return!1;d=s,c=e}do{a=.5*(c+d),l.setCoordinates(constants.A.COORDS_BY_USER,[t.X(a,!0),t.Y(a,!0)],!1),h=l.usrCoords,isNaN(h[1]+h[2])?d=a:c=a,++u}while(u<30&&Math.abs(c-d)>math.A.eps);return a},_getCuspPos:function(t,e,i){var s=[t.X(e,!0),t.Y(e,!0)],r=[t.X(i,!0),t.Y(i,!0)];return numerics.A.fminbr((function(e){var i=[t.X(e,!0),t.Y(e,!0)];return-(math.A.hypot(s[0]-i[0],s[1]-i[1])+math.A.hypot(r[0]-i[0],r[1]-i[1]))}),[e,i],t)},_getJumpPos:function(t,e,i){return numerics.A.fminbr((function(e){var i=math.A.eps*math.A.eps,s=[t.X(e,!0),t.Y(e,!0)],r=[t.X(e+i,!0),t.Y(e+i,!0)];return-Math.abs((r[1]-s[1])/(r[0]-s[0]))}),[e,i],t)},_getLimits:function(t,e){var i,s,r,o,n,a=2/(t.maxX()-t.minX());return s=(i=extrapolate.limit(e,-a,t.X))[0],"infinite"===i[1]&&(s=Math.sign(s)*(1/0)),o=(i=extrapolate.limit(e,-a,t.Y))[0],"infinite"===i[1]&&(o=Math.sign(o)*(1/0)),r=(i=extrapolate.limit(e,a,t.X))[0],"infinite"===i[1]&&(r=Math.sign(r)*(1/0)),n=(i=extrapolate.limit(e,a,t.Y))[0],"infinite"===i[1]&&(n=Math.sign(n)*(1/0)),{left_x:s,left_y:o,right_x:r,right_y:n,t:e}},_getLimes:function(t,e,i,s,r,o,n,a,l){var h;return"border"===a?h=this._getBorderPos(t,e,i,s,r,o,n):"cusp"===a?h=this._getCuspPos(t,e,o):"jump"===a&&(h=this._getJumpPos(t,e,o)),this._getLimits(t,h)},_plotNonRecursive:function(t,e,i,s,r,o){var n,a,l,h,u,c,d,p,_,f,A,g=null,m=!1,y="",b=[],v=0;for(p=t.board.origin.scrCoords,b[v++]=[e,i,s,r,o,1/0];v>0;){if(e=(A=b[--v])[0],i=A[1],s=A[2],r=A[3],_=A[4],f=A[5],m=!1,y="",g=null,t.points.length>65536)return;if(_<this.nanLevel){if(this._isUndefined(t,e,i,s,r))continue;if(this._isOutside(e,i,s,r,t.board))continue}n=.5*(i+r),c=t.X(n,!0),d=t.Y(n,!0),a=[1,p[1]+c*t.board.unitX,p[2]-d*t.board.unitY],l=this._triangleDists(e,s,a),h=isNaN(e[1]+e[2]),u=isNaN(s[1]+s[2]),h&&!u||!h&&u?y="border":l[0]>.66*f||l[0]<this.cusp_threshold*(l[1]+l[2])||l[1]>5*l[2]||l[2]>5*l[1]?y="cusp":(l[2]>this.jump_threshold*l[0]||l[1]>this.jump_threshold*l[0]||l[0]===1/0||l[1]===1/0||l[2]===1/0)&&(y="jump"),m=""===y&&_<this.smoothLevel&&l[3]<this.smooth_threshold,_<this.testLevel&&!m&&(""===y?m=!0:g=this._getLimes(t,i,e,n,a,r,s,y,_)),null!==g?(a=[1,NaN,NaN],this._insertPoint(t,a,n,_,g)):_<=0||m?this._insertPoint(t,a,n,_,null):(b[v++]=[a,n,s,r,_-1,l[0]],b[v++]=[e,i,a,n,_-1,l[0]])}return this},updateParametricCurve_v3:function(t,e,i){var s,r,o,n,a,l,h,u,c=!1,d=new base_coords.A(constants.A.COORDS_BY_USER,[0,0],t.board,!1),p=new base_coords.A(constants.A.COORDS_BY_USER,[0,0],t.board,!1);return a=t.board.updateQuality===t.board.BOARD_QUALITY_LOW?utils_type.A.evaluate(t.visProp.recursiondepthlow)||14:utils_type.A.evaluate(t.visProp.recursiondepthhigh)||17,this.smoothLevel=7,this.nanLevel=a-4,this.testLevel=4,this.cusp_threshold=.5,this.jump_threshold=.99,this.smooth_threshold=2,t.points=[],"x"===t.xterm?(l=.3*((h=t.board.getBoundingBox())[2]-h[0]),s=Math.max(e,h[0]-l),r=Math.min(i,h[2]+l)):(s=e,r=i),d.setCoordinates(constants.A.COORDS_BY_USER,[t.X(s,c),t.Y(s,c)],!1),c=!0,p.setCoordinates(constants.A.COORDS_BY_USER,[t.X(r,c),t.Y(r,c)],!1),u=this._findStartPoint(t,d.scrCoords,s,p.scrCoords,r),d.setCoordinates(constants.A.COORDS_BY_SCREEN,u[0],!1),s=u[1],u=this._findStartPoint(t,p.scrCoords,r,d.scrCoords,s),p.setCoordinates(constants.A.COORDS_BY_SCREEN,u[0],!1),r=u[1],this._visibleArea=[s,r],o=d.copy("scrCoords"),n=p.copy("scrCoords"),d._t=s,t.points.push(d),this._lastScrCrds=d.copy("scrCoords"),this._lastUsrCrds=d.copy("usrCoords"),this._plotNonRecursive(t,o,s,n,r,a),p._t=r,t.points.push(p),t.numberPoints=t.points.length,t},_criticalInterval:function(t,e,i){var s,r,o,n,a,l,h,u=!1,c=-1/0,d=!1,p=!1,_=0,f=[],A=[],g=[];for(h=statistics.A.abs(t),(n=statistics.A.median(h))<1e-7?(n=1e-7,d=!0):n*=this.criticalThreshold,s=0;s<e;s++)h[s]>n?(g.push({i:s,v:t[s],group:_}),c=s,u||(u=!0)):u&&s>c+4&&(g.length>0&&f.push(g.slice(0)),g=[],u=!1,_++);for(u&&g.length>1&&f.push(g.slice(0)),d&&0===f.length&&(p=!0),r=0;r<f.length;r++)if(A[r]="point",!((o=f[r].length)<64)){for(l=0,a=Math.sign(f[r][0].v),s=1;s<o;s++)Math.sign(f[r][s].v)!==a&&(l++,a=Math.sign(f[r][s].v));6*l>o&&(A[r]="interval")}return{smooth:p,groups:f,types:A}},Component:function(){this.left_isNaN=!1,this.right_isNaN=!1,this.left_t=null,this.right_t=null,this.t_values=[],this.x_values=[],this.y_values=[],this.len=0},findComponents:function(t,e,i,s){var r,o,n,a,l,h,u=[],c=0,d=0,p=0,_=!1,f=!1;for(n=(i-e)/s,u[c]=new this.Component,h=u[c],r=0,o=e;r<=s;r++,o+=n)a=t.X(o,f),l=t.Y(o,f),isNaN(a)||isNaN(l)?++p>1&&_&&(h.right_isNaN=!0,h.right_t=o-n,h.len=d,_=!1,u[++c]=new this.Component,h=u[c],p=0):(_||(_=!0,d=0,p>0&&(h.left_t=o-n,h.left_isNaN=!0)),p=0,h.t_values[d]=o,h.x_values[d]=a,h.y_values[d]=l,d++),0===r&&(f=!0);return _?h.len=d:u.pop(),u},getPointType:function(t,e,i,s,r,o,n){var a=r[0],l=o[0],h=s.length,u={idx:e,t:i,x:a[e],y:l[e],type:"other"};return e<5?(u.type="borderleft",u.idx=0,u.t=s[0],u.x=a[0],u.y=l[0],u):e>n-6?(u.type="borderright",u.idx=h-1,u.t=s[h-1],u.x=a[h-1],u.y=l[h-1],u):u},newtonApprox:function(t,e,i,s,r){var o,n=0;for(o=s;o>0;o--)n=(n+r[o][t])*(e-(o-1)*i)/o;return n+r[0][t]},thiele:function(t,e,i,s,r){var o,n=0;for(o=r;o>1;o--)n=(t-i[s+o])/(e[o][s+1]-e[o-2][s+1]+n);return e[0][s+1]+(t-i[s+1])/(e[1][s+1]+n)},differenceMethodExperiments:function(t,e){var i,s,r,o,n,a,l,h,u,c,d,p=t.t_values,_=t.x_values,f=t.y_values,A=[],g=[],m=[],y=[],b=[],v=[],C=[],P=[],x=0,E=[];for(n=p[1]-p[0],b.push([]),v.push([]),C.push([]),P.push([]),r=f.length,i=0;i<r;i++)b[0][i]=_[i],v[0][i]=f[i],C[0][i]=_[i],P[0][i]=f[i];for(b.push([]),v.push([]),C.push([]),P.push([]),a=n,r=f.length-1,i=0;i<r;i++)A[i]=_[i+1]-_[i],g[i]=f[i+1]-f[i],m[i]=A[i],y[i]=g[i],b[1][i]=A[i],v[1][i]=g[i],C[1][i]=a/A[i],P[1][i]=a/g[i];for(r--,o=Math.min(8,f.length-1),s=1;s<o;s++){for(b.push([]),v.push([]),C.push([]),P.push([]),a*=n,i=0;i<r;i++)A[i]=A[i+1]-A[i],g[i]=g[i+1]-g[i],b[s+1][i]=A[i],v[s+1][i]=g[i],C[s+1][i]=a/(C[s][i+1]-C[s][i])+C[s-1][i+1],P[s+1][i]=a/(P[s][i+1]-P[s][i])+P[s-1][i+1];if(!1===(d=this._criticalPoints(g,r,s))){console.log("Polynomial of degree",s),d=[];break}if(d.length>0&&++x>1&&s%2==0)break;r--}for(i=0;i<d.length;i++){for(h=-1/0,u=0;u<d[i].length;u++)(c=Math.abs(d[i][u].v))>h&&(h=c,l=u);l=Math.floor(d[i][l].i+s/2),E.push(this.getPointType(e,l,p,_,f,m,y,r+1))}return[E,b,v,C,P]},getCenterOfCriticalInterval:function(t,e,i){var s,r,o,n,a,l=0,h=0,u=i[1]-i[0],c=[];for(s=-1/0,c=[],r=0;r<t.length;r++)(n=Math.abs(t[r].v))>s?(c=[r],s=n,o=r):s===n&&c.push(r);if(c.length>0&&(a=c.reduce((function(t,e){return t+e}),0)/c.length,o=Math.floor(a),a+=t[0].i),s<1/0){for(r=0;r<t.length;r++)l+=Math.abs(t[r].v)*t[r].i,h+=Math.abs(t[r].v);a=l/h}return a+=e/2,[t[o].i+e/2,a,i[Math.floor(a)]+u*(a-Math.floor(a))]},differenceMethod:function(t,e){var i,s,r,o,n,a,l,h,u,c,d=t.t_values,p=t.x_values,_=t.y_values,f=[],A=[],g=0,m=-1,y=-1,b=[],v=[];for(r=_.length,f.push(new Float64Array(p)),A.push(new Float64Array(_)),r--,o=Math.min(12,r),s=0;s<o&&(f.push(new Float64Array(r)),A.push(new Float64Array(r)),f[s+1]=f[s].map((function(t,e,i){return i[e+1]-t})),A[s+1]=A[s].map((function(t,e,i){return i[e+1]-t})),!0===(h=this._criticalInterval(A[s+1],r,s)).smooth&&(y=s,b=[]),l=this._criticalInterval(f[s+1],r,s),-1===m&&!0===l.smooth&&(m=s),!(y>=0));s++){if(h.groups.length>0&&++g>2&&(s+1)%2==0){b=h.groups,c=h.types;break}r--}for(i=0;i<b.length;i++)"interval"!==c[i]&&(a=this.getCenterOfCriticalInterval(b[i],s+1,d),h[0],n=Math.floor(a[1]),u=a[2],v.push(this.getPointType(e,n,u,d,f,A,r+1)));return[v,f,A,m,y]},_insertPoint_v4:function(t,e,i,s){var r,o,n,a=null;t.points.length>0&&(a=t.points[t.points.length-1].scrCoords),r=new base_coords.A(constants.A.COORDS_BY_USER,e,t.board),null!==a&&(o=r.scrCoords[1]-a[1])*o+(n=r.scrCoords[2]-a[2])*n<.8*.8||(r._t=i,t.points.push(r))},getInterval:function(t,e,i){var s,r;return ia.A.disable(),s=ia.A.Interval(e,i),t.board.mathLib=ia.A,t.board.mathLibJXG=ia.A,r=t.Y(s,!0),t.board.mathLib=Math,t.board.mathLibJXG=jxg.A.Math,r},sign:function(t){return t<0?-1:t>0?1:0},handleBorder:function(t,e,i,s,r){var o,n,a,l,h,u,c,d,p,_,f,A,g=i.idx;if(A=e.t_values[1]-e.t_values[0],"borderleft"===i.type?a=(n=o=e.left_isNaN?e.left_t:i.t-A)+A:"borderright"===i.type?n=(a=o=e.right_isNaN?e.right_t:i.t+A)-A:console.log("No bordercase!!!"),0!==(_=this.findComponents(t,n,a,32)).length){for("borderleft"===i.type&&(n=_[0].left_t,a=_[0].t_values[0],A=_[0].t_values[1]-_[0].t_values[0],o=n=null===n?a-A:n,l=this.getInterval(t,n,a),utils_type.A.isObject(l)&&(c=l.lo,d=l.hi,h=t.X(o,!0),u=r[1][g]<0?d:c,this._insertPoint_v4(t,[1,h,u],o))),f=_[0].t_values.length,p=0;p<f;p++)o=_[0].t_values[p],h=_[0].x_values[p],u=_[0].y_values[p],this._insertPoint_v4(t,[1,h,u],o);"borderright"===i.type&&(n=_[0].t_values[f-1],a=_[0].right_t,A=_[0].t_values[1]-_[0].t_values[0],o=a=null===a?n+A:a,l=this.getInterval(t,n,a),utils_type.A.isObject(l)&&(c=l.lo,d=l.hi,h=t.X(o,!0),u=r[1][g]>0?d:c,this._insertPoint_v4(t,[1,h,u],o)))}},_seconditeration_v4:function(t,e,i,s,r){var o,n,a,l,h,u,c,d,p,_,f,A,g;for(n=e.t_values[i.idx-2],a=e.t_values[i.idx+2],h=this.findComponents(t,n,a,64),c=0;c<h.length;c++){for(u=h[c],d=(l=this.differenceMethod(u,t))[0],_=l[1],f=l[2],A=0,p=0;p<=d.length;p++){for(g=p===d.length?u.len:d[p].idx,o=A;o<g;o++)isNaN(u.x_values[o])||isNaN(u.y_values[o])||this._insertPoint_v4(t,[1,u.x_values[o],u.y_values[o]],u.t_values[o]);p<d.length&&(this.handleSingularity(t,u,d[p],_,f),A=d[p].idx+1)}g=u.len,c<h.length-1&&this._insertPoint_v4(t,[1,NaN,NaN],u.right_t)}return this},_recurse_v4:function(t,e,i,s,r,o,n,a){var l,h,u=.5*(e+i),c=t.X(u,!0),d=t.Y(u,!0);0!==a?(l=(c-s)*t.board.unitX,h=(d-r)*t.board.unitY,math.A.hypot(l,h)>2?this._recurse_v4(t,e,u,s,r,c,d,a-1):this._insertPoint_v4(t,[1,c,d],u),l=(c-o)*t.board.unitX,h=(d-n)*t.board.unitY,math.A.hypot(l,h)>2?this._recurse_v4(t,u,i,c,d,o,n,a-1):this._insertPoint_v4(t,[1,c,d],u)):this._insertPoint_v4(t,[1,NaN,NaN],u)},handleSingularity:function(t,e,i,s,r){var o,n,a,l,h,u,c,d,p,_,f,A=i.idx,g=100;o=i.t,console.log("HandleSingularity at t =",o),n=e.t_values[A-5],a=e.t_values[A+5],l=this.getInterval(t,n,a),utils_type.A.isObject(l)?(d=l.lo,p=l.hi):r[0][A-1]<r[0][A+1]?(d=r[0][A-1],p=r[0][A+1]):(d=r[0][A+1],p=r[0][A-1]),c=t.X(o,!0),_=(r[0][A-3]-r[0][A-5])/(e.t_values[A-3]-e.t_values[A-5]),f=(r[0][A+3]-r[0][A+5])/(e.t_values[A+3]-e.t_values[A+5]),console.log(":::",_,f),_<-100?(this._insertPoint_v4(t,[1,c,d],o,!0),f<=g&&this._insertPoint_v4(t,[1,NaN,NaN],o)):_>g?(this._insertPoint_v4(t,[1,c,p],o),f>=-100&&this._insertPoint_v4(t,[1,NaN,NaN],o)):(d===-1/0&&(this._insertPoint_v4(t,[1,c,d],o,!0),this._insertPoint_v4(t,[1,NaN,NaN],o)),p===1/0&&(this._insertPoint_v4(t,[1,NaN,NaN],o),this._insertPoint_v4(t,[1,c,p],o,!0)),i.t<e.t_values[A]?(h=A-1,u=A):(h=A,u=A+1),n=e.t_values[h],a=e.t_values[u],this._recurse_v4(t,n,a,s[0][h],r[0][h],s[0][u],r[0][u],10)),f<-100?this._insertPoint_v4(t,[1,c,p],o):f>g&&this._insertPoint_v4(t,[1,c,d],o)},steps:1021,criticalThreshold:1e3,plot_v4:function(t,e,i,s){var r,o,n,a,l,h,u,c,d,p,_,f,A,g,m,y=(i-e)/s,b=function(e){return t.Y(e,!0)},v=function(e){return-t.Y(e,!0)},C=.5*y;for(n=this.findComponents(t,e,i,s),a=0;a<n.length;a++){for(l=n[a],h=(d=this.differenceMethod(l,t))[0],p=d[1],_=d[2],0!==h.length&&"borderleft"===h[0].type||h.unshift({idx:0,t:l.t_values[0],x:l.x_values[0],y:l.y_values[0],type:"borderleft"}),"borderright"!==h[h.length-1].type&&(o=l.t_values.length,h.push({idx:o-1,t:l.t_values[o-1],x:l.x_values[o-1],y:l.y_values[o-1],type:"borderright"})),c=0,u=0;u<=h.length;u++){for(o=u===h.length?l.len:h[u].idx-1,r=c;r<o-2;r++)this._insertPoint_v4(t,[1,l.x_values[r],l.y_values[r]],l.t_values[r]),r>=c+3&&r<o-3&&_.length>3&&Math.abs(_[2][r])>.2*Math.abs(_[0][r])&&(f=l.t_values[r],C=.25*y,m=this.getInterval(t,f,f+y),utils_type.A.isObject(m)?_[2][r]>0?this._insertPoint_v4(t,[1,f+C,m.lo],f+C):this._insertPoint_v4(t,[1,f+y-C,m.hi],f+y-C):(A=numerics.A.fminbr(b,[f,f+y]))<(g=numerics.A.fminbr(v,[f,f+y]))?(this._insertPoint_v4(t,[1,t.X(A,!0),t.Y(A,!0)],A),this._insertPoint_v4(t,[1,t.X(g,!0),t.Y(g,!0)],g)):(this._insertPoint_v4(t,[1,t.X(g,!0),t.Y(g,!0)],g),this._insertPoint_v4(t,[1,t.X(A,!0),t.Y(A,!0)],A)));u<h.length&&(r=h[u].idx,"borderleft"===h[u].type||"borderright"===h[u].type?this.handleBorder(t,l,h[u],p,_):this._seconditeration_v4(t,l,h[u],p,_),c=h[u].idx+1+1)}o=l.len,a<n.length-1&&this._insertPoint_v4(t,[1,NaN,NaN],l.right_t)}},updateParametricCurve_v4:function(t,e,i){var s,r,o,n;"x"===t.xterm?(o=.3*((n=t.board.getBoundingBox())[2]-n[0]),s=Math.max(e,n[0]-o),r=Math.min(i,n[2]+o)):(s=e,r=i),t.points=[],this.plot_v4(t,s,r,this.steps),t.numberPoints=t.points.length},updateParametricCurve:function(t,e,i){return this.updateParametricCurve_v2(t,e,i)}};var plot=math.A.Plot;math.A.ImplicitPlot=function(t,e,i,s,r){var o={resolution_out:5,resolution_in:5,max_steps:1024,alpha_0:.05,tol_u0:math.A.eps,tol_newton:1e-7,tol_cusp:.05,tol_progress:1e-4,qdt_box:.2,kappa_0:.2,delta_0:.05,h_initial:.1,h_critical:.001,h_max:1,loop_dist:.09,loop_dir:.99,loop_detection:!0,unitX:10,unitY:10};this.config=utils_type.A.merge(o,e),this.f=i,this.dfx=null,this.dfy=null,utils_type.A.isFunction(s)?this.dfx=s:this.dfx=function(t,e){var i=math.A.eps*math.A.eps;return.5*(this.f(t+i,e)-this.f(t-i,e))/i},utils_type.A.isFunction(r)?this.dfy=r:this.dfy=function(t,e){var i=math.A.eps*math.A.eps;return.5*(this.f(t,e+i)-this.f(t,e-i))/i},this.bbox=t,this.qdt=new bqdt(20,5,t),this.components=[]},utils_type.A.extend(math.A.ImplicitPlot.prototype,{plot:function(){var t,e,i,s,r,o,n,a=[],l=[],h=[],u=0,c=this,d=function(e){return c.f(t,e)},p=function(e){return-c.f(t,e)},_=function(t){return c.f(t,e)},f=function(t){return-c.f(t,e)};for(i=Math.min(this.bbox[0],this.bbox[2])-math.A.eps,s=Math.max(this.bbox[0],this.bbox[2]),r=Math.min(this.bbox[1],this.bbox[3])+math.A.eps,o=Math.max(this.bbox[1],this.bbox[3]),n=this.config.resolution_out/this.config.unitX,n*=1+math.A.eps,t=i;t<s;t+=n)!1!==(h=this.searchLine(d,p,t,[r,o],"vertical",u,a,l))&&(a=h[0],l=h[1],u=h[2]);for(n=this.config.resolution_out/this.config.unitY,n*=1+math.A.eps,e=r;e<o;e+=n)!1!==(h=this.searchLine(_,f,e,[i,s],"horizontal",u,a,l))&&(a=h[0],l=h[1],u=h[2]);return[a,l,u]},searchLine:function(t,e,i,s,r,o,n,a){var l,h,u,c,d,p,_,f,A,g,m,y,b,v,C=this.config.tol_u0,P=!1,x=s[0],E=s[1];if(d=t(l=numerics.A.fminbr(t,[x,E])),p=t(h=numerics.A.fminbr(e,[x,E])),d<C&&p>-C){if(_=l,l=Math.min(_,h),h=Math.max(_,h),c=t(u=numerics.A.fzero(t,[l,h])),Math.abs(c)>Math.max((p-d)*math.A.eps,.001))return!1;if("vertical"===r?(A=[1,i,u],v=this.config.resolution_in/this.config.unitY):(A=[1,u,i],v=this.config.resolution_in/this.config.unitX),v*=1+math.A.eps,this.curveContainsPoint(A,n,a,2*v,this.config.qdt_box))P;else if((y=this.traceComponent(A,1)).length>0){for(o>0&&(n.push(NaN),a.push(NaN)),b=n.length,m=y[0].length,g=1;g<m;g++)this.qdt.insertItem({xlb:Math.min(y[0][g-1],y[0][g]),xub:Math.max(y[0][g-1],y[0][g]),ylb:Math.min(y[1][g-1],y[1][g]),yub:Math.max(y[1][g-1],y[1][g]),idx1:b+g-1,idx2:b+g,comp:o});o++,utils_type.A.concat(n,y[0]),utils_type.A.concat(a,y[1])}return(f=u-.01*v)-x>v&&!1!==(y=this.searchLine(t,e,i,[x,f],r,o,n,a))&&(n=y[0],a=y[1],o=y[2]),E-(f=u+.01*v)>v&&!1!==(y=this.searchLine(t,e,i,[f,E],r,o,n,a))&&(n=y[0],a=y[1],o=y[2]),[n,a,o]}return!1},curveContainsPoint:function(t,e,i,s,r){var o,n,a,l=t[1],h=t[2];for(n=(a=this.qdt.find([l-r,h+r,l+r,h-r])).length,o=0;o<n;o++)if(geometry.A.distPointSegment(t,[1,e[a[o].idx1],i[a[o].idx1]],[1,e[a[o].idx2],i[a[o].idx2]])<s)return!0;return!1},traceComponent:function(t){var e=[],i=[],s=[];return 0===(s=this.tracing(t,1)).length||(e=s[0],i=s[1]),s[2]||0===(s=this.tracing(t,-1)).length||(e=s[0].reverse().concat(e.slice(1)),i=s[1].reverse().concat(i.slice(1))),e.length<6&&(e.push(e[e.length-1]),i.push(i[i.length-1])),[e,i]},tracing:function(t,e){var i,s,r,o,n,a,l,h,u,c,d,p,_,f,A,g,m,y=[],b=[],v=[],C=0,P=0,x=!1,E=!1,O=!1,M=this.config.kappa_0,S=this.config.delta_0,w=this.config.alpha_0,T=this.config.h_initial,N=this.config.max_steps,j=e,D=[],k=[],R=[];if(y=t.slice(1),D.push(y[0]),k.push(y[1]),!1===(i=this.tangent(y)))return[];this.dfx(y[0],y[1]),this.dfy(y[0],y[1]);do{if(!1===(i=this.tangent(y))){y=b.slice(),D.push(y[0]),k.push(y[1]);break}if(1===D.length)r=i.slice();else if(2===D.length)R.push(D.length-1);else if(E&&D.length>2&&!O){if(geometry.A.distPointSegment([1,y[0],y[1]],[1,D[0],k[0]],[1,D[1],k[1]])<this.config.loop_dist*T&&math.A.innerProduct(i,r,2)>this.config.loop_dir){y=t.slice(1),D.push(y[0]),k.push(y[1]),x=!0;break}if(this.config.loop_detection){for(f=D.length-1,A=Math.floor(math.A.log2(f)),g=0;g<=A&&!(geometry.A.distPointSegment([1,y[0],y[1]],[1,D[R[g]-1],k[R[g]-1]],[1,D[R[g]],k[R[g]]])<this.config.loop_dist*T&&(s=this.tangent([D[R[g]],k[R[g]]]),math.A.innerProduct(i,s,2)>this.config.loop_dir));g++);if(g<=A){x=!0;break}for(A=1,m=0,g=0;g<100&&(f+1)%A==0;g++)A*=2,m++;R[m]=f}}b[0]=y[0]+T*j*i[0],b[1]=y[1]+T*j*i[1],P=0;do{u=(o=[this.dfx(b[0],b[1]),this.dfy(b[0],b[1])])[0]*o[0]+o[1]*o[1],n=this.f(b[0],b[1])/u,v[0]=b[0]-o[0]*n,v[1]=b[1]-o[1]*n,0===P?l=Math.abs(n)*Math.sqrt(u):1===P&&(h=Math.abs(n)*Math.sqrt(u)),b[0]=v[0],b[1]=v[1],P++}while(P<20&&Math.abs(this.f(b[0],b[1]))>this.config.tol_newton);if(d=l,c=P>1?h/l:0,s=this.tangent(b),a=math.A.innerProduct(i,s,2),a=Math.max(-1,Math.min(1,a)),p=Math.acos(a),O=!1,geometry.A.distance(y,b,2)<this.config.tol_progress){y=b.slice(),D.push(y[0]),k.push(y[1]);break}if(a<0)if(T>this.config.h_critical);else{if(O=!0,!this.isBifurcation(y,this.config.tol_cusp)){y=b.slice(),D.push(y[0]),k.push(y[1]);break}j*=-1,p=0}if(!O&&(_=Math.max(Math.sqrt(c/M),Math.sqrt(d/S),p/w),isNaN(_)&&(_=1),T/=_=Math.max(Math.min(_,2),.5),T=Math.min(this.config.h_max,T),_>=2)){if(++C>=3*N)break;E=!1}else y=b.slice(),D.push(y[0]),k.push(y[1]),E=!0,C++}while(C<N&&y[0]>=this.bbox[0]&&y[1]<=this.bbox[1]&&y[0]<=this.bbox[2]&&y[1]>=this.bbox[3]);return[D,k,x]},isBifurcation:function(t,e){var i,s,r,o,n,a,l,h,u,c,d=math.A.eps*math.A.eps*100;return i=t[0],s=t[1],r=.5*(this.dfx(i+d,s)-this.dfx(i-d,s))/d,o=.5*(this.dfx(i,s+d)-this.dfx(i,s-d))/d,n=.5*(this.dfy(i+d,s)-this.dfy(i-d,s))/d,c=(l=r+(a=.5*(this.dfy(i,s+d)-this.dfy(i,s-d))/d))*l-4*(r*a-o*n),h=.5*(l+Math.sqrt(c)),u=.5*(l-Math.sqrt(c)),Math.abs(h)>e&&Math.abs(u)>e},handleCriticalPoint:function(t,e,i,s){var r,o=Math.atan2(s*e[1],s*e[0]);return r=numerics.A.root((function(e){var s=t[0]+i*Math.cos(e),r=t[1]+i*Math.sin(e);return this.f(s,r)}),o),[t[0]+i*Math.cos(r),t[1]+i*Math.sin(r)]},updateA:function(t,e,i){var s,r,o=[i[0]-e[0],i[1]-e[1]],n=this.f(i[0],i[1])-this.f(e[0],e[1]);return r=o[0]*o[0]+o[1]*o[1],s=n-(t[0]*o[0]+t[1]*o[1]),s/=r,t[0]+=s*o[0],t[1]+=s*o[1],t},tangent_A:function(t){var e=[-t[1],t[0]],i=math.A.norm(e,2);return math.A.eps,[e[0]/i,e[1]/i]},tangent:function(t){var e=[-this.dfy(t[0],t[1]),this.dfx(t[0],t[1])],i=math.A.norm(e,2);return!(i<math.A.eps*math.A.eps)&&[e[0]/i,e[1]/i]}});var implicitplot=math.A.ImplicitPlot;math.A.Metapost={MP_ENDPOINT:0,MP_EXPLICIT:1,MP_GIVEN:2,MP_CURL:3,MP_OPEN:4,MP_END_CYCLE:5,UNITY:1,FRACTION_ONE:1,FRACTION_THREE:3,ONE_EIGHTY_DEG:Math.PI,THREE_SIXTY_DEG:2*Math.PI,EPS_SQ:1e-5*1e-5,make_choices:function(t){var e,i,s,r,o,n,a,l,h,u,c,d,p,_,f;a=t[0];do{if(!a)break;n=a.next,a.rtype>this.MP_EXPLICIT&&(a.x-n.x)*(a.x-n.x)+(a.y-n.y)*(a.y-n.y)<this.EPS_SQ&&(a.rtype=this.MP_EXPLICIT,a.ltype===this.MP_OPEN&&(a.ltype=this.MP_CURL,a.set_left_curl(this.UNITY)),n.ltype=this.MP_EXPLICIT,n.rtype===this.MP_OPEN&&(n.rtype=this.MP_CURL,n.set_right_curl(this.UNITY)),a.rx=a.x,n.lx=a.x,a.ry=a.y,n.ly=a.y),a=n}while(a!==t[0]);for(i=t[0];i.ltype===this.MP_OPEN&&i.rtype===this.MP_OPEN;)if((i=i.next)===t[0]){i.ltype=this.MP_END_CYCLE;break}for(a=i;a;){if(n=a.next,a.rtype>=this.MP_GIVEN){for(;n.ltype===this.MP_OPEN&&n.rtype===this.MP_OPEN;)n=n.next;for(s=0,l=a,o=t.length,d=[],p=[],_=[],f=[null];u=l.next,d.push(u.x-l.x),p.push(u.y-l.y),_.push(this.mp_pyth_add(d[s],p[s])),s>0&&(c=p[s-1]/_[s-1],h=d[s-1]/_[s-1],f.push(Math.atan2(p[s]*h-d[s]*c,d[s]*h+p[s]*c))),s++,(l=u)===n&&(o=s),!(s>=o&&l.ltype!==this.MP_END_CYCLE););s===o?f.push(0):f.push(f[1]),n.ltype===this.MP_OPEN&&((r=n.rx-n.x)*r+(e=n.ry-n.y)*e<this.EPS_SQ?(n.ltype=this.MP_CURL,n.set_left_curl(this.UNITY)):(n.ltype=this.MP_GIVEN,n.set_left_given(Math.atan2(e,r)))),a.rtype===this.MP_OPEN&&a.ltype===this.MP_EXPLICIT&&((r=a.x-a.lx)*r+(e=a.y-a.ly)*e<this.EPS_SQ?(a.rtype=this.MP_CURL,a.set_right_curl(this.UNITY)):(a.rtype=this.MP_GIVEN,a.set_right_given(Math.atan2(e,r)))),this.mp_solve_choices(a,n,o,d,p,_,f)}else a.rtype===this.MP_ENDPOINT&&(a.rx=a.x,a.ry=a.y,n.lx=n.x,n.ly=n.y);if((a=n)===i)break}},mp_solve_choices:function(t,e,i,s,r,o,n){var a,l,h,u,c,d,p,_,f,A,g,m,y,b,v,C,P,x,E,O,M,S,w,T,N,j;for(c=o.length+1,A=new Array(c),f=new Array(c),h=new Array(c),v=new Array(c),N=0;N<c;N++)v[N]=h[N]=f[N]=A[N]=0;for(p=0,_=t,m=0;;){if(y=_.next,0===p)if(_.rtype===this.MP_GIVEN){if(y.ltype===this.MP_GIVEN)return a=Math.atan2(r[0],s[0]),O=(E=this.mp_n_sin_cos(t.right_given()-a))[0],M=E[1],w=(S=this.mp_n_sin_cos(e.left_given()-a))[0],T=S[1],void this.mp_set_controls(t,e,s[0],r[0],M,O,-T,w);h[0]=_.right_given()-Math.atan2(r[0],s[0]),h[0]=this.reduce_angle(h[0]),A[0]=0,f[0]=0}else if(_.rtype===this.MP_CURL){if(y.ltype===this.MP_CURL)return t.rtype=this.MP_EXPLICIT,e.ltype=this.MP_EXPLICIT,g=Math.abs(e.left_tension()),C=Math.abs(t.right_tension()),b=this.UNITY/(3*C),t.rx=t.x+s[0]*b,t.ry=t.y+r[0]*b,b=this.UNITY/(3*g),e.lx=e.x-s[0]*b,void(e.ly=e.y-r[0]*b);x=_.right_curl(),g=Math.abs(y.left_tension()),C=Math.abs(_.right_tension()),A[0]=this.mp_curl_ratio(x,C,g),h[0]=-n[1]*A[0],f[0]=0}else _.rtype===this.MP_OPEN&&(A[0]=0,h[0]=0,f[0]=this.FRACTION_ONE);else if(_.ltype===this.MP_END_CYCLE||_.ltype===this.MP_OPEN){if(a=this.UNITY/(3*Math.abs(m.right_tension())-this.UNITY),P=o[p]*(this.FRACTION_THREE-this.UNITY/Math.abs(m.right_tension())),u=this.UNITY/(3*Math.abs(y.left_tension())-this.UNITY),d=o[p-1]*(this.FRACTION_THREE-this.UNITY/Math.abs(y.left_tension())),P*=x=this.FRACTION_ONE-A[p-1]*a,(g=Math.abs(_.left_tension()))<(C=Math.abs(_.right_tension()))?P*=Math.pow(g/C,2):g>C&&(d*=Math.pow(C/g,2)),b=d/(d+P),A[p]=b*u,l=-n[p+1]*A[p],m.rtype===this.MP_CURL?(f[p]=0,h[p]=l-n[1]*(this.FRACTION_ONE-b)):(b=(this.FRACTION_ONE-b)/x,l-=n[p]*b,b*=a,h[p]=l-h[p-1]*b,f[p]=-f[p-1]*b),_.ltype===this.MP_END_CYCLE){for(a=0,u=this.FRACTION_ONE;0===(p-=1)&&(p=i),a=h[p]-a*A[p],u=f[p]-u*A[p],p!==i;);for(a/=this.FRACTION_ONE-u,v[i]=a,h[0]=a,j=1;j<i;j++)h[j]=h[j]+a*f[j];break}}else{if(_.ltype===this.MP_CURL){x=_.left_curl(),g=Math.abs(_.left_tension()),C=Math.abs(m.right_tension()),b=this.mp_curl_ratio(x,g,C),v[i]=-h[i-1]*b/(this.FRACTION_ONE-b*A[i-1]);break}if(_.ltype===this.MP_GIVEN){v[i]=_.left_given()-Math.atan2(r[i-1],s[i-1]),v[i]=this.reduce_angle(v[i]);break}}m=_,_=y,p+=1}for(p=i-1;p>-1;p--)v[p]=h[p]-v[p+1]*A[p];for(_=t,p=0;y=_.next,O=(E=this.mp_n_sin_cos(v[p]))[0],M=E[1],w=(S=this.mp_n_sin_cos(-n[p+1]-v[p+1]))[0],T=S[1],this.mp_set_controls(_,y,s[p],r[p],M,O,T,w),_=y,++p!==i;);},mp_n_sin_cos:function(t){return[Math.cos(t),Math.sin(t)]},mp_set_controls:function(t,e,i,s,r,o,n,a){var l,h,u,c,d;u=Math.abs(e.left_tension()),l=Math.abs(t.right_tension()),d=this.mp_velocity(r,o,n,a,l),h=this.mp_velocity(n,a,r,o,u),(t.right_tension()<0||e.left_tension()<0)&&(r>=0&&n>=0||r<=0&&n<=0)&&(c=Math.abs(r)*a+Math.abs(n)*o)>0&&(c*=1.00024414062,t.right_tension()<0&&this.mp_ab_vs_cd(Math.abs(n),this.FRACTION_ONE,d,c)<0&&(d=Math.abs(n)/c),e.left_tension()<0&&this.mp_ab_vs_cd(Math.abs(r),this.FRACTION_ONE,h,c)<0&&(h=Math.abs(r)/c)),t.rx=t.x+(i*o-s*r)*d,t.ry=t.y+(s*o+i*r)*d,e.lx=e.x-(i*a+s*n)*h,e.ly=e.y-(s*a-i*n)*h,t.rtype=this.MP_EXPLICIT,e.ltype=this.MP_EXPLICIT},mp_pyth_add:function(t,e){return math.A.hypot(t,e)},mp_curl_ratio:function(t,e,i){var s=1/e,r=1/i;return Math.min(4,((3-s)*s*s*t+r*r*r)/(s*s*s*t+(3-r)*r*r))},mp_ab_vs_cd:function(t,e,i,s){return t*e==i*s?0:t*e>i*s?1:-1},mp_velocity:function(t,e,i,s,r){return Math.min(4,(2+Math.sqrt(2)*(t-i/16)*(i-t/16)*(e-s))/(1.5*r*(2+(Math.sqrt(5)-1)*e+(3-Math.sqrt(5))*s)))},reduce_angle:function(t){return Math.abs(t)>this.ONE_EIGHTY_DEG&&(t>0?t-=this.THREE_SIXTY_DEG:t+=this.THREE_SIXTY_DEG),t},makeknots:function(t,e){var i,s,r=[];for(s=t.length,i=0;i<s;i++)r.push({x:t[i][0],y:t[i][1],ltype:this.MP_OPEN,rtype:this.MP_OPEN,lx:!1,rx:!1,ly:e,ry:e,left_curl:function(){return this.lx||0},right_curl:function(){return this.rx||0},left_tension:function(){return this.ly||1},right_tension:function(){return this.ry||1},set_right_curl:function(t){this.rx=t||0},set_left_curl:function(t){this.lx=t||0}});for(s=r.length,i=0;i<s;i++)r[i].next=r[i+1]||r[i],r[i].set_right_given=r[i].set_right_curl,r[i].set_left_given=r[i].set_left_curl,r[i].right_given=r[i].right_curl,r[i].left_given=r[i].left_curl;return r[s-1].next=r[0],r},curve:function(t,e){var i,s,r,o,n,a,l=!1,h=[],u=[];for(o in n=1,(e=e||{tension:1,direction:{},curl:{},isClosed:!1}).hasOwnProperty("tension")&&(n=utils_type.A.evaluate(e.tension)),s=(i=this.makeknots(t,n)).length,utils_type.A.exists(e.isClosed)&&utils_type.A.evaluate(e.isClosed)&&(l=!0),l||(i[0].ltype=this.MP_ENDPOINT,i[0].rtype=this.MP_CURL,i[s-1].rtype=this.MP_ENDPOINT,i[s-1].ltype=this.MP_CURL),e)if(e.hasOwnProperty(o)){if(r=parseInt(o,10),isNaN(r)||r<0||r>=s)continue;if(a=e[r],utils_type.A.exists(a.type)&&"curl"===a.type)n=utils_type.A.evaluate(a.curl),0===r?(i[r].rtype=this.MP_CURL,i[r].set_right_curl(n)):r===s-1?(i[r].ltype=this.MP_CURL,i[r].set_left_curl(n)):(i[r].ltype=this.MP_CURL,i[r].rtype=this.MP_CURL,i[r].lx=n,i[r].rx=n);utils_type.A.exists(a.direction)&&(n=utils_type.A.evaluate(a.direction),utils_type.A.isArray(n)?(!1!==n[0]&&(i[r].lx=n[0]*Math.PI/180,i[r].ltype=this.MP_GIVEN),!1!==n[1]&&(i[r].rx=n[1]*Math.PI/180,i[r].rtype=this.MP_GIVEN)):(i[r].lx=n*Math.PI/180,i[r].rx=n*Math.PI/180,i[r].ltype=i[r].rtype=this.MP_GIVEN)),utils_type.A.exists(a.tension)&&(n=utils_type.A.evaluate(a.tension),utils_type.A.isArray(n)?(!1!==n[0]&&(i[r].ly=utils_type.A.evaluate(n[0])),!1!==n[1]&&(i[r].ry=utils_type.A.evaluate(n[1]))):(i[r].ly=n,i[r].ry=n))}for(this.make_choices(i),r=0;r<s-1;r++)h.push(i[r].x),h.push(i[r].rx),h.push(i[r+1].lx),u.push(i[r].y),u.push(i[r].ry),u.push(i[r+1].ly);return h.push(i[s-1].x),u.push(i[s-1].y),l&&(h.push(i[s-1].rx),u.push(i[s-1].ry),h.push(i[0].lx),u.push(i[0].ly),h.push(i[0].x),u.push(i[0].y)),[h,u]}};var metapost=math.A.Metapost,bitReverse=[0,128,64,192,32,160,96,224,16,144,80,208,48,176,112,240,8,136,72,200,40,168,104,232,24,152,88,216,56,184,120,248,4,132,68,196,36,164,100,228,20,148,84,212,52,180,116,244,12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254,1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241,9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249,5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245,13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253,3,131,67,195,35,163,99,227,19,147,83,211,51,179,115,243,11,139,75,203,43,171,107,235,27,155,91,219,59,187,123,251,7,135,71,199,39,167,103,231,23,151,87,215,55,183,119,247,15,143,79,207,47,175,111,239,31,159,95,223,63,191,127,255],cplens=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],cplext=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,99,99],cpdist=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],cpdext=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],border=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],NAMEMAX=256;jxg.A.Util=jxg.A.Util||{},jxg.A.Util.Unzip=function(t){var e,i,s,r,o=[],n=0,a=[],l=new Array(32768),h=0,u=!1,c=t.length,d=0,p=1,_=new Array(288),f=new Array(32),A=0,g=null,m=0,y=new Array(17),b=[];function v(){return d<c?t[d++]:-1}function C(){p=1}function P(){var t;try{t=1&p,0===(p>>=1)&&(t=1&(p=v()),p=p>>1|128)}catch(t){throw console.log("Probably problems on iOS7 with >>"),t}return t}function x(t){var e=0,i=t;try{for(;i--;)e=e<<1|P();t&&(e=bitReverse[e]>>8-t)}catch(t){throw console.log("Probably problems on iOS7 with >>"),t}return e}function E(){h=0}function O(t){l[h++]=t,o.push(String.fromCharCode(t)),32768===h&&(h=0)}function M(){this.b0=0,this.b1=0,this.jump=null,this.jumppos=-1}function S(){for(;;){if(y[m]>=r)return-1;if(s[y[m]]===m)return y[m]++;y[m]++}}function w(){var t,e=g[A];if(17===m)return-1;if(A++,m++,(t=S())>=0)e.b0=t;else if(e.b0=32768,w())return-1;if((t=S())>=0)e.b1=t,e.jump=null;else if(e.b1=32768,e.jump=g[A],e.jumppos=A,w())return-1;return m--,0}function T(t,e,i,o){var n;for(g=t,A=0,s=i,r=e,n=0;n<17;n++)y[n]=0;return m=0,w()?-1:0}function N(t){for(var e,i,s=0,r=t[s];;)if(P()){if(!(32768&r.b1))return r.b1;for(r=r.jump,e=t.length,i=0;i<e;i++)if(t[i]===r){s=i;break}}else{if(!(32768&r.b0))return r.b0;r=t[++s]}}function j(){var t,e,i,s,r,o,n,a,u,c,d,p,A,g,m;do{if(t=P(),0===(e=x(2)))for(C(),u=v(),u|=v()<<8,d=v(),65535&(u^~(d|=v()<<8))&&jxg.A.debug("BlockLen checksum mismatch\n");u--;)O(v());else if(1===e)for(;;)if((s=bitReverse[x(7)]>>1)>23?(s=s<<1|P())>199?s=(s-=128)<<1|P():(s-=48)>143&&(s+=136):s+=256,s<256)O(s);else{if(256===s)break;for(a=x(cplext[s-=257])+cplens[s],s=bitReverse[x(5)]>>3,cpdext[s]>8?(c=x(8),c|=x(cpdext[s]-8)<<8):c=x(cpdext[s]),c+=cpdist[s],s=0;s<a;s++)O(l[h-c&32767])}else if(2===e){for(o=new Array(320),A=257+x(5),g=1+x(5),m=4+x(4),s=0;s<19;s++)o[s]=0;for(s=0;s<m;s++)o[border[s]]=x(3);for(a=f.length,i=0;i<a;i++)f[i]=new M;if(T(f,19,o))return E(),1;for(p=A+g,i=0;i<p;)if((s=N(f))<16)o[i++]=s;else if(16===s){if(i+(s=3+x(2))>p)return E(),1;for(r=i?o[i-1]:0;s--;)o[i++]=r}else{if(i+(s=17===s?3+x(3):11+x(7))>p)return E(),1;for(;s--;)o[i++]=0}for(a=_.length,i=0;i<a;i++)_[i]=new M;if(T(_,A,o))return E(),1;for(a=_.length,i=0;i<a;i++)f[i]=new M;for(n=[],i=A;i<o.length;i++)n[i-A]=o[i];if(T(f,g,n))return E(),1;for(;;)if((s=N(_))>=256){if(0===(s-=256))break;for(a=x(cplext[s-=1])+cplens[s],s=N(f),cpdext[s]>8?(c=x(8),c|=x(cpdext[s]-8)<<8):c=x(cpdext[s]),c+=cpdist[s];a--;)O(l[h-c&32767])}else O(s)}}while(!t);return E(),C(),0}function D(){var t,s,r,l,h,c=[];try{if(o=[],u=!1,c[0]=v(),c[1]=v(),120===c[0]&&218===c[1]&&(j(),a[n]=[o.join(""),"geonext.gxt"],n++),31===c[0]&&139===c[1]&&(k(),a[n]=[o.join(""),"file"],n++),80===c[0]&&75===c[1]){if(u=!0,c[2]=v(),c[3]=v(),3===c[2]&&4===c[3]){for(c[0]=v(),c[1]=v(),e=v(),e|=v()<<8,h=v(),h|=v()<<8,v(),v(),v(),v(),v(),v()<<8,v()<<16,v()<<24,v(),v()<<8,v()<<16,v()<<24,v(),v()<<8,v()<<16,v()<<24,l=v(),l|=v()<<8,r=v(),r|=v()<<8,t=0,b=[];l--;)"/"===(s=v())|":"===s?t=0:t<NAMEMAX-1&&(b[t++]=String.fromCharCode(s));for(i||(i=b),t=0;t<r;)s=v(),t++;if(8===h&&(j(),a[n]=new Array(2),a[n][0]=o.join(""),a[n][1]=b.join(""),n++),k())return!1}return!0}}catch(t){throw console.log("Probably problems on iOS7 with >>"),t}return!1}function k(){var t,i,s=[];if(8&e&&(s[0]=v(),s[1]=v(),s[2]=v(),s[3]=v(),80===s[0]&&75===s[1]&&7===s[2]&&8===s[3]?(v(),v()<<8,v()<<16,v()<<24):s[0]|s[1]<<8|s[2]<<16|s[3]<<24,v(),v()<<8,v()<<16,v()<<24,v(),v()<<8,v()<<16,v()<<24),u&&D())return!1;if(s[0]=v(),8!==s[0])return!0;if(e=v(),v(),v(),v(),v(),v(),v(),4&e)for(s[0]=v(),s[2]=v(),m=s[0]+256*s[1],t=0;t<m;t++)v();if(8&e)for(t=0,b=[],i=v();i;)"7"!==i&&":"!==i||(t=0),t<NAMEMAX-1&&(b[t++]=i),i=v();if(16&e)for(i=v();i;)i=v();return 2&e&&(v(),v()),j(),v(),v()<<8,v()<<16,v()<<24,v(),v()<<8,v()<<16,v()<<24,u&&D(),!1}y[0]=0,jxg.A.Util.Unzip.prototype.unzipFile=function(t){var e;for(this.unzip(),e=0;e<a.length;e++)if(a[e][1]===t)return a[e][0];return""},jxg.A.Util.Unzip.prototype.unzip=function(){return D(),a}};var zip=jxg.A.Util,UTF8_ACCEPT=0,UTF8D=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,10,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,11,6,6,6,5,8,8,8,8,8,8,8,8,8,8,8,0,12,24,36,60,96,84,12,12,12,48,72,12,12,12,12,12,12,12,12,12,12,12,12,12,0,12,12,12,12,12,0,12,0,12,12,12,24,12,12,12,12,12,24,12,24,12,12,12,12,12,12,12,12,12,24,12,12,12,12,12,24,12,12,12,12,12,12,12,24,12,12,12,12,12,12,12,12,12,36,12,36,12,12,12,36,12,12,12,12,12,36,12,36,12,12,12,36,12,12,12,12,12,12,12,12,12,12];jxg.A.Util=jxg.A.Util||{},jxg.A.Util.UTF8={encode:function(t){var e,i,s="",r=t.length;if(t=t.replace(/\r\n/g,"\n"),"function"==typeof unescape&&"function"==typeof encodeURIComponent)return unescape(encodeURIComponent(t));for(e=0;e<r;e++)(i=t.charCodeAt(e))<128?s+=String.fromCharCode(i):i>127&&i<2048?(s+=String.fromCharCode(i>>6|192),s+=String.fromCharCode(63&i|128)):(s+=String.fromCharCode(i>>12|224),s+=String.fromCharCode(i>>6&63|128),s+=String.fromCharCode(63&i|128));return s},decode:function(t){var e,i,s,r=0,o=0,n=UTF8_ACCEPT,a=[],l=t.length,h=[];for(e=0;e<l;e++)i=t.charCodeAt(e),s=UTF8D[i],o=n!==UTF8_ACCEPT?63&i|o<<6:255>>s&i,(n=UTF8D[256+n+s])===UTF8_ACCEPT&&(o>65535?a.push(55232+(o>>10),56320+(1023&o)):a.push(o),++r%1e4==0&&(h.push(String.fromCharCode.apply(null,a)),a=[]));return h.push(String.fromCharCode.apply(null,a)),h.join("")},asciiCharCodeAt:function(t,e){var i=t.charCodeAt(e);if(i>255)switch(i){case 8364:i=128;break;case 8218:i=130;break;case 402:i=131;break;case 8222:i=132;break;case 8230:i=133;break;case 8224:i=134;break;case 8225:i=135;break;case 710:i=136;break;case 8240:i=137;break;case 352:i=138;break;case 8249:i=139;break;case 338:i=140;break;case 381:i=142;break;case 8216:i=145;break;case 8217:i=146;break;case 8220:i=147;break;case 8221:i=148;break;case 8226:i=149;break;case 8211:i=150;break;case 8212:i=151;break;case 732:i=152;break;case 8482:i=153;break;case 353:i=154;break;case 8250:i=155;break;case 339:i=156;break;case 382:i=158;break;case 376:i=159}return i}};var utils_encoding=jxg.A.Util.UTF8,alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",pad="=";jxg.A.Util=jxg.A.Util||{},jxg.A.Util.Base64={_getByte:function(t,e){return 255&t.charCodeAt(e)},_getIndex:function(t,e){return alphabet.indexOf(t.charAt(e))},encode:function(t){var e,i,s,r,o,n=[];for(r=(s=(o=utils_encoding.encode(t)).length)%3,e=0;e<s-r;e+=3)i=this._getByte(o,e)<<16|this._getByte(o,e+1)<<8|this._getByte(o,e+2),n.push(alphabet.charAt(i>>18),alphabet.charAt(i>>12&63),alphabet.charAt(i>>6&63),alphabet.charAt(63&i));switch(r){case 1:i=this._getByte(o,s-1),n.push(alphabet.charAt(i>>2),alphabet.charAt(i<<4&63),pad,pad);break;case 2:i=this._getByte(o,s-2)<<8|this._getByte(o,s-1),n.push(alphabet.charAt(i>>10),alphabet.charAt(i>>4&63),alphabet.charAt(i<<2&63),pad)}return n.join("")},decode:function(t,e){var i,s,r,o,n,a,l=[],h=[];if((r=(i=t.replace(/[^A-Za-z0-9+/=]/g,"")).length)%4!=0)throw new Error("JSXGraph/utils/base64: Can't decode string (invalid input length).");for(i.charAt(r-1)===pad&&(o=1,i.charAt(r-2)===pad&&(o=2),r-=4),s=0;s<r;s+=4)n=this._getIndex(i,s)<<18|this._getIndex(i,s+1)<<12|this._getIndex(i,s+2)<<6|this._getIndex(i,s+3),h.push(n>>16,n>>8&255,255&n),s%1e4==0&&(l.push(String.fromCharCode.apply(null,h)),h=[]);switch(o){case 1:n=this._getIndex(i,r)<<12|this._getIndex(i,r+1)<<6|this._getIndex(i,r+2),h.push(n>>10,n>>2&255);break;case 2:n=this._getIndex(i,s)<<6|this._getIndex(i,s+1),h.push(n>>4)}return l.push(String.fromCharCode.apply(null,h)),a=l.join(""),e&&(a=utils_encoding.decode(a)),a},decodeAsArray:function(t){var e,i=this.decode(t),s=[],r=i.length;for(e=0;e<r;e++)s[e]=i.charCodeAt(e);return s}};var base64=jxg.A.Util.Base64;jxg.A.Server={modules:{},runningCalls:{},handleError:function(t){jxg.A.debug("error occured, server says: "+t.message)},callServer:function(t,e,i,s){var r,o,n,a,l,h;s=s||!1,l=utils_type.A.toJSON(i);do{a=t+Math.floor(4096*Math.random())}while(utils_type.A.exists(this.runningCalls[a]));return this.runningCalls[a]={action:t},utils_type.A.exists(i.module)&&(this.runningCalls[a].module=i.module),r=jxg.A.serverBase+"JXGServer.py",o="action="+escape(t)+"&id="+a+"&dataJSON="+escape(base64.encode(l)),this.cbp=function(t){var i,s,r,o,n,a,l,h;if(i=new zip.Unzip(base64.decodeAsArray(t)).unzip(),utils_type.A.isArray(i)&&i.length>0&&(i=i[0][0]),utils_type.A.exists(i))if("error"===(s=window.JSON&&window.JSON.parse?window.JSON.parse(i):new Function("return "+i)()).type)this.handleError(s);else if("response"===s.type){for(a=s.id,l=0;l<s.fields.length;l++)o=(r=s.fields[l]).namespace+("object"==typeof new Function("return "+r.namespace)()?".":".prototype.")+r.name+" = "+r.value,new Function(o)();for(l=0;l<s.handler.length;l++){for(r=s.handler[l],n=[],h=0;h<r.parameters.length;h++)n[h]='"'+r.parameters[h]+'": '+r.parameters[h];o="if(typeof JXG.Server.modules."+this.runningCalls[a].module+' == "undefined")JXG.Server.modules.'+this.runningCalls[a].module+" = {};",o+="JXG.Server.modules."+this.runningCalls[a].module+"."+r.name+"_cb = "+r.callback+";",o+="JXG.Server.modules."+this.runningCalls[a].module+"."+r.name+" = function ("+r.parameters.join(",")+', __JXGSERVER_CB__, __JXGSERVER_SYNC) {if(typeof __JXGSERVER_CB__ == "undefined") __JXGSERVER_CB__ = JXG.Server.modules.'+this.runningCalls[a].module+"."+r.name+"_cb;var __JXGSERVER_PAR__ = {"+n.join(",")+', "module": "'+this.runningCalls[a].module+'", "handler": "'+r.name+'" };JXG.Server.callServer("exec", __JXGSERVER_CB__, __JXGSERVER_PAR__, __JXGSERVER_SYNC);};',new Function(o)()}delete this.runningCalls[a],e(s.data)}},this.cb=jxg.A.bind(this.cbp,this),window.XMLHttpRequest?(n=new XMLHttpRequest).overrideMimeType("text/plain; charset=iso-8859-1"):n=new ActiveXObject("Microsoft.XMLHTTP"),!(!n||(n.open("POST",r,!s),n.setRequestHeader("Content-type","application/x-www-form-urlencoded"),s||(n.onreadystatechange=(h=this.cb,function(){return 4===n.readyState&&200===n.status&&(h(n.responseText),!0)})),n.send(o),!s))&&(this.cb(n.responseText),!0)},loadModule_cb:function(t){var e;for(e=0;e<t.length;e++)jxg.A.debug(t[e].name+": "+t[e].value)},loadModule:function(t){return jxg.A.Server.callServer("load",jxg.A.Server.loadModule_cb,{module:t},!0)}},jxg.A.Server.load=jxg.A.Server.loadModule;var server=jxg.A.Server,undef;math.A.Symbolic={generateSymbolicCoordinatesPartial:function(t,e,i,s){var r,o,n,a=e.ancestors,l=0,h=function(t){return"underscore"===s?i+"_{"+t+"}":"brace"===s?i+"["+t+"]":i+t};for(o in t.listOfFreePoints=[],t.listOfDependantPoints=[],a)if(a.hasOwnProperty(o)&&(r=0,utils_type.A.isPoint(a[o]))){for(n in a[o].ancestors)a[o].ancestors.hasOwnProperty(n)&&r++;0===r?(a[o].symbolic.x=a[o].coords.usrCoords[1],a[o].symbolic.y=a[o].coords.usrCoords[2],t.listOfFreePoints.push(a[o])):(l+=1,a[o].symbolic.x=h(l),l+=1,a[o].symbolic.y=h(l),t.listOfDependantPoints.push(a[o]))}return utils_type.A.isPoint(e)&&(e.symbolic.x="x",e.symbolic.y="y"),l},clearSymbolicCoordinates:function(t){var e=function(t){var e,i=t&&t.length||0;for(e=0;e<i;e++)utils_type.A.isPoint(t[e])&&(t[e].symbolic.x="",t[e].symbolic.y="")};e(t.listOfFreePoints),e(t.listOfDependantPoints),delete t.listOfFreePoints,delete t.listOfDependantPoints},generatePolynomials:function(t,e,i){var s,r,o,n,a=e.ancestors,l=[],h=[];for(s in i&&this.generateSymbolicCoordinatesPartial(t,e,"u","brace"),a[e.id]=e,a)if(a.hasOwnProperty(s)&&(n=0,l=[],utils_type.A.isPoint(a[s]))){for(r in a[s].ancestors)a[s].ancestors.hasOwnProperty(r)&&n++;if(n>0)for(l=a[s].generatePolynomial(),o=0;o<l.length;o++)h.push(l[o])}return i&&this.clearSymbolicCoordinates(t),h},geometricLocusByGroebnerBase:function(t,e){var i,s,r,o,n,a,l,h,u,c,d,p,_=t.options.locus,f={},A=this.generateSymbolicCoordinatesPartial(t,e,"u","brace"),g=new base_coords.A(constants.A.COORDS_BY_USR,[0,0],t),m=new base_coords.A(constants.A.COORDS_BY_USR,[t.canvasWidth,t.canvasHeight],t),y=1,b=0,v=0,C=0;if(server.modules.geoloci===undef&&server.loadModule("geoloci"),server.modules.geoloci===undef)throw new Error("JSXGraph: Unable to load JXG.Server module 'geoloci.py'.");if(a=g.usrCoords[1],l=m.usrCoords[1],h=m.usrCoords[2],u=g.usrCoords[2],_.translateToOrigin&&t.listOfFreePoints.length>0){for(b=(r=_.toOrigin!==undef&&null!==_.toOrigin&&utils_type.A.isInArray(t.listOfFreePoints,_.toOrigin.id)?_.toOrigin:t.listOfFreePoints[0]).symbolic.x,v=r.symbolic.y,n=0;n<t.listOfFreePoints.length;n++)t.listOfFreePoints[n].symbolic.x-=b,t.listOfFreePoints[n].symbolic.y-=v;if(a-=b,l-=b,h-=v,u-=v,_.translateTo10&&t.listOfFreePoints.length>1){for(o=_.to10!==undef&&null!==_.to10&&_.to10.id!==_.toOrigin.id&&utils_type.A.isInArray(t.listOfFreePoints,_.to10.id)?_.to10:t.listOfFreePoints[0].id===r.id?t.listOfFreePoints[1]:t.listOfFreePoints[0],C=geometry.A.rad([1,0],[0,0],[o.symbolic.x,o.symbolic.y]),c=Math.cos(-C),d=Math.sin(-C),n=0;n<t.listOfFreePoints.length;n++)p=t.listOfFreePoints[n].symbolic.x,t.listOfFreePoints[n].symbolic.x=c*t.listOfFreePoints[n].symbolic.x-d*t.listOfFreePoints[n].symbolic.y,t.listOfFreePoints[n].symbolic.y=d*p+c*t.listOfFreePoints[n].symbolic.y;if(o.symbolic.y=0,p=a,a=c*a-d*h,h=d*p+c*h,p=l,l=c*l-d*u,u=d*p+c*u,_.stretch&&Math.abs(o.symbolic.x)>math.A.eps){for(y=o.symbolic.x,n=0;n<t.listOfFreePoints.length;n++)t.listOfFreePoints[n].symbolic.x/=y,t.listOfFreePoints[n].symbolic.y/=y;for(n=0;n<t.objectsList.length;n++)t.objectsList[n].elementClass===constants.A.OBJECT_CLASS_CIRCLE&&"pointRadius"===t.objectsList[n].method&&(f[n]=t.objectsList[n].radius,t.objectsList[n].radius/=y);a/=y,l/=y,h/=y,u/=y,o.symbolic.x=1}}for(n=0;n<t.listOfFreePoints.length;n++)p=t.listOfFreePoints[n].symbolic.x,Math.abs(p)<math.A.eps&&(t.listOfFreePoints[n].symbolic.x=0),Math.abs(p-Math.round(p))<math.A.eps&&(t.listOfFreePoints[n].symbolic.x=Math.round(p)),p=t.listOfFreePoints[n].symbolic.y,Math.abs(p)<math.A.eps&&(t.listOfFreePoints[n].symbolic.y=0),Math.abs(p-Math.round(p))<math.A.eps&&(t.listOfFreePoints[n].symbolic.y=Math.round(p))}for(n in i=this.generatePolynomials(t,e).join(","),this.cbp=function(t){s=t},this.cb=utils_type.A.bind(this.cbp,this),server.modules.geoloci.lociCoCoA(a,l,h,u,A,i,y,C,b,v,this.cb,!0),this.clearSymbolicCoordinates(t),f)f.hasOwnProperty(n)&&(t.objects[n].radius=f[n]);return s}};var symbolic=math.A.Symbolic;math.A.Clip={_isSeparator:function(t){return isNaN(t.coords.usrCoords[1])&&isNaN(t.coords.usrCoords[2])},makeDoublyLinkedList:function(t){var e,i=null,s=[],r=t.length;if(r>0)for(e=0;e<r;e++)this._isSeparator(t[e])?(t[e]._next=t[(e+1)%r],t[e]._prev=t[(r+e-1)%r]):(null===i&&(i=e,s.push(i)),this._isSeparator(t[(e+1)%r])||e===r-1?(t[e]._next=t[i],t[i]._prev=t[e],t[e]._end=!0,i=null):(t[e]._next=t[(e+1)%r],t[i]._prev=t[e]),this._isSeparator(t[(r+e-1)%r])||(t[e]._prev=t[(r+e-1)%r]));return s},Vertex:function(t,e,i,s,r,o){this.pos=e,this.intersection=!0,this.coords=t,this.elementClass=constants.A.OBJECT_CLASS_POINT,this.data={alpha:i,path:s,pathname:r,done:!1,type:o,idx:0},this.neighbour=null,this.entry_exit=!1},_addToList:function(t,e,i){var s=t.length,r=math.A.eps*math.A.eps;s>0&&Math.abs(t[s-1].coords.usrCoords[0]-e.usrCoords[0])<r&&Math.abs(t[s-1].coords.usrCoords[1]-e.usrCoords[1])<r&&Math.abs(t[s-1].coords.usrCoords[2]-e.usrCoords[2])<r||t.push({pos:i,intersection:!1,coords:e,elementClass:constants.A.OBJECT_CLASS_POINT})},sortIntersections:function(t){var e,i,s,r,o,n,a=[],l=t.length;for(e=0;e<l;e++)if(t[e].sort((function(t,e){return t.data.alpha>e.data.alpha?1:-1})),t[e].length>0){for(o=t[e].length-1,n=(r=(s=t[e][0]).data.path[s.pos])._next,e===l-1&&(r._end=!1),0===s.data.alpha&&"T"===s.data.type?(r.intersection=!0,r.data=s.data,r.neighbour=s.neighbour,r.neighbour.neighbour=r,r.entry_exit=!1,t[e][0]=r):(s._prev=r,s._prev._next=s),i=1;i<=o;i++)(s=t[e][i])._prev=t[e][i-1],s._prev._next=s;(s=t[e][o])._next=n,s._next._prev=s,e===l-1&&(s._end=!0),a=a.concat(t[e])}return a},_inbetween:function(t,e,i){var s,r=math.A.eps*math.A.eps,o=i[1]-e[1],n=i[2]-e[2],a=t[1]-e[1],l=t[2]-e[2];return 0===o&&0===n&&0===a&&0===l||(s=Math.abs(a)<r&&Math.abs(o)<r?l/n:a/o,Math.abs(s)<r&&(s=0),s)},_print_array:function(t){var e,i;for(e=0;e<t.length;e++)try{i="",t[e]._end&&(i=" end"),console.log(e,t[e].coords.usrCoords,t[e].data.type,"\t","prev",t[e]._prev.coords.usrCoords,"next",t[e]._next.coords.usrCoords+i)}catch(i){console.log(e,t[e].coords.usrCoords)}},_print_list:function(t){for(var e,i=0;i<100&&(e=t.data?t.data.alpha:"-",console.log("\t",t.coords.usrCoords,"\n\t\tis:",t.intersection,"end:",t._end,e,"\n\t\t-:",t._prev.coords.usrCoords,"\n\t\t+:",t._next.coords.usrCoords,"\n\t\tn:",t.intersection?t.neighbour.coords.usrCoords:"-"),!t._end);)t=t._next,i++},_noOverlap:function(t,e,i,s){var r,o,n,a,l,h=Math.sqrt(math.A.eps),u=!1;for(r=0;r<3;r++)if(o=Math.min(t[r],e[r]),n=Math.max(t[r],e[r]),a=Math.min(i[r],s[r]),l=Math.max(i[r],s[r]),n<a-h||o>l+h){u=!0;break}return u},findIntersections:function(t,e,i){var s,r,o,n,a,l,h,u,c,d,p,_,f,A=[],g=100*math.A.eps,m=t.length,y=e.length,b=[],v=[],C=[],P=!1,x=!1,E=!1;for(r=0;r<y;r++)C.push([]);for(s=0;s<m;s++)if(v.push([]),this._isSeparator(t[s])||this._isSeparator(t[(s+1)%m]))P=!0;else{if(P&&s===m-1)break;for(n=t[s].coords.usrCoords,a=t[(s+1)%m].coords.usrCoords,r=0;r<y;r++)if(this._isSeparator(e[r])||this._isSeparator(e[(r+1)%y]))x=!0;else{if(x&&r===y-1)break;if(l=e[r].coords.usrCoords,h=e[(r+1)%y].coords.usrCoords,!this._noOverlap(n,a,l,h)&&(A=geometry.A.meetSegmentSegment(n,a,l,h),u=geometry.A.distance(n,a,3),c=geometry.A.distance(l,h,3),A[1]*u>-g&&A[1]<1-g/u&&A[2]*c>-g&&A[2]<1-g/c||A[1]===1/0&&A[2]===1/0&&math.A.norm(A[0],3)<g)){if(o=new base_coords.A(constants.A.COORDS_BY_USER,A[0],i),p="X",Math.abs(A[1])*u<g||Math.abs(A[2])*c<g)p="T",Math.abs(A[1])*u<g&&(A[1]=0),Math.abs(A[2])*c<g&&(A[2]=0),o=0===A[1]?new base_coords.A(constants.A.COORDS_BY_USER,n,i):new base_coords.A(constants.A.COORDS_BY_USER,l,i);else if(A[1]===1/0&&A[2]===1/0&&math.A.norm(A[0],3)<g){(d=this._inbetween(n,l,h))>=0&&d<1&&(p="T",o=new base_coords.A(constants.A.COORDS_BY_USER,n,i),A[1]=0,A[2]=d,_=new this.Vertex(o,s,A[1],t,"S",p),f=new this.Vertex(o,r,A[2],e,"C",p),_.neighbour=f,f.neighbour=_,v[s].push(_),C[r].push(f)),d=this._inbetween(l,n,a),geometry.A.distance(n,l,3)>g&&d>=0&&d<1&&(p="T",o=new base_coords.A(constants.A.COORDS_BY_USER,l,i),A[1]=d,A[2]=0,_=new this.Vertex(o,s,A[1],t,"S",p),f=new this.Vertex(o,r,A[2],e,"C",p),_.neighbour=f,f.neighbour=_,v[s].push(_),C[r].push(f));continue}E,_=new this.Vertex(o,s,A[1],t,"S",p),f=new this.Vertex(o,r,A[2],e,"C",p),_.neighbour=f,f.neighbour=_,v[s].push(_),C[r].push(f)}}}for(b=this.sortIntersections(v),s=0;s<b.length;s++)b[s].data.idx=s,b[s].neighbour.data.idx=s;return[b,this.sortIntersections(C)]},_getPosition:function(t,e,i,s){var r=geometry.A.det3p(t,e,i),o=geometry.A.det3p(t,i,s);return geometry.A.det3p(e,i,s)>=0?r>=0&&o>=0?"left":"right":r>=0||o>=0?"left":"right"},_classifyDegenerateIntersections:function(t){var e,i,s,r,o,n,a,l,h,u,c,d,p,_,f=!1;for(f,h=geometry.A.det3p,a=0,t._tours=0;;){if(t.intersection&&"T"===t.data.type&&(e=t._next.coords.usrCoords,i=t._prev.coords.usrCoords,geometry.A.distance(t.coords.usrCoords,e,3)<math.A.eps&&(e=t._next._next.coords.usrCoords),geometry.A.distance(t.coords.usrCoords,i,3)<math.A.eps&&(i=t._prev._prev.coords.usrCoords),r=(o=t.neighbour)._prev.coords.usrCoords,s=o._next.coords.usrCoords,geometry.A.distance(o.coords.usrCoords,s,3)<math.A.eps&&(s=o._next._next.coords.usrCoords),geometry.A.distance(o.coords.usrCoords,r,3)<math.A.eps&&(r=o._prev._prev.coords.usrCoords),c=h(t.coords.usrCoords,i,r),d=h(t.coords.usrCoords,e,s),p=h(t.coords.usrCoords,i,s),_=h(t.coords.usrCoords,e,r),0===c&&0===d&&0===p&&0===_&&(t.coords.usrCoords[1]*=1+Math.random()*math.A.eps,t.coords.usrCoords[2]*=1+Math.random()*math.A.eps,o.coords.usrCoords[1]=t.coords.usrCoords[1],o.coords.usrCoords[2]=t.coords.usrCoords[2],c=h(t.coords.usrCoords,i,r),d=h(t.coords.usrCoords,e,s),p=h(t.coords.usrCoords,i,s),_=h(t.coords.usrCoords,e,r)),u=!1,0===c?geometry.A.affineRatio(t.coords.usrCoords,i,r)<0&&(u=!0):0===d?geometry.A.affineRatio(t.coords.usrCoords,e,s)<0&&(u=!0):0===p?geometry.A.affineRatio(t.coords.usrCoords,i,s)>0&&(u=!0):0===_&&geometry.A.affineRatio(t.coords.usrCoords,e,r)>0&&(u=!0),u&&(l=r,r=s,s=l,l=c,c=p,p=l,l=d,d=_,_=l),utils_type.A.exists(t.delayedStatus)||(t.delayedStatus=[]),0===c&&0===d?t.delayedStatus=["on","on"]:0===c?(n=this._getPosition(e,r,o.coords.usrCoords,s),t.delayedStatus=["on",n]):0===d?(n=this._getPosition(i,r,o.coords.usrCoords,s),t.delayedStatus=[n,"on"]):0===t.delayedStatus.length&&(this._getPosition(i,r,o.coords.usrCoords,s)!==this._getPosition(e,r,o.coords.usrCoords,s)?t.data.type="X":t.data.type="B")),utils_type.A.exists(t._tours)&&t._tours++,t._tours>3||t._end||a>1e3){a>1e3&&console.log("Clipping: _classifyDegenerateIntersections exit"),utils_type.A.exists(t._tours)&&delete t._tours;break}t.intersection&&a++,t=t._next}},_handleIntersectionChains:function(t){var e,i=0,s="Null",r=!1,o=!1,n=!1;for(n;!0===t.intersection&&("T"===t.data.type&&("on"!==t.delayedStatus[0]&&"on"===t.delayedStatus[1]?(r=!0,e=t,s=t.delayedStatus[0]):r&&"on"===t.delayedStatus[0]&&"on"===t.delayedStatus[1]?t.data.type="B":r&&"on"===t.delayedStatus[0]&&"on"!==t.delayedStatus[1]&&(r=!1,s===t.delayedStatus[1]?(e.data.type="DB",t.data.type="DB"):(e.data.type="DX",t.data.type="DX"))),i++),t._end&&(o=!0),!o||r;){if(i>1e3){console.log("Warning: _handleIntersectionChains: intersection chain reached maximum numbers of iterations");break}t=t._next}},_handleFullyDegenerateCase:function(t,e,i){var s,r,o,n,a,l,h,u,c,d,p,_,f,A,g=[t,e];for(o=0;o<2;o++){for(d=(s=g[o]).length,u=0,A=!0;u<d;u++)if(!s[u].intersection){A=!1;break}if(A)for(p=(r=g[(o+1)%2]).length,u=0;u<d;u++){for(a=s[u].coords.usrCoords,l=s[u]._next.coords.usrCoords,n=[.5*(a[0]+l[0]),.5*(a[1]+l[1]),.5*(a[2]+l[2])],c=0,_=!1;c<p;c++)if(Math.abs(geometry.A.det3p(r[c].coords.usrCoords,r[(c+1)%p].coords.usrCoords,n))<math.A.eps){_=!0;break}if(!_){h={pos:u,intersection:!1,coords:new base_coords.A(constants.A.COORDS_BY_USER,n,i),elementClass:constants.A.OBJECT_CLASS_POINT},f=s[u]._next,s[u]._next=h,h._prev=s[u],h._next=f,f._prev=h,s[u]._end&&(s[u]._end=!1,h._end=!0);break}}}},_getStatus:function(t,e){for(;t.intersection&&!t._end;)t=t._next;return[t,0===geometry.A.windingNumber(t.coords.usrCoords,e)?"entry":"exit"]},markEntryExit:function(t,e,i){var s,r,o,n,a,l,h,u=null,c=0;for(l=i.length,a=0;a<l;a++)for(h=i[a],this._classifyDegenerateIntersections(t[h]),this._handleIntersectionChains(t[h]),r=(n=this._getStatus(t[h],e))[0],s=n[1],r._starter=!0,o=0,u=null,c=0;!0===r.intersection&&("X"===r.data.type&&1===c&&(u.entry_exit=s,"exit"===s&&(u.data.type="X"),c=2),"X"!==r.data.type&&"DB"!==r.data.type||(r.entry_exit=s,s="entry"===s?"exit":"entry"),"DX"===r.data.type&&(0===c?(u=r,c=1):1===c?(r.entry_exit=s,u.entry_exit=s,"exit"===s?u.data.type="X":r.data.type="X",s="entry"===s?"exit":"entry",u=null,c=0):2===c&&(r.entry_exit=s,r.data.type="X",s="entry"===s?"exit":"entry",u=null,c=0))),r=r._next,!(utils_type.A.exists(r._starter)||o>1e4);)o++},_stayOnPath:function(t,e){var i=!0;return t.intersection&&"B"!==t.data.type&&(i=e===t.entry_exit),i},_addVertex:function(t,e,i){return isNaN(e.coords.usrCoords[1])||isNaN(e.coords.usrCoords[2])||t.push(e),e.intersection&&e.data.done?(i&&console.log("Add last intersection point",e.coords.usrCoords,"on",e.data.pathname,e.entry_exit,e.data.type),!0):(e.intersection&&(e.data.done=!0,i&&console.log("Add intersection point",e.coords.usrCoords,"on",e.data.pathname,e.entry_exit,e.data.type)),!1)},tracing:function(t,e,i){var s,r,o,n,a=0,l=1e4,h=0,u=[],c=!1,d=!1;for(d;h<e.length&&a<l;)if((o=e[h]).data.done||"X"!==o.data.type)h++;else{d,u.length>0&&u.push([NaN,NaN]),n=o.data.idx,s=t,c=this._addVertex(u,o,d),r=o.entry_exit;do{if(c)break;if("intersection"===i&&"entry"===o.entry_exit||"union"===i&&"exit"===o.entry_exit||"difference"===i&&s===t==("exit"===o.entry_exit)){d;do{if(o=o._next,c=this._addVertex(u,o,d))break}while(this._stayOnPath(o,r));a++}else{d;do{if(o=o._prev,c=this._addVertex(u,o,d))break}while(this._stayOnPath(o,r));a++}if(c)break;if(!o.neighbour)return console.log("Tracing: emergency break - no neighbour!!!!!!!!!!!!!!!!!",a),[[0],[0]];if((o=o.neighbour).data.done)break;o.data.done=!0,r=o.entry_exit,s=o.data.path}while(o.data.idx!==n&&a<l);a>=l&&console.log("Tracing: stopping an infinite loop!",a),h++}return this._getCoordsArrays(u,!1)},isEmptyCase:function(t,e,i){return"intersection"===i&&(0===t.length||0===e.length)||("union"===i&&0===t.length&&0===e.length||"difference"===i&&0===t.length)},_getCoordsArrays:function(t,e){var i,s=[],r=[],o=t.length;for(i=0;i<o;i++)t[i].coords?(s.push(t[i].coords.usrCoords[1]),r.push(t[i].coords.usrCoords[2])):(s.push(t[i][0]),r.push(t[i][1]));return e&&o>0&&(t[0].coords?(s.push(t[0].coords.usrCoords[1]),r.push(t[0].coords.usrCoords[2])):(s.push(t[0][0]),r.push(t[0][1]))),[s,r]},handleEmptyIntersection:function(t,e,i){var s,r,o=!1,n=[];if(0===t.length)return n="union"===i?e:[],this._getCoordsArrays(n,!0);if(0===e.length)return n="intersection"===i?[]:t,this._getCoordsArrays(n,!0);if(t.length>0)for(s=t[0];s.intersection&&!(s=s._next)._end;);if(e.length>0)for(r=e[0];r.intersection&&!(r=r._next)._end;);return 0===geometry.A.windingNumber(s.coords.usrCoords,e)?0!==geometry.A.windingNumber(r.coords.usrCoords,t)?("union"===i?(utils_type.A.concat(n,t),n.push(t[0])):"difference"===i&&(utils_type.A.concat(n,t),n.push(t[0]),geometry.A.signedPolygon(t)*geometry.A.signedPolygon(e)>0&&n.reverse(),n.push([NaN,NaN])),"difference"!==i&&"intersection"!==i||(utils_type.A.concat(n,e),n.push(e[0]),o=!1)):"difference"===i?(utils_type.A.concat(n,t),o=!0):"union"===i&&(utils_type.A.concat(n,t),n.push(t[0]),n.push([NaN,NaN]),utils_type.A.concat(n,e),n.push(e[0])):"intersection"===i?(utils_type.A.concat(n,t),o=!0):"union"===i&&(utils_type.A.concat(n,e),n.push(e[0])),this._getCoordsArrays(n,o)},_countCrossingIntersections:function(t){var e,i=t.length,s=0;for(e=0;e<i;e++)"X"===t[e].data.type&&s++;return s},_getPath:function(t,e){var i,s,r,o,n,a,l,h=[];if(t.elementClass!==constants.A.OBJECT_CLASS_CURVE||t.type!==constants.A.OBJECT_TYPE_ARC&&t.type!==constants.A.OBJECT_TYPE_SECTOR){if(t.elementClass===constants.A.OBJECT_CLASS_CURVE&&utils_type.A.exists(t.points))for(s=t.numberPoints,i=0;i<s;i++)this._addToList(h,t.points[i],i);else if(t.type===constants.A.OBJECT_TYPE_POLYGON)for(i=0;i<t.vertices.length;i++)this._addToList(h,t.vertices[i].coords,i);else if(t.elementClass===constants.A.OBJECT_CLASS_CIRCLE)for(l=359,r=t.Radius(),o=2*Math.PI/l,i=0;i<=l;i++)this._addToList(h,new base_coords.A(constants.A.COORDS_BY_USER,[t.center.coords.usrCoords[0],t.center.coords.usrCoords[1]+Math.cos(i*o)*r,t.center.coords.usrCoords[2]+Math.sin(i*o)*r],e),i);else if(utils_type.A.isArray(t))for(s=t.length,i=0;i<s;i++)utils_type.A.exists(t[i].coords)?this._addToList(h,t[i].coords,i):utils_type.A.isArray(t[i])?this._addToList(h,new base_coords.A(constants.A.COORDS_BY_USER,t[i],e),i):utils_type.A.exists(t[i].usrCoords)&&this._addToList(h,t[i],i)}else{for(n=geometry.A.rad(t.radiuspoint,t.center,t.anglepoint),l=Math.floor(180*n/Math.PI),r=t.Radius(),o=n/l,a=Math.atan2(t.radiuspoint.coords.usrCoords[2]-t.center.coords.usrCoords[2],t.radiuspoint.coords.usrCoords[1]-t.center.coords.usrCoords[1]),t.type===constants.A.OBJECT_TYPE_SECTOR&&this._addToList(h,t.center.coords,0),i=0;i<=l;i++)this._addToList(h,new base_coords.A(constants.A.COORDS_BY_USER,[t.center.coords.usrCoords[0],t.center.coords.usrCoords[1]+Math.cos(i*o+a)*r,t.center.coords.usrCoords[2]+Math.sin(i*o+a)*r],e),i+1);t.type===constants.A.OBJECT_TYPE_SECTOR&&this._addToList(h,t.center.coords,l+2)}return h},greinerHormann:function(t,e,i,s){var r,o,n,a,l=[],h=[];return(r=(l=this._getPath(t,s)).length)>0&&geometry.A.distance(l[0].coords.usrCoords,l[r-1].coords.usrCoords,3)<math.A.eps&&l.pop(),(r=(h=this._getPath(e,s)).length)>0&&geometry.A.distance(h[0].coords.usrCoords,h[r-1].coords.usrCoords,3)<math.A.eps*math.A.eps&&h.pop(),this.isEmptyCase(l,h,i)?[[],[]]:(n=this.makeDoublyLinkedList(l),a=this.makeDoublyLinkedList(h),o=this.findIntersections(l,h,s)[0],this._handleFullyDegenerateCase(l,h,s),this.markEntryExit(l,h,n),this.markEntryExit(h,l,a),0===this._countCrossingIntersections(o)?this.handleEmptyIntersection(l,h,i):this.tracing(l,o,i))},union:function(t,e,i){return this.greinerHormann(t,e,"union",i)},intersection:function(t,e,i){return this.greinerHormann(t,e,"intersection",i)},difference:function(t,e,i){return this.greinerHormann(t,e,"difference",i)}};var clip=math.A.Clip;math.A.Poly={},math.A.Poly.Ring=function(t){this.vars=t},jxg.A.extend(math.A.Poly.Ring.prototype,{}),math.A.Poly.Monomial=function(t,e,i){var s;if(!utils_type.A.exists(t))throw new Error("JSXGraph error: In JXG.Math.Poly.monomial missing parameter 'ring'.");for(utils_type.A.isArray(i)||(i=[]),s=(i=i.slice(0,t.vars.length)).length;s<t.vars.length;s++)i.push(0);this.ring=t,this.coefficient=e||0,this.exponents=utils_type.A.deepCopy(i)},jxg.A.extend(math.A.Poly.Monomial.prototype,{copy:function(){return new math.A.Poly.Monomial(this.ring,this.coefficient,this.exponents)},print:function(){var t,e=[];for(t=0;t<this.ring.vars.length;t++)e.push(this.ring.vars[t]+"^"+this.exponents[t]);return this.coefficient+"*"+e.join("*")}}),math.A.Poly.Polynomial=function(t,e){var i;if(!utils_type.A.exists(t))throw new Error("JSXGraph error: In JXG.Math.Poly.polynomial missing parameter 'ring'.");i=utils_type.A.exists(e)&&utils_type.A.isString(e)?void 0:[],this.ring=t,this.monomials=i},jxg.A.extend(math.A.Poly.Polynomial.prototype,{findSignature:function(t){var e;for(e=0;e<this.monomials.length;e++)if(utils_type.A.cmpArrays(this.monomials[e].exponents,t))return e;return-1},addSubMonomial:function(t,e){var i;(i=this.findSignature(t.exponents))>-1?this.monomials[i].coefficient+=e*t.coefficient:(t.coefficient*=e,this.monomials.push(t))},add:function(t){var e;if(!utils_type.A.exists(t)||t.ring!==this.ring)throw new Error("JSXGraph error: In JXG.Math.Poly.polynomial.add either summand is undefined or rings don't match.");if(utils_type.A.isArray(t.exponents))this.addSubMonomial(t,1);else for(e=0;e<t.monomials.length;e++)this.addSubMonomial(t.monomials[e],1)},sub:function(t){var e;if(!utils_type.A.exists(t)||t.ring!==this.ring)throw new Error("JSXGraph error: In JXG.Math.Poly.polynomial.sub either summand is undefined or rings don't match.");if(utils_type.A.isArray(t.exponents))this.addSubMonomial(t,-1);else for(e=0;e<t.monomials.length;e++)this.addSubMonomial(t.monomials[e],-1)},copy:function(){var t,e;for(e=new math.A.Poly.Polynomial(this.ring),t=0;t<this.monomials.length;t++)e.monomials.push(this.monomials[t].copy());return e},print:function(){var t,e=[];for(t=0;t<this.monomials.length;t++)e.push("("+this.monomials[t].print()+")");return e.join("+")}});var poly=math.A.Poly;jxg.A.Complex=function(t,e){this.isComplex=!0,t&&t.isComplex&&(e=t.imaginary,t=t.real),this.real=t||0,this.imaginary=e||0,this.absval=0,this.angle=0},jxg.A.extend(jxg.A.Complex.prototype,{toString:function(){return this.real+" + "+this.imaginary+"i"},add:function(t){return utils_type.A.isNumber(t)?this.real+=t:(this.real+=t.real,this.imaginary+=t.imaginary),this},sub:function(t){return utils_type.A.isNumber(t)?this.real-=t:(this.real-=t.real,this.imaginary-=t.imaginary),this},mult:function(t){var e,i;return utils_type.A.isNumber(t)?(this.real*=t,this.imaginary*=t):(e=this.real,i=this.imaginary,this.real=e*t.real-i*t.imaginary,this.imaginary=e*t.imaginary+i*t.real),this},div:function(t){var e,i,s;if(utils_type.A.isNumber(t)){if(Math.abs(t)<Math.eps)return this.real=1/0,this.imaginary=1/0,this;this.real/=t,this.imaginary/=t}else{if(Math.abs(t.real)<Math.eps&&Math.abs(t.imaginary)<Math.eps)return this.real=1/0,this.imaginary=1/0,this;e=t.real*t.real+t.imaginary*t.imaginary,s=this.real,i=this.imaginary,this.real=(s*t.real+i*t.imaginary)/e,this.imaginary=(i*t.real-s*t.imaginary)/e}return this},conj:function(){return this.imaginary*=-1,this}}),jxg.A.C={},jxg.A.C.add=function(t,e){var i=new jxg.A.Complex(t);return i.add(e),i},jxg.A.C.sub=function(t,e){var i=new jxg.A.Complex(t);return i.sub(e),i},jxg.A.C.mult=function(t,e){var i=new jxg.A.Complex(t);return i.mult(e),i},jxg.A.C.div=function(t,e){var i=new jxg.A.Complex(t);return i.div(e),i},jxg.A.C.conj=function(t){var e=new jxg.A.Complex(t);return e.conj(),e},jxg.A.C.abs=function(t){var e=new jxg.A.Complex(t);return e.conj(),e.mult(t),Math.sqrt(e.real)},jxg.A.C.copy=function(t){return new jxg.A.Complex(t)},jxg.A.Complex.C=jxg.A.C;var complex=jxg.A.Complex,src_options=__webpack_require__(378);jxg.A.AbstractRenderer=function(){this.vOffsetText=0,this.enhancedRendering=!0,this.container=null,this.type="",this.supportsForeignObject=!1,this.dashArray=[[2,2],[5,5],[10,10],[20,20],[20,10,10,10],[20,5,10,5],[0,5]]},jxg.A.extend(jxg.A.AbstractRenderer.prototype,{_updateVisual:function(t,e,i){(i||this.enhancedRendering)&&(e=e||{},this.setObjectViewport(t),this.setObjectTransition(t),utils_type.A.evaluate(t.visProp.draft)?this.setDraft(t):(e.stroke||(t.highlighted?(this.setObjectStrokeColor(t,t.visProp.highlightstrokecolor,t.visProp.highlightstrokeopacity),this.setObjectStrokeWidth(t,t.visProp.highlightstrokewidth)):(this.setObjectStrokeColor(t,t.visProp.strokecolor,t.visProp.strokeopacity),this.setObjectStrokeWidth(t,t.visProp.strokewidth))),e.fill||(t.highlighted?this.setObjectFillColor(t,t.visProp.highlightfillcolor,t.visProp.highlightfillopacity):this.setObjectFillColor(t,t.visProp.fillcolor,t.visProp.fillopacity)),e.dash||this.setDashStyle(t,t.visProp),e.shadow||this.setShadow(t),e.tabindex||this.setTabindex(t)))},_getHighlighted:function(t){var e=!1;return utils_type.A.exists(t.board)&&utils_type.A.exists(t.board.highlightedObjects)||(e=!0),!e&&utils_type.A.exists(t.board.highlightedObjects[t.id])?"highlight":""},drawPoint:function(t){var e,i=src_options.A.normalizePointFace(utils_type.A.evaluate(t.visProp.face));e="o"===i?"ellipse":"[]"===i?"rect":"path",t.rendNode=this.appendChildPrim(this.createPrim(e,t.id),utils_type.A.evaluate(t.visProp.layer)),this.appendNodesToElement(t,e),this._updateVisual(t,{dash:!0,shadow:!0},!0),this.updatePoint(t)},updatePoint:function(t){var e,i=utils_type.A.evaluate(t.visProp.size),s=src_options.A.normalizePointFace(utils_type.A.evaluate(t.visProp.face)),r=utils_type.A.evaluate(t.visProp.sizeunit),o=utils_type.A.evaluate(t.visProp.zoom);isNaN(t.coords.scrCoords[2]+t.coords.scrCoords[1])||("user"===r&&(i*=Math.sqrt(Math.abs(t.board.unitX*t.board.unitY))),e=0===(i*=t.board&&o?Math.sqrt(t.board.zoomX*t.board.zoomY):1)?0:i+1,"o"===s?this.updateEllipsePrim(t.rendNode,t.coords.scrCoords[1],t.coords.scrCoords[2],e,e):"[]"===s?this.updateRectPrim(t.rendNode,t.coords.scrCoords[1]-i,t.coords.scrCoords[2]-i,2*i,2*i):this.updatePathPrim(t.rendNode,this.updatePathStringPoint(t,i,s),t.board),this._updateVisual(t,{dash:!1,shadow:!1}),this.setShadow(t))},changePointStyle:function(t){var e=this.getElementById(t.id);utils_type.A.exists(e)&&this.remove(e),this.drawPoint(t),utils_type.A.clearVisPropOld(t),t.visPropCalc.visible||this.display(t,!1),utils_type.A.evaluate(t.visProp.draft)&&this.setDraft(t)},drawLine:function(t){t.rendNode=this.appendChildPrim(this.createPrim("line",t.id),utils_type.A.evaluate(t.visProp.layer)),this.appendNodesToElement(t,"lines"),this.updateLine(t)},updateLine:function(t){this._updateVisual(t),this.updatePathWithArrowHeads(t),this.setLineCap(t)},drawCurve:function(t){t.rendNode=this.appendChildPrim(this.createPrim("path",t.id),utils_type.A.evaluate(t.visProp.layer)),this.appendNodesToElement(t,"path"),this.updateCurve(t)},updateCurve:function(t){this._updateVisual(t),this.updatePathWithArrowHeads(t),this.setLineCap(t)},updatePathWithArrowHeads:function(t,e){var i,s,r=t.visProp,o=e?"highlight":"";i=e&&r.highlightstrokewidth?Math.max(utils_type.A.evaluate(r.highlightstrokewidth),utils_type.A.evaluate(r.strokewidth)):utils_type.A.evaluate(r.strokewidth),s=this.getArrowHeadData(t,i,o),this.makeArrows(t,s),t.elementClass===constants.A.OBJECT_CLASS_LINE?this.updateLineWithEndings(t,s):t.elementClass===constants.A.OBJECT_CLASS_CURVE&&this.updatePath(t),this.setArrowSize(t,s)},getArrowHeadData:function(t,e,i){var s,r,o,n,a=math.A.eps,l=0,h=0,u=0,c=0,d=utils_type.A.evaluate(t.visProp.firstarrow),p=utils_type.A.evaluate(t.visProp.lastarrow);return(d||p)&&(s=utils_type.A.exists(d.type)?utils_type.A.evaluate(d.type):t.elementClass===constants.A.OBJECT_CLASS_LINE?1:7,r=utils_type.A.exists(p.type)?utils_type.A.evaluate(p.type):t.elementClass===constants.A.OBJECT_CLASS_LINE?1:7,d&&(n=6,utils_type.A.exists(d.size)&&(n=utils_type.A.evaluate(d.size)),""!==i&&utils_type.A.exists(d[i+"size"])&&(n=utils_type.A.evaluate(d[i+"size"])),o=e*n,2===s?(o*=.5,a+=e*n):3===s?(o=e*n/3,a+=e):4===s||5===s||6===s?(o=e*n/1.5,a+=e*n):7===s?(o=0,n=10,a+=e):a+=e*n,l+=o,u=n),p&&(n=6,utils_type.A.exists(p.size)&&(n=utils_type.A.evaluate(p.size)),""!==i&&utils_type.A.exists(p[i+"size"])&&(n=utils_type.A.evaluate(p[i+"size"])),o=e*n,2===r?(o*=.5,a+=e*n):3===r?(o=e*n/3,a+=e):4===r||5===r||6===r?(o=e*n/1.5,a+=e*n):7===r?(o=0,n=10,a+=e):a+=e*n,h+=o,c=n)),t.visPropCalc.typeFirst=s,t.visPropCalc.typeLast=r,{evFirst:d,evLast:p,typeFirst:s,typeLast:r,offFirst:l,offLast:h,sizeFirst:u,sizeLast:c,showFirst:1,showLast:1,minLen:a,strokeWidth:e}},updateLineWithEndings:function(t,e){var i,s,r;return i=new base_coords.A(constants.A.COORDS_BY_USER,t.point1.coords.usrCoords,t.board),s=new base_coords.A(constants.A.COORDS_BY_USER,t.point2.coords.usrCoords,t.board),r=utils_type.A.evaluate(t.visProp.margin),geometry.A.calcStraight(t,i,s,r),this.handleTouchpoints(t,i,s,e),this.getPositionArrowHead(t,i,s,e),this.updateLinePrim(t.rendNode,i.scrCoords[1],i.scrCoords[2],s.scrCoords[1],s.scrCoords[2],t.board),this},updatePath:function(t){return utils_type.A.evaluate(t.visProp.handdrawing)?this.updatePathPrim(t.rendNode,this.updatePathStringBezierPrim(t),t.board):this.updatePathPrim(t.rendNode,this.updatePathStringPrim(t),t.board),this},getPositionArrowHead:function(t,e,i,s){var r,o,n,a,l;return(s.evFirst||s.evLast)&&(o=n=a=l=0,r=e.distance(constants.A.COORDS_BY_SCREEN,i),s.evFirst&&"vml"!==t.board.renderer.type&&(r>=s.minLen?(o=(i.scrCoords[1]-e.scrCoords[1])*s.offFirst/r,n=(i.scrCoords[2]-e.scrCoords[2])*s.offFirst/r):s.showFirst=0),s.evLast&&"vml"!==t.board.renderer.type&&(r>=s.minLen?(a=(i.scrCoords[1]-e.scrCoords[1])*s.offLast/r,l=(i.scrCoords[2]-e.scrCoords[2])*s.offLast/r):s.showLast=0),e.setCoordinates(constants.A.COORDS_BY_SCREEN,[e.scrCoords[1]+o,e.scrCoords[2]+n],!1,!0),i.setCoordinates(constants.A.COORDS_BY_SCREEN,[i.scrCoords[1]-a,i.scrCoords[2]-l],!1,!0)),this},handleTouchpoints:function(t,e,i,s){var r,o,n,a,l,h,u;return(s.evFirst||s.evLast)&&(n=a=l=h=u=0,r=utils_type.A.evaluate(t.point1.visProp.size)+utils_type.A.evaluate(t.point1.visProp.strokewidth),o=utils_type.A.evaluate(t.point2.visProp.size)+utils_type.A.evaluate(t.point2.visProp.strokewidth),s.evFirst&&utils_type.A.evaluate(t.visProp.touchfirstpoint)&&utils_type.A.evaluate(t.point1.visProp.visible)&&(n=e.distance(constants.A.COORDS_BY_SCREEN,i),a=(i.scrCoords[1]-e.scrCoords[1])*r/n,l=(i.scrCoords[2]-e.scrCoords[2])*r/n),s.evLast&&utils_type.A.evaluate(t.visProp.touchlastpoint)&&utils_type.A.evaluate(t.point2.visProp.visible)&&(n=e.distance(constants.A.COORDS_BY_SCREEN,i),h=(i.scrCoords[1]-e.scrCoords[1])*o/n,u=(i.scrCoords[2]-e.scrCoords[2])*o/n),e.setCoordinates(constants.A.COORDS_BY_SCREEN,[e.scrCoords[1]+a,e.scrCoords[2]+l],!1,!0),i.setCoordinates(constants.A.COORDS_BY_SCREEN,[i.scrCoords[1]-h,i.scrCoords[2]-u],!1,!0)),this},setArrowSize:function(t,e){return e.evFirst&&this._setArrowWidth(t.rendNodeTriangleStart,e.showFirst*e.strokeWidth,t.rendNode,e.sizeFirst),e.evLast&&this._setArrowWidth(t.rendNodeTriangleEnd,e.showLast*e.strokeWidth,t.rendNode,e.sizeLast),this},setLineCap:function(t){},drawTicks:function(t){t.rendNode=this.appendChildPrim(this.createPrim("path",t.id),utils_type.A.evaluate(t.visProp.layer)),this.appendNodesToElement(t,"path")},updateTicks:function(t){},drawEllipse:function(t){t.rendNode=this.appendChildPrim(this.createPrim("ellipse",t.id),utils_type.A.evaluate(t.visProp.layer)),this.appendNodesToElement(t,"ellipse"),this.updateEllipse(t)},updateEllipse:function(t){this._updateVisual(t);var e=t.Radius();Math.abs(t.center.coords.usrCoords[0])>math.A.eps&&!isNaN(e+t.center.coords.scrCoords[1]+t.center.coords.scrCoords[2])&&e*t.board.unitX<2e6&&this.updateEllipsePrim(t.rendNode,t.center.coords.scrCoords[1],t.center.coords.scrCoords[2],e*t.board.unitX,e*t.board.unitY),this.setLineCap(t)},drawPolygon:function(t){t.rendNode=this.appendChildPrim(this.createPrim("polygon",t.id),utils_type.A.evaluate(t.visProp.layer)),this.appendNodesToElement(t,"polygon"),this.updatePolygon(t)},updatePolygon:function(t){this._updateVisual(t,{stroke:!0,dash:!0}),this.updatePolygonPrim(t.rendNode,t)},displayCopyright:function(t,e){},drawInternalText:function(t){},updateInternalText:function(t){},drawText:function(t){var e,i,s,r;"html"===utils_type.A.evaluate(t.visProp.display)&&env.A.isBrowser&&"no"!==this.type?((e=this.container.ownerDocument.createElement("div")).style.position="absolute",e.className=utils_type.A.evaluate(t.visProp.cssclass),s=utils_type.A.evaluate(t.visProp.layer),utils_type.A.exists(s)||(s=0),i=""===this.container.style.zIndex?0:parseInt(this.container.style.zIndex,10),e.style.zIndex=i+s,this.container.appendChild(e),e.setAttribute("id",this.container.id+"_"+t.id)):e=this.drawInternalText(t),t.rendNode=e,t.htmlStr="",t.visProp.islabel&&utils_type.A.exists(t.visProp.anchor)?(r=utils_type.A.evaluate(t.visProp.anchor.visProp.visible),t.prepareUpdate().updateVisibility(r)):t.prepareUpdate().updateVisibility(),this.updateText(t)},updateText:function(t){var e,i,s,r,o,n,a,l,h,u,c,d=t.plaintext;if(t.visPropCalc.visible)if(this.updateTextStyle(t,!1),"html"===utils_type.A.evaluate(t.visProp.display)&&"no"!==this.type){if(isNaN(t.coords.scrCoords[1]+t.coords.scrCoords[2])||(i=t.coords.scrCoords[1],i=Math.abs(i)<1e6?i:1e6,"right"===(o=t.getAnchorX())?(e=t.board.canvasWidth-i,u="right"):"middle"===o?(e=i-.5*t.size[0],u="center"):(e=i,u="left"),t.visPropOld.left!==o+e&&("right"===o?(t.rendNode.style.right=e+"px",t.rendNode.style.left="auto"):(t.rendNode.style.left=e+"px",t.rendNode.style.right="auto"),t.visPropOld.left=o+e),i=t.coords.scrCoords[2]+this.vOffsetText,i=Math.abs(i)<1e6?i:1e6,"bottom"===(n=t.getAnchorY())?(e=t.board.canvasHeight-i,c="bottom"):"middle"===n?(e=i-.5*t.size[1],c="center"):(e=i,c="top"),t.visPropOld.top!==n+e&&("bottom"===n?(t.rendNode.style.top="auto",t.rendNode.style.bottom=e+"px"):(t.rendNode.style.bottom="auto",t.rendNode.style.top=e+"px"),t.visPropOld.top=n+e)),t.htmlStr!==d){try{t.type===utils_type.A.OBJECT_TYPE_BUTTON?t.rendNodeButton.innerHTML=d:t.type===utils_type.A.OBJECT_TYPE_CHECKBOX||t.type===utils_type.A.OBJECT_TYPE_INPUT?t.rendNodeLabel.innerHTML=d:t.rendNode.innerHTML=d}catch(e){s=t.rendNode.parentNode,t.rendNode.parentNode.removeChild(t.rendNode),t.rendNode.innerHTML=d,s.appendChild(t.rendNode)}if(t.htmlStr=d,utils_type.A.evaluate(t.visProp.usemathjax))try{MathJax.typeset?MathJax.typeset([t.rendNode]):MathJax.Hub.Queue(["Typeset",MathJax.Hub,t.rendNode])}catch(t){jxg.A.debug("MathJax (not yet) loaded")}else if(utils_type.A.evaluate(t.visProp.usekatex))try{(r=0===t.rendNode.innerHTML.indexOf("<span")&&t.rendNode.innerHTML.indexOf("<label")>0&&(t.rendNode.innerHTML.indexOf("<checkbox")>0||t.rendNode.innerHTML.indexOf("<input")>0)?t.rendNodeLabel:0===t.rendNode.innerHTML.indexOf("<button")?t.rendNodeButton:t.rendNode)&&katex.render(d,r,{macros:utils_type.A.evaluate(t.visProp.katexmacros),throwOnError:!1})}catch(t){jxg.A.debug("KaTeX not loaded (yet)")}else if(utils_type.A.evaluate(t.visProp.useasciimathml))try{AMprocessNode(t.rendNode,!1)}catch(t){jxg.A.debug("AsciiMathML not loaded (yet)")}}0!==(a=utils_type.A.evaluate(t.visProp.rotate))&&(a*=Math.PI/180,l=Math.cos(a),h=Math.sin(a),t.rendNode.style.transform="matrix("+[l,-1*h,h,l,0,0].join(",")+")",t.rendNode.style["transform-origin"]=u+" "+c),this.transformImage(t,t.transformations)}else this.updateInternalText(t)},_css2js:function(t){var e,i,s,r,o,n=[],a=utils_type.A.trim(t).replace(/;$/,"").split(";");for(i=a.length,e=0;e<i;++e)""!==utils_type.A.trim(a[e])&&(o=a[e].split(":"),s=utils_type.A.trim(o[0].replace(/-([a-z])/gi,(function(t,e){return e.toUpperCase()}))),r=utils_type.A.trim(o[1]),n.push({key:s,val:r}));return n},updateTextStyle:function(t,e){var i,s,r,o,n,a,l,h,u,c=t.visProp,d=env.A.isBrowser?c.display:"internal",p=["rendNode","rendNodeTag","rendNodeLabel"],_=p.length,f=utils_type.A.evaluate(c.fontunit),A=["cssdefaultstyle","cssstyle"],g=A.length;if(e?(r=c.highlightstrokecolor,s=c.highlightstrokeopacity,o=c.highlightcssclass):(r=c.strokecolor,s=c.strokeopacity,o=c.cssclass),"no"!==this.type&&("html"===d||"canvas"!==this.type)){for(h=0;h<g;h++)if(""!==(u=utils_type.A.evaluate(c[(e?"highlight":"")+A[h]]))&&t.visPropOld[A[h]]!==u){for(a=this._css2js(u),n=0;n<_;n++)if(utils_type.A.exists(t[p[n]]))for(l in a)a.hasOwnProperty(l)&&(t[p[n]].style[a[l].key]=a[l].val);t.visPropOld[A[h]]=u}if(i=utils_type.A.evaluate(c.fontsize),t.visPropOld.fontsize!==i){t.needsSizeUpdate=!0;try{for(n=0;n<_;n++)utils_type.A.exists(t[p[n]])&&(t[p[n]].style.fontSize=i+f)}catch(e){for(n=0;n<_;n++)utils_type.A.exists(t[p[n]])&&(t[p[n]].style.fontSize=i)}t.visPropOld.fontsize=i}}return this.setTabindex(t),this.setObjectTransition(t),"html"===d&&"no"!==this.type?(this.setObjectViewport(t,!0),t.visPropOld.cssclass!==o&&(t.rendNode.className=o,t.visPropOld.cssclass=o,t.needsSizeUpdate=!0),this.setObjectStrokeColor(t,r,s)):this.updateInternalTextStyle(t,r,s),this},updateInternalTextStyle:function(t,e,i){this.setObjectStrokeColor(t,e,i)},drawImage:function(t){},updateImage:function(t){this.updateRectPrim(t.rendNode,t.coords.scrCoords[1],t.coords.scrCoords[2]-t.size[1],t.size[0],t.size[1]),this.updateImageURL(t),this.transformImage(t,t.transformations),this._updateVisual(t,{stroke:!0,dash:!0},!0)},joinTransforms:function(t,e){var i,s=t.board.origin.scrCoords[1],r=t.board.origin.scrCoords[2],o=t.board.unitX,n=t.board.unitY,a=e.length,l=[[1,0,0],[-s/o,1/o,0],[r/n,0,-1/n]];for(i=0;i<a;i++)l=math.A.matMatMult(e[i].matrix,l);return l=math.A.matMatMult([[1,0,0],[s,o,0],[r,0,-n]],l)},transformImage:function(t,e){},updateImageURL:function(t){},updateImageStyle:function(t,e){t.rendNode.className=utils_type.A.evaluate(e?t.visProp.highlightcssclass:t.visProp.cssclass)},drawForeignObject:function(t){},updateForeignObject:function(t){},appendChildPrim:function(t,e){},appendNodesToElement:function(t,e){},createPrim:function(t,e){return null},remove:function(t){},makeArrows:function(t,e){},_setArrowWidth:function(t,e,i){},updateEllipsePrim:function(t,e,i,s,r){},updateLinePrim:function(t,e,i,s,r,o){},updatePathPrim:function(t,e,i){},updatePathStringPoint:function(t,e,i){},updatePathStringPrim:function(t){},updatePathStringBezierPrim:function(t){},updatePolygonPrim:function(t,e){},updateRectPrim:function(t,e,i,s,r){},setPropertyPrim:function(t,e,i){},setTabindex:function(t){var e;t.board.attr.keyboard.enabled&&utils_type.A.exists(t.rendNode)&&(e=utils_type.A.evaluate(t.visProp.tabindex),t.visPropCalc.visible&&!utils_type.A.evaluate(t.visProp.fixed)||(e=null),e!==t.visPropOld.tabindex&&(t.rendNode.setAttribute("tabindex",e),t.visPropOld.tabindex=e))},display:function(t,e){t&&(t.visPropOld.visible=e)},show:function(t){},hide:function(t){},setBuffering:function(t,e){},setDashStyle:function(t){},setDraft:function(t){if(utils_type.A.evaluate(t.visProp.draft)){var e=t.board.options.elements.draft.color,i=t.board.options.elements.draft.opacity;this.setObjectViewport(t),this.setObjectTransition(t),t.type===constants.A.OBJECT_TYPE_POLYGON?this.setObjectFillColor(t,e,i):(t.elementClass===constants.A.OBJECT_CLASS_POINT?this.setObjectFillColor(t,e,i):this.setObjectFillColor(t,"none",0),this.setObjectStrokeColor(t,e,i),this.setObjectStrokeWidth(t,t.board.options.elements.draft.strokeWidth))}},removeDraft:function(t){this.setObjectViewport(t),this.setObjectTransition(t),t.type===constants.A.OBJECT_TYPE_POLYGON?this.setObjectFillColor(t,t.visProp.fillcolor,t.visProp.fillopacity):(t.type===constants.A.OBJECT_CLASS_POINT&&this.setObjectFillColor(t,t.visProp.fillcolor,t.visProp.fillopacity),this.setObjectStrokeColor(t,t.visProp.strokecolor,t.visProp.strokeopacity),this.setObjectStrokeWidth(t,t.visProp.strokewidth))},setGradient:function(t){},updateGradient:function(t){},setObjectTransition:function(t,e){},setObjectViewport:function(t,e){},setObjectFillColor:function(t,e,i){},setObjectStrokeColor:function(t,e,i){},setObjectStrokeWidth:function(t,e){},setShadow:function(t){},highlight:function(t,e){var i,s,r,o=t.visProp;if(this.setObjectViewport(t),this.setObjectTransition(t),!o.draft){if(t.type===constants.A.OBJECT_TYPE_POLYGON)for(this.setObjectFillColor(t,o.highlightfillcolor,o.highlightfillopacity),s=utils_type.A.evaluate(o.highlightbystrokewidth),i=0;i<t.borders.length;i++)this.highlight(t.borders[i],!s);else t.elementClass===constants.A.OBJECT_CLASS_TEXT?this.updateTextStyle(t,!0):t.type===constants.A.OBJECT_TYPE_IMAGE?(this.updateImageStyle(t,!0),this.setObjectFillColor(t,o.highlightfillcolor,o.highlightfillopacity)):(this.setObjectStrokeColor(t,o.highlightstrokecolor,o.highlightstrokeopacity),this.setObjectFillColor(t,o.highlightfillcolor,o.highlightfillopacity));o.highlightstrokewidth&&!e&&(r=Math.max(utils_type.A.evaluate(o.highlightstrokewidth),utils_type.A.evaluate(o.strokewidth)),this.setObjectStrokeWidth(t,r),t.elementClass!==constants.A.OBJECT_CLASS_LINE&&t.elementClass!==constants.A.OBJECT_CLASS_CURVE||this.updatePathWithArrowHeads(t,!0))}return this},noHighlight:function(t){var e,i,s=t.visProp;if(this.setObjectViewport(t),this.setObjectTransition(t),!utils_type.A.evaluate(t.visProp.draft)){if(t.type===constants.A.OBJECT_TYPE_POLYGON)for(this.setObjectFillColor(t,s.fillcolor,s.fillopacity),e=0;e<t.borders.length;e++)this.noHighlight(t.borders[e]);else t.elementClass===constants.A.OBJECT_CLASS_TEXT?this.updateTextStyle(t,!1):t.type===constants.A.OBJECT_TYPE_IMAGE?(this.updateImageStyle(t,!1),this.setObjectFillColor(t,s.fillcolor,s.fillopacity)):(this.setObjectStrokeColor(t,s.strokecolor,s.strokeopacity),this.setObjectFillColor(t,s.fillcolor,s.fillopacity));i=utils_type.A.evaluate(s.strokewidth),this.setObjectStrokeWidth(t,i),t.elementClass!==constants.A.OBJECT_CLASS_LINE&&t.elementClass!==constants.A.OBJECT_CLASS_CURVE||this.updatePathWithArrowHeads(t,!1)}return this},suspendRedraw:function(){},unsuspendRedraw:function(){},drawNavigationBar:function(t,e){var i,s,r=function(t){t||(t=window.event),t.stopPropagation?t.stopPropagation():t.cancelBubble=!0},o=function(e,o,n,a){var l;n=n||"",(l=i.createElement("span")).innerHTML=e,l.style.paddingLeft="7px",l.style.paddingRight="7px",void 0!==l.classList&&(l.classList.add("JXG_navigation_button"),l.classList.add("JXG_navigation_button_"+a)),l.setAttribute("id",n+"_navigation_"+a),s.appendChild(l),env.A.addEvent(l,"click",(function(e){return utils_type.A.bind(o,t)(),!1}),t),env.A.addEvent(l,"pointerup",r,t),env.A.addEvent(l,"pointerdown",r,t),env.A.addEvent(l,"pointerleave",r,t),env.A.addEvent(l,"mouseup",r,t),env.A.addEvent(l,"mousedown",r,t),env.A.addEvent(l,"touchend",r,t),env.A.addEvent(l,"touchstart",r,t)};env.A.isBrowser&&"no"!==this.type&&(i=t.containerObj.ownerDocument,(s=i.createElement("div")).setAttribute("id",t.container+"_navigationbar"),s.style.color=e.strokecolor,s.style.backgroundColor=e.fillcolor,s.style.padding=e.padding,s.style.position=e.position,s.style.fontSize=e.fontsize,s.style.cursor=e.cursor,s.style.zIndex=e.zindex,t.containerObj.appendChild(s),s.style.right=e.right,s.style.bottom=e.bottom,void 0!==s.classList&&s.classList.add("JXG_navigation"),t.attr.showfullscreen&&o(t.attr.fullscreen.symbol,(function(){t.toFullscreen(t.attr.fullscreen.id)}),t.container,"fullscreen"),t.attr.showscreenshot&&o(t.attr.screenshot.symbol,(function(){window.setTimeout((function(){t.renderer.screenshot(t,"",!1)}),330)}),t.container,"screenshot"),t.attr.showreload&&o("↻",(function(){t.reload()}),t.container,"reload"),t.attr.showcleartraces&&o("⊗",(function(){t.clearTraces()}),t.container,"cleartraces"),t.attr.shownavigation&&(t.attr.showzoom&&(o("–",t.zoomOut,t.container,"out"),o("o",t.zoom100,t.container,"100"),o("+",t.zoomIn,t.container,"in")),o("←",t.clickLeftArrow,t.container,"left"),o("↓",t.clickUpArrow,t.container,"down"),o("↑",t.clickDownArrow,t.container,"up"),o("→",t.clickRightArrow,t.container,"right")))},getElementById:function(t){var e;return utils_type.A.exists(this.container)?(e=this.container.id+"_"+t,utils_type.A.exists(CSS)&&utils_type.A.exists(CSS.escape)&&(e=CSS.escape(e)),this.container.querySelector("#"+e)):""},removeToInsertLater:function(t){var e=t.parentNode,i=t.nextSibling;if(null!==e)return e.removeChild(t),function(){i?e.insertBefore(t,i):e.appendChild(t)}},resize:function(t,e){},createTouchpoints:function(t){},showTouchpoint:function(t){},hideTouchpoint:function(t){},updateTouchpoint:function(t,e){},dumpToDataURI:function(t){},dumpToCanvas:function(t,e,i,s){},screenshot:function(t){},setLayer:function(t,e){}});var renderer_abstract=jxg.A.AbstractRenderer;jxg.A.FileReader={handleRemoteFile:function(t,e,i,s,r,o){var n=!1;try{n=new XMLHttpRequest,"raw"===i.toLowerCase()?n.overrideMimeType("text/plain; charset="+r):n.overrideMimeType("text/xml; charset="+r)}catch(t){try{n=new ActiveXObject("Msxml2.XMLHTTP")}catch(t){try{n=new ActiveXObject("Microsoft.XMLHTTP")}catch(t){n=!1}}}if(n){n.open("GET",t,s),"raw"===i.toLowerCase()?this.cbp=function(){var t=n;4===t.readyState&&e(t.responseText)}:this.cbp=function(){var t=n,s="";4===t.readyState&&(s=!utils_type.A.exists(t.responseStream)||"PK"!==t.responseText.slice(0,2)&&31!==utils_encoding.asciiCharCodeAt(t.responseText.slice(0,1),0)?t.responseText:base64.decode(jxgBinFileReader(t)),this.parseString(s,e,i,o))},this.cb=utils_type.A.bind(this.cbp,this),n.onreadystatechange=this.cb;try{n.send(null)}catch(e){throw new Error("JSXGraph: A problem occurred while trying to read remote file '"+t+"'.")}}else jxg.A.debug("AJAX not activated!")},handleLocalFile:function(t,e,i,s,r,o){utils_type.A.exists(s)||(s=!0),"raw"===i.toLowerCase()?this.cbp=function(t){e(t.target.result)}:this.cbp=function(t){var s=t.target.result;this.parseString(s,e,i,o)},this.cb=utils_type.A.bind(this.cbp,this);var n=new FileReader;n.onload=this.cb,"raw"===i.toLowerCase()?n.readAsText(t):n.readAsText(t,r)},parseFileContent:function(t,e,i,s,r,o){utils_type.A.isString(t)||void 0===FileReader?this.handleRemoteFile(t,e,i,s,r,o):this.handleLocalFile(t,e,i,s,r,o)},parseString:function(t,e,i,s){var r;if(i=i.toLowerCase(),r=jxg.A.readers[i],utils_type.A.exists(r))new r(e,t).read();else if("jessiecode"!==i)throw new Error("JSXGraph: There is no reader available for '"+i+"'.");utils_type.A.isFunction(s)&&s(e)}},!env.A.isMetroApp()&&env.A.isBrowser&&"object"==typeof navigator&&/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent)&&document&&document.write&&document.write('<script type="text/vbscript">\nFunction Base64Encode(inData)\n Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"\n Dim cOut, sOut, I\n For I = 1 To LenB(inData) Step 3\n Dim nGroup, pOut, sGroup\n nGroup = &H10000 * AscB(MidB(inData, I, 1)) + _\n &H100 * MyASC(MidB(inData, I + 1, 1)) + MyASC(MidB(inData, I + 2, 1))\n nGroup = Oct(nGroup)\n nGroup = String(8 - Len(nGroup), "0") & nGroup\n pOut = Mid(Base64, CLng("&o" & Mid(nGroup, 1, 2)) + 1, 1) + _\n Mid(Base64, CLng("&o" & Mid(nGroup, 3, 2)) + 1, 1) + _\n Mid(Base64, CLng("&o" & Mid(nGroup, 5, 2)) + 1, 1) + _\n Mid(Base64, CLng("&o" & Mid(nGroup, 7, 2)) + 1, 1)\n sOut = sOut + pOut\n Next\n Select Case LenB(inData) Mod 3\n Case 1: \'8 bit final\n sOut = Left(sOut, Len(sOut) - 2) + "=="\n Case 2: \'16 bit final\n sOut = Left(sOut, Len(sOut) - 1) + "="\n End Select\n Base64Encode = sOut\nEnd Function\n\nFunction MyASC(OneChar)\n If OneChar = "" Then MyASC = 0 Else MyASC = AscB(OneChar)\nEnd Function\n\nFunction jxgBinFileReader(xhr)\n Dim byteString\n Dim b64String\n Dim i\n byteString = xhr.responseBody\n ReDim byteArray(LenB(byteString))\n For i = 1 To LenB(byteString)\n byteArray(i-1) = AscB(MidB(byteString, i, 1))\n Next\n b64String = Base64Encode(byteString)\n jxgBinFileReader = b64String\nEnd Function\n<\/script>\n');var reader_file=jxg.A.FileReader,geonext=__webpack_require__(86),jessiecode=__webpack_require__(428),utils_color=__webpack_require__(873);jxg.A.Composition=function(t){var e,i=this,s=["setAttribute","setParents","prepareUpdate","updateRenderer","update","fullUpdate","highlight","noHighlight"],r=function(t){return function(){var e;for(e in i.elements)i.elements.hasOwnProperty(e)&&utils_type.A.exists(i.elements[e][t])&&i.elements[e][t].apply(i.elements[e],arguments);return i}};for(e=0;e<s.length;e++)this[s[e]]=r(s[e]);for(e in this.elements={},this.objects=this.elements,this.elementsByName={},this.objectsList=[],this.groups={},this.methodMap={setAttribute:"setAttribute",setProperty:"setAttribute",setParents:"setParents",add:"add",remove:"remove",select:"select"},t)t.hasOwnProperty(e)&&this.add(e,t[e]);this.dump=!0,this.subs={}},jxg.A.extend(jxg.A.Composition.prototype,{add:function(t,e){return!(utils_type.A.exists(this[t])||!utils_type.A.exists(e))&&(utils_type.A.exists(e.id)?this.elements[e.id]=e:this.elements[t]=e,utils_type.A.exists(e.name)&&(this.elementsByName[e.name]=e),e.on("attribute:name",this.nameListener,this),this.objectsList.push(e),this[t]=e,this.methodMap[t]=e,!0)},remove:function(t){var e,i=!1;for(e in this.elements)if(this.elements.hasOwnProperty(e)&&this.elements[e].id===this[t].id){i=!0;break}return i&&(delete this.elements[this[t].id],delete this[t]),i},nameListener:function(t,e,i){delete this.elementsByName[t],this.elementsByName[e]=i},select:function(t){return utils_type.A.exists(jxg.A.Board)?jxg.A.Board.prototype.select.call(this,t):new jxg.A.Composition},getParents:function(){return this.parents},getType:function(){return this.elType},getAttributes:function(){var t,e={};for(t in this.subs)this.subs.hasOwnProperty(t)&&(e[t]=this.subs[t].visProp);return this.attr}});var composition=jxg.A.Composition;jxg.A.Board=function(t,e,i,s,r,o,n,a,l,h,u){if(this.BOARD_MODE_NONE=0,this.BOARD_MODE_DRAG=1,this.BOARD_MODE_MOVE_ORIGIN=2,this.BOARD_MODE_ZOOM=17,this.BOARD_QUALITY_LOW=1,this.BOARD_QUALITY_HIGH=2,utils_type.A.exists(u.document)&&!1!==u.document?this.document=u.document:env.A.isBrowser&&(this.document=document),this.container="",this.containerObj=null,utils_type.A.isString(t)?(this.container=t,this.containerObj=env.A.isBrowser?this.document.getElementById(this.container):null):env.A.isBrowser&&(this.containerObj=t,this.container=this.containerObj.getAttribute("id"),null===this.container&&(this.container="null"+parseInt(1e8*Math.random()).toString())),env.A.isBrowser&&"no"!==e.type&&null===this.containerObj)throw new Error('\nJSXGraph: HTML container element "'+t+'" not found.');this.renderer=e,this.grids=[],this.options=utils_type.A.deepCopy(src_options.A),this.attr=u,"default"!==this.attr.theme&&utils_type.A.exists(jxg.A.themes[this.attr.theme])&&utils_type.A.mergeAttr(this.options,jxg.A.themes[this.attr.theme],!0),this.dimension=2,this.jc=new jessiecode.A,this.jc.use(this),this.origin={},this.origin.usrCoords=[1,0,0],this.origin.scrCoords=[1,s[0],s[1]],this.zoomX=r,this.zoomY=o,this.unitX=n*this.zoomX,this.unitY=a*this.zoomY,this.keepaspectratio=!1,this.canvasWidth=l,this.canvasHeight=h,utils_type.A.exists(i)&&""!==i&&env.A.isBrowser&&!utils_type.A.exists(this.document.getElementById(i))?this.id=i:this.id=this.generateId(),utils_event.A.eventify(this),this.hooks=[],this.dependentBoards=[],this.inUpdate=!1,this.objects={},this.objectsList=[],this.groups={},this.animationObjects={},this.highlightedObjects={},this.numObjects=0,this.elementsByName={},this.mode=this.BOARD_MODE_NONE,this.updateQuality=this.BOARD_QUALITY_HIGH,this.isSuspendedRedraw=!1,this.calculateSnapSizes(),this.drag_dx=0,this.drag_dy=0,this.drag_position=[0,0],this.mouse={},this.touches=[],this.xmlString="",this.cPos=[],this.touchMoveLast=0,this.touchMoveLastId=1/0,this.positionAccessLast=0,this.downObjects=[],this.clickObjects={},this.focusObjects=[],this.attr.showcopyright&&this.renderer.displayCopyright(constants.A.licenseText,parseInt(this.options.text.fontSize,10)),this.needsFullUpdate=!1,this.reducedUpdate=!1,this.currentCBDef="none",this.geonextCompatibilityMode=!1,this.options.text.useASCIIMathML&&translateASCIIMath?init():this.options.text.useASCIIMathML=!1,this.hasMouseHandlers=!1,this.hasTouchHandlers=!1,this.hasPointerHandlers=!1,this.hasWheelHandlers=!1,this.hasMouseUp=!1,this.hasTouchEnd=!1,this.hasPointerUp=!1,this.resizeHandlers=[],this._drag_offset=[0,0],this._inputDevice="mouse",this._board_touches=[],this.selectingMode=!1,this.isSelecting=!1,this._isScrolling=!1,this._isResizing=!1,this.selectingBox=[[0,0],[0,0]],this.userLog=[],this.mathLib=Math,this.mathLibJXG=jxg.A.Math,!0===this.attr.registerevents?this.attr.registerevents={fullscreen:!0,keyboard:!0,pointer:!0,resize:!0,wheel:!0}:"object"==typeof this.attr.registerevents&&(utils_type.A.exists(this.attr.registerevents.fullscreen)||(this.attr.registerevents.fullscreen=!0),utils_type.A.exists(this.attr.registerevents.keyboard)||(this.attr.registerevents.keyboard=!0),utils_type.A.exists(this.attr.registerevents.pointer)||(this.attr.registerevents.pointer=!0),utils_type.A.exists(this.attr.registerevents.resize)||(this.attr.registerevents.resize=!0),utils_type.A.exists(this.attr.registerevents.wheel)||(this.attr.registerevents.wheel=!0)),!1!==this.attr.registerevents&&(this.attr.registerevents.fullscreen&&this.addFullscreenEventHandlers(),this.attr.registerevents.keyboard&&this.addKeyboardEventHandlers(),this.attr.registerevents.pointer&&this.addEventHandlers(),this.attr.registerevents.resize&&this.addResizeEventHandlers(),this.attr.registerevents.wheel&&this.addWheelEventHandlers()),this.methodMap={update:"update",fullUpdate:"fullUpdate",on:"on",off:"off",trigger:"trigger",setAttribute:"setAttribute",setBoundingBox:"setBoundingBox",setView:"setBoundingBox",getBoundingBox:"getBoundingBox",BoundingBox:"getBoundingBox",getView:"getBoundingBox",View:"getBoundingBox",migratePoint:"migratePoint",colorblind:"emulateColorblindness",suspendUpdate:"suspendUpdate",unsuspendUpdate:"unsuspendUpdate",clearTraces:"clearTraces",left:"clickLeftArrow",right:"clickRightArrow",up:"clickUpArrow",down:"clickDownArrow",zoomIn:"zoomIn",zoomOut:"zoomOut",zoom100:"zoom100",zoomElements:"zoomElements",remove:"removeObject",removeObject:"removeObject"}},jxg.A.extend(jxg.A.Board.prototype,{generateName:function(t){var e,i,s=this.attr.maxnamelength,r="",o="",n=[],a="";if(t.type===constants.A.OBJECT_TYPE_TICKS)return"";for(e=utils_type.A.isPoint(t)||utils_type.A.isPoint3D(t)?["","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"]:t.type===constants.A.OBJECT_TYPE_ANGLE?["","α","β","γ","δ","ε","ζ","η","θ","ι","κ","λ","μ","ν","ξ","ο","π","ρ","σ","τ","υ","φ","χ","ψ","ω"]:["","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"],utils_type.A.isPoint(t)||utils_type.A.isPoint3D(t)||t.elementClass===constants.A.OBJECT_CLASS_LINE||t.type===constants.A.OBJECT_TYPE_ANGLE||(r=t.type===constants.A.OBJECT_TYPE_POLYGON?"P_{":t.elementClass===constants.A.OBJECT_CLASS_CIRCLE?"k_{":t.elementClass===constants.A.OBJECT_CLASS_TEXT?"t_{":"s_{",o="}"),i=0;i<s;i++)n[i]=0;for(;n[s-1]<e.length;){for(n[0]=1;n[0]<e.length;n[0]++){for(a=r,i=s;i>0;i--)a+=e[n[i-1]];if(!utils_type.A.exists(this.elementsByName[a+o]))return a+o}for(n[0]=e.length,i=1;i<s;i++)n[i-1]===e.length&&(n[i-1]=1,n[i]+=1)}return""},generateId:function(){for(var t=1;utils_type.A.exists(jxg.A.boards["jxgBoard"+t]);)t=Math.round(65535*Math.random());return"jxgBoard"+t},setId:function(t,e){var i,s=this.numObjects,r=t.id;if(this.numObjects+=1,""===r||!utils_type.A.exists(r))for(r=this.id+e+s;utils_type.A.exists(this.objects[r]);)i=Math.round(65535*Math.random()),r=this.id+e+s+"-"+i;return t.id=r,this.objects[r]=t,t._pos=this.objectsList.length,this.objectsList[this.objectsList.length]=t,r},finalizeAdding:function(t){!1===utils_type.A.evaluate(t.visProp.visible)&&this.renderer.display(t,!1)},finalizeLabel:function(t){t.hasLabel&&!utils_type.A.evaluate(t.label.visProp.islabel)&&!1===utils_type.A.evaluate(t.label.visProp.visible)&&this.renderer.display(t.label,!1)},checkFrameRate:function(t){var e=!1,i=(new Date).getTime();return utils_type.A.exists(t.pointerId)&&this.touchMoveLastId!==t.pointerId&&(e=!0,this.touchMoveLastId=t.pointerId),!e&&(i-this.touchMoveLast)*this.attr.maxframerate>=1e3&&(e=!0),e&&(this.touchMoveLast=i),e},getCoordsTopLeftCorner:function(){var t,e,i,s,r,o=this.document.ownerDocument||this.document,n=o.documentElement||this.document.body.parentNode,a=o.body,l=this.containerObj;if(this.cPos.length>0&&(this.mode===this.BOARD_MODE_DRAG||this.mode===this.BOARD_MODE_MOVE_ORIGIN||(new Date).getTime()-this.positionAccessLast<1e3))return this.cPos;if(this.positionAccessLast=(new Date).getTime(),l.getBoundingClientRect){for(i=l.getBoundingClientRect(),s=1,r=l;r&&utils_type.A.exists(r.parentNode);)utils_type.A.exists(r.style)&&utils_type.A.exists(r.style.zoom)&&""!==r.style.zoom&&(s*=parseFloat(r.style.zoom)),r=r.parentNode;return(t=[i.left*s,i.top*s])[0]+=env.A.getProp(l,"border-left-width"),t[1]+=env.A.getProp(l,"border-top-width"),"vml"!==this.renderer.type&&(t[0]+=env.A.getProp(l,"padding-left"),t[1]+=env.A.getProp(l,"padding-top")),this.cPos=t.slice(),this.cPos}return t=env.A.getOffset(l),e=this.document.documentElement.ownerDocument,!this.containerObj.currentStyle&&e.defaultView&&(t[0]+=env.A.getProp(n,"margin-left"),t[1]+=env.A.getProp(n,"margin-top"),t[0]+=env.A.getProp(n,"border-left-width"),t[1]+=env.A.getProp(n,"border-top-width"),t[0]+=env.A.getProp(n,"padding-left"),t[1]+=env.A.getProp(n,"padding-top")),a&&(t[0]+=env.A.getProp(a,"left"),t[1]+=env.A.getProp(a,"top")),"object"==typeof google&&google.translate&&(t[0]+=10,t[1]+=25),t[0]+=env.A.getProp(l,"border-left-width"),t[1]+=env.A.getProp(l,"border-top-width"),"vml"!==this.renderer.type&&(t[0]+=env.A.getProp(l,"padding-left"),t[1]+=env.A.getProp(l,"padding-top")),t[0]+=this.attr.offsetx,t[1]+=this.attr.offsety,this.cPos=t.slice(),this.cPos},getPointLoc:function(t,e){var i,s,r,o;return i=this.getBoundingBox(),2===(s=t).length&&s.unshift(void 0),r=[0,0],o=e||0,utils_type.A.isNumber(o)&&(o=[o,o,o,o]),s[1]>i[2]-o[1]&&(r[0]=1),s[1]<i[0]+o[3]&&(r[0]=-1),s[2]>i[1]-o[0]&&(r[1]=1),s[2]<i[3]+o[2]&&(r[1]=-1),r},getLocationOrigin:function(t){return this.getPointLoc([0,0],t)},getMousePosition:function(t,e){var i,s,r=this.getCoordsTopLeftCorner();return i=env.A.getPosition(t,e,this.document),this.updateCSSTransforms(),s=[1,i[0]-r[0],i[1]-r[1]],(s=math.A.matVecMult(this.cssTransMat,s))[1]/=s[0],s[2]/=s[0],[s[1],s[2]]},initMoveOrigin:function(t,e){this.drag_dx=t-this.origin.scrCoords[1],this.drag_dy=e-this.origin.scrCoords[2],this.mode=this.BOARD_MODE_MOVE_ORIGIN,this.updateQuality=this.BOARD_QUALITY_LOW},initMoveObject:function(t,e,i,s){var r,o,n,a=[],l=[],h=this.objectsList.length,u={visProp:{layer:-1e4}};for(this._shiftKey=i.shiftKey,this._ctrlKey=i.ctrlKey,o=0;o<h;o++)n=(r=this.objectsList[o]).hasPoint&&r.hasPoint(t,e),r.visPropCalc.visible&&n&&(r.triggerEventHandlers([s+"down","down"],[i]),this.downObjects.push(r)),n&&r.isDraggable&&r.visPropCalc.visible&&(this.geonextCompatibilityMode&&(utils_type.A.isPoint(r)||r.elementClass===constants.A.OBJECT_CLASS_TEXT)||!this.geonextCompatibilityMode)&&!utils_type.A.evaluate(r.visProp.fixed)&&(r.visProp.layer>u.visProp.layer||r.visProp.layer===u.visProp.layer&&r.lastDragTime.getTime()>=u.lastDragTime.getTime())&&(this.attr.ignorelabels&&utils_type.A.exists(u.label)&&r===u.label||(u=r,a.push(u),utils_type.A.exists(u.coords)?l.push(statistics.A.subtract(u.coords.scrCoords.slice(1),[t,e])):l.push([0,0])));return this.attr.drag.enabled&&a.length>0&&(this.mode=this.BOARD_MODE_DRAG),this.attr.takefirst?(a.length=1,this._drag_offset=l[0]):(a=a.slice(-1),this._drag_offset=l[l.length-1]),this._drag_offset||(this._drag_offset=[0,0]),"svg"===this.renderer.type&&utils_type.A.exists(a[0])&&utils_type.A.evaluate(a[0].visProp.dragtotopoflayer)&&1===a.length&&utils_type.A.exists(a[0].rendNode)&&a[0].rendNode.parentNode.appendChild(a[0].rendNode),a.length>=1&&(a[0].highlight(!0),this.triggerEventHandlers(["mousehit","hit"],[i,a[0]])),a},moveObject:function(t,e,i,s,r){var o,n,a,l=new base_coords.A(constants.A.COORDS_BY_SCREEN,this.getScrCoordsOfMouse(t,e),this);i&&i.obj&&((o=i.obj).coords&&(n=o.coords.scrCoords.slice()),this.addLogEntry("drag",o,l.usrCoords.slice(1)),this.drag_position=[l.scrCoords[1],l.scrCoords[2]],this.drag_position=statistics.A.add(this.drag_position,this._drag_offset),this._shiftKey=s.shiftKey,this._ctrlKey=s.ctrlKey,utils_type.A.exists(o.coords)?o.setPositionDirectly(constants.A.COORDS_BY_SCREEN,this.drag_position):(this.displayInfobox(!1),isNaN(i.targets[0].Xprev+i.targets[0].Yprev)||o.setPositionDirectly(constants.A.COORDS_BY_SCREEN,[l.scrCoords[1],l.scrCoords[2]],[i.targets[0].Xprev,i.targets[0].Yprev]),i.targets[0].Xprev=l.scrCoords[1],i.targets[0].Yprev=l.scrCoords[2]),utils_type.A.exists(o.coords)&&(o.prepareUpdate().update(!1).updateRenderer(),this.updateInfobox(o),o.prepareUpdate().update(!0).updateRenderer()),o.coords&&(a=o.coords.scrCoords),o.coords&&n[1]===a[1]&&n[2]===a[2]||(o.triggerEventHandlers([r+"drag","drag"],[s]),this.update()),o.highlight(!0),this.triggerEventHandlers(["mousehit","hit"],[s,o]),o.lastDragTime=new Date)},twoFingerMove:function(t,e,i){var s;utils_type.A.exists(t)&&utils_type.A.exists(t.obj)&&((s=t.obj).elementClass===constants.A.OBJECT_CLASS_LINE||s.type===constants.A.OBJECT_TYPE_POLYGON?this.twoFingerTouchObject(t.targets,s,e):s.elementClass===constants.A.OBJECT_CLASS_CIRCLE&&this.twoFingerTouchCircle(t.targets,s,e),i&&s.triggerEventHandlers(["touchdrag","drag"],[i]))},getTwoFingerTransform(t,e,i,s){var r,o,n,a,l,h,u,c,d,p,_,f,A,g,m,y,b;return o=(r=new base_coords.A(constants.A.COORDS_BY_SCREEN,[t.Xprev,t.Yprev],this).usrCoords)[1],n=r[2],a=(r=new base_coords.A(constants.A.COORDS_BY_SCREEN,[e.Xprev,e.Yprev],this).usrCoords)[1],l=r[2],c=(r=new base_coords.A(constants.A.COORDS_BY_SCREEN,[t.X,t.Y],this).usrCoords)[1],d=r[2],g=((f=(p=(r=new base_coords.A(constants.A.COORDS_BY_SCREEN,[e.X,e.Y],this).usrCoords)[1])-c)*(h=a-o)+(A=(_=r[2])-d)*(u=l-n))/(y=h*h+u*u),m=(A*h-f*u)/y,i||(g/=b=math.A.hypot(g,m),m/=b),s||(m=0),[1,0,0,.5*(c+p-g*(o+a)+m*(n+l)),g,-m,.5*(d+_-m*(o+a)-g*(n+l)),m,g]},twoFingerTouchObject:function(t,e,i){var s,r,o,n,a,l,h=!1;if(utils_type.A.exists(t[0])&&utils_type.A.exists(t[1])&&!isNaN(t[0].Xprev+t[0].Yprev+t[1].Xprev+t[1].Yprev)){if(r=this.getTwoFingerTransform(t[0],t[1],utils_type.A.evaluate(e.visProp.scalable),utils_type.A.evaluate(e.visProp.rotatable)),(s=this.create("transform",r,{type:"generic"})).update(),e.elementClass===constants.A.OBJECT_CLASS_LINE)o=[],e.point1.draggable()&&o.push(e.point1),e.point2.draggable()&&o.push(e.point2),s.applyOnce(o);else if(e.type===constants.A.OBJECT_TYPE_POLYGON){for(a=e.vertices.length-1,l=e.visProp,h=utils_type.A.evaluate(l.snaptogrid)||utils_type.A.evaluate(l.snaptopoints),n=0;n<a&&!h;++n)l=e.vertices[n].visProp,h=(h=h||utils_type.A.evaluate(l.snaptogrid)||utils_type.A.evaluate(l.snaptopoints))||!e.vertices[n].draggable();if(!h){for(o=[],n=0;n<a;++n)e.vertices[n].draggable()&&o.push(e.vertices[n]);s.applyOnce(o)}}this.update(),e.highlight(!0)}},twoFingerTouchCircle:function(t,e,i){var s,r,o,n,a,l,h,u,c,d,p;"pointCircle"!==e.method&&"pointLine"!==e.method&&utils_type.A.exists(t[0])&&utils_type.A.exists(t[1])&&!isNaN(t[0].Xprev+t[0].Yprev+t[1].Xprev+t[1].Yprev)&&(i===t[0].num?(s=t[1],r=t[0]):(s=t[0],r=t[1]),a=new base_coords.A(constants.A.COORDS_BY_SCREEN,[s.Xprev,s.Yprev],this).usrCoords,n=new base_coords.A(constants.A.COORDS_BY_SCREEN,[r.Xprev,r.Yprev],this).usrCoords,o=new base_coords.A(constants.A.COORDS_BY_SCREEN,[r.X,r.Y],this).usrCoords,h=geometry.A.rad(n.slice(1),a.slice(1),o.slice(1)),u=this.create("transform",[-a[1],-a[2]],{type:"translate"}),c=this.create("transform",[h],{type:"rotate"}),u.melt(c),utils_type.A.evaluate(e.visProp.scalable)&&(l=geometry.A.distance(a,o)/geometry.A.distance(a,n),d=this.create("transform",[l,l],{type:"scale"}),u.melt(d)),p=this.create("transform",[a[1],a[2]],{type:"translate"}),u.melt(p),e.center.draggable()&&u.applyOnce([e.center]),"twoPoints"===e.method?e.point2.draggable()&&u.applyOnce([e.point2]):"pointRadius"===e.method&&utils_type.A.isNumber(e.updateRadius.origin)&&e.setRadius(e.radius*l),this.update(e.center),e.highlight(!0))},highlightElements:function(t,e,i,s){var r,o,n,a={},l=this.objectsList.length;for(r=0;r<l;r++)n=(o=this.objectsList[r]).id,utils_type.A.exists(o.hasPoint)&&o.visPropCalc.visible&&o.hasPoint(t,e)&&(this.updateInfobox(o),utils_type.A.exists(this.highlightedObjects[n])||(a[n]=o,o.highlight(),this.triggerEventHandlers(["mousehit","hit"],[i,o,s])),o.mouseover?o.triggerEventHandlers(["mousemove","move"],[i]):(o.triggerEventHandlers(["mouseover","over"],[i]),o.mouseover=!0));for(r=0;r<l;r++)n=(o=this.objectsList[r]).id,o.mouseover&&(a[n]||(o.triggerEventHandlers(["mouseout","out"],[i]),o.mouseover=!1))},saveStartPos:function(t,e){var i,s,r=[];if(t.type===constants.A.OBJECT_TYPE_TICKS)r.push([1,NaN,NaN]);else if(t.elementClass===constants.A.OBJECT_CLASS_LINE)r.push(t.point1.coords.usrCoords),r.push(t.point2.coords.usrCoords);else if(t.elementClass===constants.A.OBJECT_CLASS_CIRCLE)r.push(t.center.coords.usrCoords),"twoPoints"===t.method&&r.push(t.point2.coords.usrCoords);else if(t.type===constants.A.OBJECT_TYPE_POLYGON)for(s=t.vertices.length-1,i=0;i<s;i++)r.push(t.vertices[i].coords.usrCoords);else if(t.type===constants.A.OBJECT_TYPE_SECTOR)r.push(t.point1.coords.usrCoords),r.push(t.point2.coords.usrCoords),r.push(t.point3.coords.usrCoords);else if(utils_type.A.isPoint(t)||t.type===constants.A.OBJECT_TYPE_GLIDER)r.push(t.coords.usrCoords);else if(t.elementClass===constants.A.OBJECT_CLASS_CURVE)t.points.length>0&&r.push(t.points[0].usrCoords);else try{r.push(t.coords.usrCoords)}catch(t){jxg.A.debug("JSXGraph+ saveStartPos: obj.coords.usrCoords not available: "+t)}for(s=r.length,i=0;i<s;i++)e.Zstart.push(r[i][0]),e.Xstart.push(r[i][1]),e.Ystart.push(r[i][2])},mouseOriginMoveStart:function(t){var e,i;return(e=this._isRequiredKeyPressed(t,"pan"))&&(i=this.getMousePosition(t),this.initMoveOrigin(i[0],i[1])),e},mouseOriginMove:function(t){var e,i=this.mode===this.BOARD_MODE_MOVE_ORIGIN;return i&&(e=this.getMousePosition(t),this.moveOrigin(e[0],e[1],!0)),i},touchStartMoveOriginOneFinger:function(t){var e,i,s=t.touches;return(e=this.attr.pan.enabled&&!this.attr.pan.needtwofingers&&1===s.length)&&(i=this.getMousePosition(t,0),this.initMoveOrigin(i[0],i[1])),e},touchOriginMove:function(t){var e,i=this.mode===this.BOARD_MODE_MOVE_ORIGIN;return i&&(e=this.getMousePosition(t,0),this.moveOrigin(e[0],e[1],!0)),i},originMoveEnd:function(){this.updateQuality=this.BOARD_QUALITY_HIGH,this.mode=this.BOARD_MODE_NONE},suppressDefault:function(t){return utils_type.A.exists(t)&&t.preventDefault(),!1},addEventHandlers:function(){env.A.supportsPointerEvents()?this.addPointerEventHandlers():(this.addMouseEventHandlers(),this.addTouchEventHandlers()),null!==this.containerObj&&env.A.addEvent(this.containerObj,"contextmenu",this.suppressDefault,this)},removeEventHandlers:function(){(this.hasPointerHandlers||this.hasMouseHandlers||this.hasTouchHandlers)&&null!==this.containerObj&&env.A.removeEvent(this.containerObj,"contextmenu",this.suppressDefault,this),this.removeMouseEventHandlers(),this.removeTouchEventHandlers(),this.removePointerEventHandlers(),this.removeFullscreenEventHandlers(),this.removeKeyboardEventHandlers(),this.removeResizeEventHandlers()},addResizeEventHandlers:function(){if(this.resizeHandlers=[],env.A.isBrowser){try{this.startResizeObserver(),this.resizeHandlers.push("resizeobserver")}catch(t){env.A.addEvent(window,"resize",this.resizeListener,this),this.startIntersectionObserver(),this.resizeHandlers.push("resize")}env.A.addEvent(window,"scroll",this.scrollListener,this),this.resizeHandlers.push("scroll");try{window.matchMedia("print").addEventListener("change",this.printListenerMatch.bind(this)),window.matchMedia("screen").addEventListener("change",this.printListenerMatch.bind(this)),this.resizeHandlers.push("print")}catch(t){jxg.A.debug("Error adding printListener",t)}}},removeResizeEventHandlers:function(){var t;if(this.resizeHandlers.length>0&&env.A.isBrowser){for(t=0;t<this.resizeHandlers.length;t++)switch(this.resizeHandlers[t]){case"resizeobserver":utils_type.A.exists(this.resizeObserver)&&this.stopResizeObserver();break;case"resize":env.A.removeEvent(window,"resize",this.resizeListener,this),utils_type.A.exists(this.intersectionObserver)&&this.stopIntersectionObserver();break;case"scroll":env.A.removeEvent(window,"scroll",this.scrollListener,this);break;case"print":window.matchMedia("print").removeEventListener("change",this.printListenerMatch.bind(this),!1),window.matchMedia("screen").removeEventListener("change",this.printListenerMatch.bind(this),!1)}this.resizeHandlers=[]}},addPointerEventHandlers:function(){if(!this.hasPointerHandlers&&env.A.isBrowser){var t=this.attr.movetarget||this.containerObj;window.navigator.msPointerEnabled?(env.A.addEvent(this.containerObj,"MSPointerDown",this.pointerDownListener,this),env.A.addEvent(t,"MSPointerMove",this.pointerMoveListener,this)):(env.A.addEvent(this.containerObj,"pointerdown",this.pointerDownListener,this),env.A.addEvent(t,"pointermove",this.pointerMoveListener,this),env.A.addEvent(t,"pointerleave",this.pointerLeaveListener,this),env.A.addEvent(t,"click",this.pointerClickListener,this),env.A.addEvent(t,"dblclick",this.pointerDblClickListener,this)),null!==this.containerObj&&(this.containerObj.style.touchAction="none"),this.hasPointerHandlers=!0}},addMouseEventHandlers:function(){if(!this.hasMouseHandlers&&env.A.isBrowser){var t=this.attr.movetarget||this.containerObj;env.A.addEvent(this.containerObj,"mousedown",this.mouseDownListener,this),env.A.addEvent(t,"mousemove",this.mouseMoveListener,this),env.A.addEvent(t,"click",this.mouseClickListener,this),env.A.addEvent(t,"dblclick",this.mouseDblClickListener,this),this.hasMouseHandlers=!0}},addTouchEventHandlers:function(t){if(!this.hasTouchHandlers&&env.A.isBrowser){var e=this.attr.movetarget||this.containerObj;env.A.addEvent(this.containerObj,"touchstart",this.touchStartListener,this),env.A.addEvent(e,"touchmove",this.touchMoveListener,this),this.hasTouchHandlers=!0}},addWheelEventHandlers:function(){!this.hasWheelHandlers&&env.A.isBrowser&&(env.A.addEvent(this.containerObj,"mousewheel",this.mouseWheelListener,this),env.A.addEvent(this.containerObj,"DOMMouseScroll",this.mouseWheelListener,this),this.hasWheelHandlers=!0)},addFullscreenEventHandlers:function(){var t,e=["fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange"],i=e.length;if(!this.hasFullscreenEventHandlers&&env.A.isBrowser){for(t=0;t<i;t++)env.A.addEvent(this.document,e[t],this.fullscreenListener,this);this.hasFullscreenEventHandlers=!0}},addKeyboardEventHandlers:function(){this.attr.keyboard.enabled&&!this.hasKeyboardHandlers&&env.A.isBrowser&&(env.A.addEvent(this.containerObj,"keydown",this.keyDownListener,this),env.A.addEvent(this.containerObj,"focusin",this.keyFocusInListener,this),env.A.addEvent(this.containerObj,"focusout",this.keyFocusOutListener,this),this.hasKeyboardHandlers=!0)},removeKeyboardEventHandlers:function(){this.hasKeyboardHandlers&&env.A.isBrowser&&(env.A.removeEvent(this.containerObj,"keydown",this.keyDownListener,this),env.A.removeEvent(this.containerObj,"focusin",this.keyFocusInListener,this),env.A.removeEvent(this.containerObj,"focusout",this.keyFocusOutListener,this),this.hasKeyboardHandlers=!1)},removeFullscreenEventHandlers:function(){var t,e=["fullscreenchange","mozfullscreenchange","webkitfullscreenchange","msfullscreenchange"],i=e.length;if(this.hasFullscreenEventHandlers&&env.A.isBrowser){for(t=0;t<i;t++)env.A.removeEvent(this.document,e[t],this.fullscreenListener,this);this.hasFullscreenEventHandlers=!1}},removePointerEventHandlers:function(){if(this.hasPointerHandlers&&env.A.isBrowser){var t=this.attr.movetarget||this.containerObj;window.navigator.msPointerEnabled?(env.A.removeEvent(this.containerObj,"MSPointerDown",this.pointerDownListener,this),env.A.removeEvent(t,"MSPointerMove",this.pointerMoveListener,this)):(env.A.removeEvent(this.containerObj,"pointerdown",this.pointerDownListener,this),env.A.removeEvent(t,"pointermove",this.pointerMoveListener,this),env.A.removeEvent(t,"pointerleave",this.pointerLeaveListener,this),env.A.removeEvent(t,"click",this.pointerClickListener,this),env.A.removeEvent(t,"dblclick",this.pointerDblClickListener,this)),this.hasWheelHandlers&&(env.A.removeEvent(this.containerObj,"mousewheel",this.mouseWheelListener,this),env.A.removeEvent(this.containerObj,"DOMMouseScroll",this.mouseWheelListener,this)),this.hasPointerUp&&(window.navigator.msPointerEnabled?env.A.removeEvent(this.document,"MSPointerUp",this.pointerUpListener,this):(env.A.removeEvent(this.document,"pointerup",this.pointerUpListener,this),env.A.removeEvent(this.document,"pointercancel",this.pointerUpListener,this)),this.hasPointerUp=!1),this.hasPointerHandlers=!1}},removeMouseEventHandlers:function(){if(this.hasMouseHandlers&&env.A.isBrowser){var t=this.attr.movetarget||this.containerObj;env.A.removeEvent(this.containerObj,"mousedown",this.mouseDownListener,this),env.A.removeEvent(t,"mousemove",this.mouseMoveListener,this),env.A.removeEvent(t,"click",this.mouseClickListener,this),env.A.removeEvent(t,"dblclick",this.mouseDblClickListener,this),this.hasMouseUp&&(env.A.removeEvent(this.document,"mouseup",this.mouseUpListener,this),this.hasMouseUp=!1),this.hasWheelHandlers&&(env.A.removeEvent(this.containerObj,"mousewheel",this.mouseWheelListener,this),env.A.removeEvent(this.containerObj,"DOMMouseScroll",this.mouseWheelListener,this)),this.hasMouseHandlers=!1}},removeTouchEventHandlers:function(){if(this.hasTouchHandlers&&env.A.isBrowser){var t=this.attr.movetarget||this.containerObj;env.A.removeEvent(this.containerObj,"touchstart",this.touchStartListener,this),env.A.removeEvent(t,"touchmove",this.touchMoveListener,this),this.hasTouchEnd&&(env.A.removeEvent(this.document,"touchend",this.touchEndListener,this),this.hasTouchEnd=!1),this.hasTouchHandlers=!1}},clickLeftArrow:function(){return this.moveOrigin(this.origin.scrCoords[1]+.1*this.canvasWidth,this.origin.scrCoords[2]),this},clickRightArrow:function(){return this.moveOrigin(this.origin.scrCoords[1]-.1*this.canvasWidth,this.origin.scrCoords[2]),this},clickUpArrow:function(){return this.moveOrigin(this.origin.scrCoords[1],this.origin.scrCoords[2]-.1*this.canvasHeight),this},clickDownArrow:function(){return this.moveOrigin(this.origin.scrCoords[1],this.origin.scrCoords[2]+.1*this.canvasHeight),this},gestureChangeListener:function(t){var e,i,s,r,o,n,a,l,h,u,c,d,p,_=!1,f=this.attr.zoom.factorx,A=this.attr.zoom.factory,g=!1;return this.mode!==this.BOARD_MODE_ZOOM||(t.preventDefault(),n=geometry.A.distance([t.touches[0].clientX,t.touches[0].clientY],[t.touches[1].clientX,t.touches[1].clientY],2),void 0===t.scale&&(t.scale=n/this.prevDist),!!utils_type.A.exists(this.prevCoords)&&(i=[t.touches[0].clientX-this.prevCoords[0][0],t.touches[0].clientY-this.prevCoords[0][1]],s=[t.touches[1].clientX-this.prevCoords[1][0],t.touches[1].clientY-this.prevCoords[1][1]],i[0]*i[0]+i[1]*i[1]<100&&s[0]*s[0]+s[1]*s[1]<100||(r=geometry.A.rad(i,[0,0],s),"pan"!==this.isPreviousGesture&&Math.abs(r)>.2*Math.PI&&Math.abs(r)<1.8*Math.PI&&(_=!0),"pan"===this.isPreviousGesture||_||(Math.abs(t.scale)<.77||Math.abs(t.scale)>1.3)&&(_=!0),o=t.scale/this.prevScale,this.prevScale=t.scale,this.prevCoords=[[t.touches[0].clientX,t.touches[0].clientY],[t.touches[1].clientX,t.touches[1].clientY]],e=new base_coords.A(constants.A.COORDS_BY_SCREEN,this.getMousePosition(t,0),this),this.attr.pan.enabled&&this.attr.pan.needtwofingers&&!_?(this.isPreviousGesture="pan",this.moveOrigin(e.scrCoords[1],e.scrCoords[2],!0)):this.attr.zoom.enabled&&Math.abs(o-1)<.5&&(g=!1,h=this.attr.zoom.center,(this.attr.zoom.pinchhorizontal||this.attr.zoom.pinchvertical)&&(u=Math.abs(t.touches[0].clientX-t.touches[1].clientX),c=Math.abs(t.touches[0].clientY-t.touches[1].clientY),a=Math.abs(Math.atan2(c,u)),l=Math.PI*this.attr.zoom.pinchsensitivity/90),!this.keepaspectratio&&this.attr.zoom.pinchhorizontal&&a<l?(this.attr.zoom.factorx=o,this.attr.zoom.factory=1,d=0,p=0,g=!0):!this.keepaspectratio&&this.attr.zoom.pinchvertical&&Math.abs(a-.5*Math.PI)<l?(this.attr.zoom.factorx=1,this.attr.zoom.factory=o,d=0,p=0,g=!0):this.attr.zoom.pinch&&(this.attr.zoom.factorx=o,this.attr.zoom.factory=o,d=e.usrCoords[1],p=e.usrCoords[2],g=!0),g&&("board"===h?this.zoomIn():this.zoomIn(d,p),this.attr.zoom.factorx=f,this.attr.zoom.factory=A))),!1))},gestureStartListener:function(t){var e;return t.preventDefault(),this.prevScale=1,this.prevDist=geometry.A.distance([t.touches[0].clientX,t.touches[0].clientY],[t.touches[1].clientX,t.touches[1].clientY],2),this.prevCoords=[[t.touches[0].clientX,t.touches[0].clientY],[t.touches[1].clientX,t.touches[1].clientY]],this.isPreviousGesture="none",e=this.getMousePosition(t,0),this.initMoveOrigin(e[0],e[1]),this.mode=this.BOARD_MODE_ZOOM,!1},_isRequiredKeyPressed:function(t,e){var i=this.attr[e];return!!i.enabled&&!(!(i.needshift&&t.shiftKey||!i.needshift&&!t.shiftKey)||!(i.needctrl&&t.ctrlKey||!i.needctrl&&!t.ctrlKey))},_isPointerRegistered:function(t){var e,i=this._board_touches.length;for(e=0;e<i;e++)if(this._board_touches[e].pointerId===t.pointerId)return!0;return!1},_pointerStorePosition:function(t){var e,i;for(e=0,i=!1;e<this._board_touches.length;e++)if(this._board_touches[e].pointerId===t.pointerId){this._board_touches[e].clientX=t.clientX,this._board_touches[e].clientY=t.clientY,i=!0;break}return!i&&this._board_touches.length<2&&this._board_touches.push({pointerId:t.pointerId,clientX:t.clientX,clientY:t.clientY}),this},_pointerRemoveTouches:function(t){var e;for(e=0;e<this._board_touches.length;e++)if(this._board_touches[e].pointerId===t.pointerId){this._board_touches.splice(e,1);break}return this},_pointerClearTouches:function(t){this._board_touches.length>0&&this.dehighlightAll(),this.updateQuality=this.BOARD_QUALITY_HIGH,this.mode=this.BOARD_MODE_NONE,this._board_touches=[],this.touches=[]},_getPointerInputDevice:function(t){if(env.A.isBrowser){if("touch"===t.pointerType||window.navigator.msMaxTouchPoints&&window.navigator.msMaxTouchPoints>1)return"touch";if("mouse"===t.pointerType)return"mouse";if("pen"===t.pointerType)return"pen"}return"mouse"},pointerDownListener:function(t,e,i){var s,r,o,n,a,l,h,u,c,d,p;if(!e&&this._isPointerRegistered(t))return!1;if(null===utils_type.A.evaluate(this.attr.movetarget)&&utils_type.A.exists(t.target)&&utils_type.A.exists(t.target.releasePointerCapture)&&t.target.releasePointerCapture(t.pointerId),!e&&t.isPrimary,this.hasPointerUp||(window.navigator.msPointerEnabled?env.A.addEvent(this.document,"MSPointerUp",this.pointerUpListener,this):(env.A.addEvent(this.document,"pointerup",this.pointerUpListener,this),env.A.addEvent(this.document,"pointercancel",this.pointerUpListener,this)),this.hasPointerUp=!0),this.hasMouseHandlers&&this.removeMouseEventHandlers(),this.hasTouchHandlers&&this.removeTouchEventHandlers(),this.document.selection&&utils_type.A.isFunction(this.document.selection.empty))this.document.selection.empty();else if(window.getSelection&&(l=window.getSelection()).removeAllRanges)try{l.removeAllRanges()}catch(t){}if(this._inputDevice=this._getPointerInputDevice(t),u=this._inputDevice,this.options.precision.hasPoint=this.options.precision[u],n=this.getMousePosition(t),this._testForSelection(t),this.selectingMode)return this._startSelecting(n),void this.triggerEventHandlers(["touchstartselecting","pointerstartselecting","startselecting"],[t]);if(this.attr.drag.enabled&&e?(a=[e],this.mode=this.BOARD_MODE_DRAG):a=this.initMoveObject(n[0],n[1],t,u),h={num:t.pointerId,X:n[0],Y:n[1],Xprev:NaN,Yprev:NaN,Xstart:[],Ystart:[],Zstart:[]},a.length>0){for(d=a[a.length-1],c=!1,s=0;s<this.touches.length;s++)if(this.touches[s].obj===d){r=s,o=this.touches[s].targets.push(h)-1,c=!0;break}c||(o=0,r=this.touches.push({obj:d,targets:[h]})-1),this.dehighlightAll(),d.highlight(!0),this.saveStartPos(d,this.touches[r].targets[o]),t&&t.preventDefault&&!i&&t.preventDefault()}return this.touches.length>0&&!i&&(t.preventDefault(),t.stopPropagation()),!!env.A.isBrowser&&("touch"!==this._getPointerInputDevice(t)?this.mode===this.BOARD_MODE_NONE&&this.mouseOriginMoveStart(t):(this._pointerStorePosition(t),t.touches=this._board_touches,1===t.touches.length&&this.mode===this.BOARD_MODE_NONE&&this.touchStartMoveOriginOneFinger(t)||2!==t.touches.length||this.mode!==this.BOARD_MODE_NONE&&this.mode!==this.BOARD_MODE_MOVE_ORIGIN||(this.mode===this.BOARD_MODE_MOVE_ORIGIN&&this.originMoveEnd(),this.gestureStartListener(t))),p="none",this.mode!==this.BOARD_MODE_NONE||!utils_type.A.evaluate(this.attr.browserpan)||utils_type.A.evaluate(this.attr.pan.enabled)&&!utils_type.A.evaluate(this.attr.pan.needtwofingers)||(p="pan-x pan-y"),this.containerObj.style.touchAction=p,this.triggerEventHandlers(["touchstart","down","pointerdown","MSPointerDown"],[t]),!0)},_handleClicks:function(t,e){var i,s,r=this;if(this.selectingMode)t.stopPropagation();else{if(s=utils_type.A.evaluate(this.attr.clickdelay),utils_type.A.evaluate(this.attr.dblclicksuppressclick))this._preventSingleClick=!1,this._singleClickTimer=setTimeout((function(){if(!r._preventSingleClick)for(i in r.triggerEventHandlers(e,[t]),r.clickObjects)r.clickObjects.hasOwnProperty(i)&&(r.clickObjects[i].triggerEventHandlers(e,[t]),delete r.clickObjects[i])}),s);else{for(i in r.triggerEventHandlers(e,[t]),r.clickObjects)r.clickObjects.hasOwnProperty(i)&&r.clickObjects[i].triggerEventHandlers(e,[t]);setTimeout((function(){for(i in r.clickObjects)r.clickObjects.hasOwnProperty(i)&&delete r.clickObjects[i]}),s)}t.stopPropagation()}},_handleDblClicks:function(t,e){var i;if(this.selectingMode)t.stopPropagation();else{for(i in this._preventSingleClick=!0,clearTimeout(this._singleClickTimer),this.triggerEventHandlers(e,[t]),this.clickObjects)this.clickObjects.hasOwnProperty(i)&&(this.clickObjects[i].triggerEventHandlers(e,[t]),delete this.clickObjects[i]);t.stopPropagation()}},pointerClickListener:function(t){this._handleClicks(t,["click","pointerclick"])},pointerDblClickListener:function(t){this._handleDblClicks(t,["dblclick","pointerdblclick"])},mouseClickListener:function(t){this._handleClicks(t,["click","mouseclick"])},mouseDblClickListener:function(t){this._handleDblClicks(t,["dblclick","mousedblclick"])},pointerMoveListener:function(t){var e,i,s,r,o,n;if("touch"===this._getPointerInputDevice(t)&&!this._isPointerRegistered(t))return this.BOARD_MODE_NONE;if(!this.checkFrameRate(t))return!1;if(this.mode!==this.BOARD_MODE_DRAG&&(this.dehighlightAll(),this.displayInfobox(!1)),this.mode!==this.BOARD_MODE_NONE&&(t.preventDefault(),t.stopPropagation()),this.updateQuality=this.BOARD_QUALITY_LOW,this._inputDevice=this._getPointerInputDevice(t),n=this._inputDevice,this.options.precision.hasPoint=this.options.precision[n],r=.3333*this.options.precision.hasPoint,s=this.getMousePosition(t),null===utils_type.A.evaluate(this.attr.movetarget)&&s[0]<=r||s[1]<=r||s[0]>=this.canvasWidth-r||s[1]>=this.canvasHeight-r)return this.mode===this.BOARD_MODE_NONE;if(this.selectingMode)this._moveSelecting(s),this.triggerEventHandlers(["touchmoveselecting","moveselecting","pointermoveselecting"],[t,this.mode]);else if(!this.mouseOriginMove(t))if(this.mode===this.BOARD_MODE_DRAG){for(e=0;e<this.touches.length;e++)for(o=this.touches[e].targets,i=0;i<o.length;i++)if(o[i].num===t.pointerId){o[i].X=s[0],o[i].Y=s[1],1===o.length?this.moveObject(s[0],s[1],this.touches[e],t,n):2===o.length&&(this.twoFingerMove(this.touches[e],t.pointerId,t),o[i].Xprev=s[0],o[i].Yprev=s[1]);break}}else"touch"===this._getPointerInputDevice(t)&&(this._pointerStorePosition(t),2===this._board_touches.length&&(t.touches=this._board_touches,this.gestureChangeListener(t))),this.highlightElements(s[0],s[1],t,-1);return this.triggerEventHandlers(["pointermove","MSPointerMove","move"],[t,this.mode]),this.updateQuality=this.BOARD_QUALITY_HIGH,this.mode===this.BOARD_MODE_NONE},pointerUpListener:function(t){var e,i,s,r,o,n=!1;if(this.triggerEventHandlers(["touchend","up","pointerup","MSPointerUp"],[t]),this.displayInfobox(!1),t)for(e=0;e<this.touches.length;e++)for(o=this.touches[e].targets,i=0;i<o.length;i++)if(o[i].num===t.pointerId){o.splice(i,1),0===o.length&&this.touches.splice(e,1);break}if(this.originMoveEnd(),this.update(),this.selectingMode)this._stopSelecting(t),this.triggerEventHandlers(["touchstopselecting","pointerstopselecting","stopselecting"],[t]),this.stopSelectionMode();else for(e=this.downObjects.length-1;e>-1;e--){for(s=!1,i=0;i<this.touches.length;i++)this.touches[i].obj.id===this.downObjects[e].id&&(s=!0);s||(this.downObjects[e].triggerEventHandlers(["touchend","up","pointerup","MSPointerUp"],[t]),utils_type.A.exists(this.downObjects[e].coords)||(this.downObjects[e].snapToGrid(),this.downObjects[e].snapToPoints(),n=!0),r=this.downObjects[e].eventHandlers,(utils_type.A.exists(r.click)&&r.click.length>0||utils_type.A.exists(r.pointerclick)&&r.pointerclick.length>0||utils_type.A.exists(r.dblclick)&&r.dblclick.length>0||utils_type.A.exists(r.pointerdblclick)&&r.pointerdblclick.length>0)&&(this.clickObjects[this.downObjects[e].id]=this.downObjects[e]),this.downObjects.splice(e,1))}return this.hasPointerUp&&(window.navigator.msPointerEnabled?env.A.removeEvent(this.document,"MSPointerUp",this.pointerUpListener,this):(env.A.removeEvent(this.document,"pointerup",this.pointerUpListener,this),env.A.removeEvent(this.document,"pointercancel",this.pointerUpListener,this)),this.hasPointerUp=!1),this._pointerClearTouches(t.pointerId),"touch"!==this._getPointerInputDevice(t)&&this.dehighlightAll(),n&&this.update(),!0},pointerLeaveListener:function(t){return this.displayInfobox(!1),this.dehighlightAll(),!0},touchStartListener:function(t){var e,i,s,r,o,n,a,l,h,u,c=this.options.precision.touch,d=t.touches;for(this.hasTouchEnd||(env.A.addEvent(this.document,"touchend",this.touchEndListener,this),this.hasTouchEnd=!0),this.document.selection&&utils_type.A.isFunction(this.document.selection.empty)?this.document.selection.empty():window.getSelection&&window.getSelection().removeAllRanges(),this._inputDevice="touch",this.options.precision.hasPoint=this.options.precision.touch,e=0;e<d.length;e++)d[e].jxg_isused=!1;for(e=0;e<this.touches.length;e++)for(u=this.touches[e].targets,r=0;r<u.length;r++){u[r].num=-1,c=this.options.precision.touch;do{for(o=0;o<d.length;o++)if(Math.abs(Math.pow(d[o].screenX-u[r].X,2)+Math.pow(d[o].screenY-u[r].Y,2))<c*c){u[r].num=o,u[r].X=d[o].screenX,u[r].Y=d[o].screenY,d[o].jxg_isused=!0;break}c*=2}while(-1===u[r].num&&c<this.options.precision.touchMax);-1===u[r].num&&(jxg.A.debug("i couldn't find a targettouches for target no "+r+" on "+this.touches[e].obj.name+" ("+this.touches[e].obj.id+"). Removed the target."),jxg.A.debug("eps = "+c+", touchMax = "+src_options.A.precision.touchMax),u.splice(e,1))}for(e=0;e<d.length;e++)if(!d[e].jxg_isused){if(i=this.getMousePosition(t,e),this.selectingMode)return this._startSelecting(i),this.triggerEventHandlers(["touchstartselecting","startselecting"],[t]),t.preventDefault(),t.stopPropagation(),this.options.precision.hasPoint=this.options.precision.mouse,this.touches.length>0;if(0!==(s=this.initMoveObject(i[0],i[1],t,"touch")).length)if(n=s[s.length-1],h={num:e,X:d[e].screenX,Y:d[e].screenY,Xprev:NaN,Yprev:NaN,Xstart:[],Ystart:[],Zstart:[]},utils_type.A.isPoint(n)||n.elementClass===constants.A.OBJECT_CLASS_TEXT||n.type===constants.A.OBJECT_TYPE_TICKS||n.type===constants.A.OBJECT_TYPE_IMAGE)l=[h],this.saveStartPos(n,l[0]),this.touches.push({obj:n,targets:l}),n.highlight(!0);else if(n.elementClass===constants.A.OBJECT_CLASS_LINE||n.elementClass===constants.A.OBJECT_CLASS_CIRCLE||n.elementClass===constants.A.OBJECT_CLASS_CURVE||n.type===constants.A.OBJECT_TYPE_POLYGON){for(a=!1,r=0;r<this.touches.length;r++)n.id===this.touches[r].obj.id&&(a=!0,1===this.touches[r].targets.length&&(this.saveStartPos(n,h),this.touches[r].targets.push(h)),d[e].jxg_isused=!0);a||(l=[h],this.saveStartPos(n,l[0]),this.touches.push({obj:n,targets:l}),n.highlight(!0))}d[e].jxg_isused=!0}return this.touches.length>0&&(t.preventDefault(),t.stopPropagation()),1===d.length&&this.mode===this.BOARD_MODE_NONE&&this.touchStartMoveOriginOneFinger(t)||2!==d.length||this.mode!==this.BOARD_MODE_NONE&&this.mode!==this.BOARD_MODE_MOVE_ORIGIN||(this.mode===this.BOARD_MODE_MOVE_ORIGIN&&this.originMoveEnd(),this.gestureStartListener(t)),this.options.precision.hasPoint=this.options.precision.mouse,this.triggerEventHandlers(["touchstart","down"],[t]),!1},touchMoveListener:function(t){var e,i,s,r,o=t.touches;if(!this.checkFrameRate(t))return!1;if(this.mode!==this.BOARD_MODE_NONE&&(t.preventDefault(),t.stopPropagation()),this.mode!==this.BOARD_MODE_DRAG&&(this.dehighlightAll(),this.displayInfobox(!1)),this._inputDevice="touch",this.options.precision.hasPoint=this.options.precision.touch,this.updateQuality=this.BOARD_QUALITY_LOW,this.selectingMode){for(e=0;e<o.length;e++)if(!o[e].jxg_isused){i=this.getMousePosition(t,e),this._moveSelecting(i),this.triggerEventHandlers(["touchmoves","moveselecting"],[t,this.mode]);break}}else if(!this.touchOriginMove(t))if(this.mode===this.BOARD_MODE_DRAG){for(e=0;e<this.touches.length;e++)if(1===(r=this.touches[e].targets).length){if(o[r[0].num]){if((i=this.getMousePosition(t,r[0].num))[0]<0||i[0]>this.canvasWidth||i[1]<0||i[1]>this.canvasHeight)return;r[0].X=i[0],r[0].Y=i[1],this.moveObject(i[0],i[1],this.touches[e],t,"touch")}}else if(2===r.length&&r[0].num>-1&&r[1].num>-1&&o[r[0].num]&&o[r[1].num]){if(i=this.getMousePosition(t,r[0].num),s=this.getMousePosition(t,r[1].num),i[0]<0||i[0]>this.canvasWidth||i[1]<0||i[1]>this.canvasHeight||s[0]<0||s[0]>this.canvasWidth||s[1]<0||s[1]>this.canvasHeight)return;r[0].X=i[0],r[0].Y=i[1],r[1].X=s[0],r[1].Y=s[1],this.twoFingerMove(this.touches[e],r[0].num,t),r[0].Xprev=i[0],r[0].Yprev=i[1],r[1].Xprev=s[0],r[1].Yprev=s[1]}}else 2===o.length&&this.gestureChangeListener(t),i=this.getMousePosition(t,0),this.highlightElements(i[0],i[1],t,-1);return this.mode!==this.BOARD_MODE_DRAG&&this.displayInfobox(!1),this.triggerEventHandlers(["touchmove","move"],[t,this.mode]),this.options.precision.hasPoint=this.options.precision.mouse,this.updateQuality=this.BOARD_QUALITY_HIGH,this.mode===this.BOARD_MODE_NONE},touchEndListener:function(t){var e,i,s,r,o,n,a=this.options.precision.touch,l=[],h=t&&t.touches,u=!1;if(this.triggerEventHandlers(["touchend","up"],[t]),this.displayInfobox(!1),this.selectingMode)this._stopSelecting(t),this.triggerEventHandlers(["touchstopselecting","stopselecting"],[t]),this.stopSelectionMode();else if(h&&h.length>0){for(e=0;e<this.touches.length;e++)l[e]=this.touches[e];for(this.touches.length=0,e=0;e<h.length;e++)h[e].jxg_isused=!1;for(e=0;e<l.length;e++){for(r=!1,o=0,n=l[e].targets,i=0;i<n.length;i++)for(n[i].found=!1,s=0;s<h.length;s++)if(Math.abs(Math.pow(h[s].screenX-n[i].X,2)+Math.pow(h[s].screenY-n[i].Y,2))<a*a){n[i].found=!0,n[i].num=s,n[i].X=h[s].screenX,n[i].Y=h[s].screenY,o+=1;break}if(utils_type.A.isPoint(l[e].obj)?r=n[0]&&n[0].found:l[e].obj.elementClass===constants.A.OBJECT_CLASS_LINE?r=n[0]&&n[0].found||n[1]&&n[1].found:l[e].obj.elementClass===constants.A.OBJECT_CLASS_CIRCLE&&(r=1===o||3===o),r)for(this.touches.push({obj:l[e].obj,targets:[]}),i=0;i<n.length;i++)n[i].found&&this.touches[this.touches.length-1].targets.push({num:n[i].num,X:n[i].screenX,Y:n[i].screenY,Xprev:NaN,Yprev:NaN,Xstart:n[i].Xstart,Ystart:n[i].Ystart,Zstart:n[i].Zstart});else l[e].obj.noHighlight()}}else this.touches.length=0;for(e=this.downObjects.length-1;e>-1;e--){for(r=!1,i=0;i<this.touches.length;i++)this.touches[i].obj.id===this.downObjects[e].id&&(r=!0);r||(this.downObjects[e].triggerEventHandlers(["touchup","up"],[t]),utils_type.A.exists(this.downObjects[e].coords)||(this.downObjects[e].snapToGrid(),this.downObjects[e].snapToPoints(),u=!0),this.downObjects.splice(e,1))}return h&&0!==h.length||(this.hasTouchEnd&&(env.A.removeEvent(this.document,"touchend",this.touchEndListener,this),this.hasTouchEnd=!1),this.dehighlightAll(),this.updateQuality=this.BOARD_QUALITY_HIGH,this.originMoveEnd(),u&&this.update()),!0},mouseDownListener:function(t){var e,i,s;if(this.document.selection&&utils_type.A.isFunction(this.document.selection.empty)?this.document.selection.empty():window.getSelection&&window.getSelection().removeAllRanges(),!this.hasMouseUp)return env.A.addEvent(this.document,"mouseup",this.mouseUpListener,this),this.hasMouseUp=!0,this._inputDevice="mouse",this.options.precision.hasPoint=this.options.precision.mouse,e=this.getMousePosition(t),this._testForSelection(t),this.selectingMode?(this._startSelecting(e),void this.triggerEventHandlers(["mousestartselecting","startselecting"],[t])):(0===(i=this.initMoveObject(e[0],e[1],t,"mouse")).length?(this.mode=this.BOARD_MODE_NONE,s=!0):(this.mouse={obj:null,targets:[{X:e[0],Y:e[1],Xprev:NaN,Yprev:NaN}]},this.mouse.obj=i[i.length-1],this.dehighlightAll(),this.mouse.obj.highlight(!0),this.mouse.targets[0].Xstart=[],this.mouse.targets[0].Ystart=[],this.mouse.targets[0].Zstart=[],this.saveStartPos(this.mouse.obj,this.mouse.targets[0]),t&&t.preventDefault?t.preventDefault():window.event&&(window.event.returnValue=!1)),this.mode===this.BOARD_MODE_NONE&&(s=this.mouseOriginMoveStart(t)),this.triggerEventHandlers(["mousedown","down"],[t]),s)},mouseMoveListener:function(t){var e;if(!this.checkFrameRate(t))return!1;e=this.getMousePosition(t),this.updateQuality=this.BOARD_QUALITY_LOW,this.mode!==this.BOARD_MODE_DRAG&&(this.dehighlightAll(),this.displayInfobox(!1)),this.selectingMode?(this._moveSelecting(e),this.triggerEventHandlers(["mousemoveselecting","moveselecting"],[t,this.mode])):this.mouseOriginMove(t)||(this.mode===this.BOARD_MODE_DRAG?this.moveObject(e[0],e[1],this.mouse,t,"mouse"):this.highlightElements(e[0],e[1],t,-1),this.triggerEventHandlers(["mousemove","move"],[t,this.mode])),this.updateQuality=this.BOARD_QUALITY_HIGH},mouseUpListener:function(t){var e;if(!1===this.selectingMode&&this.triggerEventHandlers(["mouseup","up"],[t]),this.updateQuality=this.BOARD_QUALITY_HIGH,this.mouse&&this.mouse.obj&&(utils_type.A.exists(this.mouse.obj.coords)||(this.mouse.obj.snapToGrid(this.mouse.targets[0]),this.mouse.obj.snapToPoints())),this.originMoveEnd(),this.dehighlightAll(),this.update(),this.selectingMode)this._stopSelecting(t),this.triggerEventHandlers(["mousestopselecting","stopselecting"],[t]),this.stopSelectionMode();else for(e=0;e<this.downObjects.length;e++)this.downObjects[e].triggerEventHandlers(["mouseup","up"],[t]);this.downObjects.length=0,this.hasMouseUp&&(env.A.removeEvent(this.document,"mouseup",this.mouseUpListener,this),this.hasMouseUp=!1),this.mouse=null},mouseWheelListener:function(t){var e,i;return!(this.attr.zoom.enabled&&this.attr.zoom.wheel&&this._isRequiredKeyPressed(t,"zoom"))||(e=(t=t||window.event).detail?-t.detail:t.wheelDelta/40,i="board"===this.attr.zoom.center?[]:new base_coords.A(constants.A.COORDS_BY_SCREEN,this.getMousePosition(t),this).usrCoords,e>0?this.zoomIn(i[1],i[2]):this.zoomOut(i[1],i[2]),this.triggerEventHandlers(["mousewheel"],[t]),t.preventDefault(),!1)},keyDownListener:function(t){var e,i,s,r,o,n,a=t.target.id,l=0,h=0,u=utils_type.A.evaluate(this.attr.keyboard.dx)/this.unitX,c=utils_type.A.evaluate(this.attr.keyboard.dy)/this.unitY,d=!1,p=!0;return!(!this.attr.keyboard.enabled||""===a)&&((!(r=this.containerObj.shadowRoot||document).activeElement||"INPUT"!==(i=r.activeElement).tagName&&"textarea"!==i.tagName)&&(e=a.replace(this.containerObj.id+"_",""),i=this.select(e),utils_type.A.exists(i.coords)&&(n=i.coords.usrCoords.slice(1)),utils_type.A.evaluate(this.attr.keyboard.panshift)&&t.shiftKey||utils_type.A.evaluate(this.attr.keyboard.panctrl)&&t.ctrlKey?(!0===utils_type.A.evaluate(this.attr.zoom.enabled)&&(d=!0),38===t.keyCode?this.clickUpArrow():40===t.keyCode?this.clickDownArrow():37===t.keyCode?this.clickLeftArrow():39===t.keyCode?this.clickRightArrow():d&&171===t.keyCode?this.zoomIn():d&&173===t.keyCode?this.zoomOut():d&&79===t.keyCode?this.zoom100():p=!1):(utils_type.A.exists(i.visProp)&&(utils_type.A.exists(i.visProp.snaptogrid)&&i.visProp.snaptogrid&&utils_type.A.evaluate(i.visProp.snapsizex)&&utils_type.A.evaluate(i.visProp.snapsizey)?(u=l=(s=i.getSnapSizes())[0],c=h=s[1]):utils_type.A.exists(i.visProp.attracttogrid)&&i.visProp.attracttogrid&&utils_type.A.evaluate(i.visProp.attractordistance)&&utils_type.A.evaluate(i.visProp.attractorunit)&&(h=l=1.1*utils_type.A.evaluate(i.visProp.attractordistance),"screen"===utils_type.A.evaluate(i.visProp.attractorunit)&&(l/=this.unitX,h/=this.unitX),u=Math.max(l,u),c=Math.max(h,c))),38===t.keyCode?o=[0,c]:40===t.keyCode?o=[0,-c]:37===t.keyCode?o=[-u,0]:39===t.keyCode?o=[u,0]:p=!1,o&&i.isDraggable&&i.visPropCalc.visible&&(this.geonextCompatibilityMode&&(utils_type.A.isPoint(i)||i.elementClass===constants.A.OBJECT_CLASS_TEXT)||!this.geonextCompatibilityMode)&&!utils_type.A.evaluate(i.visProp.fixed)&&(this.mode=this.BOARD_MODE_DRAG,utils_type.A.exists(i.coords)&&(o[0]+=n[0],o[1]+=n[1]),utils_type.A.exists(i.coords)?(i.setPosition(jxg.A.COORDS_BY_USER,o),this.updateInfobox(i)):(this.displayInfobox(!1),i.setPositionDirectly(constants.A.COORDS_BY_USER,o,[0,0])),this.triggerEventHandlers(["keymove","move"],[t,this.mode]),i.triggerEventHandlers(["keydrag","drag"],[t]),this.mode=this.BOARD_MODE_NONE)),this.update(),p&&utils_type.A.exists(t.preventDefault)&&t.preventDefault(),p))},keyFocusInListener:function(t){var e,i,s=t.target.id;if(!this.attr.keyboard.enabled||""===s)return!1;e=s.replace(this.containerObj.id+"_",""),i=this.select(e),utils_type.A.exists(i.highlight)&&(i.highlight(!0),this.focusObjects=[e],i.triggerEventHandlers(["hit"],[t])),utils_type.A.exists(i.coords)&&this.updateInfobox(i)},keyFocusOutListener:function(t){if(!this.attr.keyboard.enabled)return!1;this.focusObjects=[],this.dehighlightAll(),this.displayInfobox(!1)},updateContainerDims:function(t,e){var i,s,r,o=t,n=e;void 0===t&&(o=this.containerObj.offsetWidth,n=this.containerObj.offsetHeight),void 0===t&&window&&window.getComputedStyle&&(i=window.getComputedStyle(this.containerObj,null),s=parseFloat(i.getPropertyValue("border-left-width"))+parseFloat(i.getPropertyValue("border-right-width")),isNaN(s)||(o-=s),r=parseFloat(i.getPropertyValue("border-top-width"))+parseFloat(i.getPropertyValue("border-bottom-width")),isNaN(r)||(n-=r)),o<=0||n<=0||isNaN(o)||isNaN(n)||(isNaN(this.getBoundingBox()[0])&&this.setBoundingBox(this.attr.boundingbox,this.keepaspectratio,"keep"),utils_type.A.exists(this._prevDim)&&this._prevDim.w===o&&this._prevDim.h===n||(this.resizeContainer(o,n,!0),this._prevDim={w:o,h:n}))},startResizeObserver:function(){var t=this;env.A.isBrowser&&this.attr.resize&&this.attr.resize.enabled&&(this.resizeObserver=new ResizeObserver((function(e){var i;t._isResizing||(t._isResizing=!0,i=e[0].contentRect,window.setTimeout((function(){try{t.updateContainerDims(i.width,i.height)}catch(e){t.stopResizeObserver()}finally{t._isResizing=!1}}),t.attr.resize.throttle))})),this.resizeObserver.observe(this.containerObj))},stopResizeObserver:function(){env.A.isBrowser&&this.attr.resize&&this.attr.resize.enabled&&utils_type.A.exists(this.resizeObserver)&&this.resizeObserver.unobserve(this.containerObj)},resizeListener:function(){var t=this;env.A.isBrowser&&this.attr.resize&&this.attr.resize.enabled&&(this._isScrolling||this._isResizing||(this._isResizing=!0,window.setTimeout((function(){t.updateContainerDims(),t._isResizing=!1}),this.attr.resize.throttle)))},scrollListener:function(t){var e=this;env.A.isBrowser&&(this._isScrolling||(this._isScrolling=!0,window.setTimeout((function(){e._isScrolling=!1}),66)))},startIntersectionObserver:function(){var t=this;try{this.intersectionObserver=new IntersectionObserver((function(e){isNaN(t.getBoundingBox()[0])&&t.updateContainerDims()}),{root:null,rootMargin:"0px",threshold:.8}),this.intersectionObserver.observe(t.containerObj)}catch(t){jxg.A.debug("JSXGraph: IntersectionObserver not available in this browser.")}},stopIntersectionObserver:function(){utils_type.A.exists(this.intersectionObserver)&&this.intersectionObserver.unobserve(this.containerObj)},printListener:function(t){this.updateContainerDims()},printListenerMatch:function(t){t.matches&&this.printListener()},initInfobox:function(t){var e=utils_type.A.copyAttributes(t,this.options,"infobox");return e.id=this.id+"_infobox",this.infobox=this.create("text",[0,0,"0,0"],e),this.infobox.dump=!1,this.displayInfobox(!1),this},updateInfobox:function(t){var e,i,s,r,o,n,a,l=utils_type.A.evaluate(t.visProp.showinfobox);return!utils_type.A.evaluate(this.attr.showinfobox)&&"inherit"===l||!l||utils_type.A.isPoint(t)&&(s=t.coords.usrCoords[1],r=t.coords.usrCoords[2],n=utils_type.A.evaluate(this.infobox.visProp.distancex),a=utils_type.A.evaluate(this.infobox.visProp.distancey),this.infobox.setCoords(s+n/this.unitX,r+a/this.unitY),o=utils_type.A.evaluate(t.visProp.infoboxdigits),"string"!=typeof t.infoboxText?("auto"===o?this.infobox.useLocale()?(e=this.infobox.formatNumberLocale(s),i=this.infobox.formatNumberLocale(r)):(e=utils_type.A.autoDigits(s),i=utils_type.A.autoDigits(r)):utils_type.A.isNumber(o)?this.infobox.useLocale()?(e=this.infobox.formatNumberLocale(s,o),i=this.infobox.formatNumberLocale(r,o)):(e=utils_type.A.toFixed(s,o),i=utils_type.A.toFixed(r,o)):(e=s,i=r),this.highlightInfobox(e,i,t)):this.highlightCustomInfobox(t.infoboxText,t),this.displayInfobox(!0)),this},displayInfobox:function(t){return!t&&this.focusObjects.length>0&&this.select(this.focusObjects[0]).elementClass===constants.A.OBJECT_CLASS_POINT||this.infobox.hiddenByParent===t&&(this.infobox.hiddenByParent=!t,this.infobox.prepareUpdate().updateVisibility(t).updateRenderer()),this},showInfobox:function(t){return this.displayInfobox(t)},highlightInfobox:function(t,e,i){return this.highlightCustomInfobox("("+t+", "+e+")",i),this},highlightCustomInfobox:function(t,e){return this.infobox.setText(t),this},dehighlightAll:function(){var t,e,i={},s=!1;for(t in this.highlightedObjects)this.highlightedObjects.hasOwnProperty(t)&&(e=this.highlightedObjects[t],this.focusObjects.indexOf(t)<0?((this.hasMouseHandlers||this.hasPointerHandlers)&&e.noHighlight(),s=!0):i[t]=e);return this.highlightedObjects=i,"canvas"===this.renderer.type&&s&&(this.prepareUpdate(),this.renderer.suspendRedraw(this),this.updateRenderer(),this.renderer.unsuspendRedraw()),this},getScrCoordsOfMouse:function(t,e){return[t,e]},getUsrCoordsOfMouse:function(t){var e=this.getCoordsTopLeftCorner(),i=env.A.getPosition(t,null,this.document),s=i[0]-e[0],r=i[1]-e[1];return new base_coords.A(constants.A.COORDS_BY_SCREEN,[s,r],this).usrCoords.slice(1)},getAllUnderMouse:function(t){var e=this.getAllObjectsUnderMouse(t);return e.push(this.getUsrCoordsOfMouse(t)),e},getAllObjectsUnderMouse:function(t){var e,i,s=this.getCoordsTopLeftCorner(),r=env.A.getPosition(t,null,this.document),o=r[0]-s[0],n=r[1]-s[1],a=[],l=this.objectsList.length;for(e=0;e<l;e++)(i=this.objectsList[e]).visPropCalc.visible&&i.hasPoint&&i.hasPoint(o,n)&&(a[a.length]=i);return a},updateCoords:function(){var t,e,i=this.objectsList.length;for(e=0;e<i;e++)t=this.objectsList[e],utils_type.A.exists(t.coords)&&(utils_type.A.evaluate(t.visProp.frozen)?t.is3D?t.element2D.coords.screen2usr():t.coords.screen2usr():t.is3D?t.element2D.coords.usr2screen():t.coords.usr2screen());return this},moveOrigin:function(t,e,i){var s,r,o,n;return utils_type.A.exists(t)&&utils_type.A.exists(e)&&(s=this.origin.scrCoords[1],r=this.origin.scrCoords[2],this.origin.scrCoords[1]=t,this.origin.scrCoords[2]=e,i&&(this.origin.scrCoords[1]-=this.drag_dx,this.origin.scrCoords[2]-=this.drag_dy),o=new base_coords.A(constants.A.COORDS_BY_SCREEN,[0,0],this).usrCoords,n=new base_coords.A(constants.A.COORDS_BY_SCREEN,[this.canvasWidth,this.canvasHeight],this).usrCoords,(o[1]<this.maxboundingbox[0]||o[2]>this.maxboundingbox[1]||n[1]>this.maxboundingbox[2]||n[2]<this.maxboundingbox[3])&&(this.origin.scrCoords[1]=s,this.origin.scrCoords[2]=r)),this.updateCoords().clearTraces().fullUpdate(),this.triggerEventHandlers(["boundingbox"]),this},addConditions:function(t){var e,i,s,r,o,n,a,l=[],h=t.indexOf("<data>"),u=t.indexOf("</data>"),c=function(t,e,i,s){return function(){var r,o;o=(r=t.select(e.id)).coords.usrCoords[s],2===s?r.setPositionDirectly(constants.A.COORDS_BY_USER,[i(),o]):r.setPositionDirectly(constants.A.COORDS_BY_USER,[o,i()]),r.prepareUpdate().update()}},d=function(t,e,i){return function(){var s,r;s=t.select(e.id),r=i(),s.setAttribute({visible:r})}},p=function(t,e,i,s){return function(){var r,o;r=t.select(e.id),o=i(),"strokewidth"===s?r.visProp.strokewidth=o:(o=utils_color.A.rgba2rgbo(o),r.visProp[s+"color"]=o[0],r.visProp[s+"opacity"]=o[1])}},_=function(t,e,i){return function(){t.select(e.id).position=i()}},f=function(t,e,i){return function(){t.select(e.id).setStyle(i())}};if(!(h<0)){for(;h>=0;){if(i=(e=t.slice(h+6,u)).indexOf("="),s=e.slice(0,i),r=e.slice(i+1),i=s.indexOf("."),o=s.slice(0,i),n=this.elementsByName[utils_type.A.unescapeHTML(o)],a=s.slice(i+1).replace(/\s+/g,"").toLowerCase(),r=utils_type.A.createFunction(r,this,"",!0),utils_type.A.exists(this.elementsByName[o]))switch(a){case"x":l.push(c(this,n,r,2));break;case"y":l.push(c(this,n,r,1));break;case"visible":l.push(d(this,n,r));break;case"position":l.push(_(this,n,r));break;case"stroke":l.push(p(this,n,r,"stroke"));break;case"style":l.push(f(this,n,r));break;case"strokewidth":l.push(p(this,n,r,"strokewidth"));break;case"fill":l.push(p(this,n,r,"fill"));break;case"label":break;default:jxg.A.debug('property "'+a+'" in conditions not yet implemented:'+r)}else jxg.A.debug("debug conditions: |"+o+"| undefined");h=(t=t.slice(u+7)).indexOf("<data>"),u=t.indexOf("</data>")}this.updateConditions=function(){var t;for(t=0;t<l.length;t++)l[t]();return this.prepareUpdate().updateElements(),!0},this.updateConditions()}},updateConditions:function(){return!1},calculateSnapSizes:function(){var t,e,i,s,r=this.getBoundingBox(),o=utils_type.A.evaluate(this.options.grid.majorStep),n=utils_type.A.evaluate(this.options.grid.gridX),a=utils_type.A.evaluate(this.options.grid.gridY);for(utils_type.A.isArray(o)||(o=[o,o]),o.length<2&&(o=[o[0],o[0]]),utils_type.A.exists(n)&&(o[0]=n),utils_type.A.exists(a)&&(o[1]=a),"auto"===o[0]?o[0]=1:o[0]=utils_type.A.parseNumber(o[0],Math.abs(r[1]-r[3]),1/this.unitX),"auto"===o[1]?o[1]=1:o[1]=utils_type.A.parseNumber(o[1],Math.abs(r[0]-r[2]),1/this.unitY),t=new base_coords.A(constants.A.COORDS_BY_USER,[0,0],this),e=new base_coords.A(constants.A.COORDS_BY_USER,[o[0],o[1]],this),i=t.scrCoords[1]-e.scrCoords[1],s=t.scrCoords[2]-e.scrCoords[2],this.options.grid.snapSizeX=o[0];Math.abs(i)>25;)this.options.grid.snapSizeX*=2,i/=2;for(this.options.grid.snapSizeY=o[1];Math.abs(s)>25;)this.options.grid.snapSizeY*=2,s/=2;return this},applyZoom:function(){return this.updateCoords().calculateSnapSizes().clearTraces().fullUpdate(),this},zoomIn:function(t,e){var i=this.getBoundingBox(),s=this.attr.zoom.factorx,r=this.attr.zoom.factory,o=(i[2]-i[0])*(1-1/s),n=(i[1]-i[3])*(1-1/r),a=.5,l=.5,h=this.attr.zoom.eps||this.attr.zoom.min||.001;return this.zoomX>this.attr.zoom.max&&s>1||this.zoomY>this.attr.zoom.max&&r>1||this.zoomX<h&&s<1||this.zoomY<h&&r<1?this:(utils_type.A.isNumber(t)&&utils_type.A.isNumber(e)&&(a=(t-i[0])/(i[2]-i[0]),l=(i[1]-e)/(i[1]-i[3])),this.setBoundingBox([i[0]+o*a,i[1]-n*l,i[2]-o*(1-a),i[3]+n*(1-l)],this.keepaspectratio,"update"),this.applyZoom())},zoomOut:function(t,e){var i=this.getBoundingBox(),s=this.attr.zoom.factorx,r=this.attr.zoom.factory,o=(i[2]-i[0])*(1-s),n=(i[1]-i[3])*(1-r),a=.5,l=.5,h=this.attr.zoom.eps||this.attr.zoom.min||.001;return this.zoomX<h||this.zoomY<h?this:(utils_type.A.isNumber(t)&&utils_type.A.isNumber(e)&&(a=(t-i[0])/(i[2]-i[0]),l=(i[1]-e)/(i[1]-i[3])),this.setBoundingBox([i[0]+o*a,i[1]-n*l,i[2]-o*(1-a),i[3]+n*(1-l)],this.keepaspectratio,"update"),this.applyZoom())},zoom100:function(){var t,e,i;return utils_type.A.exists(this.attr.boundingbox)?this.setBoundingBox(this.attr.boundingbox,this.keepaspectratio,"reset"):(e=((t=this.getBoundingBox())[2]-t[0])*(1-this.zoomX)*.5,i=(t[1]-t[3])*(1-this.zoomY)*.5,this.setBoundingBox([t[0]+e,t[1]-i,t[2]-e,t[3]+i],this.keepaspectratio,"reset")),this.applyZoom()},zoomAllPoints:function(){var t,e,i,s,r=0,o=0,n=0,a=0,l=this.objectsList.length;for(t=0;t<l;t++)s=this.objectsList[t],utils_type.A.isPoint(s)&&s.visPropCalc.visible&&(s.coords.usrCoords[1]<r?r=s.coords.usrCoords[1]:s.coords.usrCoords[1]>o&&(o=s.coords.usrCoords[1]),s.coords.usrCoords[2]>a?a=s.coords.usrCoords[2]:s.coords.usrCoords[2]<n&&(n=s.coords.usrCoords[2]));return e=50/this.unitX,i=50/this.unitY,this.setBoundingBox([r-e,a+i,o+e,n-i],this.keepaspectratio,"update"),this.applyZoom()},zoomElements:function(t){var e,i,s,r,o,n,a,l=[1/0,-1/0,-1/0,1/0];if(!utils_type.A.isArray(t)||0===t.length)return this;for(e=0;e<t.length;e++)i=this.select(t[e]).bounds(),utils_type.A.isArray(i)&&(i[0]<l[0]&&(l[0]=i[0]),i[1]>l[1]&&(l[1]=i[1]),i[2]>l[2]&&(l[2]=i[2]),i[3]<l[3]&&(l[3]=i[3]));return utils_type.A.isArray(l)&&(s=.5*(l[0]+l[2]),r=.5*(l[1]+l[3]),o=1.5*(l[2]-l[0])*.5,n=1.5*(l[1]-l[3])*.5,a=Math.max(o,n),this.setBoundingBox([s-a,r+a,s+a,r-a],this.keepaspectratio,"update")),this},setZoom:function(t,e){var i=this.attr.zoom.factorx,s=this.attr.zoom.factory;return this.attr.zoom.factorx=t/this.zoomX,this.attr.zoom.factory=e/this.zoomY,this.zoomIn(),this.attr.zoom.factorx=i,this.attr.zoom.factory=s,this},_removeObj:function(t,e){var i,s;if(utils_type.A.isArray(t)){for(s=0;s<t.length;s++)this._removeObj(t[s],e);return this}if(t=this.select(t),!utils_type.A.exists(t)||utils_type.A.isString(t))return this;try{for(i in t.childElements)t.childElements.hasOwnProperty(i)&&t.childElements[i].board._removeObj(t.childElements[i]);for(i in t.objects)t.objects.hasOwnProperty(i)&&t.objects[i].board._removeObj(t.objects[i]);if(e)for(i in this.objects)this.objects.hasOwnProperty(i)&&utils_type.A.exists(this.objects[i].childElements)&&utils_type.A.exists(this.objects[i].childElements.hasOwnProperty(t.id))&&(delete this.objects[i].childElements[t.id],delete this.objects[i].descendants[t.id]);else if(utils_type.A.exists(t.ancestors))for(i in t.ancestors)t.ancestors.hasOwnProperty(i)&&utils_type.A.exists(t.ancestors[i].childElements)&&utils_type.A.exists(t.ancestors[i].childElements.hasOwnProperty(t.id))&&(delete t.ancestors[i].childElements[t.id],delete t.ancestors[i].descendants[t.id]);if(t._pos>-1)for(this.objectsList.splice(t._pos,1),s=t._pos;s<this.objectsList.length;s++)this.objectsList[s]._pos--;else t.type!==constants.A.OBJECT_TYPE_TURTLE&&jxg.A.debug("Board.removeObject: object "+t.id+" not found in list.");delete this.objects[t.id],delete this.elementsByName[t.name],t.visProp&&utils_type.A.evaluate(t.visProp.trace)&&t.clearTrace(),utils_type.A.exists(t.remove)&&t.remove()}catch(e){jxg.A.debug(t.id+": Could not be removed: "+e)}return this},removeObject:function(t,e){var i;if(this.renderer.suspendRedraw(this),utils_type.A.isArray(t))for(i=0;i<t.length;i++)this._removeObj(t[i],e);else this._removeObj(t,e);return this.renderer.unsuspendRedraw(),this.update(),this},removeAncestors:function(t){var e;for(e in t.ancestors)t.ancestors.hasOwnProperty(e)&&this.removeAncestors(t.ancestors[e]);return this.removeObject(t),this},initGeonextBoard:function(){var t,e,i;return t=this.create("point",[0,0],{id:this.id+"g00e0",name:"Ursprung",withLabel:!1,visible:!1,fixed:!0}),e=this.create("point",[1,0],{id:this.id+"gX0e0",name:"Punkt_1_0",withLabel:!1,visible:!1,fixed:!0}),i=this.create("point",[0,1],{id:this.id+"gY0e0",name:"Punkt_0_1",withLabel:!1,visible:!1,fixed:!0}),this.create("line",[t,e],{id:this.id+"gXLe0",name:"X-Achse",withLabel:!1,visible:!1}),this.create("line",[t,i],{id:this.id+"gYLe0",name:"Y-Achse",withLabel:!1,visible:!1}),this},resizeContainer:function(t,e,i,s){var r,o,n,a,l;return o=this.canvasWidth,n=this.canvasHeight,s||(r=this.getBoundingBox()),this.canvasWidth=parseFloat(t),this.canvasHeight=parseFloat(e),i||(this.containerObj.style.width=this.canvasWidth+"px",this.containerObj.style.height=this.canvasHeight+"px"),this.renderer.resize(this.canvasWidth,this.canvasHeight),s?(a=.5*(this.canvasWidth-o),l=.5*(this.canvasHeight-n),this.moveOrigin(this.origin.scrCoords[1]+a,this.origin.scrCoords[2]+l)):this.setBoundingBox(r,this.keepaspectratio,"keep"),this},showDependencies:function(){var t,e,i,s,r;for(t in e="<p>\n",this.objects)if(this.objects.hasOwnProperty(t)){for(i in r=0,this.objects[t].childElements)this.objects[t].childElements.hasOwnProperty(i)&&(r+=1);for(i in r>=0&&(e+="<strong>"+this.objects[t].id+":</strong> "),this.objects[t].childElements)this.objects[t].childElements.hasOwnProperty(i)&&(e+=this.objects[t].childElements[i].id+"("+this.objects[t].childElements[i].name+"), ");e+="<p>\n"}return e+="</p>\n",(s=window.open()).document.open(),s.document.write(e),s.document.close(),this},showXML:function(){var t=window.open("");return t.document.open(),t.document.write("<pre>"+utils_type.A.escapeHTML(this.xmlString)+"</pre>"),t.document.close(),this},prepareUpdate:function(){var t,e,i=this.objectsList.length;for(t=0;t<i;t++)(e=this.objectsList[t]).needsUpdate=e.needsRegularUpdate||this.needsFullUpdate;for(t in this.groups)this.groups.hasOwnProperty(t)&&((e=this.groups[t]).needsUpdate=e.needsRegularUpdate||this.needsFullUpdate);return this},updateElements:function(t){var e,i;for(t=this.select(t),e=0;e<this.objectsList.length;e++)i=this.objectsList[e],this.needsFullUpdate&&i.elementClass===constants.A.OBJECT_CLASS_TEXT&&i.updateSize(),i.update(!utils_type.A.exists(t)||i.id!==t.id).updateVisibility();for(e in this.groups)this.groups.hasOwnProperty(e)&&this.groups[e].update(t);return this},updateRenderer:function(){var t,e=this.objectsList.length;if(this.renderer){if("canvas"===this.renderer.type)this.updateRendererCanvas();else for(t=0;t<e;t++)this.objectsList[t].updateRenderer();return this}},updateRendererCanvas:function(){var t,e,i,s,r,o=this.objectsList.length,n=this.options.layer,a=this.options.layer.numlayers,l=Number.NEGATIVE_INFINITY;for(i=0;i<a;i++){for(r in s=Number.POSITIVE_INFINITY,n)n.hasOwnProperty(r)&&n[r]>l&&n[r]<s&&(s=n[r]);for(l=s,t=0;t<o;t++)(e=this.objectsList[t]).visProp.layer===s&&e.prepareUpdate().updateRenderer()}return this},addHook:function(t,e,i){return jxg.A.deprecated("Board.addHook()","Board.on()"),e=utils_type.A.def(e,"update"),i=utils_type.A.def(i,this),this.hooks.push([e,t]),this.on(e,t,i),this.hooks.length-1},addEvent:jxg.A.shortcut(jxg.A.Board.prototype,"on"),removeHook:function(t){return jxg.A.deprecated("Board.removeHook()","Board.off()"),this.hooks[t]&&(this.off(this.hooks[t][0],this.hooks[t][1]),this.hooks[t]=null),this},removeEvent:jxg.A.shortcut(jxg.A.Board.prototype,"off"),updateHooks:function(t){var e=Array.prototype.slice.call(arguments,0);return jxg.A.deprecated("Board.updateHooks()","Board.triggerEventHandlers()"),e[0]=utils_type.A.def(e[0],"update"),this.triggerEventHandlers([e[0]],arguments),this},addChild:function(t){return utils_type.A.exists(t)&&utils_type.A.exists(t.containerObj)&&(this.dependentBoards.push(t),this.update()),this},removeChild:function(t){var e;for(e=this.dependentBoards.length-1;e>=0;e--)this.dependentBoards[e]===t&&this.dependentBoards.splice(e,1);return this},update:function(t){var e,i,s,r,o;if(this.inUpdate||this.isSuspendedUpdate)return this;for(this.inUpdate=!0,"all"===this.attr.minimizereflow&&this.containerObj&&"vml"!==this.renderer.type&&(o=this.document.activeElement,r=this.renderer.removeToInsertLater(this.containerObj)),"svg"===this.attr.minimizereflow&&"svg"===this.renderer.type&&(o=this.document.activeElement,r=this.renderer.removeToInsertLater(this.renderer.svgRoot)),this.prepareUpdate().updateElements(t).updateConditions(),this.renderer.suspendRedraw(this),this.updateRenderer(),this.renderer.unsuspendRedraw(),this.triggerEventHandlers(["update"],[]),r&&(r(),o.focus()),i=this.dependentBoards.length,e=0;e<i;e++)s=this.dependentBoards[e],utils_type.A.exists(s)&&s!==this&&(s.updateQuality=this.updateQuality,s.prepareUpdate().updateElements().updateConditions(),s.renderer.suspendRedraw(this),s.updateRenderer(),s.renderer.unsuspendRedraw(),s.triggerEventHandlers(["update"],[]));return this.inUpdate=!1,this},fullUpdate:function(){return this.needsFullUpdate=!0,this.update(),this.needsFullUpdate=!1,this},addGrid:function(){return this.create("grid",[]),this},removeGrids:function(){var t;for(t=0;t<this.grids.length;t++)this.removeObject(this.grids[t]);return this.grids.length=0,this.update(),this},create:function(t,e,i){var s,r;for(t=t.toLowerCase(),utils_type.A.exists(e)||(e=[]),utils_type.A.exists(i)||(i={}),r=0;r<e.length;r++)!utils_type.A.isString(e[r])||"text"===t&&2===r||"solidofrevolution3d"===t&&2===r||!("input"!==t&&"checkbox"!==t&&"button"!==t||2!==r&&3!==r)||"curve"===t||"functiongraph"===t||"implicitcurve"===t||(e[r]=this.select(e[r]));if(!utils_type.A.isFunction(jxg.A.elements[t]))throw new Error("JSXGraph: create: Unknown element type given: "+t);return s=jxg.A.elements[t](this,e,i),utils_type.A.exists(s)?(s.prepareUpdate&&s.update&&s.updateRenderer&&s.fullUpdate(),s):(jxg.A.debug("JSXGraph: create: failure creating "+t),s)},createElement:function(){return jxg.A.deprecated("Board.createElement()","Board.create()"),this.create.apply(this,arguments)},clearTraces:function(){var t;for(t=0;t<this.objectsList.length;t++)this.objectsList[t].clearTrace();return this.numTraces=0,this},suspendUpdate:function(){return this.inUpdate||(this.isSuspendedUpdate=!0),this},unsuspendUpdate:function(){return this.isSuspendedUpdate&&(this.isSuspendedUpdate=!1,this.fullUpdate()),this},setBoundingBox:function(t,e,i){var s,r,o,n,a,l,h,u,c,d=0,p=0,_=1,f=env.A.getDimensions(this.container,this.document);return utils_type.A.isArray(t)?(t[0]<this.maxboundingbox[0]||t[1]>this.maxboundingbox[1]||t[2]>this.maxboundingbox[2]||t[3]<this.maxboundingbox[3]||(utils_type.A.exists(i)||(i="reset"),o=this.unitX,n=this.unitY,this.canvasWidth=parseFloat(f.width),this.canvasHeight=parseFloat(f.height),r=this.canvasWidth,s=this.canvasHeight,e?(this.keepaspectratio?(a=o/n,isNaN(a)&&(a=1)):a=1,"keep"===i&&(_=this.zoomX/this.zoomY),u=o*(l=t[2]-t[0]),c=n*(h=t[1]-t[3]),r>=s?u>=c?(this.unitY=s/h,this.unitX=this.unitY*a):(this.unitY=s/Math.abs(l)*math.A.sign(h)/_,this.unitX=this.unitY*a):c>u?(this.unitX=r/l,this.unitY=this.unitX/a):(this.unitX=r/Math.abs(h)*math.A.sign(l)*_,this.unitY=this.unitX/a),d=.5*(r/this.unitX-l),p=.5*(s/this.unitY-h),this.keepaspectratio=!0):(this.unitX=r/(t[2]-t[0]),this.unitY=s/(t[1]-t[3]),this.keepaspectratio=!1),this.moveOrigin(-this.unitX*(t[0]-d),this.unitY*(t[1]+p)),"update"===i?(this.zoomX*=this.unitX/o,this.zoomY*=this.unitY/n):"reset"===i&&(this.zoomX=utils_type.A.exists(this.attr.zoomx)?this.attr.zoomx:1,this.zoomY=utils_type.A.exists(this.attr.zoomy)?this.attr.zoomy:1)),this):this},getBoundingBox:function(){var t=new base_coords.A(constants.A.COORDS_BY_SCREEN,[0,0],this).usrCoords,e=new base_coords.A(constants.A.COORDS_BY_SCREEN,[this.canvasWidth,this.canvasHeight],this).usrCoords;return[t[1],t[2],e[1],e[2]]},_set:function(t,e){t=t.toLocaleLowerCase(),null===e||!utils_type.A.isObject(e)||utils_type.A.exists(e.id)||utils_type.A.exists(e.name)?this.attr[t]=e:utils_type.A.mergeAttr(this.attr[t],e)},setAttribute:function(t){var e,i,s,r,o,n,a={};for(e=0;e<arguments.length;e++)i=arguments[e],utils_type.A.isString(i)?(s=i.split(":"),a[utils_type.A.trim(s[0])]=utils_type.A.trim(s[1])):utils_type.A.isArray(i)?a[i[0]]=i[1]:jxg.A.extend(a,i);for(e in a)if(a.hasOwnProperty(e)&&(r=e.replace(/\s+/g,"").toLowerCase(),o=a[e]),o=(!o.toLowerCase||"false"!==o.toLowerCase())&&o,this.attr[r]!==o)switch(r){case"axis":!1===o&&utils_type.A.exists(this.defaultAxes)&&(this.defaultAxes.x.setAttribute({visible:!1}),this.defaultAxes.y.setAttribute({visible:!1}));break;case"boundingbox":this.setBoundingBox(o,this.keepaspectratio),this._set(r,o);break;case"defaultaxes":utils_type.A.exists(this.defaultAxes.x)&&utils_type.A.exists(o.x)&&this.defaultAxes.x.setAttribute(o.x),utils_type.A.exists(this.defaultAxes.y)&&utils_type.A.exists(o.y)&&this.defaultAxes.y.setAttribute(o.y);break;case"description":this.document.getElementById(this.container+"_ARIAdescription").innerHTML=o,this._set(r,o);break;case"title":this.document.getElementById(this.container+"_ARIAlabel").innerHTML=o,this._set(r,o);break;case"keepaspectratio":this._set(r,o),this.setBoundingBox(this.getBoundingBox(),o,"keep");break;case"document":case"maxboundingbox":this[r]=o,this._set(r,o);break;case"zoomx":case"zoomy":this[r]=o,this._set(r,o),this.setZoom(this.attr.zoomx,this.attr.zoomy);break;case"registerevents":case"renderer":break;case"fullscreen":case"screenshot":(n=this.containerObj.ownerDocument.getElementById(this.container+"_navigation_"+r))&&utils_type.A.exists(o.symbol)&&(n.innerHTML=utils_type.A.evaluate(o.symbol)),this._set(r,o);break;case"selection":o.visible=!1,o.withLines=!1,o.vertices={visible:!1},this._set(r,o);break;case"showcopyright":"svg"===this.renderer.type&&((n=this.containerObj.ownerDocument.getElementById(this.renderer.uniqName("licenseText")))?n.style.display=utils_type.A.evaluate(o)?"inline":"none":utils_type.A.evaluate(o)&&this.renderer.displayCopyright(constants.A.licenseText,parseInt(this.options.text.fontSize,10)));default:utils_type.A.exists(this.attr[r])&&this._set(r,o)}return this.containerObj.ownerDocument.getElementById(this.container+"_navigationbar").remove(),this.renderer.drawNavigationBar(this,this.attr.navbar),this.triggerEventHandlers(["attribute"],[a,this]),this.fullUpdate(),this},addAnimation:function(t){var e=this;return this.animationObjects[t.id]=t,this.animationIntervalCode||(this.animationIntervalCode=window.setInterval((function(){e.animate()}),t.board.attr.animationdelay)),this},stopAllAnimation:function(){var t;for(t in this.animationObjects)this.animationObjects.hasOwnProperty(t)&&utils_type.A.exists(this.animationObjects[t])&&(this.animationObjects[t]=null,delete this.animationObjects[t]);return window.clearInterval(this.animationIntervalCode),delete this.animationIntervalCode,this},animate:function(){var t,e,i,s,r,o,n,a,l=0,h=null;for(e in this.animationObjects)if(this.animationObjects.hasOwnProperty(e)&&utils_type.A.exists(this.animationObjects[e])){if(l+=1,(i=this.animationObjects[e]).animationPath&&(s=utils_type.A.isFunction(i.animationPath)?i.animationPath((new Date).getTime()-i.animationStart):i.animationPath.pop(),!utils_type.A.exists(s)||!utils_type.A.isArray(s)&&isNaN(s)?delete i.animationPath:(i.setPositionDirectly(constants.A.COORDS_BY_USER,s),i.fullUpdate(),h=i)),i.animationData){for(r in n=0,i.animationData)i.animationData.hasOwnProperty(r)&&(o=i.animationData[r].pop(),utils_type.A.exists(o)?(n+=1,(t={})[r]=o,i.setAttribute(t)):delete i.animationData[o]);0===n&&delete i.animationData}utils_type.A.exists(i.animationData)||utils_type.A.exists(i.animationPath)||(this.animationObjects[e]=null,delete this.animationObjects[e],utils_type.A.exists(i.animationCallback)&&(a=i.animationCallback,i.animationCallback=null,a()))}return 0===l?(window.clearInterval(this.animationIntervalCode),delete this.animationIntervalCode):this.update(h),this},migratePoint:function(t,e,i){var s,r,o,n,a,l,h=!1;for(r in t=this.select(t),e=this.select(e),utils_type.A.exists(t.label)&&(l=t.label.id,h=!0,this.removeObject(t.label)),t.childElements)if(t.childElements.hasOwnProperty(r)){for(o in n=!1,s=t.childElements[r])s.hasOwnProperty(o)&&s[o]===t&&(s[o]=e,n=!0);for(n&&delete t.childElements[r],a=0;a<s.parents.length;a++)s.parents[a]===t.id&&(s.parents[a]=e.id);e.addChild(s)}return i&&(h&&(delete e.childElements[l],delete e.descendants[l]),e.label&&this.removeObject(e.label),delete this.elementsByName[e.name],e.name=t.name,h&&e.createLabel()),this.removeObject(t),utils_type.A.exists(e.name)&&""!==e.name&&(this.elementsByName[e.name]=e),this.fullUpdate(),this},emulateColorblindness:function(t){var e,i;if(utils_type.A.exists(t)||(t="none"),this.currentCBDef===t)return this;for(e in this.objects)this.objects.hasOwnProperty(e)&&(i=this.objects[e],"none"!==t?("none"===this.currentCBDef&&(i.visPropOriginal={strokecolor:i.visProp.strokecolor,fillcolor:i.visProp.fillcolor,highlightstrokecolor:i.visProp.highlightstrokecolor,highlightfillcolor:i.visProp.highlightfillcolor}),i.setAttribute({strokecolor:utils_color.A.rgb2cb(utils_type.A.evaluate(i.visPropOriginal.strokecolor),t),fillcolor:utils_color.A.rgb2cb(utils_type.A.evaluate(i.visPropOriginal.fillcolor),t),highlightstrokecolor:utils_color.A.rgb2cb(utils_type.A.evaluate(i.visPropOriginal.highlightstrokecolor),t),highlightfillcolor:utils_color.A.rgb2cb(utils_type.A.evaluate(i.visPropOriginal.highlightfillcolor),t)})):utils_type.A.exists(i.visPropOriginal)&&jxg.A.extend(i.visProp,i.visPropOriginal));return this.currentCBDef=t,this.update(),this},select:function(t,e){var i,s,r,o,n=t;if(null===n)return n;if(utils_type.A.isString(n)&&""!==n)utils_type.A.exists(this.objects[n])?n=this.objects[n]:utils_type.A.exists(this.elementsByName[n])?n=this.elementsByName[n]:utils_type.A.exists(this.groups[n])&&(n=this.groups[n]);else if(!e&&(utils_type.A.isFunction(n)||utils_type.A.isObject(n)&&!utils_type.A.isFunction(n.setAttribute))){for(s={},o=(i=utils_type.A.filterElements(this.objectsList,n)).length,r=0;r<o;r++)s[i[r].id]=i[r];n=new composition(s)}else utils_type.A.isObject(n)&&utils_type.A.exists(n.id)&&!utils_type.A.exists(this.objects[n.id])&&(n=null);return n},hasPoint:function(t,e){var i=t,s=e,r=this.getBoundingBox();return utils_type.A.exists(t)&&utils_type.A.isArray(t.usrCoords)&&(i=t.usrCoords[1],s=t.usrCoords[2]),!!(utils_type.A.isNumber(i)&&utils_type.A.isNumber(s)&&r[0]<i&&i<r[2]&&r[1]>s&&s>r[3])},updateCSSTransforms:function(){var t=this.containerObj,e=t,i=t;if(this.cssTransMat=env.A.getCSSTransformMatrix(e),utils_type.A.exists(e.getRootNode)){for(e=e.parentNode===e.getRootNode()?e.parentNode.host:e.parentNode;e;)this.cssTransMat=math.A.matMatMult(env.A.getCSSTransformMatrix(e),this.cssTransMat),e=e.parentNode===e.getRootNode()?e.parentNode.host:e.parentNode;this.cssTransMat=math.A.inverse(this.cssTransMat)}else{for(e=e.offsetParent;e;){for(this.cssTransMat=math.A.matMatMult(env.A.getCSSTransformMatrix(e),this.cssTransMat),i=i.parentNode;i!==e;)this.cssTransMat=math.A.matMatMult(env.A.getCSSTransformMatrix(e),this.cssTransMat),i=i.parentNode;e=e.offsetParent}this.cssTransMat=math.A.inverse(this.cssTransMat)}return this},startSelectionMode:function(){this.selectingMode=!0,this.selectionPolygon.setAttribute({visible:!0}),this.selectingBox=[[0,0],[0,0]],this._setSelectionPolygonFromBox(),this.selectionPolygon.fullUpdate()},stopSelectionMode:function(){return this.selectingMode=!1,this.selectionPolygon.setAttribute({visible:!1}),[this.selectionPolygon.vertices[0].coords,this.selectionPolygon.vertices[2].coords]},_startSelecting:function(t){this.isSelecting=!0,this.selectingBox=[[t[0],t[1]],[t[0],t[1]]],this._setSelectionPolygonFromBox()},_moveSelecting:function(t){this.isSelecting&&(this.selectingBox[1]=[t[0],t[1]],this._setSelectionPolygonFromBox(),this.selectionPolygon.fullUpdate())},_stopSelecting:function(t){var e=this.getMousePosition(t);this.isSelecting=!1,this.selectingBox[1]=[e[0],e[1]],this._setSelectionPolygonFromBox()},_setSelectionPolygonFromBox:function(){var t=this.selectingBox[0],e=this.selectingBox[1];this.selectionPolygon.vertices[0].setPositionDirectly(jxg.A.COORDS_BY_SCREEN,[t[0],t[1]]),this.selectionPolygon.vertices[1].setPositionDirectly(jxg.A.COORDS_BY_SCREEN,[t[0],e[1]]),this.selectionPolygon.vertices[2].setPositionDirectly(jxg.A.COORDS_BY_SCREEN,[e[0],e[1]]),this.selectionPolygon.vertices[3].setPositionDirectly(jxg.A.COORDS_BY_SCREEN,[e[0],t[1]])},_testForSelection:function(t){this._isRequiredKeyPressed(t,"selection")&&(utils_type.A.exists(this.selectionPolygon)||this._createSelectionPolygon(this.attr),this.startSelectionMode())},_createSelectionPolygon:function(t){var e;return utils_type.A.exists(this.selectionPolygon)||!0===(e=utils_type.A.copyAttributes(t,src_options.A,"board","selection")).enabled&&(this.selectionPolygon=this.create("polygon",[[0,0],[0,0],[0,0],[0,0]],e)),this},__evt__attribute:function(t){},__evt__down:function(t){},__evt__mousedown:function(t){},__evt__pendown:function(t){},__evt__pointerdown:function(t){},__evt__touchstart:function(t){},__evt__up:function(t){},__evt__mouseup:function(t){},__evt__pointerup:function(t){},__evt__touchend:function(t){},__evt__click:function(t){},__evt__dblclick:function(t){},__evt__mouseclick:function(t){},__evt__mousedblclick:function(t){},__evt__pointerclick:function(t){},__evt__pointerdblclick:function(t){},__evt__move:function(t,e){},__evt__mousemove:function(t,e){},__evt__penmove:function(t,e){},__evt__pointermove:function(t,e){},__evt__touchmove:function(t,e){},__evt__keymove:function(t,e){},__evt__hit:function(t,e,i){},__evt__mousehit:function(t,e,i){},__evt__update:function(){},__evt__boundingbox:function(){},__evt__startselecting:function(){},__evt__mousestartselecting:function(){},__evt__pointerstartselecting:function(){},__evt__touchstartselecting:function(){},__evt__stopselecting:function(){},__evt__mousestopselecting:function(){},__evt__pointerstopselecting:function(){},__evt__touchstopselecting:function(){},__evt__moveselecting:function(){},__evt__mousemoveselecting:function(){},__evt__pointermoveselecting:function(){},__evt__touchmoveselecting:function(){},__evt:function(){},toFullscreen:function(t){var e,i,s,r,o=this.document;return t=t||this.container,this._fullscreen_inner_id=t,s=o.getElementById(t),e="fullscreenwrap_"+t,utils_type.A.exists(s._cssFullscreenStore)||(r=this.containerObj.getBoundingClientRect(),s._cssFullscreenStore={w:r.width,h:r.height}),o.getElementById(e)?i=o.getElementById(e):((i=document.createElement("div")).classList.add("JXG_wrap_private"),i.setAttribute("id",e),s.parentNode.insertBefore(i,s),i.appendChild(s)),i.requestFullscreen=i.requestFullscreen||i.webkitRequestFullscreen||i.mozRequestFullScreen||i.msRequestFullscreen,null===(void 0!==o.fullscreenElement?o.fullscreenElement:void 0!==o.webkitFullscreenElement?o.webkitFullscreenElement:o.msFullscreenElement)?i.requestFullscreen&&(i.requestFullscreen(),this.startFullscreenResizeObserver(i)):(this.stopFullscreenResizeObserver(i),utils_type.A.exists(document.exitFullscreen)?document.exitFullscreen():utils_type.A.exists(document.webkitExitFullscreen)&&document.webkitExitFullscreen()),this},fullscreenListener:function(t){var e,i,s,r=this.document;e=this._fullscreen_inner_id,utils_type.A.exists(e)&&(s=void 0!==r.fullscreenElement?r.fullscreenElement:void 0!==r.webkitFullscreenElement?r.webkitFullscreenElement:r.msFullscreenElement,i=r.getElementById(e),s?(i._cssFullscreenStore.id=s.id,i._cssFullscreenStore.isFullscreen=!0,i._cssFullscreenStore.margin=i.style.margin,i._cssFullscreenStore.width=i.style.width,i._cssFullscreenStore.height=i.style.height,i._cssFullscreenStore.transform=i.style.transform,i.style.width=i._cssFullscreenStore.w+"px",i.style.height=i._cssFullscreenStore.h+"px",i.style.margin="",env.A.scaleJSXGraphDiv(s.id,e,r,utils_type.A.evaluate(this.attr.fullscreen.scale)),s=null):utils_type.A.exists(i._cssFullscreenStore)&&(i._cssFullscreenStore.isFullscreen=!1,i.style.margin=i._cssFullscreenStore.margin,i.style.width=i._cssFullscreenStore.width,i.style.height=i._cssFullscreenStore.height,i.style.transform=i._cssFullscreenStore.transform,i._cssFullscreenStore=null,i.parentElement.replaceWith(i)),this.updateCSSTransforms())},startFullscreenResizeObserver:function(t){var e=this;return env.A.isBrowser&&this.attr.resize&&this.attr.resize.enabled?(this.resizeObserver=new ResizeObserver((function(i){var s,r,o=e.document;e._isResizing||(e._isResizing=!0,window.setTimeout((function(){try{s=e._fullscreen_inner_id,null!==(r=void 0!==o.fullscreenElement?o.fullscreenElement:void 0!==o.webkitFullscreenElement?o.webkitFullscreenElement:o.msFullscreenElement)&&env.A.scaleJSXGraphDiv(r.id,s,o,utils_type.A.evaluate(e.attr.fullscreen.scale))}catch(i){e.stopFullscreenResizeObserver(t)}finally{e._isResizing=!1}}),e.attr.resize.throttle))})),this.resizeObserver.observe(t),this):this},stopFullscreenResizeObserver:function(t){return env.A.isBrowser&&this.attr.resize&&this.attr.resize.enabled?(utils_type.A.exists(this.resizeObserver)&&this.resizeObserver.unobserve(t),this):this},addLogEntry:function(t,e,i){var s,r,o=this.userLog.length-1;return utils_type.A.exists(e.elementClass)&&(r=e.id),utils_type.A.evaluate(this.attr.logging.enabled)&&(s=(new Date).getTime(),o>=0&&this.userLog[o].type===t&&this.userLog[o].id===r&&s-this.userLog[o].end<500?(this.userLog[o].end=s,this.userLog[o].endpos=i):this.userLog.push({type:t,id:r,start:s,startpos:i,end:s,endpos:i,bbox:this.getBoundingBox(),canvas:[this.canvasWidth,this.canvasHeight],zoom:[this.zoomX,this.zoomY]})),this},createRoulette:function(t,e,i,s,r,o,n){var a=this;return new function(){var l,h=0,u=0,c=0,d=i,p=numerics.A.root((function(i){var s=t.X(d),r=t.Y(d),o=e.X(i),n=e.Y(i);return(s-o)*(s-o)+(r-n)*(r-n)}),[0,2*Math.PI]),_=0,f=0,A=a.create("transform",[function(){return h}],{type:"rotate"}),g=a.create("transform",[function(){return h},function(){return t.X(d)},function(){return t.Y(d)}],{type:"rotate"}),m=a.create("transform",[function(){return u},function(){return c}],{type:"translate"}),y=function(t,e,i){var s=numerics.A.D(t.X)(e),r=numerics.A.D(t.Y)(e),o=numerics.A.D(t.X)(i),n=numerics.A.D(t.Y)(i),a=numerics.A.D(t.X)(.5*(e+i)),l=numerics.A.D(t.Y)(.5*(e+i)),h=math.A.hypot(s,r),u=math.A.hypot(o,n);return(h+4*math.A.hypot(a,l)+u)*(i-e)/6},b=function(t){return l-y(e,p,t)},v=Math.PI/18,C=9*v,P=null;return this.rolling=function(){var i,o,P,x,E;l=y(t,d,_=d+r*s),f=numerics.A.root(b,p),i=new complex(t.X(_),t.Y(_)),o=new complex(e.X(f),e.Y(f)),P=new complex(numerics.A.D(t.X)(_),numerics.A.D(t.Y)(_)),x=new complex(numerics.A.D(e.X)(f),numerics.A.D(e.Y)(f)),E=complex.C.div(P,x),h=Math.atan2(E.imaginary,E.real),E.div(complex.C.abs(E)),E.mult(o),u=i.real-E.real,c=i.imaginary-E.imaginary,h<-v&&h>-C?(h=-v,g.applyOnce(n)):h>v&&h<C?(h=v,g.applyOnce(n)):(A.applyOnce(n),m.applyOnce(n),d=_,p=f),a.update()},this.start=function(){return o>0&&(P=window.setInterval(this.rolling,o)),this},this.stop=function(){return window.clearInterval(P),this},this}}});var base_board=jxg.A.Board;jxg.A.SVGRenderer=function(t,e){var i;for(this.type="svg",this.isIE=-1!==navigator.appVersion.indexOf("MSIE")||navigator.userAgent.match(/Trident\//),this.svgRoot=null,this.svgNamespace="http://www.w3.org/2000/svg",this.xlinkNamespace="http://www.w3.org/1999/xlink",this.container=t,this.container.style.MozUserSelect="none",this.container.style.userSelect="none",this.container.style.overflow="hidden",""===this.container.style.position&&(this.container.style.position="relative"),this.svgRoot=this.container.ownerDocument.createElementNS(this.svgNamespace,"svg"),this.svgRoot.style.overflow="hidden",this.svgRoot.style.display="block",this.resize(e.width,e.height),this.container.appendChild(this.svgRoot),this.defs=this.container.ownerDocument.createElementNS(this.svgNamespace,"defs"),this.svgRoot.appendChild(this.defs),this.createShadowFilter=function(t,e,i,s,r,o){var n,a,l,h,u,c=this.container.ownerDocument.createElementNS(this.svgNamespace,"filter");return c.setAttributeNS(null,"id",t),c.setAttributeNS(null,"width","300%"),c.setAttributeNS(null,"height","300%"),c.setAttributeNS(null,"filterUnits","userSpaceOnUse"),(n=this.container.ownerDocument.createElementNS(this.svgNamespace,"feOffset")).setAttributeNS(null,"in","SourceGraphic"),n.setAttributeNS(null,"result","offOut"),n.setAttributeNS(null,"dx",o[0]),n.setAttributeNS(null,"dy",o[1]),c.appendChild(n),(a=this.container.ownerDocument.createElementNS(this.svgNamespace,"feColorMatrix")).setAttributeNS(null,"in","offOut"),a.setAttributeNS(null,"result","colorOut"),a.setAttributeNS(null,"type","matrix"),"none"===e||!utils_type.A.isArray(e)||e.length<3?a.setAttributeNS(null,"values","0.1 0 0 0 0 0 0.1 0 0 0 0 0 0.1 0 0 0 0 0 "+i+" 0"):(e[0]/=255,e[1]/=255,e[2]/=255,u=s+" 0 0 0 "+e[0]+" 0 "+s+" 0 0 "+e[1]+" 0 0 "+s+" 0 "+e[2]+" 0 0 0 "+i+" 0",a.setAttributeNS(null,"values",u)),c.appendChild(a),(l=this.container.ownerDocument.createElementNS(this.svgNamespace,"feGaussianBlur")).setAttributeNS(null,"in","colorOut"),l.setAttributeNS(null,"result","blurOut"),l.setAttributeNS(null,"stdDeviation",r),c.appendChild(l),(h=this.container.ownerDocument.createElementNS(this.svgNamespace,"feBlend")).setAttributeNS(null,"in","SourceGraphic"),h.setAttributeNS(null,"in2","blurOut"),h.setAttributeNS(null,"mode","normal"),c.appendChild(h),c},this.uniqName=function(){return this.container.id+"_"+Array.prototype.slice.call(arguments).join("_")},this.toStr=function(){var t=Array.prototype.slice.call(arguments).join("");return utils_type.A.exists(CSS)&&utils_type.A.exists(CSS.escape)&&(t=CSS.escape(t)),t},this.toURL=function(){return"url(#"+this.toStr.apply(this,arguments)+")"},this.defs.appendChild(this.createShadowFilter(this.uniqName("f1"),"none",1,.1,3,[5,5])),this.layer=[],i=0;i<src_options.A.layer.numlayers;i++)this.layer[i]=this.container.ownerDocument.createElementNS(this.svgNamespace,"g"),this.svgRoot.appendChild(this.layer[i]);try{this.foreignObjLayer=this.container.ownerDocument.createElementNS(this.svgNamespace,"foreignObject"),this.foreignObjLayer.setAttribute("display","none"),this.foreignObjLayer.setAttribute("x",0),this.foreignObjLayer.setAttribute("y",0),this.foreignObjLayer.setAttribute("width","100%"),this.foreignObjLayer.setAttribute("height","100%"),this.foreignObjLayer.setAttribute("id",this.uniqName("foreignObj")),this.svgRoot.appendChild(this.foreignObjLayer),this.supportsForeignObject=!0}catch(t){this.supportsForeignObject=!1}},jxg.A.SVGRenderer.prototype=new renderer_abstract,jxg.A.extend(jxg.A.SVGRenderer.prototype,{_createArrowHead:function(t,e,i){var s,r,o,n,a=t.id+"Triangle";return utils_type.A.exists(e)&&(a+=e),utils_type.A.exists(i)&&(a+=i),(s=this.createPrim("marker",a)).setAttributeNS(null,"stroke",utils_type.A.evaluate(t.visProp.strokecolor)),s.setAttributeNS(null,"stroke-opacity",utils_type.A.evaluate(t.visProp.strokeopacity)),s.setAttributeNS(null,"fill",utils_type.A.evaluate(t.visProp.strokecolor)),s.setAttributeNS(null,"fill-opacity",utils_type.A.evaluate(t.visProp.strokeopacity)),s.setAttributeNS(null,"stroke-width",0),s.setAttributeNS(null,"orient","auto"),s.setAttributeNS(null,"markerUnits","strokeWidth"),r=this.container.ownerDocument.createElementNS(this.svgNamespace,"path"),n=5,"Start"===e?(o=0,2===i?r.setAttributeNS(null,"d","M 10,0 L 0,5 L 10,10 L 5,5 z"):3===i?r.setAttributeNS(null,"d","M 0,0 L 3.33,0 L 3.33,10 L 0,10 z"):4===i?(n=3.31,r.setAttributeNS(null,"d","M 0.00,3.31 C 3.53,3.84 7.13,4.50 10.00,6.63 C 9.33,5.52 8.67,4.42 8.00,3.31 C 8.67,2.21 9.33,1.10 10.00,0.00 C 7.13,2.13 3.53,2.79 0.00,3.31")):5===i?(n=3.28,r.setAttributeNS(null,"d","M 0.00,3.28 C 3.39,4.19 6.81,5.07 10.00,6.55 C 9.38,5.56 9.00,4.44 9.00,3.28 C 9.00,2.11 9.38,0.99 10.00,0.00 C 6.81,1.49 3.39,2.37 0.00,3.28")):6===i?(n=2.84,r.setAttributeNS(null,"d","M 0.00,2.84 C 3.39,3.59 6.79,4.35 10.00,5.68 C 9.67,4.73 9.33,3.78 9.00,2.84 C 9.33,1.89 9.67,0.95 10.00,0.00 C 6.79,1.33 3.39,2.09 0.00,2.84")):7===i?(n=5.2,r.setAttributeNS(null,"d","M 0.00,5.20 C 4.04,5.20 7.99,6.92 10.00,10.39 M 10.00,0.00 C 7.99,3.47 4.04,5.20 0.00,5.20")):r.setAttributeNS(null,"d","M 10,0 L 0,5 L 10,10 z"),t.elementClass===constants.A.OBJECT_CLASS_LINE&&(o=2===i?4.9:3===i?3.3:4===i||5===i||6===i?6.66:7===i?0:10)):(o=10,2===i?r.setAttributeNS(null,"d","M 0,0 L 10,5 L 0,10 L 5,5 z"):3===i?(o=3.3,r.setAttributeNS(null,"d","M 0,0 L 3.33,0 L 3.33,10 L 0,10 z")):4===i?(n=3.31,r.setAttributeNS(null,"d","M 10.00,3.31 C 6.47,3.84 2.87,4.50 0.00,6.63 C 0.67,5.52 1.33,4.42 2.00,3.31 C 1.33,2.21 0.67,1.10 0.00,0.00 C 2.87,2.13 6.47,2.79 10.00,3.31")):5===i?(n=3.28,r.setAttributeNS(null,"d","M 10.00,3.28 C 6.61,4.19 3.19,5.07 0.00,6.55 C 0.62,5.56 1.00,4.44 1.00,3.28 C 1.00,2.11 0.62,0.99 0.00,0.00 C 3.19,1.49 6.61,2.37 10.00,3.28")):6===i?(n=2.84,r.setAttributeNS(null,"d","M 10.00,2.84 C 6.61,3.59 3.21,4.35 0.00,5.68 C 0.33,4.73 0.67,3.78 1.00,2.84 C 0.67,1.89 0.33,0.95 0.00,0.00 C 3.21,1.33 6.61,2.09 10.00,2.84")):7===i?(n=5.2,r.setAttributeNS(null,"d","M 10.00,5.20 C 5.96,5.20 2.01,6.92 0.00,10.39 M 0.00,0.00 C 2.01,3.47 5.96,5.20 10.00,5.20")):r.setAttributeNS(null,"d","M 0,0 L 10,5 L 0,10 z"),t.elementClass===constants.A.OBJECT_CLASS_LINE&&(o=2===i?5.1:3===i?.02:4===i||5===i||6===i?3.33:7===i?10:.05)),7===i&&(s.setAttributeNS(null,"fill","none"),s.setAttributeNS(null,"stroke-width",1)),s.setAttributeNS(null,"refY",n),s.setAttributeNS(null,"refX",o),s.appendChild(r),s},_setArrowColor:function(t,e,i,s,r){t&&(utils_type.A.isString(e)&&(7!==r?this._setAttribute((function(){t.setAttributeNS(null,"stroke",e),t.setAttributeNS(null,"fill",e),t.setAttributeNS(null,"stroke-opacity",i),t.setAttributeNS(null,"fill-opacity",i)}),s.visPropOld.fillcolor):this._setAttribute((function(){t.setAttributeNS(null,"fill","none"),t.setAttributeNS(null,"stroke",e),t.setAttributeNS(null,"stroke-opacity",i)}),s.visPropOld.fillcolor)),this.isIE&&s.rendNode.parentNode.insertBefore(s.rendNode,s.rendNode))},_setArrowWidth:function(t,e,i,s){var r,o;t&&(o=(r=e)*s,t.setAttributeNS(null,"viewBox","0 0 "+10*r+" "+10*r),t.setAttributeNS(null,"markerHeight",o),t.setAttributeNS(null,"markerWidth",o),t.setAttributeNS(null,"display","inherit"),this.isIE&&i.parentNode.insertBefore(i,i))},updateTicks:function(t){var e,i,s,r,o,n,a,l,h="",u=t.ticks.length,c=!0;for(e=0;e<u;e++){for(o=(s=t.ticks[e])[0],n=s[1],a=o.length,l=" M "+o[0]+" "+n[0],utils_type.A.isNumber(o[0])||(c=!1),i=1;c&&i<a;++i)utils_type.A.isNumber(o[i])?l+=" L "+o[i]+" "+n[i]:c=!1;c&&(h+=l)}r=t.rendNode,utils_type.A.exists(r)||(r=this.createPrim("path",t.id),this.appendChildPrim(r,utils_type.A.evaluate(t.visProp.layer)),t.rendNode=r),r.setAttributeNS(null,"stroke",utils_type.A.evaluate(t.visProp.strokecolor)),r.setAttributeNS(null,"fill","none"),r.setAttributeNS(null,"stroke-opacity",utils_type.A.evaluate(t.visProp.strokeopacity)),r.setAttributeNS(null,"stroke-width",utils_type.A.evaluate(t.visProp.strokewidth)),this.updatePathPrim(r,h,t.board),this.setObjectViewport(t)},displayCopyright:function(t,e){var i,s=this.createPrim("text","licenseText");s.setAttributeNS(null,"x","20px"),s.setAttributeNS(null,"y",2+e+"px"),s.setAttributeNS(null,"style","font-family:Arial,Helvetica,sans-serif; font-size:"+e+"px; fill:#356AA0; opacity:0.3;"),i=this.container.ownerDocument.createTextNode(t),s.appendChild(i),this.appendChildPrim(s,0)},drawInternalText:function(t){var e=this.createPrim("text",t.id);return e.style.whiteSpace="nowrap",t.rendNodeText=this.container.ownerDocument.createTextNode(""),e.appendChild(t.rendNodeText),this.appendChildPrim(e,utils_type.A.evaluate(t.visProp.layer)),e},updateInternalText:function(t){var e,i=t.plaintext,s=t.getAnchorX(),r=t.getAnchorY();t.rendNode.getAttributeNS(null,"class")!==t.visProp.cssclass&&(t.rendNode.setAttributeNS(null,"class",utils_type.A.evaluate(t.visProp.cssclass)),t.needsSizeUpdate=!0),isNaN(t.coords.scrCoords[1]+t.coords.scrCoords[2])||(e=t.coords.scrCoords[1],t.visPropOld.left!==s+e&&(t.rendNode.setAttributeNS(null,"x",e+"px"),"left"===s?t.rendNode.setAttributeNS(null,"text-anchor","start"):"right"===s?t.rendNode.setAttributeNS(null,"text-anchor","end"):"middle"===s&&t.rendNode.setAttributeNS(null,"text-anchor","middle"),t.visPropOld.left=s+e),e=t.coords.scrCoords[2],t.visPropOld.top!==r+e&&(t.rendNode.setAttributeNS(null,"y",e+.5*this.vOffsetText+"px"),"bottom"===r?(t.rendNode.setAttributeNS(null,"dy","0"),t.rendNode.setAttributeNS(null,"dominant-baseline","auto")):"top"===r?(t.rendNode.setAttributeNS(null,"dy","1.6ex"),t.rendNode.setAttributeNS(null,"dominant-baseline","auto")):"middle"===r&&(t.rendNode.setAttributeNS(null,"dy","0.6ex"),t.rendNode.setAttributeNS(null,"dominant-baseline","auto")),t.visPropOld.top=r+e)),t.htmlStr!==i&&(t.rendNodeText.data=i,t.htmlStr=i),this.transformImage(t,t.transformations)},updateInternalTextStyle:function(t,e,i,s){this.setObjectViewport(t),this.setObjectFillColor(t,e,i)},drawImage:function(t){var e=this.createPrim("image",t.id);e.setAttributeNS(null,"preserveAspectRatio","none"),this.appendChildPrim(e,utils_type.A.evaluate(t.visProp.layer)),t.rendNode=e,this.updateImage(t)},transformImage:function(t,e){var i,s,r,o,n=t.rendNode,a="";if(e.length>0&&-1===(i=[(s=this.joinTransforms(t,e))[1][1],s[2][1],s[1][2],s[2][2],s[1][0],s[2][0]].join(",")).indexOf("NaN"))if(a+=" matrix("+i+") ",t.elementClass===constants.A.OBJECT_CLASS_TEXT&&"html"===t.visProp.display){switch(n.style.transform=a,r=-t.coords.scrCoords[1],o=-t.coords.scrCoords[2],utils_type.A.evaluate(t.visProp.anchorx)){case"right":r+=t.size[0];break;case"middle":r+=.5*t.size[0]}switch(utils_type.A.evaluate(t.visProp.anchory)){case"bottom":o+=t.size[1];break;case"middle":o+=.5*t.size[1]}n.style["transform-origin"]=r+"px "+o+"px"}else n.setAttributeNS(null,"transform",a)},updateImageURL:function(t){var e=utils_type.A.evaluate(t.url);return t._src!==e&&(t.imgIsLoaded=!1,t.rendNode.setAttributeNS(this.xlinkNamespace,"xlink:href",e),t._src=e,!0)},updateImageStyle:function(t,e){var i=utils_type.A.evaluate(e?t.visProp.highlightcssclass:t.visProp.cssclass);t.rendNode.setAttributeNS(null,"class",i)},drawForeignObject:function(t){t.rendNode=this.appendChildPrim(this.createPrim("foreignObject",t.id),utils_type.A.evaluate(t.visProp.layer)),this.appendNodesToElement(t,"foreignObject"),this.updateForeignObject(t)},updateForeignObject:function(t){t._useUserSize?t.rendNode.style.overflow="hidden":t.rendNode.style.overflow="visible",this.updateRectPrim(t.rendNode,t.coords.scrCoords[1],t.coords.scrCoords[2]-t.size[1],t.size[0],t.size[1]),t.rendNode.innerHTML=t.content,this._updateVisual(t,{stroke:!0,dash:!0},!0)},appendChildPrim:function(t,e){return utils_type.A.exists(e)?e>=src_options.A.layer.numlayers&&(e=src_options.A.layer.numlayers-1):e=0,this.layer[e].appendChild(t),t},createPrim:function(t,e){var i=this.container.ownerDocument.createElementNS(this.svgNamespace,t);return i.setAttributeNS(null,"id",this.uniqName(e)),i.style.position="absolute","path"===t&&(i.setAttributeNS(null,"stroke-linecap","round"),i.setAttributeNS(null,"stroke-linejoin","round"),i.setAttributeNS(null,"fill-rule","evenodd")),i},remove:function(t){utils_type.A.exists(t)&&utils_type.A.exists(t.parentNode)&&t.parentNode.removeChild(t)},setLayer:function(t,e){utils_type.A.exists(e)?e>=src_options.A.layer.numlayers&&(e=src_options.A.layer.numlayers-1):e=0,this.layer[e].appendChild(t.rendNode)},makeArrows:function(t,e){var i,s,r=e.evFirst,o=e.evLast;this.isIE&&t.visPropCalc.visible&&(r||o)?t.rendNode.parentNode.insertBefore(t.rendNode,t.rendNode):(i=t.rendNodeTriangleStart,r?(s=this.toStr(this.container.id,"_",t.id,"TriangleStart",e.typeFirst),utils_type.A.exists(i)&&i.id===s||(null===(i=this.container.ownerDocument.getElementById(s))&&(i=this._createArrowHead(t,"Start",e.typeFirst),this.defs.appendChild(i)),t.rendNodeTriangleStart=i,t.rendNode.setAttributeNS(null,"marker-start",this.toURL(s)))):(utils_type.A.exists(i)&&(this.remove(i),t.rendNodeTriangleStart=null),t.rendNode.setAttributeNS(null,"marker-start",null)),i=t.rendNodeTriangleEnd,o?(s=this.toStr(this.container.id,"_",t.id,"TriangleEnd",e.typeLast),utils_type.A.exists(i)&&i.id===s||(null===(i=this.container.ownerDocument.getElementById(s))&&(i=this._createArrowHead(t,"End",e.typeLast),this.defs.appendChild(i)),t.rendNodeTriangleEnd=i,t.rendNode.setAttributeNS(null,"marker-end",this.toURL(s)))):(utils_type.A.exists(i)&&(this.remove(i),t.rendNodeTriangleEnd=null),t.rendNode.setAttributeNS(null,"marker-end",null)))},updateEllipsePrim:function(t,e,i,s,r){var o;o=2e5,e=Math.abs(e)<o?e:o*e/Math.abs(e),i=Math.abs(i)<o?i:o*i/Math.abs(i),s=Math.abs(s)<o?s:o*s/Math.abs(s),r=Math.abs(r)<o?r:o*r/Math.abs(r),t.setAttributeNS(null,"cx",e),t.setAttributeNS(null,"cy",i),t.setAttributeNS(null,"rx",Math.abs(s)),t.setAttributeNS(null,"ry",Math.abs(r))},updateLinePrim:function(t,e,i,s,r){var o;o=2e5,isNaN(e+i+s+r)||(e=Math.abs(e)<o?e:o*e/Math.abs(e),i=Math.abs(i)<o?i:o*i/Math.abs(i),s=Math.abs(s)<o?s:o*s/Math.abs(s),r=Math.abs(r)<o?r:o*r/Math.abs(r),t.setAttributeNS(null,"x1",e),t.setAttributeNS(null,"y1",i),t.setAttributeNS(null,"x2",s),t.setAttributeNS(null,"y2",r))},updatePathPrim:function(t,e){""===e&&(e="M 0 0"),t.setAttributeNS(null,"d",e)},updatePathStringPoint:function(t,e,i){var s="",r=t.coords.scrCoords,o=e*Math.sqrt(3)*.5,n=.5*e;return"x"===i?s=" M "+(r[1]-e)+" "+(r[2]-e)+" L "+(r[1]+e)+" "+(r[2]+e)+" M "+(r[1]+e)+" "+(r[2]-e)+" L "+(r[1]-e)+" "+(r[2]+e):"+"===i?s=" M "+(r[1]-e)+" "+r[2]+" L "+(r[1]+e)+" "+r[2]+" M "+r[1]+" "+(r[2]-e)+" L "+r[1]+" "+(r[2]+e):"|"===i?s=" M "+r[1]+" "+(r[2]-e)+" L "+r[1]+" "+(r[2]+e):"-"===i?s=" M "+(r[1]-e)+" "+r[2]+" L "+(r[1]+e)+" "+r[2]:"<>"===i||"<<>>"===i?("<<>>"===i&&(e*=1.41),s=" M "+(r[1]-e)+" "+r[2]+" L "+r[1]+" "+(r[2]+e)+" L "+(r[1]+e)+" "+r[2]+" L "+r[1]+" "+(r[2]-e)+" Z "):"^"===i?s=" M "+r[1]+" "+(r[2]-e)+" L "+(r[1]-o)+" "+(r[2]+n)+" L "+(r[1]+o)+" "+(r[2]+n)+" Z ":"v"===i?s=" M "+r[1]+" "+(r[2]+e)+" L "+(r[1]-o)+" "+(r[2]-n)+" L "+(r[1]+o)+" "+(r[2]-n)+" Z ":">"===i?s=" M "+(r[1]+e)+" "+r[2]+" L "+(r[1]-n)+" "+(r[2]-o)+" L "+(r[1]-n)+" "+(r[2]+o)+" Z ":"<"===i&&(s=" M "+(r[1]-e)+" "+r[2]+" L "+(r[1]+n)+" "+(r[2]-o)+" L "+(r[1]+n)+" "+(r[2]+o)+" Z "),s},updatePathStringPrim:function(t){var e,i,s,r=" M ",o=r,n=5e3,a="";if(t.numberPoints<=0)return"";if(s=Math.min(t.points.length,t.numberPoints),1===t.bezierDegree)for(e=0;e<s;e++)i=t.points[e].scrCoords,isNaN(i[1])||isNaN(i[2])?o=r:(i[1]=Math.max(Math.min(i[1],n),-5e3),i[2]=Math.max(Math.min(i[2],n),-5e3),a+=o+i[1]+" "+i[2],o=" L ");else if(3===t.bezierDegree)for(e=0;e<s;)i=t.points[e].scrCoords,isNaN(i[1])||isNaN(i[2])?o=r:(a+=o+i[1]+" "+i[2]," C "===o&&(e+=1,a+=" "+(i=t.points[e].scrCoords)[1]+" "+i[2],e+=1,a+=" "+(i=t.points[e].scrCoords)[1]+" "+i[2]),o=" C "),e+=1;return a},updatePathStringBezierPrim:function(t){var e,i,s,r,o,n,a,l=" M ",h=l,u=5e3,c="",d=utils_type.A.evaluate(t.visProp.strokewidth),p="plot"!==utils_type.A.evaluate(t.visProp.curvetype);if(t.numberPoints<=0)return"";for(p&&t.board.options.curve.RDPsmoothing&&(t.points=numerics.A.RamerDouglasPeucker(t.points,.5)),a=Math.min(t.points.length,t.numberPoints),i=1;i<3;i++)for(h=l,e=0;e<a;e++)r=t.points[e].scrCoords,isNaN(r[1])||isNaN(r[2])?h=l:(r[1]=Math.max(Math.min(r[1],u),-5e3),r[2]=Math.max(Math.min(r[2],u),-5e3),h===l?c+=h+r[1]+" "+r[2]:(s=2*i,c+=[h,o+.333*(r[1]-o)+d*(s*Math.random()-i)," ",n+.333*(r[2]-n)+d*(s*Math.random()-i)," ",o+.666*(r[1]-o)+d*(s*Math.random()-i)," ",n+.666*(r[2]-n)+d*(s*Math.random()-i)," ",r[1]," ",r[2]].join("")),h=" C ",o=r[1],n=r[2]);return c},updatePolygonPrim:function(t,e){var i,s,r="",o=e.vertices.length;for(t.setAttributeNS(null,"stroke","none"),t.setAttributeNS(null,"fill-rule","evenodd"),"polygonalchain"===e.elType&&o++,i=0;i<o-1;i++){if(!e.vertices[i].isReal)return void t.setAttributeNS(null,"points","");r=r+(s=e.vertices[i].coords.scrCoords)[1]+","+s[2],i<o-2&&(r+=" ")}-1===r.indexOf("NaN")&&t.setAttributeNS(null,"points",r)},updateRectPrim:function(t,e,i,s,r){t.setAttributeNS(null,"x",e),t.setAttributeNS(null,"y",i),t.setAttributeNS(null,"width",s),t.setAttributeNS(null,"height",r)},setPropertyPrim:function(t,e,i){"stroked"!==e&&t.setAttributeNS(null,e,i)},display:function(t,e){var i;t&&t.rendNode&&(t.visPropOld.visible=e,i=t.rendNode,e?(i.setAttributeNS(null,"display","inline"),i.style.visibility="inherit"):(i.setAttributeNS(null,"display","none"),i.style.visibility="hidden"))},show:function(t){jxg.A.deprecated("Board.renderer.show()","Board.renderer.display()"),this.display(t,!0)},hide:function(t){jxg.A.deprecated("Board.renderer.hide()","Board.renderer.display()"),this.display(t,!1)},setBuffering:function(t,e){t.rendNode.setAttribute("buffered-rendering",e)},setDashStyle:function(t){var e=utils_type.A.evaluate(t.visProp.dash),i=utils_type.A.evaluate(t.visProp.dashscale)?.5*utils_type.A.evaluate(t.visProp.strokewidth):1,s=t.rendNode;e>0?s.setAttributeNS(null,"stroke-dasharray",this.dashArray[e-1].map((function(t){return t*i})).join(",")):s.hasAttributeNS(null,"stroke-dasharray")&&s.removeAttributeNS(null,"stroke-dasharray")},setGradient:function(t){var e,i,s,r=t.rendNode,o=utils_type.A.evaluate(t.visProp.gradient);"linear"===o||"radial"===o?(e=this.createPrim(o+"Gradient",t.id+"_gradient"),i=this.createPrim("stop",t.id+"_gradient1"),s=this.createPrim("stop",t.id+"_gradient2"),e.appendChild(i),e.appendChild(s),this.defs.appendChild(e),r.setAttributeNS(null,"style","fill:"+this.toURL(this.container.id+"_"+t.id+"_gradient")),t.gradNode1=i,t.gradNode2=s,t.gradNode=e):r.removeAttributeNS(null,"style")},updateGradientAngle:function(t,e){var i=1,s=Math.cos(e),r=Math.sin(e);Math.abs(s)>Math.abs(r)?i/=Math.abs(s):i/=Math.abs(r),s>=0?(t.setAttributeNS(null,"x1",0),t.setAttributeNS(null,"x2",s*i)):(t.setAttributeNS(null,"x1",-s*i),t.setAttributeNS(null,"x2",0)),r>=0?(t.setAttributeNS(null,"y1",0),t.setAttributeNS(null,"y2",r*i)):(t.setAttributeNS(null,"y1",-r*i),t.setAttributeNS(null,"y2",0))},updateGradientCircle:function(t,e,i,s,r,o,n){t.setAttributeNS(null,"cx",100*e+"%"),t.setAttributeNS(null,"cy",100*i+"%"),t.setAttributeNS(null,"r",100*s+"%"),t.setAttributeNS(null,"fx",100*r+"%"),t.setAttributeNS(null,"fy",100*o+"%"),t.setAttributeNS(null,"fr",100*n+"%")},updateGradient:function(t){var e,i,s=t.gradNode1,r=t.gradNode2,o=utils_type.A.evaluate(t.visProp.gradient);utils_type.A.exists(s)&&utils_type.A.exists(r)&&(i=(i=utils_type.A.evaluate(t.visProp.fillopacity))>0?i:0,e=utils_type.A.evaluate(t.visProp.fillcolor),s.setAttributeNS(null,"style","stop-color:"+e+";stop-opacity:"+i),r.setAttributeNS(null,"style","stop-color:"+utils_type.A.evaluate(t.visProp.gradientsecondcolor)+";stop-opacity:"+utils_type.A.evaluate(t.visProp.gradientsecondopacity)),s.setAttributeNS(null,"offset",100*utils_type.A.evaluate(t.visProp.gradientstartoffset)+"%"),r.setAttributeNS(null,"offset",100*utils_type.A.evaluate(t.visProp.gradientendoffset)+"%"),"linear"===o?this.updateGradientAngle(t.gradNode,utils_type.A.evaluate(t.visProp.gradientangle)):"radial"===o&&this.updateGradientCircle(t.gradNode,utils_type.A.evaluate(t.visProp.gradientcx),utils_type.A.evaluate(t.visProp.gradientcy),utils_type.A.evaluate(t.visProp.gradientr),utils_type.A.evaluate(t.visProp.gradientfx),utils_type.A.evaluate(t.visProp.gradientfy),utils_type.A.evaluate(t.visProp.gradientfr)))},setObjectTransition:function(t,e){var i,s,r,o=[],n=0,a=["rendNode","rendNodeTriangleStart","rendNodeTriangleEnd"];if(void 0===e&&(e=utils_type.A.evaluate(t.visProp.transitionduration)),i=utils_type.A.evaluate(t.visProp.transitionproperties),e!==t.visPropOld.transitionduration||i!==t.visPropOld.transitionproperties){for(utils_type.A.exists(i)&&(n=i.length),r=0;r<n;r++)o.push(i[r]+" "+e+"ms");for(s=o.join(", "),n=a.length,r=0;r<n;++r)t[a[r]]&&(t[a[r]].style.transition=s);t.visPropOld.transitionduration=e,t.visPropOld.transitionproperties=i}},setObjectViewport:function(t,e){var i,s,r,o,n,a,l,h,u,c=utils_type.A.evaluate(t.visProp.viewport),d=["rendNode"];for("inherit"===c&&(c=utils_type.A.evaluate(t.board.attr.viewport)),e&&(o=t.rendNode.getBoundingClientRect(),n=this.container.getBoundingClientRect(),l=parseFloat(c[1]),h=parseFloat(c[2]),u=parseFloat(c[3]),a=parseFloat(c[0]),utils_type.A.isString(c[1])&&c[1].indexOf("%")>0&&(l=n.height*l/100),utils_type.A.isString(c[2])&&c[2].indexOf("%")>0&&(h=n.width*h/100),utils_type.A.isString(c[3])&&c[3].indexOf("%")>0&&(u=n.height*u/100),utils_type.A.isString(c[0])&&c[0].indexOf("%")>0&&(a=n.width*a/100),l=parseFloat(n.top)-parseFloat(o.top)+l,h=parseFloat(o.right)-parseFloat(n.right)+h,u=parseFloat(o.bottom)-parseFloat(n.bottom)+u,c=[a=parseFloat(n.left)-parseFloat(o.left)+a,l,h,u]),i=["number"==typeof c[1]?c[1]+"px":c[1],"number"==typeof c[2]?c[2]+"px":c[2],"number"==typeof c[3]?c[3]+"px":c[3],"number"==typeof c[0]?c[0]+"px":c[0]].join(" "),r=d.length,s=0;s<r;++s)t[d[s]]&&(e?t[d[s]].style.clipPath="inset("+i+")":t[d[s]].setAttributeNS(null,"clip-path","view-box inset("+i+")"))},_setAttribute:function(t,e){""===e?t():window.setTimeout(t,1)},setObjectFillColor:function(t,e,i,s){var r,o,n,a,l=utils_type.A.evaluate(e),h=utils_type.A.evaluate(i),u=utils_type.A.evaluate(t.visProp.gradient);h=h>0?h:0,t.visPropOld.fillcolor===l&&t.visPropOld.fillopacity===h&&null===u||(utils_type.A.exists(l)&&!1!==l&&(9!==l.length?(o=l,a=h):(n=utils_color.A.rgba2rgbo(l),o=n[0],a=h*n[1]),r=void 0===s?t.rendNode:s,"none"!==o&&this._setAttribute((function(){r.setAttributeNS(null,"fill",o)}),t.visPropOld.fillcolor),t.type===jxg.A.OBJECT_TYPE_IMAGE?this._setAttribute((function(){r.setAttributeNS(null,"opacity",a)}),t.visPropOld.fillopacity):("none"===o?(a=0,r.setAttributeNS(null,"pointer-events","visibleStroke")):r.setAttributeNS(null,"pointer-events","visiblePainted"),this._setAttribute((function(){r.setAttributeNS(null,"fill-opacity",a)}),t.visPropOld.fillopacity)),"linear"!==u&&"radial"!==u||this.updateGradient(t)),t.visPropOld.fillcolor=l,t.visPropOld.fillopacity=h)},setObjectStrokeColor:function(t,e,i){var s,r,o,n,a=utils_type.A.evaluate(e),l=utils_type.A.evaluate(i);l=l>0?l:0,t.visPropOld.strokecolor===a&&t.visPropOld.strokeopacity===l||(utils_type.A.exists(a)&&!1!==a&&(9!==a.length?(s=a,o=l):(r=utils_color.A.rgba2rgbo(a),s=r[0],o=l*r[1]),n=t.rendNode,t.elementClass===constants.A.OBJECT_CLASS_TEXT?"html"===utils_type.A.evaluate(t.visProp.display)?this._setAttribute((function(){n.style.color=s,n.style.opacity=o}),t.visPropOld.strokecolor):this._setAttribute((function(){n.setAttributeNS(null,"style","fill:"+s),n.setAttributeNS(null,"style","fill-opacity:"+o)}),t.visPropOld.strokecolor):this._setAttribute((function(){n.setAttributeNS(null,"stroke",s),n.setAttributeNS(null,"stroke-opacity",o)}),t.visPropOld.strokecolor),t.elementClass!==constants.A.OBJECT_CLASS_CURVE&&t.elementClass!==constants.A.OBJECT_CLASS_LINE||(utils_type.A.evaluate(t.visProp.firstarrow)&&this._setArrowColor(t.rendNodeTriangleStart,s,o,t,t.visPropCalc.typeFirst),utils_type.A.evaluate(t.visProp.lastarrow)&&this._setArrowColor(t.rendNodeTriangleEnd,s,o,t,t.visPropCalc.typeLast))),t.visPropOld.strokecolor=a,t.visPropOld.strokeopacity=l)},setObjectStrokeWidth:function(t,e){var i,s=utils_type.A.evaluate(e);isNaN(s)||t.visPropOld.strokewidth===s||(i=t.rendNode,this.setPropertyPrim(i,"stroked","true"),utils_type.A.exists(s)&&this.setPropertyPrim(i,"stroke-width",s+"px"),t.visPropOld.strokewidth=s)},setLineCap:function(t){var e=utils_type.A.evaluate(t.visProp.linecap);void 0!==e&&""!==e&&t.visPropOld.linecap!==e&&utils_type.A.exists(t.rendNode)&&(this.setPropertyPrim(t.rendNode,"stroke-linecap",e),t.visPropOld.linecap=e)},setShadow:function(t){var e,i,s,r,o,n,a,l,h=utils_type.A.evaluate(t.visProp.shadow),u=!0,c=!1;(e=JSON.stringify(h))!==t.visPropOld.shadow&&("boolean"==typeof h?(u=!0,c=h,i="none",s=3,r=.1,o=[5,5],n=1):utils_type.A.evaluate(h.enabled)?(u=!1,c=!0,i=jxg.A.rgbParser(utils_type.A.evaluate(h.color)),s=utils_type.A.evaluate(h.blur),r=utils_type.A.evaluate(h.blend),o=utils_type.A.evaluate(h.offset),n=utils_type.A.evaluate(h.opacity)):c=!1,utils_type.A.exists(t.rendNode)&&(c?u?t.rendNode.setAttributeNS(null,"filter",this.toURL(this.container.id+"_f1")):((l=this.container.ownerDocument.getElementById(a))&&this.defs.removeChild(l),a=t.rendNode.id+"_f1",this.defs.appendChild(this.createShadowFilter(a,i,n,r,s,o)),t.rendNode.setAttributeNS(null,"filter",this.toURL(a))):t.rendNode.removeAttributeNS(null,"filter")),t.visPropOld.shadow=e)},suspendRedraw:function(){this.suspendHandle=this.svgRoot.suspendRedraw(1e4)},unsuspendRedraw:function(){this.svgRoot.unsuspendRedraw(this.suspendHandle)},resize:function(t,e){this.svgRoot.setAttribute("width",parseFloat(t)),this.svgRoot.setAttribute("height",parseFloat(e))},createTouchpoints:function(t){var e,i,s,r;for(this.touchpoints=[],e=0;e<t;e++)i="touchpoint1_"+e,r=this.createPrim("path",i),this.appendChildPrim(r,19),r.setAttributeNS(null,"d","M 0 0"),this.touchpoints.push(r),this.setPropertyPrim(r,"stroked","true"),this.setPropertyPrim(r,"stroke-width","1px"),r.setAttributeNS(null,"stroke","#000000"),r.setAttributeNS(null,"stroke-opacity",1),r.setAttributeNS(null,"display","none"),s="touchpoint2_"+e,r=this.createPrim("ellipse",s),this.appendChildPrim(r,19),this.updateEllipsePrim(r,0,0,0,0),this.touchpoints.push(r),this.setPropertyPrim(r,"stroked","true"),this.setPropertyPrim(r,"stroke-width","1px"),r.setAttributeNS(null,"stroke","#000000"),r.setAttributeNS(null,"stroke-opacity",1),r.setAttributeNS(null,"fill","#ffffff"),r.setAttributeNS(null,"fill-opacity",0),r.setAttributeNS(null,"display","none")},showTouchpoint:function(t){this.touchpoints&&t>=0&&2*t<this.touchpoints.length&&(this.touchpoints[2*t].setAttributeNS(null,"display","inline"),this.touchpoints[2*t+1].setAttributeNS(null,"display","inline"))},hideTouchpoint:function(t){this.touchpoints&&t>=0&&2*t<this.touchpoints.length&&(this.touchpoints[2*t].setAttributeNS(null,"display","none"),this.touchpoints[2*t+1].setAttributeNS(null,"display","none"))},updateTouchpoint:function(t,e){var i,s;this.touchpoints&&t>=0&&2*t<this.touchpoints.length&&(i=e[0],s=e[1],this.touchpoints[2*t].setAttributeNS(null,"d","M "+(i-37)+" "+s+" L "+(i+37)+" "+s+" M "+i+" "+(s-37)+" L "+i+" "+(s+37)),this.updateEllipsePrim(this.touchpoints[2*t+1],e[0],e[1],25,25))},_getValuesOfDOMElements:function(t){var e=[];if(1===t.nodeType)for(t=t.firstChild;t;)void 0!==t.id&&void 0!==t.value&&e.push([t.id,t.value]),utils_type.A.concat(e,this._getValuesOfDOMElements(t)),t=t.nextSibling;return e},_getImgDataURL:function(t){var e,i,s,r,o,n;if((i=(e=t.getElementsByTagName("image")).length)>0)for(s=document.createElement("canvas"),n=0;n<i;n++){e[n].setAttribute("crossorigin","anonymous"),r=s.getContext("2d"),s.width=e[n].getAttribute("width"),s.height=e[n].getAttribute("height");try{r.drawImage(e[n],0,0,s.width,s.height),o=s.toDataURL(),e[n].setAttribute("xlink:href",o)}catch(t){console.log("CORS problem! Image can not be used",t)}}return!0},dumpToDataURI:function(t){var e,i,s,r=this.svgRoot,o=window.btoa||base64.encode,n=[];if(this.container.hasChildNodes()&&utils_type.A.exists(this.foreignObjLayer)&&!t)for(this.foreignObjLayer.setAttribute("display","inline");r.nextSibling;)utils_type.A.concat(n,this._getValuesOfDOMElements(r.nextSibling)),this.foreignObjLayer.appendChild(r.nextSibling);if(this._getImgDataURL(r),r.setAttribute("xmlns","http://www.w3.org/2000/svg"),e=(new XMLSerializer).serializeToString(r),!0!==t)for(s=n.length,i=0;i<s;i++)e=e.replace('id="'+n[i][0]+'"','id="'+n[i][0]+'" value="'+n[i][1]+'"');if((e.match(/xmlns="http:\/\/www.w3.org\/2000\/svg"/g)||[]).length>1&&(e=e.replace(/xmlns="http:\/\/www.w3.org\/2000\/svg"/g,"")),e=(e=e.replace(/ /g," ")).replace(/url\("(.*)"\)/g,"url($1)"),utils_type.A.exists(this.foreignObjLayer)&&this.foreignObjLayer.hasChildNodes()){for(;this.foreignObjLayer.firstChild;)this.container.appendChild(this.foreignObjLayer.firstChild);this.foreignObjLayer.setAttribute("display","none")}return"data:image/svg+xml;base64,"+o(unescape(encodeURIComponent(e)))},dumpToCanvas:function(t,e,i,s){var r,o,n,a;return(n=this.container.ownerDocument.getElementById(t)).width=n.width,a=n.getContext("2d"),void 0!==e&&void 0!==i&&(n.style.width=parseFloat(e)+"px",n.style.height=parseFloat(i)+"px",n.setAttribute("width",parseFloat(e)),n.setAttribute("height",parseFloat(i))),o=new Image,r=this.dumpToDataURI(s),o.src=r,"Promise"in window?new Promise((function(t,s){try{o.onload=function(){a.drawImage(o,0,0,e,i),t()}}catch(t){s(t)}})):(o.onload=function(){window.setTimeout((function(){try{a.drawImage(o,0,0,e,i)}catch(t){console.log("screenshots not longer supported on IE")}}),200)},this)},screenshot:function(t,e,i){var s,r,o,n,a,l,h,u,c,d,p,_,f=this.container.ownerDocument,A=this.container.parentNode,g=t.attr.screenshot,m=!1;return"no"===this.type||(h=g.scale*this.container.getBoundingClientRect().width,u=g.scale*this.container.getBoundingClientRect().height,void 0===e||""===e?(m=!0,(n=new Image).style.width=h+"px",n.style.height=u+"px"):(m=!1,n=f.getElementById(e)),m&&((s=f.createElement("div")).style.cssText=g.css,s.style.width=h+"px",s.style.height=u+"px",s.style.zIndex=this.container.style.zIndex+120,s.style.position="absolute",s.style.top=this.container.offsetTop+"px",s.style.left=this.container.offsetLeft+"px"),r=f.createElement("canvas"),o=Math.random().toString(36).slice(2,7),r.setAttribute("id",o),r.setAttribute("width",h),r.setAttribute("height",u),r.style.width=h+"px",r.style.height=h+"px",r.style.display="none",A.appendChild(r),m&&(a=f.createElement("span"),l=f.createTextNode("✖"),a.style.cssText=g.cssButton,a.appendChild(l),a.onclick=function(){s.parentNode.removeChild(s)},s.appendChild(n),s.appendChild(a),A.insertBefore(s,this.container.nextSibling)),c=f.getElementById(this.uniqName("navigationbar")),utils_type.A.exists(c)&&(d=c.style.display,c.style.display="none",p=this.removeToInsertLater(c)),_=function(){n.src=r.toDataURL("image/png"),A.removeChild(r)},"Promise"in window?this.dumpToCanvas(o,h,u,i).then(_):(this.dumpToCanvas(o,h,u,i),window.setTimeout(_,200)),utils_type.A.exists(c)&&(c.style.display=d,p())),this}});var svg=jxg.A.SVGRenderer;jxg.A.VMLRenderer=function(t){this.type="vml",this.container=t,this.container.style.overflow="hidden",""===this.container.style.position&&(this.container.style.position="relative"),this.container.onselectstart=function(){return!1},this.resolution=10,utils_type.A.exists(jxg.A.vmlStylesheet)||(t.ownerDocument.namespaces.add("jxgvml","urn:schemas-microsoft-com:vml"),jxg.A.vmlStylesheet=this.container.ownerDocument.createStyleSheet(),jxg.A.vmlStylesheet.addRule(".jxgvml","behavior:url(#default#VML)"));try{t.ownerDocument.namespaces.jxgvml||t.ownerDocument.namespaces.add("jxgvml","urn:schemas-microsoft-com:vml"),this.createNode=function(e){return t.ownerDocument.createElement("<jxgvml:"+e+' class="jxgvml">')}}catch(e){this.createNode=function(e){return t.ownerDocument.createElement("<"+e+' xmlns="urn:schemas-microsoft.com:vml" class="jxgvml">')}}this.dashArray=["Solid","1 1","ShortDash","Dash","LongDash","ShortDashDot","LongDashDot"]},jxg.A.VMLRenderer.prototype=new renderer_abstract,jxg.A.extend(jxg.A.VMLRenderer.prototype,{_setAttr:function(t,e,i,s){try{8===this.container.ownerDocument.documentMode?t[e]=i:t.setAttribute(e,i,s)}catch(t){jxg.A.debug("_setAttr: "+e+" "+i+"<br>\n")}},updateTicks:function(t){var e,i,s,r,o,n=this.resolution,a=[];for(i=t.ticks.length,e=0;e<i;e++)r=(s=t.ticks[e])[0],o=s[1],utils_type.A.isNumber(r[0])&&utils_type.A.isNumber(r[1])&&a.push(" m "+Math.round(n*r[0])+", "+Math.round(n*o[0])+" l "+Math.round(n*r[1])+", "+Math.round(n*o[1])+" ");utils_type.A.exists(t.rendNode)||(t.rendNode=this.createPrim("path",t.id),this.appendChildPrim(t.rendNode,utils_type.A.evaluate(t.visProp.layer))),this._setAttr(t.rendNode,"stroked","true"),this._setAttr(t.rendNode,"strokecolor",utils_type.A.evaluate(t.visProp.strokecolor),1),this._setAttr(t.rendNode,"strokeweight",utils_type.A.evaluate(t.visProp.strokewidth)),this._setAttr(t.rendNodeStroke,"opacity",100*utils_type.A.evaluate(t.visProp.strokeopacity)+"%"),this.updatePathPrim(t.rendNode,a,t.board)},displayCopyright:function(t,e){var i,s;(i=this.createNode("textbox")).style.position="absolute",this._setAttr(i,"id",this.container.id+"_licenseText"),i.style.left=20,i.style.top=2,i.style.fontSize=e,i.style.color="#356AA0",i.style.fontFamily="Arial,Helvetica,sans-serif",this._setAttr(i,"opacity","30%"),i.style.filter="progid:DXImageTransform.Microsoft.Matrix(M11='1.0', sizingMethod='auto expand', enabled = false) progid:DXImageTransform.Microsoft.Alpha(opacity = 30, enabled = true)",s=this.container.ownerDocument.createTextNode(t),i.appendChild(s),this.appendChildPrim(i,0)},drawInternalText:function(t){var e;return(e=this.createNode("textbox")).style.position="absolute",t.rendNodeText=this.container.ownerDocument.createTextNode(""),e.appendChild(t.rendNodeText),this.appendChildPrim(e,9),e.style.filter="progid:DXImageTransform.Microsoft.Matrix(M11='1.0', sizingMethod='auto expand', enabled = false) progid:DXImageTransform.Microsoft.Alpha(opacity = 100, enabled = false)",e},updateInternalText:function(t){var e,i,s,r,o,n,a=t.plaintext,l=this.joinTransforms(t,t.transformations),h=[0,0],u=t.rendNode,c=[],d=t.getAnchorX(),p=t.getAnchorY();if(!isNaN(t.coords.scrCoords[1]+t.coords.scrCoords[2])){for("right"===d?h[0]=1:"middle"===d&&(h[0]=.5),"bottom"===p?h[1]=1:"middle"===p&&(h[1]=.5),c[0]=math.A.matVecMult(l,[1,t.coords.scrCoords[1]-h[0]*t.size[0],t.coords.scrCoords[2]+(1-h[1])*t.size[1]+this.vOffsetText]),c[0][1]/=c[0][0],c[0][2]/=c[0][0],c[1]=math.A.matVecMult(l,[1,t.coords.scrCoords[1]+(1-h[0])*t.size[0],t.coords.scrCoords[2]+(1-h[1])*t.size[1]+this.vOffsetText]),c[1][1]/=c[1][0],c[1][2]/=c[1][0],c[2]=math.A.matVecMult(l,[1,t.coords.scrCoords[1]+(1-h[0])*t.size[0],t.coords.scrCoords[2]-h[1]*t.size[1]+this.vOffsetText]),c[2][1]/=c[2][0],c[2][2]/=c[2][0],c[3]=math.A.matVecMult(l,[1,t.coords.scrCoords[1]-h[0]*t.size[0],t.coords.scrCoords[2]-h[1]*t.size[1]+this.vOffsetText]),c[3][1]/=c[3][0],c[3][2]/=c[3][0],i=c[0][1],r=c[0][1],s=c[0][2],o=c[0][2],n=1;n<4;n++)i=Math.max(i,c[n][1]),r=Math.min(r,c[n][1]),s=Math.max(s,c[n][2]),o=Math.min(o,c[n][2]);e=1===h[0]?Math.floor(t.board.canvasWidth-i):Math.floor(r),t.visPropOld.left!==d+e&&(1===h[0]?(t.rendNode.style.right=e+"px",t.rendNode.style.left="auto"):(t.rendNode.style.left=e+"px",t.rendNode.style.right="auto"),t.visPropOld.left=d+e),e=1===h[1]?Math.floor(t.board.canvasHeight-s):Math.floor(o),t.visPropOld.top!==p+e&&(1===h[1]?(t.rendNode.style.bottom=e+"px",t.rendNode.style.top="auto"):(t.rendNode.style.top=e+"px",t.rendNode.style.bottom="auto"),t.visPropOld.top=p+e)}t.htmlStr!==a&&(t.rendNodeText.data=a,t.htmlStr=a),u.filters.item(0).M11=l[1][1],u.filters.item(0).M12=l[1][2],u.filters.item(0).M21=l[2][1],u.filters.item(0).M22=l[2][2],u.filters.item(0).enabled=!0},drawImage:function(t){var e;(e=this.container.ownerDocument.createElement("img")).style.position="absolute",this._setAttr(e,"id",this.container.id+"_"+t.id),this.container.appendChild(e),this.appendChildPrim(e,utils_type.A.evaluate(t.visProp.layer)),e.style.filter="progid:DXImageTransform.Microsoft.Matrix(M11='1.0', sizingMethod='auto expand') progid:DXImageTransform.Microsoft.Alpha(opacity = 100, enabled = false)",t.rendNode=e,this.updateImage(t)},transformImage:function(t,e){var i,s,r,o,n,a,l=t.rendNode,h=[];if(e.length>0){for(i=this.joinTransforms(t,e),h[0]=math.A.matVecMult(i,t.coords.scrCoords),h[0][1]/=h[0][0],h[0][2]/=h[0][0],h[1]=math.A.matVecMult(i,[1,t.coords.scrCoords[1]+t.size[0],t.coords.scrCoords[2]]),h[1][1]/=h[1][0],h[1][2]/=h[1][0],h[2]=math.A.matVecMult(i,[1,t.coords.scrCoords[1]+t.size[0],t.coords.scrCoords[2]-t.size[1]]),h[2][1]/=h[2][0],h[2][2]/=h[2][0],h[3]=math.A.matVecMult(i,[1,t.coords.scrCoords[1],t.coords.scrCoords[2]-t.size[1]]),h[3][1]/=h[3][0],h[3][2]/=h[3][0],s=h[0][1],o=h[0][1],r=h[0][2],n=h[0][2],a=1;a<4;a++)s=Math.max(s,h[a][1]),o=Math.min(o,h[a][1]),r=Math.max(r,h[a][2]),n=Math.min(n,h[a][2]);l.style.left=Math.floor(o)+"px",l.style.top=Math.floor(n)+"px",l.filters.item(0).M11=i[1][1],l.filters.item(0).M12=i[1][2],l.filters.item(0).M21=i[2][1],l.filters.item(0).M22=i[2][2],l.filters.item(0).enabled=!0}},updateImageURL:function(t){var e=utils_type.A.evaluate(t.url);this._setAttr(t.rendNode,"src",e)},appendChildPrim:function(t,e){return utils_type.A.exists(e)||(e=0),t.style.zIndex=e,this.container.appendChild(t),t},appendNodesToElement:function(t,e){"shape"!==e&&"path"!==e&&"polygon"!==e||(t.rendNodePath=this.getElementById(t.id+"_path")),t.rendNodeFill=this.getElementById(t.id+"_fill"),t.rendNodeStroke=this.getElementById(t.id+"_stroke"),t.rendNodeShadow=this.getElementById(t.id+"_shadow"),t.rendNode=this.getElementById(t.id)},createPrim:function(t,e){var i,s,r=this.createNode("fill"),o=this.createNode("stroke"),n=this.createNode("shadow");return this._setAttr(r,"id",this.container.id+"_"+e+"_fill"),this._setAttr(o,"id",this.container.id+"_"+e+"_stroke"),this._setAttr(n,"id",this.container.id+"_"+e+"_shadow"),"circle"===t||"ellipse"===t?((i=this.createNode("oval")).appendChild(r),i.appendChild(o),i.appendChild(n)):"polygon"===t||"path"===t||"shape"===t||"line"===t?((i=this.createNode("shape")).appendChild(r),i.appendChild(o),i.appendChild(n),s=this.createNode("path"),this._setAttr(s,"id",this.container.id+"_"+e+"_path"),i.appendChild(s)):((i=this.createNode(t)).appendChild(r),i.appendChild(o),i.appendChild(n)),i.style.position="absolute",i.style.left="0px",i.style.top="0px",this._setAttr(i,"id",this.container.id+"_"+e),i},remove:function(t){utils_type.A.exists(t)&&t.removeNode(!0)},makeArrows:function(t){var e,i=utils_type.A.evaluate(t.visProp.firstarrow),s=utils_type.A.evaluate(t.visProp.lastarrow);t.visPropOld.firstarrow===i&&t.visPropOld.lastarrow===s||(i?(e=t.rendNodeStroke,this._setAttr(e,"startarrow","block"),this._setAttr(e,"startarrowlength","long")):(e=t.rendNodeStroke,utils_type.A.exists(e)&&this._setAttr(e,"startarrow","none")),s?(e=t.rendNodeStroke,this._setAttr(e,"id",this.container.id+"_"+t.id+"stroke"),this._setAttr(e,"endarrow","block"),this._setAttr(e,"endarrowlength","long")):(e=t.rendNodeStroke,utils_type.A.exists(e)&&this._setAttr(e,"endarrow","none")),t.visPropOld.firstarrow=i,t.visPropOld.lastarrow=s)},updateEllipsePrim:function(t,e,i,s,r){t.style.left=Math.floor(e-s)+"px",t.style.top=Math.floor(i-r)+"px",t.style.width=Math.floor(2*Math.abs(s))+"px",t.style.height=Math.floor(2*Math.abs(r))+"px"},updateLinePrim:function(t,e,i,s,r,o){var n,a=this.resolution;isNaN(e+i+s+r)||(n=["m ",Math.floor(a*e),", ",Math.floor(a*i)," l ",Math.floor(a*s),", ",Math.floor(a*r)],this.updatePathPrim(t,n,o))},updatePathPrim:function(t,e,i){var s=i.canvasWidth,r=i.canvasHeight;e.length<=0&&(e=["m 0,0"]),t.style.width=s,t.style.height=r,this._setAttr(t,"coordsize",[Math.floor(this.resolution*s),Math.floor(this.resolution*r)].join(",")),this._setAttr(t,"path",e.join(""))},updatePathStringPoint:function(t,e,i){var s=[],r=Math.round,o=t.coords.scrCoords,n=e*Math.sqrt(3)*.5,a=.5*e,l=this.resolution;return"x"===i?s.push([" m ",r(l*(o[1]-e)),", ",r(l*(o[2]-e))," l ",r(l*(o[1]+e)),", ",r(l*(o[2]+e))," m ",r(l*(o[1]+e)),", ",r(l*(o[2]-e))," l ",r(l*(o[1]-e)),", ",r(l*(o[2]+e))].join("")):"+"===i?s.push([" m ",r(l*(o[1]-e)),", ",r(l*o[2])," l ",r(l*(o[1]+e)),", ",r(l*o[2])," m ",r(l*o[1]),", ",r(l*(o[2]-e))," l ",r(l*o[1]),", ",r(l*(o[2]+e))].join("")):"<>"===i||"<<>>"===i?("<<>>"===i&&(e*=1.41),s.push([" m ",r(l*(o[1]-e)),", ",r(l*o[2])," l ",r(l*o[1]),", ",r(l*(o[2]+e))," l ",r(l*(o[1]+e)),", ",r(l*o[2])," l ",r(l*o[1]),", ",r(l*(o[2]-e))," x e "].join(""))):"^"===i?s.push([" m ",r(l*o[1]),", ",r(l*(o[2]-e))," l ",r(l*(o[1]-n)),", ",r(l*(o[2]+a))," l ",r(l*(o[1]+n)),", ",r(l*(o[2]+a))," x e "].join("")):"v"===i?s.push([" m ",r(l*o[1]),", ",r(l*(o[2]+e))," l ",r(l*(o[1]-n)),", ",r(l*(o[2]-a))," l ",r(l*(o[1]+n)),", ",r(l*(o[2]-a))," x e "].join("")):">"===i?s.push([" m ",r(l*(o[1]+e)),", ",r(l*o[2])," l ",r(l*(o[1]-a)),", ",r(l*(o[2]-n))," l ",r(l*(o[1]-a)),", ",r(l*(o[2]+n))," l ",r(l*(o[1]+e)),", ",r(l*o[2])].join("")):"<"===i&&s.push([" m ",r(l*(o[1]-e)),", ",r(l*o[2])," l ",r(l*(o[1]+a)),", ",r(l*(o[2]-n))," l ",r(l*(o[1]+a)),", ",r(l*(o[2]+n))," x e "].join("")),s},updatePathStringPrim:function(t){var e,i,s=[],r=this.resolution,o=Math.round,n=" m ",a=n,l=Math.min(t.numberPoints,8192);if(t.numberPoints<=0)return"";if(l=Math.min(l,t.points.length),1===t.bezierDegree)for(e=0;e<l;e++)i=t.points[e].scrCoords,isNaN(i[1])||isNaN(i[2])?a=n:(i[1]>2e4?i[1]=2e4:i[1]<-2e4&&(i[1]=-2e4),i[2]>2e4?i[2]=2e4:i[2]<-2e4&&(i[2]=-2e4),s.push([a,o(r*i[1]),", ",o(r*i[2])].join("")),a=" l ");else if(3===t.bezierDegree)for(e=0;e<l;)i=t.points[e].scrCoords,isNaN(i[1])||isNaN(i[2])?a=n:(s.push([a,o(r*i[1]),", ",o(r*i[2])].join(""))," c "===a&&(e+=1,i=t.points[e].scrCoords,s.push([" ",o(r*i[1]),", ",o(r*i[2])].join("")),e+=1,i=t.points[e].scrCoords,s.push([" ",o(r*i[1]),", ",o(r*i[2])].join(""))),a=" c "),e+=1;return s.push(" e"),s},updatePathStringBezierPrim:function(t){var e,i,s,r,o,n,a=[],l=utils_type.A.evaluate(t.visProp.strokewidth),h=this.resolution,u=Math.round,c=" m ",d=c,p="plot"!==utils_type.A.evaluate(t.visProp.curvetype),_=Math.min(t.numberPoints,8192);if(t.numberPoints<=0)return"";for(p&&t.board.options.curve.RDPsmoothing&&(t.points=numerics.A.RamerDouglasPeucker(t.points,1)),_=Math.min(_,t.points.length),i=1;i<3;i++)for(d=c,e=0;e<_;e++)r=t.points[e].scrCoords,isNaN(r[1])||isNaN(r[2])?d=c:(r[1]>2e4?r[1]=2e4:r[1]<-2e4&&(r[1]=-2e4),r[2]>2e4?r[2]=2e4:r[2]<-2e4&&(r[2]=-2e4),d===c?a.push([d,u(h*r[1])," ",u(h*r[2])].join("")):(s=2*i,a.push([d,u(h*(o+.333*(r[1]-o)+l*(s*Math.random()-i)))," ",u(h*(n+.333*(r[2]-n)+l*(s*Math.random()-i)))," ",u(h*(o+.666*(r[1]-o)+l*(s*Math.random()-i)))," ",u(h*(n+.666*(r[2]-n)+l*(s*Math.random()-i)))," ",u(h*r[1])," ",u(h*r[2])].join(""))),d=" c ",o=r[1],n=r[2]);return a.push(" e"),a},updatePolygonPrim:function(t,e){var i,s,r=e.vertices.length,o=this.resolution,n=[];if(this._setAttr(t,"stroked","false"),s=e.vertices[0].coords.scrCoords,!isNaN(s[1]+s[2])){for(n.push(["m ",Math.floor(o*s[1]),",",Math.floor(o*s[2])," l "].join("")),i=1;i<r-1;i++){if(!e.vertices[i].isReal)return void this.updatePathPrim(t,"",e.board);if(s=e.vertices[i].coords.scrCoords,isNaN(s[1]+s[2]))return;n.push(Math.floor(o*s[1])+","+Math.floor(o*s[2])),i<r-2&&n.push(", ")}n.push(" x e"),this.updatePathPrim(t,n,e.board)}},updateRectPrim:function(t,e,i,s,r){t.style.left=Math.floor(e)+"px",t.style.top=Math.floor(i)+"px",s>=0&&(t.style.width=s+"px"),r>=0&&(t.style.height=r+"px")},setPropertyPrim:function(t,e,i){var s,r="";switch(e){case"stroke":r="strokecolor";break;case"stroke-width":r="strokeweight";break;case"stroke-dasharray":r="dashstyle"}""!==r&&(s=utils_type.A.evaluate(i),this._setAttr(t,r,s))},display:function(t,e){t&&t.rendNode&&(t.visPropOld.visible=e,t.rendNode.style.visibility=e?"inherit":"hidden")},show:function(t){jxg.A.deprecated("Board.renderer.show()","Board.renderer.display()"),t&&t.rendNode&&(t.rendNode.style.visibility="inherit")},hide:function(t){jxg.A.deprecated("Board.renderer.hide()","Board.renderer.display()"),t&&t.rendNode&&(t.rendNode.style.visibility="hidden")},setDashStyle:function(t,e){var i;e.dash>=0&&(i=t.rendNodeStroke,this._setAttr(i,"dashstyle",this.dashArray[e.dash]))},setGradient:function(t){var e=t.rendNodeFill,i=utils_type.A.evaluate(t.visProp.gradient);"linear"===i?(this._setAttr(e,"type","gradient"),this._setAttr(e,"color2",utils_type.A.evaluate(t.visProp.gradientsecondcolor)),this._setAttr(e,"opacity2",utils_type.A.evaluate(t.visProp.gradientsecondopacity)),this._setAttr(e,"angle",utils_type.A.evaluate(t.visProp.gradientangle))):"radial"===i?(this._setAttr(e,"type","gradientradial"),this._setAttr(e,"color2",utils_type.A.evaluate(t.visProp.gradientsecondcolor)),this._setAttr(e,"opacity2",utils_type.A.evaluate(t.visProp.gradientsecondopacity)),this._setAttr(e,"focusposition",100*utils_type.A.evaluate(t.visProp.gradientpositionx)+"%,"+100*utils_type.A.evaluate(t.visProp.gradientpositiony)+"%"),this._setAttr(e,"focussize","0,0")):this._setAttr(e,"type","solid")},setObjectFillColor:function(t,e,i){var s,r,o,n=utils_type.A.evaluate(e),a=utils_type.A.evaluate(i),l=t.rendNode;a=a>0?a:0,t.visPropOld.fillcolor===n&&t.visPropOld.fillopacity===a||(utils_type.A.exists(n)&&!1!==n&&(9!==n.length?(s=n,o=a):(s=(r=utils_color.A.rgba2rgbo(n))[0],o=a*r[1]),"none"===s||!1===s?this._setAttr(t.rendNode,"filled","false"):(this._setAttr(t.rendNode,"filled","true"),this._setAttr(t.rendNode,"fillcolor",s),utils_type.A.exists(o)&&t.rendNodeFill&&this._setAttr(t.rendNodeFill,"opacity",100*o+"%")),t.type===constants.A.OBJECT_TYPE_IMAGE&&l.filters.length>1&&(l.filters.item(1).opacity=Math.round(100*o),l.filters.item(1).enabled=!0)),t.visPropOld.fillcolor=n,t.visPropOld.fillopacity=a)},setObjectStrokeColor:function(t,e,i){var s,r,o,n,a=utils_type.A.evaluate(e),l=utils_type.A.evaluate(i),h=t.rendNode;l=l>0?l:0,t.visPropOld.strokecolor===a&&t.visPropOld.strokeopacity===l||(utils_type.A.exists(a)&&!1!==a&&(9!==a.length?(s=a,o=l):(s=(r=e.rgba2rgbo(a))[0],o=l*r[1]),t.elementClass===constants.A.OBJECT_CLASS_TEXT?(h.filters.length>1&&(h.filters.item(1).opacity=Math.round(100*o),h.filters.item(1).enabled=!0),h.style.color=s):(!1!==s&&(this._setAttr(h,"stroked","true"),this._setAttr(h,"strokecolor",s)),n=t.rendNodeStroke,utils_type.A.exists(o)&&t.type!==constants.A.OBJECT_TYPE_IMAGE&&this._setAttr(n,"opacity",100*o+"%"))),t.visPropOld.strokecolor=a,t.visPropOld.strokeopacity=l)},setObjectStrokeWidth:function(t,e){var i,s=utils_type.A.evaluate(e);isNaN(s)||t.visPropOld.strokewidth===s||(i=t.rendNode,this.setPropertyPrim(i,"stroked","true"),utils_type.A.exists(s)&&(this.setPropertyPrim(i,"stroke-width",s),0===s&&utils_type.A.exists(t.rendNodeStroke)&&this._setAttr(i,"stroked","false")),t.visPropOld.strokewidth=s)},setShadow:function(t){var e=t.rendNodeShadow,i=utils_type.A.evaluate(t.visProp.shadow);e&&t.visPropOld.shadow!==i&&(i?(this._setAttr(e,"On","True"),this._setAttr(e,"Offset","3pt,3pt"),this._setAttr(e,"Opacity","60%"),this._setAttr(e,"Color","#aaaaaa")):this._setAttr(e,"On","False"),t.visPropOld.shadow=i)},suspendRedraw:function(){this.container.style.display="none"},unsuspendRedraw:function(){this.container.style.display=""}});var vml=jxg.A.VMLRenderer,uuidCharsStr="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",uuidChars=uuidCharsStr.split("");jxg.A.Util=jxg.A.Util||{},jxg.A.Util.genUUID=function(t){var e,i,s=[],r=0;for(""!==(t=t||"")&&"-"!==t.slice(t.length-1)&&(t+="-"),i=0;i<36;i++)8===i||13===i||18===i||23===i?s[i]="-":14===i?s[i]="4":(r<=2&&(r=33554432+16777216*Math.random()|0),e=15&r,r>>=4,s[i]=uuidChars[19===i?3&e|8:e]);return t+s.join("")};var uuid=jxg.A.Util;jxg.A.CanvasRenderer=function(t,e){if(this.type="canvas",this.canvasRoot=null,this.suspendHandle=null,this.canvasId=uuid.genUUID(),this.canvasNamespace=null,env.A.isBrowser)this.container=t,this.container.style.MozUserSelect="none",this.container.style.userSelect="none",this.container.style.overflow="hidden",""===this.container.style.position&&(this.container.style.position="relative"),this.container.innerHTML=['<canvas id="',this.canvasId,'" width="',e.width,'px" height="',e.height,'px"></canvas>'].join(""),this.canvasRoot=this.container.ownerDocument.getElementById(this.canvasId),this.canvasRoot.style.display="block",this.context=this.canvasRoot.getContext("2d");else if(env.A.isNode())try{this.canvasRoot=jxg.A.createCanvas(500,500),this.context=this.canvasRoot.getContext("2d")}catch(t){throw new Error('JXG.createCanvas not available.\nInstall the npm package `canvas`\nand call:\n import { createCanvas } from "canvas.js";\n JXG.createCanvas = createCanvas;\n')}},jxg.A.CanvasRenderer.prototype=new renderer_abstract,jxg.A.extend(jxg.A.CanvasRenderer.prototype,{_drawPolygon:function(t,e,i){var s,r=t.length,o=this.context;if(r>0){if(i&&(o.lineWidth=0),o.beginPath(),o.moveTo(t[0][0],t[0][1]),1===e)for(s=1;s<r;s++)o.lineTo(t[s][0],t[s][1]);else for(s=1;s<r;s+=3)o.bezierCurveTo(t[s][0],t[s][1],t[s+1][0],t[s+1][1],t[s+2][0],t[s+2][1]);i?(o.lineTo(t[0][0],t[0][1]),o.closePath(),o.fill("evenodd")):o.stroke()}},_fill:function(t){var e=this.context;e.save(),this._setColor(t,"fill")&&e.fill("evenodd"),e.restore()},_rotatePoint:function(t,e,i){return[e*Math.cos(t)-i*Math.sin(t),e*Math.sin(t)+i*Math.cos(t)]},_rotateShape:function(t,e){var i,s=[],r=t.length;if(r<=0)return t;for(i=0;i<r;i++)s.push(this._rotatePoint(e,t[i][0],t[i][1]));return s},updateGradientAngle:function(t,e){var i,s,r,o,n,a,l,h,u,c,d,p,_=1,f=Math.cos(-e),A=Math.sin(-e),g=t.getBoundingBox();return Math.abs(f)>Math.abs(A)?_/=Math.abs(f):_/=Math.abs(A),f>=0?(r=0,o=f*_):(r=-f*_,o=0),A>=0?(n=0,a=A*_):(n=-A*_,a=0),i=new base_coords.A(constants.A.COORDS_BY_USER,[g[0],g[1]],t.board),d=(s=new base_coords.A(constants.A.COORDS_BY_USER,[g[2],g[3]],t.board)).scrCoords[1]-i.scrCoords[1],p=s.scrCoords[2]-i.scrCoords[2],l=i.scrCoords[1]+d*r,u=i.scrCoords[2]+p*n,h=i.scrCoords[1]+d*o,c=i.scrCoords[2]+p*a,this.context.createLinearGradient(l,u,h,c)},updateGradientCircle:function(t,e,i,s,r,o,n){var a,l,h,u,c,d,p,_,f,A,g=t.getBoundingBox();return a=new base_coords.A(constants.A.COORDS_BY_USER,[g[0],g[1]],t.board),f=(l=new base_coords.A(constants.A.COORDS_BY_USER,[g[2],g[3]],t.board)).scrCoords[1]-a.scrCoords[1],A=a.scrCoords[2]-l.scrCoords[2],h=a.scrCoords[1]+f*e,u=l.scrCoords[2]+A*i,d=a.scrCoords[1]+f*r,p=l.scrCoords[2]+A*o,c=s*(f+A)*.5,_=n*(f+A)*.5,this.context.createRadialGradient(d,p,_,h,u,c)},updateGradient:function(t){var e,i,s=utils_type.A.evaluate(t.visProp.gradient);return e=utils_type.A.evaluate(t.visProp.fillcolor),"linear"===s?i=this.updateGradientAngle(t,utils_type.A.evaluate(t.visProp.gradientangle)):"radial"===s&&(i=this.updateGradientCircle(t,utils_type.A.evaluate(t.visProp.gradientcx),utils_type.A.evaluate(t.visProp.gradientcy),utils_type.A.evaluate(t.visProp.gradientr),utils_type.A.evaluate(t.visProp.gradientfx),utils_type.A.evaluate(t.visProp.gradientfy),utils_type.A.evaluate(t.visProp.gradientfr))),i.addColorStop(utils_type.A.evaluate(t.visProp.gradientstartoffset),e),i.addColorStop(utils_type.A.evaluate(t.visProp.gradientendoffset),utils_type.A.evaluate(t.visProp.gradientsecondcolor)),i},_setColor:function(t,e,i){var s,r,o,n,a,l,h,u,c=!0,d=t.visProp;return e=e||"stroke",i=i||e,s=this._getHighlighted(t),"linear"===(u=utils_type.A.evaluate(t.visProp.gradient))||"radial"===u?(this.context[i+"Style"]=this.updateGradient(t),c):("none"!==(o=utils_type.A.evaluate(d[s+e+"color"]))&&!1!==o?(l=(l=utils_type.A.evaluate(d[s+e+"opacity"]))>0?l:0,9!==o.length?(a=o,h=l):(a=(n=utils_color.A.rgba2rgbo(o))[0],h=l*n[1]),this.context.globalAlpha=h,this.context[i+"Style"]=a):c=!1,r=parseFloat(utils_type.A.evaluate(d[s+"strokewidth"])),"stroke"!==e||isNaN(r)||(0===r?this.context.globalAlpha=0:this.context.lineWidth=r),"stroke"===e&&void 0!==d.linecap&&""!==d.linecap&&(this.context.lineCap=d.linecap),c)},_stroke:function(t){var e=this.context,i=utils_type.A.evaluate(t.visProp.dash),s=utils_type.A.evaluate(t.visProp.dashscale)?.5*utils_type.A.evaluate(t.visProp.strokewidth):1;e.save(),i>0?e.setLineDash&&e.setLineDash(this.dashArray[i-1].map((function(t){return t*s}))):this.context.lineDashArray=[],this._setColor(t,"stroke")&&e.stroke(),e.restore()},_translateShape:function(t,e,i){var s,r=[],o=t.length;if(o<=0)return t;for(s=0;s<o;s++)r.push([t[s][0]+e,t[s][1]+i]);return r},drawPoint:function(t){var e=utils_type.A.evaluate(t.visProp.face),i=utils_type.A.evaluate(t.visProp.size),s=t.coords.scrCoords,r=i*Math.sqrt(3)*.5,o=.5*i,n=parseFloat(utils_type.A.evaluate(t.visProp.strokewidth))/2,a=this.context;if(t.visPropCalc.visible)switch(e){case"cross":case"x":a.beginPath(),a.moveTo(s[1]-i,s[2]-i),a.lineTo(s[1]+i,s[2]+i),a.moveTo(s[1]+i,s[2]-i),a.lineTo(s[1]-i,s[2]+i),a.lineCap="round",a.lineJoin="round",a.closePath(),this._stroke(t);break;case"circle":case"o":a.beginPath(),a.arc(s[1],s[2],i+1+n,0,2*Math.PI,!1),a.closePath(),this._fill(t),this._stroke(t);break;case"square":case"[]":if(i<=0)break;a.save(),this._setColor(t,"stroke","fill")&&a.fillRect(s[1]-i-n,s[2]-i-n,2*i+3*n,2*i+3*n),a.restore(),a.save(),this._setColor(t,"fill"),a.fillRect(s[1]-i+n,s[2]-i+n,2*i-n,2*i-n),a.restore();break;case"plus":case"+":a.beginPath(),a.moveTo(s[1]-i,s[2]),a.lineTo(s[1]+i,s[2]),a.moveTo(s[1],s[2]-i),a.lineTo(s[1],s[2]+i),a.lineCap="round",a.lineJoin="round",a.closePath(),this._stroke(t);break;case"divide":case"|":a.beginPath(),a.moveTo(s[1],s[2]-i),a.lineTo(s[1],s[2]+i),a.lineCap="round",a.lineJoin="round",a.closePath(),this._stroke(t);break;case"minus":case"-":a.beginPath(),a.moveTo(s[1]-i,s[2]),a.lineTo(s[1]+i,s[2]),a.lineCap="round",a.lineJoin="round",a.closePath(),this._stroke(t);break;case"diamond2":case"<<>>":i*=1.41;case"diamond":case"<>":a.beginPath(),a.moveTo(s[1]-i,s[2]),a.lineTo(s[1],s[2]+i),a.lineTo(s[1]+i,s[2]),a.lineTo(s[1],s[2]-i),a.closePath(),this._fill(t),this._stroke(t);break;case"triangleup":case"A":case"a":case"^":a.beginPath(),a.moveTo(s[1],s[2]-i),a.lineTo(s[1]-r,s[2]+o),a.lineTo(s[1]+r,s[2]+o),a.closePath(),this._fill(t),this._stroke(t);break;case"triangledown":case"v":a.beginPath(),a.moveTo(s[1],s[2]+i),a.lineTo(s[1]-r,s[2]-o),a.lineTo(s[1]+r,s[2]-o),a.closePath(),this._fill(t),this._stroke(t);break;case"triangleleft":case"<":a.beginPath(),a.moveTo(s[1]-i,s[2]),a.lineTo(s[1]+o,s[2]-r),a.lineTo(s[1]+o,s[2]+r),a.closePath(),this._fill(t),this._stroke(t);break;case"triangleright":case">":a.beginPath(),a.moveTo(s[1]+i,s[2]),a.lineTo(s[1]-o,s[2]-r),a.lineTo(s[1]-o,s[2]+r),a.closePath(),this._fill(t),this._stroke(t)}},updatePoint:function(t){this.drawPoint(t)},drawArrows:function(t,e,i,s,r){var o,n,a,l,h,u,c,d,p,_,f,A,g,m,y,b,v,C,P,x,E=this.context,O=1,M=1,S=1,w=r.evFirst,T=r.evLast;if("none"!==utils_type.A.evaluate(t.visProp.strokecolor)&&(w||T)){if(t.elementClass===constants.A.OBJECT_CLASS_LINE)o=e.scrCoords[1],n=e.scrCoords[2],a=i.scrCoords[1],l=i.scrCoords[2],P=x=Math.atan2(l-n,a-o);else{if(o=t.points[0].scrCoords[1],n=t.points[0].scrCoords[2],(C=t.points.length-1)<1)return;a=t.points[t.points.length-1].scrCoords[1],l=t.points[t.points.length-1].scrCoords[2],m=t.points[1].scrCoords[1]-t.points[0].scrCoords[1],y=t.points[1].scrCoords[2]-t.points[0].scrCoords[2],b=t.points[C].scrCoords[1]-t.points[C-1].scrCoords[1],v=t.points[C].scrCoords[2]-t.points[C-1].scrCoords[2],w&&(P=Math.atan2(y,m)),T&&(x=Math.atan2(v,b))}if(h=utils_type.A.evaluate(t.visProp[s+"strokewidth"]),w)if(u=h*r.sizeFirst,p=O=r.typeFirst,2===O)d=[[u,.5*-u],[0,0],[u,.5*u],[.5*u,0]];else if(3===O)d=[[u/3,.5*-u],[0,.5*-u],[0,.5*u],[u/3,.5*u]];else if(4===O)for(u/=10,M=3,g=(d=[[10,3.31],[6.47,3.84],[2.87,4.5],[0,6.63],[.67,5.52],[1.33,4.42],[2,3.31],[1.33,2.21],[.67,1.1],[0,0],[2.87,2.13],[6.47,2.79],[10,3.31]]).length,A=0;A<g;A++)d[A][0]*=-u,d[A][1]*=u,d[A][0]+=10*u,d[A][1]-=3.31*u;else if(5===O)for(u/=10,M=3,g=(d=[[10,3.28],[6.61,4.19],[3.19,5.07],[0,6.55],[.62,5.56],[1,4.44],[1,3.28],[1,2.11],[.62,.99],[0,0],[3.19,1.49],[6.61,2.37],[10,3.28]]).length,A=0;A<g;A++)d[A][0]*=-u,d[A][1]*=u,d[A][0]+=10*u,d[A][1]-=3.28*u;else if(6===O)for(u/=10,M=3,g=(d=[[10,2.84],[6.61,3.59],[3.21,4.35],[0,5.68],[.33,4.73],[.67,3.78],[1,2.84],[.67,1.89],[.33,.95],[0,0],[3.21,1.33],[6.61,2.09],[10,2.84]]).length,A=0;A<g;A++)d[A][0]*=-u,d[A][1]*=u,d[A][0]+=10*u,d[A][1]-=2.84*u;else if(7===O)for(u=h,M=3,g=(d=[[0,10.39],[2.01,6.92],[5.96,5.2],[10,5.2],[5.96,5.2],[2.01,3.47],[0,0]]).length,A=0;A<g;A++)d[A][0]*=-u,d[A][1]*=u,d[A][0]+=10*u,d[A][1]-=5.2*u;else d=[[u,.5*-u],[0,0],[u,.5*u]];if(T)if(u=h*r.sizeLast,_=O=r.typeLast,2===O)c=[[-u,.5*-u],[0,0],[-u,.5*u],[.5*-u,0]];else if(3===O)c=[[-u/3,.5*-u],[0,.5*-u],[0,.5*u],[-u/3,.5*u]];else if(4===O)for(u/=10,S=3,g=(c=[[10,3.31],[6.47,3.84],[2.87,4.5],[0,6.63],[.67,5.52],[1.33,4.42],[2,3.31],[1.33,2.21],[.67,1.1],[0,0],[2.87,2.13],[6.47,2.79],[10,3.31]]).length,A=0;A<g;A++)c[A][0]*=u,c[A][1]*=u,c[A][0]-=10*u,c[A][1]-=3.31*u;else if(5===O)for(u/=10,S=3,g=(c=[[10,3.28],[6.61,4.19],[3.19,5.07],[0,6.55],[.62,5.56],[1,4.44],[1,3.28],[1,2.11],[.62,.99],[0,0],[3.19,1.49],[6.61,2.37],[10,3.28]]).length,A=0;A<g;A++)c[A][0]*=u,c[A][1]*=u,c[A][0]-=10*u,c[A][1]-=3.28*u;else if(6===O)for(u/=10,S=3,g=(c=[[10,2.84],[6.61,3.59],[3.21,4.35],[0,5.68],[.33,4.73],[.67,3.78],[1,2.84],[.67,1.89],[.33,.95],[0,0],[3.21,1.33],[6.61,2.09],[10,2.84]]).length,A=0;A<g;A++)c[A][0]*=u,c[A][1]*=u,c[A][0]-=10*u,c[A][1]-=2.84*u;else if(7===O)for(u=h,S=3,g=(c=[[0,10.39],[2.01,6.92],[5.96,5.2],[10,5.2],[5.96,5.2],[2.01,3.47],[0,0]]).length,A=0;A<g;A++)c[A][0]*=u,c[A][1]*=u,c[A][0]-=10*u,c[A][1]-=5.2*u;else c=[[-u,.5*-u],[0,0],[-u,.5*u]];E.save(),this._setColor(t,"stroke","fill")&&(this._setColor(t,"stroke"),w&&(f=7!==p,this._drawPolygon(this._translateShape(this._rotateShape(d,P),o,n),M,f)),T&&(f=7!==_,this._drawPolygon(this._translateShape(this._rotateShape(c,x),a,l),S,f))),E.restore()}},drawLine:function(t){var e,i,s,r,o,n=new base_coords.A(constants.A.COORDS_BY_USER,t.point1.coords.usrCoords,t.board),a=new base_coords.A(constants.A.COORDS_BY_USER,t.point2.coords.usrCoords,t.board),l=null;t.visPropCalc.visible&&(s=this._getHighlighted(t),r=utils_type.A.evaluate(t.visProp[s+"strokewidth"]),((o=this.getArrowHeadData(t,r,s)).evFirst||o.evLast)&&(l=-4),geometry.A.calcStraight(t,n,a,l),this.handleTouchpoints(t,n,a,o),e=new base_coords.A(constants.A.COORDS_BY_USER,n.usrCoords,t.board),i=new base_coords.A(constants.A.COORDS_BY_USER,a.usrCoords,t.board),this.getPositionArrowHead(t,n,a,o),this.context.beginPath(),this.context.moveTo(n.scrCoords[1],n.scrCoords[2]),this.context.lineTo(a.scrCoords[1],a.scrCoords[2]),this._stroke(t),(o.evFirst||o.evLast)&&this.drawArrows(t,e,i,s,o))},updateLine:function(t){this.drawLine(t)},drawTicks:function(){},updateTicks:function(t){var e,i,s,r,o,n,a=t.ticks.length,l=this.context;for(l.beginPath(),e=0;e<a;e++)for(s=(i=t.ticks[e])[0],r=i[1],o=s.length,l.moveTo(s[0],r[0]),n=1;n<o;++n)l.lineTo(s[n],r[n]);l.lineCap="round",this._stroke(t)},drawCurve:function(t){var e,i,s;utils_type.A.evaluate(t.visProp.handdrawing)?this.updatePathStringBezierPrim(t):this.updatePathStringPrim(t),t.numberPoints>1&&(e=this._getHighlighted(t),i=utils_type.A.evaluate(t.visProp[e+"strokewidth"]),((s=this.getArrowHeadData(t,i,e)).evFirst||s.evLast)&&this.drawArrows(t,null,null,e,s))},updateCurve:function(t){this.drawCurve(t)},drawEllipse:function(t){var e=t.center.coords.scrCoords[1],i=t.center.coords.scrCoords[2],s=t.board.unitX,r=t.board.unitY,o=2*t.Radius(),n=2*t.Radius(),a=o*s,l=n*r,h=e-a/2,u=i-l/2,c=a/2*.5522848,d=l/2*.5522848,p=h+a,_=u+l,f=h+a/2,A=u+l/2,g=this.context;o>0&&n>0&&!isNaN(e+i)&&(g.beginPath(),g.moveTo(h,A),g.bezierCurveTo(h,A-d,f-c,u,f,u),g.bezierCurveTo(f+c,u,p,A-d,p,A),g.bezierCurveTo(p,A+d,f+c,_,f,_),g.bezierCurveTo(f-c,_,h,A+d,h,A),g.closePath(),this._fill(t),this._stroke(t))},updateEllipse:function(t){return this.drawEllipse(t)},displayCopyright:function(t,e){var i=this.context;i.save(),i.font=e+"px Arial",i.fillStyle="#aaa",i.lineWidth=.5,i.fillText(t,10,2+e),i.restore()},drawInternalText:function(t){var e=utils_type.A.evaluate(t.visProp.fontsize),i=utils_type.A.evaluate(t.visProp.fontunit),s=t.getAnchorX(),r=t.getAnchorY(),o=this.context;return o.save(),this._setColor(t,"stroke","fill")&&!isNaN(t.coords.scrCoords[1]+t.coords.scrCoords[2])&&(o.font=(e>0?e:0)+i+" Arial",this.transformImage(t,t.transformations),"left"===s?o.textAlign="left":"right"===s?o.textAlign="right":"middle"===s&&(o.textAlign="center"),"bottom"===r?o.textBaseline="bottom":"top"===r?o.textBaseline="top":"middle"===r&&(o.textBaseline="middle"),o.fillText(t.plaintext,t.coords.scrCoords[1],t.coords.scrCoords[2])),o.restore(),null},updateInternalText:function(t){this.drawInternalText(t)},setObjectStrokeColor:function(t,e,i){var s,r,o,n,a=utils_type.A.evaluate(e),l=utils_type.A.evaluate(i);l=l>0?l:0,t.visPropOld.strokecolor===a&&t.visPropOld.strokeopacity===l||(utils_type.A.exists(a)&&!1!==a&&(9!==a.length?(s=a,o=l):(s=(r=utils_color.A.rgba2rgbo(a))[0],o=l*r[1]),n=t.rendNode,t.elementClass===constants.A.OBJECT_CLASS_TEXT&&"html"===utils_type.A.evaluate(t.visProp.display)&&(n.style.color=s,n.style.opacity=o)),t.visPropOld.strokecolor=a,t.visPropOld.strokeopacity=l)},drawImage:function(t){t.rendNode=new Image,t._src="",this.updateImage(t)},updateImage:function(t){var e=this.context,i=utils_type.A.evaluate(t.visProp.fillopacity),s=utils_type.A.bind((function(){t.imgIsLoaded=!0,t.size[0]<=0||t.size[1]<=0||(e.save(),e.globalAlpha=i,this.transformImage(t,t.transformations),e.drawImage(t.rendNode,t.coords.scrCoords[1],t.coords.scrCoords[2]-t.size[1],t.size[0],t.size[1]),e.restore())}),this);this.updateImageURL(t)?t.rendNode.onload=s:t.imgIsLoaded&&s()},transformImage:function(t,e){var i,s,r,o,n,a=e.length,l=this.context;if(a>0)if(i=this.joinTransforms(t,e),t.elementClass===constants.A.OBJECT_CLASS_TEXT&&"html"===t.visProp.display){if(-1===(s=" matrix("+[i[1][1],i[2][1],i[1][2],i[2][2],i[1][0],i[2][0]].join(",")+") ").indexOf("NaN")){switch((n=t.rendNode).style.transform=s,r=-t.coords.scrCoords[1],o=-t.coords.scrCoords[2],utils_type.A.evaluate(t.visProp.anchorx)){case"right":r+=t.size[0];break;case"middle":r+=.5*t.size[0]}switch(utils_type.A.evaluate(t.visProp.anchory)){case"bottom":o+=t.size[1];break;case"middle":o+=.5*t.size[1]}n.style["transform-origin"]=r+"px "+o+"px"}}else Math.abs(numerics.A.det(i))>=math.A.eps&&l.transform(i[1][1],i[2][1],i[1][2],i[2][2],i[1][0],i[2][0])},updateImageURL:function(t){var e;return e=utils_type.A.evaluate(t.url),t._src!==e&&(t.imgIsLoaded=!1,t.rendNode.src=e,t._src=e,!0)},remove:function(t){utils_type.A.exists(t)&&utils_type.A.exists(t.parentNode)&&t.parentNode.removeChild(t)},updatePathStringPrim:function(t){var e,i,s,r,o,n="M",a=n,l=5e3,h=this.context;if(!(t.numberPoints<=0)){if(o=Math.min(t.points.length,t.numberPoints),h.beginPath(),1===t.bezierDegree)for(e=0;e<o;e++)i=t.points[e].scrCoords,isNaN(i[1])||isNaN(i[2])?a=n:(i[1]>l?i[1]=l:i[1]<-5e3&&(i[1]=-5e3),i[2]>l?i[2]=l:i[2]<-5e3&&(i[2]=-5e3),a===n?h.moveTo(i[1],i[2]):h.lineTo(i[1],i[2]),a="L");else if(3===t.bezierDegree)for(e=0;e<o;)i=t.points[e].scrCoords,isNaN(i[1])||isNaN(i[2])?a=n:(a===n?h.moveTo(i[1],i[2]):(e+=1,s=t.points[e].scrCoords,e+=1,r=t.points[e].scrCoords,h.bezierCurveTo(i[1],i[2],s[1],s[2],r[1],r[2])),a="C"),e+=1;h.lineCap="round",this._fill(t),this._stroke(t)}},updatePathStringBezierPrim:function(t){var e,i,s,r,o,n,a,l="M",h=l,u=5e3,c=utils_type.A.evaluate(t.visProp.strokewidth),d="plot"!==utils_type.A.evaluate(t.visProp.curvetype),p=this.context;if(!(t.numberPoints<=0)){for(d&&t.board.options.curve.RDPsmoothing&&(t.points=numerics.A.RamerDouglasPeucker(t.points,.5)),a=Math.min(t.points.length,t.numberPoints),p.beginPath(),i=1;i<3;i++)for(h=l,e=0;e<a;e++)r=t.points[e].scrCoords,isNaN(r[1])||isNaN(r[2])?h=l:(r[1]>u?r[1]=u:r[1]<-5e3&&(r[1]=-5e3),r[2]>u?r[2]=u:r[2]<-5e3&&(r[2]=-5e3),h===l?p.moveTo(r[1],r[2]):(s=2*i,p.bezierCurveTo(o+.333*(r[1]-o)+c*(s*Math.random()-i),n+.333*(r[2]-n)+c*(s*Math.random()-i),o+.666*(r[1]-o)+c*(s*Math.random()-i),n+.666*(r[2]-n)+c*(s*Math.random()-i),r[1],r[2])),h="C",o=r[1],n=r[2]);p.lineCap="round",this._fill(t),this._stroke(t)}},updatePolygonPrim:function(t,e){var i,s,r,o=e.vertices.length,n=this.context,a=!0;if(!(o<=0)&&e.visPropCalc.visible){for("polygonalchain"===e.elType&&o++,n.beginPath(),s=0;!e.vertices[s].isReal&&s<o-1;)s++,a=!1;for(i=e.vertices[s].coords.scrCoords,n.moveTo(i[1],i[2]),r=s;r<o-1;r++)e.vertices[r].isReal||(a=!1),i=e.vertices[r].coords.scrCoords,n.lineTo(i[1],i[2]);n.closePath(),a&&this._fill(e)}},display:function(t,e){t&&t.rendNode&&(t.visPropOld.visible=e,t.rendNode.style.visibility=e?"inherit":"hidden")},show:function(t){jxg.A.deprecated("Board.renderer.show()","Board.renderer.display()"),utils_type.A.exists(t.rendNode)&&(t.rendNode.style.visibility="inherit")},hide:function(t){jxg.A.deprecated("Board.renderer.hide()","Board.renderer.display()"),utils_type.A.exists(t.rendNode)&&(t.rendNode.style.visibility="hidden")},setGradient:function(t){},setShadow:function(t){t.visPropOld.shadow!==t.visProp.shadow&&(t.visPropOld.shadow=t.visProp.shadow)},highlight:function(t){return t.elementClass===constants.A.OBJECT_CLASS_TEXT&&"html"===utils_type.A.evaluate(t.visProp.display)?this.updateTextStyle(t,!0):(t.board.prepareUpdate(),t.board.renderer.suspendRedraw(t.board),t.board.updateRenderer(),t.board.renderer.unsuspendRedraw()),this},noHighlight:function(t){return t.elementClass===constants.A.OBJECT_CLASS_TEXT&&"html"===utils_type.A.evaluate(t.visProp.display)?this.updateTextStyle(t,!1):(t.board.prepareUpdate(),t.board.renderer.suspendRedraw(t.board),t.board.updateRenderer(),t.board.renderer.unsuspendRedraw()),this},suspendRedraw:function(t){this.context.save(),this.context.clearRect(0,0,this.canvasRoot.width,this.canvasRoot.height),t&&t.attr.showcopyright&&this.displayCopyright(jxg.A.licenseText,12)},unsuspendRedraw:function(){this.context.restore()},resize:function(t,e){this.container?(this.canvasRoot.style.width=parseFloat(t)+"px",this.canvasRoot.style.height=parseFloat(e)+"px",this.canvasRoot.setAttribute("width",2*parseFloat(t)+"px"),this.canvasRoot.setAttribute("height",2*parseFloat(e)+"px")):(this.canvasRoot.width=2*parseFloat(t),this.canvasRoot.height=2*parseFloat(e)),this.context=this.canvasRoot.getContext("2d"),this.context.scale(2,2)},removeToInsertLater:function(){return function(){}}});var canvas=jxg.A.CanvasRenderer;jxg.A.NoRenderer=function(){this.enhancedRendering=!1,this.type="no"},jxg.A.extend(jxg.A.NoRenderer.prototype,{drawPoint:function(t){},updatePoint:function(t){},changePointStyle:function(t){},drawLine:function(t){},updateLine:function(t){},drawTicks:function(t){},updateTicks:function(t){},drawCurve:function(t){},updateCurve:function(t){},drawEllipse:function(t){},updateEllipse:function(t){},drawPolygon:function(t){},updatePolygon:function(t){},displayCopyright:function(t,e){},drawInternalText:function(t){},updateInternalText:function(t){},drawText:function(t){},updateText:function(t){},updateTextStyle:function(t,e){},updateInternalTextStyle:function(t,e,i){},drawImage:function(t){},updateImage:function(t){},transformImage:function(t,e){},updateImageURL:function(t){},appendChildPrim:function(t,e){},appendNodesToElement:function(t,e){},createPrim:function(t,e){return null},remove:function(t){},makeArrows:function(t){},updateEllipsePrim:function(t,e,i,s,r){},updateLinePrim:function(t,e,i,s,r,o){},updatePathPrim:function(t,e,i){},updatePathStringPoint:function(t,e,i){},updatePathStringPrim:function(t){},updatePathStringBezierPrim:function(t){},updatePolygonPrim:function(t,e){},updateRectPrim:function(t,e,i,s,r){},setPropertyPrim:function(t,e,i){},display:function(t,e){t&&(t.visPropOld.visible=e)},show:function(t){},hide:function(t){},setBuffering:function(t,e){},setDashStyle:function(t){},setDraft:function(t){},removeDraft:function(t){},setGradient:function(t){},updateGradient:function(t){},setObjectTransition:function(t,e){},setObjectFillColor:function(t,e,i){},setObjectStrokeColor:function(t,e,i){},setObjectStrokeWidth:function(t,e){},setShadow:function(t){},highlight:function(t){},noHighlight:function(t){},suspendRedraw:function(){},unsuspendRedraw:function(){},drawNavigationBar:function(t){},getElementById:function(t){return null},resize:function(t,e){},removeToInsertLater:function(){return function(){}}}),jxg.A.NoRenderer.prototype=new renderer_abstract;var no=jxg.A.NoRenderer;jxg.A.JSXGraph={rendererType:(src_options.A.board.renderer="no",env.A.supportsVML()&&(src_options.A.board.renderer="vml",document.onmousemove=function(){var t;return document.body&&(t=document.body.scrollLeft,t+=document.body.scrollTop),t}),env.A.supportsCanvas()&&(src_options.A.board.renderer="canvas"),env.A.supportsSVG()&&(src_options.A.board.renderer="svg"),env.A.isNode()&&env.A.supportsCanvas()&&(src_options.A.board.renderer="canvas"),(env.A.isNode()||"no"===src_options.A.renderer)&&(src_options.A.text.display="internal",src_options.A.infobox.display="internal"),src_options.A.board.renderer),initRenderer:function(t,e,i,s){var r;if(utils_type.A.exists(i)&&!1!==i||"object"!=typeof document||(i=document),"object"==typeof i&&null!==t)for(r=utils_type.A.isString(t)?i.getElementById(t):t;r.firstChild;)r.removeChild(r.firstChild);else r=t;return void 0!==s&&"auto"!==s||(s=this.rendererType),"svg"===s?new svg(r,e):"vml"===s?new vml(r):"canvas"===s?new canvas(r,e):new no},_setAttributes:function(t,e){var i,s,r=utils_type.A.copyAttributes(t,e,"board"),o=["drag","fullscreen","intl","keyboard","logging","navbar","pan","resize","screenshot","selection","zoom"],n=o.length;for(i=0;i<n;i++)r[s=o[i]]=utils_type.A.copyAttributes(r,e,"board",s);return r.movetarget=t.moveTarget||t.movetarget||e.board.moveTarget,r},_fillBoard:function(t,e,i){t.initInfobox(e.infobox),t.maxboundingbox=e.maxboundingbox,t.resizeContainer(i.width,i.height,!0,!0),t._createSelectionPolygon(e),t.renderer.drawNavigationBar(t,e.navbar),jxg.A.boards[t.id]=t},_setARIA:function(t,e){var i,s,r,o,n,a,l=e.document;if("object"!=typeof l){if(!env.A.isBrowser)return;l=document}i=(s=utils_type.A.isString(t)?l.getElementById(t):t).ownerDocument,o=s.parentNode,n=t+"_ARIAlabel",a=t+"_ARIAdescription",(r=i.createElement("div")).innerHTML=e.title,r.setAttribute("id",n),r.style.display="none",o.insertBefore(r,s),(r=i.createElement("div")).innerHTML=e.description,r.setAttribute("id",a),r.style.display="none",o.insertBefore(r,s),s.setAttribute("aria-labelledby",n),s.setAttribute("aria-describedby",a)},_removeARIANodes:function(t){var e,i,s;"object"==typeof(s=t.document||document)&&(i=t.containerObj.getAttribute("aria-labelledby"),(e=s.getElementById(i))&&e.parentNode&&e.parentNode.removeChild(e),i=t.containerObj.getAttribute("aria-describedby"),(e=s.getElementById(i))&&e.parentNode&&e.parentNode.removeChild(e))},initBoard:function(t,e){var i,s,r,o,n,a,l,h,u,c,d,p,_,f,A,g=0,m=0,y={};return"default"!==(e=e||{}).theme&&utils_type.A.exists(jxg.A.themes[e.theme])&&(y=jxg.A.themes[e.theme]),f=utils_type.A.deepCopy(src_options.A,y,!0),c=this._setAttributes(e,f),h=env.A.getDimensions(t,c.document),c.unitx||c.unity?(i=utils_type.A.def(c.originx,150),s=utils_type.A.def(c.originy,150),r=utils_type.A.def(c.unitx,50),o=utils_type.A.def(c.unity,50)):((u=c.boundingbox)[0]<c.maxboundingbox[0]&&(u[0]=c.maxboundingbox[0]),u[1]>c.maxboundingbox[1]&&(u[1]=c.maxboundingbox[1]),u[2]>c.maxboundingbox[2]&&(u[2]=c.maxboundingbox[2]),u[3]<c.maxboundingbox[3]&&(u[3]=c.maxboundingbox[3]),n=parseInt(h.width,10),a=parseInt(h.height,10),utils_type.A.exists(u)&&c.keepaspectratio?(r=n/(u[2]-u[0]),o=a/(u[1]-u[3]),Math.abs(r)<Math.abs(o)?m=.5*(a/(o=Math.abs(r)*o/Math.abs(o))-(u[1]-u[3])):g=.5*(n/(r=Math.abs(o)*r/Math.abs(r))-(u[2]-u[0]))):(r=n/(u[2]-u[0]),o=a/(u[1]-u[3])),i=-r*(u[0]-g),s=o*(u[1]+m)),l=this.initRenderer(t,h,c.document,c.renderer),this._setARIA(t,c),(A=new base_board(t,l,c.id,[i,s],c.zoomx,c.zoomy,r,o,h.width,h.height,c)).keepaspectratio=c.keepaspectratio,this._fillBoard(A,c,h),A.suspendUpdate(),(c=A.attr).axis&&(d="object"==typeof c.axis?c.axis:{},p=utils_type.A.deepCopy(f.board.defaultaxes.x,d),_=utils_type.A.deepCopy(f.board.defaultaxes.y,d),c.defaultaxes.x&&(p=utils_type.A.deepCopy(p,c.defaultaxes.x)),c.defaultaxes.y&&(_=utils_type.A.deepCopy(_,c.defaultaxes.y)),A.defaultAxes={},A.defaultAxes.x=A.create("axis",[[0,0],[1,0]],p),A.defaultAxes.y=A.create("axis",[[0,0],[0,1]],_)),c.grid&&A.create("grid",[],"object"==typeof c.grid?c.grid:{}),A.unsuspendUpdate(),A},loadBoardFromFile:function(t,e,i,s,r){var o,n,a,l,h;return s=s||{},o=this._setAttributes(s),l=env.A.getDimensions(t,o.document),n=this.initRenderer(t,l,o.document,o.renderer),this._setARIA(t,o),a=new base_board(t,n,"",[150,150],1,1,50,50,l.width,l.height,o),this._fillBoard(a,o,l),h=o.encoding||"iso-8859-1",reader_file.parseFileContent(e,a,i,!0,h,r),a},loadBoardFromString:function(t,e,i,s,r){var o,n,a,l;return s=s||{},o=this._setAttributes(s),l=env.A.getDimensions(t,o.document),n=this.initRenderer(t,l,o.document,o.renderer),this._setARIA(t,o),a=new base_board(t,n,"",[150,150],1,1,50,50,l.width,l.height,o),this._fillBoard(a,o,l),reader_file.parseString(e,a,i,!0,r),a},freeBoard:function(t){var e;for(e in"string"==typeof t&&(t=jxg.A.boards[t]),this._removeARIANodes(t),t.removeEventHandlers(),t.suspendUpdate(),t.objects)t.objects.hasOwnProperty(e)&&t.objects[e].remove();for(;t.containerObj.firstChild;)t.containerObj.removeChild(t.containerObj.firstChild);for(e in t.objects)t.objects.hasOwnProperty(e)&&delete t.objects[e];delete t.renderer,t.jc.creator.clearCache(),delete t.jc,delete jxg.A.boards[t.id]},registerElement:function(t,e){jxg.A.deprecated("JXG.JSXGraph.registerElement()","JXG.registerElement()"),jxg.A.registerElement(t,e)}},env.A.isBrowser&&"object"==typeof window&&"object"==typeof document&&env.A.addEvent(window,"load",(function(){var t,e,i,s,r,o,n,a,l,h,u,c,d,p,_,f,A,g,m=!1,y=document.getElementsByTagName("script"),b=function(t,e,i){var s=jxg.A.JSXGraph.initBoard(r,{boundingbox:i,keepaspectratio:!0,grid:_,axis:p,showReload:!0});if(e.toLowerCase().indexOf("script")>-1)s.construct(t);else try{s.jc.parse(t)}catch(t){jxg.A.debug(t)}return s},v=function(t,e,i,s){return function(){var r;jxg.A.JSXGraph.freeBoard(t),(r=b(e,i,s)).reload=v(r,e,i,s)}};for(e=0;e<y.length;e++)if(t=y[e].getAttribute("type",!1),utils_type.A.exists(t)&&("text/jessiescript"===t.toLowerCase()||"jessiescript"===t.toLowerCase()||"text/jessiecode"===t.toLowerCase()||"jessiecode"===t.toLowerCase())){if(c=y[e].getAttribute("class",!1)||"",a=y[e].getAttribute("width",!1)||"",l=y[e].getAttribute("height",!1)||"",h=y[e].getAttribute("maxwidth",!1)||"100%",u=y[e].getAttribute("aspectratio",!1)||"1/1",d=y[e].getAttribute("boundingbox",!1)||"-5, 5, 5, -5",r=y[e].getAttribute("container",!1),A=y[e].getAttribute("src",!1),4!==(d=d.split(",")).length)d=[-5,5,5,-5];else for(i=0;i<d.length;i++)d[i]=parseFloat(d[i]);if(p=utils_type.A.str2Bool(y[e].getAttribute("axis",!1)||"false"),_=utils_type.A.str2Bool(y[e].getAttribute("grid",!1)||"false"),utils_type.A.exists(r))s=document.getElementById(r);else{r="jessiescript_autgen_jxg_"+e,(s=document.createElement("div")).setAttribute("id",r),n=""!==a?"width:"+a+";":"",n+=""!==l?"height:"+l+";":"",n+=""!==h?"max-width:"+h+";":"",n+=""!==u?"aspect-ratio:"+u+";":"",s.setAttribute("style",n),s.setAttribute("class","jxgbox "+c);try{document.body.insertBefore(s,y[e])}catch(t){"object"==typeof jQuery&&jQuery(s).insertBefore(y[e])}}f="",utils_type.A.exists(A)?(m=!0,(g=new XMLHttpRequest).open("GET",A),g.overrideMimeType("text/plain; charset=x-user-defined"),g.addEventListener("load",(function(){if(!(this.status<400))throw new Error("\nJSXGraph: failed to load file",A,":",this.responseText);f=this.responseText+"\n"+f,(o=b(f,t,d)).reload=v(o,f,t,d)})),g.addEventListener("error",(function(t){throw new Error("\nJSXGraph: failed to load file",A,":",t)})),g.send()):m=!1,document.getElementById(r)?(f=(f=y[e].innerHTML).replace(/<!\[CDATA\[/g,"").replace(/\]\]>/g,""),y[e].innerHTML=f,m||((o=b(f,t,d)).reload=v(o,f,t,d))):jxg.A.debug("JSXGraph: Apparently the div injection failed. Can't create a board, sorry.")}}),window);var jsxgraph=jxg.A.JSXGraph,base_element=__webpack_require__(144),coordselement=__webpack_require__(102);jxg.A.Point=function(t,e,i){this.constructor(t,i,constants.A.OBJECT_TYPE_POINT,constants.A.OBJECT_CLASS_POINT),this.element=this.board.select(i.anchor),this.coordsConstructor(e),this.elType="point",this.id=this.board.setId(this,"P"),this.board.renderer.drawPoint(this),this.board.finalizeAdding(this),this.createGradient(),this.createLabel()},jxg.A.Point.prototype=new base_element.A,utils_type.A.copyPrototypeMethods(jxg.A.Point,coordselement.A,"coordsConstructor"),jxg.A.extend(jxg.A.Point.prototype,{hasPoint:function(t,e){var i,s,r,o=this.coords.scrCoords,n=utils_type.A.evaluate(this.visProp.sizeunit);return utils_type.A.isObject(utils_type.A.evaluate(this.visProp.precision))?(r=this.board._inputDevice,s=utils_type.A.evaluate(this.visProp.precision[r])):s=this.board.options.precision.hasPoint,i=parseFloat(utils_type.A.evaluate(this.visProp.size)),"user"===n&&(i*=Math.sqrt(Math.abs(this.board.unitX*this.board.unitY))),(i+=.5*parseFloat(utils_type.A.evaluate(this.visProp.strokewidth)))<s&&(i=s),Math.abs(o[1]-t)<i+2&&Math.abs(o[2]-e)<i+2},update:function(t){return this.needsUpdate?(this.updateCoords(t),utils_type.A.evaluate(this.visProp.trace)&&this.cloneToBackground(!0),this):this},updateTransform:function(t){var e,i;if(0===this.transformations.length||null===this.baseElement)return this;for(this===this.baseElement?(e=this.transformations[0].apply(this.baseElement,"self"),this.coords.setCoordinates(constants.A.COORDS_BY_USER,e)):e=this.transformations[0].apply(this.baseElement),this.coords.setCoordinates(constants.A.COORDS_BY_USER,e),i=1;i<this.transformations.length;i++)this.coords.setCoordinates(constants.A.COORDS_BY_USER,this.transformations[i].apply(this));return this},updateRenderer:function(){return this.updateRendererGeneric("updatePoint"),this},bounds:function(){return this.coords.usrCoords.slice(1).concat(this.coords.usrCoords.slice(1))},makeIntersection:function(t,e,i,s){var r;t=this.board.select(t),e=this.board.select(e),r=geometry.A.intersectionFunction(this.board,t,e,i,s,this.visProp.alwaysintersect),this.addConstraint([r]);try{t.addChild(this),e.addChild(this)}catch(i){throw new Error("JSXGraph: Can't create 'intersection' with parent types '"+typeof t+"' and '"+typeof e+"'.")}this.type=constants.A.OBJECT_TYPE_INTERSECTION,this.elType="intersection",this.parents=[t.id,e.id,i,s],this.generatePolynomial=function(){var i=t.generatePolynomial(this),s=e.generatePolynomial(this);return 0===i.length||0===s.length?[]:[i[0],s[0]]},this.prepareUpdate().update()},setStyle:function(t){return this.visProp.face=["cross","cross","cross","circle","circle","circle","circle","square","square","square","plus","plus","plus"][t],this.visProp.size=[2,3,4,1,2,3,4,2,3,4,2,3,4][t],this.board.renderer.changePointStyle(this),this},normalizeFace:function(t){return jxg.A.deprecated("Point.normalizeFace()","JXG.normalizePointFace()"),src_options.A.normalizePointFace(t)},face:function(t){jxg.A.deprecated("Point.face()","Point.setAttribute()"),this.setAttribute({face:t})},size:function(t){jxg.A.deprecated("Point.size()","Point.setAttribute()"),this.setAttribute({size:t})},isOn:function(t,e){var i,s;return e=e||math.A.eps,utils_type.A.isPoint(t)?this.Dist(t)<e:t.elementClass===constants.A.OBJECT_CLASS_LINE?("segment"!==t.elType||utils_type.A.evaluate(this.visProp.alwaysintersect)||(i=jxg.A.Math.Geometry.projectCoordsToSegment(this.coords.usrCoords,t.point1.coords.usrCoords,t.point2.coords.usrCoords))[1]>=0&&i[1]<=1)&&geometry.A.distPointLine(this.coords.usrCoords,t.stdform)<e:t.elementClass===constants.A.OBJECT_CLASS_CIRCLE?utils_type.A.evaluate(t.visProp.hasinnerpoints)?this.Dist(t.center)<t.Radius()+e:Math.abs(this.Dist(t.center)-t.Radius())<e:t.elementClass===constants.A.OBJECT_CLASS_CURVE?(s=geometry.A.projectPointToCurve(this,t,this.board)[0],geometry.A.distance(this.coords.usrCoords,s.usrCoords,3)<e):t.type===constants.A.OBJECT_TYPE_POLYGON?!(!utils_type.A.evaluate(t.visProp.hasinnerpoints)||!t.pnpoly(this.coords.usrCoords[1],this.coords.usrCoords[2],jxg.A.COORDS_BY_USER))||(i=geometry.A.projectCoordsToPolygon(this.coords.usrCoords,t),geometry.A.distance(this.coords.usrCoords,i,3)<e):t.type===constants.A.OBJECT_TYPE_TURTLE&&(s=geometry.A.projectPointToTurtle(this,t,this.board),geometry.A.distance(this.coords.usrCoords,s.usrCoords,3)<e)},cloneToBackground:function(){var t={};return t.id=this.id+"T"+this.numTraces,this.numTraces+=1,t.coords=this.coords,t.visProp=utils_type.A.deepCopy(this.visProp,this.visProp.traceattributes,!0),t.visProp.layer=this.board.options.layer.trace,t.elementClass=constants.A.OBJECT_CLASS_POINT,t.board=this.board,utils_type.A.clearVisPropOld(t),t.visPropCalc={visible:utils_type.A.evaluate(t.visProp.visible)},this.board.renderer.drawPoint(t),this.traces[t.id]=t.rendNode,this}}),jxg.A.createPoint=function(t,e,i){var s,r;if(r=utils_type.A.copyAttributes(i,t.options,"point"),!(s=coordselement.A.create(jxg.A.Point,t,e,r)))throw new Error("JSXGraph: Can't create point with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [x,y], [z,x,y], [element,transformation]");return s},jxg.A.createGlider=function(t,e,i){var s,r,o=utils_type.A.copyAttributes(i,t.options,"glider");return r=1===e.length?[0,0]:e.slice(0,2),(s=t.create("point",r,o)).makeGlider(e[e.length-1]),s},jxg.A.createIntersectionPoint=function(t,e,i){var s,r,o,n,a,l,h=utils_type.A.copyAttributes(i,t.options,"intersection");e.push(0,0),r=t.select(e[0]),o=t.select(e[1]),a=e[2]||0,l=e[3]||0,s=t.create("point",[0,0,0],h),n=geometry.A.intersectionFunction(t,r,o,a,l,s.visProp.alwaysintersect),s.addConstraint([n]);try{r.addChild(s),o.addChild(s)}catch(t){throw new Error("JSXGraph: Can't create 'intersection' with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.")}return s.type=constants.A.OBJECT_TYPE_INTERSECTION,s.elType="intersection",s.setParents([r.id,o.id]),s.intersectionNumbers=[a,l],s.getParents=function(){return this.parents.concat(this.intersectionNumbers)},s.generatePolynomial=function(){var t=r.generatePolynomial(s),e=o.generatePolynomial(s);return 0===t.length||0===e.length?[]:[t[0],e[0]]},s},jxg.A.createOtherIntersectionPoint=function(t,e,i){var s,r,o,n,a,l,h,u=!0,c=utils_type.A.copyAttributes(i,t.options,"otherintersection");if(3!==e.length)u=!1;else{for(r=t.select(e[0]),o=t.select(e[1]),a=utils_type.A.isArray(e[2])?e[2]:[e[2]],n=0;n<a.length;n++)if(a[n]=t.select(a[n]),!utils_type.A.isPoint(a[n])){u=!1;break}u&&((h=[r,o]).sort((function(t,e){return e.elementClass-t.elementClass})),([constants.A.OBJECT_CLASS_CIRCLE,constants.A.OBJECT_CLASS_CURVE].indexOf(h[0].elementClass)<0||[constants.A.OBJECT_CLASS_CIRCLE,constants.A.OBJECT_CLASS_CURVE,constants.A.OBJECT_CLASS_LINE].indexOf(h[1].elementClass)<0)&&(u=!1))}if(!u)throw new Error("JSXGraph: Can't create 'other intersection point' with parent types '"+typeof e[0]+"', '"+typeof e[1]+"'and '"+typeof e[2]+"'.\nPossible parent types: [circle|curve|line,circle|curve|line, point], not two lines");return s=t.create("point",[0,0,0],c),l=geometry.A.otherIntersectionFunction(h,a,s.visProp.alwaysintersect,s.visProp.precision),s.addConstraint([l]),s.type=constants.A.OBJECT_TYPE_INTERSECTION,s.elType="otherintersection",s.setParents([r.id,o.id]),s.addParents(a),r.addChild(s),o.addChild(s),r.elementClass===constants.A.OBJECT_CLASS_CIRCLE&&(s.generatePolynomial=function(){var t=r.generatePolynomial(s),e=o.generatePolynomial(s);return 0===t.length||0===e.length?[]:[t[0],e[0]]}),s},jxg.A.createPolePoint=function(t,e,i){var s,r,o,n,a,l,h;if(e.length>1&&(n=e[0].type===constants.A.OBJECT_TYPE_CONIC||e[0].elementClass===constants.A.OBJECT_CLASS_CIRCLE,a=e[1].type===constants.A.OBJECT_TYPE_CONIC||e[1].elementClass===constants.A.OBJECT_CLASS_CIRCLE,l=e[0].elementClass===constants.A.OBJECT_CLASS_LINE,h=e[1].elementClass===constants.A.OBJECT_CLASS_LINE),2!==e.length||!(n&&h||l&&a))throw new Error("JSXGraph: Can't create 'pole point' with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent type: [conic|circle,line], [line,conic|circle]");return h?(r=t.select(e[0]),o=t.select(e[1])):(r=t.select(e[1]),o=t.select(e[0])),(s=t.create("point",[function(){var t=r.quadraticform,e=o.stdform.slice(0,3);return[jxg.A.Math.Numerics.det([e,t[1],t[2]]),jxg.A.Math.Numerics.det([t[0],e,t[2]]),jxg.A.Math.Numerics.det([t[0],t[1],e])]}],i)).elType="polepoint",s.setParents([r.id,o.id]),r.addChild(s),o.addChild(s),s},jxg.A.registerElement("point",jxg.A.createPoint),jxg.A.registerElement("glider",jxg.A.createGlider),jxg.A.registerElement("intersection",jxg.A.createIntersectionPoint),jxg.A.registerElement("otherintersection",jxg.A.createOtherIntersectionPoint),jxg.A.registerElement("polepoint",jxg.A.createPolePoint);var point=jxg.A.Point;jxg.A.Line=function(t,e,i,s){this.constructor(t,s,constants.A.OBJECT_TYPE_LINE,constants.A.OBJECT_CLASS_LINE),this.point1=this.board.select(e),this.point2=this.board.select(i),this.ticks=[],this.defaultTicks=null,this.parentPolygon=null,this.id=this.board.setId(this,"L"),this.board.renderer.drawLine(this),this.board.finalizeAdding(this),this.elType="line",this.point1._is_new?(this.addChild(this.point1),delete this.point1._is_new):this.point1.addChild(this),this.point2._is_new?(this.addChild(this.point2),delete this.point2._is_new):this.point2.addChild(this),this.inherits.push(this.point1,this.point2),this.updateStdform(),this.createLabel(),this.methodMap=jxg.A.deepCopy(this.methodMap,{point1:"point1",point2:"point2",getSlope:"Slope",Slope:"Slope",Direction:"Direction",getRise:"getRise",Rise:"getRise",getYIntersect:"getRise",YIntersect:"getRise",getAngle:"getAngle",Angle:"getAngle",L:"L",length:"L",setFixedLength:"setFixedLength",setStraight:"setStraight"})},jxg.A.Line.prototype=new base_element.A,jxg.A.extend(jxg.A.Line.prototype,{hasPoint:function(t,e){var i,s,r,o,n,a,l,h,u,c=[],d=[1,t,e],p=utils_type.A.evaluate(this.visProp.strokewidth);return utils_type.A.isObject(utils_type.A.evaluate(this.visProp.precision))?(u=this.board._inputDevice,h=utils_type.A.evaluate(this.visProp.precision[u])):h=this.board.options.precision.hasPoint,h+=.5*p,c[0]=this.stdform[0]-this.stdform[1]*this.board.origin.scrCoords[1]/this.board.unitX+this.stdform[2]*this.board.origin.scrCoords[2]/this.board.unitY,c[1]=this.stdform[1]/this.board.unitX,c[2]=this.stdform[2]/-this.board.unitY,i=geometry.A.distPointLine(d,c),!(isNaN(i)||i>h)&&(!(!utils_type.A.evaluate(this.visProp.straightfirst)||!utils_type.A.evaluate(this.visProp.straightlast))||(r=this.point1.coords,o=this.point2.coords,s=[0,c[1],c[2]],s=math.A.crossProduct(s,d),(s=math.A.crossProduct(s,c))[1]/=s[0],s[2]/=s[0],s[0]=1,s=new base_coords.A(constants.A.COORDS_BY_SCREEN,s.slice(1),this.board).usrCoords,n=r.distance(constants.A.COORDS_BY_USER,o),r=r.usrCoords.slice(0),o=o.usrCoords.slice(0),n<math.A.eps?a=0:(n===Number.POSITIVE_INFINITY&&(n=1/math.A.eps,Math.abs(o[0])<math.A.eps?(n/=geometry.A.distance([0,0,0],o),o=[1,r[1]+o[1]*n,r[2]+o[2]*n]):(n/=geometry.A.distance([0,0,0],r),r=[1,o[1]+r[1]*n,o[2]+r[2]*n])),n=o[l=1]-r[l],Math.abs(n)<math.A.eps&&(n=o[l=2]-r[l]),a=(s[l]-r[l])/n),!(!utils_type.A.evaluate(this.visProp.straightfirst)&&a<0)&&!(!utils_type.A.evaluate(this.visProp.straightlast)&&a>1)))},update:function(){var t;return this.needsUpdate?(this.constrained&&(utils_type.A.isFunction(this.funps)?(t=this.funps())&&t.length&&2===t.length&&(this.point1=t[0],this.point2=t[1]):(utils_type.A.isFunction(this.funp1)&&(t=this.funp1(),utils_type.A.isPoint(t)?this.point1=t:t&&t.length&&2===t.length&&this.point1.setPositionDirectly(constants.A.COORDS_BY_USER,t)),utils_type.A.isFunction(this.funp2)&&(t=this.funp2(),utils_type.A.isPoint(t)?this.point2=t:t&&t.length&&2===t.length&&this.point2.setPositionDirectly(constants.A.COORDS_BY_USER,t)))),this.updateSegmentFixedLength(),this.updateStdform(),utils_type.A.evaluate(this.visProp.trace)&&this.cloneToBackground(!0),this):this},updateSegmentFixedLength:function(){var t,e,i,s,r,o,n,a;return this.hasFixedLength?(t=this.point1.Dist(this.point2),e=utils_type.A.evaluate(this.visProp.nonnegativeonly)?Math.max(0,this.fixedLength()):Math.abs(this.fixedLength()),i=this.fixedLengthOldCoords[0].distance(constants.A.COORDS_BY_USER,this.point1.coords),s=this.fixedLengthOldCoords[1].distance(constants.A.COORDS_BY_USER,this.point2.coords),(i>math.A.eps||s>math.A.eps||t!==e)&&(r=this.point1.isDraggable&&this.point1.type!==constants.A.OBJECT_TYPE_GLIDER&&!utils_type.A.evaluate(this.point1.visProp.fixed),o=this.point2.isDraggable&&this.point2.type!==constants.A.OBJECT_TYPE_GLIDER&&!utils_type.A.evaluate(this.point2.visProp.fixed),t>math.A.eps?i>s&&o||i<=s&&o&&!r?(this.point2.setPositionDirectly(constants.A.COORDS_BY_USER,[this.point1.X()+(this.point2.X()-this.point1.X())*e/t,this.point1.Y()+(this.point2.Y()-this.point1.Y())*e/t]),this.point2.fullUpdate()):(i<=s&&r||i>s&&r&&!o)&&(this.point1.setPositionDirectly(constants.A.COORDS_BY_USER,[this.point2.X()+(this.point1.X()-this.point2.X())*e/t,this.point2.Y()+(this.point1.Y()-this.point2.Y())*e/t]),this.point1.fullUpdate()):(n=Math.random()-.5,a=Math.random()-.5,t=math.A.hypot(n,a),o?(this.point2.setPositionDirectly(constants.A.COORDS_BY_USER,[this.point1.X()+n*e/t,this.point1.Y()+a*e/t]),this.point2.fullUpdate()):r&&(this.point1.setPositionDirectly(constants.A.COORDS_BY_USER,[this.point2.X()+n*e/t,this.point2.Y()+a*e/t]),this.point1.fullUpdate())),this.fixedLengthOldCoords[0].setCoordinates(constants.A.COORDS_BY_USER,this.point1.coords.usrCoords),this.fixedLengthOldCoords[1].setCoordinates(constants.A.COORDS_BY_USER,this.point2.coords.usrCoords)),this):this},updateStdform:function(){var t=math.A.crossProduct(this.point1.coords.usrCoords,this.point2.coords.usrCoords);this.stdform[0]=t[0],this.stdform[1]=t[1],this.stdform[2]=t[2],this.stdform[3]=0,this.normalize()},updateRenderer:function(){return this.needsUpdate?(this.visPropCalc.visible&&(this.isReal=!isNaN(this.point1.coords.usrCoords[1]+this.point1.coords.usrCoords[2]+this.point2.coords.usrCoords[1]+this.point2.coords.usrCoords[2])&&math.A.innerProduct(this.stdform,this.stdform,3)>=math.A.eps*math.A.eps,this.isReal||this.updateVisibility(!1)),this.visPropCalc.visible&&this.board.renderer.updateLine(this),this.hasLabel&&this.visPropCalc.visible&&this.label&&this.label.visPropCalc.visible&&this.isReal&&(this.label.update(),this.board.renderer.updateText(this.label)),this.setDisplayRendNode(),this.needsUpdate=!1,this):this},generatePolynomial:function(t){var e=this.point1.symbolic.x,i=this.point1.symbolic.y,s=this.point2.symbolic.x,r=this.point2.symbolic.y,o=t.symbolic.x,n=t.symbolic.y;return[["(",i,")*(",o,")-(",i,")*(",s,")+(",n,")*(",s,")-(",e,")*(",n,")+(",e,")*(",r,")-(",o,")*(",r,")"].join("")]},getRise:function(){return Math.abs(this.stdform[2])>=math.A.eps?-this.stdform[0]/this.stdform[2]:1/0},Slope:function(){return Math.abs(this.stdform[2])>=math.A.eps?-this.stdform[1]/this.stdform[2]:1/0},getSlope:function(){return this.Slope()},getAngle:function(){return Math.atan2(-this.stdform[1],this.stdform[2])},Direction:function(){var t=this.point1.coords.usrCoords,e=this.point2.coords.usrCoords;return 0===e[0]&&0!==t[0]?e.slice(1):0===t[0]&&0!==e[0]?[-t[1],-t[2]]:[e[1]-t[1],e[2]-t[2]]},isVertical:function(){var t=this.Direction();return 0===t[0]&&0!==t[1]},isHorizontal:function(){var t=this.Direction();return 0===t[1]&&0!==t[0]},setStraight:function(t,e){return this.visProp.straightfirst=t,this.visProp.straightlast=e,this.board.renderer.updateLine(this),this},getTextAnchor:function(){return new base_coords.A(constants.A.COORDS_BY_USER,[.5*(this.point2.X()+this.point1.X()),.5*(this.point2.Y()+this.point1.Y())],this.board)},setLabelRelativeCoords:function(t){utils_type.A.exists(this.label)&&(this.label.relativeCoords=new base_coords.A(constants.A.COORDS_BY_SCREEN,[t[0],-t[1]],this.board))},getLabelAnchor:function(){var t,e,i,s,r,o,n,a,l=1.5,h=0,u=new base_coords.A(constants.A.COORDS_BY_USER,this.point1.coords.usrCoords,this.board),c=new base_coords.A(constants.A.COORDS_BY_USER,this.point2.coords.usrCoords,this.board),d=utils_type.A.evaluate(this.visProp.straightfirst),p=utils_type.A.evaluate(this.visProp.straightlast);if((d||p)&&geometry.A.calcStraight(this,u,c,0),u=u.scrCoords,c=c.scrCoords,!utils_type.A.exists(this.label))return new base_coords.A(constants.A.COORDS_BY_SCREEN,[NaN,NaN],this.board);if(i=utils_type.A.evaluate(this.label.visProp.position),!utils_type.A.isString(i))return new base_coords.A(constants.A.COORDS_BY_SCREEN,[NaN,NaN],this.board);if(i.indexOf("right")<0&&i.indexOf("left")<0)switch(i){case"last":t=c[1],e=c[2];break;case"first":t=u[1],e=u[2];break;case"lft":case"llft":case"ulft":u[1]<=c[1]?(t=u[1],e=u[2]):(t=c[1],e=c[2]);break;case"rt":case"lrt":case"urt":u[1]>c[1]?(t=u[1],e=u[2]):(t=c[1],e=c[2]);break;default:t=.5*(u[1]+c[1]),e=.5*(u[2]+c[2])}else s=utils_type.A.parsePosition(i),r=utils_type.A.parseNumber(s.pos,1,1),o=c[1]-u[1],n=c[2]-u[2],a=math.A.hypot(o,n),s.pos.indexOf("px")>=0||s.pos.indexOf("fr")>=0||s.pos.indexOf("%")>=0?(s.pos.indexOf("px")>=0&&(r/=a),t=u[1]+r*o,e=u[2]+r*n):(t=u[1]+r*this.board.unitX*o/a,e=u[2]+r*this.board.unitY*n/a),"left"===s.side?o*=-1:n*=-1,utils_type.A.exists(this.label)&&(l=.5*utils_type.A.evaluate(this.label.visProp.distance)/a),t+=n*this.label.size[0]*l,e+=o*this.label.size[1]*l;return(d||p)&&(utils_type.A.exists(this.label)&&(h=utils_type.A.evaluate(this.label.visProp.fontsize)),Math.abs(t)<math.A.eps?t=h:this.board.canvasWidth+math.A.eps>t&&t>this.board.canvasWidth-h-math.A.eps&&(t=this.board.canvasWidth-h),math.A.eps+h>e&&e>-math.A.eps?e=h:this.board.canvasHeight+math.A.eps>e&&e>this.board.canvasHeight-h-math.A.eps&&(e=this.board.canvasHeight-h)),new base_coords.A(constants.A.COORDS_BY_SCREEN,[t,e],this.board)},cloneToBackground:function(){var t,e,i,s={};return s.id=this.id+"T"+this.numTraces,s.elementClass=constants.A.OBJECT_CLASS_LINE,this.numTraces++,s.point1=this.point1,s.point2=this.point2,s.stdform=this.stdform,s.board=this.board,s.visProp=utils_type.A.deepCopy(this.visProp,this.visProp.traceattributes,!0),s.visProp.layer=this.board.options.layer.trace,utils_type.A.clearVisPropOld(s),s.visPropCalc={visible:utils_type.A.evaluate(s.visProp.visible)},e=this.getSlope(),t=this.getRise(),s.getSlope=function(){return e},s.getRise=function(){return t},i=this.board.renderer.enhancedRendering,this.board.renderer.enhancedRendering=!0,this.board.renderer.drawLine(s),this.board.renderer.enhancedRendering=i,this.traces[s.id]=s.rendNode,this},addTransform:function(t){var e,i=utils_type.A.isArray(t)?t:[t],s=i.length;for(e=0;e<s;e++)this.point1.transformations.push(i[e]),this.point2.transformations.push(i[e]);return this},snapToGrid:function(t){var e,i,s,r,o,n,a,l;return utils_type.A.evaluate(this.visProp.snaptogrid)?this.parents.length<3?(this.point1.handleSnapToGrid(!0,!0),this.point2.handleSnapToGrid(!0,!0)):utils_type.A.exists(t)&&(a=utils_type.A.evaluate(this.visProp.snapsizex),l=utils_type.A.evaluate(this.visProp.snapsizey),o=(e=new base_coords.A(constants.A.COORDS_BY_SCREEN,[t.Xprev,t.Yprev],this.board)).usrCoords[1],n=e.usrCoords[2],a<=0&&this.board.defaultAxes&&this.board.defaultAxes.x.defaultTicks&&(a=(r=this.board.defaultAxes.x.defaultTicks).ticksDelta*(utils_type.A.evaluate(r.visProp.minorticks)+1)),l<=0&&this.board.defaultAxes&&this.board.defaultAxes.y.defaultTicks&&(l=(r=this.board.defaultAxes.y.defaultTicks).ticksDelta*(utils_type.A.evaluate(r.visProp.minorticks)+1)),a>0&&l>0&&(i=geometry.A.projectPointToLine({coords:e},this,this.board),s=statistics.A.subtract([1,Math.round(o/a)*a,Math.round(n/l)*l],i.usrCoords),this.board.create("transform",s.slice(1),{type:"translate"}).applyOnce([this.point1,this.point2]))):(this.point1.handleSnapToGrid(!1,!0),this.point2.handleSnapToGrid(!1,!0)),this},snapToPoints:function(){var t=utils_type.A.evaluate(this.visProp.snaptopoints);return this.parents.length<3&&(this.point1.handleSnapToPoints(t),this.point2.handleSnapToPoints(t)),this},X:function(t){var e,i=this.stdform[2];return e=Math.abs(this.point1.coords.usrCoords[0])>math.A.eps?this.point1.coords.usrCoords[1]:this.point2.coords.usrCoords[1],t=2*(t-.5),(1-Math.abs(t))*e-t*i},Y:function(t){var e,i=this.stdform[1];return e=Math.abs(this.point1.coords.usrCoords[0])>math.A.eps?this.point1.coords.usrCoords[2]:this.point2.coords.usrCoords[2],t=2*(t-.5),(1-Math.abs(t))*e+t*i},Z:function(t){var e=Math.abs(this.point1.coords.usrCoords[0])>math.A.eps?this.point1.coords.usrCoords[0]:this.point2.coords.usrCoords[0];return t=2*(t-.5),(1-Math.abs(t))*e},L:function(){return this.point1.Dist(this.point2)},setFixedLength:function(t){return this.hasFixedLength?(this.fixedLength=utils_type.A.createFunction(t,this.board),this.hasFixedLength=!0,this.addParentsFromJCFunctions([this.fixedLength]),this.board.update(),this):this},minX:function(){return 0},maxX:function(){return 1},bounds:function(){var t=this.point1.coords.usrCoords,e=this.point2.coords.usrCoords;return[Math.min(t[1],e[1]),Math.max(t[2],e[2]),Math.max(t[1],e[1]),Math.min(t[2],e[2])]},remove:function(){this.removeAllTicks(),base_element.A.prototype.remove.call(this)}}),jxg.A.createLine=function(t,e,i){var s,r,o,n,a,l,h,u=[],c=!1,d=!1;if(2===e.length){if(l=utils_type.A.copyAttributes(i,t.options,"line","point1"),utils_type.A.isArray(e[0])&&e[0].length>1)o=t.create("point",e[0],l);else if(utils_type.A.isString(e[0])||utils_type.A.isPoint(e[0]))o=t.select(e[0]);else if(utils_type.A.isFunction(e[0])&&utils_type.A.isPoint(e[0]()))o=e[0](),d=!0;else if(utils_type.A.isFunction(e[0])&&e[0]().length&&e[0]().length>=2)o=jxg.A.createPoint(t,e[0](),l),d=!0;else{if(!utils_type.A.isObject(e[0])||!utils_type.A.isTransformationOrArray(e[1]))throw new Error("JSXGraph: Can't create line with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,point], [[x1,y1],[x2,y2]], [a,b,c]");c=!0,o=t.create("point",[e[0].point1,e[1]],l)}if(l=utils_type.A.copyAttributes(i,t.options,"line","point2"),c)n=t.create("point",[e[0].point2,e[1]],l);else if(utils_type.A.isArray(e[1])&&e[1].length>1)n=t.create("point",e[1],l);else if(utils_type.A.isString(e[1])||utils_type.A.isPoint(e[1]))n=t.select(e[1]);else if(utils_type.A.isFunction(e[1])&&utils_type.A.isPoint(e[1]()))n=e[1](),d=!0;else{if(!(utils_type.A.isFunction(e[1])&&e[1]().length&&e[1]().length>=2))throw new Error("JSXGraph: Can't create line with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,point], [[x1,y1],[x2,y2]], [a,b,c]");n=jxg.A.createPoint(t,e[1](),l),d=!0}l=utils_type.A.copyAttributes(i,t.options,"line"),r=new jxg.A.Line(t,o,n,l),d?(r.constrained=!0,r.funp1=e[0],r.funp2=e[1]):c||(r.isDraggable=!0),r.setParents([o.id,n.id])}else if(3===e.length){for(h=!0,a=0;a<3;a++)if(utils_type.A.isNumber(e[a]))u[a]=utils_type.A.createFunction(e[a]);else{if(!utils_type.A.isFunction(e[a]))throw new Error("JSXGraph: Can't create line with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+"'.\nPossible parent types: [point,point], [[x1,y1],[x2,y2]], [a,b,c]");u[a]=e[a],h=!1}l=utils_type.A.copyAttributes(i,t.options,"line","point1"),o=h?t.create("point",[u[2]()*u[2]()+u[1]()*u[1](),u[2]()-u[1]()*u[0]()+u[2](),-u[1]()-u[2]()*u[0]()-u[1]()],l):t.create("point",[function(){return.5*(u[2]()*u[2]()+u[1]()*u[1]())},function(){return.5*(u[2]()-u[1]()*u[0]()+u[2]())},function(){return.5*(-u[1]()-u[2]()*u[0]()-u[1]())}],l),l=utils_type.A.copyAttributes(i,t.options,"line","point2"),n=h?t.create("point",[u[2]()*u[2]()+u[1]()*u[1](),-u[1]()*u[0]()+u[2](),-u[2]()*u[0]()-u[1]()],l):t.create("point",[function(){return u[2]()*u[2]()+u[1]()*u[1]()},function(){return-u[1]()*u[0]()+u[2]()},function(){return-u[2]()*u[0]()-u[1]()}],l),o.prepareUpdate().update(),n.prepareUpdate().update(),l=utils_type.A.copyAttributes(i,t.options,"line"),(r=new jxg.A.Line(t,o,n,l)).isDraggable=h,r.setParents([o,n])}else if(1===e.length&&utils_type.A.isFunction(e[0])&&2===e[0]().length&&utils_type.A.isPoint(e[0]()[0])&&utils_type.A.isPoint(e[0]()[1]))s=e[0](),l=utils_type.A.copyAttributes(i,t.options,"line"),(r=new jxg.A.Line(t,s[0],s[1],l)).constrained=!0,r.funps=e[0],r.setParents(s);else{if(!(1===e.length&&utils_type.A.isFunction(e[0])&&3===e[0]().length&&utils_type.A.isNumber(e[0]()[0])&&utils_type.A.isNumber(e[0]()[1])&&utils_type.A.isNumber(e[0]()[2])))throw new Error("JSXGraph: Can't create line with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,point], [[x1,y1],[x2,y2]], [a,b,c]");s=e[0],l=utils_type.A.copyAttributes(i,t.options,"line","point1"),o=t.create("point",[function(){var t=s();return[.5*(t[2]*t[2]+t[1]*t[1]),.5*(t[2]-t[1]*t[0]+t[2]),.5*(-t[1]-t[2]*t[0]-t[1])]}],l),l=utils_type.A.copyAttributes(i,t.options,"line","point2"),n=t.create("point",[function(){var t=s();return[t[2]*t[2]+t[1]*t[1],-t[1]*t[0]+t[2],-t[2]*t[0]-t[1]]}],l),l=utils_type.A.copyAttributes(i,t.options,"line"),(r=new jxg.A.Line(t,o,n,l)).constrained=!0,r.funps=e[0],r.setParents([o,n])}return r},jxg.A.registerElement("line",jxg.A.createLine),jxg.A.createSegment=function(t,e,i){var s,r;if(i.straightFirst=!1,i.straightLast=!1,r=utils_type.A.copyAttributes(i,t.options,"segment"),s=t.create("line",e.slice(0,2),r),3===e.length){try{s.hasFixedLength=!0,s.fixedLengthOldCoords=[],s.fixedLengthOldCoords[0]=new base_coords.A(constants.A.COORDS_BY_USER,s.point1.coords.usrCoords.slice(1,3),t),s.fixedLengthOldCoords[1]=new base_coords.A(constants.A.COORDS_BY_USER,s.point2.coords.usrCoords.slice(1,3),t),s.setFixedLength(e[2])}catch(t){throw new Error("JSXGraph: Can't create segment with third parent type '"+typeof e[2]+"'.\nPossible third parent types: number or function")}s.getParents=function(){return this.parents.concat(this.fixedLength())}}return s.elType="segment",s},jxg.A.registerElement("segment",jxg.A.createSegment),jxg.A.createArrow=function(t,e,i){var s,r;return i.straightFirst=!1,i.straightLast=!1,r=utils_type.A.copyAttributes(i,t.options,"arrow"),(s=t.create("line",e,r)).type=constants.A.OBJECT_TYPE_VECTOR,s.elType="arrow",s},jxg.A.registerElement("arrow",jxg.A.createArrow),jxg.A.createAxis=function(t,e,i){var s,r,o,n;r=utils_type.A.copyAttributes(i,t.options,"axis");try{s=t.create("line",e,r)}catch(t){throw new Error("JSXGraph: Can't create axis with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,point], [[x1,y1],[x2,y2]]")}for(o in s.type=constants.A.OBJECT_TYPE_AXIS,s.isDraggable=!1,s.point1.isDraggable=!1,s.point2.isDraggable=!1,s._point1UsrCoordsOrg=s.point1.coords.usrCoords.slice(),s._point2UsrCoordsOrg=s.point2.coords.usrCoords.slice(),s.ancestors)s.ancestors.hasOwnProperty(o)&&(s.ancestors[o].type=constants.A.OBJECT_TYPE_AXISPOINT);return n=utils_type.A.exists(r.ticks.ticksdistance)?r.ticks.ticksdistance:utils_type.A.isArray(r.ticks.ticks)?r.ticks.ticks:1,s.defaultTicks=t.create("ticks",[s,n],r.ticks),s.defaultTicks.dump=!1,s.elType="axis",s.subs={ticks:s.defaultTicks},s.inherits.push(s.defaultTicks),s.update=function(){var t,e,i,r,o,n,a,l,h,u,c,d,p,_,f,A,g,m,y;if(t=this.board.getBoundingBox(),e=utils_type.A.evaluate(this.visProp.position),r=this.Direction(),o=this.isHorizontal(),n=this.isVertical(),a=utils_type.A.evaluate(this.visProp.ticksautopos),l=utils_type.A.evaluate(this.visProp.ticksautoposthreshold),l=o?utils_type.A.parseNumber(l,Math.abs(t[1]-t[3]),1/this.board.unitX)*this.board.unitX:n?utils_type.A.parseNumber(l,Math.abs(t[1]-t[3]),1/this.board.unitY)*this.board.unitY:utils_type.A.parseNumber(l,1,1),c=(u=utils_type.A.evaluate(this.visProp.anchor)).indexOf("left")>-1,d=u.indexOf("right")>-1,p=utils_type.A.evaluate(this.visProp.anchordist),p=o?utils_type.A.parseNumber(p,Math.abs(t[1]-t[3]),1/this.board.unitX):n?utils_type.A.parseNumber(p,Math.abs(t[0]-t[2]),1/this.board.unitY):0,A=this.board.getPointLoc(this._point1UsrCoordsOrg,p),_=this.point1.coords.usrCoords.slice(),f=this.point2.coords.usrCoords.slice(),"static"===e||!n&&!o||("fixed"===e?(o&&(r[0]>0&&d||r[0]<0&&c?(_[2]=t[3]+p,f[2]=t[3]+p):r[0]>0&&c||r[0]<0&&d?(_[2]=t[1]-p,f[2]=t[1]-p):(_=this._point1UsrCoordsOrg.slice(),f=this._point2UsrCoordsOrg.slice())),n&&(r[1]>0&&c||r[1]<0&&d?(_[1]=t[0]+p,f[1]=t[0]+p):r[1]>0&&d||r[1]<0&&c?(_[1]=t[2]-p,f[1]=t[2]-p):(_=this._point1UsrCoordsOrg.slice(),f=this._point2UsrCoordsOrg.slice()))):"sticky"===e&&(o&&(A[1]<0&&(r[0]>0&&d||r[0]<0&&c)?(_[2]=t[3]+p,f[2]=t[3]+p):A[1]>0&&(r[0]>0&&c||r[0]<0&&d)?(_[2]=t[1]-p,f[2]=t[1]-p):(_=this._point1UsrCoordsOrg.slice(),f=this._point2UsrCoordsOrg.slice())),n&&(A[0]<0&&(r[1]>0&&c||r[1]<0&&d)?(_[1]=t[0]+p,f[1]=t[0]+p):A[0]>0&&(r[1]>0&&d||r[1]<0&&c)?(_[1]=t[2]-p,f[1]=t[2]-p):(_=this._point1UsrCoordsOrg.slice(),f=this._point2UsrCoordsOrg.slice())))),this.point1.setPositionDirectly(jxg.A.COORDS_BY_USER,_),this.point2.setPositionDirectly(jxg.A.COORDS_BY_USER,f),g=this.defaultTicks.visProp.label,a&&(o||n)){if(utils_type.A.exists(g._anchorx_org)||(g._anchorx_org=utils_type.A.def(g.anchorx,this.board.options.text.anchorX)),utils_type.A.exists(g._anchory_org)||(g._anchory_org=utils_type.A.def(g.anchory,this.board.options.text.anchorY)),utils_type.A.exists(g._offset_org)||(g._offset_org=g.offset.slice()),y=g.offset,o){for(h=s.point1.coords.scrCoords[2]-.5*this.board.canvasHeight,m=g.anchory,h<0&&Math.abs(h)>l?"bottom"===g._side&&("top"===g.anchory&&(m="bottom"),y[1]*=-1,g._side="top"):h>0&&Math.abs(h)>l?"top"===g._side&&("bottom"===g.anchory&&(m="top"),y[1]*=-1,g._side="bottom"):(m=g._anchory_org,y=g._offset_org.slice(),"top"===m?g._side="bottom":"bottom"===m?g._side="top":y[1]<0?g._side="bottom":g._side="top"),i=0;i<s.defaultTicks.labels.length;i++)this.defaultTicks.labels[i].visProp.anchory=m;g.anchory=m}else if(n){for((h=s.point1.coords.scrCoords[1]-.5*this.board.canvasWidth)<0&&Math.abs(h)>l?"right"===g._side&&("left"===g.anchorx&&(m="right"),y[0]*=-1,g._side="left"):h>0&&Math.abs(h)>l?"left"===g._side&&("right"===g.anchorx&&(m="left"),y[0]*=-1,g._side="right"):(m=g._anchorx_org,y=g._offset_org.slice(),"left"===m?g._side="right":"right"===m||y[0]<0?g._side="left":g._side="right"),i=0;i<s.defaultTicks.labels.length;i++)this.defaultTicks.labels[i].visProp.anchorx=m;g.anchorx=m}g.offset=y}else delete g._anchorx_org,delete g._anchory_org,delete g._offset_org;return jxg.A.Line.prototype.update.call(this),this.defaultTicks.needsUpdate=!0,this},s},jxg.A.registerElement("axis",jxg.A.createAxis),jxg.A.createTangent=function(t,e,i){var s,r,o,n,a,l,h;if(1===e.length)s=e[0],r=s.slideObject;else{if(2!==e.length)throw new Error("JSXGraph: Can't create tangent with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [glider|point], [point,line|curve|circle|conic]");if(utils_type.A.isPoint(e[0]))s=e[0],r=e[1];else{if(!utils_type.A.isPoint(e[1]))throw new Error("JSXGraph: Can't create tangent with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [glider|point], [point,line|curve|circle|conic]");r=e[0],s=e[1]}}if(l=utils_type.A.copyAttributes(i,t.options,"tangent"),r.elementClass===constants.A.OBJECT_CLASS_LINE?(a=t.create("line",[r.point1,r.point2],l)).glider=s:r.elementClass===constants.A.OBJECT_CLASS_CURVE&&r.type!==constants.A.OBJECT_TYPE_CONIC?"plot"!==utils_type.A.evaluate(r.visProp.curvetype)?(a=t.create("line",[function(){var e,i=r.X,o=r.Y;return e=s.type===constants.A.OBJECT_TYPE_GLIDER?s.position:"functiongraph"===utils_type.A.evaluate(r.visProp.curvetype)?s.X():geometry.A.projectPointToCurve(s,r,t)[1],[-s.X()*numerics.A.D(o)(e)+s.Y()*numerics.A.D(i)(e),numerics.A.D(r.Y)(e),-numerics.A.D(r.X)(e)]}],l),s.addChild(a),a.glider=s):(h=function(t,e,i){var r,o,n,a,l,h,u,c,d,p,_,f,A=Math.floor(t);if(1===e.bezierDegree)A===e.numberPoints-1&&A--;else{if(3!==e.bezierDegree)return 0;n=(t*((f="sector"===e.elType?(_=e.points.slice(3,e.numberPoints-3)).length:(_=e.points).length)-1)-(A=3*Math.floor(t*(f-1)/3)))/3,A>=f-1&&(A=f-4,n=1)}if(A<0)return 1;switch(1===e.bezierDegree?(r=e.points[A].usrCoords,o=e.points[A+1].usrCoords):(a=_[A].usrCoords,l=_[A+1].usrCoords,h=_[A+2].usrCoords,u=_[A+3].usrCoords,c=(1-n)*(1-n)*(l[1]-a[1])+2*(1-n)*n*(h[1]-l[1])+n*n*(u[1]-h[1]),d=(1-n)*(1-n)*(l[2]-a[2])+2*(1-n)*n*(h[2]-l[2])+n*n*(u[2]-h[2]),c/=p=math.A.hypot(c,d),d/=p,o=[1,(r=s.coords.usrCoords)[1]+c,r[2]+d]),i){case 0:return r[2]*o[1]-r[1]*o[2];case 1:return o[2]-r[2];case 2:return r[1]-o[1];default:return[r[2]*o[1]-r[1]*o[2],o[2]-r[2],r[1]-o[1]]}},a=t.create("line",[function(){var e;return e=s.type===constants.A.OBJECT_TYPE_GLIDER?s.position:geometry.A.projectPointToCurve(s,r,t)[1],h(e,r)}],l),s.addChild(a),a.glider=s):r.type===constants.A.OBJECT_TYPE_TURTLE?(a=t.create("line",[function(){var e,i;for(i=s.type===constants.A.OBJECT_TYPE_GLIDER?s.position:geometry.A.projectPointToTurtle(s,r,t)[1],e=Math.floor(i),o=0;o<r.objects.length;o++)if((n=r.objects[o]).type===constants.A.OBJECT_TYPE_CURVE){if(e<n.numberPoints)break;e-=n.numberPoints}return e===n.numberPoints-1&&e--,e<0?[1,0,0]:[n.Y(e)*n.X(e+1)-n.X(e)*n.Y(e+1),n.Y(e+1)-n.Y(e),n.X(e)-n.X(e+1)]}],l),s.addChild(a),a.glider=s):r.elementClass!==constants.A.OBJECT_CLASS_CIRCLE&&r.type!==constants.A.OBJECT_TYPE_CONIC||(a=t.create("line",[function(){return math.A.matVecMult(r.quadraticform,s.coords.usrCoords)}],l),s.addChild(a),a.glider=s),!utils_type.A.exists(a))throw new Error("JSXGraph: Couldn't create tangent with the given parents.");return a.elType="tangent",a.type=constants.A.OBJECT_TYPE_TANGENT,a.setParents(e),a},jxg.A.createRadicalAxis=function(t,e,i){var s,r,o;if(2!==e.length||e[0].elementClass!==constants.A.OBJECT_CLASS_CIRCLE||e[1].elementClass!==constants.A.OBJECT_CLASS_CIRCLE)throw new Error("JSXGraph: Can't create 'radical axis' with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent type: [circle,circle]");return r=t.select(e[0]),o=t.select(e[1]),(s=t.create("line",[function(){var t=r.stdform,e=o.stdform;return math.A.matVecMult(math.A.transpose([t.slice(0,3),e.slice(0,3)]),[e[3],-t[3]])}],i)).elType="radicalaxis",s.setParents([r.id,o.id]),r.addChild(s),o.addChild(s),s},jxg.A.createPolarLine=function(t,e,i){var s,r,o,n,a,l,h;if(e.length>1&&(n=e[0].type===constants.A.OBJECT_TYPE_CONIC||e[0].elementClass===constants.A.OBJECT_CLASS_CIRCLE,a=e[1].type===constants.A.OBJECT_TYPE_CONIC||e[1].elementClass===constants.A.OBJECT_CLASS_CIRCLE,l=utils_type.A.isPoint(e[0]),h=utils_type.A.isPoint(e[1])),2!==e.length||!(n&&h||l&&a))throw new Error("JSXGraph: Can't create 'polar line' with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent type: [conic|circle,point], [point,conic|circle]");return h?(r=t.select(e[0]),o=t.select(e[1])):(r=t.select(e[1]),o=t.select(e[0])),(s=t.create("tangent",[r,o],i)).elType="polarline",s},jxg.A.registerElement("tangent",jxg.A.createTangent),jxg.A.registerElement("polar",jxg.A.createTangent),jxg.A.registerElement("radicalaxis",jxg.A.createRadicalAxis),jxg.A.registerElement("polarline",jxg.A.createPolarLine);var line=jxg.A.Line;jxg.A.Group=function(t,e,i,s,r){var o,n,a,l;for(this.board=t,this.objects={},o=this.board.numObjects,this.board.numObjects+=1,""!==e&&utils_type.A.exists(e)?this.id=e:this.id=this.board.id+"Group"+o,this.board.groups[this.id]=this,this.type=constants.A.OBJECT_TYPE_POINT,this.elementClass=constants.A.OBJECT_CLASS_POINT,""!==i&&utils_type.A.exists(i)?this.name=i:this.name="group_"+this.board.generateName(this),delete this.type,this.coords={},this.needsRegularUpdate=r.needsregularupdate,this.rotationCenter="centroid",this.scaleCenter=null,this.rotationPoints=[],this.translationPoints=[],this.scalePoints=[],this.scaleDirections={},this.parents=[],n=utils_type.A.isArray(s)?s:Array.prototype.slice.call(arguments,3),a=0;a<n.length;a++)l=this.board.select(n[a]),!utils_type.A.evaluate(l.visProp.fixed)&&utils_type.A.exists(l.coords)&&this.addPoint(l);this.methodMap={ungroup:"ungroup",add:"addPoint",addPoint:"addPoint",addPoints:"addPoints",addGroup:"addGroup",remove:"removePoint",removePoint:"removePoint",setAttribute:"setAttribute",setProperty:"setAttribute"}},jxg.A.extend(jxg.A.Group.prototype,{ungroup:function(){var t,e,i;for(t in this.objects)this.objects.hasOwnProperty(t)&&(e=this.objects[t].point,utils_type.A.isArray(e.groups)&&(i=utils_type.A.indexOf(e.groups,this.id))>=0&&delete e.groups[i]);return this.objects={},this},addParents:function(t){var e,i,s;for(i=(s=utils_type.A.isArray(t)?t:arguments).length,e=0;e<i;++e)utils_type.A.isId(this.board,s[e])?this.parents.push(s[e]):utils_type.A.exists(s[e].id)&&this.parents.push(s[e].id);this.parents=utils_type.A.uniqueArray(this.parents)},setParents:function(t){return this.parents=[],this.addParents(t),this},getParents:function(){return utils_type.A.isArray(this.parents)?this.parents:[]},_updateCoordsCache:function(t){var e;""!==t&&utils_type.A.exists(this.objects[t])&&(e=this.objects[t].point,this.coords[e.id]={usrCoords:e.coords.usrCoords.slice(0)})},update:function(){var t,e,i,s,r,o,n,a,l,h,u=null;if(!this.needsUpdate)return this;if("nothing"===(t=this._update_find_drag_type()).action)return this._updateCoordsCache(t.id),this;if(u=this.objects[t.id].point,"translation"===t.action)l=[u.coords.usrCoords[1]-this.coords[t.id].usrCoords[1],u.coords.usrCoords[2]-this.coords[t.id].usrCoords[2]];else if("rotation"===t.action||"scaling"===t.action){if(i="rotation"===t.action?"rotationCenter":"scaleCenter",utils_type.A.isPoint(this[i]))h=this[i].coords.usrCoords.slice(1);else if("centroid"===this[i])h=this._update_centroid_center();else if(utils_type.A.isArray(this[i]))h=this[i];else{if(!utils_type.A.isFunction(this[i]))return this;h=this[i]()}if("rotation"===t.action)a=geometry.A.rad(this.coords[t.id].usrCoords.slice(1),h,this.objects[t.id].point),(l=this.board.create("transform",[a,h[0],h[1]],{type:"rotate"})).update();else{if("scaling"!==t.action)return this;if(r=geometry.A.distance(this.coords[t.id].usrCoords.slice(1),h),Math.abs(r)<math.A.eps)return this;r=geometry.A.distance(u.coords.usrCoords.slice(1),h)/r,o=this.scaleDirections[t.id].indexOf("x")>=0?r:1,n=this.scaleDirections[t.id].indexOf("y")>=0?r:1,(l=this.board.create("transform",[1,0,0,h[0]*(1-o),o,0,h[1]*(1-n),0,n],{type:"generic"})).update()}}for(e in this._update_apply_transformation(t,l),this.needsUpdate=!1,this.objects)if(this.objects.hasOwnProperty(e))for(s in this.objects[e].descendants)this.objects[e].descendants.hasOwnProperty(s)&&(this.objects[e].descendants.needsUpdate=this.objects[e].descendants.needsRegularUpdate||this.board.needsFullUpdate);for(e in this.board.updateElements(t),this.objects)this.objects.hasOwnProperty(e)&&this._updateCoordsCache(e);return this},_update_find_drag_type:function(){var t,e,i,s="nothing",r=[];for(t in this.objects)this.objects.hasOwnProperty(t)&&(e=this.objects[t].point).coords.distance(constants.A.COORDS_BY_USER,this.coords[t])>math.A.eps&&r.push(e.id);return 0===r.length?{action:s,id:"",changed:r}:(i=r[0],e=this.objects[i].point,r.length>1?s="translation":utils_type.A.isInArray(this.rotationPoints,e)&&utils_type.A.exists(this.rotationCenter)?s="rotation":utils_type.A.isInArray(this.scalePoints,e)&&utils_type.A.exists(this.scaleCenter)?s="scaling":utils_type.A.isInArray(this.translationPoints,e)&&(s="translation"),{action:s,id:i,changed:r})},_update_centroid_center:function(){var t,e,i;for(i in t=[0,0],e=0,this.coords)this.coords.hasOwnProperty(i)&&(t[0]+=this.coords[i].usrCoords[1],t[1]+=this.coords[i].usrCoords[2],++e);return e>0&&(t[0]/=e,t[1]/=e),t},_update_apply_transformation:function(t,e){var i,s;for(i in this.objects)this.objects.hasOwnProperty(i)&&(utils_type.A.exists(this.board.objects[i])?(s=this.objects[i].point).id!==t.id?"translation"===t.action?utils_type.A.isInArray(t.changed,s.id)||s.coords.setCoordinates(constants.A.COORDS_BY_USER,[this.coords[i].usrCoords[1]+e[0],this.coords[i].usrCoords[2]+e[1]]):"rotation"!==t.action&&"scaling"!==t.action||e.applyOnce([s]):"rotation"!==t.action&&"scaling"!==t.action||s.coords.setCoordinates(constants.A.COORDS_BY_USER,math.A.matVecMult(e.matrix,this.coords[s.id].usrCoords)):delete this.objects[i])},addPoint:function(t){return this.objects[t.id]={point:this.board.select(t)},this._updateCoordsCache(t.id),this.translationPoints.push(t),t.groups.push(this.id),t.groups=utils_type.A.uniqueArray(t.groups),this},addPoints:function(t){var e;for(e=0;e<t.length;e++)this.addPoint(t[e]);return this},addGroup:function(t){var e;for(e in t.objects)t.objects.hasOwnProperty(e)&&this.addPoint(t.objects[e].point);return this},removePoint:function(t){return delete this.objects[t.id],this},setRotationCenter:function(t){return this.rotationCenter=t,this},setRotationPoints:function(t){return this._setActionPoints("rotation",t)},addRotationPoint:function(t){return this._addActionPoint("rotation",t)},removeRotationPoint:function(t){return this._removeActionPoint("rotation",t)},setTranslationPoints:function(t){return this._setActionPoints("translation",t)},addTranslationPoint:function(t){return this._addActionPoint("translation",t)},removeTranslationPoint:function(t){return this._removeActionPoint("translation",t)},setScaleCenter:function(t){return this.scaleCenter=t,this},setScalePoints:function(t,e){var i,s,r;for(r=(i=utils_type.A.isArray(t)?t:arguments).length,s=0;s<r;++s)this.scaleDirections[this.board.select(i[s]).id]=e||"xy";return this._setActionPoints("scale",t)},addScalePoint:function(t,e){return this._addActionPoint("scale",t),this.scaleDirections[this.board.select(t).id]=e||"xy",this},removeScalePoint:function(t){return this._removeActionPoint("scale",t)},_setActionPoints:function(t,e){var i,s,r;for(r=(i=utils_type.A.isArray(e)?e:arguments).length,this[t+"Points"]=[],s=0;s<r;++s)this._addActionPoint(t,i[s]);return this},_addActionPoint:function(t,e){return this[t+"Points"].push(this.board.select(e)),this},_removeActionPoint:function(t,e){var i=this[t+"Points"].indexOf(this.board.select(e));return i>-1&&this[t+"Points"].splice(i,1),this},setProperty:function(){jxg.A.deprecated("Group.setProperty","Group.setAttribute()"),this.setAttribute.apply(this,arguments)},setAttribute:function(){var t;for(t in this.objects)this.objects.hasOwnProperty(t)&&this.objects[t].point.setAttribute.apply(this.objects[t].point,arguments);return this}}),jxg.A.createGroup=function(t,e,i){var s=utils_type.A.copyAttributes(i,t.options,"group"),r=new jxg.A.Group(t,s.id,s.name,e,s);return r.elType="group",r.setParents(e),r},jxg.A.registerElement("group",jxg.A.createGroup);var group=jxg.A.Group;jxg.A.Circle=function(t,e,i,s,r){this.constructor(t,r,constants.A.OBJECT_TYPE_CIRCLE,constants.A.OBJECT_CLASS_CIRCLE),this.method=e,this.midpoint=this.board.select(i),this.center=this.board.select(i),this.point2=null,this.radius=0,this.line=null,this.circle=null,this.points=[],"twoPoints"===e?(this.point2=t.select(s),this.radius=this.Radius()):"pointRadius"===e?(this.gxtterm=s,this.updateRadius=utils_type.A.createFunction(s,this.board),this.updateRadius(),this.addParentsFromJCFunctions([this.updateRadius])):"pointLine"===e?(this.line=t.select(s),this.radius=this.line.point1.coords.distance(constants.A.COORDS_BY_USER,this.line.point2.coords)):"pointCircle"===e&&(this.circle=t.select(s),this.radius=this.circle.Radius()),this.id=this.board.setId(this,"C"),this.board.renderer.drawEllipse(this),this.board.finalizeAdding(this),this.createGradient(),this.elType="circle",this.createLabel(),utils_type.A.exists(this.center._is_new)?(this.addChild(this.center),delete this.center._is_new):this.center.addChild(this),"pointRadius"===e?this.notifyParents(s):"pointLine"===e?this.line.addChild(this):"pointCircle"===e?this.circle.addChild(this):"twoPoints"===e&&(utils_type.A.exists(this.point2._is_new)?(this.addChild(this.point2),delete this.point2._is_new):this.point2.addChild(this)),this.methodMap=utils_type.A.deepCopy(this.methodMap,{setRadius:"setRadius",getRadius:"getRadius",Area:"Area",area:"Area",Perimeter:"Perimeter",Circumference:"Perimeter",radius:"Radius",Radius:"Radius",Diameter:"Diameter",center:"center",line:"line",point2:"point2"})},jxg.A.Circle.prototype=new base_element.A,jxg.A.extend(jxg.A.Circle.prototype,{hasPoint:function(t,e){var i,s,r,o,n,a=this.center.coords.usrCoords,l=new base_coords.A(constants.A.COORDS_BY_SCREEN,[t,e],this.board),h=this.Radius();return utils_type.A.isObject(utils_type.A.evaluate(this.visProp.precision))?(s=this.board._inputDevice,i=utils_type.A.evaluate(this.visProp.precision[s])):i=this.board.options.precision.hasPoint,r=a[1]-l.usrCoords[1],o=a[2]-l.usrCoords[2],n=math.A.hypot(r,o),i+=.5*utils_type.A.evaluate(this.visProp.strokewidth),i/=Math.sqrt(Math.abs(this.board.unitX*this.board.unitY)),utils_type.A.evaluate(this.visProp.hasinnerpoints)?n<h+i:Math.abs(n-h)<i},generatePolynomial:function(t){var e=this.center.symbolic.x,i=this.center.symbolic.y,s=t.symbolic.x,r=t.symbolic.y,o=this.generateRadiusSquared();return""===o?[]:["(("+s+")-("+e+"))^2 + (("+r+")-("+i+"))^2 - ("+o+")"]},generateRadiusSquared:function(){var t,e,i,s,r="";return"twoPoints"===this.method?(t=this.center.symbolic.x,e=this.center.symbolic.y,r="(("+(i=this.point2.symbolic.x)+")-("+t+"))^2 + (("+(s=this.point2.symbolic.y)+")-("+e+"))^2"):"pointRadius"===this.method?utils_type.A.isNumber(this.radius)&&(r=(this.radius*this.radius).toString()):"pointLine"===this.method?(i=this.line.point1.symbolic.x,s=this.line.point1.symbolic.y,r="(("+i+")-("+this.line.point2.symbolic.x+"))^2 + (("+s+")-("+this.line.point2.symbolic.y+"))^2"):"pointCircle"===this.method&&(r=this.circle.Radius()),r},update:function(){var t,e,i,s,r,o;if(this.needsUpdate)for(utils_type.A.evaluate(this.visProp.trace)&&this.cloneToBackground(!0),"pointLine"===this.method?this.radius=this.line.point1.coords.distance(constants.A.COORDS_BY_USER,this.line.point2.coords):"pointCircle"===this.method?this.radius=this.circle.Radius():"pointRadius"===this.method&&(this.radius=this.updateRadius()),this.radius=Math.abs(this.radius),this.updateStdform(),this.updateQuadraticform(),i=this.center.coords.usrCoords[0],t=this.center.coords.usrCoords[1]/i,e=this.center.coords.usrCoords[2]/i,i/=i,s=this.Radius(),r=.551915024494,this.numberPoints=13,this.dataX=[t+s,t+s,t+s*r,t,t-s*r,t-s,t-s,t-s,t-s*r,t,t+s*r,t+s,t+s],this.dataY=[e,e+s*r,e+s,e+s,e+s,e+s*r,e,e-s*r,e-s,e-s,e-s,e-s*r,e],this.bezierDegree=3,o=0;o<this.numberPoints;o++)this.points[o]=new base_coords.A(constants.A.COORDS_BY_USER,[this.dataX[o],this.dataY[o]],this.board);return this},updateQuadraticform:function(){var t=this.center,e=t.X(),i=t.Y(),s=this.Radius();this.quadraticform=[[e*e+i*i-s*s,-e,-i],[-e,1,0],[-i,0,1]]},updateStdform:function(){this.stdform[3]=.5,this.stdform[4]=this.Radius(),this.stdform[1]=-this.center.coords.usrCoords[1],this.stdform[2]=-this.center.coords.usrCoords[2],isFinite(this.stdform[4])||(this.stdform[0]=utils_type.A.exists(this.point2)?-(this.stdform[1]*this.point2.coords.usrCoords[1]+this.stdform[2]*this.point2.coords.usrCoords[2]):0),this.normalize()},updateRenderer:function(){return this.needsUpdate?(this.visPropCalc.visible&&(this.isReal=!isNaN(this.center.coords.usrCoords[1]+this.center.coords.usrCoords[2]+this.Radius())&&this.center.isReal,this.isReal||this.updateVisibility(!1)),this.visPropCalc.visible&&this.board.renderer.updateEllipse(this),this.hasLabel&&this.visPropCalc.visible&&this.label&&this.label.visPropCalc.visible&&this.isReal&&(this.label.update(),this.board.renderer.updateText(this.label)),this.setDisplayRendNode(),this.needsUpdate=!1,this):this},notifyParents:function(t){utils_type.A.isString(t)&&geonext.A.findDependencies(this,t,this.board)},setRadius:function(t){return this.updateRadius=utils_type.A.createFunction(t,this.board),this.addParentsFromJCFunctions([this.updateRadius]),this.board.update(),this},Radius:function(t){return utils_type.A.exists(t)?(this.setRadius(t),this.Radius()):"twoPoints"===this.method?utils_type.A.cmpArrays(this.point2.coords.usrCoords,[0,0,0])||utils_type.A.cmpArrays(this.center.coords.usrCoords,[0,0,0])?NaN:this.center.Dist(this.point2):"pointLine"===this.method||"pointCircle"===this.method?this.radius:"pointRadius"===this.method?utils_type.A.evaluate(this.visProp.nonnegativeonly)?Math.max(0,this.updateRadius()):Math.abs(this.updateRadius()):NaN},Diameter:function(){return 2*this.Radius()},getRadius:function(){return jxg.A.deprecated("Circle.getRadius()","Circle.Radius()"),this.Radius()},getTextAnchor:function(){return this.center.coords},getLabelAnchor:function(){var t,e,i,s,r,o,n=1.5,a=this.Radius(),l=this.center.coords.usrCoords,h=.7071067811865;if(!utils_type.A.exists(this.label))return new base_coords.A(constants.A.COORDS_BY_SCREEN,[NaN,NaN],this.board);if(i=utils_type.A.evaluate(this.label.visProp.position),!utils_type.A.isString(i))return new base_coords.A(constants.A.COORDS_BY_SCREEN,[NaN,NaN],this.board);if(!(i.indexOf("right")<0&&i.indexOf("left")<0))return l=this.center.coords.scrCoords,s=utils_type.A.parsePosition(i),r=utils_type.A.parseNumber(s.pos,2*Math.PI,1),s.pos.indexOf("fr")<0&&s.pos.indexOf("%")<0&&(s.pos.indexOf("px")>=0?r=0:r*=Math.PI/180),o=1,"left"===s.side&&(o=-1),utils_type.A.exists(this.label)&&(n=.5*o*utils_type.A.evaluate(this.label.visProp.distance)),t=l[1]+(a*this.board.unitX+this.label.size[0]*n)*Math.cos(r),e=l[2]-(a*this.board.unitY+this.label.size[1]*n)*Math.sin(r),new base_coords.A(constants.A.COORDS_BY_SCREEN,[t,e],this.board);switch(utils_type.A.evaluate(this.visProp.label.position)){case"lft":t=l[1]-a,e=l[2];break;case"llft":t=l[1]-h*a,e=l[2]-h*a;break;case"rt":t=l[1]+a,e=l[2];break;case"lrt":t=l[1]+h*a,e=l[2]-h*a;break;case"urt":t=l[1]+h*a,e=l[2]+h*a;break;case"top":t=l[1],e=l[2]+a;break;case"bot":t=l[1],e=l[2]-a;break;default:t=l[1]-h*a,e=l[2]+h*a}return new base_coords.A(constants.A.COORDS_BY_USER,[t,e],this.board)},cloneToBackground:function(){var t,e=this.Radius(),i={id:this.id+"T"+this.numTraces,elementClass:constants.A.OBJECT_CLASS_CIRCLE,center:{coords:this.center.coords},Radius:function(){return e},getRadius:function(){return e},board:this.board,visProp:utils_type.A.deepCopy(this.visProp,this.visProp.traceattributes,!0)};return i.visProp.layer=this.board.options.layer.trace,this.numTraces++,utils_type.A.clearVisPropOld(i),i.visPropCalc={visible:utils_type.A.evaluate(i.visProp.visible)},t=this.board.renderer.enhancedRendering,this.board.renderer.enhancedRendering=!0,this.board.renderer.drawEllipse(i),this.board.renderer.enhancedRendering=t,this.traces[i.id]=i.rendNode,this},addTransform:function(t){var e,i=utils_type.A.isArray(t)?t:[t],s=i.length;for(e=0;e<s;e++)this.center.transformations.push(i[e]),"twoPoints"===this.method&&this.point2.transformations.push(i[e]);return this},snapToGrid:function(){var t=utils_type.A.evaluate(this.visProp.snaptogrid);return this.center.handleSnapToGrid(t,!0),"twoPoints"===this.method&&this.point2.handleSnapToGrid(t,!0),this},snapToPoints:function(){var t=utils_type.A.evaluate(this.visProp.snaptopoints);return this.center.handleSnapToPoints(t),"twoPoints"===this.method&&this.point2.handleSnapToPoints(t),this},X:function(t){return this.Radius()*Math.cos(2*t*Math.PI)+this.center.coords.usrCoords[1]},Y:function(t){return this.Radius()*Math.sin(2*t*Math.PI)+this.center.coords.usrCoords[2]},Z:function(t){return 1},minX:function(){return 0},maxX:function(){return 1},Area:function(){var t=this.Radius();return t*t*Math.PI},Perimeter:function(){return 2*this.Radius()*Math.PI},bounds:function(){var t=this.center.coords.usrCoords,e=this.Radius();return[t[1]-e,t[2]+e,t[1]+e,t[2]-e]},getParents:function(){return 1===this.parents.length?this.parents.concat(this.radius):this.parents}}),jxg.A.createCircle=function(t,e,i){var s,r,o,n,a,l=["center","point2"];if(r=[],a=t.select(e[0]),utils_type.A.isObject(a)&&a.elementClass===constants.A.OBJECT_CLASS_CIRCLE&&utils_type.A.isTransformationOrArray(e[1]))return n=utils_type.A.copyAttributes(i,t.options,"circle"),(s=jxg.A.createEllipse(t,[a.center,a.center,function(){return 2*a.Radius()}],n)).addTransform(e[1]),s;for(o=0;o<e.length;o++)if(utils_type.A.isPointType(t,e[o])){if(e.length<3?r.push(utils_type.A.providePoints(t,[e[o]],i,"circle",[l[o]])[0]):r.push(utils_type.A.providePoints(t,[e[o]],i,"point")[0]),!1===r[r.length-1])throw new Error("JSXGraph: Can't create circle from this type. Please provide a point type.")}else r.push(e[o]);if(n=utils_type.A.copyAttributes(i,t.options,"circle"),2===r.length&&utils_type.A.isPoint(r[0])&&utils_type.A.isPoint(r[1]))s=new jxg.A.Circle(t,"twoPoints",r[0],r[1],n);else if((utils_type.A.isNumber(r[0])||utils_type.A.isFunction(r[0])||utils_type.A.isString(r[0]))&&utils_type.A.isPoint(r[1]))s=new jxg.A.Circle(t,"pointRadius",r[1],r[0],n);else if((utils_type.A.isNumber(r[1])||utils_type.A.isFunction(r[1])||utils_type.A.isString(r[1]))&&utils_type.A.isPoint(r[0]))s=new jxg.A.Circle(t,"pointRadius",r[0],r[1],n);else if(r[0].elementClass===constants.A.OBJECT_CLASS_CIRCLE&&utils_type.A.isPoint(r[1]))s=new jxg.A.Circle(t,"pointCircle",r[1],r[0],n);else if(r[1].elementClass===constants.A.OBJECT_CLASS_CIRCLE&&utils_type.A.isPoint(r[0]))s=new jxg.A.Circle(t,"pointCircle",r[0],r[1],n);else if(r[0].elementClass===constants.A.OBJECT_CLASS_LINE&&utils_type.A.isPoint(r[1]))s=new jxg.A.Circle(t,"pointLine",r[1],r[0],n);else if(r[1].elementClass===constants.A.OBJECT_CLASS_LINE&&utils_type.A.isPoint(r[0]))s=new jxg.A.Circle(t,"pointLine",r[0],r[1],n);else{if(!(3===e.length&&utils_type.A.isPoint(r[0])&&utils_type.A.isPoint(r[1])&&utils_type.A.isPoint(r[2])))throw new Error("JSXGraph: Can't create circle with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,point], [point,number], [point,function], [point,circle], [point,point,point], [circle,transformation]");if(!jxg.A.elements.circumcircle)throw new Error("JSXGraph: Can't create circle with three points. Please include the circumcircle element (element/composition).");s=jxg.A.elements.circumcircle(t,r,n)}for(s.isDraggable=!0,s.setParents(r),s.elType="circle",o=0;o<r.length;o++)utils_type.A.isPoint(r[o])&&s.inherits.push(r[o]);return s},jxg.A.registerElement("circle",jxg.A.createCircle);var circle=jxg.A.Circle;jxg.A.createEllipse=function(t,e,i){var s,r,o,n,a,l,h,u=[],c=utils_type.A.copyAttributes(i,t.options,"conic","foci"),d=utils_type.A.copyAttributes(i,t.options,"conic","center"),p=utils_type.A.copyAttributes(i,t.options,"conic");for(l=0;l<2;l++)if(e[l].length>1)u[l]=t.create("point",e[l],c);else if(utils_type.A.isPoint(e[l]))u[l]=t.select(e[l]);else if(utils_type.A.isFunction(e[l])&&utils_type.A.isPoint(e[l]()))u[l]=e[l]();else{if(!utils_type.A.isString(e[l]))throw new Error("JSXGraph: Can't create Ellipse with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,point,point], [point,point,number|function]");u[l]=t.select(e[l])}if(utils_type.A.isNumber(e[2]))a=utils_type.A.createFunction(e[2],t);else if(utils_type.A.isFunction(e[2])&&utils_type.A.isNumber(e[2]()))a=e[2];else{if(utils_type.A.isPoint(e[2]))n=t.select(e[2]);else if(e[2].length>1)n=t.create("point",e[2],c);else if(utils_type.A.isFunction(e[2])&&utils_type.A.isPoint(e[2]()))n=e[2]();else{if(!utils_type.A.isString(e[2]))throw new Error("JSXGraph: Can't create Ellipse with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+"'.\nPossible parent types: [point,point,point], [point,point,number|function]");n=t.select(e[2])}a=function(){return n.Dist(u[0])+n.Dist(u[1])}}for(utils_type.A.exists(e[4])||(e[4]=2*Math.PI),utils_type.A.exists(e[3])||(e[3]=0),o=t.create("point",[function(){return.5*(u[0].X()+u[1].X())},function(){return.5*(u[0].Y()+u[1].Y())}],d),(r=t.create("curve",[function(t){return 0},function(t){return 0},e[3],e[4]],p)).majorAxis=a,h=r.hasPoint,s=function(t,e){var i,s,o,n,l,h,c,d,p;e||(s=(i=a())*i,o=u[0].X(),n=u[0].Y(),c=o-(l=u[1].X()),d=n-(h=u[1].Y()),p=(s-o*o-n*n+l*l+h*h)/(2*i),r.quadraticform=[[p*p-l*l-h*h,p*c/i+l,p*d/i+h],[p*c/i+l,c*c/s-1,c*d/s],[p*d/i+h,c*d/s,d*d/s-1]])},r.X=function(t,e){var i=a(),r=u[1].Dist(u[0]),o=.5*(r*r-i*i)/(r*Math.cos(t)-i),n=Math.atan2(u[1].Y()-u[0].Y(),u[1].X()-u[0].X());return e||s(0,e),u[0].X()+Math.cos(n+t)*o},r.Y=function(t,e){var i=a(),s=u[1].Dist(u[0]),r=.5*(s*s-i*i)/(s*Math.cos(t)-i),o=Math.atan2(u[1].Y()-u[0].Y(),u[1].X()-u[0].X());return u[0].Y()+Math.sin(o+t)*r},r.midpoint=r.center=o,r.type=constants.A.OBJECT_TYPE_CONIC,r.subs={center:r.center},r.inherits.push(r.center,u[0],u[1]),utils_type.A.isPoint(n)&&r.inherits.push(n),r.hasPoint=function(t,e){var i,s,r,o;return utils_type.A.evaluate(this.visProp.hasinnerpoints)?(i=u[0].coords,s=u[1].coords,r=this.majorAxis(),(o=new base_coords.A(constants.A.COORDS_BY_SCREEN,[t,e],this.board)).distance(constants.A.COORDS_BY_USER,i)+o.distance(constants.A.COORDS_BY_USER,s)<=r):h.apply(this,arguments)},o.addChild(r),l=0;l<2;l++)utils_type.A.isPoint(u[l])&&u[l].addChild(r);return utils_type.A.isPoint(n)&&n.addChild(r),r.setParents(e),r},jxg.A.createHyperbola=function(t,e,i){var s,r,o,n,a,l,h=[],u=utils_type.A.copyAttributes(i,t.options,"conic","foci"),c=utils_type.A.copyAttributes(i,t.options,"conic","center"),d=utils_type.A.copyAttributes(i,t.options,"conic");for(l=0;l<2;l++)if(e[l].length>1)h[l]=t.create("point",e[l],u);else if(utils_type.A.isPoint(e[l]))h[l]=t.select(e[l]);else if(utils_type.A.isFunction(e[l])&&utils_type.A.isPoint(e[l]()))h[l]=e[l]();else{if(!utils_type.A.isString(e[l]))throw new Error("JSXGraph: Can't create Hyperbola with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,point,point], [point,point,number|function]");h[l]=t.select(e[l])}if(utils_type.A.isNumber(e[2]))a=utils_type.A.createFunction(e[2],t);else if(utils_type.A.isFunction(e[2])&&utils_type.A.isNumber(e[2]()))a=e[2];else{if(utils_type.A.isPoint(e[2]))n=t.select(e[2]);else if(e[2].length>1)n=t.create("point",e[2],u);else if(utils_type.A.isFunction(e[2])&&utils_type.A.isPoint(e[2]()))n=e[2]();else{if(!utils_type.A.isString(e[2]))throw new Error("JSXGraph: Can't create Hyperbola with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+"'.\nPossible parent types: [point,point,point], [point,point,number|function]");n=t.select(e[2])}a=function(){return n.Dist(h[0])-n.Dist(h[1])}}for(utils_type.A.exists(e[4])||(e[4]=1.0001*Math.PI),utils_type.A.exists(e[3])||(e[3]=-1.0001*Math.PI),o=t.create("point",[function(){return.5*(h[0].X()+h[1].X())},function(){return.5*(h[0].Y()+h[1].Y())}],c),(r=t.create("curve",[function(t){return 0},function(t){return 0},e[3],e[4]],d)).majorAxis=a,s=function(t,e){var i,s,o,n,l,u,c,d,p;e||(s=(i=a())*i,o=h[0].X(),n=h[0].Y(),c=o-(l=h[1].X()),d=n-(u=h[1].Y()),p=(s-o*o-n*n+l*l+u*u)/(2*i),r.quadraticform=[[p*p-l*l-u*u,p*c/i+l,p*d/i+u],[p*c/i+l,c*c/s-1,c*d/s],[p*d/i+u,c*d/s,d*d/s-1]])},r.X=function(t,e){var i=a(),r=h[1].Dist(h[0]),o=.5*(r*r-i*i)/(r*Math.cos(t)+i),n=Math.atan2(h[1].Y()-h[0].Y(),h[1].X()-h[0].X());return e||s(0,e),h[0].X()+Math.cos(n+t)*o},r.Y=function(t,e){var i=a(),s=h[1].Dist(h[0]),r=.5*(s*s-i*i)/(s*Math.cos(t)+i),o=Math.atan2(h[1].Y()-h[0].Y(),h[1].X()-h[0].X());return h[0].Y()+Math.sin(o+t)*r},r.midpoint=r.center=o,r.subs={center:r.center},r.inherits.push(r.center,h[0],h[1]),utils_type.A.isPoint(n)&&r.inherits.push(n),r.type=constants.A.OBJECT_TYPE_CONIC,o.addChild(r),l=0;l<2;l++)utils_type.A.isPoint(h[l])&&h[l].addChild(r);return utils_type.A.isPoint(n)&&n.addChild(r),r.setParents(e),r},jxg.A.createParabola=function(t,e,i){var s,r,o,n,a=e[0],l=e[1],h=utils_type.A.copyAttributes(i,t.options,"conic","foci"),u=utils_type.A.copyAttributes(i,t.options,"conic","center"),c=utils_type.A.copyAttributes(i,t.options,"conic");if(e[0].length>1)a=t.create("point",e[0],h);else if(utils_type.A.isPoint(e[0]))a=t.select(e[0]);else if(utils_type.A.isFunction(e[0])&&utils_type.A.isPoint(e[0]()))a=e[0]();else{if(!utils_type.A.isString(e[0]))throw new Error("JSXGraph: Can't create Parabola with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,line]");a=t.select(e[0])}return utils_type.A.isArray(l)&&2===l.length&&(n=utils_type.A.copyAttributes(i,t.options,"conic","line"),l=t.create("line",l,n)),utils_type.A.exists(e[3])||(e[3]=2*Math.PI),utils_type.A.exists(e[2])||(e[2]=0),o=t.create("point",[function(){return geometry.A.projectPointToLine(a,l,t).usrCoords}],u),(r=t.create("curve",[function(t){return 0},function(t){return 0},e[2],e[3]],c)).midpoint=r.center=o,r.subs={center:r.center},r.inherits.push(r.center),s=function(t,e){var i,s,o,n,h,u;e||(i=l.stdform[1],s=l.stdform[2],o=l.stdform[0],n=i*i+s*s,h=a.X(),u=a.Y(),r.quadraticform=[[o*o-n*(h*h+u*u),o*i+n*h,o*s+n*u],[o*i+n*h,-s*s,i*s],[o*s+n*u,i*s,-i*i]])},r.X=function(t,e){var i,r=l.getAngle(),o=geometry.A.distPointLine(a.coords.usrCoords,l.stdform),n=l.point1.coords.usrCoords,h=l.point2.coords.usrCoords,u=a.coords.usrCoords;return 0===n[0]?n=[1,h[1]+l.stdform[2],h[2]-l.stdform[1]]:0===h[0]&&(h=[1,n[1]+l.stdform[2],n[2]-l.stdform[1]]),i=((h[1]-n[1])*(u[2]-n[2])-(h[2]-n[2])*(u[1]-n[1])>=0?1:-1)*o/(1-Math.sin(t)),e||s(0,e),a.X()+Math.cos(t+r)*i},r.Y=function(t,e){var i,s=l.getAngle(),r=geometry.A.distPointLine(a.coords.usrCoords,l.stdform),o=l.point1.coords.usrCoords,n=l.point2.coords.usrCoords,h=a.coords.usrCoords;return 0===o[0]?o=[1,n[1]+l.stdform[2],n[2]-l.stdform[1]]:0===n[0]&&(n=[1,o[1]+l.stdform[2],o[2]-l.stdform[1]]),i=((n[1]-o[1])*(h[2]-o[2])-(n[2]-o[2])*(h[1]-o[1])>=0?1:-1)*r/(1-Math.sin(t)),a.Y()+Math.sin(t+s)*i},r.type=constants.A.OBJECT_TYPE_CONIC,o.addChild(r),utils_type.A.isPoint(a)&&(a.addChild(r),r.inherits.push(a)),l.addChild(r),r.setParents(e),r},jxg.A.createConic=function(t,e,i){var s,r,o,n,a,l,h,u,c,d,p,_,f,A,g=[[1,0,0],[0,1,0],[0,0,1]],m=[[1,0,0],[0,1,0],[0,0,1]],y=[],b=[],v=utils_type.A.copyAttributes(i,t.options,"conic","point"),C=utils_type.A.copyAttributes(i,t.options,"conic","center"),P=utils_type.A.copyAttributes(i,t.options,"conic");if(5===e.length)A=!0;else{if(6!==e.length)throw new Error("JSXGraph: Can't create generic Conic with "+e.length+" parameters.");A=!1}if(A)for(_=0;_<5;_++)if(e[_].length>1)y[_]=t.create("point",e[_],v);else if(utils_type.A.isPoint(e[_]))y[_]=t.select(e[_]);else if(utils_type.A.isFunction(e[_])&&utils_type.A.isPoint(e[_]()))y[_]=e[_]();else{if(!utils_type.A.isString(e[_]))throw new Error("JSXGraph: Can't create Conic section with parent types '"+typeof e[_]+"'.\nPossible parent types: [point,point,point,point,point], [a00,a11,a22,a01,a02,a12]");y[_]=t.select(e[_])}else(f=[[0,0,0],[0,0,0],[0,0,0]])[0][0]=utils_type.A.isFunction(e[2])?function(){return e[2]()}:function(){return e[2]},f[0][1]=utils_type.A.isFunction(e[4])?function(){return e[4]()}:function(){return e[4]},f[0][2]=utils_type.A.isFunction(e[5])?function(){return e[5]()}:function(){return e[5]},f[1][1]=utils_type.A.isFunction(e[0])?function(){return e[0]()}:function(){return e[0]},f[1][2]=utils_type.A.isFunction(e[3])?function(){return e[3]()}:function(){return e[3]},f[2][2]=utils_type.A.isFunction(e[1])?function(){return e[1]()}:function(){return e[1]};if(a=function(t){var e,i;for(e=0;e<3;e++)for(i=e;i<3;i++)t[e][i]+=t[i][e];for(e=0;e<3;e++)for(i=0;i<e;i++)t[e][i]=t[i][e];return t},n=function(t,e){var i,s,r=[[0,0,0],[0,0,0],[0,0,0]];for(i=0;i<3;i++)for(s=0;s<3;s++)r[i][s]=t[i]*e[s];return a(r)},o=function(t,e,i){var s,r,o,n,a,l=[[0,0,0],[0,0,0],[0,0,0]];for(a=math.A.matVecMult(e,i),o=math.A.innerProduct(i,a),a=math.A.matVecMult(t,i),n=math.A.innerProduct(i,a),s=0;s<3;s++)for(r=0;r<3;r++)l[s][r]=o*t[s][r]-n*e[s][r];return l},r=t.create("curve",[function(t){return 0},function(t){return 0},0,2*Math.PI],P),s=function(t,e){var i,s,a;if(!e){if(A){for(i=0;i<5;i++)b[i]=y[i].coords.usrCoords;d=n(math.A.crossProduct(b[0],b[1]),math.A.crossProduct(b[2],b[3])),p=n(math.A.crossProduct(b[0],b[2]),math.A.crossProduct(b[1],b[3])),m=o(d,p,b[4])}else for(i=0;i<3;i++)for(s=i;s<3;s++)m[i][s]=f[i][s](),s>i&&(m[s][i]=m[i][s]);r.quadraticform=m,(l=numerics.A.Jacobi(m))[0][0][0]<0&&(l[0][0][0]*=-1,l[0][1][1]*=-1,l[0][2][2]*=-1),g=l[1],c=Math.sqrt(Math.abs(l[0][0][0])),h=Math.sqrt(Math.abs(l[0][1][1])),u=Math.sqrt(Math.abs(l[0][2][2]))}return l[0][1][1]<=0&&l[0][2][2]<=0?a=math.A.matVecMult(g,[1/c,Math.cos(t)/h,Math.sin(t)/u]):l[0][1][1]<=0&&l[0][2][2]>0?a=math.A.matVecMult(g,[Math.cos(t)/c,1/h,Math.sin(t)/u]):l[0][2][2]<0&&(a=math.A.matVecMult(g,[Math.sin(t)/c,Math.cos(t)/h,1/u])),utils_type.A.exists(a)?(a[1]/=a[0],a[2]/=a[0],a[0]=1):a=[1,NaN,NaN],a},r.X=function(t,e){return s(t,e)[1]},r.Y=function(t,e){return s(t,e)[2]},r.midpoint=t.create("point",[function(){var t=r.quadraticform;return[t[1][1]*t[2][2]-t[1][2]*t[1][2],t[1][2]*t[0][2]-t[2][2]*t[0][1],t[0][1]*t[1][2]-t[1][1]*t[0][2]]}],C),r.type=constants.A.OBJECT_TYPE_CONIC,r.center=r.midpoint,r.subs={center:r.center},r.inherits.push(r.center),r.inherits=r.inherits.concat(y),A){for(_=0;_<5;_++)utils_type.A.isPoint(y[_])&&y[_].addChild(r);r.setParents(e)}return r.addChild(r.center),r},jxg.A.registerElement("ellipse",jxg.A.createEllipse),jxg.A.registerElement("hyperbola",jxg.A.createHyperbola),jxg.A.registerElement("parabola",jxg.A.createParabola),jxg.A.registerElement("conic",jxg.A.createConic),jxg.A.Polygon=function(t,e,i){this.constructor(t,i,constants.A.OBJECT_TYPE_POLYGON,constants.A.OBJECT_CLASS_AREA);var s,r,o,n,a,l=utils_type.A.copyAttributes(i,t.options,"polygon","borders");for(this.withLines=i.withlines,this.attr_line=l,this.vertices=[],s=0;s<e.length;s++)this.vertices[s]=this.board.select(e[s]),this.vertices[s]._is_new&&(delete this.vertices[s]._is_new,this.vertices[s]._is_new_pol=!0);if(this.vertices.length>0&&this.vertices[this.vertices.length-1].id!==this.vertices[0].id&&this.vertices.push(this.vertices[0]),this.borders=[],this.withLines)for(o=this.vertices.length-1,n=0;n<o;n++)s=(n+1)%o,l.id=l.ids&&l.ids[s],l.name=l.names&&l.names[s],l.strokecolor=utils_type.A.isArray(l.colors)&&l.colors[s%l.colors.length]||l.strokecolor,l.visible=utils_type.A.exists(i.borders.visible)?i.borders.visible:i.visible,!1===l.strokecolor&&(l.strokecolor="none"),(r=t.create("segment",[this.vertices[s],this.vertices[s+1]],l)).dump=!1,this.borders[s]=r,r.parentPolygon=this,this.addChild(r);for(this.inherits.push(this.vertices,this.borders),this.id=this.board.setId(this,"Py"),s=0;s<this.vertices.length-1;s++)a=this.board.select(this.vertices[s]),utils_type.A.exists(a._is_new_pol)?(this.addChild(a),delete a._is_new_pol):a.addChild(this);this.board.renderer.drawPolygon(this),this.board.finalizeAdding(this),this.createGradient(),this.elType="polygon",this.createLabel(),this.methodMap=jxg.A.deepCopy(this.methodMap,{borders:"borders",vertices:"vertices",A:"Area",Area:"Area",Perimeter:"Perimeter",L:"Perimeter",boundingBox:"bounds",BoundingBox:"bounds",addPoints:"addPoints",insertPoints:"insertPoints",removePoints:"removePoints",Intersect:"intersect"})},jxg.A.Polygon.prototype=new base_element.A,jxg.A.extend(jxg.A.Polygon.prototype,{pnpoly:function(t,e,i){return geometry.A.pnpoly(t,e,this.vertices,i)},hasPoint:function(t,e){var i,s;if(utils_type.A.evaluate(this.visProp.hasinnerpoints)&&this.pnpoly(t,e))return!0;for(s=this.borders.length,i=0;i<s;i++)if(this.borders[i].hasPoint(t,e))return!0;return!1},updateRenderer:function(){var t,e;if(!this.needsUpdate)return this;if(this.visPropCalc.visible){for(e=this.vertices.length-("polygonalchain"===this.elType?0:1),this.isReal=!0,t=0;t<e;++t)if(!this.vertices[t].isReal){this.isReal=!1;break}if(!this.isReal)for(t in this.updateVisibility(!1),this.childElements)this.childElements.hasOwnProperty(t)&&this.childElements[t].setDisplayRendNode(!1)}return this.visPropCalc.visible&&this.board.renderer.updatePolygon(this),this.hasLabel&&this.visPropCalc.visible&&this.label&&this.label.visPropCalc.visible&&this.isReal&&(this.label.update(),this.board.renderer.updateText(this.label)),this.setDisplayRendNode(),this.needsUpdate=!1,this},getTextAnchor:function(){var t,e,i,s,r;if(0===this.vertices.length)return new base_coords.A(constants.A.COORDS_BY_USER,[1,0,0],this.board);for(i=t=this.vertices[0].X(),s=e=this.vertices[0].Y(),r=0;r<this.vertices.length;r++)this.vertices[r].X()<t&&(t=this.vertices[r].X()),this.vertices[r].X()>i&&(i=this.vertices[r].X()),this.vertices[r].Y()>e&&(e=this.vertices[r].Y()),this.vertices[r].Y()<s&&(s=this.vertices[r].Y());return new base_coords.A(constants.A.COORDS_BY_USER,[.5*(t+i),.5*(e+s)],this.board)},getLabelAnchor:jxg.A.shortcut(jxg.A.Polygon.prototype,"getTextAnchor"),cloneToBackground:function(){var t,e={};return e.id=this.id+"T"+this.numTraces,this.numTraces++,e.vertices=this.vertices,e.visProp=utils_type.A.deepCopy(this.visProp,this.visProp.traceattributes,!0),e.visProp.layer=this.board.options.layer.trace,e.board=this.board,utils_type.A.clearVisPropOld(e),e.visPropCalc={visible:utils_type.A.evaluate(e.visProp.visible)},t=this.board.renderer.enhancedRendering,this.board.renderer.enhancedRendering=!0,this.board.renderer.drawPolygon(e),this.board.renderer.enhancedRendering=t,this.traces[e.id]=e.rendNode,this},hideElement:function(t){var e;if(jxg.A.deprecated("Element.hideElement()","Element.setDisplayRendNode()"),this.visPropCalc.visible=!1,this.board.renderer.display(this,!1),!t)for(e=0;e<this.borders.length;e++)this.borders[e].hideElement();this.hasLabel&&utils_type.A.exists(this.label)&&(this.label.hiddenByParent=!0,this.label.visPropCalc.visible&&this.label.hideElement())},showElement:function(t){var e;if(jxg.A.deprecated("Element.showElement()","Element.setDisplayRendNode()"),this.visPropCalc.visible=!0,this.board.renderer.display(this,!0),!t)for(e=0;e<this.borders.length;e++)this.borders[e].showElement().updateRenderer();return utils_type.A.exists(this.label)&&this.hasLabel&&this.label.hiddenByParent&&(this.label.hiddenByParent=!1,this.label.visPropCalc.visible||this.label.showElement().updateRenderer()),this},Area:function(){return Math.abs(geometry.A.signedPolygon(this.vertices,!0))},Perimeter:function(){var t,e=this.vertices.length,i=0;for(t=1;t<e;++t)i+=this.vertices[t].Dist(this.vertices[t-1]);return i},L:function(){return this.Perimeter()},boundingBox:function(){var t,e,i=[0,0,0,0],s=this.vertices.length-1;if(0===s)return i;for(i[0]=this.vertices[0].X(),i[2]=i[0],i[1]=this.vertices[0].Y(),i[3]=i[1],t=1;t<s;++t)(e=this.vertices[t].X())<i[0]?i[0]=e:e>i[2]&&(i[2]=e),(e=this.vertices[t].Y())>i[1]?i[1]=e:e<i[3]&&(i[3]=e);return i},bounds:function(){return this.boundingBox()},remove:function(){var t;for(t=0;t<this.borders.length;t++)this.board.removeObject(this.borders[t]);base_element.A.prototype.remove.call(this)},findPoint:function(t){var e;if(!utils_type.A.isPoint(t))return-1;for(e=0;e<this.vertices.length;e++)if(this.vertices[e].id===t.id)return e;return-1},addPoints:function(t){var e,i=Array.prototype.slice.call(arguments);return e="polygonalchain"===this.elType?this.vertices.length-1:this.vertices.length-2,this.insertPoints.apply(this,[e].concat(i))},insertPoints:function(t,e){var i,s,r,o,n;if(0===arguments.length)return this;if(r=this.vertices.length-1,"polygon"===this.elType&&r--,t<-1||t>r)return this;for(s=arguments.length-1,i=1;i<s+1;i++)(n=utils_type.A.providePoints(this.board,[arguments[i]],{},"polygon",["vertices"])[0])._is_new&&(this.addChild(n),delete n._is_new),this.vertices.splice(t+i,0,n);if(this.withLines)for(o=t+1,"polygon"===this.elType?t<0?(this.vertices[this.vertices.length-1]=this.vertices[0],this.borders[this.borders.length-1].point2=this.vertices[this.vertices.length-1]):this.borders[t].point2=this.vertices[o]:t>=0&&(t<this.borders.length?this.borders[t].point2=this.vertices[o]:o=t),i=o;i<o+s;i++)this.borders.splice(i,0,this.board.create("segment",[this.vertices[i],this.vertices[i+1]],this.attr_line));return this.inherits=[],this.inherits.push(this.vertices,this.borders),this.board.update(),this},removePoints:function(t){var e,i,s,r,o=[],n=[],a=[],l=[];for("polygon"===this.elType&&(r=this.vertices.pop()),e=0;e<arguments.length;e++)s=arguments[e],utils_type.A.isPoint(s)&&(s=this.findPoint(s)),utils_type.A.isNumber(s)&&s>-1&&s<this.vertices.length&&-1===utils_type.A.indexOf(a,s)&&a.push(s);if(0===a.length)return"polygon"===this.elType&&this.vertices.push(r),this;for(e=0;e<a.length;e++)this.vertices[a[e]].removeChild(this);for(a=a.sort(),o=this.vertices.slice(),n=this.borders.slice(),this.withLines&&l.push([a[a.length-1]]),e=a.length-1;e>-1;e--)o[a[e]]=-1,this.withLines&&a.length>1&&a[e]-1>a[e-1]&&(l[l.length-1][1]=a[e],l.push([a[e-1]]));for(this.withLines&&(l[l.length-1][1]=a[0]),this.vertices=[],e=0;e<o.length;e++)utils_type.A.isPoint(o[e])&&this.vertices.push(o[e]);if("polygon"===this.elType&&this.vertices.length>1&&this.vertices[this.vertices.length-1].id!==this.vertices[0].id&&this.vertices.push(this.vertices[0]),this.withLines){for(e=0;e<l.length;e++){for(i=l[e][1]-1;i<l[e][0]+1;i++)i<0?"polygon"===this.elType&&(this.board.removeObject(this.borders[n.length-1]),n[n.length-1]=-1):i<n.length&&(this.board.removeObject(this.borders[i]),n[i]=-1);0!==l[e][1]&&l[e][0]!==o.length-1&&(n[l[e][0]-1]=this.board.create("segment",[o[l[e][1]-1],o[l[e][0]+1]],this.attr_line))}for(this.borders=[],e=0;e<n.length;e++)-1!==n[e]&&this.borders.push(n[e]);"polygon"===this.elType&&this.vertices.length>2&&(l[0][1]===this.vertices.length-1||0===l[l.length-1][1])&&this.borders.push(this.board.create("segment",[this.vertices[this.vertices.length-2],this.vertices[0]],this.attr_line))}return this.inherits=[],this.inherits.push(this.vertices,this.borders),this.board.update(),this},getParents:function(){return this.setParents(this.vertices),this.parents},getAttributes:function(){var t,e=base_element.A.prototype.getAttributes.call(this);if(this.withLines)for(e.lines=e.lines||{},e.lines.ids=[],e.lines.colors=[],t=0;t<this.borders.length;t++)e.lines.ids.push(this.borders[t].id),e.lines.colors.push(this.borders[t].visProp.strokecolor);return e},snapToGrid:function(){var t,e;for(e=!!utils_type.A.evaluate(this.visProp.snaptogrid),t=0;t<this.vertices.length;t++)this.vertices[t].handleSnapToGrid(e,!0)},setPositionDirectly:function(t,e,i){var s,r,o,n=new base_coords.A(t,e,this.board),a=new base_coords.A(t,i,this.board);for(o=this.vertices.length-1,r=0;r<o;r++)if(!this.vertices[r].draggable())return this;return s=statistics.A.subtract(n.usrCoords,a.usrCoords),this.board.create("transform",s.slice(1),{type:"translate"}).applyOnce(this.vertices.slice(0,-1)),this},sutherlandHodgman:function(t){var e,i,s,r,o,n,a,l=jxg.A.Math.Geometry.sortVertices(this.vertices),h=jxg.A.Math.Geometry.sortVertices(t.vertices),u=l.length-1,c=h.length-1,d=[],p=function(t,e,i){return(e[1]-t[1])*(i[2]-t[2])-(e[2]-t[2])*(i[1]-t[1])>=0};for(s=0;s<c;s++)d.push(h[s]);for(s=0;s<u;s++)for(i=d.slice(0),d=[],o=i[(e=i.length)-1],r=0;r<e;r++)n=i[r],p(l[s],l[s+1],n)?(p(l[s],l[s+1],o)||((a=jxg.A.Math.Geometry.meetSegmentSegment(o,n,l[s],l[s+1]))[0][1]/=a[0][0],a[0][2]/=a[0][0],a[0][0]=1,d.push(a[0])),d.push(n)):p(l[s],l[s+1],o)&&((a=jxg.A.Math.Geometry.meetSegmentSegment(o,n,l[s],l[s+1]))[0][1]/=a[0][0],a[0][2]/=a[0][0],a[0][0]=1,d.push(a[0])),o=n;return d},intersect:function(t){return this.sutherlandHodgman(t)}}),jxg.A.createPolygon=function(t,e,i){var s,r,o,n,a,l,h=[],u=!1;if(utils_type.A.copyAttributes(i,t.options,"polygon"),null===(n=t.select(e[0]))&&(n=e[0]),utils_type.A.isObject(n)&&n.type===constants.A.OBJECT_TYPE_POLYGON&&utils_type.A.isTransformationOrArray(e[1]))for(u=!0,o=n.vertices.length-1,l=utils_type.A.copyAttributes(i,t.options,"polygon","vertices"),r=0;r<o;r++)l.withlabel&&(l.name=""===n.vertices[r].name?"":n.vertices[r].name+"'"),h.push(t.create("point",[n.vertices[r],e[1]],l));else if(!1===(h=utils_type.A.providePoints(t,e,i,"polygon",["vertices"])))throw new Error("JSXGraph: Can't create polygon / polygonalchain with parent types other than 'point' and 'coordinate arrays' or a function returning an array of coordinates. Alternatively, a polygon and a transformation can be supplied");if(a=utils_type.A.copyAttributes(i,t.options,"polygon"),(s=new jxg.A.Polygon(t,h,a)).isDraggable=!0,u)for(s.prepareUpdate().update().updateVisibility().updateRenderer(),o=n.vertices.length-1,r=0;r<o;r++)h[r].prepareUpdate().update().updateVisibility().updateRenderer();return s},jxg.A.createRegularPolygon=function(t,e,i){var s,r,o,n,a,l,h,u=[];if(o=e[(a=e.length)-1],utils_type.A.isNumber(o)&&(3!==e.length||o<3))throw new Error("JSXGraph: A regular polygon needs two point types and a number > 2 as input.");if(utils_type.A.isNumber(t.select(o))?(a--,l=!1):(o=a,l=!0),!1===(u=utils_type.A.providePoints(t,e.slice(0,a),i,"regularpolygon",["vertices"])))throw new Error("JSXGraph: Can't create regular polygon with parent types other than 'point' and 'coordinate arrays' or a function returning an array of coordinates");for(h=utils_type.A.copyAttributes(i,t.options,"regularpolygon","vertices"),r=2;r<o;r++)n=t.create("transform",[Math.PI*(2-(o-2)/o),u[r-1]],{type:"rotate"}),l?(u[r].addTransform(u[r-2],n),u[r].fullUpdate()):(utils_type.A.isArray(h.ids)&&h.ids.length>=o-2&&(h.id=h.ids[r-2]),u[r]=t.create("point",[u[r-2],n],h),u[r].type=constants.A.OBJECT_TYPE_CAS,u[r].isDraggable=!0,u[r].visProp.fixed=!1);return h=utils_type.A.copyAttributes(i,t.options,"regularpolygon"),(s=t.create("polygon",u,h)).elType="regularpolygon",s},jxg.A.createPolygonalChain=function(t,e,i){var s,r;return s=utils_type.A.copyAttributes(i,t.options,"polygonalchain"),(r=t.create("polygon",e,s)).elType="polygonalchain",r.vertices.pop(),t.removeObject(r.borders[r.borders.length-1]),r.borders.pop(),r},jxg.A.createParallelogram=function(t,e,i){var s,r,o,n,a;if(!1===(o=utils_type.A.providePoints(t,e,i,"polygon",["vertices"]))||o.length<3)throw new Error("JSXGraph: Can't create parallelogram with parent types other than 'point' and 'coordinate arrays' or a function returning an array of coordinates.");return a=utils_type.A.copyAttributes(i,t.options,"parallelogram","parallelpoint"),r=t.create("parallelpoint",o,a),n=utils_type.A.copyAttributes(i,t.options,"parallelogram"),(s=t.create("polygon",[o[0],o[1],r,o[2]],n)).elType="parallelogram",s.parallelPoint=r,s.isDraggable=!0,r.isDraggable=!0,r.visProp.fixed=!1,s},jxg.A.registerElement("polygon",jxg.A.createPolygon),jxg.A.registerElement("regularpolygon",jxg.A.createRegularPolygon),jxg.A.registerElement("polygonalchain",jxg.A.createPolygonalChain),jxg.A.registerElement("parallelogram",jxg.A.createParallelogram);var polygon=jxg.A.Polygon;jxg.A.Curve=function(t,e,i){this.constructor(t,i,constants.A.OBJECT_TYPE_CURVE,constants.A.OBJECT_CLASS_CURVE),this.points=[],this.numberPoints=utils_type.A.evaluate(this.visProp.numberpointshigh),this.bezierDegree=1,this.dataX=null,this.dataY=null,this.ticks=[],this.qdt=null,utils_type.A.exists(e[0])?this.varname=e[0]:this.varname="x",this.xterm=e[1],this.yterm=e[2],this.generateTerm(this.varname,this.xterm,this.yterm,e[3],e[4]),this.updateCurve(),this.id=this.board.setId(this,"G"),this.board.renderer.drawCurve(this),this.board.finalizeAdding(this),this.createGradient(),this.elType="curve",this.createLabel(),utils_type.A.isString(this.xterm)&&this.notifyParents(this.xterm),utils_type.A.isString(this.yterm)&&this.notifyParents(this.yterm),this.methodMap=utils_type.A.deepCopy(this.methodMap,{generateTerm:"generateTerm",setTerm:"generateTerm",move:"moveTo",moveTo:"moveTo",MinX:"minX",MaxX:"maxX"})},jxg.A.Curve.prototype=new base_element.A,jxg.A.extend(jxg.A.Curve.prototype,{minX:function(){return"polar"===utils_type.A.evaluate(this.visProp.curvetype)?0:new base_coords.A(constants.A.COORDS_BY_SCREEN,[.1*-this.board.canvasWidth,0],this.board,!1).usrCoords[1]},maxX:function(){return"polar"===utils_type.A.evaluate(this.visProp.curvetype)?2*Math.PI:new base_coords.A(constants.A.COORDS_BY_SCREEN,[1.1*this.board.canvasWidth,0],this.board,!1).usrCoords[1]},X:function(t){return NaN},Y:function(t){return NaN},Z:function(t){return 1},hasPoint:function(t,e,i){var s,r,o,n,a,l,h,u,c,d,p,_,f,A,g,m,y=[],b=utils_type.A.evaluate(this.visProp.numberpointslow),v=(this.maxX()-this.minX())/b,C=1/0,P=!0;if(utils_type.A.isObject(utils_type.A.evaluate(this.visProp.precision))?(_=this.board._inputDevice,p=utils_type.A.evaluate(this.visProp.precision[_])):p=this.board.options.precision.hasPoint,t=(l=new base_coords.A(constants.A.COORDS_BY_SCREEN,[t,e],this.board,!1)).usrCoords[1],e=l.usrCoords[2],1===this.bezierDegree&&utils_type.A.evaluate(this.visProp.hasinnerpoints)&&0!==geometry.A.windingNumber([1,t,e],this.points,!0))return!0;if(p+=.5*utils_type.A.evaluate(this.visProp.strokewidth),p*=p,f=this.board.unitX*this.board.unitX,A=this.board.unitY*this.board.unitY,m=this.minX(),this.maxX(),utils_type.A.exists(this._visibleArea)&&(m=this._visibleArea[0],v=(this._visibleArea[1]-m)/b),"parameter"===(g=utils_type.A.evaluate(this.visProp.curvetype))||"polar"===g)for(this.transformations.length>0&&(this.updateTransformMatrix(),u=math.A.inverse(this.transformMat),t=(r=math.A.matVecMult(u,[1,t,e]))[1],e=r[2]),o=0,s=m;o<b;o++){if((C=(t-(n=this.X(s,P)))*(t-n)*f+(e-(a=this.Y(s,P)))*(e-a)*A)<=p)return!0;s+=v}else if("plot"===g||"functiongraph"===g){for((!utils_type.A.exists(i)||i<0)&&(i=0),utils_type.A.exists(this.qdt)&&utils_type.A.evaluate(this.visProp.useqdt)&&3!==this.bezierDegree?h=(c=(d=this.qdt.query(new base_coords.A(constants.A.COORDS_BY_USER,[t,e],this.board))).points).length:(c=this.points,h=this.numberPoints-1),o=i;o<h;o++)if(3===this.bezierDegree?y=geometry.A.projectCoordsToBeziersegment([1,t,e],this,o):d?(c[o].prev&&(y=geometry.A.projectCoordsToSegment([1,t,e],c[o].prev.usrCoords,c[o].usrCoords)),c[o].next&&c[o+1]!==c[o].next&&(y=geometry.A.projectCoordsToSegment([1,t,e],c[o].usrCoords,c[o].next.usrCoords))):y=geometry.A.projectCoordsToSegment([1,t,e],c[o].usrCoords,c[o+1].usrCoords),y[1]>=0&&y[1]<=1&&(t-y[0][1])*(t-y[0][1])*f+(e-y[0][2])*(e-y[0][2])*A<=p)return!0;return!1}return C<p},allocatePoints:function(){var t,e;if(e=this.numberPoints,this.points.length<this.numberPoints)for(t=this.points.length;t<e;t++)this.points[t]=new base_coords.A(constants.A.COORDS_BY_USER,[0,0],this.board,!1)},update:function(){return this.needsUpdate&&(utils_type.A.evaluate(this.visProp.trace)&&this.cloneToBackground(!0),this.updateCurve()),this},updateRenderer:function(){return this.needsUpdate?(this.visPropCalc.visible&&(this.isReal=plot.checkReal(this.points),this.isReal||this.updateVisibility(!1)),this.visPropCalc.visible&&this.board.renderer.updateCurve(this),this.hasLabel&&this.visPropCalc.visible&&this.label&&this.label.visPropCalc.visible&&this.isReal&&(this.label.update(),this.board.renderer.updateText(this.label)),this.setDisplayRendNode(),this.needsUpdate=!1,this):this},updateDataArray:function(){},updateCurve:function(){var t,e,i,s,r,o,n=this.visProp.plotversion,a=!1;if(this.updateTransformMatrix(),this.updateDataArray(),i=this.minX(),s=this.maxX(),utils_type.A.exists(this.dataX))for(this.numberPoints=this.dataX.length,e=this.numberPoints,this.allocatePoints(),t=0;t<e;t++)r=t,utils_type.A.exists(this.dataY)?(o=t,this.points[t].setCoordinates(constants.A.COORDS_BY_USER,[this.dataX[t],this.dataY[t]],!1)):(o=this.X(r),this.points[t].setCoordinates(constants.A.COORDS_BY_USER,[this.dataX[t],this.Y(o,a)],!1)),this.points[t]._t=t,a=!0;else if(utils_type.A.evaluate(this.visProp.doadvancedplot)?1===n||utils_type.A.evaluate(this.visProp.doadvancedplotold)?plot.updateParametricCurveOld(this,i,s):2===n?plot.updateParametricCurve_v2(this,i,s):3===n?plot.updateParametricCurve_v3(this,i,s):4===n?plot.updateParametricCurve_v4(this,i,s):plot.updateParametricCurve_v2(this,i,s):(this.board.updateQuality===this.board.BOARD_QUALITY_HIGH?this.numberPoints=utils_type.A.evaluate(this.visProp.numberpointshigh):this.numberPoints=utils_type.A.evaluate(this.visProp.numberpointslow),this.allocatePoints(),plot.updateParametricCurveNaive(this,i,s,this.numberPoints)),e=this.numberPoints,utils_type.A.evaluate(this.visProp.useqdt)&&this.board.updateQuality===this.board.BOARD_QUALITY_HIGH)for(this.qdt=new qdt(this.board.getBoundingBox()),t=0;t<this.points.length;t++)this.qdt.insert(this.points[t]),t>0&&(this.points[t].prev=this.points[t-1]),t<e-1&&(this.points[t].next=this.points[t+1]);for("plot"!==utils_type.A.evaluate(this.visProp.curvetype)&&utils_type.A.evaluate(this.visProp.rdpsmoothing)&&(this.points=numerics.A.RamerDouglasPeucker(this.points,.2),this.numberPoints=this.points.length),e=this.numberPoints,t=0;t<e;t++)this.updateTransform(this.points[t]);return this},updateTransformMatrix:function(){var t,e,i=this.transformations.length;for(this.transformMat=[[1,0,0],[0,1,0],[0,0,1]],e=0;e<i;e++)(t=this.transformations[e]).update(),this.transformMat=math.A.matMatMult(t.matrix,this.transformMat);return this},updateTransform:function(t){var e;return this.transformations.length>0&&(e=math.A.matVecMult(this.transformMat,t.usrCoords),t.setCoordinates(constants.A.COORDS_BY_USER,e,!1,!0)),t},addTransform:function(t){var e,i=utils_type.A.isArray(t)?t:[t],s=i.length;for(e=0;e<s;e++)this.transformations.push(i[e]);return this},interpolationFunctionFromArray:function(t){var e="data"+t,i=this;return function(t,s){var r,o,n,a,l=i[e],h=l.length,u=[];if(isNaN(t))return NaN;if(t<0)return utils_type.A.isFunction(l[0])?l[0]():l[0];if(3===i.bezierDegree){if(t>=(h-1)/3)return utils_type.A.isFunction(l[l.length-1])?l[l.length-1]():l[l.length-1];for(r=3*Math.floor(t),a=1-(n=t%1),o=0;o<4;o++)utils_type.A.isFunction(l[r+o])?u[o]=l[r+o]():u[o]=l[r+o];return a*a*(a*u[0]+3*n*u[1])+(3*a*u[2]+n*u[3])*n*n}if((r=t>h-2?h-2:parseInt(Math.floor(t),10))===t)return utils_type.A.isFunction(l[r])?l[r]():l[r];for(o=0;o<2;o++)utils_type.A.isFunction(l[r+o])?u[o]=l[r+o]():u[o]=l[r+o];return u[0]+(u[1]-u[0])*(t-r)}},generateTerm:function(t,e,i,s,r){var o,n;utils_type.A.isArray(e)?(this.dataX=e,this.numberPoints=this.dataX.length,this.X=this.interpolationFunctionFromArray.apply(this,["X"]),this.visProp.curvetype="plot",this.isDraggable=!0):(this.X=utils_type.A.createFunction(e,this.board,t),utils_type.A.isString(e)?this.visProp.curvetype="functiongraph":(utils_type.A.isFunction(e)||utils_type.A.isNumber(e))&&(this.visProp.curvetype="parameter"),this.isDraggable=!0),utils_type.A.isArray(i)?(this.dataY=i,this.Y=this.interpolationFunctionFromArray.apply(this,["Y"])):this.Y=utils_type.A.createFunction(i,this.board,t),utils_type.A.isFunction(e)&&utils_type.A.isArray(i)&&(o=utils_type.A.createFunction(i[0],this.board,""),n=utils_type.A.createFunction(i[1],this.board,""),this.X=function(t){return e(t)*Math.cos(t)+o()},this.X.deps=o.deps,this.Y=function(t){return e(t)*Math.sin(t)+n()},this.Y.deps=n.deps,this.visProp.curvetype="polar"),utils_type.A.exists(s)?this.minX=utils_type.A.createFunction(s,this.board,""):delete this.minX,utils_type.A.exists(r)?this.maxX=utils_type.A.createFunction(r,this.board,""):delete this.maxX,this.addParentsFromJCFunctions([this.X,this.Y,this.minX,this.maxX])},notifyParents:function(t){var e,i,s,r=!1;for(e in s={xterm:1,yterm:1})if(s.hasOwnProperty(e)&&this.hasOwnProperty(e)&&this[e].origin)for(i in r=!0,this[e].origin.deps)this[e].origin.deps.hasOwnProperty(i)&&this[e].origin.deps[i].addChild(this);r||geonext.A.findDependencies(this,t,this.board)},getLabelAnchor:function(){var t,e,i,s,r,o,n,a,l,h,u,c=1.5,d=.05*this.board.canvasWidth,p=.05*this.board.canvasHeight,_=.95*this.board.canvasWidth,f=.95*this.board.canvasHeight;if(!utils_type.A.exists(this.label))return new base_coords.A(constants.A.COORDS_BY_SCREEN,[NaN,NaN],this.board);if(i=utils_type.A.evaluate(this.label.visProp.position),!utils_type.A.isString(i))return new base_coords.A(constants.A.COORDS_BY_SCREEN,[NaN,NaN],this.board);if(!(i.indexOf("right")<0&&i.indexOf("left")<0))return s=utils_type.A.parsePosition(i),r=utils_type.A.parseNumber(s.pos,this.maxX()-this.minX(),1),s.pos.indexOf("fr")<0&&s.pos.indexOf("%")<0&&(r=0),n=this.minX()+r,t=this.X(n),e=this.Y(n),u=new base_coords.A(constants.A.COORDS_BY_USER,[t,e],this.board).scrCoords,o=math.A.eps,n<this.minX()+o?(a=(this.X(n+o)-this.X(n))/o,l=(this.Y(n+o)-this.Y(n))/o):n>this.maxX()-o?(a=(this.X(n)-this.X(n-o))/o,l=(this.Y(n)-this.Y(n-o))/o):(a=.5*(this.X(n+o)-this.X(n-o))/o,l=.5*(this.Y(n+o)-this.Y(n-o))/o),h=math.A.hypot(a,l),"left"===s.side?l*=-1:a*=-1,utils_type.A.exists(this.label)&&(c=.5*utils_type.A.evaluate(this.label.visProp.distance)/h),t=u[1]+l*this.label.size[0]*c,e=u[2]-a*this.label.size[1]*c,new base_coords.A(constants.A.COORDS_BY_SCREEN,[t,e],this.board);switch(utils_type.A.evaluate(this.visProp.label.position)){case"ulft":t=d,e=p;break;case"llft":t=d,e=f;break;case"rt":t=_,e=.5*f;break;case"lrt":t=_,e=f;break;case"urt":t=_,e=p;break;case"top":t=.5*_,e=p;break;case"bot":t=.5*_,e=f;break;default:t=d,e=.5*f}return u=new base_coords.A(constants.A.COORDS_BY_SCREEN,[t,e],this.board,!1),geometry.A.projectCoordsToCurve(u.usrCoords[1],u.usrCoords[2],0,this,this.board)[0]},cloneToBackground:function(){var t,e={id:this.id+"T"+this.numTraces,elementClass:constants.A.OBJECT_CLASS_CURVE,points:this.points.slice(0),bezierDegree:this.bezierDegree,numberPoints:this.numberPoints,board:this.board,visProp:utils_type.A.deepCopy(this.visProp,this.visProp.traceattributes,!0)};return e.visProp.layer=this.board.options.layer.trace,e.visProp.curvetype=this.visProp.curvetype,this.numTraces++,utils_type.A.clearVisPropOld(e),e.visPropCalc={visible:utils_type.A.evaluate(e.visProp.visible)},t=this.board.renderer.enhancedRendering,this.board.renderer.enhancedRendering=!0,this.board.renderer.drawCurve(e),this.board.renderer.enhancedRendering=t,this.traces[e.id]=e.rendNode,this},bounds:function(){var t,e,i,s=1/0,r=-1/0,o=1/0,n=-1/0,a=this.points.length;if(3===this.bezierDegree){for(t=0;t<a;t++)this.points[t].X=utils_type.A.bind((function(){return this.usrCoords[1]}),this.points[t]),this.points[t].Y=utils_type.A.bind((function(){return this.usrCoords[2]}),this.points[t]);return i=(e=numerics.A.bezier(this.points))[3](),s=numerics.A.fminbr((function(t){return e[0](t)}),[0,i]),r=numerics.A.fminbr((function(t){return-e[0](t)}),[0,i]),o=numerics.A.fminbr((function(t){return e[1](t)}),[0,i]),n=numerics.A.fminbr((function(t){return-e[1](t)}),[0,i]),s=e[0](s),r=e[0](r),o=e[1](o),[s,n=e[1](n),r,o]}for(t=0;t<a;t++)s>this.points[t].usrCoords[1]&&(s=this.points[t].usrCoords[1]),r<this.points[t].usrCoords[1]&&(r=this.points[t].usrCoords[1]),o>this.points[t].usrCoords[2]&&(o=this.points[t].usrCoords[2]),n<this.points[t].usrCoords[2]&&(n=this.points[t].usrCoords[2]);return[s,n,r,o]},getParents:function(){var t=[this.xterm,this.yterm,this.minX(),this.maxX()];return 0!==this.parents.length&&(t=this.parents),t},moveTo:function(t){var e,i=[];return this.points.length>0&&!utils_type.A.evaluate(this.visProp.fixed)?(e=this.points[0],i=3===t.length?[t[0]-e.usrCoords[0],t[1]-e.usrCoords[1],t[2]-e.usrCoords[2]]:[t[0]-e.usrCoords[1],t[1]-e.usrCoords[2]],this.setPosition(constants.A.COORDS_BY_USER,i),this.board.update(this)):this},getTransformationSource:function(){var t,e;return utils_type.A.exists(this._transformationSource)&&(e=this._transformationSource).elementClass===constants.A.OBJECT_CLASS_CURVE&&(t=!0),[t,e]}}),jxg.A.createCurve=function(t,e,i){var s,r,o=utils_type.A.copyAttributes(i,t.options,"curve");return s=t.select(e[0],!0),utils_type.A.isTransformationOrArray(e[1])&&utils_type.A.isObject(s)&&(s.type===constants.A.OBJECT_TYPE_CURVE||s.type===constants.A.OBJECT_TYPE_ANGLE||s.type===constants.A.OBJECT_TYPE_ARC||s.type===constants.A.OBJECT_TYPE_CONIC||s.type===constants.A.OBJECT_TYPE_SECTOR)?(s.type===constants.A.OBJECT_TYPE_SECTOR?o=utils_type.A.copyAttributes(i,t.options,"sector"):s.type===constants.A.OBJECT_TYPE_ARC?o=utils_type.A.copyAttributes(i,t.options,"arc"):s.type===constants.A.OBJECT_TYPE_ANGLE?(utils_type.A.exists(i.withLabel)||(i.withLabel=!1),o=utils_type.A.copyAttributes(i,t.options,"angle")):o=utils_type.A.copyAttributes(i,t.options,"curve"),o=utils_type.A.copyAttributes(o,t.options,"curve"),(r=new jxg.A.Curve(t,["x",[],[]],o)).updateDataArray=function(){var t,e=s.numberPoints;for(this.bezierDegree=s.bezierDegree,this.dataX=[],this.dataY=[],t=0;t<e;t++)this.dataX.push(s.points[t].usrCoords[1]),this.dataY.push(s.points[t].usrCoords[2]);return this},r.addTransform(e[1]),s.addChild(r),r.setParents([s]),r._transformationSource=s,r):(o=utils_type.A.copyAttributes(i,t.options,"curve"),new jxg.A.Curve(t,["x"].concat(e),o))},jxg.A.registerElement("curve",jxg.A.createCurve),jxg.A.createFunctiongraph=function(t,e,i){var s,r=["x","x"].concat(e);return s=utils_type.A.copyAttributes(i,t.options,"functiongraph"),(s=utils_type.A.copyAttributes(s,t.options,"curve")).curvetype="functiongraph",new jxg.A.Curve(t,r,s)},jxg.A.registerElement("functiongraph",jxg.A.createFunctiongraph),jxg.A.registerElement("plot",jxg.A.createFunctiongraph),jxg.A.createSpline=function(t,e,i){var s,r,o;return r=function(){var t,i=[],s=[];return[function(r,o){var n,a,l;if(!o){if(i=[],s=[],2===e.length&&utils_type.A.isArray(e[0])&&utils_type.A.isArray(e[1])&&e[0].length===e[1].length)for(n=0;n<e[0].length;n++)utils_type.A.isFunction(e[0][n])?i.push(e[0][n]()):i.push(e[0][n]),utils_type.A.isFunction(e[1][n])?s.push(e[1][n]()):s.push(e[1][n]);else for(n=0;n<e.length;n++)if(utils_type.A.isPoint(e[n]))i.push(e[n].X()),s.push(e[n].Y());else if(utils_type.A.isArray(e[n])&&2===e[n].length)for(a=0;a<e.length;a++)utils_type.A.isFunction(e[a][0])?i.push(e[a][0]()):i.push(e[a][0]),utils_type.A.isFunction(e[a][1])?s.push(e[a][1]()):s.push(e[a][1]);else utils_type.A.isFunction(e[n])&&2===e[n]().length&&(l=e[n](),i.push(l[0]),s.push(l[1]));t=numerics.A.splineDef(i,s)}return numerics.A.splineEval(r,i,s,t)},function(){return i[0]},function(){return i[i.length-1]}]},(i=utils_type.A.copyAttributes(i,t.options,"curve")).curvetype="functiongraph",o=r(),(s=new jxg.A.Curve(t,["x","x",o[0],o[1],o[2]],i)).setParents(e),s.elType="spline",s},jxg.A.registerElement("spline",jxg.A.createSpline),jxg.A.createCardinalSpline=function(t,e,i){var s,r,o,n,a,l,h,u,c,d,p="\nPossible parent types: [points:array, tau:number|function, type:string]";if(!utils_type.A.exists(e[0])||!utils_type.A.isArray(e[0]))throw new Error("JSXGraph: JXG.createCardinalSpline: argument 1 'points' has to be array of points or coordinate pairs"+p);if(!utils_type.A.exists(e[1])||!utils_type.A.isNumber(e[1])&&!utils_type.A.isFunction(e[1]))throw new Error("JSXGraph: JXG.createCardinalSpline: argument 2 'tau' has to be number between [0,1] or function'"+p);if(!utils_type.A.exists(e[2])||!utils_type.A.isString(e[2]))throw new Error("JSXGraph: JXG.createCardinalSpline: argument 3 'type' has to be string 'uniform' or 'centripetal'"+p);if(i=utils_type.A.copyAttributes(i,t.options,"curve"),(i=utils_type.A.copyAttributes(i,t.options,"cardinalspline")).curvetype="parameter",l=e[0],h=[],!i.isarrayofcoordinates&&2===l.length&&utils_type.A.isArray(l[0])&&utils_type.A.isArray(l[1])&&l[0].length===l[1].length)for(u=0;u<l[0].length;u++)h[u]=[],utils_type.A.isFunction(l[0][u])?h[u].push(l[0][u]()):h[u].push(l[0][u]),utils_type.A.isFunction(l[1][u])?h[u].push(l[1][u]()):h[u].push(l[1][u]);else for(u=0;u<l.length;u++)utils_type.A.isString(l[u])?h.push(t.select(l[u])):utils_type.A.isPoint(l[u])?h.push(l[u]):utils_type.A.isArray(l[u])&&2===l[u].length?(h[u]=[],utils_type.A.isFunction(l[u][0])?h[u].push(l[u][0]()):h[u].push(l[u][0]),utils_type.A.isFunction(l[u][1])?h[u].push(l[u][1]()):h[u].push(l[u][1])):utils_type.A.isFunction(l[u])&&2===l[u]().length&&h.push(e[u]());if(!0===i.createpoints)o=utils_type.A.providePoints(t,h,i,"cardinalspline",["points"]);else for(o=[],r=function(t){return{X:function(){return h[t][0]},Y:function(){return h[t][1]},Dist:function(t){var e=this.X()-t.X(),i=this.Y()-t.Y();return math.A.hypot(e,i)}}},u=0;u<h.length;u++)utils_type.A.isPoint(h[u])?o.push(h[u]):o.push(r(u));for(n=e[1],a=e[2],d=["x"].concat(numerics.A.CardinalSpline(o,n,a)),s=new jxg.A.Curve(t,d,i),c=o.length,s.setParents(o),u=0;u<c;u++)l=o[u],utils_type.A.isPoint(l)&&(utils_type.A.exists(l._is_new)?(s.addChild(l),delete l._is_new):l.addChild(s));return s.elType="cardinalspline",s},jxg.A.registerElement("cardinalspline",jxg.A.createCardinalSpline),jxg.A.createMetapostSpline=function(t,e,i){var s,r,o,n,a,l,h,u,c="\nPossible parent types: [points:array, controls:object";if(!utils_type.A.exists(e[0])||!utils_type.A.isArray(e[0]))throw new Error("JSXGraph: JXG.createMetapostSpline: argument 1 'points' has to be array of points or coordinate pairs"+c);if(!utils_type.A.exists(e[1])||!utils_type.A.isObject(e[1]))throw new Error("JSXGraph: JXG.createMetapostSpline: argument 2 'controls' has to be a JavaScript object'"+c);if(i=utils_type.A.copyAttributes(i,t.options,"curve"),(i=utils_type.A.copyAttributes(i,t.options,"metapostspline")).curvetype="parameter",a=e[0],l=[],!i.isarrayofcoordinates&&2===a.length&&utils_type.A.isArray(a[0])&&utils_type.A.isArray(a[1])&&a[0].length===a[1].length)for(h=0;h<a[0].length;h++)l[h]=[],utils_type.A.isFunction(a[0][h])?l[h].push(a[0][h]()):l[h].push(a[0][h]),utils_type.A.isFunction(a[1][h])?l[h].push(a[1][h]()):l[h].push(a[1][h]);else for(h=0;h<a.length;h++)utils_type.A.isString(a[h])?l.push(t.select(a[h])):utils_type.A.isPoint(a[h])?l.push(a[h]):utils_type.A.isArray(a[h])&&2===a[h].length?(l[h]=[],utils_type.A.isFunction(a[h][0])?l[h].push(a[h][0]()):l[h].push(a[h][0]),utils_type.A.isFunction(a[h][1])?l[h].push(a[h][1]()):l[h].push(a[h][1])):utils_type.A.isFunction(a[h])&&2===a[h]().length&&l.push(e[h]());if(!0===i.createpoints)o=utils_type.A.providePoints(t,l,i,"metapostspline",["points"]);else for(o=[],r=function(t){return{X:function(){return l[t][0]},Y:function(){return l[t][1]}}},h=0;h<l.length;h++)utils_type.A.isPoint(l[h])?o.push(l[h]):o.push(r);for(n=e[1],(s=new jxg.A.Curve(t,["t",[],[],0,a.length-1],i)).updateDataArray=function(){var t,e,i=o.length,s=[];for(e=0;e<i;e++)s.push([o[e].X(),o[e].Y()]);t=metapost.curve(s,n),this.dataX=t[0],this.dataY=t[1]},s.bezierDegree=3,u=o.length,s.setParents(o),h=0;h<u;h++)utils_type.A.isPoint(o[h])&&o[h].addChild(s);return s.elType="metapostspline",s},jxg.A.registerElement("metapostspline",jxg.A.createMetapostSpline),jxg.A.createRiemannsum=function(t,e,i){var s,r,o,n,a,l;if((l=utils_type.A.copyAttributes(i,t.options,"riemannsum")).curvetype="plot",o=e[0],s=utils_type.A.createFunction(e[1],t,""),!utils_type.A.exists(s))throw new Error("JSXGraph: JXG.createRiemannsum: argument '2' n has to be number or function.\nPossible parent types: [function,n:number|function,type,start:number|function,end:number|function]");if("string"==typeof e[2]&&(e[2]="'"+e[2]+"'"),r=utils_type.A.createFunction(e[2],t,""),!utils_type.A.exists(r))throw new Error("JSXGraph: JXG.createRiemannsum: argument 3 'type' has to be string or function.\nPossible parent types: [function,n:number|function,type,start:number|function,end:number|function]");return n=[[0],[0]].concat(e.slice(3)),(a=t.create("curve",n,l)).sum=0,a.Value=function(){return this.sum},a.updateDataArray=function(){var t=numerics.A.riemann(o,s(),r(),this.minX(),this.maxX());this.dataX=t[0],this.dataY=t[1],this.sum=t[2]},a.addParentsFromJCFunctions([s,r]),a},jxg.A.registerElement("riemannsum",jxg.A.createRiemannsum),jxg.A.createTracecurve=function(t,e,i){var s,r,o,n;if(2!==e.length)throw new Error("JSXGraph: Can't create trace curve with given parent'\nPossible parent types: [glider, point]");if(r=t.select(e[0]),o=t.select(e[1]),r.type!==constants.A.OBJECT_TYPE_GLIDER||!utils_type.A.isPoint(o))throw new Error("JSXGraph: Can't create trace curve with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [glider, point]");return(n=utils_type.A.copyAttributes(i,t.options,"tracecurve")).curvetype="plot",(s=t.create("curve",[[0],[0]],n)).updateDataArray=function(){var t,e,i,s,a,l,h,u,c,d=n.numberpoints,p=r.position,_=r.slideObject,f=_.minX();for(e=(_.maxX()-f)/d,this.dataX=[],this.dataY=[],_.elementClass!==constants.A.OBJECT_CLASS_CURVE&&d++,t=0;t<d;t++){for(s in i=f+t*e,l=_.X(i)/_.Z(i),h=_.Y(i)/_.Z(i),r.setPositionDirectly(constants.A.COORDS_BY_USER,[l,h]),u=!1,this.board.objects)if(this.board.objects.hasOwnProperty(s)&&((a=this.board.objects[s])===r&&(u=!0),u&&a.needsRegularUpdate&&(c=a.visProp.trace,a.visProp.trace=!1,a.needsUpdate=!0,a.update(!0),a.visProp.trace=c,a===o)))break;this.dataX[t]=o.X(),this.dataY[t]=o.Y()}for(s in r.position=p,u=!1,this.board.objects)if(this.board.objects.hasOwnProperty(s)&&((a=this.board.objects[s])===r&&(u=!0),u&&a.needsRegularUpdate&&(c=a.visProp.trace,a.visProp.trace=!1,a.needsUpdate=!0,a.update(!0),a.visProp.trace=c,a===o)))break},s},jxg.A.registerElement("tracecurve",jxg.A.createTracecurve),jxg.A.createStepfunction=function(t,e,i){var s,r;if(2!==e.length)throw new Error("JSXGraph: Can't create step function with given parent'\nPossible parent types: [array, array|function]");return r=utils_type.A.copyAttributes(i,t.options,"stepfunction"),(s=t.create("curve",e,r)).updateDataArray=function(){var t,e=0,i=this.xterm.length;if(this.dataX=[],this.dataY=[],0!==i)for(this.dataX[e]=this.xterm[0],this.dataY[e]=this.yterm[0],++e,t=1;t<i;++t)this.dataX[e]=this.xterm[t],this.dataY[e]=this.dataY[e-1],++e,this.dataX[e]=this.xterm[t],this.dataY[e]=this.yterm[t],++e},s},jxg.A.registerElement("stepfunction",jxg.A.createStepfunction),jxg.A.createDerivative=function(t,e,i){var s,r,o,n,a;if(1!==e.length&&e[0].class!==constants.A.OBJECT_CLASS_CURVE)throw new Error("JSXGraph: Can't create derivative curve with given parent'\nPossible parent types: [curve]");return a=utils_type.A.copyAttributes(i,t.options,"curve"),r=e[0],o=numerics.A.D(r.X),n=numerics.A.D(r.Y),(s=t.create("curve",[function(t){return r.X(t)},function(t){return n(t)/o(t)},r.minX(),r.maxX()],a)).setParents(r),s},jxg.A.registerElement("derivative",jxg.A.createDerivative),jxg.A.createCurveIntersection=function(t,e,i){var s;if(2!==e.length)throw new Error("JSXGraph: Can't create curve intersection with given parent'\nPossible parent types: [array, array|function]");return(s=t.create("curve",[[],[]],i)).updateDataArray=function(){var t=clip.intersection(e[0],e[1],this.board);this.dataX=t[0],this.dataY=t[1]},s},jxg.A.createCurveUnion=function(t,e,i){var s;if(2!==e.length)throw new Error("JSXGraph: Can't create curve union with given parent'\nPossible parent types: [array, array|function]");return(s=t.create("curve",[[],[]],i)).updateDataArray=function(){var t=clip.union(e[0],e[1],this.board);this.dataX=t[0],this.dataY=t[1]},s},jxg.A.createCurveDifference=function(t,e,i){var s;if(2!==e.length)throw new Error("JSXGraph: Can't create curve difference with given parent'\nPossible parent types: [array, array|function]");return(s=t.create("curve",[[],[]],i)).updateDataArray=function(){var t=clip.difference(e[0],e[1],this.board);this.dataX=t[0],this.dataY=t[1]},s},jxg.A.registerElement("curvedifference",jxg.A.createCurveDifference),jxg.A.registerElement("curveintersection",jxg.A.createCurveIntersection),jxg.A.registerElement("curveunion",jxg.A.createCurveUnion),jxg.A.createBoxPlot=function(t,e,i){var s,r,o,n=utils_type.A.copyAttributes(i,t.options,"boxplot");if(3!==e.length)throw new Error("JSXGraph: Can't create box plot with given parent'\nPossible parent types: [array, number|function, number|function] containing quantiles, axis, width");if(e[0].length<5)throw new Error("JSXGraph: Can't create box plot with given parent[0]'\nparent[0] has to contain at least 5 quantiles.");for(s=t.create("curve",[[],[]],n),o=e[0].length,s.Q=[],r=0;r<o;r++)s.Q[r]=utils_type.A.createFunction(e[0][r],t);return s.x=utils_type.A.createFunction(e[1],t),s.w=utils_type.A.createFunction(e[2],t),s.updateDataArray=function(){var t,e,i,s,r,o,n,a,l;n=utils_type.A.evaluate(this.visProp.smallwidth),a=utils_type.A.evaluate(this.visProp.dir),i=(l=this.x())-.5*this.w(),s=l-.5*this.w()*n,r=l+.5*this.w(),t=[l,s,o=l+.5*this.w()*n,l,l,i,i,r,r,l,NaN,i,r,NaN,l,l,s,o,l],e=[this.Q[0](),this.Q[0](),this.Q[0](),this.Q[0](),this.Q[1](),this.Q[1](),this.Q[3](),this.Q[3](),this.Q[1](),this.Q[1](),NaN,this.Q[2](),this.Q[2](),NaN,this.Q[3](),this.Q[4](),this.Q[4](),this.Q[4](),this.Q[4]()],"vertical"===a?(this.dataX=t,this.dataY=e):(this.dataX=e,this.dataY=t)},s.addParentsFromJCFunctions([s.Q,s.x,s.w]),s},jxg.A.registerElement("boxplot",jxg.A.createBoxPlot),jxg.A.createImplicitCurve=function(t,e,i){var s,r;if(1!==e.length&&3!==e.length)throw new Error("JSXGraph: Can't create curve implicitCurve with given parent'\nPossible parent types: [f] or [f, dfx, dfy]\nwith functions f, dfx, dfy");return r=utils_type.A.copyAttributes(i,t.options,"implicitcurve"),(s=t.create("curve",[[],[]],r)).f=utils_type.A.createFunction(e[0],t,"x, y"),s.dfx=utils_type.A.createFunction(e[1],t,"x, y"),s.dfy=utils_type.A.createFunction(e[2],t,"x, y"),s.updateDataArray=function(){var t,e,i,s=this.board.getBoundingBox(),r=utils_type.A.evaluate(this.visProp.margin);s[0]-=r,s[1]+=r,s[2]+=r,s[3]-=r,e={resolution_out:Math.max(.01,utils_type.A.evaluate(this.visProp.resolution_outer)),resolution_in:Math.max(.01,utils_type.A.evaluate(this.visProp.resolution_inner)),max_steps:utils_type.A.evaluate(this.visProp.max_steps),alpha_0:utils_type.A.evaluate(this.visProp.alpha_0),tol_u0:utils_type.A.evaluate(this.visProp.tol_u0),tol_newton:utils_type.A.evaluate(this.visProp.tol_newton),tol_cusp:utils_type.A.evaluate(this.visProp.tol_cusp),tol_progress:utils_type.A.evaluate(this.visProp.tol_progress),qdt_box:utils_type.A.evaluate(this.visProp.qdt_box),kappa_0:utils_type.A.evaluate(this.visProp.kappa_0),delta_0:utils_type.A.evaluate(this.visProp.delta_0),h_initial:utils_type.A.evaluate(this.visProp.h_initial),h_critical:utils_type.A.evaluate(this.visProp.h_critical),h_max:utils_type.A.evaluate(this.visProp.h_max),loop_dist:utils_type.A.evaluate(this.visProp.loop_dist),loop_dir:utils_type.A.evaluate(this.visProp.loop_dir),loop_detection:utils_type.A.evaluate(this.visProp.loop_detection),unitX:this.board.unitX,unitY:this.board.unitY},this.dataX=[],this.dataY=[],t=new implicitplot(s,e,this.f,this.dfx,this.dfy),this.qdt=t.qdt,i=t.plot(),this.dataX=i[0],this.dataY=i[1]},s.elType="implicitcurve",s},jxg.A.registerElement("implicitcurve",jxg.A.createImplicitCurve);var curve=jxg.A.Curve;jxg.A.createArc=function(t,e,i){var s,r,o;if(!1===(o=utils_type.A.providePoints(t,e,i,"arc",["center","radiuspoint","anglepoint"]))||o.length<3)throw new Error("JSXGraph: Can't create Arc with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+"'.\nPossible parent types: [point,point,point], [arc, transformation]");return r=utils_type.A.copyAttributes(i,t.options,"arc"),(s=t.create("curve",[[0],[0]],r)).elType="arc",s.setParents(o),s.type=constants.A.OBJECT_TYPE_ARC,s.center=o[0],s.radiuspoint=o[1],s.point2=s.radiuspoint,s.anglepoint=o[2],s.point3=s.anglepoint,utils_type.A.exists(s.center._is_new)?(s.addChild(s.center),delete s.center._is_new):s.center.addChild(s),utils_type.A.exists(s.radiuspoint._is_new)?(s.addChild(s.radiuspoint),delete s.radiuspoint._is_new):s.radiuspoint.addChild(s),utils_type.A.exists(s.anglepoint._is_new)?(s.addChild(s.anglepoint),delete s.anglepoint._is_new):s.anglepoint.addChild(s),s.useDirection=r.usedirection,s.updateDataArray=function(){var t,e,i,s,r,n=1,a=this.radiuspoint,l=this.center,h=this.anglepoint,u=utils_type.A.evaluate(this.visProp.selection);e=geometry.A.rad(a,l,h),("minor"===u&&e>Math.PI||"major"===u&&e<Math.PI)&&(n=-1),this.useDirection&&(i=o[1].coords.usrCoords,s=o[3].coords.usrCoords,r=o[2].coords.usrCoords,(i[1]-r[1])*(i[2]-s[2])-(i[2]-r[2])*(i[1]-s[1])<0?(this.radiuspoint=o[1],this.anglepoint=o[2]):(this.radiuspoint=o[2],this.anglepoint=o[1])),a=a.coords.usrCoords,l=l.coords.usrCoords,h=h.coords.usrCoords,t=geometry.A.bezierArc(a,l,h,!1,n),this.dataX=t[0],this.dataY=t[1],this.bezierDegree=3,this.updateStdform(),this.updateQuadraticform()},s.Radius=function(){return this.radiuspoint.Dist(this.center)},s.getRadius=function(){return jxg.A.deprecated("Arc.getRadius()","Arc.Radius()"),this.Radius()},s.Value=function(t,e){var i;return e=e||geometry.A.rad(this.radiuspoint,this.center,this.anglepoint),""===(t=(t=t||"length").toLocaleLowerCase())||0===t.indexOf("len")?i=e*this.Radius():0===t.indexOf("rad")?i=e:0===t.indexOf("deg")?i=180*e/Math.PI:0===t.indexOf("sem")?i=e/Math.PI:0===t.indexOf("cir")&&(i=.5*e/Math.PI),i},s.L=function(){return this.Value("length")},s.hasPoint=function(t,e){var i,s,r,o,n,a,l,h=this.Radius();return utils_type.A.evaluate(this.visProp.hasinnerpoints)?this.hasPointSector(t,e):(utils_type.A.isObject(utils_type.A.evaluate(this.visProp.precision))?(l=this.board._inputDevice,a=utils_type.A.evaluate(this.visProp.precision[l])):a=this.board.options.precision.hasPoint,a/=Math.min(Math.abs(this.board.unitX),Math.abs(this.board.unitY)),s=new base_coords.A(constants.A.COORDS_BY_SCREEN,[t,e],this.board),this.transformations.length>0&&(this.updateTransformMatrix(),o=math.A.inverse(this.transformMat),n=math.A.matVecMult(o,s.usrCoords),s=new base_coords.A(constants.A.COORDS_BY_USER,n,this.board)),i=this.center.coords.distance(constants.A.COORDS_BY_USER,s),(r=Math.abs(i-h)<a)&&(r=geometry.A.coordsOnArc(this,s)),r)},s.hasPointSector=function(t,e){var i=new base_coords.A(constants.A.COORDS_BY_SCREEN,[t,e],this.board),s=this.Radius(),r=this.center.coords.distance(constants.A.COORDS_BY_USER,i)<s;return r&&(r=geometry.A.coordsOnArc(this,i)),r},s.getTextAnchor=function(){return this.center.coords},s.getLabelAnchor=function(){var t,e,i,s,r,o=geometry.A.rad(this.radiuspoint,this.center,this.anglepoint),n=10/this.board.unitX,a=10/this.board.unitY,l=this.point2.coords.usrCoords,h=this.center.coords.usrCoords,u=l[1]-h[1],c=l[2]-h[2],d=utils_type.A.evaluate(this.visProp.selection),p=this.label?this.label.visProp:this.visProp.label;return("minor"===d&&o>Math.PI||"major"===d&&o<Math.PI)&&(o=-(2*Math.PI-o)),i=(t=new base_coords.A(constants.A.COORDS_BY_USER,[h[1]+Math.cos(.5*o)*u-Math.sin(.5*o)*c,h[2]+Math.sin(.5*o)*u+Math.cos(.5*o)*c],this.board)).usrCoords[1]-h[1],s=t.usrCoords[2]-h[2],i=i*((r=math.A.hypot(i,s))+n)/r,s=s*(r+a)/r,e=[h[1]+i,h[2]+s],p.position=geometry.A.calcLabelQuadrant(geometry.A.rad([1,0],[0,0],e)),new base_coords.A(constants.A.COORDS_BY_USER,e,this.board)},s.updateQuadraticform=circle.prototype.updateQuadraticform,s.updateStdform=circle.prototype.updateStdform,s.methodMap=jxg.A.deepCopy(s.methodMap,{getRadius:"getRadius",radius:"Radius",Radius:"Radius",center:"center",radiuspoint:"radiuspoint",anglepoint:"anglepoint",Value:"Value",L:"L"}),s.prepareUpdate().update(),s},jxg.A.registerElement("arc",jxg.A.createArc),jxg.A.createSemicircle=function(t,e,i){var s,r,o,n;if(!1===(n=utils_type.A.providePoints(t,e,i,"point"))||2!==n.length)throw new Error("JSXGraph: Can't create Semicircle with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,point]");return o=utils_type.A.copyAttributes(i,t.options,"semicircle","center"),(r=t.create("midpoint",n,o)).dump=!1,o=utils_type.A.copyAttributes(i,t.options,"semicircle"),(s=t.create("arc",[r,n[1],n[0]],o)).elType="semicircle",s.setParents([n[0].id,n[1].id]),s.subs={midpoint:r},s.inherits.push(r),s.midpoint=s.center=r,s},jxg.A.registerElement("semicircle",jxg.A.createSemicircle),jxg.A.createCircumcircleArc=function(t,e,i){var s,r,o,n;if(!1===(n=utils_type.A.providePoints(t,e,i,"point"))||3!==n.length)throw new Error("JSXGraph: create Circumcircle Arc with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+"'.\nPossible parent types: [point,point,point]");return o=utils_type.A.copyAttributes(i,t.options,"circumcirclearc","center"),(r=t.create("circumcenter",n,o)).dump=!1,(o=utils_type.A.copyAttributes(i,t.options,"circumcirclearc")).usedirection=!0,(s=t.create("arc",[r,n[0],n[2],n[1]],o)).elType="circumcirclearc",s.setParents([n[0].id,n[1].id,n[2].id]),s.subs={center:r},s.inherits.push(r),s.center=r,s},jxg.A.registerElement("circumcirclearc",jxg.A.createCircumcircleArc),jxg.A.createMinorArc=function(t,e,i){return i.selection="minor",jxg.A.createArc(t,e,i)},jxg.A.registerElement("minorarc",jxg.A.createMinorArc),jxg.A.createMajorArc=function(t,e,i){return i.selection="major",jxg.A.createArc(t,e,i)},jxg.A.registerElement("majorarc",jxg.A.createMajorArc),jxg.A.createSector=function(t,e,i){var s,r,o,n,a,l,h="invalid";if(e[0].elementClass===constants.A.OBJECT_CLASS_LINE&&e[1].elementClass===constants.A.OBJECT_CLASS_LINE&&(utils_type.A.isArray(e[2])||utils_type.A.isNumber(e[2]))&&(utils_type.A.isArray(e[3])||utils_type.A.isNumber(e[3]))&&(utils_type.A.isNumber(e[4])||utils_type.A.isFunction(e[4])||utils_type.A.isString(e[4])))h="2lines";else{if(!1===(l=utils_type.A.providePoints(t,e,i,"sector",["center","radiusPoint","anglePoint"])))throw new Error("JSXGraph: Can't create Sector with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+"'.");h="3points"}if(r=utils_type.A.copyAttributes(i,t.options,"sector"),(s=t.create("curve",[[0],[0]],r)).type=constants.A.OBJECT_TYPE_SECTOR,s.elType="sector",s.autoRadius=function(){var t=20/s.board.unitX,e=1/0,i=50/s.board.unitX;return utils_type.A.isPoint(s.center)&&(e=.3333*s.center.Dist(s.point2)),Math.max(t,Math.min(e,i))},"2lines"===h)s.Radius=function(){var t=utils_type.A.evaluate(e[4]);return"auto"===t?this.autoRadius():t},s.line1=t.select(e[0]),s.line2=t.select(e[1]),s.line1.addChild(s),s.line2.addChild(s),s.setParents(e),s.point1={visProp:{}},s.point2={visProp:{}},s.point3={visProp:{}},n=geometry.A.meetLineLine(s.line1.stdform,s.line2.stdform,0,t),utils_type.A.isArray(e[2])?(2===e[2].length&&(e[2]=[1].concat(e[2])),a=geometry.A.projectPointToLine({coords:{usrCoords:e[2]}},s.line1,t),a=statistics.A.subtract(a.usrCoords,n.usrCoords),s.direction1=math.A.innerProduct(a,[0,s.line1.stdform[2],-s.line1.stdform[1]],3)>=0?1:-1):s.direction1=e[2]>=0?1:-1,utils_type.A.isArray(e[3])?(2===e[3].length&&(e[3]=[1].concat(e[3])),a=geometry.A.projectPointToLine({coords:{usrCoords:e[3]}},s.line2,t),a=statistics.A.subtract(a.usrCoords,n.usrCoords),s.direction2=math.A.innerProduct(a,[0,s.line2.stdform[2],-s.line2.stdform[1]],3)>=0?1:-1):s.direction2=e[3]>=0?1:-1,s.methodMap=jxg.A.deepCopy(s.methodMap,{arc:"arc",center:"center",line1:"line1",line2:"line2"}),s.updateDataArray=function(){var t,e,i,r,o,n,a=[0,0,0];if(e=this.line1,i=this.line2,a=math.A.crossProduct(e.stdform,i.stdform),Math.abs(a[0])>math.A.eps*math.A.eps&&(a[1]/=a[0],a[2]/=a[0],a[0]/=a[0]),t=this.direction1*this.Radius(),r=statistics.A.add(a,[0,t*e.stdform[2],-t*e.stdform[1]]),t=this.direction2*this.Radius(),o=statistics.A.add(a,[0,t*i.stdform[2],-t*i.stdform[1]]),this.point2.coords=new base_coords.A(constants.A.COORDS_BY_USER,r,s.board),this.point1.coords=new base_coords.A(constants.A.COORDS_BY_USER,a,s.board),this.point3.coords=new base_coords.A(constants.A.COORDS_BY_USER,o,s.board),Math.abs(r[0])<math.A.eps||Math.abs(a[0])<math.A.eps||Math.abs(o[0])<math.A.eps)return this.dataX=[NaN],void(this.dataY=[NaN]);n=geometry.A.bezierArc(r,a,o,!0,1),this.dataX=n[0],this.dataY=n[1],this.bezierDegree=3};else if("3points"===h){for(s.point1=l[0],s.point2=l[1],s.point3=l[2],o=0;o<3;o++)utils_type.A.exists(l[o]._is_new)?(s.addChild(l[o]),delete l[o]._is_new):l[o].addChild(s);s.useDirection=i.usedirection,s.setParents(l),utils_type.A.exists(l[3])&&(s.point4=l[3],s.point4.addChild(s)),s.methodMap=jxg.A.deepCopy(s.methodMap,{arc:"arc",center:"center",radiuspoint:"radiuspoint",anglepoint:"anglepoint"}),s.updateDataArray=function(){var t,e,i,s,r,o=this.point2,n=this.point1,a=this.point3,l=1,h=utils_type.A.evaluate(this.visProp.selection);if(!o.isReal||!n.isReal||!a.isReal)return this.dataX=[NaN],void(this.dataY=[NaN]);r=geometry.A.rad(o,n,a),("minor"===h&&r>Math.PI||"major"===h&&r<Math.PI)&&(l=-1),this.useDirection&&utils_type.A.exists(this.point4)&&(e=this.point2.coords.usrCoords,i=this.point4.coords.usrCoords,s=this.point3.coords.usrCoords,(e[1]-s[1])*(e[2]-i[2])-(e[2]-s[2])*(e[1]-i[1])>=0&&(a=this.point2,o=this.point3)),o=o.coords.usrCoords,n=n.coords.usrCoords,a=a.coords.usrCoords,t=geometry.A.bezierArc(o,n,a,!0,l),this.dataX=t[0],this.dataY=t[1],this.bezierDegree=3},s.Radius=function(){return this.point2.Dist(this.point1)}}return s.center=s.point1,s.radiuspoint=s.point2,s.anglepoint=s.point3,r=utils_type.A.copyAttributes(i,t.options,"arc"),(r=utils_type.A.copyAttributes(r,t.options,"sector","arc")).withLabel=!1,r.selection=s.visProp.selection,r.name+="_arc","2lines"===h?(s.updateDataArray(),s.arc=t.create("arc",[function(){return s.point1.coords.usrCoords},function(){var t=s.point2.coords.distance(constants.A.COORDS_BY_USER,s.point1.coords);return 0===t?[s.point1.coords.usrCoords[1],s.point1.coords.usrCoords[2]]:[s.point1.coords.usrCoords[1]+s.Radius()*(s.point2.coords.usrCoords[1]-s.point1.coords.usrCoords[1])/t,s.point1.coords.usrCoords[2]+s.Radius()*(s.point2.coords.usrCoords[2]-s.point1.coords.usrCoords[2])/t]},function(){return s.point3.coords.usrCoords}],r)):s.arc=t.create("arc",[s.point1,function(){var t=s.point2.Dist(s.point1);return 0===t?[s.point1.X(),s.point1.Y()]:[s.point1.X()+s.Radius()*(s.point2.X()-s.point1.X())/t,s.point1.Y()+s.Radius()*(s.point2.Y()-s.point1.Y())/t]},s.point3],r),s.addChild(s.arc),s.hasPointCurve=function(t,e){var i,s,r,o,n,a,l=new base_coords.A(constants.A.COORDS_BY_SCREEN,[t,e],this.board),h=this.Radius(),u=this.center.coords.distance(constants.A.COORDS_BY_USER,l),c=utils_type.A.evaluate(this.visProp.selection);return utils_type.A.isObject(utils_type.A.evaluate(this.visProp.precision))?(n=this.board._inputDevice,o=utils_type.A.evaluate(this.visProp.precision[n])):o=this.board.options.precision.hasPoint,o/=Math.min(Math.abs(this.board.unitX),Math.abs(this.board.unitY)),(a=Math.abs(u-h)<o)&&(i=geometry.A.rad(this.point2,this.center,l.usrCoords.slice(1)),s=0,r=geometry.A.rad(this.point2,this.center,this.point3),("minor"===c&&r>Math.PI||"major"===c&&r<Math.PI)&&(s=r,r=2*Math.PI),(i<s||i>r)&&(a=!1)),a},s.hasPointSector=function(t,e){var i,s,r,o=new base_coords.A(constants.A.COORDS_BY_SCREEN,[t,e],this.board),n=this.Radius(),a=this.point1.coords.distance(constants.A.COORDS_BY_USER,o)<n,l=utils_type.A.evaluate(this.visProp.selection);return a&&(i=geometry.A.rad(this.radiuspoint,this.center,o.usrCoords.slice(1)),s=0,r=geometry.A.rad(this.radiuspoint,this.center,this.anglepoint),("minor"===l&&r>Math.PI||"major"===l&&r<Math.PI)&&(s=r,r=2*Math.PI),(i<s||i>r)&&(a=!1)),a},s.hasPoint=function(t,e){return utils_type.A.evaluate(this.visProp.highlightonsector)||utils_type.A.evaluate(this.visProp.hasinnerpoints)?this.hasPointSector(t,e):this.hasPointCurve(t,e)},s.getTextAnchor=function(){return this.point1.coords},s.getLabelAnchor=function(){var t,e,i,s,r,o=geometry.A.rad(this.point2,this.point1,this.point3),n=13/this.board.unitX,a=13/this.board.unitY,l=this.point2.coords.usrCoords,h=this.point1.coords.usrCoords,u=l[1]-h[1],c=l[2]-h[2],d=utils_type.A.evaluate(this.visProp.selection),p=this.label?this.label.visProp:this.visProp.label;return("minor"===d&&o>Math.PI||"major"===d&&o<Math.PI)&&(o=-(2*Math.PI-o)),i=(t=new base_coords.A(constants.A.COORDS_BY_USER,[h[1]+Math.cos(.5*o)*u-Math.sin(.5*o)*c,h[2]+Math.sin(.5*o)*u+Math.cos(.5*o)*c],this.board)).usrCoords[1]-h[1],s=t.usrCoords[2]-h[2],i=i*((r=math.A.hypot(i,s))+n)/r,s=s*(r+a)/r,e=[h[1]+i,h[2]+s],p.position=geometry.A.calcLabelQuadrant(geometry.A.rad([1,0],[0,0],e)),new base_coords.A(constants.A.COORDS_BY_USER,e,this.board)},s.setRadius=function(t){var e=utils_type.A.evaluate(t);"undefined"!==("auto"===t||"auto"===e?"auto":utils_type.A.isNumber(t)?"number":utils_type.A.isFunction(t)&&!utils_type.A.isString(e)?"function":"undefined")&&(this.visProp.radius=t),s.Radius=function(){var e=utils_type.A.evaluate(t);return"auto"===e?this.autoRadius():e}},s.getRadius=function(){return jxg.A.deprecated("Sector.getRadius()","Sector.Radius()"),this.Radius()},s.Value=function(t){return this.arc.Value(t)},s.L=function(){return this.arc.L()},s.Area=function(){var t=this.Radius();return.5*t*t*this.Value("radians")},s.Perimeter=function(){return this.L()+2*this.Radius()},"3points"===h&&(s.setPositionDirectly=function(t,e,i){var r,o=new base_coords.A(t,e,this.board),n=new base_coords.A(t,i,this.board);return s.point1.draggable()&&s.point2.draggable()&&s.point3.draggable()?(r=statistics.A.subtract(o.usrCoords,n.usrCoords),this.board.create("transform",r.slice(1),{type:"translate"}).applyOnce([s.point1,s.point2,s.point3]),this):this}),s.methodMap=jxg.A.deepCopy(s.methodMap,{radius:"Radius",Radius:"Radius",getRadius:"Radius",setRadius:"setRadius",Value:"Value",L:"L",Area:"Area",Perimeter:"Perimeter"}),s},jxg.A.registerElement("sector",jxg.A.createSector),jxg.A.createCircumcircleSector=function(t,e,i){var s,r,o,n;if(!1===(n=utils_type.A.providePoints(t,e,i,"point")))throw new Error("JSXGraph: Can't create circumcircle sector with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+"'.");return(r=t.create("circumcenter",n.slice(0,3),o)).dump=!1,o=utils_type.A.copyAttributes(i,t.options,"circumcirclesector"),(s=t.create("sector",[r,n[0],n[2],n[1]],o)).elType="circumcirclesector",s.setParents(n),s.center=r,s.subs={center:r},s},jxg.A.registerElement("circumcirclesector",jxg.A.createCircumcircleSector),jxg.A.createMinorSector=function(t,e,i){return i.selection="minor",jxg.A.createSector(t,e,i)},jxg.A.registerElement("minorsector",jxg.A.createMinorSector),jxg.A.createMajorSector=function(t,e,i){return i.selection="major",jxg.A.createSector(t,e,i)},jxg.A.registerElement("majorsector",jxg.A.createMajorSector),jxg.A.createAngle=function(t,e,i){var s,r,o,n,a,l,h="invalid";if(e[0].elementClass===constants.A.OBJECT_CLASS_LINE&&e[1].elementClass===constants.A.OBJECT_CLASS_LINE&&(utils_type.A.isArray(e[2])||utils_type.A.isNumber(e[2]))&&(utils_type.A.isArray(e[3])||utils_type.A.isNumber(e[3])))h="2lines";else{if(o={name:""},!1===(l=utils_type.A.providePoints(t,e,o,"point")))throw new Error("JSXGraph: Can't create angle with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"' and '"+typeof e[2]+"'.");h="3points"}if(o=utils_type.A.copyAttributes(i,t.options,"angle"),utils_type.A.exists(o.name)&&""!==o.name||(o.name=t.generateName({type:constants.A.OBJECT_TYPE_ANGLE})),r=utils_type.A.exists(o.radius)?o.radius:0,t.suspendUpdate(),"2lines"===h?(e.push(r),(s=t.create("sector",e,o)).updateDataArraySector=s.updateDataArray,s.setAngle=function(t){},s.free=function(t){}):((s=t.create("sector",[l[1],l[0],l[2]],o)).arc.visProp.priv=!0,s.point=s.point2=s.radiuspoint=l[0],s.pointsquare=s.point3=s.anglepoint=l[2],s.Radius=function(){var t=utils_type.A.evaluate(r);return"auto"===t?s.autoRadius():t},s.updateDataArraySector=function(){var t,e,i=this.point2,s=this.point1,r=this.point3,o=this.Radius(),n=s.Dist(i),a=1,l=utils_type.A.evaluate(this.visProp.selection);e=geometry.A.rad(i,s,r),("minor"===l&&e>Math.PI||"major"===l&&e<Math.PI)&&(a=-1),i=i.coords.usrCoords,s=s.coords.usrCoords,r=r.coords.usrCoords,i=[1,s[1]+(i[1]-s[1])*o/n,s[2]+(i[2]-s[2])*o/n],r=[1,s[1]+(r[1]-s[1])*o/n,s[2]+(r[2]-s[2])*o/n],t=geometry.A.bezierArc(i,s,r,!0,a),this.dataX=t[0],this.dataY=t[1],this.bezierDegree=3},s.setAngle=function(t){var e,i,s,r=this.anglepoint,o=this.radiuspoint;return r.draggable()&&(e=this.board.create("transform",[t,this.center],{type:"rotate"}),r.addTransform(o,e),e.update(),r.moveTo(math.A.matVecMult(e.matrix,o.coords.usrCoords)),s=utils_type.A.isFunction(t)?function(){return 2*Math.PI-t()}:function(){return 2*Math.PI-t},i=this.board.create("transform",[s,this.center],{type:"rotate"}),r.coords.on("update",(function(){i.update(),o.moveTo(math.A.matVecMult(i.matrix,r.coords.usrCoords))})),r.setParents(o),this.hasFixedAngle=!0),this},s.free=function(){var t=this.anglepoint;return t.transformations.length>0&&(t.transformations.pop(),t.isDraggable=!0,t.parents=[],t.coords.off("update")),this.hasFixedAngle=!1,this},s.setParents(l)),utils_type.A.exists(s.visProp.text)&&s.label.setText(utils_type.A.evaluate(s.visProp.text)),s.elType="angle",s.type=constants.A.OBJECT_TYPE_ANGLE,s.subs={},s.updateDataArraySquare=function(){var t,e,i,s,r,o,n,a,l=this.Radius();"2lines"===h&&this.updateDataArraySector(),t=this.point2,e=this.point1,i=this.point3,t=t.coords.usrCoords,e=e.coords.usrCoords,i=i.coords.usrCoords,s=geometry.A.distance(t,e,3),r=geometry.A.distance(i,e,3),t=[1,e[1]+(t[1]-e[1])*l/s,e[2]+(t[2]-e[2])*l/s],i=[1,e[1]+(i[1]-e[1])*l/r,e[2]+(i[2]-e[2])*l/r],o=math.A.crossProduct(i,e),n=[-t[1]*o[1]-t[2]*o[2],t[0]*o[1],t[0]*o[2]],o=math.A.crossProduct(t,e),a=[-i[1]*o[1]-i[2]*o[2],i[0]*o[1],i[0]*o[2]],(o=math.A.crossProduct(n,a))[1]/=o[0],o[2]/=o[0],this.dataX=[e[1],t[1],o[1],i[1],e[1]],this.dataY=[e[2],t[2],o[2],i[2],e[2]],this.bezierDegree=1},s.updateDataArrayNone=function(){this.dataX=[NaN],this.dataY=[NaN],this.bezierDegree=1},s.updateDataArray=function(){var t=utils_type.A.evaluate(this.visProp.type),e=geometry.A.trueAngle(this.point2,this.point1,this.point3),i=utils_type.A.evaluate(this.visProp.selection);("minor"===i&&e>180||"major"===i&&e<180)&&(e=360-e),Math.abs(e-90)<utils_type.A.evaluate(this.visProp.orthosensitivity)+math.A.eps&&(t=utils_type.A.evaluate(this.visProp.orthotype)),"none"===t?this.updateDataArrayNone():"square"===t?this.updateDataArraySquare():"sector"===t?this.updateDataArraySector():"sectordot"===t&&(this.updateDataArraySector(),this.dot.visProp.visible||this.dot.setAttribute({visible:!0})),(!this.visProp.visible||"sectordot"!==t&&this.dot.visProp.visible)&&this.dot.setAttribute({visible:!1})},n=utils_type.A.copyAttributes(i,t.options,"angle","dot"),s.dot=t.create("point",[function(){var t,e,i,r,o,n,a,l,h;return utils_type.A.exists(s.dot)&&!s.dot.visProp.visible?[0,0]:(t=s.point2.coords.usrCoords,e=s.point1.coords.usrCoords,i=s.Radius(),r=geometry.A.distance(t,e,3),o=geometry.A.rad(s.point2,s.point1,s.point3),("minor"===(h=utils_type.A.evaluate(s.visProp.selection))&&o>Math.PI||"major"===h&&o<Math.PI)&&(o=-(2*Math.PI-o)),o*=.5,n=Math.cos(o),a=Math.sin(o),t=[1,e[1]+(t[1]-e[1])*i/r,e[2]+(t[2]-e[2])*i/r],l=[[1,0,0],[e[1]-.5*e[1]*n+.5*e[2]*a,.5*n,.5*-a],[e[2]-.5*e[1]*a-.5*e[2]*n,.5*a,.5*n]],math.A.matVecMult(l,t))}],n),s.dot.dump=!1,s.subs.dot=s.dot,"2lines"===h)for(a=0;a<2;a++)t.select(e[a]).addChild(s.dot);else for(a=0;a<3;a++)t.select(l[a]).addChild(s.dot);return t.unsuspendUpdate(),s.Value=function(t){return""===(t=t||"radians")&&(t="radians"),s.arc.Value(t)},s.getLabelAnchor=function(){var t,e,i,r,o,n,a,l,h,u=12,c=utils_type.A.evaluate(s.visProp.selection),d=this.label?this.label.visProp:this.visProp.label;return utils_type.A.exists(this.label)&&utils_type.A.exists(this.label.visProp.fontsize)&&(u=utils_type.A.evaluate(this.label.visProp.fontsize)),u/=this.board.unitX,e=s.point2.coords.usrCoords,i=s.point1.coords.usrCoords,r=s.Radius(),o=geometry.A.distance(e,i,3),n=geometry.A.rad(s.point2,s.point1,s.point3),("minor"===c&&n>Math.PI||"major"===c&&n<Math.PI)&&(n=-(2*Math.PI-n)),n*=.5,a=Math.cos(n),l=Math.sin(n),e=[1,i[1]+(e[1]-i[1])*r/o,i[2]+(e[2]-i[2])*r/o],h=[[1,0,0],[i[1]-.5*i[1]*a+.5*i[2]*l,.5*a,.5*-l],[i[2]-.5*i[1]*l-.5*i[2]*a,.5*l,.5*a]],(t=math.A.matVecMult(h,e))[1]/=t[0],t[2]/=t[0],t[0]/=t[0],o=geometry.A.distance(t,i,3),t=[t[0],i[1]+(t[1]-i[1])*(r+u)/o,i[2]+(t[2]-i[2])*(r+u)/o],d.position=geometry.A.calcLabelQuadrant(geometry.A.rad([1,0],[0,0],t)),new base_coords.A(constants.A.COORDS_BY_USER,t,this.board)},s.methodMap=utils_type.A.deepCopy(s.methodMap,{setAngle:"setAngle",Value:"Value",free:"free"}),s},jxg.A.registerElement("angle",jxg.A.createAngle),jxg.A.createNonreflexAngle=function(t,e,i){var s;return i.selection="minor",i=utils_type.A.copyAttributes(i,t.options,"nonreflexangle"),(s=jxg.A.createAngle(t,e,i)).Value=function(t){var e=geometry.A.rad(this.point2,this.point1,this.point3);return""===(t=t||"radians")&&(t="radians"),e=e<Math.PI?e:2*Math.PI-e,this.arc.Value(t,e)},s},jxg.A.registerElement("nonreflexangle",jxg.A.createNonreflexAngle),jxg.A.createReflexAngle=function(t,e,i){var s;return i.selection="major",i=utils_type.A.copyAttributes(i,t.options,"reflexangle"),(s=jxg.A.createAngle(t,e,i)).Value=function(t){var e=geometry.A.rad(this.point2,this.point1,this.point3);return""===(t=t||"radians")&&(t="radians"),e=e>=Math.PI?e:2*Math.PI-e,this.arc.Value(t,e)},s},jxg.A.registerElement("reflexangle",jxg.A.createReflexAngle),jxg.A.createOrthogonalProjection=function(t,e,i){var s,r,o,n;if(e[0]=t.select(e[0]),e[1]=t.select(e[1]),utils_type.A.isPointType(t,e[0])&&e[1].elementClass===constants.A.OBJECT_CLASS_LINE)r=utils_type.A.providePoints(t,[e[0]],i,"point")[0],s=e[1];else{if(!utils_type.A.isPointType(t,e[1])||e[0].elementClass!==constants.A.OBJECT_CLASS_LINE)throw new Error("JSXGraph: Can't create perpendicular point with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,line]");r=utils_type.A.providePoints(t,[e[1]],i,"point")[0],s=e[0]}return n=utils_type.A.copyAttributes(i,t.options,"orthogonalprojection"),o=t.create("point",[function(){return geometry.A.projectPointToLine(r,s,t)}],n),utils_type.A.exists(r._is_new)?(o.addChild(r),delete r._is_new):r.addChild(o),s.addChild(o),o.elType="orthogonalprojection",o.setParents([r.id,o.id]),o.update(),o.generatePolynomial=function(){var t=s.point1.symbolic.x,e=s.point1.symbolic.y,i=s.point2.symbolic.x,n=s.point2.symbolic.y,a=r.symbolic.x,l=r.symbolic.y,h=o.symbolic.x,u=o.symbolic.y;return["("+e+")*("+h+")-("+e+")*("+i+")+("+u+")*("+i+")-("+t+")*("+u+")+("+t+")*("+n+")-("+h+")*("+n+")","("+l+")*("+e+")-("+l+")*("+n+")-("+u+")*("+e+")+("+u+")*("+n+")+("+a+")*("+t+")-("+a+")*("+i+")-("+h+")*("+t+")+("+h+")*("+i+")"]},o},jxg.A.createPerpendicular=function(t,e,i){var s,r,o,n;if(e[0]=t.select(e[0]),e[1]=t.select(e[1]),utils_type.A.isPointType(t,e[0])&&e[1].elementClass===constants.A.OBJECT_CLASS_LINE)r=e[1],s=utils_type.A.providePoints(t,[e[0]],i,"point")[0];else{if(!utils_type.A.isPointType(t,e[1])||e[0].elementClass!==constants.A.OBJECT_CLASS_LINE)throw new Error("JSXGraph: Can't create perpendicular with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [line,point]");r=e[0],s=utils_type.A.providePoints(t,[e[1]],i,"point")[0]}return n=utils_type.A.copyAttributes(i,t.options,"perpendicular"),(o=jxg.A.createLine(t,[function(){return r.stdform[2]*s.X()-r.stdform[1]*s.Y()},function(){return-r.stdform[2]*s.Z()},function(){return r.stdform[1]*s.Z()}],n)).elType="perpendicular",o.setParents([r.id,s.id]),utils_type.A.exists(s._is_new)?(o.addChild(s),delete s._is_new):s.addChild(o),r.addChild(o),o},jxg.A.createPerpendicularPoint=function(t,e,i){var s,r,o;if(e[0]=t.select(e[0]),e[1]=t.select(e[1]),utils_type.A.isPointType(t,e[0])&&e[1].elementClass===constants.A.OBJECT_CLASS_LINE)r=utils_type.A.providePoints(t,[e[0]],i,"point")[0],s=e[1];else{if(!utils_type.A.isPointType(t,e[1])||e[0].elementClass!==constants.A.OBJECT_CLASS_LINE)throw new Error("JSXGraph: Can't create perpendicular point with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,line]");r=utils_type.A.providePoints(t,[e[1]],i,"point")[0],s=e[0]}return o=t.create("point",[function(){return geometry.A.perpendicular(s,r,t)[0]}],i),utils_type.A.exists(r._is_new)?(o.addChild(r),delete r._is_new):r.addChild(o),s.addChild(o),o.elType="perpendicularpoint",o.setParents([r.id,s.id]),o.update(),o.generatePolynomial=function(){var t=s.point1.symbolic.x,e=s.point1.symbolic.y,i=s.point2.symbolic.x,n=s.point2.symbolic.y,a=r.symbolic.x,l=r.symbolic.y,h=o.symbolic.x,u=o.symbolic.y;return["("+e+")*("+h+")-("+e+")*("+i+")+("+u+")*("+i+")-("+t+")*("+u+")+("+t+")*("+n+")-("+h+")*("+n+")","("+l+")*("+e+")-("+l+")*("+n+")-("+u+")*("+e+")+("+u+")*("+n+")+("+a+")*("+t+")-("+a+")*("+i+")-("+h+")*("+t+")+("+h+")*("+i+")"]},o},jxg.A.createPerpendicularSegment=function(t,e,i){var s,r,o,n,a;if(e[0]=t.select(e[0]),e[1]=t.select(e[1]),utils_type.A.isPointType(t,e[0])&&e[1].elementClass===constants.A.OBJECT_CLASS_LINE)r=e[1],s=utils_type.A.providePoints(t,[e[0]],i,"point")[0];else{if(!utils_type.A.isPointType(t,e[1])||e[0].elementClass!==constants.A.OBJECT_CLASS_LINE)throw new Error("JSXGraph: Can't create perpendicular with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [line,point]");r=e[0],s=utils_type.A.providePoints(t,[e[1]],i,"point")[0]}return a=utils_type.A.copyAttributes(i,t.options,"perpendicularsegment","point"),(n=jxg.A.createPerpendicularPoint(t,[r,s],a)).dump=!1,utils_type.A.exists(i.layer)||(i.layer=t.options.layer.line),a=utils_type.A.copyAttributes(i,t.options,"perpendicularsegment"),(o=jxg.A.createLine(t,[function(){return geometry.A.perpendicular(r,s,t)[1]?[n,s]:[s,n]}],a)).point=n,utils_type.A.exists(s._is_new)?(o.addChild(s),delete s._is_new):s.addChild(o),r.addChild(o),o.elType="perpendicularsegment",o.setParents([s.id,r.id]),o.subs={point:n},o.inherits.push(n),o},jxg.A.createMidpoint=function(t,e,i){var s,r,o,n,a;for(n=0;n<e.length;++n)e[n]=t.select(e[n]);if(2===e.length&&utils_type.A.isPointType(t,e[0])&&utils_type.A.isPointType(t,e[1]))e=utils_type.A.providePoints(t,e,i,"point"),s=e[0],r=e[1];else{if(1!==e.length||e[0].elementClass!==constants.A.OBJECT_CLASS_LINE)throw new Error("JSXGraph: Can't create midpoint.\nPossible parent types: [point,point], [line]");s=e[0].point1,r=e[0].point2}return a=utils_type.A.copyAttributes(i,t.options,"midpoint"),o=t.create("point",[function(){var t=s.coords.usrCoords[1]+r.coords.usrCoords[1];return isNaN(t)||Math.abs(s.coords.usrCoords[0])<math.A.eps||Math.abs(r.coords.usrCoords[0])<math.A.eps?NaN:.5*t},function(){var t=s.coords.usrCoords[2]+r.coords.usrCoords[2];return isNaN(t)||Math.abs(s.coords.usrCoords[0])<math.A.eps||Math.abs(r.coords.usrCoords[0])<math.A.eps?NaN:.5*t}],a),utils_type.A.exists(s._is_new)?(o.addChild(s),delete s._is_new):s.addChild(o),utils_type.A.exists(r._is_new)?(o.addChild(r),delete r._is_new):r.addChild(o),o.elType="midpoint",o.setParents([s.id,r.id]),o.prepareUpdate().update(),o.generatePolynomial=function(){var t=s.symbolic.x,e=s.symbolic.y,i=r.symbolic.x,n=r.symbolic.y,a=o.symbolic.x,l=o.symbolic.y;return["("+e+")*("+a+")-("+e+")*("+i+")+("+l+")*("+i+")-("+t+")*("+l+")+("+t+")*("+n+")-("+a+")*("+n+")","("+t+")^2 - 2*("+t+")*("+a+")+("+e+")^2-2*("+e+")*("+l+")-("+i+")^2+2*("+i+")*("+a+")-("+n+")^2+2*("+n+")*("+l+")"]},o},jxg.A.createParallelPoint=function(t,e,i){var s,r,o,n,a,l;for(a=0;a<e.length;++a)e[a]=t.select(e[a]);if(3===e.length&&utils_type.A.isPointType(t,e[0])&&utils_type.A.isPointType(t,e[1])&&utils_type.A.isPointType(t,e[2]))e=utils_type.A.providePoints(t,e,i,"point"),s=e[0],r=e[1],o=e[2];else if(utils_type.A.isPointType(t,e[0])&&e[1].elementClass===constants.A.OBJECT_CLASS_LINE)o=utils_type.A.providePoints(t,[e[0]],i,"point")[0],s=e[1].point1,r=e[1].point2;else{if(!utils_type.A.isPointType(t,e[1])||e[0].elementClass!==constants.A.OBJECT_CLASS_LINE)throw new Error("JSXGraph: Can't create parallel point with parent types '"+typeof e[0]+"', '"+typeof e[1]+"' and '"+typeof e[2]+"'.\nPossible parent types: [line,point], [point,point,point]");o=utils_type.A.providePoints(t,[e[1]],i,"point")[0],s=e[0].point1,r=e[0].point2}return l=utils_type.A.copyAttributes(i,t.options,"parallelpoint"),n=t.create("point",[function(){return o.coords.usrCoords[1]+r.coords.usrCoords[1]-s.coords.usrCoords[1]},function(){return o.coords.usrCoords[2]+r.coords.usrCoords[2]-s.coords.usrCoords[2]}],l),utils_type.A.exists(s._is_new)?(n.addChild(s),delete s._is_new):s.addChild(n),utils_type.A.exists(r._is_new)?(n.addChild(r),delete r._is_new):r.addChild(n),utils_type.A.exists(o._is_new)?(n.addChild(o),delete o._is_new):o.addChild(n),n.elType="parallelpoint",n.setParents([s.id,r.id,o.id]),n.prepareUpdate().update(),n.generatePolynomial=function(){var t=s.symbolic.x,e=s.symbolic.y,i=r.symbolic.x,a=r.symbolic.y,l=o.symbolic.x,h=o.symbolic.y,u=n.symbolic.x,c=n.symbolic.y;return["("+a+")*("+u+")-("+a+")*("+l+")-("+e+")*("+u+")+("+e+")*("+l+")-("+c+")*("+i+")+("+c+")*("+t+")+("+h+")*("+i+")-("+h+")*("+t+")","("+c+")*("+t+")-("+c+")*("+l+")-("+a+")*("+t+")+("+a+")*("+l+")-("+u+")*("+e+")+("+u+")*("+h+")+("+i+")*("+e+")-("+i+")*("+h+")"]},n},jxg.A.createParallel=function(t,e,i){var s,r,o,n,a,l,h=1;for(a=0;a<e.length;++a)e[a]=t.select(e[a]);return s=null,3===e.length?(s=(e=utils_type.A.providePoints(t,e,i,"point"))[2],h=0):utils_type.A.isPointType(t,e[0])?(s=utils_type.A.providePoints(t,[e[0]],i,"point")[0],n=function(){return e[1].stdform}):utils_type.A.isPointType(t,e[1])&&(s=utils_type.A.providePoints(t,[e[1]],i,"point")[0],n=function(){return e[0].stdform}),utils_type.A.exists(i.layer)||(i.layer=t.options.layer.line),l=utils_type.A.copyAttributes(i,t.options,"parallel","point"),(r=1===h?t.create("point",[function(){return math.A.crossProduct([1,0,0],n())}],l):t.create("parallelpoint",e,l)).isDraggable=!0,l=utils_type.A.copyAttributes(i,t.options,"parallel"),(o=t.create("line",[s,r],l)).elType="parallel",o.subs={point:r},o.inherits.push(r),o.setParents([e[0].id,e[1].id]),3===e.length&&o.addParents(e[2].id),o.point=r,o},jxg.A.createArrowParallel=function(t,e,i){var s,r;try{return!1===(r=utils_type.A.copyAttributes(i,t.options,"arrowparallel")).lastArrow&&(r.lastArrow=!0),(s=jxg.A.createParallel(t,e,r).setAttribute({straightFirst:!1,straightLast:!1})).type=constants.A.OBJECT_TYPE_VECTOR,s.elType="arrowparallel",s}catch(t){throw new Error("JSXGraph: Can't create arrowparallel with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [line,point], [point,point,point]")}},jxg.A.createNormal=function(t,e,i){var s,r,o,n,a,l,h,u,c;for(n=0;n<e.length;++n)e[n]=t.select(e[n]);if(1===e.length)s=e[0],r=s.slideObject;else{if(2!==e.length)throw new Error("JSXGraph: Can't create normal with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,line], [point,circle], [glider]");if(utils_type.A.isPointType(t,e[0]))s=utils_type.A.providePoints(t,[e[0]],i,"point")[0],r=e[1];else{if(!utils_type.A.isPointType(t,e[1]))throw new Error("JSXGraph: Can't create normal with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,line], [point,circle], [glider]");r=e[0],s=utils_type.A.providePoints(t,[e[1]],i,"point")[0]}}if(h=utils_type.A.copyAttributes(i,t.options,"normal"),r.elementClass===constants.A.OBJECT_CLASS_LINE)c=utils_type.A.copyAttributes(i,t.options,"normal","point"),u=t.create("point",[function(){var t=math.A.crossProduct([1,0,0],r.stdform);return[t[0],-t[2],t[1]]}],c),u.isDraggable=!0,(o=t.create("line",[s,u],h)).point=u,o.subs={point:u},o.inherits.push(u);else if(r.elementClass===constants.A.OBJECT_CLASS_CIRCLE)o=t.create("line",[r.midpoint,s],h);else if(r.elementClass===constants.A.OBJECT_CLASS_CURVE)"plot"!==utils_type.A.evaluate(r.visProp.curvetype)?(a=r.X,l=r.Y,o=t.create("line",[function(){return-s.X()*numerics.A.D(a)(s.position)-s.Y()*numerics.A.D(l)(s.position)},function(){return numerics.A.D(a)(s.position)},function(){return numerics.A.D(l)(s.position)}],h)):o=t.create("line",[function(){var t,e,i,o,n,a,l,h,u,c,d=Math.floor(s.position),p=s.position-d;if(1===r.bezierdegree)d===r.numberPoints-1&&(d-=1,p=1);else{if(3!==r.bezierDegree)return 0;d=3*Math.floor(s.position*(r.numberPoints-1)/3),i=(s.position*(r.numberPoints-1)-d)/3,d>=r.numberPoints-1&&(d=r.numberPoints-4,i=1)}return d<0?1:1===r.bezierDegree?(r.Y(d)+p*(r.Y(d+1)-r.Y(d)))*(r.Y(d)-r.Y(d+1))-(r.X(d)+p*(r.X(d+1)-r.X(d)))*(r.X(d+1)-r.X(d)):(o=r.points[d].usrCoords,n=r.points[d+1].usrCoords,a=r.points[d+2].usrCoords,l=r.points[d+3].usrCoords,h=(1-i)*(1-i)*(n[1]-o[1])+2*(1-i)*i*(a[1]-n[1])+i*i*(l[1]-a[1]),u=(1-i)*(1-i)*(n[2]-o[2])+2*(1-i)*i*(a[2]-n[2])+i*i*(l[2]-a[2]),h/=c=math.A.hypot(h,u),u/=c,e=[1,(t=s.coords.usrCoords)[1]-u,t[2]+h],t[2]*e[1]-t[1]*e[2])},function(){var t,e,i,o,n,a,l,h,u,c=Math.floor(s.position);if(1===r.bezierdegree)c===r.numberPoints-1&&(c-=1);else{if(3!==r.bezierDegree)return 0;c=3*Math.floor(s.position*(r.numberPoints-1)/3),e=(s.position*(r.numberPoints-1)-c)/3,c>=r.numberPoints-1&&(c=r.numberPoints-4,e=1)}return c<0?0:1===r.bezierDegree?r.X(c+1)-r.X(c):(i=r.points[c].usrCoords,o=r.points[c+1].usrCoords,n=r.points[c+2].usrCoords,a=r.points[c+3].usrCoords,l=(1-e)*(1-e)*(o[1]-i[1])+2*(1-e)*e*(n[1]-o[1])+e*e*(a[1]-n[1]),h=(1-e)*(1-e)*(o[2]-i[2])+2*(1-e)*e*(n[2]-o[2])+e*e*(a[2]-n[2]),l/=u=math.A.hypot(l,h),h/=u,[1,(t=s.coords.usrCoords)[1]-h,t[2]+l][2]-t[2])},function(){var t,e,i,o,n,a,l,h,u,c,d=Math.floor(s.position);if(1===r.bezierdegree)d===r.numberPoints-1&&(d-=1);else{if(3!==r.bezierDegree)return 0;d=3*Math.floor(s.position*(r.numberPoints-1)/3),i=(s.position*(r.numberPoints-1)-d)/3,d>=r.numberPoints-1&&(d=r.numberPoints-4,i=1)}return d<0?0:1===r.bezierDegree?r.Y(d+1)-r.Y(d):(o=r.points[d].usrCoords,n=r.points[d+1].usrCoords,a=r.points[d+2].usrCoords,l=r.points[d+3].usrCoords,h=(1-i)*(1-i)*(n[1]-o[1])+2*(1-i)*i*(a[1]-n[1])+i*i*(l[1]-a[1]),u=(1-i)*(1-i)*(n[2]-o[2])+2*(1-i)*i*(a[2]-n[2])+i*i*(l[2]-a[2]),h/=c=math.A.hypot(h,u),u/=c,e=[1,(t=s.coords.usrCoords)[1]-u,t[2]+h],t[1]-e[1])}],h);else{if(r.type!==constants.A.OBJECT_TYPE_TURTLE)throw new Error("JSXGraph: Can't create normal with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,line], [point,circle], [glider]");o=t.create("line",[function(){var t,e,i=Math.floor(s.position),o=s.position-i;for(e=0;e<r.objects.length;e++)if((t=r.objects[e]).type===constants.A.OBJECT_TYPE_CURVE){if(i<t.numberPoints)break;i-=t.numberPoints}return i===t.numberPoints-1&&(i-=1,o=1),i<0?1:(t.Y(i)+o*(t.Y(i+1)-t.Y(i)))*(t.Y(i)-t.Y(i+1))-(t.X(i)+o*(t.X(i+1)-t.X(i)))*(t.X(i+1)-t.X(i))},function(){var t,e,i=Math.floor(s.position);for(e=0;e<r.objects.length;e++)if((t=r.objects[e]).type===constants.A.OBJECT_TYPE_CURVE){if(i<t.numberPoints)break;i-=t.numberPoints}return i===t.numberPoints-1&&(i-=1),i<0?0:t.X(i+1)-t.X(i)},function(){var t,e,i=Math.floor(s.position);for(e=0;e<r.objects.length;e++)if((t=r.objects[e]).type===constants.A.OBJECT_TYPE_CURVE){if(i<t.numberPoints)break;i-=t.numberPoints}return i===t.numberPoints-1&&(i-=1),i<0?0:t.Y(i+1)-t.Y(i)}],h)}return o.elType="normal",o.setParents(e),utils_type.A.exists(s._is_new)?(o.addChild(s),delete s._is_new):s.addChild(o),r.addChild(o),o},jxg.A.createBisector=function(t,e,i){var s,r,o,n;if(e=utils_type.A.providePoints(t,e,i,"point"),utils_type.A.isPoint(e[0])&&utils_type.A.isPoint(e[1])&&utils_type.A.isPoint(e[2])){for((n=utils_type.A.copyAttributes(i,t.options,"bisector","point")).snapToGrid=!1,(s=t.create("point",[function(){return geometry.A.angleBisector(e[0],e[1],e[2],t)}],n)).dump=!1,o=0;o<3;o++)utils_type.A.exists(e[o]._is_new)?(s.addChild(e[o]),delete e[o]._is_new):e[o].addChild(s);return utils_type.A.exists(i.layer)||(i.layer=t.options.layer.line),n=utils_type.A.copyAttributes(i,t.options,"bisector"),(r=jxg.A.createLine(t,[e[1],s],n)).point=s,r.elType="bisector",r.setParents(e),r.subs={point:s},r.inherits.push(s),r}throw new Error("JSXGraph: Can't create angle bisector with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,point,point]")},jxg.A.createAngularBisectorsOfTwoLines=function(t,e,i){var s,r,o,n,a=t.select(e[0]),l=t.select(e[1]);if(a.elementClass!==constants.A.OBJECT_CLASS_LINE||l.elementClass!==constants.A.OBJECT_CLASS_LINE)throw new Error("JSXGraph: Can't create angle bisectors of two lines with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [line,line]");return utils_type.A.exists(i.layer)||(i.layer=t.options.layer.line),o=utils_type.A.copyAttributes(i,t.options,"bisectorlines","line1"),s=t.create("line",[function(){var t=math.A.hypot(a.stdform[1],a.stdform[2]),e=math.A.hypot(l.stdform[1],l.stdform[2]);return a.stdform[0]/t-l.stdform[0]/e},function(){var t=math.A.hypot(a.stdform[1],a.stdform[2]),e=math.A.hypot(l.stdform[1],l.stdform[2]);return a.stdform[1]/t-l.stdform[1]/e},function(){var t=math.A.hypot(a.stdform[1],a.stdform[2]),e=math.A.hypot(l.stdform[1],l.stdform[2]);return a.stdform[2]/t-l.stdform[2]/e}],o),utils_type.A.exists(i.layer)||(i.layer=t.options.layer.line),o=utils_type.A.copyAttributes(i,t.options,"bisectorlines","line2"),r=t.create("line",[function(){var t=math.A.hypot(a.stdform[1],a.stdform[2]),e=math.A.hypot(l.stdform[1],l.stdform[2]);return a.stdform[0]/t+l.stdform[0]/e},function(){var t=math.A.hypot(a.stdform[1],a.stdform[2]),e=math.A.hypot(l.stdform[1],l.stdform[2]);return a.stdform[1]/t+l.stdform[1]/e},function(){var t=math.A.hypot(a.stdform[1],a.stdform[2]),e=math.A.hypot(l.stdform[1],l.stdform[2]);return a.stdform[2]/t+l.stdform[2]/e}],o),n=new composition({line1:s,line2:r}),s.dump=!1,r.dump=!1,n.elType="bisectorlines",n.setParents([a.id,l.id]),n.subs={line1:s,line2:r},n},jxg.A.createCircumcenter=function(t,e,i){var s,r,o,n,a;if(e=utils_type.A.providePoints(t,e,i,"point"),utils_type.A.isPoint(e[0])&&utils_type.A.isPoint(e[1])&&utils_type.A.isPoint(e[2])){for(o=e[0],n=e[1],a=e[2],s=jxg.A.createPoint(t,[function(){return geometry.A.circumcenter(o,n,a,t)}],i),r=0;r<3;r++)utils_type.A.exists(e[r]._is_new)?(s.addChild(e[r]),delete e[r]._is_new):e[r].addChild(s);return s.elType="circumcenter",s.setParents(e),s.generatePolynomial=function(){var t=o.symbolic.x,e=o.symbolic.y,i=n.symbolic.x,r=n.symbolic.y,l=a.symbolic.x,h=a.symbolic.y,u=s.symbolic.x,c=s.symbolic.y;return[["((",u,")-(",t,"))^2+((",c,")-(",e,"))^2-((",u,")-(",i,"))^2-((",c,")-(",r,"))^2"].join(""),["((",u,")-(",t,"))^2+((",c,")-(",e,"))^2-((",u,")-(",l,"))^2-((",c,")-(",h,"))^2"].join("")]},s}throw new Error("JSXGraph: Can't create circumcircle midpoint with parent types '"+typeof e[0]+"', '"+typeof e[1]+"' and '"+typeof e[2]+"'.\nPossible parent types: [point,point,point]")},jxg.A.createIncenter=function(t,e,i){var s,r,o,n,a;if(!((e=utils_type.A.providePoints(t,e,i,"point")).length>=3&&utils_type.A.isPoint(e[0])&&utils_type.A.isPoint(e[1])&&utils_type.A.isPoint(e[2])))throw new Error("JSXGraph: Can't create incenter with parent types '"+typeof e[0]+"', '"+typeof e[1]+"' and '"+typeof e[2]+"'.\nPossible parent types: [point,point,point]");for(r=e[0],o=e[1],n=e[2],s=t.create("point",[function(){var e,i,s;return e=math.A.hypot(o.X()-n.X(),o.Y()-n.Y()),i=math.A.hypot(r.X()-n.X(),r.Y()-n.Y()),s=math.A.hypot(o.X()-r.X(),o.Y()-r.Y()),new base_coords.A(constants.A.COORDS_BY_USER,[(e*r.X()+i*o.X()+s*n.X())/(e+i+s),(e*r.Y()+i*o.Y()+s*n.Y())/(e+i+s)],t)}],i),a=0;a<3;a++)utils_type.A.exists(e[a]._is_new)?(s.addChild(e[a]),delete e[a]._is_new):e[a].addChild(s);return s.elType="incenter",s.setParents(e),s},jxg.A.createCircumcircle=function(t,e,i){var s,r,o,n;if(!1===(e=utils_type.A.providePoints(t,e,i,"point")))throw new Error("JSXGraph: Can't create circumcircle with parent types '"+typeof e[0]+"', '"+typeof e[1]+"' and '"+typeof e[2]+"'.\nPossible parent types: [point,point,point]");try{for(o=utils_type.A.copyAttributes(i,t.options,"circumcircle","center"),(s=jxg.A.createCircumcenter(t,e,o)).dump=!1,utils_type.A.exists(i.layer)||(i.layer=t.options.layer.circle),o=utils_type.A.copyAttributes(i,t.options,"circumcircle"),(r=jxg.A.createCircle(t,[s,e[0]],o)).elType="circumcircle",r.setParents(e),r.subs={center:s},r.inherits.push(r),n=0;n<3;n++)utils_type.A.exists(e[n]._is_new)?(r.addChild(e[n]),delete e[n]._is_new):e[n].addChild(r)}catch(t){throw new Error("JSXGraph: Can't create circumcircle with parent types '"+typeof e[0]+"', '"+typeof e[1]+"' and '"+typeof e[2]+"'.\nPossible parent types: [point,point,point]")}return r},jxg.A.createIncircle=function(t,e,i){var s,r,o,n;if(!1===(e=utils_type.A.providePoints(t,e,i,"point")))throw new Error("JSXGraph: Can't create circumcircle with parent types '"+typeof e[0]+"', '"+typeof e[1]+"' and '"+typeof e[2]+"'.\nPossible parent types: [point,point,point]");try{for(n=utils_type.A.copyAttributes(i,t.options,"incircle","center"),(r=jxg.A.createIncenter(t,e,n)).dump=!1,utils_type.A.exists(i.layer)||(i.layer=t.options.layer.circle),n=utils_type.A.copyAttributes(i,t.options,"incircle"),(o=jxg.A.createCircle(t,[r,function(){var t=math.A.hypot(e[1].X()-e[2].X(),e[1].Y()-e[2].Y()),i=math.A.hypot(e[0].X()-e[2].X(),e[0].Y()-e[2].Y()),s=math.A.hypot(e[1].X()-e[0].X(),e[1].Y()-e[0].Y()),r=(t+i+s)/2;return Math.sqrt((r-t)*(r-i)*(r-s)/r)}],n)).elType="incircle",o.setParents(e),s=0;s<3;s++)utils_type.A.exists(e[s]._is_new)?(o.addChild(e[s]),delete e[s]._is_new):e[s].addChild(o);o.center=r,o.subs={center:o.center},o.inherits.push(r)}catch(t){throw new Error("JSXGraph: Can't create circumcircle with parent types '"+typeof e[0]+"', '"+typeof e[1]+"' and '"+typeof e[2]+"'.\nPossible parent types: [point,point,point]")}return o},jxg.A.createReflection=function(t,e,i){var s,r,o,n,a,l,h,u,c="\nPossible parent types: [point|line|curve|polygon|circle|arc|sector, line]";for(l=0;l<e.length;++l)e[l]=t.select(e[l]);if(h=utils_type.A.copyAttributes(i,t.options,"reflection"),utils_type.A.isPoint(e[0]))r=utils_type.A.providePoints(t,[e[0]],u)[0];else{if(e[0].elementClass!==constants.A.OBJECT_CLASS_CURVE&&e[0].elementClass!==constants.A.OBJECT_CLASS_LINE&&e[0].type!==constants.A.OBJECT_TYPE_POLYGON&&e[0].elementClass!==constants.A.OBJECT_CLASS_CIRCLE)throw new Error("JSXGraph: Can't create reflection element with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'."+c);r=e[0]}if(e[1].elementClass!==constants.A.OBJECT_CLASS_LINE)throw new Error("JSXGraph: Can't create reflected element with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'."+c);if(s=e[1],a=jxg.A.createTransform(t,[s],{type:"reflect"}),utils_type.A.isPoint(r))o=jxg.A.createPoint(t,[r,a],h);else if(r.elementClass===constants.A.OBJECT_CLASS_CURVE)o=jxg.A.createCurve(t,[r,a],h);else if(r.elementClass===constants.A.OBJECT_CLASS_LINE)o=jxg.A.createLine(t,[r,a],h);else if(r.type===constants.A.OBJECT_TYPE_POLYGON)o=jxg.A.createPolygon(t,[r,a],h);else{if(r.elementClass!==constants.A.OBJECT_CLASS_CIRCLE)throw new Error("JSXGraph: Can't create reflected element with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'."+c);"euclidean"===h.type.toLowerCase()?(u=utils_type.A.copyAttributes(i,t.options,"reflection","center"),(n=jxg.A.createPoint(t,[r.center,a],u)).prepareUpdate().update().updateVisibility(utils_type.A.evaluate(n.visProp.visible)).updateRenderer(),o=jxg.A.createCircle(t,[n,function(){return r.Radius()}],h)):o=jxg.A.createCircle(t,[r,a],h)}return utils_type.A.exists(r._is_new)&&(o.addChild(r),delete r._is_new),s.addChild(o),o.elType="reflection",o.addParents(s),o.prepareUpdate().update(),utils_type.A.isPoint(o)&&(o.generatePolynomial=function(){var t=s.point1.symbolic.x,e=s.point1.symbolic.y,i=s.point2.symbolic.x,n=s.point2.symbolic.y,a=r.symbolic.x,l=r.symbolic.y,h=o.symbolic.x,u=o.symbolic.y;return[["((",u,")-(",l,"))*((",e,")-(",n,"))+((",t,")-(",i,"))*((",h,")-(",a,"))"].join(""),["((",h,")-(",t,"))^2+((",u,")-(",e,"))^2-((",a,")-(",t,"))^2-((",l,")-(",e,"))^2"].join("")]}),o},jxg.A.createMirrorElement=function(t,e,i){var s,r,o,n,a,l,h,u,c="\nPossible parent types: [point|line|curve|polygon|circle|arc|sector, point]";for(r=0;r<e.length;++r)e[r]=t.select(e[r]);if(h=utils_type.A.copyAttributes(i,t.options,"mirrorelement"),utils_type.A.isPoint(e[0]))s=utils_type.A.providePoints(t,[e[0]],h)[0];else{if(e[0].elementClass!==constants.A.OBJECT_CLASS_CURVE&&e[0].elementClass!==constants.A.OBJECT_CLASS_LINE&&e[0].type!==constants.A.OBJECT_TYPE_POLYGON&&e[0].elementClass!==constants.A.OBJECT_CLASS_CIRCLE)throw new Error("JSXGraph: Can't create mirror element with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'."+c);s=e[0]}if(!utils_type.A.isPoint(e[1]))throw new Error("JSXGraph: Can't create mirror element with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'."+c);if(u=utils_type.A.copyAttributes(i,t.options,"mirrorelement","point"),o=utils_type.A.providePoints(t,[e[1]],u)[0],l=jxg.A.createTransform(t,[Math.PI,o],{type:"rotate"}),utils_type.A.isPoint(s))n=jxg.A.createPoint(t,[s,l],h);else if(s.elementClass===constants.A.OBJECT_CLASS_CURVE)n=jxg.A.createCurve(t,[s,l],h);else if(s.elementClass===constants.A.OBJECT_CLASS_LINE)n=jxg.A.createLine(t,[s,l],h);else if(s.type===constants.A.OBJECT_TYPE_POLYGON)n=jxg.A.createPolygon(t,[s,l],h);else{if(s.elementClass!==constants.A.OBJECT_CLASS_CIRCLE)throw new Error("JSXGraph: Can't create mirror element with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'."+c);"euclidean"===h.type.toLowerCase()?(u=utils_type.A.copyAttributes(i,t.options,"mirrorelement","center"),(a=jxg.A.createPoint(t,[s.center,l],u)).prepareUpdate().update().updateVisibility(utils_type.A.evaluate(a.visProp.visible)).updateRenderer(),n=jxg.A.createCircle(t,[a,function(){return s.Radius()}],h)):n=jxg.A.createCircle(t,[s,l],h)}return utils_type.A.exists(s._is_new)&&(n.addChild(s),delete s._is_new),o.addChild(n),n.elType="mirrorelement",n.addParents(o),n.prepareUpdate().update(),n},jxg.A.createMirrorPoint=function(t,e,i){var s=jxg.A.createMirrorElement(t,e,i);return s.elType="mirrorpoint",s},jxg.A.createIntegral=function(t,e,i){var s,r,o,n,a,l,h,u,c,d,p,_,f,A,g,m=null;if(utils_type.A.isArray(e[0])&&e[1].elementClass===constants.A.OBJECT_CLASS_CURVE)s=e[0],r=e[1];else{if(!utils_type.A.isArray(e[1])||e[0].elementClass!==constants.A.OBJECT_CLASS_CURVE)throw new Error("JSXGraph: Can't create integral with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [[number|function,number|function],curve]");s=e[1],r=e[0]}return(o=utils_type.A.copyAttributes(i,t.options,"integral")).withLabel=!1,g=t.create("curve",[[0],[0]],o),n=s[0],a=s[1],utils_type.A.isFunction(n)?(h=function(){return r.Y(l())},n=(l=n)()):(l=n,h=r.Y(n)),utils_type.A.isFunction(a)?(c=function(){return r.Y(u())},a=(u=a)()):(u=a,c=r.Y(a)),o=utils_type.A.copyAttributes(i,t.options,"integral","curveLeft"),d=t.create("glider",[l,h,r],o),utils_type.A.isFunction(l)&&d.hideElement(),o=utils_type.A.copyAttributes(i,t.options,"integral","baseLeft"),p=t.create("point",[function(){return"y"===utils_type.A.evaluate(g.visProp.axis)?0:d.X()},function(){return"y"===utils_type.A.evaluate(g.visProp.axis)?d.Y():0}],o),o=utils_type.A.copyAttributes(i,t.options,"integral","curveRight"),_=t.create("glider",[u,c,r],o),utils_type.A.isFunction(u)&&_.hideElement(),o=utils_type.A.copyAttributes(i,t.options,"integral","baseRight"),f=t.create("point",[function(){return"y"===utils_type.A.evaluate(g.visProp.axis)?0:_.X()},function(){return"y"===utils_type.A.evaluate(g.visProp.axis)?_.Y():0}],o),!1!==(o=utils_type.A.copyAttributes(i,t.options,"integral")).withlabel&&"y"!==o.axis&&(o=utils_type.A.copyAttributes(i,t.options,"integral","label"),o=utils_type.A.copyAttributes(o,t.options,"label"),A=function(){var t=numerics.A.NewtonCotes([p.X(),f.X()],r.Y),e=utils_type.A.evaluate(m.visProp.digits);return"∫ = "+(m.useLocale()?m.formatNumberLocale(t,e):utils_type.A.toFixed(t,e))},(m=t.create("text",[function(){var t=new base_coords.A(constants.A.COORDS_BY_SCREEN,[utils_type.A.evaluate(this.visProp.offset[0])+this.board.origin.scrCoords[1],0],this.board,!1),e=this.board.getBoundingBox(),i=.1*(e[2]-e[0]),s=_.X();return s<e[0]?s=e[0]+i:s>e[2]&&(s=e[2]-i),s+t.usrCoords[1]},function(){var t=new base_coords.A(constants.A.COORDS_BY_SCREEN,[0,utils_type.A.evaluate(this.visProp.offset[1])+this.board.origin.scrCoords[2]],this.board,!1),e=this.board.getBoundingBox(),i=.1*(e[1]-e[3]),s=_.Y();return s>e[1]?s=e[1]-i:s<e[3]&&(s=e[3]+i),s+t.usrCoords[2]},""],o)).setText(A),m.dump=!1,d.addChild(m),_.addChild(m)),d.dump=!1,p.dump=!1,_.dump=!1,f.dump=!1,g.elType="integral",g.setParents([r.id,s]),g.subs={curveLeft:d,baseLeft:p,curveRight:_,baseRight:f},g.inherits.push(d,p,_,f),o.withLabel&&(g.subs.label=m,g.inherits.push(m)),g.Value=function(){return numerics.A.I([p.X(),f.X()],r.Y)},g.updateDataArray=function(){var t,e,i,s,o,n,a,l,h;if("y"===utils_type.A.evaluate(this.visProp.axis)){for(d.Y()<_.Y()?(n=d.X(),l=d.Y(),a=_.X(),h=_.Y()):(n=_.X(),l=_.Y(),a=d.X(),h=d.Y()),s=Math.min(n,a),o=Math.max(n,a),t=[0,n],e=[l,l],i=0;i<r.numberPoints;i++)l<=r.points[i].usrCoords[2]&&s<=r.points[i].usrCoords[1]&&r.points[i].usrCoords[2]<=h&&r.points[i].usrCoords[1]<=o&&(t.push(r.points[i].usrCoords[1]),e.push(r.points[i].usrCoords[2]));t.push(a),e.push(h),t.push(0),e.push(h),t.push(0),e.push(l)}else{for(p.X()<f.X()?(s=p.X(),o=f.X()):(s=f.X(),o=p.X()),t=[s,s],e=[0,r.Y(s)],i=0;i<r.numberPoints;i++)s<=r.points[i].usrCoords[1]&&r.points[i].usrCoords[1]<=o&&(t.push(r.points[i].usrCoords[1]),e.push(r.points[i].usrCoords[2]));t.push(o),e.push(r.Y(o)),t.push(o),e.push(0),t.push(s),e.push(0)}this.dataX=t,this.dataY=e},d.addChild(g),_.addChild(g),p.addChild(g),f.addChild(g),g.baseLeft=p,g.baseRight=f,g.curveLeft=d,g.curveRight=_,g.methodMap=jxg.A.deepCopy(g.methodMap,{curveLeft:"curveLeft",baseLeft:"baseLeft",curveRight:"curveRight",baseRight:"baseRight",Value:"Value"}),g.label=m,g},jxg.A.createInequality=function(t,e,i){var s,r,o;if(o=utils_type.A.copyAttributes(i,t.options,"inequality"),e[0].elementClass===constants.A.OBJECT_CLASS_LINE)(r=t.create("curve",[[],[]],o)).hasPoint=function(){return!1},r.updateDataArray=function(){var i,s,r,o=t.getBoundingBox(),n=utils_type.A.evaluate(this.visProp.inverse),a=n?-1:1,l=1.5*Math.max(o[2]-o[0],o[1]-o[3]),h={coords:{usrCoords:[1,.5*(o[0]+o[2]),n?o[1]:o[3]]}},u=e[0].stdform.slice(1),c=u;r=1.5*Math.max(geometry.A.perpendicular(e[0],h,t)[0].distance(constants.A.COORDS_BY_USER,h.coords),l),r*=a,h={coords:{usrCoords:[1,.5*(o[0]+o[2]),.5*(o[1]+o[3])]}},i=[1,(h=Math.abs(math.A.innerProduct(h.coords.usrCoords,e[0].stdform,3))>=math.A.eps?geometry.A.perpendicular(e[0],h,t)[0].usrCoords:h.coords.usrCoords)[1]+u[1]*l,h[2]-u[0]*l],s=[1,h[1]-c[1]*l,h[2]+c[0]*l],this.dataX=[i[1],i[1]+u[0]*r,s[1]+c[0]*r,s[1],i[1]],this.dataY=[i[2],i[2]+u[1]*r,s[2]+c[1]*r,s[2],i[2]]};else if(e[0].elementClass===constants.A.OBJECT_CLASS_CURVE&&"functiongraph"===e[0].visProp.curvetype)(r=t.create("curve",[[],[]],o)).updateDataArray=function(){var t,i,s,r,o,n,a,l,h,u=this.board.getBoundingBox(),c=[],d=e[0].minX(),p=e[0].maxX(),_=.3*(u[1]-u[3]);if(t=utils_type.A.evaluate(this.visProp.inverse)?1:3,this.dataX=[],this.dataY=[],0!==(r=e[0].points.length))for(u[1]+=_,u[3]-=_,s=-1;s<r-1;){for(o=s+1,i=r;o<r;o++)if(e[0].points[o].isReal()){i=o;break}if(i>=r)break;for(o=i,s=r-1;o<r-1;o++)if(!e[0].points[o+1].isReal()){s=o;break}for(l=e[0].points[i].usrCoords[1],h=e[0].points[s].usrCoords[1],n=u[0]<d?d:u[0],a=u[2]>p?p:u[2],n=0===i?n:Math.max(n,l),a=s===r-1?a:Math.min(a,h),a=s===r-1?p:h,(c=[]).push([1,n=0===i?d:l,u[t]]),c.push([1,n,e[0].points[i].usrCoords[2]]),o=i;o<=s;o++)c.push(e[0].points[o].usrCoords);for(c.push([1,a,e[0].points[s].usrCoords[2]]),c.push([1,a,u[t]]),c.push(c[0]),o=0;o<c.length;o++)this.dataX.push(c[o][1]),this.dataY.push(c[o][2]);s<r-1&&(this.dataX.push(NaN),this.dataY.push(NaN))}},r.hasPoint=function(){return!1};else if(s=utils_type.A.createFunction(e[0]),r.addParentsFromJCFunctions([s]),!utils_type.A.exists(s))throw new Error("JSXGraph: Can't create area with the given parents.\nPossible parent types: [line], [function]");return r.addParents(e[0]),r},jxg.A.registerElement("arrowparallel",jxg.A.createArrowParallel),jxg.A.registerElement("bisector",jxg.A.createBisector),jxg.A.registerElement("bisectorlines",jxg.A.createAngularBisectorsOfTwoLines),jxg.A.registerElement("msector",jxg.A.createMsector),jxg.A.registerElement("circumcircle",jxg.A.createCircumcircle),jxg.A.registerElement("circumcirclemidpoint",jxg.A.createCircumcenter),jxg.A.registerElement("circumcenter",jxg.A.createCircumcenter),jxg.A.registerElement("incenter",jxg.A.createIncenter),jxg.A.registerElement("incircle",jxg.A.createIncircle),jxg.A.registerElement("integral",jxg.A.createIntegral),jxg.A.registerElement("midpoint",jxg.A.createMidpoint),jxg.A.registerElement("mirrorelement",jxg.A.createMirrorElement),jxg.A.registerElement("mirrorpoint",jxg.A.createMirrorPoint),jxg.A.registerElement("normal",jxg.A.createNormal),jxg.A.registerElement("orthogonalprojection",jxg.A.createOrthogonalProjection),jxg.A.registerElement("parallel",jxg.A.createParallel),jxg.A.registerElement("parallelpoint",jxg.A.createParallelPoint),jxg.A.registerElement("perpendicular",jxg.A.createPerpendicular),jxg.A.registerElement("perpendicularpoint",jxg.A.createPerpendicularPoint),jxg.A.registerElement("perpendicularsegment",jxg.A.createPerpendicularSegment),jxg.A.registerElement("reflection",jxg.A.createReflection),jxg.A.registerElement("inequality",jxg.A.createInequality),jxg.A.createGrid=function(t,e,i){var s,r,o,n,a,l,h,u,c=math.A.eps,d=5e3,p=[],_=[];if((o=e).length>2||o.length>=1&&"axis"!==o[0].elType||o.length>=2&&"axis"!==o[1].elType)throw new Error("JSXGraph: Can't create 'grid' with parent type '"+e[0].elType+"'. Possible parent types: [axis,axis]");return!utils_type.A.exists(o[0])&&utils_type.A.exists(t.defaultAxes)&&(o[0]=t.defaultAxes.x),!utils_type.A.exists(o[1])&&utils_type.A.exists(t.defaultAxes)&&(o[1]=t.defaultAxes.y),u=function(t,e,i,s,r,o,n){var a,l,h,u,c,d,p;switch(t.toLowerCase()){case".":case"point":return e.visProp.linecap="round",e.visProp.strokewidth=r*e.board.unitX+o*e.board.unitY,[[i,i,NaN],[s,s,NaN]];case"o":case"circle":return e.visProp.linecap="square",e.bezierDegree=3,[[i+r,i+r,i+(l=4*Math.tan(Math.PI/8)/3)*r,i,i-l*r,i-r,i-r,i-r,i-l*r,i,i+l*r,i+r,i+r,NaN],[s,s+l*o,s+o,s+o,s+o,s+l*o,s,s-l*o,s-o,s-o,s-o,s-l*o,s,NaN]];case"regpol":case"regularpolygon":for(e.visProp.linecap="round",u=utils_type.A.evaluate(e.visProp.polygonvertices),c=[[],[]],a=0;a<=2*Math.PI;a+=2*Math.PI/u)c[0].push(i-r*Math.sin(a)),c[1].push(s-o*Math.cos(a));return c[0].push(NaN),c[1].push(NaN),c;case"[]":case"square":return e.visProp.linecap="square",[[i-r,i+r,i+r,i-r,i-r,NaN],[s+o,s+o,s-o,s-o,s+o,NaN]];case"<>":case"diamond":return e.visProp.linecap="square",[[i,i+r,i,i-r,i,NaN],[s+o,s,s-o,s,s+o,NaN]];case"<<>>":case"diamond2":return e.visProp.linecap="square",[[i,i+(d=r*Math.sqrt(2)),i,i-d,i,NaN],[s+(p=o*Math.sqrt(2)),s,s-p,s,s+p,NaN]];case"x":case"cross":return[[i-r,i+r,NaN,i-r,i+r,NaN],[s+o,s-o,NaN,s-o,s+o,NaN]];case"+":case"plus":return[[i-r,i+r,NaN,i,i,NaN],[s,s,NaN,s-o,s+o,NaN]];case"-":case"minus":return[[i-r,i+r,NaN],[s,s,NaN]];case"|":case"divide":return[[i,i,NaN],[s-o,s+o,NaN]];case"^":case"a":case"A":case"triangleup":return[[i-r,i,i+r,NaN],[s-o,s,s-o,NaN]];case"v":case"triangledown":return[[i-r,i,i+r,NaN],[s+o,s,s+o,NaN]];case"<":case"triangleleft":return[[i+r,i,i+r,NaN],[s+o,s,s-o,NaN]];case">":case"triangleright":return[[i-r,i,i-r,NaN],[s+o,s,s-o,NaN]];case"line":return h=utils_type.A.evaluate(e.visProp.margin),[[i,i,NaN,n[0]-h/e.board.unitX,n[2]+h/e.board.unitX,NaN],[n[1]+h/e.board.unitY,n[3]-h/e.board.unitY,NaN,s,s,NaN]];default:return[[],[]]}},n=utils_type.A.copyAttributes(i,t.options,"grid"),utils_type.A.mergeAttr(n,n.themes[n.theme],!1),a={},utils_type.A.mergeAttr(a,n,!0,!0),utils_type.A.mergeAttr(a,n.major,!0,!0),(s=t.create("curve",[[null],[null]],a)).elType="grid",s.type=constants.A.OBJECT_TYPE_GRID,l={},utils_type.A.mergeAttr(l,n,!0,!0),utils_type.A.mergeAttr(l,n.minor,!0,!0),l.id===a.id&&(l.id=s.id+"_minor"),l.name===a.name&&(l.name=s.name+"_minor"),(r=t.create("curve",[[null],[null]],l)).elType="grid",r.type=constants.A.OBJECT_TYPE_GRID,s.minorGrid=r,r.majorGrid=s,s.hasPoint=function(){return!1},r.hasPoint=function(){return!1},s.inherits.push(r),s.updateDataArray=function(){var t,e,i,r,n,a,l,f,A=this.board.getBoundingBox(),g=utils_type.A.evaluate(this.visProp.gridx),m=utils_type.A.evaluate(this.visProp.gridy),y=utils_type.A.evaluate(this.visProp.face),b=utils_type.A.evaluate(this.visProp.drawzero),v=!0===b||utils_type.A.isObject(b)&&!0===utils_type.A.evaluate(b.origin),C=!0===b||utils_type.A.isObject(b)&&!0===utils_type.A.evaluate(b.x),P=!0===b||utils_type.A.isObject(b)&&!0===utils_type.A.evaluate(b.y),x=utils_type.A.evaluate(this.visProp.includeboundaries),E=utils_type.A.evaluate(this.visProp.forcesquare);if(this.dataX=[],this.dataY=[],h=utils_type.A.evaluate(this.visProp.majorstep),utils_type.A.isArray(h)||(h=[h,h]),h.length<2&&(h=[h[0],h[0]]),utils_type.A.exists(g)&&(jxg.A.deprecated("gridX","majorStep"),h[0]=g),utils_type.A.exists(m)&&(jxg.A.deprecated("gridY","majorStep"),h[1]=m),"auto"===h[0]?(f=Math.pow(10,Math.floor(Math.log(50/this.board.unitX)/Math.LN10)),h[0]=f,utils_type.A.exists(o[0])&&(h[0]=o[0].ticks[0].getDistanceMajorTicks())):h[0]=utils_type.A.parseNumber(h[0],Math.abs(A[1]-A[3]),1/this.board.unitX),"auto"===h[1]?(f=Math.pow(10,Math.floor(Math.log(50/this.board.unitY)/Math.LN10)),h[1]=f,utils_type.A.exists(o[1])&&(h[1]=o[1].ticks[0].getDistanceMajorTicks())):h[1]=utils_type.A.parseNumber(h[1],Math.abs(A[0]-A[2]),1/this.board.unitY),"min"===E||!0===E?h[0]*this.board.unitX<=h[1]*this.board.unitY?h[1]=h[0]/this.board.unitY*this.board.unitX:h[0]=h[1]/this.board.unitX*this.board.unitY:"max"===E&&(h[0]*this.board.unitX<=h[1]*this.board.unitY?h[0]=h[1]/this.board.unitX*this.board.unitY:h[1]=h[0]/this.board.unitY*this.board.unitX),p=utils_type.A.evaluate(this.visProp.size),utils_type.A.isArray(p)||(p=[p,p]),p.length<2&&(p=[p[0],p[0]]),utils_type.A.isNumber(p[0],!0)&&(p[0]=p[0]+"px"),utils_type.A.isNumber(p[1],!0)&&(p[1]=p[1]+"px"),p[0]=utils_type.A.parseNumber(p[0],h[0],1/this.board.unitX),p[1]=utils_type.A.parseNumber(p[1],h[1],1/this.board.unitY),_[0]=p[0]/2,_[1]=p[1]/2,t=math.A.roundToStep(A[0],h[0]),e=math.A.roundToStep(A[1],h[1]),l=isFinite(t)&&isFinite(e)&&isFinite(A[2])&&isFinite(A[3])&&Math.abs(A[2])<Math.abs(h[0]*d)&&Math.abs(A[3])<Math.abs(h[1]*d),"line"===y.toLowerCase()){for(n=utils_type.A.evaluate(s.visProp.margin),r=e;l&&r>=A[3];r-=h[1])!v&&Math.abs(r)<c||!P&&Math.abs(r)<c||!x&&(r<=A[3]+_[1]||r>=A[1]-_[1])||(a=[[A[0]-n/s.board.unitX,A[2]+n/s.board.unitX,NaN],[r,r,NaN]],utils_type.A.concat(this.dataX,a[0]),utils_type.A.concat(this.dataY,a[1]));for(i=t;l&&i<=A[2];i+=h[0])!v&&Math.abs(i)<c||!C&&Math.abs(i)<c||!x&&(i<=A[0]+_[0]||i>=A[2]-_[0])||(a=[[i,i,NaN],[A[1]+n/s.board.unitY,A[3]-n/s.board.unitY,NaN]],utils_type.A.concat(this.dataX,a[0]),utils_type.A.concat(this.dataY,a[1]))}else for(r=e;l&&r>=A[3];r-=h[1])for(i=t;l&&i<=A[2];i+=h[0])!v&&Math.abs(r)<c&&Math.abs(i)<c||!C&&Math.abs(r)<c&&Math.abs(i)>=c||!P&&Math.abs(i)<c&&Math.abs(r)>=c||!x&&(i<=A[0]+_[0]||i>=A[2]-_[0]||r<=A[3]+_[1]||r>=A[1]-_[1])||(a=u(y,s,i,r,_[0],_[1],A),utils_type.A.concat(this.dataX,a[0]),utils_type.A.concat(this.dataY,a[1]))},r.updateDataArray=function(){var t,e,i,s,n,a,l,p,f,A,g,m,y,b,v,C,P,x,E,O=this.board.getBoundingBox(),M=[],S=[],w=utils_type.A.evaluate(this.visProp.minorelements),T=utils_type.A.evaluate(this.visProp.size),N=utils_type.A.evaluate(this.visProp.face),j=utils_type.A.evaluate(this.visProp.drawzero),D=!0===j||utils_type.A.isObject(j)&&!0===utils_type.A.evaluate(j.x),k=!0===j||utils_type.A.isObject(j)&&!0===utils_type.A.evaluate(j.y),R=utils_type.A.evaluate(this.majorGrid.visProp.face),L=utils_type.A.evaluate(this.majorGrid.visProp.drawzero),B=!0===L||utils_type.A.isObject(L)&&!0===utils_type.A.evaluate(L.origin),I=!0===L||utils_type.A.isObject(L)&&!0===utils_type.A.evaluate(L.x),Y=!0===L||utils_type.A.isObject(L)&&!0===utils_type.A.evaluate(L.y),X=utils_type.A.evaluate(this.visProp.includeboundaries);if(this.dataX=[],this.dataY=[],utils_type.A.isArray(w)||(w=[w,w]),w.length<2&&(w=[w[0],w[0]]),utils_type.A.isNumber(w[0],!0)?w[0]=parseFloat(w[0]):(w[0]=3,utils_type.A.exists(o[0])&&(w[0]=utils_type.A.evaluate(o[0].getAttribute("ticks").minorticks))),M[0]=h[0]/(w[0]+1),utils_type.A.isNumber(w[1],!0)?w[1]=parseFloat(w[1]):(w[1]=3,utils_type.A.exists(o[1])&&(w[1]=utils_type.A.evaluate(o[1].getAttribute("ticks").minorticks))),M[1]=h[1]/(w[1]+1),utils_type.A.isArray(T)||(T=[T,T]),T.length<2&&(T=[T[0],T[0]]),utils_type.A.isNumber(T[0],!0)&&(T[0]=T[0]+"px"),utils_type.A.isNumber(T[1],!0)&&(T[1]=T[1]+"px"),T[0]=utils_type.A.parseNumber(T[0],M[0],1/this.board.unitX),T[1]=utils_type.A.parseNumber(T[1],M[1],1/this.board.unitY),S[0]=.5*T[0],S[1]=.5*T[1],t=math.A.roundToStep(O[0],M[0]),e=math.A.roundToStep(O[1],M[1]),l=isFinite(t)&&isFinite(e)&&isFinite(O[2])&&isFinite(O[3])&&Math.abs(O[2])<=Math.abs(M[0]*d)&&Math.abs(O[3])<Math.abs(M[1]*d),"line"!==N.toLowerCase())for(s=e;l&&s>=O[3];s-=M[1])for(i=t;l&&i<=O[2];i+=M[0]){if(p=math.A.roundToStep(Math.abs(i),h[0]),p=Math.abs(p-Math.abs(i)),f=h[0]-p,A=math.A.roundToStep(Math.abs(s),h[1]),A=Math.abs(A-Math.abs(s)),g=h[1]-A,"line"===R){if(p-S[0]-_[0]<c||f-S[0]-_[0]<c||A-S[1]-_[1]<c||g-S[1]-_[1]<c)continue}else if((p-S[0]-_[0]<c||f-S[0]-_[0]<c)&&(A-S[1]-_[1]<c||g-S[1]-_[1]<c)&&(B||_[1]-Math.abs(s)+S[1]<c||_[0]-Math.abs(i)+S[0]<c)&&(I||_[1]-Math.abs(s)+S[1]<c||_[0]+Math.abs(i)-S[0]<c)&&(Y||_[0]-Math.abs(i)+S[0]<c||_[1]+Math.abs(s)-S[1]<c))continue;!k&&Math.abs(i)<c||!D&&Math.abs(s)<c||(m=Math.abs(O[0]%h[0]),y=Math.abs(O[1]%h[1]),b=Math.abs(O[2]%h[0]),v=Math.abs(O[3]%h[1]),C=h[0]-m,P=h[1]-y,x=h[0]-b,E=h[1]-v,!X&&(i-S[0]-O[0]-_[0]+C<c&&C-_[0]<c||i-S[0]-O[0]-_[0]-m<c&&m-_[0]<c||-i-S[0]+O[2]-_[0]+x<c&&x-_[0]<c||-i-S[0]+O[2]-_[0]-b<c&&b-_[0]<c||-s-S[1]+O[1]-_[1]+P<c&&P-_[1]<c||-s-S[1]+O[1]-_[1]-y<c&&y-_[1]<c||s-S[1]-O[3]-_[1]+E<c&&E-_[1]<c||s-S[1]-O[3]-_[1]-v<c&&v-_[1]<c||-s-S[1]+O[1]<c||i-S[0]-O[0]<c||s-S[1]-O[3]<c||-i-S[0]+O[2]<c)||(a=u(N,r,i,s,S[0],S[1],O),utils_type.A.concat(this.dataX,a[0]),utils_type.A.concat(this.dataY,a[1])))}else{for(n=utils_type.A.evaluate(r.visProp.margin),s=e;l&&s>=O[3];s-=M[1]){if(A=math.A.roundToStep(Math.abs(s),h[1]),A=Math.abs(A-Math.abs(s)),g=h[1]-A,"line"===R){if(A-S[1]-_[1]<c||g-S[1]-_[1]<c)continue}else if((A-S[1]-_[1]<c||g-S[1]-_[1]<c)&&(B||_[1]-Math.abs(s)+S[1]<c)&&(I||_[1]-Math.abs(s)+S[1]<c)&&(Y||_[1]+Math.abs(s)-S[1]<c))continue;!D&&Math.abs(s)<c||(m=Math.abs(O[0]%h[0]),y=Math.abs(O[1]%h[1]),b=Math.abs(O[2]%h[0]),v=Math.abs(O[3]%h[1]),C=h[0]-m,P=h[1]-y,x=h[0]-b,E=h[1]-v,!X&&(-s-S[1]+O[1]-_[1]+P<c&&P-_[1]<c||-s-S[1]+O[1]-_[1]-y<c&&y-_[1]<c||s-S[1]-O[3]-_[1]+E<c&&E-_[1]<c||s-S[1]-O[3]-_[1]-v<c&&v-_[1]<c||-s-S[1]+O[1]<c||s-S[1]-O[3]<c)||(a=[[O[0]-n/r.board.unitX,O[2]+n/r.board.unitX,NaN],[s,s,NaN]],utils_type.A.concat(this.dataX,a[0]),utils_type.A.concat(this.dataY,a[1])))}for(i=t;l&&i<=O[2];i+=M[0]){if(p=math.A.roundToStep(Math.abs(i),h[0]),p=Math.abs(p-Math.abs(i)),f=h[0]-p,"line"===R){if(p-S[0]-_[0]<c||f-S[0]-_[0]<c)continue}else if((p-S[0]-_[0]<c||f-S[0]-_[0]<c)&&(B||_[0]-Math.abs(i)+S[0]<c)&&(I||_[0]+Math.abs(i)-S[0]<c)&&(Y||_[0]-Math.abs(i)+S[0]<c))continue;!k&&Math.abs(i)<c||(m=Math.abs(O[0]%h[0]),y=Math.abs(O[1]%h[1]),b=Math.abs(O[2]%h[0]),v=Math.abs(O[3]%h[1]),C=h[0]-m,P=h[1]-y,x=h[0]-b,E=h[1]-v,!X&&(i-S[0]-O[0]-_[0]+C<c&&C-_[0]<c||i-S[0]-O[0]-_[0]-m<c&&m-_[0]<c||-i-S[0]+O[2]-_[0]+x<c&&x-_[0]<c||-i-S[0]+O[2]-_[0]-b<c&&b-_[0]<c||i-S[0]-O[0]<c||-i-S[0]+O[2]<c)||(a=[[i,i,NaN],[O[1]+n/r.board.unitY,O[3]-n/r.board.unitY,NaN]],utils_type.A.concat(this.dataX,a[0]),utils_type.A.concat(this.dataY,a[1])))}}},t.grids.push(s),t.grids.push(r),s},jxg.A.registerElement("grid",jxg.A.createGrid),jxg.A.createLocus=function(t,e,i){var s,r;if(!utils_type.A.isArray(e)||1!==e.length||!utils_type.A.isPoint(e[0]))throw new Error("JSXGraph: Can't create locus with parent of type other than point.\nPossible parent types: [point]");return r=e[0],(s=t.create("curve",[[null],[null]],i)).dontCallServer=!1,s.elType="locus",s.setParents([r.id]),s.updateDataArray=function(){var e,i,o;s.board.mode>0||(e=symbolic.generatePolynomials(t,r,!0).join("|"))!==s.spe&&(s.spe=e,i=function(t,e,i,r){var o;s.dataX=t,s.dataY=e,s.eq=i,s.ctime=r,s.generatePolynomial=(o=i,function(t){var e,i="("+t.symbolic.x+")",s="("+t.symbolic.y+")",r=[];for(e=0;e<o.length;e++)r[e]=o[e].replace(/\*\*/g,"^").replace(/x/g,i).replace(/y/g,s);return r})},i((o=symbolic.geometricLocusByGroebnerBase(t,r,i)).datax,o.datay,o.polynomial,o.exectime))},s},jxg.A.registerElement("locus",jxg.A.createLocus);var base_text=__webpack_require__(925);jxg.A.Image=function(t,e,i,s,r){this.constructor(t,i,constants.A.OBJECT_TYPE_IMAGE,constants.A.OBJECT_CLASS_OTHER),this.element=this.board.select(i.anchor),this.coordsConstructor(e),this.W=utils_type.A.createFunction(r[0],this.board,""),this.H=utils_type.A.createFunction(r[1],this.board,""),this.addParentsFromJCFunctions([this.W,this.H]),this.usrSize=[this.W(),this.H()],this.size=[Math.abs(this.usrSize[0]*t.unitX),Math.abs(this.usrSize[1]*t.unitY)],this.url=s,this.elType="image",this.span=[this.coords.usrCoords.slice(0),[this.coords.usrCoords[0],this.W(),0],[this.coords.usrCoords[0],0,this.H()]],this.id=this.board.setId(this,"Im"),this.board.renderer.drawImage(this),this.board.finalizeAdding(this),this.methodMap=jxg.A.deepCopy(this.methodMap,{addTransformation:"addTransform",trans:"addTransform",W:"W",Width:"W",H:"H",Height:"H",setSize:"setSize"})},jxg.A.Image.prototype=new base_element.A,utils_type.A.copyPrototypeMethods(jxg.A.Image,coordselement.A,"coordsConstructor"),jxg.A.extend(jxg.A.Image.prototype,{hasPoint:function(t,e){var i,s,r,o,n,a,l,h,u,c=this.transformations.length;return utils_type.A.isObject(utils_type.A.evaluate(this.visProp.precision))?(o=this.board._inputDevice,n=utils_type.A.evaluate(this.visProp.precision[o])):n=this.board.options.precision.hasPoint,0===c?(i=t-this.coords.scrCoords[1],s=this.coords.scrCoords[2]-e,i>=-(r=n)&&i-this.size[0]<=r&&s>=-r&&s-this.size[1]<=r):(l=[(a=(a=new base_coords.A(constants.A.COORDS_BY_SCREEN,[t,e],this.board)).usrCoords)[0]-this.span[0][0],a[1]-this.span[0][1],a[2]-this.span[0][2]],0<=(h=(u=math.A.innerProduct)(l,this.span[1]))&&h<=u(this.span[1],this.span[1])&&0<=(h=u(l,this.span[2]))&&h<=u(this.span[2],this.span[2]))},update:function(t){return this.needsUpdate?(this.updateCoords(t),this.updateSize(),this.updateSpan(),this):this},updateRenderer:function(){return this.updateRendererGeneric("updateImage")},updateSize:function(){return this.usrSize=[this.W(),this.H()],this.size=[Math.abs(this.usrSize[0]*this.board.unitX),Math.abs(this.usrSize[1]*this.board.unitY)],this},updateSpan:function(){var t,e,i=this.transformations.length,s=[];if(0===i)this.span=[[this.Z(),this.X(),this.Y()],[this.Z(),this.W(),0],[this.Z(),0,this.H()]];else{for(s[0]=[this.Z(),this.X(),this.Y()],s[1]=[this.Z(),this.X()+this.W(),this.Y()],s[2]=[this.Z(),this.X(),this.Y()+this.H()],t=0;t<i;t++)for(e=0;e<3;e++)s[e]=math.A.matVecMult(this.transformations[t].matrix,s[e]);for(e=0;e<3;e++)s[e][1]/=s[e][0],s[e][2]/=s[e][0],s[e][0]/=s[e][0];for(e=1;e<3;e++)s[e][0]-=s[0][0],s[e][1]-=s[0][1],s[e][2]-=s[0][2];this.span=s}return this},addTransform:function(t){var e;if(utils_type.A.isArray(t))for(e=0;e<t.length;e++)this.transformations.push(t[e]);else this.transformations.push(t);return this},getParents:function(){var t=[this.url,[this.Z(),this.X(),this.Y()],this.usrSize];return 0!==this.parents.length&&(t=this.parents),t},setSize:function(t,e){return this.W=utils_type.A.createFunction(t,this.board,""),this.H=utils_type.A.createFunction(e,this.board,""),this.addParentsFromJCFunctions([this.W,this.H]),this},W:function(){},H:function(){}}),jxg.A.createImage=function(t,e,i){var s,r,o=e[0],n=e[1],a=e[2];if(s=utils_type.A.copyAttributes(i,t.options,"image"),!(r=coordselement.A.create(jxg.A.Image,t,n,s,o,a)))throw new Error("JSXGraph: Can't create image with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [x,y], [z,x,y], [element,transformation]");return 0!==s.rotate&&r.addRotation(s.rotate),r},jxg.A.registerElement("image",jxg.A.createImage);var base_image=jxg.A.Image;jxg.A.createSlider=function(t,e,i){var s,r,o,n,a,l,h,u,c,d,p,_,f,A,g,m,y,b,v,C,P,x,E;return y=(E=utils_type.A.copyAttributes(i,t.options,"slider")).withticks,m=E.withlabel,C=E.snapwidth,b=E.snapvalues,v=E.snapvaluedistance,h=t.create("point",e[0],E.point1),u=t.create("point",e[1],E.point2),(d=t.create("segment",[h,u],E.baseline)).updateStdform(),s=h.coords.usrCoords.slice(1),r=u.coords.usrCoords.slice(1),o=e[2][0],n=e[2][1],a=e[2][2],l=a-o,x=-1===(P=utils_type.A.evaluate(C))?n:Math.round(n/P)*P,A=s[0]+(r[0]-s[0])*(x-o)/(a-o),g=s[1]+(r[1]-s[1])*(x-o)/(a-o),E.withlabel=!1,(c=t.create("glider",[A,g,d],E)).setAttribute({snapwidth:C,snapvalues:b,snapvaluedistance:v}),p=t.create("segment",[h,c],E.highline),c.Value=function(){var t=this._smax-this._smin,e=utils_type.A.evaluate(this.visProp.snapwidth);return-1===e?this.position*t+this._smin:Math.round((this.position*t+this._smin)/e)*e},c.methodMap=utils_type.A.deepCopy(c.methodMap,{Value:"Value",setValue:"setValue",smax:"_smax",smin:"_smin",setMax:"setMax",setMin:"setMin",point1:"point1",point2:"point2",baseline:"baseline",highline:"highline",ticks:"ticks",label:"label"}),c._smax=a,c._smin=o,c.setMax=function(t){return this._smax=t,this},c.setValue=function(t){var e=this._smax-this._smin;return Math.abs(e)>math.A.eps?this.position=(t-this._smin)/e:this.position=0,this.position=Math.max(0,Math.min(1,this.position)),this},c.setMin=function(t){return this._smin=t,this},m&&(f=t.create("text",[function(){return.05*(u.X()-h.X())+u.X()},function(){return.05*(u.Y()-h.Y())+u.Y()},function(){var t,e=utils_type.A.evaluate(c.visProp.digits),i=utils_type.A.evaluate(c.visProp.suffixlabel),s=utils_type.A.evaluate(c.visProp.unitlabel),r=utils_type.A.evaluate(c.visProp.postlabel);return 2===e&&2!==utils_type.A.evaluate(c.visProp.precision)&&(e=utils_type.A.evaluate(c.visProp.precision)),t=null!==i?i:c.name&&""!==c.name?c.name+" = ":"",c.useLocale()?t+=c.formatNumberLocale(c.Value(),e):t+=utils_type.A.toFixed(c.Value(),e),null!==s&&(t+=s),null!==r&&(t+=r),t}],E.label),c.label=f,c.visProp.withlabel=!0,c.hasLabel=!0),c.point1=h,c.point2=u,c.baseline=d,c.highline=p,y&&(utils_type.A.exists(E.generatelabeltext)||(E.ticks.generateLabelText=function(t,e,i){var s=c.point1.Dist(c.point2),r=c._smin,o=c._smax,n=this.getDistanceFromZero(e,t)*(o-r)/s+r;return s<math.A.eps||Math.abs(n)<math.A.eps?"0":this.formatLabelText(n)}),_=t.create("ticks",[c.baseline,c.point1.Dist(h)/2,function(t){var e=c.point1.Dist(c.point2),i=c.point1.coords.distance(constants.A.COORDS_BY_USER,t);return e<math.A.eps?0:i/e*l+o}],E.ticks),c.ticks=_),c.remove=function(){m&&t.removeObject(f),t.removeObject(p),t.removeObject(d),t.removeObject(u),t.removeObject(h),point.prototype.remove.call(c)},h.dump=!1,u.dump=!1,d.dump=!1,p.dump=!1,m&&(f.dump=!1),c.elType="slider",c.parents=e,c.subs={point1:h,point2:u,baseLine:d,highLine:p},c.inherits.push(h,u,d,p),d.inherits=[],p.inherits=[],y&&(_.dump=!1,c.subs.ticks=_,c.inherits.push(_)),c.getParents=function(){return[this.point1.coords.usrCoords.slice(1),this.point2.coords.usrCoords.slice(1),[this._smin,this.position*(this._smax-this._smin)+this._smin,this._smax]]},c.baseline.on("up",(function(t){var e,i;utils_type.A.evaluate(c.visProp.moveonup)&&!utils_type.A.evaluate(c.visProp.fixed)&&(e=d.board.getMousePosition(t,0),i=new base_coords.A(constants.A.COORDS_BY_SCREEN,e,this.board),c.moveTo([i.usrCoords[1],i.usrCoords[2]]),c.triggerEventHandlers(["drag"],[t]))})),c.prepareUpdate().update(),t.isSuspendedUpdate||(c.updateVisibility().updateRenderer(),c.baseline.updateVisibility().updateRenderer(),c.highline.updateVisibility().updateRenderer(),y&&c.ticks.updateVisibility().updateRenderer()),c},jxg.A.registerElement("slider",jxg.A.createSlider),jxg.A.PrefixParser={parse:function(t,e){var i,s,r,o,n,a;if(utils_type.A.isNumber(t)||utils_type.A.isString(t))return t;if(!utils_type.A.isArray(t)||t.length<2)throw new Error("prefixParser.parse: term is not an array, number or string");if(i=t[0],r=t.length,"execute"===e)if(utils_type.A.isInArray(["+","-","*","/"],i))for(o=this.parse(t[1],e),s=2;s<r;s++)switch(a=this.parse(t[s],e),i){case"+":o+=a;break;case"-":o-=a;break;case"*":o*=a;break;case"/":o/=a}else if("exec"===i){for(n=t[1],a=[],s=2;s<r;s++)a.push(this.parse(t[s],e));if(utils_type.A.exists(Math[n]))o=Math[n].apply(this,a);else{if(!utils_type.A.exists(math.A[n]))throw new Error("PrefixParser.parse: "+n+" is not allowed");o=math.A[n].apply(this,a)}}else{if("V"===(n=t[0])&&(n="Value"),"Coords"===n&&(t[2]="true"),!utils_type.A.exists(t[1][n]))throw new Error("PrefixParser.parse: "+n+" is not a method of "+t[1]);for(a=[],s=2;s<r;s++)a.push(this.parse(t[s],e));o=t[1][n].apply(t[1],a)}return o},dimension:function(t){var e,i,s,r,o,n,a,l;if(utils_type.A.isNumber(t))return 0;if(!utils_type.A.isArray(t)||t.length<2)throw new Error("PrefixParser.dimension: term is not an array");if(e=t[0],s=t.length,utils_type.A.isInArray(["+","-","*","/"],e))for(r=this.dimension(t[1]),i=2;i<s;i++)switch(a=this.dimension(t[i]),e){case"+":case"-":a!==r&&(r=NaN);break;case"*":r+=a;break;case"/":r-=a}else if("exec"===e)t[2].type===utils_type.A.OBJECT_TYPE_MEASUREMENT?(r=t[2].Dimension(),utils_type.A.exists(t[2].visProp.dim)&&null!==(n=utils_type.A.evaluate(t[2].visProp.dim))&&(r=n)):r=0;else switch(o=t[0]){case"L":case"Length":case"Perimeter":case"Radius":case"R":r=1;break;case"Area":case"A":r=2;break;default:t[1].type===utils_type.A.OBJECT_TYPE_MEASUREMENT?(r=t[1].Dimension(),utils_type.A.exists(t[1].visProp.dim)&&null!==(n=utils_type.A.evaluate(t[1].visProp.dim))&&(r=n)):(r=0,"Value"!==o&&"V"!==o||[constants.A.OBJECT_TYPE_ARC,constants.A.OBJECT_TYPE_SECTOR,constants.A.OBJECT_TYPE_ANGLE].indexOf(t[1].type)>=0&&(l="",3===t.length&&utils_type.A.isString(t[2])&&(l=t[2].toLowerCase()),r=""===l?t[1].type===constants.A.OBJECT_TYPE_ANGLE?0:1:0===l.indexOf("len")?1:0))}return r},toPrefix:function(t){var e,i,s,r;if(utils_type.A.isNumber(t))return t;if(!utils_type.A.isArray(t)||t.length<2)throw new Error("PrefixParser.toPrefix: term is not an array");for(e=t[0],s=t.length,r=[e],i=1;i<s;i++)utils_type.A.isInArray(["+","-","*","/"],e)?r.push(this.toPrefix(t[i])):"V"===e&&t[i].type===utils_type.A.OBJECT_TYPE_MEASUREMENT?r=t[i].toPrefix():"exec"===e?1===i?r.push(t[i]):r.push(this.toPrefix(t[i])):r=[e,t[i].id];return r},getParents:function(t){var e,i,s,r;if(utils_type.A.isNumber(t))return[];if(!utils_type.A.isArray(t)||t.length<2)throw new Error("PrefixParser.getParents: term is not an array");for(e=t[0],s=t.length,r=[],i=1;i<s;i++)utils_type.A.isInArray(["+","-","*","/"],e)?utils_type.A.concat(r,this.getParents(t[i])):"V"===e&&t[i].type===utils_type.A.OBJECT_TYPE_MEASUREMENT?utils_type.A.concat(r,t[i].getParents()):"exec"===e?i>1&&utils_type.A.concat(r,this.getParents(t[i])):r.push(t[i]);return r}};var prefix=jxg.A.PrefixParser;jxg.A.createTapemeasure=function(t,e,i){var s,r,o,n,a,l,h,u,c,d;return s=e[0],r=e[1],o=utils_type.A.copyAttributes(i,t.options,"tapemeasure","point1"),h=t.create("point",s,o),o=utils_type.A.copyAttributes(i,t.options,"tapemeasure","point2"),u=t.create("point",r,o),h.setAttribute({ignoredSnapToPoints:[u.id]}),u.setAttribute({ignoredSnapToPoints:[h.id]}),o=utils_type.A.copyAttributes(i,t.options,"tapemeasure"),n=o.withticks,a=o.withlabel,2===o.digits&&2!==o.precision&&o.precision,a&&(o.withlabel=!0),l=t.create("segment",[h,u],o),a&&(c=i.name&&""!==i.name?i.name+" = ":"",l.label.setText((function(){var t=utils_type.A.evaluate(l.label.visProp.digits);return l.label.useLocale()?c+l.label.formatNumberLocale(h.Dist(u),t):c+utils_type.A.toFixed(h.Dist(u),t)}))),n&&(o=utils_type.A.copyAttributes(i,t.options,"tapemeasure","ticks"),d=t.create("ticks",[l,.1],o),l.inherits.push(d)),l.remove=function(){n&&l.removeTicks(d),t.removeObject(u),t.removeObject(h),base_element.A.prototype.remove.call(this)},l.Value=function(){return h.Dist(u)},h.dump=!1,u.dump=!1,l.elType="tapemeasure",l.getParents=function(){return[[h.X(),h.Y()],[u.X(),u.Y()]]},l.subs={point1:h,point2:u},n&&(d.dump=!1),l.methodMap=jxg.A.deepCopy(l.methodMap,{Value:"Value"}),l.prepareUpdate().update(),t.isSuspendedUpdate||(l.updateVisibility().updateRenderer(),l.point1.updateVisibility().updateRenderer(),l.point2.updateVisibility().updateRenderer()),l},jxg.A.registerElement("tapemeasure",jxg.A.createTapemeasure),jxg.A.createMeasurement=function(t,e,i){var s,r,o,n,a,l;for(r=utils_type.A.copyAttributes(i,t.options,"measurement"),o=e[0],n=e[1],a=e[2],(s=t.create("text",[o,n,""],r)).type=utils_type.A.OBJECT_TYPE_MEASUREMENT,s.elType="measurement",s.Value=function(){return prefix.parse(a,"execute")},s.Dimension=function(){var t=utils_type.A.evaluate(s.visProp.dim);return null!==t?t:prefix.dimension(a)},s.Unit=function(){var t="",e=utils_type.A.evaluate(s.visProp.units),i=s.Dimension();return utils_type.A.isObject(e)&&utils_type.A.exists(e[i])&&!1!==e[i]?t=utils_type.A.evaluate(e[i]):utils_type.A.isObject(e)&&utils_type.A.exists(e["dim"+i])&&!1!==e["dim"+i]?t=utils_type.A.evaluate(e["dim"+i]):(t=utils_type.A.evaluate(s.visProp.baseunit),0===i?t="":i>1&&""!==t&&(t=t+"^{"+i+"}")),t},s.getTerm=function(){return a},s.getMethod=function(){var t=a[0];return"V"===t&&(t="Value"),t},s.toPrefix=function(){return prefix.toPrefix(a)},s.getParents=function(){return prefix.getParents(a)},s.addParents(s.getParents()),l=0;l<s.parents.length;l++)t.select(s.parents[l]).addChild(s);return s.setText((function(){var t,e="",i="",r=s.Dimension(),o=utils_type.A.evaluate(s.visProp.digits),n=s.Unit(),a=s.Value();if(utils_type.A.evaluate(s.visProp.showprefix)&&(e=s.visProp.formatprefix.apply(s,[utils_type.A.evaluate(s.visProp.prefix)])),utils_type.A.evaluate(s.visProp.showsuffix)&&(i=s.visProp.formatsuffix.apply(s,[utils_type.A.evaluate(s.visProp.suffix)])),utils_type.A.isNumber(a))"none"===o||(a="auto"===o?s.useLocale()?s.formatNumberLocale(a):utils_type.A.autoDigits(a):s.useLocale()?s.formatNumberLocale(a,o):utils_type.A.toFixed(a,o));else if(utils_type.A.isArray(a))for(t=0;t<a.length;t++)utils_type.A.isNumber(a[t])&&("none"===o||("auto"===o?s.useLocale()?a[t]=s.formatNumberLocale(a[t]):a[t]=utils_type.A.autoDigits(a[t]):s.useLocale()?a[t]=s.formatNumberLocale(a[t],o):a[t]=utils_type.A.toFixed(a[t],o)));return"coords"===r&&utils_type.A.isArray(a)&&(2===a.length&&a.unshift(void 0),a=s.visProp.formatcoords.apply(s,[a[1],a[2],a[0]])),"direction"===r&&utils_type.A.isArray(a)&&(2===a.length&&a.unshift(void 0),a=s.visProp.formatdirection.apply(s,[a[1],a[2]])),utils_type.A.isString(r)?e+a+i:isNaN(r)?e+"NaN"+i:e+a+n+i})),s.methodMap=utils_type.A.deepCopy(s.methodMap,{Value:"Value",Dimension:"Dimension",Unit:"Unit",getTerm:"getTerm",Term:"getTerm",getMethod:"getMethod",Method:"getMethod",getParents:"getParents",Parents:"getParents"}),s},jxg.A.registerElement("measurement",jxg.A.createMeasurement),jxg.A.DataSource=function(){return this.data=[],this.columnHeaders=[],this.rowHeaders=[],this},jxg.A.extend(jxg.A.DataSource.prototype,{loadFromArray:function(t,e,i){var s,r,o;if(utils_type.A.isArray(e)&&(this.columnHeaders=e,e=!1),utils_type.A.isArray(i)&&(this.rowHeaders=i,i=!1),this.data=[],e&&(this.columnHeaders=[]),i&&(this.rowHeaders=[]),utils_type.A.exists(t)){for(this.data=[],s=0;s<t.length;s++)for(this.data[s]=[],r=0;r<t[s].length;r++)o=t[s][r],parseFloat(o).toString()===o?this.data[s][r]=parseFloat(o):this.data[s][r]="-"!==o?o:NaN;if(e&&(this.columnHeaders=this.data[0].slice(1),this.data=this.data.slice(1)),i)for(this.rowHeaders=[],s=0;s<this.data.length;s++)this.rowHeaders.push(this.data[s][0]),this.data[s]=this.data[s].slice(1)}return this},loadFromTable:function(t,e,i){var s,r,o,n,a;if(utils_type.A.isArray(e)&&(this.columnHeaders=e,e=!1),utils_type.A.isArray(i)&&(this.rowHeaders=i,i=!1),this.data=[],e&&(this.columnHeaders=[]),i&&(this.rowHeaders=[]),t=document.getElementById(t),utils_type.A.exists(t)){for(s=t.getElementsByTagName("tr"),this.data=[],r=0;r<s.length;r++)for(n=s[r].getElementsByTagName("td"),this.data[r]=[],o=0;o<n.length;o++)a=n[o].innerHTML,parseFloat(a).toString()===a?this.data[r][o]=parseFloat(a):this.data[r][o]="-"!==a?a:NaN;if(e&&(this.columnHeaders=this.data[0].slice(1),this.data=this.data.slice(1)),i)for(this.rowHeaders=[],r=0;r<this.data.length;r++)this.rowHeaders.push(this.data[r][0]),this.data[r]=this.data[r].slice(1)}return this},addColumn:function(t,e,i){throw new Error("not implemented")},addRow:function(t,e,i){throw new Error("not implemented")},getColumn:function(t){var e,i=[];if(utils_type.A.isString(t))for(e=0;e<this.columnHeaders.length;e++)if(t===this.columnHeaders[e]){t=e;break}for(e=0;e<this.data.length;e++)this.data[e].length>t&&(i[e]=parseFloat(this.data[e][t]));return i},getRow:function(t){var e,i;if(utils_type.A.isString(t))for(i=0;i<this.rowHeaders.length;i++)if(t===this.rowHeaders[i]){t=i;break}for(e=[],i=0;i<this.data[t].length;i++)e[i]=this.data[t][i];return e}});var datasource=jxg.A.DataSource;jxg.A.Chart=function(t,e,i){var s,r,o,n,a,l;if(this.constructor(t,i),!utils_type.A.isArray(e)||0===e.length)throw new Error("JSXGraph: Can't create a chart without data");if(this.elements=[],utils_type.A.isNumber(e[0]))for(r=e,s=[],o=0;o<r.length;o++)s[o]=o+1;else if(1===e.length&&utils_type.A.isArray(e[0]))for(r=e[0],s=[],l=utils_type.A.evaluate(r).length,o=0;o<l;o++)s[o]=o+1;else 2===e.length&&(l=Math.min(e[0].length,e[1].length),s=e[0].slice(0,l),r=e[1].slice(0,l));if(utils_type.A.isArray(r)&&0===r.length)throw new Error("JSXGraph: Can't create charts without data.");for(a=i.chartstyle.replace(/ /g,"").split(","),o=0;o<a.length;o++){switch(a[o]){case"bar":n=this.drawBar(t,s,r,i);break;case"line":n=this.drawLine(t,s,r,i);break;case"fit":n=this.drawFit(t,s,r,i);break;case"spline":n=this.drawSpline(t,s,r,i);break;case"pie":n=this.drawPie(t,r,i);break;case"point":n=this.drawPoints(t,s,r,i);break;case"radar":n=this.drawRadar(t,e,i)}this.elements.push(n)}return this.id=this.board.setId(this,"Chart"),this.elements},jxg.A.Chart.prototype=new base_element.A,jxg.A.extend(jxg.A.Chart.prototype,{drawLine:function(t,e,i,s){return s.fillcolor="none",s.highlightfillcolor="none",t.create("curve",[e,i],s)},drawSpline:function(t,e,i,s){return s.fillColor="none",s.highlightfillcolor="none",t.create("spline",[e,i],s)},drawFit:function(t,e,i,s){var r=s.degree;return r=Math.max(parseInt(r,10),1)||1,s.fillcolor="none",s.highlightfillcolor="none",t.create("functiongraph",[numerics.A.regressionPolynomial(r,e,i)],s)},drawBar:function(t,e,i,s){var r,o,n,a,l,h,u,c,d,p,_=[],f=[],A=function(t,i){return function(){return e[t]()-i*n}},g={fixed:!0,withLabel:!1,visible:!1,name:""};if((d=utils_type.A.copyAttributes(s,t.options,"chart"))&&d.width)n=d.width;else{if(e.length<=1)n=1;else for(n=e[1]-e[0],r=1;r<e.length-1;r++)n=e[r+1]-e[r]<n?e[r+1]-e[r]:n;n*=.8}for(p=utils_type.A.copyAttributes(s,t.options,"chart","label"),r=0;r<e.length;r++)utils_type.A.isFunction(e[r])?(a=A(r,-.5),l=A(r,0),h=A(r,.5)):(a=e[r]-.5*n,l=e[r],h=e[r]+.5*n),u=utils_type.A.isFunction(i[r])?i[r]():i[r],u=i[r],"horizontal"===d.dir?(f[0]=t.create("point",[0,a],g),f[1]=t.create("point",[u,a],g),f[2]=t.create("point",[u,h],g),f[3]=t.create("point",[0,h],g),utils_type.A.exists(d.labels)&&utils_type.A.exists(d.labels[r])&&(p.anchorY="middle",(o=t.create("text",[u,l,d.labels[r]],p)).visProp.anchorx=function(t){return function(){return t.X()>=0?"left":"right"}}(o))):(f[0]=t.create("point",[a,0],g),f[1]=t.create("point",[a,u],g),f[2]=t.create("point",[h,u],g),f[3]=t.create("point",[h,0],g),utils_type.A.exists(d.labels)&&utils_type.A.exists(d.labels[r])&&(p.anchorX="middle",(o=t.create("text",[l,u,d.labels[r]],p)).visProp.anchory=function(t){return function(){return t.Y()>=0?"bottom":"top"}}(o))),utils_type.A.isArray(d.colors)&&(c=d.colors,d.fillcolor=c[r%c.length]),_[r]=t.create("polygon",f,d),utils_type.A.exists(d.labels)&&utils_type.A.exists(d.labels[r])&&(_[r].text=o);return _},drawPoints:function(t,e,i,s){var r,o=[],n=s.infoboxarray;for(s.fixed=!0,s.name="",r=0;r<e.length;r++)s.infoboxtext=!!n&&n[r%n.length],o[r]=t.create("point",[e[r],i[r]],s);return o},drawPie:function(t,e,i){var s,r,o=[],n=[],a=i.colors,l=i.highlightcolors,h=i.labels,u=i.radius||4,c=u,d=i.center||[0,0],p=d[0],_=d[1],f=function(t,i,s){return function(){var r,o,n,a=0;for(o=0;o<=t;o++)a+=parseFloat(utils_type.A.evaluate(e[o]));for(r=a,o=t+1;o<e.length;o++)r+=parseFloat(utils_type.A.evaluate(e[o]));return n=0!==r?2*Math.PI*a/r:0,c()*Math[i](n)+s}},A=function(t,e){var i=-this.point1.coords.usrCoords[1]+this.point2.coords.usrCoords[1],s=-this.point1.coords.usrCoords[2]+this.point2.coords.usrCoords[2];utils_type.A.exists(this.label)&&(this.label.rendNode.style.fontSize=e*utils_type.A.evaluate(this.label.visProp.fontsize)+"px",this.label.fullUpdate()),this.point2.coords=new base_coords.A(constants.A.COORDS_BY_USER,[this.point1.coords.usrCoords[1]+i*t,this.point1.coords.usrCoords[2]+s*t],this.board),this.fullUpdate()},g=function(){this.highlighted||(this.highlighted=!0,this.board.highlightedObjects[this.id]=this,this.board.renderer.highlight(this),A.call(this,1.1,2))},m=function(){this.highlighted&&(this.highlighted=!1,this.board.renderer.noHighlight(this),A.call(this,.9090909,1))},y={fixed:!0,withLabel:!1,visible:!1,name:""};if(!utils_type.A.isArray(h))for(h=[],s=0;s<e.length;s++)h[s]="";for(utils_type.A.isFunction(u)||(c=function(){return u}),i.highlightonsector=i.highlightonsector||!1,i.straightfirst=!1,i.straightlast=!1,r=t.create("point",[p,_],y),o[0]=t.create("point",[function(){return c()+p},function(){return _}],y),s=0;s<e.length;s++)o[s+1]=t.create("point",[f(s,"cos",p),f(s,"sin",_)],y),i.name=h[s],i.withlabel=""!==i.name,i.fillcolor=a&&a[s%a.length],i.labelcolor=a&&a[s%a.length],i.highlightfillcolor=l&&l[s%l.length],n[s]=t.create("sector",[r,o[s],o[s+1]],i),i.highlightonsector&&(n[s].hasPoint=n[s].hasPointSector),i.highlightbysize&&(n[s].highlight=g,n[s].noHighlight=m);return{sectors:n,points:o,midpoint:r}},drawRadar:function(t,e,i){var s,r,o,n,a,l,h,u,c,d,p,_,f,A,g,m,y,b,v,C,P,x,E,O,M,S,w,T,N,j,D,k,R,L,B,I,Y,X,U,F,z,J,G=e.length,H=function(){var t,e,i,s,r=utils_type.A.evaluate(this.visProp.label.offset).slice(0);return t=this.point1.X(),e=this.point2.X(),i=this.point1.Y(),s=this.point2.Y(),e<t&&(r[0]=-r[0]),s<i&&(r[1]=-r[1]),this.setLabelRelativeCoords(r),new base_coords.A(constants.A.COORDS_BY_USER,[this.point2.X(),this.point2.Y()],this.board)},W=function(e,i){var s,r,o;return s=t.create("transform",[-(g[i]-f[i]),0],{type:"translate"}),r=t.create("transform",[v/(m[i]+A[i]-(g[i]-f[i])),1],{type:"scale"}),s.melt(r),o=t.create("transform",[e],{type:"rotate"}),s.melt(o),s};if(G<=0)throw new Error("JSXGraph radar chart: no data");if(o=i.paramarray,!utils_type.A.exists(o))throw new Error("JSXGraph radar chart: need paramArray attribute");if((n=o.length)<=1)throw new Error("JSXGraph radar chart: need more than one param in paramArray");for(s=0;s<G;s++)if(n!==e[s].length)throw new Error("JSXGraph radar chart: use data length equal to number of params ("+e[s].length+" != "+n+")");for(a=[],l=[],r=0;r<n;r++)a[r]=e[0][r],l[r]=a[r];for(s=1;s<G;s++)for(r=0;r<n;r++)e[s][r]>a[r]&&(a[r]=e[s][r]),e[s][r]<l[r]&&(l[r]=e[s][r]);for(h=[],u=[],s=0;s<G;s++)h[s]="",u[s]=[];for(c=[],d=[],p=i.startshiftratio||0,_=i.endshiftratio||0,s=0;s<n;s++)c[s]=(a[s]-l[s])*p,d[s]=(a[s]-l[s])*_;if(f=i.startshiftarray||c,A=i.endshiftarray||d,g=i.startarray||l,utils_type.A.exists(i.start))for(s=0;s<n;s++)g[s]=i.start;if(m=i.endarray||a,utils_type.A.exists(i.end))for(s=0;s<n;s++)m[s]=i.end;if(f.length!==n)throw new Error("JSXGraph radar chart: start shifts length is not equal to number of parameters");if(A.length!==n)throw new Error("JSXGraph radar chart: end shifts length is not equal to number of parameters");if(g.length!==n)throw new Error("JSXGraph radar chart: starts length is not equal to number of parameters");if(m.length!==n)throw new Error("JSXGraph radar chart: snds length is not equal to number of parameters");for(y=i.labelarray||h,b=i.colors,v=i.radius||10,z=i.strokewidth||1,utils_type.A.exists(i.highlightonsector)||(i.highlightonsector=!1),C={name:i.name,id:i.id,strokewidth:z,polystrokewidth:i.polystrokewidth||z,strokecolor:i.strokecolor||"black",straightfirst:!1,straightlast:!1,fillcolor:i.fillColor||"#FFFF88",fillopacity:i.fillOpacity||.4,highlightfillcolor:i.highlightFillColor||"#FF7400",highlightstrokecolor:i.highlightStrokeColor||"black",gradient:i.gradient||"none"},x=(P=i.center||[0,0])[0],E=P[1],O=t.create("point",[x,E],{name:"",fixed:!0,withlabel:!1,visible:!1}),Math.PI/2-Math.PI/n,S=M=i.startangle||0,w=[],T=[],s=0;s<n;s++)for(S+=2*Math.PI/n,j=v*Math.cos(S)+x,D=v*Math.sin(S)+E,w[s]=t.create("point",[j,D],{name:"",fixed:!0,withlabel:!1,visible:!1}),T[s]=t.create("line",[O,w[s]],{name:o[s],strokeColor:C.strokecolor,strokeWidth:C.strokewidth,strokeOpacity:1,straightFirst:!1,straightLast:!1,withLabel:!0,highlightStrokeColor:C.highlightstrokecolor}),T[s].getLabelAnchor=H,N=W(S,s),r=0;r<e.length;r++)J=e[r][s],u[r][s]=t.create("point",[J,0],{name:"",fixed:!0,withlabel:!1,visible:!1}),u[r][s].addTransform(u[r][s],N);for(k=[],s=0;s<G;s++)for(C.labelcolor=b&&b[s%b.length],C.strokecolor=b&&b[s%b.length],C.fillcolor=b&&b[s%b.length],k[s]=t.create("polygon",u[s],{withLines:!0,withLabel:!1,fillColor:C.fillcolor,fillOpacity:C.fillopacity,highlightFillColor:C.highlightfillcolor}),r=0;r<n;r++)k[s].borders[r].setAttribute("strokecolor:"+b[s%b.length]),k[s].borders[r].setAttribute("strokewidth:"+C.polystrokewidth);switch(i.legendposition||"none"){case"right":L=i.legendleftoffset||2,B=i.legendtopoffset||1,this.legend=t.create("legend",[x+v+L,E+v-B],{labels:y,colors:b});break;case"none":break;default:jxg.A.debug("Unknown legend position")}if(R=[],i.showcircles){for(I=[],s=0;s<6;s++)I[s]=20*s;if(I[0]="0",(X=(Y=i.circlelabelarray||I).length)<2)throw new Error("JSXGraph radar chart: too less circles in circleLabelArray");for(U=[],N=W(M+Math.PI/n,0),C.fillcolor="none",C.highlightfillcolor="none",C.strokecolor=i.strokecolor||"black",C.strokewidth=i.circlestrokewidth||.5,C.layer=0,F=(m[0]-g[0])/(X-1),s=0;s<X;s++)U[s]=t.create("point",[g[0]+s*F,0],{name:Y[s],size:0,fixed:!0,withLabel:!0,visible:!0}),U[s].addTransform(U[s],N),R[s]=t.create("circle",[O,U[s]],C)}return this.rendNode=k[0].rendNode,{circles:R,lines:T,points:u,midpoint:O,polygons:k}},updateRenderer:function(){return this},update:function(){return this.needsUpdate&&this.updateDataArray(),this},updateDataArray:function(){return this}}),jxg.A.createChart=function(t,e,i){var s,r,o,n,a,l,h,u,c,d,p,_,f,A,g,m,y=[],b=env.A.isBrowser?t.document.getElementById(e[0]):null;if(1===e.length&&utils_type.A.isString(e[0])){if(utils_type.A.exists(b)){if(c=utils_type.A.copyAttributes(i,t.options,"chart"),s=(b=(new datasource).loadFromTable(e[0],c.withheaders,c.withheaders)).data,a=b.columnHeaders,r=b.rowHeaders,d=c.width,p=c.name,_=c.strokecolor,f=c.fillcolor,A=c.highlightstrokecolor,g=c.highlightfillcolor,t.suspendUpdate(),m=s.length,u=[],c.rows&&utils_type.A.isArray(c.rows)){for(o=0;o<m;o++)for(n=0;n<c.rows.length;n++)if(c.rows[n]===o||c.withheaders&&c.rows[n]===r[o]){u.push(s[o]);break}}else u=s;for(m=u.length,o=0;o<m;o++){if(h=[],c.chartstyle&&-1!==c.chartstyle.indexOf("bar")){for(l=d||.8,h.push(1-l/2+(o+.5)*l/m),n=1;n<u[o].length;n++)h.push(h[n-1]+1);c.width=l/m}p&&p.length===m?c.name=p[o]:c.withheaders&&(c.name=a[o]),_&&_.length===m?c.strokecolor=_[o]:c.strokecolor=utils_color.A.hsv2rgb((o+1)/m*360,.9,.6),f&&f.length===m?c.fillcolor=f[o]:c.fillcolor=utils_color.A.hsv2rgb((o+1)/m*360,.9,1),A&&A.length===m?c.highlightstrokecolor=A[o]:c.highlightstrokecolor=utils_color.A.hsv2rgb((o+1)/m*360,.9,1),g&&g.length===m?c.highlightfillcolor=g[o]:c.highlightfillcolor=utils_color.A.hsv2rgb((o+1)/m*360,.9,.6),c.chartstyle&&-1!==c.chartstyle.indexOf("bar")?y.push(new jxg.A.Chart(t,[h,u[o]],c)):y.push(new jxg.A.Chart(t,[u[o]],c))}t.unsuspendUpdate()}return y}return c=utils_type.A.copyAttributes(i,t.options,"chart"),new jxg.A.Chart(t,e,c)},jxg.A.registerElement("chart",jxg.A.createChart),jxg.A.Legend=function(t,e,i){var s;if(this.constructor(),s=utils_type.A.copyAttributes(i,t.options,"legend"),this.board=t,this.coords=new base_coords.A(constants.A.COORDS_BY_USER,e,this.board),this.myAtts={},this.label_array=s.labelarray||s.labels,this.color_array=s.colorarray||s.colors,this.lines=[],this.myAtts.strokewidth=s.strokewidth||5,this.myAtts.straightfirst=!1,this.myAtts.straightlast=!1,this.myAtts.withlabel=!0,this.myAtts.fixed=!0,this.style=s.legendstyle||s.style,"vertical"!==this.style)throw new Error("JSXGraph: Unknown legend style: "+this.style);this.drawVerticalLegend(t,s)},jxg.A.Legend.prototype=new base_element.A,jxg.A.Legend.prototype.drawVerticalLegend=function(t,e){var i,s=e.linelength||1,r=(e.rowheight||20)/this.board.unitY,o=function(){return this.setLabelRelativeCoords(this.visProp.label.offset),new base_coords.A(constants.A.COORDS_BY_USER,[this.point2.X(),this.point2.Y()],this.board)};for(i=0;i<this.label_array.length;i++)this.myAtts.name=this.label_array[i],this.myAtts.strokecolor=this.color_array[i%this.color_array.length],this.myAtts.highlightstrokecolor=this.color_array[i%this.color_array.length],this.myAtts.label={offset:[10,0],strokeColor:this.color_array[i%this.color_array.length],strokeWidth:this.myAtts.strokewidth},this.lines[i]=t.create("line",[[this.coords.usrCoords[1],this.coords.usrCoords[2]-i*r],[this.coords.usrCoords[1]+s,this.coords.usrCoords[2]-i*r]],this.myAtts),this.lines[i].getLabelAnchor=o,this.lines[i].prepareUpdate().update().updateVisibility(utils_type.A.evaluate(this.lines[i].visProp.visible)).updateRenderer()},jxg.A.createLegend=function(t,e,i){var s=[0,0];if(!utils_type.A.exists(e)||2!==e.length)throw new Error("JSXGraph: Legend element needs two numbers as parameters");return s=e,new jxg.A.Legend(t,s,i)},jxg.A.registerElement("legend",jxg.A.createLegend);var chart={Chart:jxg.A.Chart,Legend:jxg.A.Legend};jxg.A.Transformation=function(t,e,i){this.elementClass=constants.A.OBJECT_CLASS_OTHER,this.type=constants.A.OBJECT_TYPE_TRANSFORMATION,this.matrix=[[1,0,0],[0,1,0],[0,0,1]],this.board=t,this.isNumericMatrix=!1,this.setMatrix(t,e,i),this.methodMap={apply:"apply",applyOnce:"applyOnce",bindTo:"bindTo",bind:"bindTo",melt:"melt"}},jxg.A.Transformation.prototype={},jxg.A.extend(jxg.A.Transformation.prototype,{update:function(){return this},setMatrix:function(t,e,i){var s;for(this.isNumericMatrix=!0,s=0;s<i.length;s++)if("number"!=typeof i[s]){this.isNumericMatrix=!1;break}if("translate"===e){if(2!==i.length)throw new Error("JSXGraph: translate transformation needs 2 parameters.");this.evalParam=utils_type.A.createEvalFunction(t,i,2),this.update=function(){this.matrix[1][0]=this.evalParam(0),this.matrix[2][0]=this.evalParam(1)}}else if("scale"===e){if(2!==i.length)throw new Error("JSXGraph: scale transformation needs 2 parameters.");this.evalParam=utils_type.A.createEvalFunction(t,i,2),this.update=function(){this.matrix[1][1]=this.evalParam(0),this.matrix[2][2]=this.evalParam(1)}}else if("reflect"===e)i.length<4&&(i[0]=t.select(i[0])),2===i.length&&(i[1]=t.select(i[1])),4===i.length&&(this.evalParam=utils_type.A.createEvalFunction(t,i,4)),this.update=function(){var t,e,s,r,o,n,a,l;1===i.length?a=i[0].stdform:2===i.length?a=math.A.crossProduct(i[1].coords.usrCoords,i[0].coords.usrCoords):4===i.length&&(a=math.A.crossProduct([1,this.evalParam(2),this.evalParam(3)],[1,this.evalParam(0),this.evalParam(1)])),t=a[1],e=a[2],n=(l=[-(s=a[0])*t,-s*e,t*t+e*e])[2],r=l[0]/l[2],o=l[1]/l[2],t=-a[2],e=a[1],this.matrix[1][1]=(t*t-e*e)/n,this.matrix[1][2]=2*t*e/n,this.matrix[2][1]=this.matrix[1][2],this.matrix[2][2]=-this.matrix[1][1],this.matrix[1][0]=r*(1-this.matrix[1][1])-o*this.matrix[1][2],this.matrix[2][0]=o*(1-this.matrix[2][2])-r*this.matrix[2][1]};else if("rotate"===e)3===i.length?this.evalParam=utils_type.A.createEvalFunction(t,i,3):i.length>0&&i.length<=2&&(this.evalParam=utils_type.A.createEvalFunction(t,i,1),2!==i.length||utils_type.A.isArray(i[1])||(i[1]=t.select(i[1]))),this.update=function(){var t,e,s=this.evalParam(0),r=Math.cos(s),o=Math.sin(s);this.matrix[1][1]=r,this.matrix[1][2]=-o,this.matrix[2][1]=o,this.matrix[2][2]=r,i.length>1&&(3===i.length?(t=this.evalParam(1),e=this.evalParam(2)):utils_type.A.isArray(i[1])?(t=i[1][0],e=i[1][1]):(t=i[1].X(),e=i[1].Y()),this.matrix[1][0]=t*(1-r)+e*o,this.matrix[2][0]=e*(1-r)-t*o)};else if("shear"===e){if(2!==i.length)throw new Error("JSXGraph: shear transformation needs 2 parameters.");this.evalParam=utils_type.A.createEvalFunction(t,i,2),this.update=function(){this.matrix[1][2]=this.evalParam(0),this.matrix[2][1]=this.evalParam(1)}}else if("generic"===e){if(9!==i.length)throw new Error("JSXGraph: generic transformation needs 9 parameters.");this.evalParam=utils_type.A.createEvalFunction(t,i,9),this.update=function(){this.matrix[0][0]=this.evalParam(0),this.matrix[0][1]=this.evalParam(1),this.matrix[0][2]=this.evalParam(2),this.matrix[1][0]=this.evalParam(3),this.matrix[1][1]=this.evalParam(4),this.matrix[1][2]=this.evalParam(5),this.matrix[2][0]=this.evalParam(6),this.matrix[2][1]=this.evalParam(7),this.matrix[2][2]=this.evalParam(8)}}},apply:function(t,e){return this.update(),utils_type.A.exists(e)?math.A.matVecMult(this.matrix,t.initialCoords.usrCoords):math.A.matVecMult(this.matrix,t.coords.usrCoords)},applyOnce:function(t){var e,i,s;for(utils_type.A.isArray(t)||(t=[t]),i=t.length,s=0;s<i;s++)this.update(),e=math.A.matVecMult(this.matrix,t[s].coords.usrCoords),t[s].coords.setCoordinates(constants.A.COORDS_BY_USER,e)},bindTo:function(t){var e,i;if(utils_type.A.isArray(t))for(i=t.length,e=0;e<i;e++)t[e].transformations.push(this);else t.transformations.push(this)},setProperty:function(t){jxg.A.deprecated("Transformation.setProperty()","Transformation.setAttribute()")},setAttribute:function(t){},melt:function(t){var e,i,s,r,o,n,a=[];for(i=t.matrix.length,s=this.matrix[0].length,e=0;e<i;e++)a[e]=[];for(this.update(),t.update(),e=0;e<i;e++)for(n=0;n<s;n++){for(o=0,r=0;r<i;r++)o+=t.matrix[e][r]*this.matrix[r][n];a[e][n]=o}return this.update=function(){var t=this.matrix.length,i=this.matrix[0].length;for(e=0;e<t;e++)for(n=0;n<i;n++)this.matrix[e][n]=a[e][n]},this},getParents:function(){var t=[[].concat.apply([],this.matrix)];return 0!==this.parents.length&&(t=this.parents),t}}),jxg.A.createTransform=function(t,e,i){return new jxg.A.Transformation(t,i.type,e)},jxg.A.registerElement("transform",jxg.A.createTransform);var transformation=jxg.A.Transformation;jxg.A.Turtle=function(t,e,i){var s,r,o;return this.constructor(t,i,constants.A.OBJECT_TYPE_TURTLE,constants.A.OBJECT_CLASS_OTHER),this.turtleIsHidden=!1,this.board=t,this.visProp.curveType="plot",this._attributes=utils_type.A.copyAttributes(this.visProp,t.options,"turtle"),delete this._attributes.id,s=0,r=0,o=90,0!==e.length&&(3===e.length?(s=e[0],r=e[1],o=e[2]):2===e.length?utils_type.A.isArray(e[0])?(s=e[0][0],r=e[0][1],o=e[1]):(s=e[0],r=e[1]):(s=e[0][0],r=e[0][1])),this.init(s,r,o),this.methodMap=utils_type.A.deepCopy(this.methodMap,{forward:"forward",fd:"forward",back:"back",bk:"back",right:"right",rt:"right",left:"left",lt:"left",penUp:"penUp",pu:"penUp",up:"penUp",penDown:"penDown",pd:"penDown",down:"penDown",clearScreen:"clearScreen",cs:"clearScreen",clean:"clean",setPos:"setPos",home:"home",hideTurtle:"hideTurtle",ht:"hideTurtle",hide:"hideTurtle",showTurtle:"showTurtle",st:"showTurtle",show:"showTurtle",penSize:"setPenSize",setPenSize:"setPenSize",penColor:"setPenColor",setPenColor:"setPenColor",highlightPenColor:"setHighlightPenColor",setHighlightPenColor:"setHighlightPenColor",getPenColor:"getPenColor",Color:"getPenColor",getHighlightPenColor:"getHighlightPenColor",HighlightColor:"getHighlightPenColor",getPenSize:"getPenSize",Size:"getPenSize",pushTurtle:"pushTurtle",push:"pushTurtle",popTurtle:"popTurtle",pop:"popTurtle",lookTo:"lookTo",pos:"pos",Pos:"pos",moveTo:"moveTo",X:"X",Y:"Y"}),this},jxg.A.Turtle.prototype=new base_element.A,jxg.A.extend(jxg.A.Turtle.prototype,{init:function(t,e,i){var s={fixed:!0,name:"",visible:!1,withLabel:!1};this.arrowLen=20/math.A.hypot(this.board.unitX,this.board.unitY),this.pos=[t,e],this.isPenDown=!0,this.dir=90,this.stack=[],this.objects=[],this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes),this.objects.push(this.curve),this.turtle=this.board.create("point",this.pos,s),this.objects.push(this.turtle),this.turtle2=this.board.create("point",[this.pos[0],this.pos[1]+this.arrowLen],s),this.objects.push(this.turtle2),this.visProp.arrow.lastArrow=!0,this.visProp.arrow.straightFirst=!1,this.visProp.arrow.straightLast=!1,this.arrow=this.board.create("line",[this.turtle,this.turtle2],this.visProp.arrow),this.objects.push(this.arrow),this.subs={arrow:this.arrow},this.inherits.push(this.arrow),this.right(90-i),this.board.update()},forward:function(t){if(0===t)return this;var e,i=t*Math.cos(this.dir*Math.PI/180),s=t*Math.sin(this.dir*Math.PI/180);return this.turtleIsHidden||((e=this.board.create("transform",[i,s],{type:"translate"})).applyOnce(this.turtle),e.applyOnce(this.turtle2)),this.isPenDown&&this.curve.dataX.length>=8192&&(this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes),this.objects.push(this.curve)),this.pos[0]+=i,this.pos[1]+=s,this.isPenDown&&(this.curve.dataX.push(this.pos[0]),this.curve.dataY.push(this.pos[1])),this.board.update(),this},back:function(t){return this.forward(-t)},right:function(t){(this.dir-=t,this.dir%=360,this.turtleIsHidden)||this.board.create("transform",[-t*Math.PI/180,this.turtle],{type:"rotate"}).applyOnce(this.turtle2);return this.board.update(),this},left:function(t){return this.right(-t)},penUp:function(){return this.isPenDown=!1,this},penDown:function(){return this.isPenDown=!0,this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes),this.objects.push(this.curve),this},clean:function(){var t,e;for(t=0;t<this.objects.length;t++)(e=this.objects[t]).type===constants.A.OBJECT_TYPE_CURVE&&(this.board.removeObject(e),this.objects.splice(t,1));return this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes),this.objects.push(this.curve),this.board.update(),this},clearScreen:function(){var t,e,i=this.objects.length;for(t=0;t<i;t++)e=this.objects[t],this.board.removeObject(e);return this.init(0,0,90),this},setPos:function(t,e){return utils_type.A.isArray(t)?this.pos=t:this.pos=[t,e],this.turtleIsHidden||(this.turtle.setPositionDirectly(constants.A.COORDS_BY_USER,[t,e]),this.turtle2.setPositionDirectly(constants.A.COORDS_BY_USER,[t,e+this.arrowLen]),this.board.create("transform",[-(this.dir-90)*Math.PI/180,this.turtle],{type:"rotate"}).applyOnce(this.turtle2)),this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes),this.objects.push(this.curve),this.board.update(),this},setPenSize:function(t){return this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this.copyAttr("strokeWidth",t)),this.objects.push(this.curve),this},setPenColor:function(t){return this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this.copyAttr("strokeColor",t)),this.objects.push(this.curve),this},getPenAttribute:function(t){var e,i=this.objects.length;return e=4===i?0:i-1,utils_type.A.evaluate(this.objects[e].visProp[t])},getPenSize:function(){return this.getPenAttribute("strokewidth")},getPenColor:function(){return this.getPenAttribute("strokecolor")},getHighlightPenColor:function(){return this.getPenAttribute("highlightstrokecolor")},setHighlightPenColor:function(t){return this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this.copyAttr("highlightStrokeColor",t)),this.objects.push(this.curve),this},setAttribute:function(t){var e,i,s,r=this.objects.length;for(e=0;e<r;e++)(i=this.objects[e]).type===constants.A.OBJECT_TYPE_CURVE&&i.setAttribute(t);return s=this.visProp.id,this.visProp=utils_type.A.deepCopy(this.curve.visProp),this.visProp.id=s,this._attributes=utils_type.A.deepCopy(this.visProp),delete this._attributes.id,this},copyAttr:function(t,e){return this._attributes[t.toLowerCase()]=e,this._attributes},showTurtle:function(){return this.turtleIsHidden=!1,this.arrow.setAttribute({visible:!0}),this.visProp.arrow.visible=!1,this.setPos(this.pos[0],this.pos[1]),this.board.update(),this},hideTurtle:function(){return this.turtleIsHidden=!0,this.arrow.setAttribute({visible:!1}),this.visProp.arrow.visible=!1,this.board.update(),this},home:function(){return this.pos=[0,0],this.setPos(this.pos[0],this.pos[1]),this},pushTurtle:function(){return this.stack.push([this.pos[0],this.pos[1],this.dir]),this},popTurtle:function(){var t=this.stack.pop();return this.pos[0]=t[0],this.pos[1]=t[1],this.dir=t[2],this.setPos(this.pos[0],this.pos[1]),this},lookTo:function(t){var e,i,s,r,o;return utils_type.A.isArray(t)?(e=this.pos[0],i=this.pos[1],s=t[0],r=t[1],o=Math.atan2(r-i,s-e),this.right(this.dir-180*o/Math.PI)):utils_type.A.isNumber(t)&&this.right(this.dir-t),this},moveTo:function(t){var e,i,s;return utils_type.A.isArray(t)&&(e=t[0]-this.pos[0],i=t[1]-this.pos[1],this.turtleIsHidden||((s=this.board.create("transform",[e,i],{type:"translate"})).applyOnce(this.turtle),s.applyOnce(this.turtle2)),this.isPenDown&&this.curve.dataX.length>=8192&&(this.curve=this.board.create("curve",[[this.pos[0]],[this.pos[1]]],this._attributes),this.objects.push(this.curve)),this.pos[0]=t[0],this.pos[1]=t[1],this.isPenDown&&(this.curve.dataX.push(this.pos[0]),this.curve.dataY.push(this.pos[1])),this.board.update()),this},fd:function(t){return this.forward(t)},bk:function(t){return this.back(t)},lt:function(t){return this.left(t)},rt:function(t){return this.right(t)},pu:function(){return this.penUp()},pd:function(){return this.penDown()},ht:function(){return this.hideTurtle()},st:function(){return this.showTurtle()},cs:function(){return this.clearScreen()},push:function(){return this.pushTurtle()},pop:function(){return this.popTurtle()},evalAt:function(t,e){var i,s,r,o,n=this.objects.length;for(i=0,s=0;i<n;i++)if((r=this.objects[i]).elementClass===constants.A.OBJECT_CLASS_CURVE){if(s<=t&&t<s+r.numberPoints)return o=t-s,r[e](o);s+=r.numberPoints}return this[e]()},X:function(t){return utils_type.A.exists(t)?this.evalAt(t,"X"):this.pos[0]},Y:function(t){return utils_type.A.exists(t)?this.evalAt(t,"Y"):this.pos[1]},Z:function(t){return 1},minX:function(){return 0},maxX:function(){var t,e=this.objects.length,i=0;for(t=0;t<e;t++)this.objects[t].elementClass===constants.A.OBJECT_CLASS_CURVE&&(i+=this.objects[t].numberPoints);return i},hasPoint:function(t,e){var i,s;for(i=0;i<this.objects.length;i++)if((s=this.objects[i]).type===constants.A.OBJECT_TYPE_CURVE&&s.hasPoint(t,e))return!0;return!1}}),jxg.A.createTurtle=function(t,e,i){var s;return e=e||[],s=utils_type.A.copyAttributes(i,t.options,"turtle"),new jxg.A.Turtle(t,e,s)},jxg.A.registerElement("turtle",jxg.A.createTurtle);var turtle=jxg.A.Turtle;jxg.A.Ticks=function(t,e,i){if(this.constructor(t.board,i,constants.A.OBJECT_TYPE_TICKS,constants.A.OBJECT_CLASS_OTHER),this.line=t,this.board=this.line.board,this.fixedTicks=null,this.equidistant=!1,this.labelsData=[],utils_type.A.isFunction(e))throw this.ticksFunction=e,new Error("Function arguments are no longer supported.");utils_type.A.isArray(e)?this.fixedTicks=e:this.equidistant=!0,this.ticks=[],this.labels=[],this.labelCounter=0,this.id=this.line.addTicks(this),this.elType="ticks",this.inherits.push(this.labels),this.board.setId(this,"Ti")},jxg.A.Ticks.prototype=new base_element.A,jxg.A.extend(jxg.A.Ticks.prototype,{hasPoint:function(t,e){var i,s,r,o,n=this.ticks&&this.ticks.length||0;if(utils_type.A.isObject(utils_type.A.evaluate(this.visProp.precision))?(o=this.board._inputDevice,r=utils_type.A.evaluate(this.visProp.precision[o])):r=this.board.options.precision.hasPoint,r+=.5*utils_type.A.evaluate(this.visProp.strokewidth),!utils_type.A.evaluate(this.line.visProp.scalable)||this.line.elementClass===constants.A.OBJECT_CLASS_CURVE)return!1;if(0!==this.line.stdform[1]&&0!==this.line.stdform[2]&&this.line.type!==constants.A.OBJECT_TYPE_AXIS)return!1;for(i=0;i<n;i++)if((s=this.ticks[i])[2]&&!(0===this.line.stdform[1]&&Math.abs(s[0][0]-this.line.point1.coords.scrCoords[1])<math.A.eps||0===this.line.stdform[2]&&Math.abs(s[1][0]-this.line.point1.coords.scrCoords[2])<math.A.eps)&&(Math.abs(s[0][0]-s[0][1])>=1||Math.abs(s[1][0]-s[1][1])>=1))if(0===this.line.stdform[1]){if(Math.abs(e-this.line.point1.coords.scrCoords[2])<2*r&&s[0][0]-r<t&&t<s[0][1]+r)return!0}else if(0===this.line.stdform[2]&&Math.abs(t-this.line.point1.coords.scrCoords[1])<2*r&&s[1][0]-r<e&&e<s[1][1]+r)return!0;return!1},setPositionDirectly:function(t,e,i){var s,r,o=new base_coords.A(t,e,this.board),n=new base_coords.A(t,i,this.board),a=this.board.getBoundingBox();return this.line.type===constants.A.OBJECT_TYPE_AXIS&&utils_type.A.evaluate(this.line.visProp.scalable)?(Math.abs(this.line.stdform[1])<math.A.eps&&Math.abs(o.usrCoords[1]*n.usrCoords[1])>math.A.eps?(s=n.usrCoords[1]/o.usrCoords[1],a[0]*=s,a[2]*=s,this.board.setBoundingBox(a,this.board.keepaspectratio,"update")):Math.abs(this.line.stdform[2])<math.A.eps&&Math.abs(o.usrCoords[2]*n.usrCoords[2])>math.A.eps&&(r=n.usrCoords[2]/o.usrCoords[2],a[3]*=r,a[1]*=r,this.board.setBoundingBox(a,this.board.keepaspectratio,"update")),this):this},calculateTicksCoordinates:function(){var t,e,i,s;if(!(this.line.elementClass===constants.A.OBJECT_CLASS_LINE&&(this.setTicksSizeVariables(),Math.abs(this.dx)<math.A.eps&&Math.abs(this.dy)<math.A.eps)))return t=this.getZeroCoordinates(),e=this.line.elementClass===constants.A.OBJECT_CLASS_LINE?this.getLowerAndUpperBounds(t,"ticksdistance"):{lower:this.line.minX(),upper:this.line.maxX(),a1:0,a2:0,m1:0,m2:0},"polar"===utils_type.A.evaluate(this.visProp.type)&&(s=this.board.getBoundingBox(),i=Math.max(math.A.hypot(s[0],s[1]),math.A.hypot(s[2],s[3])),e.upper=i),this.ticks=[],this.labelsData=[],this.equidistant?this.generateEquidistantTicks(t,e):this.generateFixedTicks(t,e),this},setTicksSizeVariables:function(t){var e,i,s,r,o=.5*utils_type.A.evaluate(this.visProp.majorheight),n=.5*utils_type.A.evaluate(this.visProp.minorheight);utils_type.A.exists(t)?(i=this.line.minX(),s=this.line.maxX(),(r=this.line.points.length)<2?(this.dxMaj=0,this.dyMaj=0):math.A.relDif(t,i)<math.A.eps?(this.dxMaj=this.line.points[0].usrCoords[2]-this.line.points[1].usrCoords[2],this.dyMaj=this.line.points[1].usrCoords[1]-this.line.points[0].usrCoords[1]):math.A.relDif(t,s)<math.A.eps?(this.dxMaj=this.line.points[r-2].usrCoords[2]-this.line.points[r-1].usrCoords[2],this.dyMaj=this.line.points[r-1].usrCoords[1]-this.line.points[r-2].usrCoords[1]):(this.dxMaj=-numerics.A.D(this.line.Y)(t),this.dyMaj=numerics.A.D(this.line.X)(t))):(this.dxMaj=this.line.stdform[1],this.dyMaj=this.line.stdform[2]),this.dxMin=this.dxMaj,this.dyMin=this.dyMaj,this.dx=this.dxMaj,this.dy=this.dyMaj,e=math.A.hypot(this.dxMaj*this.board.unitX,this.dyMaj*this.board.unitY),this.dxMaj*=o/e*this.board.unitX,this.dyMaj*=o/e*this.board.unitY,this.dxMin*=n/e*this.board.unitX,this.dyMin*=n/e*this.board.unitY,this.minStyle=utils_type.A.evaluate(this.visProp.minorheight)<0?"infinite":"finite",this.majStyle=utils_type.A.evaluate(this.visProp.majorheight)<0?"infinite":"finite"},getZeroCoordinates:function(){var t,e,i,s,r,o,n,a,l=utils_type.A.evaluate(this.visProp.anchor);return this.line.elementClass===constants.A.OBJECT_CLASS_LINE?this.line.type===constants.A.OBJECT_TYPE_AXIS?geometry.A.projectPointToLine({coords:{usrCoords:[1,0,0]}},this.line,this.board):(i=this.line.point1.coords.usrCoords[0],t=this.line.point1.coords.usrCoords[1],e=this.line.point1.coords.usrCoords[2],o=this.line.point2.coords.usrCoords[0],s=this.line.point2.coords.usrCoords[1],r=this.line.point2.coords.usrCoords[2],"right"===l?this.line.point2.coords:"middle"===l?new base_coords.A(constants.A.COORDS_BY_USER,[.5*(i+o),.5*(t+s),.5*(e+r)],this.board):utils_type.A.isNumber(l)?new base_coords.A(constants.A.COORDS_BY_USER,[i+(o-i)*l,t+(s-t)*l,e+(r-e)*l],this.board):this.line.point1.coords):(n=this.line.minX(),a=this.line.maxX(),"right"===l?a:"middle"===l?.5*(n+a):utils_type.A.isNumber(l)?n*(1-l)+a*l:n)},getLowerAndUpperBounds:function(t,e){var i,s,r,o,n,a,l,h,u,c,d,p,_,f,A,g=10*math.A.eps,m=utils_type.A.evaluate(this.line.visProp.straightfirst),y=utils_type.A.evaluate(this.line.visProp.straightlast),b=utils_type.A.evaluate(this.visProp.includeboundaries);return this.line.elementClass===constants.A.OBJECT_CLASS_CURVE?{lower:this.line.minX(),upper:this.line.maxX()}:(n=new base_coords.A(constants.A.COORDS_BY_USER,this.line.point1.coords.usrCoords,this.board),a=new base_coords.A(constants.A.COORDS_BY_USER,this.line.point2.coords.usrCoords,this.board),l=Math.abs(n.usrCoords[0])>=math.A.eps&&n.scrCoords[1]>=0&&n.scrCoords[1]<=this.board.canvasWidth&&n.scrCoords[2]>=0&&n.scrCoords[2]<=this.board.canvasHeight,h=Math.abs(a.usrCoords[0])>=math.A.eps&&a.scrCoords[1]>=0&&a.scrCoords[1]<=this.board.canvasWidth&&a.scrCoords[2]>=0&&a.scrCoords[2]<=this.board.canvasHeight,utils_type.A.exists(e)&&"ticksdistance"===e?(geometry.A.calcStraight(this.line,n,a,0),f=this.getDistanceFromZero(t,n),A=this.getDistanceFromZero(t,a),geometry.A.calcStraight(this.line,n,a,utils_type.A.evaluate(this.line.visProp.margin)),f=this.getDistanceFromZero(t,n)-f,A=this.getDistanceFromZero(t,a).m2):geometry.A.calcLineDelimitingPoints(this.line,n,a),r=utils_type.A.evaluate(this.line.visProp.firstarrow),o=utils_type.A.evaluate(this.line.visProp.lastarrow),p=this.getDistanceFromZero(t,n),_=this.getDistanceFromZero(t,a),(r||o)&&(d=this.board.renderer.getArrowHeadData(this.line,utils_type.A.evaluate(this.line.visProp.strokewidth),""),this.board.renderer.getPositionArrowHead(this.line,n,a,d)),(u=this.getDistanceFromZero(t,n))<(c=this.getDistanceFromZero(t,a))?(i=u,s=c,m||!l||b||(i+=g),y||!h||b||(s-=g)):c<u?(i=c,s=u,y||!h||b||(i+=g),m||!l||b||(s-=g)):(i=0,s=0),{lower:i,upper:s,a1:p=u-p,a2:_=u-_,m1:f,m2:A})},getDistanceFromZero:function(t,e){var i,s,r,o,n;return i=this.line.point1.coords,s=this.line.point2.coords,n=t.distance(constants.A.COORDS_BY_USER,e),r=[s.usrCoords[0]-i.usrCoords[0],s.usrCoords[1]-i.usrCoords[1],s.usrCoords[2]-i.usrCoords[2]],o=[e.usrCoords[0]-t.usrCoords[0],e.usrCoords[1]-t.usrCoords[1],e.usrCoords[2]-t.usrCoords[2]],math.A.innerProduct(r,o,3)<0&&(n*=-1),n},generateEquidistantTicks:function(t,e){var i,s,r,o=math.A.eps,n=utils_type.A.evaluate(this.visProp.minorticks);if(r=this.getDistanceMajorTicks(),this.line.elementClass===constants.A.OBJECT_CLASS_LINE&&(s=this.getXandYdeltas()),r*=utils_type.A.evaluate(this.visProp.scale),r/=n+1,this.ticksDelta=r,!(r<math.A.eps)){for(i=0,utils_type.A.evaluate(this.visProp.drawzero)||(i=r);i<=e.upper+o&&(i>=e.lower-o&&this.processTickPosition(t,i,r,s),i+=r,!(e.upper-i>1e4*r)););for(i=-r;i>=e.lower-o&&(i<=e.upper+o&&this.processTickPosition(t,i,r,s),!((i-=r)-e.lower>1e4*r)););}},getDistanceMajorTicks:function(){var t,e,i,s,r,o,n,a;return utils_type.A.evaluate(this.visProp.insertticks)?(o=((i=this.getLowerAndUpperBounds(this.getZeroCoordinates(),"")).upper-i.lower)/6/(r=utils_type.A.evaluate(this.visProp.scale)),n=utils_type.A.evaluate(this.visProp.minticksdistance)/r,a=utils_type.A.evaluate(this.visProp.minorticks),(s=this.getXandYdeltas()).x*=this.board.unitX,s.y*=this.board.unitY,n/=math.A.hypot(s.x,s.y),n*=a+1,2*(t=Math.pow(10,Math.floor(Math.log(n)/Math.LN10)))>=n?t*=2:5*t>=n&&(t*=5),5*(e=Math.pow(10,Math.floor(Math.log(o)/Math.LN10)))<o?e*=5:2*e<o&&(e*=2),t=Math.max(t,e)):utils_type.A.evaluate(this.visProp.ticksdistance)},processTickPosition:function(t,e,i,s){var r,o,n,a,l,h=utils_type.A.evaluate(this.visProp.ticksperlabel),u=null;this.line.elementClass===constants.A.OBJECT_CLASS_LINE?(r=t.usrCoords[1]+e*s.x,o=t.usrCoords[2]+e*s.y):(r=this.line.X(t+e),o=this.line.Y(t+e)),n=new base_coords.A(constants.A.COORDS_BY_USER,[r,o],this.board),this.line.elementClass===constants.A.OBJECT_CLASS_CURVE&&(u=t+e,this.setTicksSizeVariables(u)),n.major=Math.round(e/i)%(utils_type.A.evaluate(this.visProp.minorticks)+1)==0,h||(h=utils_type.A.evaluate(this.visProp.minorticks)+1),l=Math.round(e/i)%h==0,3===(a=this.createTickPath(n,n.major)).length&&(this.ticks.push(a),l&&utils_type.A.evaluate(this.visProp.drawlabels)?this.labelsData.push(this.generateLabelData(this.generateLabelText(n,t,u),n,this.ticks.length)):this.labelsData.push(null))},generateFixedTicks:function(t,e){var i,s,r,o,n,a,l,h,u=math.A.eps,c=utils_type.A.isArray(this.visProp.labels),d=utils_type.A.evaluate(this.visProp.drawlabels);for(this.line.elementClass===constants.A.OBJECT_CLASS_LINE&&(h=this.getXandYdeltas()),r=0;r<this.fixedTicks.length;r++)this.line.elementClass===constants.A.OBJECT_CLASS_LINE?(l=this.fixedTicks[r],n=t.usrCoords[1]+l*h.x,a=t.usrCoords[2]+l*h.y):(l=t+this.fixedTicks[r],n=this.line.X(l),a=this.line.Y(l)),i=new base_coords.A(constants.A.COORDS_BY_USER,[n,a],this.board),this.line.elementClass===constants.A.OBJECT_CLASS_CURVE&&this.setTicksSizeVariables(l),3===(o=this.createTickPath(i,!0)).length&&l>=e.lower-u&&l<=e.upper+u&&(this.ticks.push(o),d&&(c||utils_type.A.exists(this.visProp.labels[r]))?(s=c?utils_type.A.evaluate(this.visProp.labels[r]):l,this.labelsData.push(this.generateLabelData(this.generateLabelText(i,t,s),i,r))):this.labelsData.push(null))},getXandYdeltas:function(){var t,e,i=this.line.point1.Dist(this.line.point2);return t=this.line.point1.coords.usrCoords,{x:((e=this.line.point2.coords.usrCoords)[1]-t[1])/i,y:(e[2]-t[2])/i}},_isInsideCanvas:function(t,e,i){var s=this.board.canvasWidth,r=this.board.canvasHeight;return void 0===i&&(i=0),t[0]>=i&&t[0]<=s-i&&e[0]>=i&&e[0]<=r-i||t[1]>=i&&t[1]<=s-i&&e[1]>=i&&e[1]<=r-i},createTickPath:function(t,e){var i,s,r,o,n,a,l,h,u,c,d,p,_,f,A,g,m,y=[-2e6,-2e6],b=[-2e6,-2e6];if(i=t.scrCoords,e?(o=this.dxMaj,n=this.dyMaj,u=this.majStyle,A=utils_type.A.evaluate(this.visProp.majortickendings[0])>0,g=utils_type.A.evaluate(this.visProp.majortickendings[1])>0):(o=this.dxMin,n=this.dyMin,u=this.minStyle,A=utils_type.A.evaluate(this.visProp.tickendings[0])>0,g=utils_type.A.evaluate(this.visProp.tickendings[1])>0),s=[-n*i[1]-o*i[2],n,o],e&&"polar"===utils_type.A.evaluate(this.visProp.type)){if(p=this.board.getBoundingBox(),f=(_=2*Math.PI)/180,i=t.usrCoords,(d=math.A.hypot(i[1],i[2]))<Math.max(math.A.hypot(p[0],p[1]),math.A.hypot(p[2],p[3]))){for(y=[],b=[],c=0;c<=_;c+=f)y.push(this.board.origin.scrCoords[1]+d*Math.cos(c)*this.board.unitX),b.push(this.board.origin.scrCoords[2]+d*Math.sin(c)*this.board.unitY);return[y,b,e]}}else{if("infinite"===u){if(utils_type.A.evaluate(this.visProp.ignoreinfinitetickendings)&&(A=g=!0),r=geometry.A.meetLineBoard(s,this.board),A&&g)y[0]=r[0].scrCoords[1],y[1]=r[1].scrCoords[1],b[0]=r[0].scrCoords[2],b[1]=r[1].scrCoords[2];else if((m=[math.A.innerProduct(r[0].usrCoords.slice(1,3),this.line.stdform.slice(1,3))+this.line.stdform[0],math.A.innerProduct(r[1].usrCoords.slice(1,3),this.line.stdform.slice(1,3))+this.line.stdform[0]])[0]<m[1]&&(r.reverse(),m.reverse()),A){if(m[0]<0)return[];m[1]<0?(y[0]=r[0].scrCoords[1],b[0]=r[0].scrCoords[2],y[1]=i[1],b[1]=i[2]):(y[0]=r[0].scrCoords[1],b[0]=r[0].scrCoords[2],y[1]=r[1].scrCoords[1],b[1]=r[1].scrCoords[2])}else if(g){if(m[1]>0)return[];m[0]>0?(y[0]=i[1],b[0]=i[2],y[1]=r[1].scrCoords[1],b[1]=r[1].scrCoords[2]):(y[0]=r[0].scrCoords[1],b[0]=r[0].scrCoords[2],y[1]=r[1].scrCoords[1],b[1]=r[1].scrCoords[2])}}else h=">"===utils_type.A.evaluate(this.visProp.face)?Math.PI/4:"<"===utils_type.A.evaluate(this.visProp.face)?-Math.PI/4:0,a=Math.cos(h)*o-Math.sin(h)*n,l=Math.sin(h)*o+Math.cos(h)*n,y[0]=i[1]+a*A,b[0]=i[2]-l*A,y[1]=i[1],b[1]=i[2],h=-h,a=Math.cos(h)*o-Math.sin(h)*n,l=Math.sin(h)*o+Math.cos(h)*n,y[2]=i[1]-a*g,b[2]=i[2]+l*g;if(this._isInsideCanvas(y,b))return[y,b,e]}return[]},formatLabelText:function(t){var e,i,s=utils_type.A.evaluate(this.visProp.label.usemathjax),r=utils_type.A.evaluate(this.visProp.label.usekatex),o=utils_type.A.evaluate(this.visProp.scalesymbol);return utils_type.A.isNumber(t)?(utils_type.A.evaluate(this.visProp.label.tofraction)?e=s?"\\("+utils_type.A.toFraction(t,!0)+"\\)":utils_type.A.toFraction(t,r):(i=utils_type.A.evaluate(this.visProp.digits),this.useLocale()?e=this.formatNumberLocale(t,i):((e=(Math.round(1e11*t)/1e11).toString()).length>utils_type.A.evaluate(this.visProp.maxlabellength)||-1!==e.indexOf("e"))&&(3!==utils_type.A.evaluate(this.visProp.precision)&&3===i&&(i=utils_type.A.evaluate(this.visProp.precision)),e=t.toExponential(i).toString())),utils_type.A.evaluate(this.visProp.beautifulscientificticklabels)&&(e=this.beautifyScientificNotationLabel(e)),e.indexOf(".")>-1&&-1===e.indexOf("e")&&(e=(e=e.replace(/0+$/,"")).replace(/\.$/,""))):e=t.toString(),o.length>0&&("1"===e?e=o:"-1"===e?e="-"+o:"0"!==e&&(e+=o)),utils_type.A.evaluate(this.visProp.useunicodeminus)&&(e=e.replace(/-/g,"−")),e},beautifyScientificNotationLabel:function(t){return-1===t.indexOf("e")?t:(parseFloat(t.substring(0,t.indexOf("e")))+t.substring(t.indexOf("e"))).replace(/e(.*)$/g,(function(t,e){var i="•10";return i+=e.replace(/-/g,"⁻").replace(/\+/g,"").replace(/0/g,"⁰").replace(/1/g,"¹").replace(/2/g,"²").replace(/3/g,"³").replace(/4/g,"⁴").replace(/5/g,"⁵").replace(/6/g,"⁶").replace(/7/g,"⁷").replace(/8/g,"⁸").replace(/9/g,"⁹")}))},generateLabelText:function(t,e,i){var s;if(!utils_type.A.exists(i)){if(s=this.getDistanceFromZero(e,t),Math.abs(s)<math.A.eps)return"0";i=s/utils_type.A.evaluate(this.visProp.scale)}return this.formatLabelText(i)},generateLabelData:function(t,e,i){var s,r,o,n;return n=utils_type.A.evaluate(this.visProp.label.fontsize),s=[e.scrCoords[1],e.scrCoords[1]],r=[e.scrCoords[2],e.scrCoords[2]],o=void 0===n?12:n,o*=.5,this._isInsideCanvas(s,r,o)?(s=utils_type.A.evaluate(this.visProp.label.offset[0]),r=utils_type.A.evaluate(this.visProp.label.offset[1]),{x:e.usrCoords[1]+s/this.board.unitX,y:e.usrCoords[2]+r/this.board.unitY,t:t,i:i}):null},update:function(){return this.needsUpdate&&0!==this.board.canvasWidth&&0!==this.board.canvasHeight&&this.calculateTicksCoordinates(),this},updateRenderer:function(){return this.needsUpdate?(this.visPropCalc.visible&&this.board.renderer.updateTicks(this),this.updateRendererLabels(),this.setDisplayRendNode(),this.needsUpdate=!1,this):this},updateRendererLabels:function(){var t,e,i,s,r,o,n,a;for(i=this.labelsData.length,s=this.labels.length,t=0,e=0;t<i;t++)null!==this.labelsData[t]&&(n=this.labelsData[t],e<s?((o=this.labels[e]).setText(n.t),o.setCoords(n.x,n.y),e++):(this.labelCounter+=1,r={isLabel:!0,layer:this.board.options.layer.line,highlightStrokeColor:this.board.options.text.strokeColor,highlightStrokeWidth:this.board.options.text.strokeWidth,highlightStrokeOpacity:this.board.options.text.strokeOpacity,priv:this.visProp.priv},(r=utils_type.A.deepCopy(r,this.visProp.label)).id=this.id+n.i+"Label"+this.labelCounter,o=jxg.A.createText(this.board,[n.x,n.y,n.t],r),this.addChild(o),o.setParents(this),o.isDraggable=!1,o.dump=!1,this.labels.push(o)),"inherit"===(a=utils_type.A.evaluate(this.visProp.label.visible))&&(a=this.visPropCalc.visible),o.prepareUpdate().updateVisibility(a).updateRenderer(),o.distanceX=utils_type.A.evaluate(this.visProp.label.offset[0]),o.distanceY=utils_type.A.evaluate(this.visProp.label.offset[1]));for(e=i=e;e<s;e++)this.board.renderer.display(this.labels[e],!1),this.labels[e].visProp.visible=this.labels[e].visPropCalc.visible=!1;return this},hideElement:function(){var t;for(jxg.A.deprecated("Element.hideElement()","Element.setDisplayRendNode()"),this.visPropCalc.visible=!1,this.board.renderer.display(this,!1),t=0;t<this.labels.length;t++)utils_type.A.exists(this.labels[t])&&this.labels[t].hideElement();return this},showElement:function(){var t;for(jxg.A.deprecated("Element.showElement()","Element.setDisplayRendNode()"),this.visPropCalc.visible=!0,this.board.renderer.display(this,!1),t=0;t<this.labels.length;t++)utils_type.A.exists(this.labels[t])&&this.labels[t].showElement();return this}}),jxg.A.createTicks=function(t,e,i){var s,r,o=utils_type.A.copyAttributes(i,t.options,"ticks");if(r=e.length<2?o.ticksdistance:e[1],e[0].elementClass!==constants.A.OBJECT_CLASS_LINE&&e[0].elementClass!==constants.A.OBJECT_CLASS_CURVE)throw new Error("JSXGraph: Can't create Ticks with parent types '"+typeof e[0]+"'.");return s=new jxg.A.Ticks(e[0],r,o),utils_type.A.isFunction(o.generatelabelvalue)&&(s.generateLabelText=o.generatelabelvalue),utils_type.A.isFunction(o.generatelabeltext)&&(s.generateLabelText=o.generatelabeltext),s.setParents(e[0]),s.isDraggable=!0,s.fullUpdate(e[0].visPropCalc.visible),s},jxg.A.createHatchmark=function(t,e,i){var s,r,o,n,a,l=[],h=utils_type.A.copyAttributes(i,t.options,"hatch");if(e[0].elementClass!==constants.A.OBJECT_CLASS_LINE&&e[0].elementClass!==constants.A.OBJECT_CLASS_CURVE||"number"!=typeof e[1])throw new Error("JSXGraph: Can't create Hatch mark with parent types '"+typeof e[0]+"' and '"+typeof e[1]+" and ''"+typeof e[2]+"'.");for(o=.5*-(((s=e[1])-1)*(n=h.ticksdistance)),r=0;r<s;r++)l[r]=o+r*n;return(a=t.create("ticks",[e[0],l],h)).elType="hatch",e[0].inherits.push(a),a},jxg.A.registerElement("ticks",jxg.A.createTicks),jxg.A.registerElement("hash",jxg.A.createHatchmark),jxg.A.registerElement("hatch",jxg.A.createHatchmark);var ticks=jxg.A.Ticks;jxg.A.CA=function(t,e,i){this.node=t,this.createNode=e,this.parser=i},jxg.A.extend(jxg.A.CA.prototype,{findMapNode:function(t,e){var i,s,r;if("op_assign"===e.value&&e.children[0].value===t)return e.children[1];if(e.children)for(s=e.children.length,i=0;i<s;++i)if(null!==(r=this.findMapNode(t,e.children[i])))return r;return null},setMath:function(t){var e,i;if(("node_op"!=t.type||"op_add"!=t.value&&"op_sub"!=t.value&&"op_mul"!=t.value&&"op_div"!=t.value&&"op_neg"!=t.value&&"op_execfun"!=t.value&&"op_exp"!=t.value)&&"node_var"!=t.type&&"node_const"!=t.type||(t.isMath=!0),t.children)for(i=t.children.length,e=0;e<i;++e)this.setMath(t.children[e])},deriveElementary:function(t,e){var i,s=t.children[0].value,r=t.children[1];switch(s){case"abs":i=this.createNode("node_op","op_div",r[0],this.createNode("node_op","op_execfun",this.createNode("node_var","sqrt"),[this.createNode("node_op","op_mul",utils_type.A.deepCopy(r[0]),utils_type.A.deepCopy(r[0]))]));break;case"sqrt":i=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_mul",this.createNode("node_const",2),this.createNode(t.type,t.value,utils_type.A.deepCopy(t.children[0]),utils_type.A.deepCopy(t.children[1]))));break;case"sin":i=this.createNode("node_op","op_execfun",this.createNode("node_var","cos"),utils_type.A.deepCopy(r));break;case"cos":i=this.createNode("node_op","op_neg",this.createNode("node_op","op_execfun",this.createNode("node_var","sin"),utils_type.A.deepCopy(r)));break;case"tan":i=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_exp",this.createNode("node_op","op_execfun",this.createNode("node_var","cos"),utils_type.A.deepCopy(r)),this.createNode("node_const",2)));break;case"cot":i=this.createNode("node_op","op_neg",this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_exp",this.createNode("node_op","op_execfun",this.createNode("node_var","sin"),utils_type.A.deepCopy(r)),this.createNode("node_const",2))));break;case"exp":i=this.createNode(t.type,t.value,utils_type.A.deepCopy(t.children[0]),utils_type.A.deepCopy(t.children[1]));break;case"pow":i=this.createNode("node_op","op_mul",this.createNode("node_op","op_execfun",utils_type.A.deepCopy(t.children[0]),utils_type.A.deepCopy(t.children[1])),this.createNode("node_op","op_add",this.createNode("node_op","op_mul",this.derivative(t.children[1][0],e),this.createNode("node_op","op_div",utils_type.A.deepCopy(t.children[1][1]),utils_type.A.deepCopy(t.children[1][0]))),this.createNode("node_op","op_mul",this.derivative(t.children[1][1],e),this.createNode("node_op","op_execfun",this.createNode("node_var","log"),[utils_type.A.deepCopy(t.children[1][0])]))));break;case"log":case"ln":i=this.createNode("node_op","op_div",this.createNode("node_const",1),utils_type.A.deepCopy(r[0]));break;case"log2":case"lb":case"ld":i=this.createNode("node_op","op_mul",this.createNode("node_op","op_div",this.createNode("node_const",1),utils_type.A.deepCopy(r[0])),this.createNode("node_const",1.4426950408889634));break;case"log10":case"lg":i=this.createNode("node_op","op_mul",this.createNode("node_op","op_div",this.createNode("node_const",1),utils_type.A.deepCopy(r[0])),this.createNode("node_const",.43429448190325176));break;case"asin":i=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_execfun",this.createNode("node_var","sqrt"),[this.createNode("node_op","op_sub",this.createNode("node_const",1),this.createNode("node_op","op_mul",utils_type.A.deepCopy(r[0]),utils_type.A.deepCopy(r[0])))]));break;case"acos":i=this.createNode("node_op","op_neg",this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_execfun",this.createNode("node_var","sqrt"),[this.createNode("node_op","op_sub",this.createNode("node_const",1),this.createNode("node_op","op_mul",utils_type.A.deepCopy(r[0]),utils_type.A.deepCopy(r[0])))])));break;case"atan":i=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_add",this.createNode("node_const",1),this.createNode("node_op","op_mul",utils_type.A.deepCopy(r[0]),utils_type.A.deepCopy(r[0]))));break;case"acot":i=this.createNode("node_op","op_neg",this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_add",this.createNode("node_const",1),this.createNode("node_op","op_mul",utils_type.A.deepCopy(r[0]),utils_type.A.deepCopy(r[0])))));break;case"sinh":i=this.createNode("node_op","op_execfun",this.createNode("node_var","cosh"),[utils_type.A.deepCopy(r[0])]);break;case"cosh":i=this.createNode("node_op","op_execfun",this.createNode("node_var","sinh"),[utils_type.A.deepCopy(r[0])]);break;case"tanh":i=this.createNode("node_op","op_sub",this.createNode("node_const",1),this.createNode("node_op","op_exp",this.createNode("node_op","op_execfun",this.createNode("node_var","tanh"),[utils_type.A.deepCopy(r[0])]),this.createNode("node_const",2)));break;case"asinh":i=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_execfun",this.createNode("node_var","sqrt"),[this.createNode("node_op","op_add",this.createNode("node_op","op_mul",utils_type.A.deepCopy(r[0]),utils_type.A.deepCopy(r[0])),this.createNode("node_const",1))]));break;case"acosh":i=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_execfun",this.createNode("node_var","sqrt"),[this.createNode("node_op","op_sub",this.createNode("node_op","op_mul",utils_type.A.deepCopy(r[0]),utils_type.A.deepCopy(r[0])),this.createNode("node_const",1))]));break;case"atanh":i=this.createNode("node_op","op_div",this.createNode("node_const",1),this.createNode("node_op","op_sub",this.createNode("node_const",1),this.createNode("node_op","op_mul",utils_type.A.deepCopy(r[0]),utils_type.A.deepCopy(r[0]))));break;default:throw i=this.createNode("node_const",0),console.log('Derivative of "'+s+'" not yet implemented'),new Error("Error("+this.line+"): ")}return i},derivative:function(t,e){var i;switch(t.type){case"node_op":switch(t.value){case"op_execfun":i="pow"==t.children[0].value?this.deriveElementary(t,e):0===t.children[1].length?this.createNode("node_const",0):this.createNode("node_op","op_mul",this.deriveElementary(t,e),this.derivative(t.children[1][0],e));break;case"op_div":i=this.createNode("node_op","op_div",this.createNode("node_op","op_sub",this.createNode("node_op","op_mul",this.derivative(t.children[0],e),utils_type.A.deepCopy(t.children[1])),this.createNode("node_op","op_mul",utils_type.A.deepCopy(t.children[0]),this.derivative(t.children[1],e))),this.createNode("node_op","op_mul",utils_type.A.deepCopy(t.children[1]),utils_type.A.deepCopy(t.children[1])));break;case"op_mul":i=this.createNode("node_op","op_add",this.createNode("node_op","op_mul",utils_type.A.deepCopy(t.children[0]),this.derivative(t.children[1],e)),this.createNode("node_op","op_mul",this.derivative(t.children[0],e),utils_type.A.deepCopy(t.children[1])));break;case"op_neg":i=this.createNode("node_op","op_neg",this.derivative(t.children[0],e));break;case"op_add":case"op_sub":i=this.createNode("node_op",t.value,this.derivative(t.children[0],e),this.derivative(t.children[1],e));break;case"op_exp":i=this.createNode("node_op","op_mul",utils_type.A.deepCopy(t),this.createNode("node_op","op_add",this.createNode("node_op","op_mul",this.derivative(t.children[0],e),this.createNode("node_op","op_div",utils_type.A.deepCopy(t.children[1]),utils_type.A.deepCopy(t.children[0]))),this.createNode("node_op","op_mul",this.derivative(t.children[1],e),this.createNode("node_op","op_execfun",this.createNode("node_var","log"),[utils_type.A.deepCopy(t.children[0])]))))}break;case"node_var":i=t.value===e?this.createNode("node_const",1):this.createNode("node_const",0);break;case"node_const":i=this.createNode("node_const",0)}return i},expandDerivatives:function(t,e,i){var s,r,o,n,a,l,h,u,c,d,p,_;if(!t)return 0;for(this.line=t.line,this.col=t.col,s=t.children.length,r=0;r<s;++r)if(t.children[r]&&t.children[r].type)t.children[r]=this.expandDerivatives(t.children[r],t,i);else if(utils_type.A.isArray(t.children[r]))for(o=0;o<t.children[r].length;++o)t.children[r][o]&&t.children[r][o].type&&(t.children[r][o]=this.expandDerivatives(t.children[r][o],t,i));if("node_op"===t.type)if("op_execfun"===t.value)if(t.children[0]&&"D"===t.children[0].value){if(_=!1,"node_var"==t.children[1][0].type&&(u=t.children[1][0].value,null!==(n=this.findMapNode(u,i))&&(_=!0)),_?(d=n.children[0],c=t.children[1].length>=2?t.children[1][1].value:n.children[0][0],a=n.children[1]):(a=t.children[1][0],d=["x"],c=t.children[1].length>=2?t.children[1][1].value:"x"),h=a,(p=t.children[1].length>=3?t.children[1][2].value:1)>=1)for(;p>=1;)h=this.derivative(h,c),h=this.removeTrivialNodes(h),p--;l="node_op"==e.type&&"op_assign"==e.value?this.createNode("node_op","op_map",d,h):h,this.setMath(l),t.type=l.type,t.value=l.value,l.children.length>0&&(t.children[0]=l.children[0]),l.children.length>1&&(t.children[1]=l.children[1])}return t},removeTrivialNodes:function(t){var e,i,s,r,o;if(utils_type.A.isArray(t))for(i=t.length,e=0;e<i;++e)t[e]=this.removeTrivialNodes(t[e]);if("node_op"!=t.type||!t.children)return t;for(i=t.children.length,e=0;e<i;++e){this.mayNotBeSimplified=!1;do{t.children[e]=this.removeTrivialNodes(t.children[e])}while(this.mayNotBeSimplified)}switch(t.value){case"op_map":if(s=t.children[0],"node_var"==(r=t.children[1]).type)for(e=0;e<s.length;++e)if(s[e]==r.value){r.isMath=!0;break}break;case"op_add":if(s=t.children[0],r=t.children[1],"node_const"==s.type&&0===s.value)return r;if("node_const"==r.type&&0===r.value)return s;if("node_const"==s.type&&"node_const"==r.type)return s.value+=r.value,s;break;case"op_mul":if(s=t.children[0],r=t.children[1],"node_const"==s.type&&1==s.value)return r;if("node_const"==r.type&&1==r.value)return s;if("node_const"==s.type&&0===s.value)return s;if("node_const"==r.type&&0===r.value)return r;if("node_const"==r.type&&0===r.value)return r;if("node_op"==s.type&&"op_neg"==s.value&&"node_op"==r.type&&"op_neg"==r.value)return t.children=[s.children[0],r.children[0]],this.mayNotBeSimplified=!0,t;if("op_neg"==s.value&&"op_neg"!=r.value)return t.type="node_op",t.value="op_neg",t.children=[this.createNode("node_op","op_mul",s.children[0],r)],this.mayNotBeSimplified=!0,t;if("op_neg"!=s.value&&"op_neg"==r.value)return t.type="node_op",t.value="op_neg",t.children=[this.createNode("node_op","op_mul",s,r.children[0])],this.mayNotBeSimplified=!0,t;if("op_div"==s.value&&"node_const"==s.children[0].type&&1==s.children[0].value)return t.type="node_op",t.value="op_div",t.children=[r,s.children[1]],this.mayNotBeSimplified=!0,t;if("op_div"==r.value&&"node_const"==r.children[0].type&&1==r.children[0].value)return t.type="node_op",t.value="op_div",t.children=[s,r.children[1]],this.mayNotBeSimplified=!0,t;if("node_const"!=s.type&&"node_const"==r.type)return t.children=[r,s],this.mayNotBeSimplified=!0,t;if("node_const"!=s.type&&"node_op"==r.type&&"op_neg"==r.value&&"node_const"==r.children[0].type)return t.children=[r,s],this.mayNotBeSimplified=!0,t;if("node_op"==s.type&&"op_execfun"!=s.value&&("node_var"==r.type||"node_op"==r.type&&"op_execfun"==r.value))return t.children=[r,s],this.mayNotBeSimplified=!0,t;if("node_op"!=s.type&&"node_op"==r.type&&"op_neg"==r.value&&"node_var"==r.children[0].type)return t.children=[r,s],this.mayNotBeSimplified=!0,t;if("node_const"!=s.type&&"node_op"==r.type&&("op_mul"==r.value||"op_div"==r.value)&&"node_const"==r.children[0].type)return o=r.children[0],r.children[0]=s,t.children=[o,r],this.mayNotBeSimplified=!0,t;if("node_const"!=r.type&&"node_op"==s.type&&"op_mul"==s.value&&"node_const"==s.children[0].type)return t.children=[s.children[0],this.createNode("node_op","op_mul",s.children[1],r)],this.mayNotBeSimplified=!0,t;if("node_const"==s.type&&"node_const"==r.type)return s.value*=r.value,s;if("node_const"==s.type&&"node_op"==r.type&&("op_mul"==r.value||"op_div"==r.value)&&"node_const"==r.children[0].type)return r.children[0].value*=s.value,r;if(s.hash=this.parser.compile(s),r.hash=this.parser.compile(r),s.hash===r.hash)return t.value="op_exp",t.children[1]=this.createNode("node_const",2),t;if("node_const"==s.type&&"node_op"==r.type&&("op_mul"==r.value||"op_div"==r.value)&&"node_const"==r.children[0].type)return r.children[0].value*=s.value,r;if("node_op"==r.type&&"op_exp"==r.value&&(s.hash||(s.hash=this.parser.compile(s)),r.children[0].hash||(r.children[0].hash=this.parser.compile(r.children[0])),s.hash===r.children[0].hash))return r.children[1]=this.createNode("node_op","op_add",r.children[1],this.createNode("node_const",1)),this.mayNotBeSimplified=!0,r;if("node_op"==s.type&&"op_exp"==s.value&&"node_op"==r.type&&"op_exp"==r.value&&(s.children[0].hash=this.parser.compile(s.children[0]),r.children[0].hash=this.parser.compile(r.children[0]),s.children[0].hash===r.children[0].hash))return s.children[1]=this.createNode("node_op","op_add",s.children[1],r.children[1]),this.mayNotBeSimplified=!0,s;break;case"op_sub":if(s=t.children[0],r=t.children[1],"node_const"==s.type&&0===s.value)return t.value="op_neg",t.children[0]=r,t;if("node_const"==r.type&&0===r.value)return s;if("node_const"==s.type&&"node_const"==r.type&&s.value==r.value)return this.createNode("node_const",0);if("node_var"==s.type&&"node_var"==r.type&&s.value==r.value)return this.createNode("node_const",0);if("node_const"==s.type&&"node_const"==r.type)return s.value-=r.value,s;if("node_op"==s.type&&"op_mul"==s.value&&"node_op"==r.type&&"op_mul"==r.value&&(s.children[1].hash=this.parser.compile(s.children[1]),r.children[1].hash=this.parser.compile(r.children[1]),s.children[1].hash===r.children[1].hash))return t.value="op_mul",t.children=[this.createNode("node_op","op_sub",s.children[0],r.children[0]),s.children[1]],this.mayNotBeSimplified=!0,t;if("node_op"==s.type&&"op_mul"==s.value&&(s.children[1].hash=this.parser.compile(s.children[1]),r.hash=this.parser.compile(r),s.children[1].hash===r.hash))return t.value="op_mul",t.children=[this.createNode("node_op","op_sub",s.children[0],this.createNode("node_const",1)),r],this.mayNotBeSimplified=!0,t;if("node_op"==r.type&&"op_mul"==r.value&&(r.children[1].hash=this.parser.compile(r.children[1]),s.hash=this.parser.compile(s),r.children[1].hash===s.hash))return t.value="op_mul",t.children=[this.createNode("node_op","op_sub",this.createNode("node_const",1),r.children[0]),s],this.mayNotBeSimplified=!0,t;break;case"op_neg":if("node_const"==(s=t.children[0]).type&&0===s.value)return s;if("node_op"==s.type&&"op_neg"==s.value)return s.children[0];break;case"op_div":if(s=t.children[0],r=t.children[1],"node_const"==s.type&&"node_const"==r.type&&s.value==r.value&&0!==s.value)return s.value=1,s;if("node_const"==s.type&&0===s.value&&"node_const"==r.type&&0!==r.value)return s.value=0,s;if("node_const"==s.type&&0===s.value&&("node_op"==r.type||"node_var"==r.type))return t.type="node_const",t.value=0,t;if("node_var"==s.type&&"node_var"==r.type&&s.value==r.value)return this.createNode("node_const",1);if("node_const"==s.type&&0!==s.value&&"node_const"==r.type&&0===r.value)return s.value>0?s.value=1/0:s.value=-1/0,s;if("node_op"==s.type&&"op_neg"==s.value&&"node_op"==r.type&&"op_neg"==r.value)return t.children=[s.children[0],r.children[0]],this.mayNotBeSimplified=!0,t;if("op_neg"==s.value&&"op_neg"!=r.value)return t.type="node_op",t.value="op_neg",t.children=[this.createNode("node_op","op_div",s.children[0],r)],this.mayNotBeSimplified=!0,t;if("op_neg"!=s.value&&"op_neg"==r.value)return t.type="node_op",t.value="op_neg",t.children=[this.createNode("node_op","op_div",s,r.children[0])],this.mayNotBeSimplified=!0,t;if("node_op"==s.type&&"op_exp"==s.value&&(r.hash||(r.hash=this.parser.compile(r)),s.children[0].hash||(s.children[0].hash=this.parser.compile(s.children[0])),r.hash===s.children[0].hash))return s.children[1]=this.createNode("node_op","op_sub",s.children[1],this.createNode("node_const",1)),this.mayNotBeSimplified=!0,s;if("node_const"!=r.type&&"node_op"==s.type&&"op_mul"==s.value&&"node_const"==s.children[0].type)return t.value="op_mul",t.children=[s.children[0],this.createNode("node_op","op_div",s.children[1],r)],this.mayNotBeSimplified=!0,t;if("node_op"==s.type&&"op_exp"==s.value&&"node_op"==r.type&&"op_exp"==r.value&&(s.children[0].hash=this.parser.compile(s.children[0]),r.children[0].hash=this.parser.compile(r.children[0]),s.children[0].hash===r.children[0].hash))return s.children[1]=this.createNode("node_op","op_sub",s.children[1],r.children[1]),this.mayNotBeSimplified=!0,s;break;case"op_exp":if(s=t.children[0],"node_const"==(r=t.children[1]).type&&0===r.value)return r.value=1,r;if("node_const"==r.type&&1==r.value)return s;if("node_const"==s.type&&1==s.value)return s;if("node_const"==s.type&&0===s.value&&"node_const"==r.type&&0!==r.value)return s;if("node_op"==s.type&&"op_exp"==s.value)return t.children=[s.children[0],this.createNode("node_op","op_mul",s.children[1],r)],t}switch(t.value){case"op_add":if(s=t.children[0],r=t.children[1],"node_const"==s.type&&"node_const"==r.type&&s.value==r.value)return s.value+=r.value,s;if("node_var"==s.type&&"node_var"==r.type&&s.value==r.value)return t.children[0]=this.createNode("node_const",2),t.value="op_mul",t;if("node_op"==s.type&&"op_neg"==s.value)return t.value="op_sub",t.children[0]=r,t.children[1]=s.children[0],this.mayNotBeSimplified=!0,t;if("node_op"==r.type&&"op_neg"==r.value)return t.value="op_sub",t.children[1]=r.children[0],this.mayNotBeSimplified=!0,t;if("node_op"==s.type&&"op_mul"==s.value&&"node_op"==r.type&&"op_mul"==r.value&&(s.children[1].hash=this.parser.compile(s.children[1]),r.children[1].hash=this.parser.compile(r.children[1]),s.children[1].hash===r.children[1].hash))return t.value="op_mul",t.children=[this.createNode("node_op","op_add",s.children[0],r.children[0]),s.children[1]],this.mayNotBeSimplified=!0,t;if("node_op"==s.type&&"op_mul"==s.value&&(s.children[1].hash=this.parser.compile(s.children[1]),r.hash=this.parser.compile(r),s.children[1].hash===r.hash))return t.value="op_mul",t.children=[this.createNode("node_op","op_add",s.children[0],this.createNode("node_const",1)),r],this.mayNotBeSimplified=!0,t;if("node_op"==r.type&&"op_mul"==r.value&&(r.children[1].hash=this.parser.compile(r.children[1]),s.hash=this.parser.compile(s),r.children[1].hash===s.hash))return t.value="op_mul",t.children=[this.createNode("node_op","op_add",this.createNode("node_const",1),r.children[0]),s],this.mayNotBeSimplified=!0,t;break;case"op_sub":if(s=t.children[0],"node_op"==(r=t.children[1]).type&&"op_neg"==r.value)return t.value="op_add",t.children[1]=r.children[0],this.mayNotBeSimplified=!0,t;break;case"op_execfun":return this.simplifyElementary(t)}return t},simplifyElementary:function(t){var e=t.children[0].value,i=t.children[1];if(0==i.length)return t;switch(e){case"sin":case"tan":if("node_const"==i[0].type&&0===i[0].value)return t.type="node_const",t.value=0,t;if("node_var"==i[0].type&&"PI"==i[0].value)return t.type="node_const",t.value=0,t;if("node_op"==i[0].type&&"op_mul"==i[0].value&&"node_const"==i[0].children[0].type&&i[0].children[0].value%1==0&&"node_var"==i[0].children[1].type&&"PI"==i[0].children[1].value)return t.type="node_const",t.value=0,t;break;case"cos":if("node_const"==i[0].type&&0===i[0].value)return t.type="node_const",t.value=1,t;if("node_var"==i[0].type&&"PI"==i[0].value)return t.type="node_op",t.value="op_neg",t.children=[this.createNode("node_const",1)],t;break;case"exp":if("node_const"==i[0].type&&0===i[0].value)return t.type="node_const",t.value=1,t;break;case"pow":if("node_const"==i[1].type&&0===i[1].value)return t.type="node_const",t.value=1,t}return t}});var ca=jxg.A.CA;jxg.A.Dump={addMarkers:function(t,e,i){var s,r,o;for(s in utils_type.A.isArray(e)||(e=[e]),utils_type.A.isArray(i)||(i=[i]),r=Math.min(e.length,i.length),e.length=r,i.length=r,t.objects)if(t.objects.hasOwnProperty(s))for(o=0;o<r;o++)t.objects[s][e[o]]=i[o]},deleteMarkers:function(t,e){var i,s,r;for(i in utils_type.A.isArray(e)||(e=[e]),s=e.length,e.length=s,t.objects)if(t.objects.hasOwnProperty(i))for(r=0;r<s;r++)delete t.objects[i][e[r]]},str:function(t){return"string"==typeof t&&"function"!==t.slice(0,7)&&(t='"'+t+'"'),t},minimizeObject:function(t,e){var i,s,r,o={},n=utils_type.A.deepCopy(t),a=[];for(r=1;r<arguments.length;r++)a.push(arguments[r]);for(o=utils_type.A.deepCopy(o,jxg.A.Options.elements,!0),r=a.length;r>0;r--)o=utils_type.A.deepCopy(o,a[r-1],!0);for(i in o)o.hasOwnProperty(i)&&(s=i.toLowerCase(),"object"!=typeof o[i]&&o[i]===n[s]&&delete n[s]);return n},prepareAttributes:function(t,e){var i,s;for(s in i=this.minimizeObject(e.getAttributes(),jxg.A.Options[e.elType]),e.subs)e.subs.hasOwnProperty(s)&&(i[s]=this.minimizeObject(e.subs[s].getAttributes(),jxg.A.Options[e.elType][s],jxg.A.Options[e.subs[s].elType]),i[s].id=e.subs[s].id,i[s].name=e.subs[s].name);return i.id=e.id,i.name=e.name,i},setBoundingBox:function(t,e,i){return t.push({obj:i,method:"setBoundingBox",params:[e.getBoundingBox(),e.keepaspectratio]}),t},dump:function(t){var e,i,s,r,o=[],n=[],a=t.objectsList.length;for(this.addMarkers(t,"dumped",!1),e=0;e<a;e++)if(s={},!(i=t.objectsList[e]).dumped&&i.dump){for(s.type=i.getType(),s.parents=i.getParents().slice(),"point"===s.type&&1===s.parents[0]&&(s.parents=s.parents.slice(1)),r=0;r<s.parents.length;r++)utils_type.A.isString(s.parents[r])&&"'"!==s.parents[r][0]&&'"'!==s.parents[r][0]?s.parents[r]='"'+s.parents[r]+'"':utils_type.A.isArray(s.parents[r])&&(s.parents[r]="["+s.parents[r].toString()+"]");s.attributes=this.prepareAttributes(t,i),"glider"===s.type&&i.onPolygon&&o.push({obj:i.id,prop:"onPolygon",val:!0}),n.push(s)}return this.deleteMarkers(t,"dumped"),{elements:n,props:o,methods:[]}},arrayToParamStr:function(t,e){var i,s=[];for(i=0;i<t.length;i++)s.push(e.call(this,t[i]));return s.join(", ")},toJCAN:function(t){var e,i,s;switch(typeof t){case"object":if(t){if(i=[],utils_type.A.isArray(t)){for(e=0;e<t.length;e++)i.push(this.toJCAN(t[e]));return"["+i.join(",")+"]"}for(s in t)t.hasOwnProperty(s)&&i.push(s+": "+this.toJCAN(t[s]));return"<<"+i.join(", ")+">> "}return"null";case"string":return"'"+t.replace(/\\/g,"\\\\").replace(/(["'])/g,"\\$1")+"'";case"number":case"boolean":return t.toString();case"null":return"null"}},toJessie:function(t){var e,i,s,r=this.dump(t),o=[];for(r.methods=this.setBoundingBox(r.methods,t,"$board"),i=r.elements,e=0;e<i.length;e++)i[e].attributes.name.length>0&&o.push("// "+i[e].attributes.name),o.push("s"+e+" = "+i[e].type+"("+i[e].parents.join(", ")+") "+this.toJCAN(i[e].attributes).replace(/\n/,"\\n")+";"),"axis"===i[e].type&&(s=i[e].attributes.id,null===t.objects[s].defaultTicks&&o.push("s"+e+".removeAllTicks();")),o.push("");for(e=0;e<r.methods.length;e++)o.push(r.methods[e].obj+"."+r.methods[e].method+"("+this.arrayToParamStr(r.methods[e].params,this.toJCAN)+");"),o.push("");for(e=0;e<r.props.length;e++)o.push(r.props[e].obj+"."+r.props[e].prop+" = "+this.toJCAN(r.props[e].val)+";"),o.push("");return o.join("\n")},toJavaScript:function(t){var e,i,s,r=this.dump(t),o=[];for(r.methods=this.setBoundingBox(r.methods,t,"board"),i=r.elements,e=0;e<i.length;e++)o.push('board.create("'+i[e].type+'", ['+i[e].parents.join(", ")+"], "+utils_type.A.toJSON(i[e].attributes)+");"),"axis"===i[e].type&&(s=i[e].attributes.id,null===t.objects[s].defaultTicks&&o.push('board.objects["'+s+'"].removeTicks(board.objects["'+s+'"].defaultTicks);'));for(e=0;e<r.methods.length;e++)o.push(r.methods[e].obj+"."+r.methods[e].method+"("+this.arrayToParamStr(r.methods[e].params,utils_type.A.toJSON)+");"),o.push("");for(e=0;e<r.props.length;e++)o.push(r.props[e].obj+"."+r.props[e].prop+" = "+utils_type.A.toJSON(r.props[e].val)+";"),o.push("");return o.join("\n")}};var dump=jxg.A.Dump;jxg.A.createComb=function(t,e,i){var s,r,o,n,a;if(2!==e.length)throw a=e.map((function(t){return"'"+typeof t+"'"})),new Error("JSXGraph: Can't create comb with parent types "+a.join(", ")+".\nPossible parent types: [point,point], [[x1,y1],[x2,y2]]");if(utils_type.A.isArray(e[0])&&e[0].length>1)n=utils_type.A.copyAttributes(i,t.options,"comb","point1"),s=t.create("point",e[0],n);else if(utils_type.A.isString(e[0])||utils_type.A.isPoint(e[0]))s=t.select(e[0]);else if(utils_type.A.isFunction(e[0])&&utils_type.A.isPoint(e[0]()))s=e[0]();else{if(!(utils_type.A.isFunction(e[0])&&e[0]().length&&e[0]().length>=2))throw new Error("JSXGraph: Can't create comb with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,point], [[x1,y1],[x2,y2]]");n=utils_type.A.copyAttributes(i,t.options,"comb","point1"),s=jxg.A.createPoint(t,e[0](),n)}if(utils_type.A.isArray(e[1])&&e[1].length>1)n=utils_type.A.copyAttributes(i,t.options,"comb","point2"),r=t.create("point",e[1],n);else if(utils_type.A.isString(e[1])||utils_type.A.isPoint(e[1]))r=t.select(e[1]);else if(utils_type.A.isFunction(e[1])&&utils_type.A.isPoint(e[1]()))r=e[1]();else{if(!(utils_type.A.isFunction(e[1])&&e[1]().length&&e[1]().length>=2))throw new Error("JSXGraph: Can't create comb with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [point,point], [[x1,y1],[x2,y2]]");n=utils_type.A.copyAttributes(i,t.options,"comb","point2"),r=jxg.A.createPoint(t,e[1](),n)}return n=utils_type.A.copyAttributes(i,t.options,"comb"),(o=t.create("curve",[[0],[0]],n)).updateDataArray=function(){var t,e,i,n,a,l,h,u,c,d,p=0,_=s.Dist(r),f=s,A=r;for(u=utils_type.A.evaluate(o.visProp.frequency),c=-utils_type.A.evaluate(o.visProp.angle),d=utils_type.A.evaluate(o.visProp.width),utils_type.A.evaluate(o.visProp.reverse)&&(f=r,A=s,c=-c),t=Math.cos(c),e=Math.sin(c),i=(A.X()-f.X())/_,n=(A.Y()-f.Y())/_,t*=d/Math.abs(e),e*=d/Math.abs(e),this.dataX=[],this.dataY=[];p<_;)a=f.X()+i*p,l=f.Y()+n*p,e*=h=Math.min(t,_-p)/Math.abs(t),t*=h,this.dataX.push(a),this.dataY.push(l),this.dataX.push(a+i*t+n*e),this.dataY.push(l-i*e+n*t),this.dataX.push(NaN),this.dataY.push(NaN),p+=u},o},jxg.A.registerElement("comb",jxg.A.createComb);var priv={removeSlopeTriangle:function(){polygon.prototype.remove.call(this),this.board.removeObject(this.toppoint),this.board.removeObject(this.glider),this.board.removeObject(this.baseline),this.board.removeObject(this.basepoint),this.board.removeObject(this.label),this._isPrivateTangent&&this.board.removeObject(this.tangent)},Value:function(){return this.tangent.getSlope()},Direction:function(){return this.tangent.Direction()}};jxg.A.createSlopeTriangle=function(t,e,i){var s,r,o,n,a,l,h,u,c,d=!1;if(1===e.length&&e[0].type===constants.A.OBJECT_TYPE_TANGENT)r=e[0],o=r.glider;else if(1===e.length&&e[0].type===constants.A.OBJECT_TYPE_GLIDER)o=e[0],c=utils_type.A.copyAttributes(i,t.options,"slopetriangle","tangent"),r=t.create("tangent",[o],c),d=!0;else{if(2!==e.length||e[0].elementClass!==constants.A.OBJECT_CLASS_LINE||!utils_type.A.isPoint(e[1]))throw new Error("JSXGraph: Can't create slope triangle with parent types '"+typeof e[0]+"'.");r=e[0],o=e[1]}return c=utils_type.A.copyAttributes(i,t.options,"slopetriangle","basepoint"),h=t.create("point",[function(){return[o.X()+1,o.Y()]}],c),c=utils_type.A.copyAttributes(i,t.options,"slopetriangle","baseline"),l=t.create("line",[o,h],c),c=utils_type.A.copyAttributes(i,t.options,"slopetriangle","glider"),n=t.create("glider",[o.X()+1,o.Y(),l],c),c=utils_type.A.copyAttributes(i,t.options,"slopetriangle","toppoint"),a=t.create("point",[function(){return[n.X(),n.Y()+(n.X()-o.X())*r.getSlope()]}],c),c=utils_type.A.copyAttributes(i,t.options,"slopetriangle"),(s=t.create("polygon",[o,n,a],c)).Value=priv.Value,s.Direction=priv.Direction,s.tangent=r,s._isPrivateTangent=d,s.borders[2].setArrow(!1,!1),c=utils_type.A.copyAttributes(i,t.options,"slopetriangle","label"),(c=utils_type.A.copyAttributes(c,t.options,"label")).isLabel=!0,c.anchor=s.borders[1],c.priv=s.borders[1].visProp.priv,c.id=s.borders[1].id+"Label",(u=t.create("text",[0,0,function(){return""}],c)).needsUpdate=!0,u.dump=!1,s.borders[1].label=u,s.borders[1].hasLabel=!0,s.borders[1].visProp.withlabel=!0,u._setText((function(){var t=utils_type.A.evaluate(u.visProp.digits);return u.useLocale()?u.formatNumberLocale(s.Value(),t):utils_type.A.toFixed(s.Value(),t)})),u.fullUpdate(),s.glider=n,s.basepoint=h,s.baseline=l,s.toppoint=a,s.label=u,s.subs={glider:n,basePoint:h,baseLine:l,topPoint:a,label:u},s.inherits.push(n,h,l,a,u),s.methodMap=jxg.A.deepCopy(s.methodMap,{tangent:"tangent",glider:"glider",basepoint:"basepoint",baseline:"baseline",toppoint:"toppoint",label:"label",Value:"Value",V:"Value",Direction:"Direction"}),s.remove=priv.removeSlopeTriangle,s},jxg.A.registerElement("slopetriangle",jxg.A.createSlopeTriangle);var checkbox_priv={CheckboxChangeEventHandler:function(){this._value=this.rendNodeCheckbox.checked,this.board.update()}};jxg.A.createCheckbox=function(t,e,i){var s,r,o=utils_type.A.copyAttributes(i,t.options,"checkbox");return r=[e[0],e[1],'<span style="display:inline"><input type="checkbox" /><label for=""></label></span>'],(s=t.create("text",r,o)).type=utils_type.A.OBJECT_TYPE_CHECKBOX,s.rendNodeCheckbox=s.rendNode.childNodes[0].childNodes[0],s.rendNodeLabel=s.rendNode.childNodes[0].childNodes[1],s.rendNodeTag=s.rendNodeCheckbox,s.rendNodeTag.disabled=!!o.disabled,s.rendNodeCheckbox.id=s.rendNode.id+"_checkbox",s.rendNodeLabel.id=s.rendNode.id+"_label",s.rendNodeLabel.setAttribute("for",s.rendNodeCheckbox.id),s.setText(e[2]),s.visPropOld.fontsize="0px",t.renderer.updateTextStyle(s,!1),s.rendNodeCheckbox.checked=o.checked,s._value=o.checked,s.Value=function(){return this._value},s.update=function(){return this.needsUpdate&&(jxg.A.Text.prototype.update.call(this),this._value=this.rendNodeCheckbox.checked),this},env.A.addEvent(s.rendNodeCheckbox,"change",checkbox_priv.CheckboxChangeEventHandler,s),s},jxg.A.registerElement("checkbox",jxg.A.createCheckbox);var input_priv={InputInputEventHandler:function(t){this._value=this.rendNodeInput.value,this.board.update()}};jxg.A.createInput=function(t,e,i){var s,r,o=utils_type.A.copyAttributes(i,t.options,"input");return r=[e[0],e[1],'<span style="display:inline; white-space:nowrap; padding:0px;"><span></span><input type="text" maxlength="'+o.maxlength+'" style="width:100%"/></span>'],(s=t.create("text",r,o)).type=utils_type.A.OBJECT_TYPE_INPUT,s.rendNodeLabel=s.rendNode.childNodes[0].childNodes[0],s.rendNodeInput=s.rendNode.childNodes[0].childNodes[1],s.rendNodeInput.value=e[2],s.rendNodeTag=s.rendNodeInput,s.rendNodeTag.disabled=!!o.disabled,s.rendNodeLabel.id=s.rendNode.id+"_label",s.rendNodeInput.id=s.rendNode.id+"_input",s.setText(e[3]),s._value=e[2],s.update=function(){return this.needsUpdate&&(jxg.A.Text.prototype.update.call(this),this._value=this.rendNodeInput.value),this},s.Value=function(){return this._value},s.set=function(t){return this._value=t,this.rendNodeInput.value=t,this},env.A.addEvent(s.rendNodeInput,"input",input_priv.InputInputEventHandler,s),env.A.addEvent(s.rendNodeInput,"mousedown",(function(t){utils_type.A.exists(t.stopPropagation)&&t.stopPropagation()}),s),env.A.addEvent(s.rendNodeInput,"touchstart",(function(t){utils_type.A.exists(t.stopPropagation)&&t.stopPropagation()}),s),env.A.addEvent(s.rendNodeInput,"pointerdown",(function(t){utils_type.A.exists(t.stopPropagation)&&t.stopPropagation()}),s),s.visPropOld.fontsize="0px",t.renderer.updateTextStyle(s,!1),s},jxg.A.registerElement("input",jxg.A.createInput);var button_priv={ButtonClickEventHandler:function(){this._handler&&this._handler(),this.board.update()}};jxg.A.createButton=function(t,e,i){var s,r,o=utils_type.A.copyAttributes(i,t.options,"button");return r=[e[0],e[1],'<button type="button" style="width:100%;"></button>'],(s=t.create("text",r,o)).type=utils_type.A.OBJECT_TYPE_BUTTON,s.rendNodeButton=s.rendNode.childNodes[0],s.rendNodeButton.id=s.rendNode.id+"_button",s.rendNodeTag=s.rendNodeButton,s.rendNodeTag.disabled=!!o.disabled,s.setText(e[2]),s.visPropOld.fontsize="0px",t.renderer.updateTextStyle(s,!1),e[3]&&(utils_type.A.isString(e[3])?(s._jc=new jxg.A.JessieCode,s._jc.use(t),s._handler=function(){s._jc.parse(e[3])}):s._handler=e[3]),env.A.addEvent(s.rendNodeButton,"click",button_priv.ButtonClickEventHandler,s),env.A.addEvent(s.rendNodeButton,"mousedown",(function(t){utils_type.A.exists(t.stopPropagation)&&t.stopPropagation()}),s),env.A.addEvent(s.rendNodeButton,"touchstart",(function(t){utils_type.A.exists(t.stopPropagation)&&t.stopPropagation()}),s),env.A.addEvent(s.rendNodeButton,"pointerdown",(function(t){utils_type.A.exists(t.stopPropagation)&&t.stopPropagation()}),s),s},jxg.A.registerElement("button",jxg.A.createButton),jxg.A.createVectorField=function(t,e,i){var s,r;if(!(e.length>=3&&(utils_type.A.isArray(e[0])||utils_type.A.isFunction(e[0])||utils_type.A.isString(e[0]))&&utils_type.A.isArray(e[1])&&3===e[1].length&&utils_type.A.isArray(e[2])&&3===e[2].length))throw new Error("JSXGraph: Can't create vector field with parent types '"+typeof e[0]+"', '"+typeof e[1]+"', '"+typeof e[2]+"'.");return r=utils_type.A.copyAttributes(i,t.options,"vectorfield"),(s=t.create("curve",[[],[]],r)).elType="vectorfield",s.setF=function(t,e){var i,r;return utils_type.A.isArray(t)?(i=utils_type.A.createFunction(t[0],this.board,e),r=utils_type.A.createFunction(t[1],this.board,e),this.F=function(t,e){return[i(t,e),r(t,e)]}):this.F=utils_type.A.createFunction(t,s.board,e),this},s.setF(e[0],"x, y"),s.xData=e[1],s.yData=e[2],s.updateDataArray=function(){var e,i,s,r,o,n,a,l,h,u,c,d,p=utils_type.A.evaluate(this.visProp.scale),_=utils_type.A.evaluate(this.xData[0]),f=utils_type.A.evaluate(this.xData[1]),A=(utils_type.A.evaluate(this.xData[2])-_)/f,g=utils_type.A.evaluate(this.yData[0]),m=utils_type.A.evaluate(this.yData[1]),y=(utils_type.A.evaluate(this.yData[2])-g)/m,b=utils_type.A.evaluate(this.visProp.arrowhead.enabled);for(b&&(u=(h=utils_type.A.evaluate(this.visProp.arrowhead.size))/t.unitX,c=h/t.unitY,d=utils_type.A.evaluate(this.visProp.arrowhead.angle)),this.dataX=[],this.dataY=[],s=0,e=_;s<=f;e+=A,s++)for(r=0,i=g;r<=m;i+=y,r++)(o=this.F(e,i))[0]*=p,o[1]*=p,utils_type.A.concat(this.dataX,[e,e+o[0],NaN]),utils_type.A.concat(this.dataY,[i,i+o[1],NaN]),b&&Math.abs(o[0])+Math.abs(o[1])>0&&(a=(n=Math.atan2(o[1],o[0]))+d,l=n-d,utils_type.A.concat(this.dataX,[e+o[0]-Math.cos(a)*u,e+o[0],e+o[0]-Math.cos(l)*u,NaN]),utils_type.A.concat(this.dataY,[i+o[1]-Math.sin(a)*c,i+o[1],i+o[1]-Math.sin(l)*c,NaN]))},s.methodMap=utils_type.A.deepCopy(s.methodMap,{setF:"setF"}),s},jxg.A.registerElement("vectorfield",jxg.A.createVectorField),jxg.A.createSlopeField=function(t,e,i){var s,r,o;if(!(e.length>=3&&(utils_type.A.isFunction(e[0])||utils_type.A.isString(e[0]))&&utils_type.A.isArray(e[1])&&3===e[1].length&&utils_type.A.isArray(e[2])&&3===e[2].length))throw new Error("JSXGraph: Can't create slope field with parent types '"+typeof e[0]+"', '"+typeof e[1]+"', '"+typeof e[2]+"'.");return r=utils_type.A.createFunction(e[0],t,"x, y"),e[0]=function(t,e){var i=r(t,e),s=Math.sqrt(1+i*i);return[1/s,i/s]},o=utils_type.A.copyAttributes(i,t.options,"slopefield"),(s=t.create("vectorfield",e,o)).elType="slopefield",s.setF=function(t,e){var i=utils_type.A.createFunction(t,s.board,e);this.F=function(t,e){var s=i(t,e),r=Math.sqrt(1+s*s);return[1/r,s/r]}},s.methodMap=utils_type.A.deepCopy(s.methodMap,{setF:"setF"}),s},jxg.A.registerElement("slopefield",jxg.A.createSlopeField),jxg.A.createSmartLabel=function(t,e,i){var s,r,o,n,a,l;if(0===e.length||[constants.A.OBJECT_CLASS_POINT,constants.A.OBJECT_CLASS_LINE,constants.A.OBJECT_CLASS_CIRCLE].indexOf(e[0].elementClass)<0&&[constants.A.OBJECT_TYPE_POLYGON,constants.A.OBJECT_TYPE_ANGLE].indexOf(e[0].type)<0)throw new Error("JSXGraph: Can't create smartlabel with parent types '"+typeof e[0]+"', '"+typeof e[1]+"'.");return o=e[0],n=e[1]||"",o.elementClass===constants.A.OBJECT_CLASS_POINT?r=utils_type.A.copyAttributes(i,t.options,"smartlabelpoint"):o.elementClass===constants.A.OBJECT_CLASS_LINE?((r=utils_type.A.copyAttributes(i,t.options,"smartlabelline")).rotate=function(){return 180*Math.atan(o.getSlope())/Math.PI},r.visible=function(){return!(o.L()<1.5)}):o.elementClass===constants.A.OBJECT_CLASS_CIRCLE?(r=utils_type.A.copyAttributes(i,t.options,"smartlabelcircle")).visible=function(){return!(o.Radius()<1.5)}:o.type===constants.A.OBJECT_TYPE_POLYGON?r=utils_type.A.copyAttributes(i,t.options,"smartlabelpolygon"):o.type===constants.A.OBJECT_TYPE_ANGLE&&((r=utils_type.A.copyAttributes(i,t.options,"smartlabelangle")).rotate=function(){var t=o.center.coords.usrCoords,e=o.getLabelAnchor().usrCoords,i=180*Math.atan2(e[2]-t[2],e[1]-t[1])/Math.PI;return i>90&&i<270?i+180:i},r.anchorX=function(){var t=o.center.coords.usrCoords,e=o.getLabelAnchor().usrCoords,i=180*Math.atan2(e[2]-t[2],e[1]-t[1])/Math.PI;return i>90&&i<270?"right":"left"}),a=function(t,e,i,s){var r;switch(s){case"length":r=function(){return e.L()};break;case"slope":r=function(){return e.Slope()};break;case"area":r=function(){return e.Area()};break;case"radius":r=function(){return e.Radius()};break;case"perimeter":r=function(){return e.Perimeter()};break;case"rad":r=function(){return e.Value()};break;case"deg":r=function(){return 180*e.Value()/Math.PI};break;default:r=function(){return 0}}return function(){var e,i="",s=utils_type.A.evaluate(n),o=utils_type.A.evaluate(t.visProp.digits),a=utils_type.A.evaluate(t.visProp.unit),l=utils_type.A.evaluate(t.visProp.prefix),h=utils_type.A.evaluate(t.visProp.suffix),u=utils_type.A.evaluate(t.visProp.usemathjax)||utils_type.A.evaluate(t.visProp.usekatex);return""===s?(e=t.useLocale()?t.formatNumberLocale(r(),o):utils_type.A.toFixed(r(),o),i=u?["\\(",l,e,"\\,",a,h,"\\)"].join(""):[l,e,a,h].join("")):i=s,i}},o.elementClass===constants.A.OBJECT_CLASS_POINT?(s=t.create("text",[function(){return o.X()},function(){return o.Y()},""],r),l=function(){var t,e,i="",r=utils_type.A.evaluate(n),a=utils_type.A.evaluate(s.visProp.digits),l=utils_type.A.evaluate(s.visProp.unit),h=utils_type.A.evaluate(s.visProp.prefix),u=utils_type.A.evaluate(s.visProp.suffix),c=utils_type.A.evaluate(s.visProp.dir),d=utils_type.A.evaluate(s.visProp.usemathjax)||utils_type.A.evaluate(s.visProp.usekatex);return s.useLocale()?(t=s.formatNumberLocale(o.X(),a),e=s.formatNumberLocale(o.Y(),a)):(t=utils_type.A.toFixed(o.X(),a),e=utils_type.A.toFixed(o.Y(),a)),""===r?"row"===c?i=d?["\\(",h,t,"\\,",l," / ",e,"\\,",l,u,"\\)"].join(""):[h,t," ",l," / ",e," ",l,u].join(""):0===c.indexOf("col")&&(i=d?["\\(",h,"\\left(\\array{",t,"\\,",l,"\\\\ ",e,"\\,",l,"}\\right)",u,"\\)"].join(""):[h,t," ",l,"<br/>",e," ",l,u].join("")):i=r,i}):o.elementClass===constants.A.OBJECT_CLASS_LINE?"length"===r.measure?l=a(s=t.create("text",[function(){return.5*(o.point1.X()+o.point2.X())},function(){return.5*(o.point1.Y()+o.point2.Y())},""],r),o,0,"length"):"slope"===r.measure&&(l=a(s=t.create("text",[function(){return.25*o.point1.X()+.75*o.point2.X()},function(){return.25*o.point1.Y()+.75*o.point2.Y()},""],r),o,0,"slope")):o.elementClass===constants.A.OBJECT_CLASS_CIRCLE?"radius"===r.measure?l=a(s=t.create("text",[function(){return o.center.X()+.5*o.Radius()},function(){return o.center.Y()},""],r),o,0,"radius"):"area"===r.measure?l=a(s=t.create("text",[function(){return o.center.X()},function(){return o.center.Y()+.5*o.Radius()},""],r),o,0,"area"):"circumference"!==r.measure&&"perimeter"!==r.measure||(l=a(s=t.create("text",[function(){return o.getLabelAnchor()},""],r),o,0,"perimeter")):o.type===constants.A.OBJECT_TYPE_POLYGON?"area"===r.measure?l=a(s=t.create("text",[function(){return o.getTextAnchor()},""],r),o,0,"area"):"perimeter"===r.measure&&(l=a(s=t.create("text",[function(){var t=o.borders.length-1;return t>=0?[.5*(o.borders[t].point1.X()+o.borders[t].point2.X()),.5*(o.borders[t].point1.Y()+o.borders[t].point2.Y())]:o.getTextAnchor()},""],r),o,0,"perimeter")):o.type===constants.A.OBJECT_TYPE_ANGLE&&(l=a(s=t.create("text",[function(){return o.getLabelAnchor()},""],r),o,0,r.measure)),utils_type.A.exists(s)&&(s.setText(l),o.addChild(s),s.setParents([o])),s},jxg.A.registerElement("smartlabel",jxg.A.createSmartLabel),jxg.A.ForeignObject=function(t,e,i,s,r){this.constructor(t,i,constants.A.OBJECT_TYPE_FOREIGNOBJECT,constants.A.OBJECT_CLASS_OTHER),this.element=this.board.select(i.anchor),this.coordsConstructor(e),this._useUserSize=!1,this.size=[1,1],utils_type.A.exists(r)&&r.length>0&&(this._useUserSize=!0,this.W=utils_type.A.createFunction(r[0],this.board,""),this.H=utils_type.A.createFunction(r[1],this.board,""),this.addParentsFromJCFunctions([this.W,this.H]),this.usrSize=[this.W(),this.H()]),this.content=s,this.elType="foreignobject",this.id=this.board.setId(this,"Im"),this.board.renderer.drawForeignObject(this),this.board.finalizeAdding(this),this.methodMap=jxg.A.deepCopy(this.methodMap,{addTransformation:"addTransform",trans:"addTransform",W:"W",Width:"W",H:"H",Height:"H"})},jxg.A.ForeignObject.prototype=new base_element.A,utils_type.A.copyPrototypeMethods(jxg.A.ForeignObject,coordselement.A,"coordsConstructor"),jxg.A.extend(jxg.A.ForeignObject.prototype,{hasPoint:function(t,e){var i,s,r,o,n,a,l,h,u,c=this.transformations.length;return utils_type.A.isObject(utils_type.A.evaluate(this.visProp.precision))?(o=this.board._inputDevice,n=utils_type.A.evaluate(this.visProp.precision[o])):n=this.board.options.precision.hasPoint,0===c?(i=t-this.coords.scrCoords[1],s=this.coords.scrCoords[2]-e,i>=-(r=n)&&i-this.size[0]<=r&&s>=-r&&s-this.size[1]<=r):(l=[(a=(a=new base_coords.A(constants.A.COORDS_BY_SCREEN,[t,e],this.board)).usrCoords)[0]-this.span[0][0],a[1]-this.span[0][1],a[2]-this.span[0][2]],0<=(h=(u=math.A.innerProduct)(l,this.span[1]))&&h<=u(this.span[1],this.span[1])&&0<=(h=u(l,this.span[2]))&&h<=u(this.span[2],this.span[2]))},update:function(t){return this.needsUpdate?(this.updateCoords(t),this.updateSize(),this):this},updateRenderer:function(){return this.updateRendererGeneric("updateForeignObject")},updateSize:function(){var t=[0,0];return this._useUserSize?(this.usrSize=[this.W(),this.H()],this.size=[Math.abs(this.usrSize[0]*this.board.unitX),Math.abs(this.usrSize[1]*this.board.unitY)]):this.rendNode.hasChildNodes()&&(t=this.rendNode.childNodes[0].getBoundingClientRect(),this.size=[t.width,t.height]),this},updateSpan:function(){var t,e,i=this.transformations.length,s=[];if(0===i)this.span=[[this.Z(),this.X(),this.Y()],[this.Z(),this.W(),0],[this.Z(),0,this.H()]];else{for(s[0]=[this.Z(),this.X(),this.Y()],s[1]=[this.Z(),this.X()+this.W(),this.Y()],s[2]=[this.Z(),this.X(),this.Y()+this.H()],t=0;t<i;t++)for(e=0;e<3;e++)s[e]=math.A.matVecMult(this.transformations[t].matrix,s[e]);for(e=0;e<3;e++)s[e][1]/=s[e][0],s[e][2]/=s[e][0],s[e][0]/=s[e][0];for(e=1;e<3;e++)s[e][0]-=s[0][0],s[e][1]-=s[0][1],s[e][2]-=s[0][2];this.span=s}return this},addTransform:function(t){var e;if(utils_type.A.isArray(t))for(e=0;e<t.length;e++)this.transformations.push(t[e]);else this.transformations.push(t);return this},getParents:function(){var t=[this.url,[this.Z(),this.X(),this.Y()],this.usrSize];return 0!==this.parents.length&&(t=this.parents),t},setSize:function(t,e){return this.W=utils_type.A.createFunction(t,this.board,""),this.H=utils_type.A.createFunction(e,this.board,""),this._useUserSize=!0,this.addParentsFromJCFunctions([this.W,this.H]),this},W:function(){},H:function(){}}),jxg.A.createForeignObject=function(t,e,i){var s,r,o=e[0],n=e[1],a=[];if(e.length>=2&&(a=e[2]),s=utils_type.A.copyAttributes(i,t.options,"foreignobject"),!(r=coordselement.A.create(jxg.A.ForeignObject,t,n,s,o,a)))throw new Error("JSXGraph: Can't create foreignObject with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [string, [x, y], [w, h]], [string, [x, y]], [element,transformation]");return r},jxg.A.registerElement("foreignobject",jxg.A.createForeignObject),jxg.A.registerElement("fo",jxg.A.createForeignObject);var foreignobject=jxg.A.ForeignObject;jxg.A.extend(src_options.A,{axes3d:{axesPosition:"center",xAxis:{visible:!0,point2:{name:"x"},strokeColor:jxg.A.palette.red},yAxis:{visible:!0,point2:{name:"y"},strokeColor:jxg.A.palette.green},zAxis:{visible:!0,point2:{name:"z"},strokeColor:jxg.A.palette.blue},xPlaneRear:{visible:!0,layer:0,mesh3d:{layer:1}},yPlaneRear:{visible:!0,layer:0,mesh3d:{layer:1}},zPlaneRear:{visible:!0,layer:0,mesh3d:{layer:1}},xPlaneFront:{visible:!1,layer:0,mesh3d:{layer:1}},yPlaneFront:{visible:!1,layer:0,mesh3d:{layer:1}},zPlaneFront:{visible:!1,layer:0,mesh3d:{layer:1}},xPlaneRearYAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},xPlaneRearZAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},xPlaneFrontYAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},xPlaneFrontZAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},yPlaneRearXAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},yPlaneRearZAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},yPlaneFrontXAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},yPlaneFrontZAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},zPlaneRearXAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},zPlaneRearYAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},zPlaneFrontXAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1},zPlaneFrontYAxis:{visible:"inherit",strokeColor:"#888888",strokeWidth:1}},axis3d:{highlight:!1,fixed:!0,strokecolor:"black",strokeWidth:1,tabindex:null,point1:{visible:!1,name:""},point2:{visible:!1,name:"",label:{visible:!0}}},curve3d:{highlight:!1,tabindex:-1,strokeWidth:1,numberPointsHigh:200},intersectionline3d:{point1:{visible:!1,name:""},point2:{visible:!1,name:""}},line3d:{strokeWidth:1,strokeColor:"black",fixed:!0,tabindex:null,gradient:"linear",gradientSecondColor:"#ffffff",point:{visible:!1,name:""},point1:{visible:!1,name:""},point2:{visible:!1,name:""}},mesh3d:{strokeWidth:1,strokeColor:"#9a9a9a",strokeOpacity:.6,highlight:!1,fillColor:"#9a9a9a",fillOpacity:.1,tabindex:null,visible:"inherit"},plane3d:{strokeWidth:0,strokeColor:"black",strokeOpacity:1,highlight:!1,tabindex:null,gradient:"linear",gradientSecondColor:"#ffffff",gradientAngle:Math.PI,fillColor:"#a7a7a7",fillOpacity:.6,point:{visible:!1,name:"",fixed:!0}},point3d:{infoboxDigits:"auto",strokeWidth:0,gradient:"radial",gradientSecondColor:"#555555",fillColor:"yellow",highlightStrokeColor:"#555555"},polygon3d:{highlight:!1,tabindex:-1,strokeWidth:1,fillColor:"none"},sphere3d:{highlight:!1,strokeWidth:1,strokeColor:"#00ff80",fillColor:"white",gradient:"radial",gradientSecondColor:"#00ff80",gradientFX:.7,gradientFY:.3,fillOpacity:.4},surface3d:{highlight:!1,tabindex:-1,strokeWidth:1,stepsU:30,stepsV:30},vectorfield3d:{scale:1,arrowhead:{enabled:!0,size:5,angle:.125*Math.PI}},view3d:{needsRegularUpdate:!0,projection:"parallel",verticalDrag:{enabled:!0,key:"shift"},az:{pointer:{enabled:!0,speed:1,outside:!0,button:-1,key:"none"},keyboard:{enabled:!0,step:10,key:"ctrl"},continuous:!0,slider:{visible:"inherit",style:6,point1:{frozen:!0},point2:{frozen:!0},min:0,max:2*Math.PI,start:1}},el:{pointer:{enabled:!0,speed:1,outside:!0,button:-1,key:"none"},keyboard:{enabled:!0,step:10,key:"ctrl"},continuous:!0,slider:{visible:"inherit",style:6,point1:{frozen:!0},point2:{frozen:!0},min:0,max:2*Math.PI,start:.3}},bank:{pointer:{enabled:!0,speed:.08,outside:!0,button:-1,key:"none"},keyboard:{enabled:!0,step:10,key:"ctrl"},continuous:!0,slider:{visible:"inherit",style:6,point1:{frozen:!0},point2:{frozen:!0},min:-Math.PI,max:Math.PI,start:0}},trackball:{enabled:!1,outside:!0,button:-1,key:"none"},r:"auto",fov:.4*Math.PI,depthOrderPoints:!1,values:[[0,1.57],[.78,.62],[0,0],[5.49,.62],[4.71,0],[3.93,.62],[3.14,0],[2.36,.62],[1.57,1.57]],_currentView:-1}});var options3d=jxg.A.Options;jxg.A.View3D=function(t,e,i){this.constructor(t,i,constants.A.OBJECT_TYPE_VIEW3D,constants.A.OBJECT_CLASS_3D),this.objects={},this.points=this.visProp.depthorderpoints?[]:null,this.elementsByName={},this.defaultAxes=null,this.angles={az:null,el:null,bank:null},this.matrix3DRot=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]],this.matrix3D=[[1,0,0,0],[0,1,0,0],[0,0,1,0]],this.boxToCam=[],this.llftCorner=e[0],this.size=e[1],this.bbox3D=e[2],this.r=-1,this.focalDist=-1,this.projectionType="parallel",this.trackballEnabled=!1,this.timeoutAzimuth=null,this.id=this.board.setId(this,"V"),this.board.finalizeAdding(this),this.elType="view3d",this.methodMap=utils_type.A.deepCopy(this.methodMap,{})},jxg.A.View3D.prototype=new base_element.A,jxg.A.extend(jxg.A.View3D.prototype,{create:function(t,e,i){var s=[];return t.indexOf("3d")>0&&s.push(this),this.board.create(t,s.concat(e),i)},select:function(t,e){var i,s,r,o,n=t;if(null===n)return n;if(utils_type.A.isString(n)&&""!==n)utils_type.A.exists(this.objects[n])?n=this.objects[n]:utils_type.A.exists(this.elementsByName[n])&&(n=this.elementsByName[n]);else if(!e&&(utils_type.A.isFunction(n)||utils_type.A.isObject(n)&&!utils_type.A.isFunction(n.setAttribute))){for(s={},o=(i=utils_type.A.filterElements(this.objectsList,n)).length,r=0;r<o;r++)s[i[r].id]=i[r];n=new composition(s)}else utils_type.A.isObject(n)&&utils_type.A.exists(n.id)&&!utils_type.A.exists(this.objects[n.id])&&(n=null);return n},setAnglesFromRotation:function(){var t,e,i,s,r,o,n,a=this.matrix3DRot;(t=Math.sqrt(a[1][3]*a[1][3]+a[2][3]*a[2][3]))>math.A.eps?(e=a[2][3]/t,i=a[1][3]/t):(e=Math.cos(this.angles.bank),i=Math.sin(this.angles.bank)),a=math.A.matMatMult([[1,0,0,0],[0,e,-i,0],[0,i,e,0],[0,0,0,1]],a),this.angles.bank=Math.atan2(i,e),s=a[2][3],r=a[3][3],a=math.A.matMatMult([[1,0,0,0],[0,1,0,0],[0,0,s,r],[0,0,-r,s]],a),this.angles.el=Math.atan2(r,s),o=-a[1][1],n=a[3][1],this.angles.az=Math.atan2(n,o),this.angles.az<0&&(this.angles.az+=2*Math.PI),this.setSlidersFromAngles()},anglesHaveMoved:function(){return this._hasMoveAz||this._hasMoveEl||Math.abs(this.angles.az-this.az_slide.Value())>math.A.eps||Math.abs(this.angles.el-this.el_slide.Value())>math.A.eps||Math.abs(this.angles.bank-this.bank_slide.Value())>math.A.eps},getAnglesFromSliders:function(){this.angles.az=this.az_slide.Value(),this.angles.el=this.el_slide.Value(),this.angles.bank=this.bank_slide.Value()},setSlidersFromAngles:function(){this.az_slide.setValue(this.angles.az),this.el_slide.setValue(this.angles.el),this.bank_slide.setValue(this.angles.bank)},getRotationFromAngles:function(){var t,e,i,s,r,o,n=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]];return t=this.angles.az,e=this.angles.el,i=this.angles.bank,s=-Math.sin(e),n[1][1]=-Math.cos(t),n[1][2]=Math.sin(t),n[1][3]=0,n[2][1]=s*Math.sin(t),n[2][2]=s*Math.cos(t),n[2][3]=Math.cos(e),n[3][1]=Math.cos(e)*Math.sin(t),n[3][2]=Math.cos(e)*Math.cos(t),n[3][3]=Math.sin(e),r=Math.cos(i),o=Math.sin(i),n=math.A.matMatMult([[1,0,0,0],[0,r,o,0],[0,-o,r,0],[0,0,0,1]],n)},_projectToSphere:function(t,e,i){var s,r=math.A.hypot(e,i);return r<.7071067811865475*t?Math.sqrt(t*t-r*r):(s=t/1.414213562373095)*s/r},updateProjectionTrackball:function(t){var e,i,s,r,o,n,a,l,h,u,c,d,p=100,_=[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]];return utils_type.A.exists(this._trackball)?((e=this._trackball.dx)*e+(i=this._trackball.dy)*i>math.A.eps&&(p=.25*(this.size[0]*this.board.unitX+this.size[1]*this.board.unitY),r=[o=this._trackball.x,n=this._trackball.y,this._projectToSphere(p,o,n)],s=[o-=e,n-=i,this._projectToSphere(p,o,n)],d=math.A.crossProduct(s,r),h=math.A.hypot(d[0],d[1],d[2]),d[0]/=h,d[1]/=h,d[2]/=h,l=(l=(l=geometry.A.distance(r,s,3)/(2*p))>1?1:l)<-1?-1:l,a=2*Math.asin(l),l=1-(u=Math.cos(a)),c=Math.sin(a),_[1][1]=u+d[0]*d[0]*l,_[2][1]=d[1]*d[0]*l+d[2]*c,_[3][1]=d[2]*d[0]*l-d[1]*c,_[1][2]=d[0]*d[1]*l-d[2]*c,_[2][2]=u+d[1]*d[1]*l,_[3][2]=d[2]*d[1]*l+d[0]*c,_[1][3]=d[0]*d[2]*l+d[1]*c,_[2][3]=d[1]*d[2]*l-d[0]*c,_[3][3]=u+d[2]*d[2]*l),_=math.A.matMatMult(_,this.matrix3DRot)):this.matrix3DRot},updateAngleSliderBounds:function(){var t,e,i,s,r,o,n,a,l,h,u;this.trackballEnabled=utils_type.A.evaluate(this.visProp.trackball.enabled),this.trackballEnabled?(this.az_slide.setMin(0),this.az_slide.setMax(2*Math.PI),this.el_slide.setMin(-.5*Math.PI),this.el_slide.setMax(.5*Math.PI),this.bank_slide.setMin(-Math.PI),this.bank_slide.setMax(Math.PI)):(this.az_slide.setMin(this.visProp.az.slider.min),this.az_slide.setMax(this.visProp.az.slider.max),this.el_slide.setMin(this.visProp.el.slider.min),this.el_slide.setMax(this.visProp.el.slider.max),this.bank_slide.setMin(this.visProp.bank.slider.min),this.bank_slide.setMax(this.visProp.bank.slider.max)),t=this.az_slide._smax,e=this.az_slide._smin,i=this.el_slide._smax,s=this.el_slide._smin,h=this.bank_slide._smax,u=this.bank_slide._smin,this.trackballEnabled?(r=math.A.mod(this.angles.el,2*Math.PI),.5*Math.PI<r&&r<1.5*Math.PI&&(this.angles.el=Math.PI-r,this.angles.az=math.A.wrap(this.angles.az+Math.PI,e,t),this.angles.bank=math.A.wrap(this.angles.bank+Math.PI,u,h)),this.angles.az=math.A.wrap(this.angles.az,e,t),this.angles.el=math.A.wrap(this.angles.el,s,i),this.angles.bank=math.A.wrap(this.angles.bank,u,h)):(l=function(t){return t<s?s-t:i<t?t-i:0},o=.5*(s+i),n=math.A.wrap(this.angles.el,o-Math.PI,o+Math.PI),a=math.A.wrap(Math.PI-this.angles.el,o-Math.PI,o+Math.PI),l(n)<=l(a)?this.angles.el=math.A.clamp(n,s,i):(this.angles.el=math.A.clamp(a,s,i),this.angles.az=math.A.wrap(this.angles.az+Math.PI,e,t),this.angles.bank=math.A.wrap(this.angles.bank+Math.PI,u,h)),this.angles.az=math.A.wrapAndClamp(this.angles.az,e,t,2*Math.PI),this.angles.bank=math.A.wrapAndClamp(this.angles.bank,u,h,2*Math.PI),this.matrix3DRot=this.getRotationFromAngles()),this.setSlidersFromAngles()},_updateCentralProjection:function(){var t,e;return"auto"===(t=utils_type.A.evaluate(this.visProp.r))&&(t=1.01*math.A.hypot(this.bbox3D[0][0]-this.bbox3D[0][1],this.bbox3D[1][0]-this.bbox3D[1][1],this.bbox3D[2][0]-this.bbox3D[2][1])),this.boxToCam=this.matrix3DRot.map((t=>t.slice())),this.boxToCam[3][0]=-t,this.focalDist=1/Math.tan(.5*utils_type.A.evaluate(this.visProp.fov)),e=[[0,0,0,-1],[0,this.focalDist,0,0],[0,0,this.focalDist,0],[320/-12,0,0,28/-12]],math.A.matMatMult(e,this.boxToCam)},compareDepth:function(t,e){var i=[0,t.coords[1]-e.coords[1],t.coords[2]-e.coords[2],t.coords[3]-e.coords[3]];return math.A.matVecMult(this.matrix3DRot,math.A.matVecMult(this.shift,i))[3]},update:function(){var t,e,i,s,r,o,n=this.r,a=[[1,0,0,0],[0,-n,0,0],[0,0,-n,0],[0,0,0,1]];if(!(utils_type.A.exists(this.el_slide)&&utils_type.A.exists(this.az_slide)&&utils_type.A.exists(this.bank_slide)&&this.needsUpdate))return this;if(t=[[1,0,0],[0,1,0],[0,0,1]],this.projectionType=utils_type.A.evaluate(this.visProp.projection).toLowerCase(),this.trackballEnabled!==utils_type.A.evaluate(this.visProp.trackball.enabled)&&this.updateAngleSliderBounds(),this._hasMoveTrackball?(this.matrix3DRot=this.updateProjectionTrackball(),this.setAnglesFromRotation()):this.anglesHaveMoved()&&(this.getAnglesFromSliders(),this.matrix3DRot=this.getRotationFromAngles()),this.shift=[[1,0,0,0],[-.5*(this.bbox3D[0][0]+this.bbox3D[0][1]),1,0,0],[-.5*(this.bbox3D[1][0]+this.bbox3D[1][1]),0,1,0],[-.5*(this.bbox3D[2][0]+this.bbox3D[2][1]),0,0,1]],"central"===this.projectionType)i=.8,t[1][1]=this.size[0]/i,t[2][2]=this.size[1]/i,t[1][0]=this.llftCorner[0]+.5*t[1][1]*i,t[2][0]=this.llftCorner[1]+.5*t[2][2]*i,this.viewPortTransform=t,e=this._updateCentralProjection(),this.matrix3D=math.A.matMatMult(e,this.shift);else s=this.bbox3D[0][1]-this.bbox3D[0][0],r=this.bbox3D[1][1]-this.bbox3D[1][0],t[1][1]=this.size[0]/s,t[2][2]=this.size[1]/r,t[1][0]=this.llftCorner[0]+.5*t[1][1]*s,t[2][0]=this.llftCorner[1]+.5*t[2][2]*r,this.matrix3D=math.A.matMatMult(t,math.A.matMatMult(math.A.matMatMult(this.matrix3DRot,a),this.shift).slice(0,3));return this.visProp.depthorderpoints&&null===this.points&&(o=Object.values(this.objects),this.points=o.filter((t=>t.type===constants.A.OBJECT_TYPE_POINT3D))),this.visProp.depthorderpoints||null===this.points||(this.points=null),this.visProp.depthorderpoints&&this.board.renderer&&"svg"===this.board.renderer.type&&this.points.filter((t=>utils_type.A.evaluate(t.element2D.visProp.visible))).sort(this.compareDepth.bind(this)).forEach((t=>this.board.renderer.setLayer(t.element2D,t.element2D.visProp.layer))),this},updateRenderer:function(){return this.needsUpdate=!1,this},removeObject:function(t,e){var i;if(utils_type.A.isArray(t)){for(i=0;i<t.length;i++)this.removeObject(t[i]);return this}if(t=this.select(t),!utils_type.A.exists(t)||utils_type.A.isString(t))return this;try{delete this.objects[t.id]}catch(e){jxg.A.debug("View3D "+t.id+": Could not be removed: "+e)}return this.board.removeObject(t,e),this},worldToFocal:function(t,e=!0){var i,s=math.A.matVecMult(this.boxToCam,math.A.matVecMult(this.shift,t));if(s[3]-=s[0]*this.focalDist,e)return s;for(i=1;i<4;i++)s[i]/=s[0];return s.slice(1,4)},project3DTo2D:function(t,e,i){var s,r;return 3===arguments.length?s=[1,t,e,i]:3===t.length?(s=t.slice()).unshift(1):s=t,r=math.A.matVecMult(this.matrix3D,s),"central"===this.projectionType?(r[1]/=r[0],r[2]/=r[0],r[3]/=r[0],r[0]/=r[0],math.A.matVecMult(this.viewPortTransform,r.slice(0,3))):r},_getW0:function(t,e,i){var s,r=math.A.inverse(t),o=r[0][0]+e[1]*r[0][1]+e[2]*r[0][2],n=r[3][0]+e[1]*r[3][1]+e[2]*r[3][2];return s=i*r[0][3]-r[3][3],[1/((n*r[0][3]-o*r[3][3])/s),(n-o*i)/s]},project2DTo3DPlane:function(t,e,i){var s,r,o,n,a,l,h,u,c=e.slice(1);if(i=i||[1,0,0,0],n=math.A.norm(c,3),o=math.A.innerProduct(i.slice(1),c,3)/n,"parallel"===this.projectionType){(s=this.matrix3D.slice(0,3)).push([0,c[0],c[1],c[2]]),(r=t.coords.usrCoords.slice()).push(o);try{1===s[2][3]&&(s[2][1]=s[2][2]=.001*math.A.eps),a=math.A.Numerics.Gauss(s,r)}catch(t){a=[0,NaN,NaN,NaN]}}else{s=this.matrix3D,r=t.coords.usrCoords.slice(),l=math.A.Numerics.Gauss(this.viewPortTransform,r),h=(u=this._getW0(s,l,o))[0],r=[l[0]*h,l[1]*h,l[2]*h,u[1]*h];try{1===s[2][3]&&(s[2][1]=s[2][2]=.001*math.A.eps),(a=math.A.Numerics.Gauss(s,r))[1]/=a[0],a[2]/=a[0],a[3]/=a[0],a[0]/=a[0]}catch(t){a=[0,NaN,NaN,NaN]}}return a},projectScreenToSegment:function(t,e,i){var s,r,o,n,a,l,h,u=this.project3DTo2D(e).slice(1,3),c=this.project3DTo2D(i).slice(1,3),d=[c[0]-u[0],c[1]-u[1]],p=math.A.innerProduct(d,d),_=[t[0]-u[0],t[1]-u[1]],f=math.A.innerProduct(_,d)/p;return"central"===this.projectionType?(s=[.5*(e[0]+i[0]),.5*(e[1]+i[1]),.5*(e[2]+i[2])],o=[(r=this.project3DTo2D(s).slice(1,3))[0]-u[0],r[1]-u[1]],a=(1-(n=math.A.innerProduct(o,d)/p))*f/((1-2*n)*f+n)):a=f,[1,(h=1-(l=Math.min(Math.max(a,0),1)))*e[0]+l*i[0],h*e[1]+l*i[1],h*e[2]+l*i[2]]},project2DTo3DVertical:function(t,e){var i=t.coords.usrCoords.slice(1,3),s=[e[1],e[2],this.bbox3D[2][0]],r=[e[1],e[2],this.bbox3D[2][1]];return this.projectScreenToSegment(i,s,r)},project3DToCube:function(t){var e=this.bbox3D;return t[1]<e[0][0]&&(t[1]=e[0][0]),t[1]>e[0][1]&&(t[1]=e[0][1]),t[2]<e[1][0]&&(t[2]=e[1][0]),t[2]>e[1][1]&&(t[2]=e[1][1]),t[3]<e[2][0]&&(t[3]=e[2][0]),t[3]>e[2][1]&&(t[3]=e[2][1]),t},intersectionLineCube:function(t,e,i){var s,r,o,n;for(s=i,r=0;r<3;r++)0!==e[r]&&(o=(this.bbox3D[r][0]-t[r])/e[r],n=(this.bbox3D[r][1]-t[r])/e[r],s=i<0?Math.max(s,Math.min(o,n)):Math.min(s,Math.max(o,n)));return s},isInCube:function(t){return t[0]>this.bbox3D[0][0]-math.A.eps&&t[0]<this.bbox3D[0][1]+math.A.eps&&t[1]>this.bbox3D[1][0]-math.A.eps&&t[1]<this.bbox3D[1][1]+math.A.eps&&t[2]>this.bbox3D[2][0]-math.A.eps&&t[2]<this.bbox3D[2][1]+math.A.eps},intersectionPlanePlane:function(t,e,i){var s,r,o,n,a=[[],[]];return i=i||e.d,s=math.A.Geometry.meet3Planes(t.normal,t.d,e.normal,i,math.A.crossProduct(t.normal,e.normal),0),r=math.A.Geometry.meetPlanePlane(t.vec1,t.vec2,e.vec1,e.vec2),o=this.intersectionLineCube(s,r,1/0),n=math.A.axpy(o,r,s),this.isInCube(n)&&(a[0]=n),o=this.intersectionLineCube(s,r,-1/0),n=math.A.axpy(o,r,s),this.isInCube(n)&&(a[1]=n),a},getMesh:function(t,e,i){var s,r,o,n,a,l,h,u=[0,0,0],c=e[2],d=i[2],p=[],_=[];for(l=(utils_type.A.evaluate(e[1])-utils_type.A.evaluate(e[0]))/c,h=(utils_type.A.evaluate(i[1])-utils_type.A.evaluate(i[0]))/d,s=0;s<=c;s++){for(o=e[0]+l*s,r=0;r<=d;r++)n=i[0]+h*r,u=utils_type.A.isFunction(t)?t(o,n):[t[0](o,n),t[1](o,n),t[2](o,n)],a=this.project3DTo2D(u),p.push(a[1]),_.push(a[2]);p.push(NaN),_.push(NaN)}for(r=0;r<=d;r++){for(n=i[0]+h*r,s=0;s<=c;s++)o=e[0]+l*s,u=utils_type.A.isFunction(t)?t(o,n):[t[0](o,n),t[1](o,n),t[2](o,n)],a=this.project3DTo2D(u),p.push(a[1]),_.push(a[2]);p.push(NaN),_.push(NaN)}return[p,_]},animateAzimuth:function(){var t=this.az_slide._smin,e=this.az_slide._smax-t,i=this.az_slide.Value()+.1;this.az_slide.position=(i-t)/e,this.az_slide.position>1&&(this.az_slide.position=0),this.board.update(),this.timeoutAzimuth=setTimeout(function(){this.animateAzimuth()}.bind(this),200)},stopAzimuth:function(){clearTimeout(this.timeoutAzimuth),this.timeoutAzimuth=null},isVerticalDrag:function(){var t=this.board;return!!utils_type.A.evaluate(this.visProp.verticaldrag.enabled)&&t["_"+utils_type.A.evaluate(this.visProp.verticaldrag.key)+"Key"]},setView:function(t,e,i){return i=i||this.r,this.az_slide.setValue(t),this.el_slide.setValue(e),this.r=i,this.board.update(),this},nextView:function(){var t=utils_type.A.evaluate(this.visProp.values),e=this.visProp._currentview;return e=(e+1)%t.length,this.setCurrentView(e),this},previousView:function(){var t=utils_type.A.evaluate(this.visProp.values),e=this.visProp._currentview;return e=(e+t.length-1)%t.length,this.setCurrentView(e),this},setCurrentView:function(t){var e=utils_type.A.evaluate(this.visProp.values);return(t<0||t>=e.length)&&(t=(t%e.length+e.length)%e.length),this.setView(e[t][0],e[t][1],e[t][2]),this.visProp._currentview=t,this},_azEventHandler:function(t){var e=this.az_slide._smax,i=this.az_slide._smin,s=(e-i)/this.board.canvasWidth*utils_type.A.evaluate(this.visProp.az.pointer.speed),r=t.movementX,o=this.az_slide.Value(),n=this.el_slide.Value();return this.board.mode===this.board.BOARD_MODE_DRAG||(utils_type.A.evaluate(this.visProp.az.keyboard.enabled)&&("ArrowRight"===t.key?o+=utils_type.A.evaluate(this.visProp.az.keyboard.step)*Math.PI/180:"ArrowLeft"===t.key&&(o-=utils_type.A.evaluate(this.visProp.az.keyboard.step)*Math.PI/180)),utils_type.A.evaluate(this.visProp.az.pointer.enabled)&&0!==r&&null==t.key&&(o+=r*s),utils_type.A.evaluate(this.visProp.az.continuous)?o=math.A.wrap(o,i,e):o>0?o=Math.min(e,o):o<0&&(o=Math.max(i,o)),this.setView(o,n)),this},_elEventHandler:function(t){var e=this.el_slide._smax,i=this.el_slide._smin,s=(e-i)/this.board.canvasHeight*utils_type.A.evaluate(this.visProp.el.pointer.speed),r=t.movementY,o=this.az_slide.Value(),n=this.el_slide.Value();return this.board.mode===this.board.BOARD_MODE_DRAG||(utils_type.A.evaluate(this.visProp.el.keyboard.enabled)&&("ArrowUp"===t.key?n-=utils_type.A.evaluate(this.visProp.el.keyboard.step)*Math.PI/180:"ArrowDown"===t.key&&(n+=utils_type.A.evaluate(this.visProp.el.keyboard.step)*Math.PI/180)),utils_type.A.evaluate(this.visProp.el.pointer.enabled)&&0!==r&&null==t.key&&(n+=r*s),utils_type.A.evaluate(this.visProp.el.continuous)&&!this.trackballEnabled?n=math.A.wrap(n,i,e):n>0?n=Math.min(e,n):n<0&&(n=Math.max(i,n)),this.setView(o,n)),this},_bankEventHandler:function(t){var e,i=this.bank_slide._smax,s=this.bank_slide._smin,r=t.deltaY,o=this.bank_slide.Value();return this.board.mode===this.board.BOARD_MODE_DRAG||(utils_type.A.evaluate(this.visProp.bank.keyboard.enabled)&&(e=utils_type.A.evaluate(this.visProp.bank.keyboard.step)*Math.PI/180,"."===t.key||"<"===t.key?o-=e:","!==t.key&&">"!==t.key||(o+=e)),utils_type.A.evaluate(this.visProp.bank.pointer.enabled)&&0!==r&&null==t.key&&(o+=r*((i-s)/this.board.canvasHeight*utils_type.A.evaluate(this.visProp.bank.pointer.speed)),t.preventDefault()),o=utils_type.A.evaluate(this.visProp.bank.continuous)?math.A.wrap(o,s,i):math.A.clamp(o,s,i),this.bank_slide.setValue(o),this.board.update()),this},_trackballHandler:function(t){var e,i,s,r=this.board.getMousePosition(t);return s=new base_coords.A(constants.A.COORDS_BY_USER,[this.llftCorner[0]+.5*this.size[0],this.llftCorner[1]+.5*this.size[1]],this.board),e=r[0]-s.scrCoords[1],i=r[1]-s.scrCoords[2],this._trackball={dx:t.movementX,dy:-t.movementY,x:e,y:-i},this.board.update(),this},pointerDownHandler:function(t){var e,i,s;this._hasMoveAz=!1,this._hasMoveEl=!1,this._hasMoveBank=!1,this._hasMoveTrackball=!1,this.board.mode===this.board.BOARD_MODE_NONE&&(utils_type.A.evaluate(this.visProp.trackball.enabled)?(e=utils_type.A.evaluate(this.visProp.trackball.button),i=utils_type.A.evaluate(this.visProp.trackball.key),-1!==e&&e!==t.button||!("none"===i||i.indexOf("shift")>-1&&t.shiftKey||i.indexOf("ctrl")>-1&&t.ctrlKey)||(s=utils_type.A.evaluate(this.visProp.trackball.outside)?document:this.board.containerObj,env.A.addEvent(s,"pointermove",this._trackballHandler,this),this._hasMoveTrackball=!0)):(utils_type.A.evaluate(this.visProp.az.pointer.enabled)&&(e=utils_type.A.evaluate(this.visProp.az.pointer.button),i=utils_type.A.evaluate(this.visProp.az.pointer.key),-1!==e&&e!==t.button||!("none"===i||i.indexOf("shift")>-1&&t.shiftKey||i.indexOf("ctrl")>-1&&t.ctrlKey)||(s=utils_type.A.evaluate(this.visProp.az.pointer.outside)?document:this.board.containerObj,env.A.addEvent(s,"pointermove",this._azEventHandler,this),this._hasMoveAz=!0)),utils_type.A.evaluate(this.visProp.el.pointer.enabled)&&(e=utils_type.A.evaluate(this.visProp.el.pointer.button),i=utils_type.A.evaluate(this.visProp.el.pointer.key),-1!==e&&e!==t.button||!("none"===i||i.indexOf("shift")>-1&&t.shiftKey||i.indexOf("ctrl")>-1&&t.ctrlKey)||(s=utils_type.A.evaluate(this.visProp.el.pointer.outside)?document:this.board.containerObj,env.A.addEvent(s,"pointermove",this._elEventHandler,this),this._hasMoveEl=!0)),utils_type.A.evaluate(this.visProp.bank.pointer.enabled)&&(e=utils_type.A.evaluate(this.visProp.bank.pointer.button),i=utils_type.A.evaluate(this.visProp.bank.pointer.key),-1!==e&&e!==t.button||!("none"===i||i.indexOf("shift")>-1&&t.shiftKey||i.indexOf("ctrl")>-1&&t.ctrlKey)||(s=utils_type.A.evaluate(this.visProp.bank.pointer.outside)?document:this.board.containerObj,env.A.addEvent(s,"wheel",this._bankEventHandler,this,{passive:!1}),this._hasMoveBank=!0))),env.A.addEvent(document,"pointerup",this.pointerUpHandler,this))},pointerUpHandler:function(t){var e;this._hasMoveAz&&(e=utils_type.A.evaluate(this.visProp.az.pointer.outside)?document:this.board.containerObj,env.A.removeEvent(e,"pointermove",this._azEventHandler,this),this._hasMoveAz=!1),this._hasMoveEl&&(e=utils_type.A.evaluate(this.visProp.el.pointer.outside)?document:this.board.containerObj,env.A.removeEvent(e,"pointermove",this._elEventHandler,this),this._hasMoveEl=!1),this._hasMoveBank&&(e=utils_type.A.evaluate(this.visProp.bank.pointer.outside)?document:this.board.containerObj,env.A.removeEvent(e,"wheel",this._bankEventHandler,this),this._hasMoveBank=!1),this._hasMoveTrackball&&(e=utils_type.A.evaluate(this.visProp.az.pointer.outside)?document:this.board.containerObj,env.A.removeEvent(e,"pointermove",this._trackballHandler,this),this._hasMoveTrackball=!1),env.A.removeEvent(document,"pointerup",this.pointerUpHandler,this)}}),jxg.A.createView3D=function(t,e,i){var s,r,o,n,a,l,h,u,c,d=e[0],p=e[1];return r=utils_type.A.copyAttributes(i,t.options,"view3d"),(s=new jxg.A.View3D(t,e,r)).defaultAxes=s.create("axes3d",e,i),l=d[0],h=d[1],u=p[0],c=p[1],(o=utils_type.A.copyAttributes(i,t.options,"view3d","az","slider")).name="az",(n=utils_type.A.copyAttributes(i,t.options,"view3d","el","slider")).name="el",(a=utils_type.A.copyAttributes(i,t.options,"view3d","bank","slider")).name="bank",s.az_slide=t.create("slider",[[l-1,h-2],[l+u+1,h-2],[utils_type.A.evaluate(o.min),utils_type.A.evaluate(o.start),utils_type.A.evaluate(o.max)]],o),s.inherits.push(s.az_slide),s.el_slide=t.create("slider",[[l-1,h],[l-1,h+c],[utils_type.A.evaluate(n.min),utils_type.A.evaluate(n.start),utils_type.A.evaluate(n.max)]],n),s.inherits.push(s.el_slide),s.bank_slide=t.create("slider",[[l-1,h+c+2],[l+u+1,h+c+2],[utils_type.A.evaluate(a.min),utils_type.A.evaluate(a.start),utils_type.A.evaluate(a.max)]],a),s.inherits.push(s.bank_slide),s.board.highlightInfobox=function(t,e,i){var r,o,n,a,l,h,u='<span style="color:black; font-size:200%">⇄ </span>',c=i.board,d=null;for(s.isVerticalDrag()&&(u='<span style="color:black; font-size:200%">⇅ </span>'),o=0;o<i.parents.length&&!(d=c.objects[i.parents[o]]).is3D;o++);if(d){if(a=[1,0,0,d.coords[3]],s._w0=math.A.innerProduct(s.matrix3D[0],a,4),n=s.project2DTo3DPlane(d.element2D,[1,0,0,1],a),!s.isInCube(n))return void s.board.highlightCustomInfobox("",d);r=utils_type.A.evaluate(d.visProp.infoboxdigits),h=s.board.infobox,l="auto"===r?h.useLocale()?[u,"(",h.formatNumberLocale(d.X())," | ",h.formatNumberLocale(d.Y())," | ",h.formatNumberLocale(d.Z()),")"]:[u,"(",utils_type.A.autoDigits(d.X())," | ",utils_type.A.autoDigits(d.Y())," | ",utils_type.A.autoDigits(d.Z()),")"]:h.useLocale()?[u,"(",h.formatNumberLocale(d.X(),r)," | ",h.formatNumberLocale(d.Y(),r)," | ",h.formatNumberLocale(d.Z(),r),")"]:[u,"(",utils_type.A.toFixed(d.X(),r)," | ",utils_type.A.toFixed(d.Y(),r)," | ",utils_type.A.toFixed(d.Z(),r),")"],s.board.highlightCustomInfobox(l.join(""),d)}else s.board.highlightCustomInfobox("("+t+", "+e+")",i)},s.BOARD_MODE_NONE=0,env.A.addEvent(t.containerObj,"keydown",(function(t){var e,i=!1;!utils_type.A.evaluate(s.visProp.el.keyboard.enabled)||"ArrowUp"!==t.key&&"ArrowDown"!==t.key||("none"===(e=utils_type.A.evaluate(s.visProp.el.keyboard.key))||e.indexOf("shift")>-1&&t.shiftKey||e.indexOf("ctrl")>-1&&t.ctrlKey)&&(s._elEventHandler(t),i=!0),!utils_type.A.evaluate(s.visProp.el.keyboard.enabled)||"ArrowLeft"!==t.key&&"ArrowRight"!==t.key||("none"===(e=utils_type.A.evaluate(s.visProp.az.keyboard.key))||e.indexOf("shift")>-1&&t.shiftKey||e.indexOf("ctrl")>-1&&t.ctrlKey)&&(s._azEventHandler(t),i=!0),!utils_type.A.evaluate(s.visProp.bank.keyboard.enabled)||","!==t.key&&"<"!==t.key&&"."!==t.key&&">"!==t.key||("none"===(e=utils_type.A.evaluate(s.visProp.bank.keyboard.key))||e.indexOf("shift")>-1&&t.shiftKey||e.indexOf("ctrl")>-1&&t.ctrlKey)&&(s._bankEventHandler(t),i=!0),"PageUp"===t.key?(s.nextView(),i=!0):"PageDown"===t.key&&(s.previousView(),i=!0),i&&t.preventDefault()}),s),env.A.addEvent(t.containerObj,"pointerdown",s.pointerDownHandler,s),s.getAnglesFromSliders(),s.matrix3DRot=s.getRotationFromAngles(),s.updateAngleSliderBounds(),s.board.update(),s},jxg.A.registerElement("view3d",jxg.A.createView3D);var view3d=jxg.A.View3D;jxg.A.GeometryElement3D=function(t,e){this.elType=e,this.id=this.board.setId(this,e),this.view=t,this.element2D=null,this.is3D=!0,this.view.objects[this.id]=this,""!==this.name&&(this.view.elementsByName[this.name]=this)},jxg.A.extend(jxg.A.GeometryElement3D.prototype,{setAttr2D:function(t){var e=t;return e.name=this.name,e},setAttribute:function(t){var e,i,s,r,o,n={};for(e=0;e<arguments.length;e++)r=arguments[e],utils_type.A.isString(r)?(o=r.split(":"),n[utils_type.A.trim(o[0])]=utils_type.A.trim(o[1])):utils_type.A.isArray(r)?n[r[0]]=r[1]:jxg.A.extend(n,r);for(e in n)if(n.hasOwnProperty(e))switch(i=e.replace(/\s+/g,"").toLowerCase(),s=n[e],i){case"numberpointshigh":case"stepsu":case"stepsv":utils_type.A.exists(this.visProp[i])&&(!jxg.A.Validator[i]||jxg.A.Validator[i]&&jxg.A.Validator[i](s)||jxg.A.Validator[i]&&utils_type.A.isFunction(s)&&jxg.A.Validator[i](s()))&&(s=(!s.toLowerCase||"false"!==s.toLowerCase())&&s,this._set(i,s));break;default:utils_type.A.exists(this.element2D)&&this.element2D.setAttribute(n)}},getAttribute:function(t){var e;switch(t=t.toLowerCase()){case"numberpointshigh":case"stepsu":case"stepsv":e=this.visProp[t];break;default:utils_type.A.exists(this.element2D)&&(e=this.element2D.getAttribute(t))}return e},getAttributes:function(){var t,e,i={},s=["numberpointshigh","stepsu","stepsv"],r=s.length;for(utils_type.A.exists(this.element2D)&&(i=utils_type.A.merge(this.element2D.getAttributes())),t=0;t<r;t++)e=s[t],utils_type.A.exists(this.visProp[e])&&(i[e]=this.visProp[e]);return i},remove:function(){}});var element3d=jxg.A.GeometryElement3D;jxg.A.createAxes3D=function(t,e,i){var s,r,o,n,a,l,h,u,c,d,p,_,f,A,g,m,y,b=e[0],v=["x","y","z"],C="Axis",P=["Rear","Front"],x=[0,0,0],E=[0,0,0],O={};if(utils_type.A.exists(b.bbox3D))for(s=0;s<v.length;s++)x[s]=b.bbox3D[s][0],E[s]=b.bbox3D[s][1];else for(s=0;s<v.length;s++)x[s]=e[1][s],E[s]=e[2][1];for(h=(l=utils_type.A.copyAttributes(i,t.options,"axes3d")).axesposition,s=0;s<v.length;s++)g=(u=v[s])+C,"center"===h?(c=[0,0,0],(d=[0,0,0])[s]=E[s],O[g]=b.create("axis3d",[c,d],l[g.toLowerCase()]),O[g].view=b):(g+="Border",c=x.slice(),d=E.slice(),2===s?(c[1]=E[1],d[0]=x[0]):(c[s]=E[s],d[2]=x[2]),d[s]=E[s],l[g.toLowerCase()].lastArrow=!1,O[g]=b.create("axis3d",[c,d],l[g.toLowerCase()]),y={visible:!0,minorTicks:0,tickEndings:[0,1],drawLabels:!1},2===s&&(y.tickEndings=[1,0]),O[g+"Ticks"]=b.create("ticks",[O[g],1],y),O[g+"Ticks"].view=b);for(O.O=b.create("intersection",[O[v[0]+C],O[v[1]+C]],{name:"",visible:!1,withLabel:!1}),O.O.view=b,s=0;s<v.length;s++)for(n=(s+1)%3,a=(s+2)%3,u=v[s],r=0;r<P.length;r++)(c=[0,0,0])[s]=0===r?x[s]:E[s],_=[0,0,0],(p=[0,0,0])[n]=1,_[a]=1,f=[x[n],E[n]],A=[x[a],E[a]],g=u+"Plane"+P[r],l=utils_type.A.copyAttributes(i,t.options,"axes3d",g),O[g]=b.create("plane3d",[c,p,_,f,A],l),O[g].elType="axisplane3d";for(s=0;s<v.length;s++)for(u=v[s],r=0;r<P.length;r++)for(o=1;o<=2;o++)g=u+"Plane"+P[r]+v[n=(s+o)%3].toUpperCase()+"Axis",m=u+"Plane"+P[r],(c=[0,0,0])[s]=(d=[0,0,0])[s]=0===r?x[s]:E[s],c[n]=x[n],d[n]=E[n],l=utils_type.A.copyAttributes(i,t.options,"axes3d",g),O[g]=b.create("axis3d",[c,d],l),O[g].view=b,O[m].addChild(O[g]),O[m].element2D.inherits.push(O[g]);return O},jxg.A.registerElement("axes3d",jxg.A.createAxes3D),jxg.A.createAxis3D=function(t,e,i){var s,r,o,n,a,l,h=e[0],u=e[1],c=e[2];return s=utils_type.A.copyAttributes(i.point1,t.options,"axis3d","point1"),r=h.create("point",[(n=u[0],a=u[1],l=u[2],function(){return h.project3DTo2D(n,a,l)[1]}),function(t,e,i){return function(){return h.project3DTo2D(t,e,i)[2]}}(u[0],u[1],u[2])],s),s=utils_type.A.copyAttributes(i.point2,t.options,"axis3d","point2"),o=h.create("point",[function(t,e,i){return function(){return h.project3DTo2D(t,e,i)[1]}}(c[0],c[1],c[2]),function(t,e,i){return function(){return h.project3DTo2D(t,e,i)[2]}}(c[0],c[1],c[2])],s),s=utils_type.A.copyAttributes(i,t.options,"axis3d"),h.create("arrow",[r,o],s)},jxg.A.registerElement("axis3d",jxg.A.createAxis3D),jxg.A.createMesh3D=function(t,e,i){var s,r=e[0],o=e[1],n=e[2],a=e[3],l=e[4],h=e[5];return(s=r.create("curve",[[],[]],i)).updateDataArray=function(){var t,e,i,s,u=a[0],c=a[1],d=h[0],p=h[1],_=[0,0,0],f=[0,0,0],A=[0,0,0];if(this.dataX=[],this.dataY=[],utils_type.A.isFunction(o))A=o().slice(1);else for(s=0;s<3;s++)A[s]=utils_type.A.evaluate(o[s]);for(s=0;s<3;s++)_[s]=utils_type.A.evaluate(n[s]),f[s]=utils_type.A.evaluate(l[s]);for(t=jxg.A.Math.norm(_,3),e=jxg.A.Math.norm(f,3),s=0;s<3;s++)_[s]/=t,f[s]/=e;i=r.getMesh([function(t,e){return A[0]+t*_[0]+e*f[0]},function(t,e){return A[1]+t*_[1]+e*f[1]},function(t,e){return A[2]+t*_[2]+e*f[2]}],[Math.ceil(u),Math.floor(c),(Math.ceil(c)-Math.floor(u))/1],[Math.ceil(d),Math.floor(p),(Math.ceil(p)-Math.floor(d))/1]),this.dataX=i[0],this.dataY=i[1]},s},jxg.A.registerElement("mesh3d",jxg.A.createMesh3D),jxg.A.Circle3D=function(t,e,i,s,r){var o;this.constructor(t.board,r,constants.A.OBJECT_TYPE_CIRCLE3D,constants.A.OBJECT_CLASS_3D),this.constructor3D(t,"circle3d"),this.center=this.board.select(e),this.normal=[0,0,0],this.curve,this.frame1,this.frame2,this.updateNormal=function(){var t,e;for(t=0;t<3;t++)this.normal[t]=utils_type.A.evaluate(i[t]);if(e=math.A.norm(this.normal),Math.abs(e)>math.A.eps)for(t=0;t<3;t++)this.normal[t]/=e},utils_type.A.exists(this.center._is_new)?(this.addChild(this.center),delete this.center._is_new):this.center.addChild(this),this.updateRadius=utils_type.A.createFunction(s,this.board),this.addParentsFromJCFunctions([this.updateRadius]),this.updateNormal(),this.frame1=math.A.crossProduct(this.normal,[1,0,0]),o=math.A.crossProduct(this.normal,[-.5,.8660254037844386,0]),math.A.norm(o)>math.A.norm(this.frame1)&&(this.frame1=o),this.frame2=math.A.crossProduct(this.normal,this.frame1),this.normalizeFrame(),this.curve=t.create("curve3d",[t=>this.center.X()+this.Radius()*(Math.cos(t)*this.frame1[0]+Math.sin(t)*this.frame2[0]),t=>this.center.Y()+this.Radius()*(Math.cos(t)*this.frame1[1]+Math.sin(t)*this.frame2[1]),t=>this.center.Z()+this.Radius()*(Math.cos(t)*this.frame1[2]+Math.sin(t)*this.frame2[2]),[0,2*Math.PI]],r)},jxg.A.Circle3D.prototype=new jxg.A.GeometryElement,utils_type.A.copyPrototypeMethods(jxg.A.Circle3D,jxg.A.GeometryElement3D,"constructor3D"),jxg.A.extend(jxg.A.Circle3D.prototype,{update:function(){return this.updateNormal(),this.updateFrame(),this.curve.visProp.visible=!isNaN(this.Radius()),this},updateRenderer:function(){return this.needsUpdate=!1,this},setRadius:function(t){return this.updateRadius=utils_type.A.createFunction(t,this.board),this.addParentsFromJCFunctions([this.updateRadius]),this.board.update(),this},Radius:function(t){return utils_type.A.exists(t)?(this.setRadius(t),this.Radius()):Math.abs(this.updateRadius())},normalizeFrame:function(){var t,e=math.A.norm(this.frame1),i=math.A.norm(this.frame2);for(t=0;t<3;t++)this.frame1[t]/=e,this.frame2[t]/=i},updateFrame:function(){this.frame1=math.A.crossProduct(this.frame2,this.normal),this.frame2=math.A.crossProduct(this.normal,this.frame1),this.normalizeFrame()},projectCoords:function(t,e){return this.curve.projectCoords(t,e)},projectScreenCoords:function(t,e){return this.curve.projectScreenCoords(t,e)}}),jxg.A.createCircle3D=function(t,e,i){var s,r=e[0],o=utils_type.A.copyAttributes(i,t.options,"circle3d"),n=utils_type.A.providePoints3D(r,[e[1]],i,"line3d",["point"])[0],a=e[2],l=e[3];return(s=new jxg.A.Circle3D(r,n,a,l,o)).center.addChild(s),s.addChild(s.curve),s.update(),s},jxg.A.registerElement("circle3d",jxg.A.createCircle3D),jxg.A.createIntersectionCircle3D=function(t,e,i){var s,r,o,n=e[0],a=e[1],l=e[2],h=utils_type.A.copyAttributes(i,t.options,"intersectioncircle3d");o=geometry.A.intersectionFunction3D(n,a,l),r=n.create("point3d",o[0],{visible:!1}),s=n.create("circle3d",[r,o[1],o[2]],h);try{a.addChild(s),l.addChild(s)}catch(t){throw new Error("JSXGraph: Can't create 'intersection' with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.")}return s.type=constants.A.OBJECT_TYPE_INTERSECTION_CIRCLE3D,s.elType="intersectioncircle3d",s.setParents([a.id,l.id]),s},jxg.A.registerElement("intersectioncircle3d",jxg.A.createIntersectionCircle3D),jxg.A.Point3D=function(t,e,i,s){this.constructor(t.board,s,constants.A.OBJECT_TYPE_POINT3D,constants.A.OBJECT_CLASS_3D),this.constructor3D(t,"point3d"),this.board.finalizeAdding(this),t.visProp.depthorderpoints&&t.points.push(this),this.coords=[0,0,0,0],this.F=e,this.slide=i,this.X=function(){return this.coords[1]},this.Y=function(){return this.coords[2]},this.Z=function(){return this.coords[3]},this._params=[],this._c2d=null,this.methodMap=utils_type.A.deepCopy(this.methodMap,{})},jxg.A.Point3D.prototype=new jxg.A.GeometryElement,utils_type.A.copyPrototypeMethods(jxg.A.Point3D,jxg.A.GeometryElement3D,"constructor3D"),jxg.A.extend(jxg.A.Point3D.prototype,{updateCoords:function(){var t;if(utils_type.A.isFunction(this.F))this.coords=utils_type.A.evaluate(this.F),this.coords.unshift(1);else for(this.coords[0]=1,t=0;t<3;t++)utils_type.A.isFunction(this.F[t])&&(this.coords[t+1]=utils_type.A.evaluate(this.F[t]));return this},initCoords:function(){var t;if(utils_type.A.isFunction(this.F))this.coords=utils_type.A.evaluate(this.F),this.coords.unshift(1);else for(this.coords[0]=1,t=0;t<3;t++)this.coords[t+1]=utils_type.A.evaluate(this.F[t]);return this},normalizeCoords:function(){return Math.abs(this.coords[0])>math.A.eps&&(this.coords[1]/=this.coords[0],this.coords[2]/=this.coords[0],this.coords[3]/=this.coords[0],this.coords[0]=1),this},setPosition:function(t,e){var i=this.coords;return 3===t.length?(i[0]=1,i[1]=t[0],i[2]=t[1],i[3]=t[2]):(i[0]=t[0],i[1]=t[1],i[2]=t[2],i[3]=t[2],this.normalizeCoords()),this},update:function(t){var e,i;return this.element2D.draggable()&&0!==geometry.A.distance(this._c2d,this.element2D.coords.usrCoords)?this.slide?(this.coords=this.slide.projectScreenCoords([this.element2D.X(),this.element2D.Y()],this._params),this.element2D.coords.setCoordinates(constants.A.COORDS_BY_USER,this.view.project3DTo2D(this.coords))):(this.view.isVerticalDrag()?e=this.view.project2DTo3DVertical(this.element2D,this.coords):(i=[1,0,0,this.coords[3]],e=this.view.project2DTo3DPlane(this.element2D,[1,0,0,1],i)),0!==e[0]&&(this.coords=this.view.project3DToCube(e))):(this.updateCoords(),this.slide&&(this.coords=this.slide.projectCoords([this.X(),this.Y(),this.Z()],this._params)),this.element2D.coords.setCoordinates(constants.A.COORDS_BY_USER,this.view.project3DTo2D([1,this.X(),this.Y(),this.Z()]))),this._c2d=this.element2D.coords.usrCoords.slice(),this},updateRenderer:function(){return this.needsUpdate=!1,this},isIllDefined:function(){return utils_type.A.cmpArrays(this.coords,[0,0,0,0])},distance:function(t){var e=math.A.eps*math.A.eps,i=this.coords,s=t.coords;return i[0]*i[0]>e&&s[0]*s[0]>e?math.A.hypot(s[1]-i[1],s[2]-i[2],s[3]-i[3]):Number.POSITIVE_INFINITY},__evt__update3D:function(t){}}),jxg.A.createPoint3D=function(t,e,i){var s,r,o,n,a,l=e[0];if(o=e.length>2&&utils_type.A.exists(e[e.length-1].is3D)?e.pop():null,2===e.length)r=e[1];else{if(4!==e.length)throw new Error("JSXGraph: Can't create point3d with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.\nPossible parent types: [[x,y,z]], [x,y,z]");r=e.slice(1)}return s=utils_type.A.copyAttributes(i,t.options,"point3d"),(a=new jxg.A.Point3D(l,r,o,s)).initCoords(),n=l.project3DTo2D(a.coords),s=a.setAttr2D(s),a.element2D=l.create("point",n,s),a.element2D.view=l,a.addChild(a.element2D),a.inherits.push(a.element2D),a.element2D.setParents(a),a.slide&&(a.slide.addChild(a),a.setParents(a.slide)),a._c2d=a.element2D.coords.usrCoords.slice(),a},jxg.A.registerElement("point3d",jxg.A.createPoint3D),jxg.A.Curve3D=function(t,e,i,s,r,o,n){this.constructor(t.board,n,constants.A.OBJECT_TYPE_CURVE3D,constants.A.OBJECT_CLASS_3D),this.constructor3D(t,"curve3d"),this.board.finalizeAdding(this),this.F=e,this.X=i,this.Y=s,this.Z=r,this.dataX=null,this.dataY=null,this.dataZ=null,null!==this.F&&(this.X=function(t){return this.F(t)[0]},this.Y=function(t){return this.F(t)[1]},this.Z=function(t){return this.F(t)[2]}),this.range=o,this.methodMap=utils_type.A.deepCopy(this.methodMap,{})},jxg.A.Curve3D.prototype=new jxg.A.GeometryElement,utils_type.A.copyPrototypeMethods(jxg.A.Curve3D,jxg.A.GeometryElement3D,"constructor3D"),jxg.A.extend(jxg.A.Curve3D.prototype,{updateDataArray2D:function(){var t,e,i,s,r,o,n,a,l,h=utils_type.A.evaluate(this.visProp.numberpointshigh),u=[0,0,0];if(n=[],a=[],utils_type.A.exists(this.dataX))for(h=this.dataX.length,o=0;o<h;o++)u=[this.dataX[o],this.dataY[o],this.dataZ[o]],r=this.view.project3DTo2D(u),n.push(r[1]),a.push(r[2]);else if(utils_type.A.isArray(this.X))for(h=this.X.length,o=0;o<h;o++)u=[this.X[o],this.Y[o],this.Z[o]],r=this.view.project3DTo2D(u),n.push(r[1]),a.push(r[2]);else for(t=utils_type.A.evaluate(this.range),e=utils_type.A.evaluate(t[0]),s=((i=utils_type.A.evaluate(t[1]))-e)/(h-1),l=0,o=e;l<h&&o<=i;l++,o+=s)u=null!==this.F?this.F(o):[this.X(o),this.Y(o),this.Z(o)],r=this.view.project3DTo2D(u),n.push(r[1]),a.push(r[2]);return{X:n,Y:a}},updateDataArray:function(){},update:function(){return this.updateDataArray(),this},updateRenderer:function(){return this.needsUpdate=!1,this},initParamsIfNeeded:function(t){0===t.length&&t.unshift(.5*(this.range[0]+this.range[1]))},projectCoords:function(t,e){return this.initParamsIfNeeded(e),geometry.A.projectCoordsToParametric(t,this,e)},projectScreenCoords:function(t,e){return this.initParamsIfNeeded(e),geometry.A.projectScreenCoordsToParametric(t,this,e)}}),jxg.A.createCurve3D=function(t,e,i){var s,r,o,n,a,l,h,u=e[0];return 3===e.length?(s=e[1],a=e[2],r=null,o=null,n=null):(r=e[1],o=e[2],n=e[3],a=e[4],s=null),l=utils_type.A.copyAttributes(i,t.options,"curve3d"),l=(h=new jxg.A.Curve3D(u,s,r,o,n,a,l)).setAttr2D(l),h.element2D=u.create("curve",[[],[]],l),h.element2D.view=u,h.element2D.updateDataArray=function(){var t=h.updateDataArray2D();this.dataX=t.X,this.dataY=t.Y},h.addChild(h.element2D),h.inherits.push(h.element2D),h.element2D.setParents(h),h.element2D.prepareUpdate().update(),t.isSuspendedUpdate||h.element2D.updateVisibility().updateRenderer(),h},jxg.A.registerElement("curve3d",jxg.A.createCurve3D),jxg.A.createVectorfield3D=function(t,e,i){var s,r,o=e[0];if(!(e.length>=5&&(utils_type.A.isArray(e[1])||utils_type.A.isFunction(e[0])||utils_type.A.isString(e[0]))&&utils_type.A.isArray(e[2])&&3===e[1].length&&utils_type.A.isArray(e[3])&&3===e[2].length&&utils_type.A.isArray(e[4])&&3===e[3].length))throw new Error("JSXGraph: Can't create vector field 3D with parent types '"+typeof e[0]+"', '"+typeof e[1]+"', '"+typeof e[2]+"'.'"+typeof e[1]+"', ");return r=utils_type.A.copyAttributes(i,t.options,"vectorfield3d"),(s=o.create("curve3d",[[],[],[]],r)).setF=function(t,e){var i,r,o;return utils_type.A.isArray(t)?(i=utils_type.A.createFunction(t[0],this.board,e),r=utils_type.A.createFunction(t[1],this.board,e),o=utils_type.A.createFunction(t[2],this.board,e),this.F=function(t,e,s){return[i(t,e,s),r(t,e,s),o(t,e,s)]}):this.F=utils_type.A.createFunction(t,s.board,e),this},s.setF(e[1],"x, y, z"),s.xData=e[2],s.yData=e[3],s.zData=e[4],s.updateDataArray=function(){var e,i,s,r,o,n,a,l,h,u,c,d,p,_,f,A,g,m=utils_type.A.evaluate(this.visProp.scale),y=[utils_type.A.evaluate(this.xData[0]),utils_type.A.evaluate(this.yData[0]),utils_type.A.evaluate(this.zData[0])],b=[utils_type.A.evaluate(this.xData[1]),utils_type.A.evaluate(this.yData[1]),utils_type.A.evaluate(this.zData[1])],v=[utils_type.A.evaluate(this.xData[2]),utils_type.A.evaluate(this.yData[2]),utils_type.A.evaluate(this.zData[2])],C=[(v[0]-y[0])/b[0],(v[1]-y[1])/b[1],(v[2]-y[2])/b[2]],P=utils_type.A.evaluate(this.visProp.arrowhead.enabled);for(P&&(p=utils_type.A.evaluate(this.visProp.arrowhead.size),g=utils_type.A.evaluate(this.visProp.arrowhead.angle),_=p/t.unitX,f=p/t.unitY,A=p/Math.sqrt(t.unitX*t.unitY)),this.dataX=[],this.dataY=[],this.dataZ=[],i=0,n=y[0];i<=b[0];n+=C[0],i++)for(s=0,a=y[1];s<=b[1];a+=C[1],s++)for(e=0,l=y[2];e<=b[2];l+=C[2],e++)r=this.F(n,a,l),(o=math.A.norm(r))<Number.EPSILON||(r[0]*=m,r[1]*=m,r[2]*=m,utils_type.A.concat(this.dataX,[n,n+r[0],NaN]),utils_type.A.concat(this.dataY,[a,a+r[1],NaN]),utils_type.A.concat(this.dataZ,[l,l+r[2],NaN]),P&&(o*=m,h=Math.atan2(r[1],r[0]),u=(d=Math.asin(r[2]/o))-g,c=d+g,utils_type.A.concat(this.dataX,[n+r[0]-_*Math.cos(h)*Math.cos(u),n+r[0],n+r[0]-_*Math.cos(h)*Math.cos(c),NaN]),utils_type.A.concat(this.dataY,[a+r[1]-f*Math.sin(h)*Math.cos(u),a+r[1],a+r[1]-f*Math.sin(h)*Math.cos(c),NaN]),utils_type.A.concat(this.dataZ,[l+r[2]-A*Math.sin(c),l+r[2],l+r[2]-A*Math.sin(u),NaN])))},s.methodMap=utils_type.A.deepCopy(s.methodMap,{setF:"setF"}),s},jxg.A.registerElement("vectorfield3D",jxg.A.createVectorfield3D),jxg.A.Line3D=function(t,e,i,s,r){this.constructor(t.board,r,constants.A.OBJECT_TYPE_LINE3D,constants.A.OBJECT_CLASS_3D),this.constructor3D(t,"line3d"),this.board.finalizeAdding(this),this.point=e,this.direction=i,this.range=s||[-1/0,1/0],this.point1=null,this.point2=null,this.methodMap=utils_type.A.deepCopy(this.methodMap,{})},jxg.A.Line3D.prototype=new jxg.A.GeometryElement,utils_type.A.copyPrototypeMethods(jxg.A.Line3D,jxg.A.GeometryElement3D,"constructor3D"),jxg.A.extend(jxg.A.Line3D.prototype,{getPointCoords:function(t){var e,i,s,r=[];if(e=[this.point.X(),this.point.Y(),this.point.Z()],utils_type.A.isFunction(this.direction))r=this.direction();else for(i=1;i<4;i++)r.push(utils_type.A.evaluate(this.direction[i]));return s=utils_type.A.evaluate(t),t=this.view.intersectionLineCube(e,r,s),[e[0]+r[0]*t,e[1]+r[1]*t,e[2]+r[2]*t]},update:function(){return this},updateRenderer:function(){return this.needsUpdate=!1,this},projectCoords:function(t){var e,i=this.getPointCoords(0),s=this.getPointCoords(1),r=[s[0]-i[0],s[1]-i[1],s[2]-i[2]],o=[t[0]-i[0],t[1]-i[1],t[2]-i[2]],n=math.A.innerProduct(o,r)/math.A.innerProduct(r,r),a=Math.min(Math.max(n,this.range[0]),this.range[1]);return(e=this.getPointCoords(a).slice()).unshift(1),e},projectScreenCoords:function(t){var e=this.getPointCoords(0),i=this.getPointCoords(1);return this.view.projectScreenToSegment(t,e,i)}}),jxg.A.createLine3D=function(t,e,i){var s,r,o,n,a,l,h,u,c,d=e[0];return s=utils_type.A.copyAttributes(i,t.options,"line3d"),utils_type.A.isPoint3D(e[2])||3===e.length&&(utils_type.A.isArray(e[2])||utils_type.A.isFunction(e[2]))?(l=utils_type.A.providePoints3D(d,[e[1]],i,"line3d",["point1"])[0],h=utils_type.A.providePoints3D(d,[e[2]],i,"line3d",["point2"])[0],n=function(){return[h.X()-l.X(),h.Y()-l.Y(),h.Z()-l.Z()]},a=[0,1],c=new jxg.A.Line3D(d,l,n,a,s),(u=utils_type.A.providePoints3D(d,[[0,0,0],[0,0,0]],{visible:!1},"line3d",["point1","point2"]))[0].F=function(){var t=0;return utils_type.A.evaluate(c.visProp.straightfirst)&&(t=-1/0),c.getPointCoords(t)},u[1].F=function(){var t=1;return utils_type.A.evaluate(c.visProp.straightlast)&&(t=1/0),c.getPointCoords(t)},u[0].prepareUpdate().update(),u[1].prepareUpdate().update(),(s=c.setAttr2D(s)).straightfirst=!1,s.straightlast=!1,c.element2D=d.create("segment",[u[0].element2D,u[1].element2D],s),c.element2D.view=d,c.endpoints=u,c.addChild(u[0]),c.addChild(u[1]),c.setParents(u)):(o=utils_type.A.providePoints3D(d,[e[1]],i,"line3d",["point"])[0],utils_type.A.isFunction(e[2])?n=e[2]:3===e[2].length?n=[1].concat(e[2]):4===e[2].length&&(n=e[2]),a=e[3],r=utils_type.A.providePoints3D(d,[[0,0,0],[0,0,0]],i,"line3d",["point1","point2"]),c=new jxg.A.Line3D(d,o,n,a,s),r[0].F=function(){return c.getPointCoords(utils_type.A.evaluate(c.range[0]))},r[0].prepareUpdate().update(),l=r[0],r[1].F=function(){return c.getPointCoords(utils_type.A.evaluate(c.range[1]))},r[1].prepareUpdate().update(),h=r[1],(s=c.setAttr2D(s)).straightfirst=!1,s.straightlast=!1,c.element2D=d.create("segment",[l.element2D,h.element2D],s),c.element2D.view=d,c.endpoints=r),c.addChild(c.element2D),c.inherits.push(c.element2D),c.element2D.setParents(c),c.point1=l,c.point2=h,c.point1._is_new?(c.addChild(c.point1),delete c.point1._is_new):c.point1.addChild(c),c.point2._is_new?(c.addChild(c.point2),delete c.point2._is_new):c.point2.addChild(c),utils_type.A.exists(o)&&(o._is_new?(c.addChild(o),delete o._is_new):o.addChild(c)),c.update(),c.element2D.prepareUpdate().update().updateRenderer(),c},jxg.A.registerElement("line3d",jxg.A.createLine3D),jxg.A.Plane3D=function(t,e,i,s,r,o,n){this.constructor(t.board,n,constants.A.OBJECT_TYPE_PLANE3D,constants.A.OBJECT_CLASS_3D),this.constructor3D(t,"plane3d"),this.board.finalizeAdding(this),this.point=e,this.direction1=i,this.direction2=r,this.range1=s||[-1/0,1/0],this.range2=o||[-1/0,1/0],this.vec1=[0,0,0],this.vec2=[0,0,0],this.grid=null,this.normal=[0,0,0],this.d=0,this.updateNormal(),this.methodMap=utils_type.A.deepCopy(this.methodMap,{})},jxg.A.Plane3D.prototype=new jxg.A.GeometryElement,utils_type.A.copyPrototypeMethods(jxg.A.Plane3D,jxg.A.GeometryElement3D,"constructor3D"),jxg.A.extend(jxg.A.Plane3D.prototype,{updateNormal:function(){var t,e;for(t=0;t<3;t++)this.vec1[t]=utils_type.A.evaluate(this.direction1[t]),this.vec2[t]=utils_type.A.evaluate(this.direction2[t]);if(this.normal=math.A.crossProduct(this.vec1,this.vec2),e=math.A.norm(this.normal),Math.abs(e)>math.A.eps)for(t=0;t<3;t++)this.normal[t]/=e;return this.d=math.A.innerProduct(this.point.coords.slice(1),this.normal,3),this},updateDataArray:function(){var t,e,i,s,r,o,n,a,l,h,u,c,d,p,_=["xPlaneRear","yPlaneRear","zPlaneRear"],f=[],A=[0,0,0],g=[0,0,0],m=[0,0,0],y=[0,0,0],b=this.view;if(this.dataX=[],this.dataY=[],this.updateNormal(),"axisplane3d"!==this.elType&&b.defaultAxes&&utils_type.A.evaluate(this.range1[0])===-1/0&&utils_type.A.evaluate(this.range1[1])===1/0&&utils_type.A.evaluate(this.range2[0])===-1/0&&utils_type.A.evaluate(this.range2[1])===1/0){for(h=0;h<_.length;h++){if(3===(y=b.intersectionPlanePlane(this,b.defaultAxes[_[h]]))[0].length&&3===y[1].length){for(l=0;l<f.length&&!(geometry.A.distance(y[0],f[l][0],3)<math.A.eps&&geometry.A.distance(y[1],f[l][1],3)<math.A.eps||geometry.A.distance(y[0],f[l][1],3)<math.A.eps&&geometry.A.distance(y[1],f[l][0],3)<math.A.eps);l++);l===f.length&&f.push(y.slice())}if((y=[0,0,0])[h]=b.bbox3D[h][1],a=math.A.innerProduct(y,b.defaultAxes[_[h]].normal,3),3===(y=b.intersectionPlanePlane(this,b.defaultAxes[_[h]],a))[0].length&&3===y[1].length){for(l=0;l<f.length&&!(geometry.A.distance(y[0],f[l][0],3)<math.A.eps&&geometry.A.distance(y[1],f[l][1],3)<math.A.eps||geometry.A.distance(y[0],f[l][1],3)<math.A.eps&&geometry.A.distance(y[1],f[l][0],3)<math.A.eps);l++);l===f.length&&f.push(y.slice())}}d=0,l=0;do{for(3===(y=f[d][l]).length&&(r=b.project3DTo2D(y),this.dataX.push(r[1]),this.dataY.push(r[2])),l=(l+1)%2,y=f[d][l],p=d,h=0;h<f.length;h++){if(h!==d&&geometry.A.distance(y,f[h][0])<math.A.eps){d=h,l=0;break}if(h!==d&&geometry.A.distance(y,f[h][1])<math.A.eps){d=h,l=1;break}}if(d===p){console.log("Error: update plane3d: did not find next",d);break}}while(0!==d);r=b.project3DTo2D(f[0][0]),this.dataX.push(r[1]),this.dataY.push(r[2])}else{for(t=utils_type.A.evaluate(this.range1[0]),e=utils_type.A.evaluate(this.range1[1]),i=utils_type.A.evaluate(this.range2[0]),s=utils_type.A.evaluate(this.range2[1]),m=this.point.coords.slice(1),A=this.vec1.slice(),g=this.vec2.slice(),o=math.A.norm(A,3),n=math.A.norm(g,3),l=0;l<3;l++)A[l]/=o,g[l]/=n;for(h=0;h<4;h++){switch(h){case 0:u=t,c=i;break;case 1:u=e,c=i;break;case 2:u=e,c=s;break;case 3:u=t,c=s}for(l=0;l<3;l++)y[l]=m[l]+u*A[l]+c*g[l];r=b.project3DTo2D(y),this.dataX.push(r[1]),this.dataY.push(r[2])}this.dataX.push(this.dataX[0]),this.dataY.push(this.dataY[0])}return{X:this.dataX,Y:this.dataY}},update:function(){return this},updateRenderer:function(){return this.needsUpdate=!1,this}}),jxg.A.createPlane3D=function(t,e,i){var s,r,o,n,a=e[0],l=e[2],h=e[3],u=e[4]||[-1/0,1/0],c=e[5]||[-1/0,1/0];return r=utils_type.A.providePoints3D(a,[e[1]],i,"plane3d",["point"])[0],s=utils_type.A.copyAttributes(i,t.options,"plane3d"),o=new jxg.A.Plane3D(a,r,l,u,h,c,s),r.addChild(o),s=o.setAttr2D(s),o.element2D=a.create("curve",[[],[]],s),o.element2D.view=a,o.element2D.updateDataArray=function(){var t=o.updateDataArray();this.dataX=t.X,this.dataY=t.Y},o.addChild(o.element2D),o.inherits.push(o.element2D),o.element2D.setParents(o),s=utils_type.A.copyAttributes(i.mesh3d,t.options,"mesh3d"),Math.abs(o.range1[0])!==1/0&&Math.abs(o.range1[1])!==1/0&&Math.abs(o.range2[0])!==1/0&&Math.abs(o.range2[1])!==1/0&&(n=a.create("mesh3d",[function(){return r.coords},l,u,h,c],s),o.grid=n,o.addChild(n),o.inherits.push(n),n.setParents(o),o.grid.view=a),o.element2D.prepareUpdate().update(),t.isSuspendedUpdate||o.element2D.updateVisibility().updateRenderer(),o},jxg.A.registerElement("plane3d",jxg.A.createPlane3D),jxg.A.createIntersectionLine3D=function(t,e,i){var s,r,o,n=e[0],a=e[1],l=e[2],h=utils_type.A.copyAttributes(i,t.options,"intersectionline3d"),u=[];for(r=0;r<2;r++)o=geometry.A.intersectionFunction3D(n,a,l,r),u[r]=n.create("point3d",o,h["point"+(r+1)]);s=n.create("line3d",u,h);try{a.addChild(s),l.addChild(s)}catch(t){throw new Error("JSXGraph: Can't create 'intersection' with parent types '"+typeof e[0]+"' and '"+typeof e[1]+"'.")}return s.type=constants.A.OBJECT_TYPE_INTERSECTION_LINE3D,s.elType="intersectionline3d",s.setParents([a.id,l.id]),s},jxg.A.registerElement("intersectionline3d",jxg.A.createIntersectionLine3D),jxg.A.Polygon3D=function(t,e,i){var s;for(this.constructor(t.board,i,constants.A.OBJECT_TYPE_POLYGON3D,constants.A.OBJECT_CLASS_3D),this.constructor3D(t,"polygon3d"),this.board.finalizeAdding(this),this.vertices=[],s=0;s<e.length;s++)this.vertices[s]=this.board.select(e[s]),this.vertices[s]._is_new&&(delete this.vertices[s]._is_new,this.vertices[s]._is_new_pol=!0)},jxg.A.Polygon3D.prototype=new jxg.A.GeometryElement,utils_type.A.copyPrototypeMethods(jxg.A.Polygon3D,jxg.A.GeometryElement3D,"constructor3D"),jxg.A.extend(jxg.A.Polygon3D.prototype,{update:function(){return this},updateRenderer:function(){return this.needsUpdate=!1,this}}),jxg.A.createPolygon3D=function(t,e,i){var s,r,o,n,a,l,h=e[0],u=[],c=[],d=!1;if(a=utils_type.A.copyAttributes(i,t.options,"polygon3d"),null===(n=t.select(e[1]))&&(n=e[1]),utils_type.A.isObject(n)&&n.type===constants.A.OBJECT_TYPE_POLYGON3D&&utils_type.A.isTransformationOrArray(e[2]))for(d=!0,o=n.vertices.length-1,l=utils_type.A.copyAttributes(i,t.options,"polygon3d","vertices"),r=0;r<o;r++)l.withlabel&&(l.name=""===n.vertices[r].name?"":n.vertices[r].name+"'"),u.push(t.create("point3d",[n.vertices[r],e[2]],l));else if(!1===(u=utils_type.A.providePoints3D(h,e.slice(1),i,"polygon3d",["vertices"])))throw new Error("JSXGraph: Can't create polygon3d with parent types other than 'point' and 'coordinate arrays' or a function returning an array of coordinates. Alternatively, a polygon3d and a transformation can be supplied");for((s=new jxg.A.Polygon3D(h,u,a)).isDraggable=!0,a=s.setAttr2D(a),r=0;r<u.length;r++)c.push(u[r].element2D);if(s.element2D=t.create("polygon",c,a),s.element2D.view=h,s.addChild(s.element2D),s.inherits.push(s.element2D),s.element2D.setParents(s),d)for(s.prepareUpdate().update().updateVisibility().updateRenderer(),o=n.vertices.length-1,r=0;r<o;r++)u[r].prepareUpdate().update().updateVisibility().updateRenderer();return s},jxg.A.registerElement("polygon3d",jxg.A.createPolygon3D),jxg.A.Sphere3D=function(t,e,i,s,r){this.constructor(t.board,r,constants.A.OBJECT_TYPE_SPHERE3D,constants.A.OBJECT_CLASS_3D),this.constructor3D(t,"sphere3d"),this.board.finalizeAdding(this),this.method=e,this.center=this.board.select(i),this.point2=null,this.points=[],this.element2D=null,this.aux2D=[],this.projectionType=t.projectionType,"twoPoints"===e?(this.point2=this.board.select(s),this.radius=this.Radius()):"pointRadius"===e&&(this.updateRadius=utils_type.A.createFunction(s,this.board),this.updateRadius(),this.addParentsFromJCFunctions([this.updateRadius])),utils_type.A.exists(this.center._is_new)?(this.addChild(this.center),delete this.center._is_new):this.center.addChild(this),"twoPoints"===e&&(utils_type.A.exists(this.point2._is_new)?(this.addChild(this.point2),delete this.point2._is_new):this.point2.addChild(this)),this.methodMap=utils_type.A.deepCopy(this.methodMap,{center:"center",point2:"point2",Radius:"Radius"})},jxg.A.Sphere3D.prototype=new jxg.A.GeometryElement,utils_type.A.copyPrototypeMethods(jxg.A.Sphere3D,jxg.A.GeometryElement3D,"constructor3D"),jxg.A.extend(jxg.A.Sphere3D.prototype,{update:function(){return this.projectionType!==this.view.projectionType&&this.rebuildProjection(),this},updateRenderer:function(){return this.needsUpdate=!1,this},setRadius:function(t){return this.updateRadius=utils_type.A.createFunction(t,this.board),this.addParentsFromJCFunctions([this.updateRadius]),this.board.update(),this},Radius:function(t){return utils_type.A.exists(t)?(this.setRadius(t),this.Radius()):"twoPoints"===this.method?this.center.isIllDefined()||this.point2.isIllDefined()?NaN:this.center.distance(this.point2):"pointRadius"===this.method?Math.abs(this.updateRadius()):NaN},focusFn:function(t){var e=this;return function(){var i=e.view.boxToCam[3],s=e.Radius();return e.view.project3DTo2D([e.center.X()+t*s*i[1],e.center.Y()+t*s*i[2],e.center.Z()+t*s*i[3]]).slice(1,3)}},innerVertexFn:function(){var t=this;return function(){var e=t.view,i=e.worldToFocal(t.center.coords,!1),s=math.A.hypot(i[0],i[1]),r=e.boxToCam,o=[-(i[0]*r[1][1]+i[1]*r[2][1])/s,-(i[0]*r[1][2]+i[1]*r[2][2])/s,-(i[0]*r[1][3]+i[1]*r[2][3])/s],n=t.Radius(),a=Math.atan(-s/i[2])+Math.acos(n/math.A.norm(i)),l=Math.cos(a),h=Math.sin(a);return e.project3DTo2D([t.center.X()+n*(h*o[0]+l*r[3][1]),t.center.Y()+n*(h*o[1]+l*r[3][2]),t.center.Z()+n*(h*o[2]+l*r[3][3])])}},buildCentralProjection:function(){var t=this.view,e={visible:!1,withLabel:!1},i=t.create("point",this.focusFn(-1),e),s=t.create("point",this.focusFn(1),e),r=t.create("point",this.innerVertexFn(t),e);this.aux2D=[i,s,r],this.element2D=t.create("ellipse",this.aux2D,this.visProp)},buildParallelProjection:function(){var t=this;this.aux2D=[],this.element2D=this.view.create("circle",[function(){var e=[1,t.center.X(),t.center.Y(),t.center.Z()];return t.view.project3DTo2D(e)},function(){var e=t.view.bbox3D[0][1]-t.view.bbox3D[0][0];return t.Radius()*t.view.size[0]/e}],this.visProp)},rebuildProjection:function(){var t;if(this.element2D)for(t in this.view.board.removeObject(this.element2D),this.aux2D)this.aux2D.hasOwnProperty(t)&&this.view.board.removeObject(this.aux2D[t]);this.projectionType=this.view.projectionType,"central"===this.projectionType?this.buildCentralProjection():this.buildParallelProjection(),this.addChild(this.element2D),this.inherits.push(this.element2D),this.element2D.view=this.view}}),jxg.A.createSphere3D=function(t,e,i){var s,r,o,n,a,l,h=e[0];for(s=utils_type.A.copyAttributes(i,t.options,"sphere3d"),r=[],l=1;l<e.length;l++)if(utils_type.A.isPointType3D(t,e[l])){if(o=0===r.length?"center":"point",!1===(n=utils_type.A.providePoints3D(h,[e[l]],i,"sphere3d",[o])[0]))throw new Error("JSXGraph: Can't create sphere3d from this type. Please provide a point type.");r.push(n)}else r.push(e[l]);if(utils_type.A.isPoint3D(r[0])&&utils_type.A.isPoint3D(r[1]))a=new jxg.A.Sphere3D(h,"twoPoints",r[0],r[1],s);else if((utils_type.A.isNumber(r[0])||utils_type.A.isFunction(r[0])||utils_type.A.isString(r[0]))&&utils_type.A.isPoint3D(r[1]))a=new jxg.A.Sphere3D(h,"pointRadius",r[1],r[0],s);else{if(!(utils_type.A.isNumber(r[1])||utils_type.A.isFunction(r[1])||utils_type.A.isString(r[1]))||!utils_type.A.isPoint3D(r[0]))throw new Error("JSXGraph: Can't create sphere3d with parent types '"+typeof e[1]+"' and '"+typeof e[2]+"'.\nPossible parent types: [point,point], [point,number], [point,function]");a=new jxg.A.Sphere3D(h,"pointRadius",r[0],r[1],s)}return a.rebuildProjection(),a.element2D.prepareUpdate().update().updateRenderer(),a},jxg.A.registerElement("sphere3d",jxg.A.createSphere3D),jxg.A.Surface3D=function(t,e,i,s,r,o,n,a){this.constructor(t.board,a,constants.A.OBJECT_TYPE_SURFACE3D,constants.A.OBJECT_CLASS_3D),this.constructor3D(t,"surface3d"),this.board.finalizeAdding(this),this.F=e,this.X=i,this.Y=s,this.Z=r,null!==this.F&&(this.X=function(t,e){return this.F(t,e)[0]},this.Y=function(t,e){return this.F(t,e)[1]},this.Z=function(t,e){return this.F(t,e)[2]}),this.range_u=o,this.range_v=n,this.methodMap=utils_type.A.deepCopy(this.methodMap,{})},jxg.A.Surface3D.prototype=new jxg.A.GeometryElement,utils_type.A.copyPrototypeMethods(jxg.A.Surface3D,jxg.A.GeometryElement3D,"constructor3D"),jxg.A.extend(jxg.A.Surface3D.prototype,{updateDataArray:function(){var t,e,i=utils_type.A.evaluate(this.visProp.stepsu),s=utils_type.A.evaluate(this.visProp.stepsv),r=utils_type.A.evaluate(this.range_u),o=utils_type.A.evaluate(this.range_v);return t=null!==this.F?this.F:[this.X,this.Y,this.Z],r.push(i),o.push(s),{X:(e=this.view.getMesh(t,r,o))[0],Y:e[1]}},update:function(){return this},updateRenderer:function(){return this.needsUpdate=!1,this},initParamsIfNeeded:function(t){0===t.length&&t.unshift(.5*(this.range_u[0]+this.range_u[1]),.5*(this.range_v[0]+this.range_v[1]))},projectCoords:function(t,e){return this.initParamsIfNeeded(e),geometry.A.projectCoordsToParametric(t,this,e)},projectScreenCoords:function(t,e){return this.initParamsIfNeeded(e),geometry.A.projectScreenCoordsToParametric(t,this,e)}}),jxg.A.createParametricSurface3D=function(t,e,i){var s,r,o,n,a,l,h,u,c=e[0];return 4===e.length?(s=e[1],a=e[2],l=e[3],r=null,o=null,n=null):(r=e[1],o=e[2],n=e[3],a=e[4],l=e[5],s=null),h=utils_type.A.copyAttributes(i,t.options,"surface3d"),h=(u=new jxg.A.Surface3D(c,s,r,o,n,a,l,h)).setAttr2D(h),u.element2D=c.create("curve",[[],[]],h),u.element2D.view=c,u.element2D.updateDataArray=function(){var t=u.updateDataArray();this.dataX=t.X,this.dataY=t.Y},u.addChild(u.element2D),u.inherits.push(u.element2D),u.element2D.setParents(u),u.element2D.prepareUpdate().update(),t.isSuspendedUpdate||u.element2D.updateVisibility().updateRenderer(),u},jxg.A.registerElement("parametricsurface3d",jxg.A.createParametricSurface3D),jxg.A.createFunctiongraph3D=function(t,e,i){var s=e[0],r=e[1],o=e[2],n=e[3];return s.create("parametricsurface3d",[function(t,e){return t},function(t,e){return e},r,o,n],i)},jxg.A.registerElement("functiongraph3d",jxg.A.createFunctiongraph3D);let size=.75,color="#000";jxg.A.themes.mono_thin={board:{showInfobox:!1,showCopyright:!0,defaultAxes:{x:{ticks:{minorTicks:0,majorHeight:10,majorTickEndings:[1,0]}},y:{ticks:{minorTicks:0,majorHeight:10,majorTickEndings:[0,1]}}}},navbar:{strokeColor:"#bbb",fillColor:"none"},elements:{strokeColor:color,highlightStrokeColor:color,fillColor:"none",highlightFillColor:"none",strokeOpacity:.6,highlightStrokeOpacity:1},angle:{strokeColor:color,fillColor:"#aaaaaa55",fillOpacity:.3,highlightFillColor:"#aaaaaa33",highlightFillOpacity:.3,label:{strokeColor:color}},arc:{strokeColor:color,strokeWidth:size,highlightStrokeColor:color,highlightStrokeWidth:size},axis:{},boxplot:{strokeWidth:size,strokeColor:color,fillColor:color,fillOpacity:.2,highlightStrokeWidth:size,highlightStrokeColor:color,highlightFillColor:color,highlightFillOpacity:.1},circle:{strokeWidth:size,highlightStrokeWidth:1.5*size,strokeColor:color,highlightFillColor:"none",highlightStrokeColor:color,center:{size:size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color},point2:{size:size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color}},circumcircle:{strokeWidth:size,highlightStrokeWidth:1.5*size,strokeColor:color,highlightFillColor:"none",highlightStrokeColor:color,center:{size:size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color}},circumcirclearc:{strokeColor:color,strokeWidth:size,highlightStrokeColor:color,highlightStrokeWidth:size},circumcirclesector:{strokeColor:color,fillColor:"#aaaaaa55",fillOpacity:.3,highlightFillColor:"#aaaaaa33",highlightFillOpacity:.3},comb:{strokeColor:color,strokeWidth:size},conic:{strokeWidth:size,highlightStrokeWidth:1.5*size,strokeColor:color,highlightStrokeColor:color,fillColor:"none",highlightFillColor:"none"},curve:{strokeColor:color,strokeWidth:size,highlightStrokeColor:color,highlightStrokeWidth:size},grid:{strokeWidth:size},hatch:{strokeColor:color,strokeWidth:size},incircle:{strokeWidth:size,highlightStrokeWidth:1.5*size,strokeColor:color,highlightFillColor:"none",highlightStrokeColor:color,center:{size:size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color}},inequality:{fillColor:"#aaaaaa55",fillOpacity:.2},label:{strokeColor:color},line:{strokeColor:color,strokeWidth:size,highlightStrokeColor:color,highlightStrokeWidth:size,point1:{size:size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color},point2:{size:size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color}},normal:{strokeColor:color},parallel:{strokeColor:color},perpendicular:{strokeColor:color},perpendicularsegment:{strokeColor:color},point:{size:size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color},polygon:{fillColor:"#aaaaaa55",highlightFillColor:"#aaaaaa33",fillOpacity:.3,highlightFillOpacity:.3,vertices:{size:size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color},borders:{strokeColor:color,strokeWidth:size,highlightStrokeColor:color,highlightStrokeWidth:size}},sector:{strokeColor:color,fillColor:"#aaaaaa55",fillOpacity:.3,highlightFillColor:"#aaaaaa33",highlightFillOpacity:.3},semicircle:{center:{size:size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color}},slider:{size:size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color,baseline:{strokeWidth:size,strokeColor:color,highlightStrokeColor:color},label:{strokeColor:color},highline:{strokeWidth:3*size,name:"",strokeColor:color,highlightStrokeColor:color},ticks:{strokeColor:color}},slopefield:{strokeWidth:.75*size,highlightStrokeWidth:size,highlightStrokeColor:color,highlightStrokeOpacity:.8},tapemeasure:{strokeColor:color,strokeWidth:size,highlightStrokeColor:color,highlightStrokeWidth:size,point1:{size:size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color},point2:{size:size,fillColor:color,strokeColor:color,highlightStrokeWidth:4*size,highlightFillColor:color,highlightStrokeColor:color},ticks:{strokeWidth:size}},text:{strokeColor:color},tracecurve:{strokeColor:color},turtle:{strokeWidth:size,strokeColor:color,arrow:{strokeWidth:2*size,strokeColor:"#aaaaaa55"}},vectorfield:{strokeWidth:.75*size,highlightStrokeWidth:size,highlightStrokeColor:color,highlightStrokeOpacity:.8}};var mono_thin=null;const COORDS_BY_SCREEN=jxg.A.COORDS_BY_SCREEN,COORDS_BY_USER=jxg.A.COORDS_BY_USER,Dump=jxg.A.Dump,Expect=jxg.A.Expect,JSXGraph=jxg.A.JSXGraph,Mat=jxg.A.Math,Options=jxg.A.Options,boards=jxg.A.boards,src_elements=jxg.A.elements,palette=jxg.A.palette,paletteWong=jxg.A.paletteWong,Board=jxg.A.Board,Chart=jxg.A.Chart,Circle=jxg.A.Circle,Complex=jxg.A.Complex,Composition=jxg.A.Composition,Coords=jxg.A.Coords,CoordsElement=jxg.A.CoordsElement,Curve=jxg.A.Curve,GeometryElement=jxg.A.GeometryElement,Group=jxg.A.Group,src_Image=jxg.A.Image,JessieCode=jxg.A.JessieCode,Prefix=jxg.A.PrefixParser,Line=jxg.A.Line,Point=jxg.A.Point,Polygon=jxg.A.Polygon,Text=jxg.A.Text,Ticks=jxg.A.Ticks,Transformation=jxg.A.Transformation,Turtle=jxg.A.Turtle,View3D=jxg.A.View3D,LMS2rgb=jxg.A.LMS2rgb,addEvent=jxg.A.addEvent,autoDigits=jxg.A.autoDigits,autoHighlight=jxg.A.autoHighlight,bind=jxg.A.bind,capitalize=jxg.A.capitalize,clearVisPropOld=jxg.A.clearVisPropOld,clone=jxg.A.clone,cloneAndCopy=jxg.A.cloneAndCopy,cmpArrays=jxg.A.cmpArrays,coordsArrayToMatrix=jxg.A.coordsArrayToMatrix,copyAttributes=jxg.A.copyAttributes,createEvalFunction=jxg.A.createEvalFunction,createFunction=jxg.A.createFunction,createHTMLSlider=jxg.A.createHTMLSlider,darkenColor=jxg.A.darkenColor,debug=jxg.A.debug,debugInt=jxg.A.debugInt,debugLine=jxg.A.debugLine,debugWST=jxg.A.debugWST,deepCopy=jxg.A.deepCopy,def=jxg.A.def,deprecated=jxg.A.deprecated,eliminateDuplicates=jxg.A.eliminateDuplicates,escapeHTML=jxg.A.escapeHTML,evalSlider=jxg.A.evalSlider,evaluate=jxg.A.evaluate,filterElements=jxg.A.filterElements,getBoardByContainerId=jxg.A.getBoardByContainerId,getCSSTransformMatrix=jxg.A.getCSSTransformMatrix,getCSSTransform=jxg.A.getCSSTransform,getDimensions=jxg.A.getDimensions,getOffset=jxg.A.getOffset,getPosition=jxg.A.getPosition,getProp=jxg.A.getProp,hex2rgb=jxg.A.hex2rgb,hsv2rgb=jxg.A.hsv2rgb,isAndroid=jxg.A.isAndroid,isApple=jxg.A.isApple,isArray=jxg.A.isArray,isDesktop=jxg.A.isDesktop,isInArray=jxg.A.isInArray,isInObject=jxg.A.isInObject,isMetroApp=jxg.A.isMetroApp,isMobile=jxg.A.isMobile,isMozilla=jxg.A.isMozilla,isBoard=jxg.A.isBoard,isName=jxg.A.isName,isNode=jxg.A.isNode,isNumber=jxg.A.isNumber,isObject=jxg.A.isObject,isPoint=jxg.A.isPoint,isPoint3D=jxg.A.isPoint3D,isPointType=jxg.A.isPointType,isPointType3D=jxg.A.isPointType3D,isString=jxg.A.isString,isTouchDevice=jxg.A.isTouchDevice,isTransformationOrArray=jxg.A.isTransformationOrArray,isWebWorker=jxg.A.isWebWorker,isWebkitAndroid=jxg.A.isWebkitAndroid,isWebkitApple=jxg.A.isWebkitApple,keys=jxg.A.keys,lightenColor=jxg.A.lightenColor,merge=jxg.A.merge,normalizePointFace=jxg.A.normalizePointFace,providePoints=jxg.A.providePoints,registerElement=jxg.A.registerElement,registerReader=jxg.A.registerReader,removeAllEvents=jxg.A.removeAllEvents,removeElementFromArray=jxg.A.removeElementFromArray,removeEvent=jxg.A.removeEvent,rgb2LMS=jxg.A.rgb2LMS,rgb2bw=jxg.A.rgb2bw,rgb2cb=jxg.A.rgb2cb,rgb2css=jxg.A.rgb2css,rgb2hex=jxg.A.rgb2hex,rgb2hsv=jxg.A.rgb2hsv,rgbParser=jxg.A.rgbParser,rgb2rgbo=jxg.A.rgba2rgbo,rgb2rgba=jxg.A.rgbo2rgba,sanitizeHTML=jxg.A.sanitizeHTML,shortcut=jxg.A.shortcut,strBool=jxg.A.str2Bool,supportsCanvas=jxg.A.supportsCanvas,supportsPointerEvents=jxg.A.supportsPointerEvents,supportsSVG=jxg.A.supportsSVG,supportsVML=jxg.A.supportsVML,swap=jxg.A.swap,timeChunk=jxg.A.timedChunk,toFixed=jxg.A.toFixed,toFullscreen=jxg.A.toFullscreen,toJSON=jxg.A.toJSON,trim=jxg.A.trim,trimNumber=jxg.A.trimNumber,truncate=jxg.A.truncate,unescapeHTML=jxg.A.unescapeHTML,uniqueArray=jxg.A.uniqueArray,useBlackWhiteOptions=jxg.A.useBlackWhiteOptions,useStandardOptions=jxg.A.useStandardOptions,warn=jxg.A.warn;env.A.isBrowser?window.JXG=jxg.A:env.A.isWebWorker()&&(self.JXG=jxg.A);var src=jxg.A;return __webpack_exports__=__webpack_exports__.default,__webpack_exports__}()}));
|