var b2Settings=Class.create();b2Settings.prototype={initialize:function(){}};b2Settings.USHRT_MAX=65535;b2Settings.b2_pi=Math.PI;b2Settings.b2_massUnitsPerKilogram=1;b2Settings.b2_timeUnitsPerSecond=1;b2Settings.b2_lengthUnitsPerMeter=30;b2Settings.b2_maxManifoldPoints=2;b2Settings.b2_maxShapesPerBody=64;b2Settings.b2_maxPolyVertices=1024;b2Settings.b2_maxProxies=1024;b2Settings.b2_maxPairs=8*b2Settings.b2_maxProxies;b2Settings.b2_linearSlop=0.005*b2Settings.b2_lengthUnitsPerMeter;b2Settings.b2_angularSlop=2/180*b2Settings.b2_pi;b2Settings.b2_velocityThreshold=1*b2Settings.b2_lengthUnitsPerMeter/b2Settings.b2_timeUnitsPerSecond;b2Settings.b2_maxLinearCorrection=0.2*b2Settings.b2_lengthUnitsPerMeter;b2Settings.b2_maxAngularCorrection=8/180*b2Settings.b2_pi;b2Settings.b2_contactBaumgarte=0.2;b2Settings.b2_timeToSleep=0.5*b2Settings.b2_timeUnitsPerSecond;b2Settings.b2_linearSleepTolerance=0.01*b2Settings.b2_lengthUnitsPerMeter/b2Settings.b2_timeUnitsPerSecond;b2Settings.b2_angularSleepTolerance=2/180/b2Settings.b2_timeUnitsPerSecond;b2Settings.b2Assert=function(b){if(!b){var c;c.x++}};var b2Vec2=Class.create();b2Vec2.prototype={initialize:function(a,b){this.x=a;this.y=b},SetZero:function(){this.x=0;this.y=0},Set:function(a,b){this.x=a;this.y=b},SetV:function(a){this.x=a.x;this.y=a.y},Negative:function(){return new b2Vec2(-this.x,-this.y)},Copy:function(){return new b2Vec2(this.x,this.y)},Add:function(a){this.x+=a.x;this.y+=a.y},Subtract:function(a){this.x-=a.x;this.y-=a.y},Multiply:function(b){this.x*=b;this.y*=b},MulM:function(b){var a=this.x;this.x=b.col1.x*a+b.col2.x*this.y;this.y=b.col1.y*a+b.col2.y*this.y},MulTM:function(b){var a=b2Math.b2Dot(this,b.col1);this.y=b2Math.b2Dot(this,b.col2);this.x=a},CrossVF:function(b){var a=this.x;this.x=b*this.y;this.y=-b*a},CrossFV:function(b){var a=this.x;this.x=-b*this.y;this.y=b*a},MinV:function(a){this.x=this.x<a.x?this.x:a.x;this.y=this.y<a.y?this.y:a.y},MaxV:function(a){this.x=this.x>a.x?this.x:a.x;this.y=this.y>a.y?this.y:a.y},Abs:function(){this.x=Math.abs(this.x);this.y=Math.abs(this.y)},Length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},Normalize:function(){var b=this.Length();if(b<Number.MIN_VALUE){return 0}var a=1/b;this.x*=a;this.y*=a;return b},IsValid:function(){return b2Math.b2IsValid(this.x)&&b2Math.b2IsValid(this.y)},x:null,y:null};b2Vec2.Make=function(a,b){return new b2Vec2(a,b)};var b2Mat22=Class.create();b2Mat22.prototype={initialize:function(f,e,a){if(f==null){f=0}this.col1=new b2Vec2();this.col2=new b2Vec2();if(e!=null&&a!=null){this.col1.SetV(e);this.col2.SetV(a)}else{var g=Math.cos(f);var b=Math.sin(f);this.col1.x=g;this.col2.x=-b;this.col1.y=b;this.col2.y=g}},Set:function(b){var e=Math.cos(b);var a=Math.sin(b);this.col1.x=e;this.col2.x=-a;this.col1.y=a;this.col2.y=e},SetVV:function(b,a){this.col1.SetV(b);this.col2.SetV(a)},Copy:function(){return new b2Mat22(0,this.col1,this.col2)},SetM:function(a){this.col1.SetV(a.col1);this.col2.SetV(a.col2)},AddM:function(a){this.col1.x+=a.col1.x;this.col1.y+=a.col1.y;this.col2.x+=a.col2.x;this.col2.y+=a.col2.y},SetIdentity:function(){this.col1.x=1;this.col2.x=0;this.col1.y=0;this.col2.y=1},SetZero:function(){this.col1.x=0;this.col2.x=0;this.col1.y=0;this.col2.y=0},Invert:function(g){var f=this.col1.x;var e=this.col2.x;var j=this.col1.y;var i=this.col2.y;var h=f*i-e*j;h=1/h;g.col1.x=h*i;g.col2.x=-h*e;g.col1.y=-h*j;g.col2.y=h*f;return g},Solve:function(f,i,h){var b=this.col1.x;var a=this.col2.x;var e=this.col1.y;var c=this.col2.y;var g=b*c-a*e;g=1/g;f.x=g*(c*i-a*h);f.y=g*(b*h-e*i);return f},Abs:function(){this.col1.Abs();this.col2.Abs()},col1:new b2Vec2(),col2:new b2Vec2()};var b2Math=Class.create();b2Math.prototype={initialize:function(){}};b2Math.b2IsValid=function(a){return isFinite(a)};b2Math.b2Dot=function(e,c){return e.x*c.x+e.y*c.y};b2Math.b2CrossVV=function(e,c){return e.x*c.y-e.y*c.x};b2Math.b2CrossVF=function(b,e){var c=new b2Vec2(e*b.y,-e*b.x);return c};b2Math.b2CrossFV=function(e,b){var c=new b2Vec2(-e*b.y,e*b.x);return c};b2Math.b2MulMV=function(a,b){var c=new b2Vec2(a.col1.x*b.x+a.col2.x*b.y,a.col1.y*b.x+a.col2.y*b.y);return c};b2Math.b2MulTMV=function(a,b){var c=new b2Vec2(b2Math.b2Dot(b,a.col1),b2Math.b2Dot(b,a.col2));return c};b2Math.AddVV=function(e,c){var f=new b2Vec2(e.x+c.x,e.y+c.y);return f};b2Math.SubtractVV=function(e,c){var f=new b2Vec2(e.x-c.x,e.y-c.y);return f};b2Math.MulFV=function(e,b){var c=new b2Vec2(e*b.x,e*b.y);return c};b2Math.AddMM=function(a,c){var b=new b2Mat22(0,b2Math.AddVV(a.col1,c.col1),b2Math.AddVV(a.col2,c.col2));return b};b2Math.b2MulMM=function(a,c){var b=new b2Mat22(0,b2Math.b2MulMV(a,c.col1),b2Math.b2MulMV(a,c.col2));return b};b2Math.b2MulTMM=function(a,f){var c=new b2Vec2(b2Math.b2Dot(a.col1,f.col1),b2Math.b2Dot(a.col2,f.col1));var b=new b2Vec2(b2Math.b2Dot(a.col1,f.col2),b2Math.b2Dot(a.col2,f.col2));var e=new b2Mat22(0,c,b);return e};b2Math.b2Abs=function(b){return b>0?b:-b};b2Math.b2AbsV=function(e){var c=new b2Vec2(b2Math.b2Abs(e.x),b2Math.b2Abs(e.y));return c};b2Math.b2AbsM=function(a){var b=new b2Mat22(0,b2Math.b2AbsV(a.col1),b2Math.b2AbsV(a.col2));return b};b2Math.b2Min=function(e,c){return e<c?e:c};b2Math.b2MinV=function(f,e){var g=new b2Vec2(b2Math.b2Min(f.x,e.x),b2Math.b2Min(f.y,e.y));return g};b2Math.b2Max=function(e,c){return e>c?e:c};b2Math.b2MaxV=function(f,e){var g=new b2Vec2(b2Math.b2Max(f.x,e.x),b2Math.b2Max(f.y,e.y));return g};b2Math.b2Clamp=function(c,b,e){return b2Math.b2Max(b,b2Math.b2Min(c,e))};b2Math.b2ClampV=function(c,b,e){return b2Math.b2MaxV(b,b2Math.b2MinV(c,e))};b2Math.b2Swap=function(e,c){var f=e[0];e[0]=c[0];c[0]=f};b2Math.b2Random=function(){return Math.random()*2-1};b2Math.b2NextPowerOfTwo=function(a){a|=(a>>1)&2147483647;a|=(a>>2)&1073741823;a|=(a>>4)&268435455;a|=(a>>8)&16777215;a|=(a>>16)&65535;return a+1};b2Math.b2IsPowerOfTwo=function(b){var a=b>0&&(b&(b-1))==0;return a};b2Math.tempVec2=new b2Vec2();b2Math.tempVec3=new b2Vec2();b2Math.tempVec4=new b2Vec2();b2Math.tempVec5=new b2Vec2();b2Math.tempMat=new b2Mat22();var b2AABB=Class.create();b2AABB.prototype={IsValid:function(){var b=this.maxVertex.x;var a=this.maxVertex.y;b=this.maxVertex.x;a=this.maxVertex.y;b-=this.minVertex.x;a-=this.minVertex.y;var c=b>=0&&a>=0;c=c&&this.minVertex.IsValid()&&this.maxVertex.IsValid();return c},minVertex:new b2Vec2(),maxVertex:new b2Vec2(),initialize:function(){this.minVertex=new b2Vec2();this.maxVertex=new b2Vec2()}};var b2Bound=Class.create();b2Bound.prototype={IsLower:function(){return(this.value&1)==0},IsUpper:function(){return(this.value&1)==1},Swap:function(c){var f=this.value;var e=this.proxyId;var a=this.stabbingCount;this.value=c.value;this.proxyId=c.proxyId;this.stabbingCount=c.stabbingCount;c.value=f;c.proxyId=e;c.stabbingCount=a},value:0,proxyId:0,stabbingCount:0,initialize:function(){}};var b2BoundValues=Class.create();b2BoundValues.prototype={lowerValues:[0,0],upperValues:[0,0],initialize:function(){this.lowerValues=[0,0];this.upperValues=[0,0]}};var b2Pair=Class.create();b2Pair.prototype={SetBuffered:function(){this.status|=b2Pair.e_pairBuffered},ClearBuffered:function(){this.status&=~b2Pair.e_pairBuffered},IsBuffered:function(){return(this.status&b2Pair.e_pairBuffered)==b2Pair.e_pairBuffered},SetRemoved:function(){this.status|=b2Pair.e_pairRemoved},ClearRemoved:function(){this.status&=~b2Pair.e_pairRemoved},IsRemoved:function(){return(this.status&b2Pair.e_pairRemoved)==b2Pair.e_pairRemoved},SetFinal:function(){this.status|=b2Pair.e_pairFinal},IsFinal:function(){return(this.status&b2Pair.e_pairFinal)==b2Pair.e_pairFinal},userData:null,proxyId1:0,proxyId2:0,next:0,status:0,initialize:function(){}};b2Pair.b2_nullPair=b2Settings.USHRT_MAX;b2Pair.b2_nullProxy=b2Settings.USHRT_MAX;b2Pair.b2_tableCapacity=b2Settings.b2_maxPairs;b2Pair.b2_tableMask=b2Pair.b2_tableCapacity-1;b2Pair.e_pairBuffered=1;b2Pair.e_pairRemoved=2;b2Pair.e_pairFinal=4;var b2PairCallback=Class.create();b2PairCallback.prototype={PairAdded:function(b,a){return null},PairRemoved:function(c,b,a){},initialize:function(){}};var b2BufferedPair=Class.create();b2BufferedPair.prototype={proxyId1:0,proxyId2:0,initialize:function(){}};var b2PairManager=Class.create();b2PairManager.prototype={initialize:function(){var a=0;this.m_hashTable=new Array(b2Pair.b2_tableCapacity);for(a=0;a<b2Pair.b2_tableCapacity;++a){this.m_hashTable[a]=b2Pair.b2_nullPair}this.m_pairs=new Array(b2Settings.b2_maxPairs);for(a=0;a<b2Settings.b2_maxPairs;++a){this.m_pairs[a]=new b2Pair()}this.m_pairBuffer=new Array(b2Settings.b2_maxPairs);for(a=0;a<b2Settings.b2_maxPairs;++a){this.m_pairBuffer[a]=new b2BufferedPair()}for(a=0;a<b2Settings.b2_maxPairs;++a){this.m_pairs[a].proxyId1=b2Pair.b2_nullProxy;this.m_pairs[a].proxyId2=b2Pair.b2_nullProxy;this.m_pairs[a].userData=null;this.m_pairs[a].status=0;this.m_pairs[a].next=(a+1)}this.m_pairs[b2Settings.b2_maxPairs-1].next=b2Pair.b2_nullPair;this.m_pairCount=0},Initialize:function(a,b){this.m_broadPhase=a;this.m_callback=b},AddBufferedPair:function(b,a){var c=this.AddPair(b,a);if(c.IsBuffered()==false){c.SetBuffered();this.m_pairBuffer[this.m_pairBufferCount].proxyId1=c.proxyId1;this.m_pairBuffer[this.m_pairBufferCount].proxyId2=c.proxyId2;++this.m_pairBufferCount}c.ClearRemoved();if(b2BroadPhase.s_validate){this.ValidateBuffer()}},RemoveBufferedPair:function(b,a){var c=this.Find(b,a);if(c==null){return}if(c.IsBuffered()==false){c.SetBuffered();this.m_pairBuffer[this.m_pairBufferCount].proxyId1=c.proxyId1;this.m_pairBuffer[this.m_pairBufferCount].proxyId2=c.proxyId2;++this.m_pairBufferCount}c.SetRemoved();if(b2BroadPhase.s_validate){this.ValidateBuffer()}},Commit:function(){var b=0;var f=0;var a=this.m_broadPhase.m_proxyPool;for(b=0;b<this.m_pairBufferCount;++b){var g=this.Find(this.m_pairBuffer[b].proxyId1,this.m_pairBuffer[b].proxyId2);g.ClearBuffered();var e=a[g.proxyId1];var c=a[g.proxyId2];if(g.IsRemoved()){if(g.IsFinal()==true){this.m_callback.PairRemoved(e.userData,c.userData,g.userData)}this.m_pairBuffer[f].proxyId1=g.proxyId1;this.m_pairBuffer[f].proxyId2=g.proxyId2;++f}else{if(g.IsFinal()==false){g.userData=this.m_callback.PairAdded(e.userData,c.userData);g.SetFinal()}}}for(b=0;b<f;++b){this.RemovePair(this.m_pairBuffer[b].proxyId1,this.m_pairBuffer[b].proxyId2)}this.m_pairBufferCount=0;if(b2BroadPhase.s_validate){this.ValidateTable()}},AddPair:function(b,a){if(b>a){var c=b;b=a;a=c}var e=b2PairManager.Hash(b,a)&b2Pair.b2_tableMask;var g=g=this.FindHash(b,a,e);if(g!=null){return g}var f=this.m_freePair;g=this.m_pairs[f];this.m_freePair=g.next;g.proxyId1=b;g.proxyId2=a;g.status=0;g.userData=null;g.next=this.m_hashTable[e];this.m_hashTable[e]=f;++this.m_pairCount;return g},RemovePair:function(h,g){if(h>g){var j=h;h=g;g=j}var e=b2PairManager.Hash(h,g)&b2Pair.b2_tableMask;var b=this.m_hashTable[e];var i=null;while(b!=b2Pair.b2_nullPair){if(b2PairManager.Equals(this.m_pairs[b],h,g)){var f=b;if(i){i.next=this.m_pairs[b].next}else{this.m_hashTable[e]=this.m_pairs[b].next}var c=this.m_pairs[f];var a=c.userData;c.next=this.m_freePair;c.proxyId1=b2Pair.b2_nullProxy;c.proxyId2=b2Pair.b2_nullProxy;c.userData=null;c.status=0;this.m_freePair=f;--this.m_pairCount;return a}else{i=this.m_pairs[b];b=i.next}}return null},Find:function(b,a){if(b>a){var c=b;b=a;a=c}var e=b2PairManager.Hash(b,a)&b2Pair.b2_tableMask;return this.FindHash(b,a,e)},FindHash:function(b,a,e){var c=this.m_hashTable[e];while(c!=b2Pair.b2_nullPair&&b2PairManager.Equals(this.m_pairs[c],b,a)==false){c=this.m_pairs[c].next}if(c==b2Pair.b2_nullPair){return null}return this.m_pairs[c]},ValidateBuffer:function(){},ValidateTable:function(){},m_broadPhase:null,m_callback:null,m_pairs:null,m_freePair:0,m_pairCount:0,m_pairBuffer:null,m_pairBufferCount:0,m_hashTable:null};b2PairManager.Hash=function(b,a){var c=((a<<16)&4294901760)|b;c=~c+((c<<15)&4294934528);c=c^((c>>12)&1048575);c=c+((c<<2)&4294967292);c=c^((c>>4)&268435455);c=c*2057;c=c^((c>>16)&65535);return c};b2PairManager.Equals=function(c,b,a){return(c.proxyId1==b&&c.proxyId2==a)};b2PairManager.EqualsPair=function(b,a){return b.proxyId1==a.proxyId1&&b.proxyId2==a.proxyId2};var b2BroadPhase=Class.create();b2BroadPhase.prototype={initialize:function(g,h){this.m_pairManager=new b2PairManager();this.m_proxyPool=new Array(b2Settings.b2_maxPairs);this.m_bounds=new Array(2*b2Settings.b2_maxProxies);this.m_queryResults=new Array(b2Settings.b2_maxProxies);this.m_quantizationFactor=new b2Vec2();var e=0;this.m_pairManager.Initialize(this,h);this.m_worldAABB=g;this.m_proxyCount=0;for(e=0;e<b2Settings.b2_maxProxies;e++){this.m_queryResults[e]=0}this.m_bounds=new Array(2);for(e=0;e<2;e++){this.m_bounds[e]=new Array(2*b2Settings.b2_maxProxies);for(var c=0;c<2*b2Settings.b2_maxProxies;c++){this.m_bounds[e][c]=new b2Bound()}}var b=g.maxVertex.x;var a=g.maxVertex.y;b-=g.minVertex.x;a-=g.minVertex.y;this.m_quantizationFactor.x=b2Settings.USHRT_MAX/b;this.m_quantizationFactor.y=b2Settings.USHRT_MAX/a;var f;for(e=0;e<b2Settings.b2_maxProxies-1;++e){f=new b2Proxy();this.m_proxyPool[e]=f;f.SetNext(e+1);f.timeStamp=0;f.overlapCount=b2BroadPhase.b2_invalid;f.userData=null}f=new b2Proxy();this.m_proxyPool[b2Settings.b2_maxProxies-1]=f;f.SetNext(b2Pair.b2_nullProxy);f.timeStamp=0;f.overlapCount=b2BroadPhase.b2_invalid;f.userData=null;this.m_freeProxy=0;this.m_timeStamp=1;this.m_queryResultCount=0},InRange:function(c){var b;var a;var f;var e;b=c.minVertex.x;a=c.minVertex.y;b-=this.m_worldAABB.maxVertex.x;a-=this.m_worldAABB.maxVertex.y;f=this.m_worldAABB.minVertex.x;e=this.m_worldAABB.minVertex.y;f-=c.maxVertex.x;e-=c.maxVertex.y;b=b2Math.b2Max(b,f);a=b2Math.b2Max(a,e);return b2Math.b2Max(b,a)<0},GetProxy:function(a){if(a==b2Pair.b2_nullProxy||this.m_proxyPool[a].IsValid()==false){return null}return this.m_proxyPool[a]},CreateProxy:function(g,k){var e=0;var v;var y=this.m_freeProxy;v=this.m_proxyPool[y];this.m_freeProxy=v.GetNext();v.overlapCount=0;v.userData=k;var o=2*this.m_proxyCount;var m=new Array();var c=new Array();this.ComputeBounds(m,c,g);for(var b=0;b<2;++b){var f=this.m_bounds[b];var n=0;var s=0;var h=[n];var l=[s];this.Query(h,l,m[b],c[b],f,o,b);n=h[0];s=l[0];var p=new Array();var t=0;var x=o-s;var r;var q;for(t=0;t<x;t++){p[t]=new b2Bound();r=p[t];q=f[s+t];r.value=q.value;r.proxyId=q.proxyId;r.stabbingCount=q.stabbingCount}x=p.length;var z=s+2;for(t=0;t<x;t++){q=p[t];r=f[z+t];r.value=q.value;r.proxyId=q.proxyId;r.stabbingCount=q.stabbingCount}p=new Array();x=s-n;for(t=0;t<x;t++){p[t]=new b2Bound();r=p[t];q=f[n+t];r.value=q.value;r.proxyId=q.proxyId;r.stabbingCount=q.stabbingCount}x=p.length;z=n+1;for(t=0;t<x;t++){q=p[t];r=f[z+t];r.value=q.value;r.proxyId=q.proxyId;r.stabbingCount=q.stabbingCount}++s;f[n].value=m[b];f[n].proxyId=y;f[s].value=c[b];f[s].proxyId=y;f[n].stabbingCount=n==0?0:f[n-1].stabbingCount;f[s].stabbingCount=f[s-1].stabbingCount;for(e=n;e<s;++e){f[e].stabbingCount++}for(e=n;e<o+2;++e){var a=this.m_proxyPool[f[e].proxyId];if(f[e].IsLower()){a.lowerBounds[b]=e}else{a.upperBounds[b]=e}}}++this.m_proxyCount;for(var u=0;u<this.m_queryResultCount;++u){this.m_pairManager.AddBufferedPair(y,this.m_queryResults[u])}this.m_pairManager.Commit();this.m_queryResultCount=0;this.IncrementTimeStamp();return y},DestroyProxy:function(t){var r=this.m_proxyPool[t];var k=2*this.m_proxyCount;for(var c=0;c<2;++c){var g=this.m_bounds[c];var h=r.lowerBounds[c];var o=r.upperBounds[c];var v=g[h].value;var a=g[o].value;var l=new Array();var p=0;var s=o-h-1;var n;var m;for(p=0;p<s;p++){l[p]=new b2Bound();n=l[p];m=g[h+1+p];n.value=m.value;n.proxyId=m.proxyId;n.stabbingCount=m.stabbingCount}s=l.length;var u=h;for(p=0;p<s;p++){m=l[p];n=g[u+p];n.value=m.value;n.proxyId=m.proxyId;n.stabbingCount=m.stabbingCount}l=new Array();s=k-o-1;for(p=0;p<s;p++){l[p]=new b2Bound();n=l[p];m=g[o+1+p];n.value=m.value;n.proxyId=m.proxyId;n.stabbingCount=m.stabbingCount}s=l.length;u=o-1;for(p=0;p<s;p++){m=l[p];n=g[u+p];n.value=m.value;n.proxyId=m.proxyId;n.stabbingCount=m.stabbingCount}s=k-2;for(var f=h;f<s;++f){var b=this.m_proxyPool[g[f].proxyId];if(g[f].IsLower()){b.lowerBounds[c]=f}else{b.upperBounds[c]=f}}s=o-1;for(var e=h;e<s;++e){g[e].stabbingCount--}this.Query([0],[0],v,a,g,k-2,c)}for(var q=0;q<this.m_queryResultCount;++q){this.m_pairManager.RemoveBufferedPair(t,this.m_queryResults[q])}this.m_pairManager.Commit();this.m_queryResultCount=0;this.IncrementTimeStamp();r.userData=null;r.overlapCount=b2BroadPhase.b2_invalid;r.lowerBounds[0]=b2BroadPhase.b2_invalid;r.lowerBounds[1]=b2BroadPhase.b2_invalid;r.upperBounds[0]=b2BroadPhase.b2_invalid;r.upperBounds[1]=b2BroadPhase.b2_invalid;r.SetNext(this.m_freeProxy);this.m_freeProxy=t;--this.m_proxyCount},MoveProxy:function(q,j){var e=0;var h=0;var a;var c;var f;var k=0;var s;if(q==b2Pair.b2_nullProxy||b2Settings.b2_maxProxies<=q){return}if(j.IsValid()==false){return}var m=2*this.m_proxyCount;var o=this.m_proxyPool[q];var g=new b2BoundValues();this.ComputeBounds(g.lowerValues,g.upperValues,j);var t=new b2BoundValues();for(e=0;e<2;++e){t.lowerValues[e]=this.m_bounds[e][o.lowerBounds[e]].value;t.upperValues[e]=this.m_bounds[e][o.upperBounds[e]].value}for(e=0;e<2;++e){var i=this.m_bounds[e];var l=o.lowerBounds[e];var n=o.upperBounds[e];var u=g.lowerValues[e];var b=g.upperValues[e];var x=u-i[l].value;var r=b-i[n].value;i[l].value=u;i[n].value=b;if(x<0){h=l;while(h>0&&u<i[h-1].value){a=i[h];c=i[h-1];var v=c.proxyId;var p=this.m_proxyPool[c.proxyId];c.stabbingCount++;if(c.IsUpper()==true){if(this.TestOverlap(g,p)){this.m_pairManager.AddBufferedPair(q,v)}p.upperBounds[e]++;a.stabbingCount++}else{p.lowerBounds[e]++;a.stabbingCount--}o.lowerBounds[e]--;a.Swap(c);--h}}if(r>0){h=n;while(h<m-1&&i[h+1].value<=b){a=i[h];f=i[h+1];k=f.proxyId;s=this.m_proxyPool[k];f.stabbingCount++;if(f.IsLower()==true){if(this.TestOverlap(g,s)){this.m_pairManager.AddBufferedPair(q,k)}s.lowerBounds[e]--;a.stabbingCount++}else{s.upperBounds[e]--;a.stabbingCount--}o.upperBounds[e]++;a.Swap(f);h++}}if(x>0){h=l;while(h<m-1&&i[h+1].value<=u){a=i[h];f=i[h+1];k=f.proxyId;s=this.m_proxyPool[k];f.stabbingCount--;if(f.IsUpper()){if(this.TestOverlap(t,s)){this.m_pairManager.RemoveBufferedPair(q,k)}s.upperBounds[e]--;a.stabbingCount--}else{s.lowerBounds[e]--;a.stabbingCount++}o.lowerBounds[e]++;a.Swap(f);h++}}if(r<0){h=n;while(h>0&&b<i[h-1].value){a=i[h];c=i[h-1];v=c.proxyId;p=this.m_proxyPool[v];c.stabbingCount--;if(c.IsLower()==true){if(this.TestOverlap(t,p)){this.m_pairManager.RemoveBufferedPair(q,v)}p.lowerBounds[e]++;a.stabbingCount--}else{p.upperBounds[e]++;a.stabbingCount++}o.upperBounds[e]--;a.Swap(c);h--}}}},Commit:function(){this.m_pairManager.Commit()},QueryAABB:function(g,b,c){var k=new Array();var h=new Array();this.ComputeBounds(k,h,g);var a=0;var l=0;var e=[a];var n=[l];this.Query(e,n,k[0],h[0],this.m_bounds[0],2*this.m_proxyCount,0);this.Query(e,n,k[1],h[1],this.m_bounds[1],2*this.m_proxyCount,1);var j=0;for(var f=0;f<this.m_queryResultCount&&j<c;++f,++j){var m=this.m_proxyPool[this.m_queryResults[f]];b[f]=m.userData}this.m_queryResultCount=0;this.IncrementTimeStamp();return j},Validate:function(){var g;var f;var c;var k;for(var b=0;b<2;++b){var a=this.m_bounds[b];var l=2*this.m_proxyCount;var j=0;for(var h=0;h<l;++h){var e=a[h];if(e.IsLower()==true){j++}else{j--}}}},ComputeBounds:function(e,h,a){var c=a.minVertex.x;var b=a.minVertex.y;c=b2Math.b2Min(c,this.m_worldAABB.maxVertex.x);b=b2Math.b2Min(b,this.m_worldAABB.maxVertex.y);c=b2Math.b2Max(c,this.m_worldAABB.minVertex.x);b=b2Math.b2Max(b,this.m_worldAABB.minVertex.y);var g=a.maxVertex.x;var f=a.maxVertex.y;g=b2Math.b2Min(g,this.m_worldAABB.maxVertex.x);f=b2Math.b2Min(f,this.m_worldAABB.maxVertex.y);g=b2Math.b2Max(g,this.m_worldAABB.minVertex.x);f=b2Math.b2Max(f,this.m_worldAABB.minVertex.y);e[0]=(this.m_quantizationFactor.x*(c-this.m_worldAABB.minVertex.x))&(b2Settings.USHRT_MAX-1);h[0]=((this.m_quantizationFactor.x*(g-this.m_worldAABB.minVertex.x))&65535)|1;e[1]=(this.m_quantizationFactor.y*(b-this.m_worldAABB.minVertex.y))&(b2Settings.USHRT_MAX-1);h[1]=((this.m_quantizationFactor.y*(f-this.m_worldAABB.minVertex.y))&65535)|1},TestOverlapValidate:function(e,c){for(var a=0;a<2;++a){var b=this.m_bounds[a];if(b[e.lowerBounds[a]].value>b[c.upperBounds[a]].value){return false}if(b[e.upperBounds[a]].value<b[c.lowerBounds[a]].value){return false}}return true},TestOverlap:function(a,f){for(var c=0;c<2;++c){var e=this.m_bounds[c];if(a.lowerValues[c]>e[f.upperBounds[c]].value){return false}if(a.upperValues[c]<e[f.lowerBounds[c]].value){return false}}return true},Query:function(k,e,g,n,a,p,b){var c=b2BroadPhase.BinarySearch(a,p,g);var m=b2BroadPhase.BinarySearch(a,p,n);for(var f=c;f<m;++f){if(a[f].IsLower()){this.IncrementOverlapCount(a[f].proxyId)}}if(c>0){var h=c-1;var o=a[h].stabbingCount;while(o){if(a[h].IsLower()){var l=this.m_proxyPool[a[h].proxyId];if(c<=l.upperBounds[b]){this.IncrementOverlapCount(a[h].proxyId);--o}}--h}}k[0]=c;e[0]=m},IncrementOverlapCount:function(b){var a=this.m_proxyPool[b];if(a.timeStamp<this.m_timeStamp){a.timeStamp=this.m_timeStamp;a.overlapCount=1}else{a.overlapCount=2;this.m_queryResults[this.m_queryResultCount]=b;++this.m_queryResultCount}},IncrementTimeStamp:function(){if(this.m_timeStamp==b2Settings.USHRT_MAX){for(var a=0;a<b2Settings.b2_maxProxies;++a){this.m_proxyPool[a].timeStamp=0}this.m_timeStamp=1}else{++this.m_timeStamp}},m_pairManager:new b2PairManager(),m_proxyPool:new Array(b2Settings.b2_maxPairs),m_freeProxy:0,m_bounds:new Array(2*b2Settings.b2_maxProxies),m_queryResults:new Array(b2Settings.b2_maxProxies),m_queryResultCount:0,m_worldAABB:null,m_quantizationFactor:new b2Vec2(),m_proxyCount:0,m_timeStamp:0};b2BroadPhase.s_validate=false;b2BroadPhase.b2_invalid=b2Settings.USHRT_MAX;b2BroadPhase.b2_nullEdge=b2Settings.USHRT_MAX;b2BroadPhase.BinarySearch=function(e,c,g){var a=0;var f=c-1;while(a<=f){var b=Math.floor((a+f)/2);if(e[b].value>g){f=b-1}else{if(e[b].value<g){a=b+1}else{return(b)}}}return(a)};var b2Collision=Class.create();b2Collision.prototype={initialize:function(){}};b2Collision.b2_nullFeature=255;b2Collision.ClipSegmentToLine=function(g,b,f,a){var c=0;var j=b[0].v;var i=b[1].v;var h=b2Math.b2Dot(f,b[0].v)-a;var e=b2Math.b2Dot(f,b[1].v)-a;if(h<=0){g[c++]=b[0]}if(e<=0){g[c++]=b[1]}if(h*e<0){var k=h/(h-e);var l=g[c].v;l.x=j.x+k*(i.x-j.x);l.y=j.y+k*(i.y-j.y);if(h>0){g[c].id=b[0].id}else{g[c].id=b[1].id}++c}return c};b2Collision.EdgeSeparation=function(q,r,p){var g=q.m_vertices;var h=p.m_vertexCount;var s=p.m_vertices;var f=q.m_normals[r].x;var e=q.m_normals[r].y;var t=f;var m=q.m_R;f=m.col1.x*t+m.col2.x*e;e=m.col1.y*t+m.col2.y*e;var x=f;var v=e;m=p.m_R;t=x*m.col1.x+v*m.col1.y;v=x*m.col2.x+v*m.col2.y;x=t;var o=0;var n=Number.MAX_VALUE;for(var y=0;y<h;++y){var c=s[y];var u=c.x*x+c.y*v;if(u<n){n=u;o=y}}m=q.m_R;var b=q.m_position.x+(m.col1.x*g[r].x+m.col2.x*g[r].y);var a=q.m_position.y+(m.col1.y*g[r].x+m.col2.y*g[r].y);m=p.m_R;var l=p.m_position.x+(m.col1.x*s[o].x+m.col2.x*s[o].y);var j=p.m_position.y+(m.col1.y*s[o].x+m.col2.y*s[o].y);l-=b;j-=a;var k=l*f+j*e;return k};b2Collision.FindMaxSeparation=function(t,n,m,y){var k=n.m_vertexCount;var e=m.m_position.x-n.m_position.x;var c=m.m_position.y-n.m_position.y;var g=(e*n.m_R.col1.x+c*n.m_R.col1.y);var f=(e*n.m_R.col2.x+c*n.m_R.col2.y);var j=0;var a=-Number.MAX_VALUE;for(var q=0;q<k;++q){var p=(n.m_normals[q].x*g+n.m_normals[q].y*f);if(p>a){a=p;j=q}}var o=b2Collision.EdgeSeparation(n,j,m);if(o>0&&y==false){return o}var h=j-1>=0?j-1:k-1;var u=b2Collision.EdgeSeparation(n,h,m);if(u>0&&y==false){return u}var r=j+1<k?j+1:0;var v=b2Collision.EdgeSeparation(n,r,m);if(v>0&&y==false){return v}var b=0;var l;var x=0;if(u>o&&u>v){x=-1;b=h;l=u}else{if(v>o){x=1;b=r;l=v}else{t[0]=j;return o}}while(true){if(x==-1){j=b-1>=0?b-1:k-1}else{j=b+1<k?b+1:0}o=b2Collision.EdgeSeparation(n,j,m);if(o>0&&y==false){return o}if(o>l){b=j;l=o}else{break}}t[0]=b;return l};b2Collision.FindIncidentEdge=function(F,q,r,o){var j=q.m_vertexCount;var g=q.m_vertices;var h=o.m_vertexCount;var t=o.m_vertices;var a=r;var H=r+1==j?0:r+1;var f=g[H];var E=f.x;var C=f.y;f=g[a];E-=f.x;C-=f.y;var x=E;E=C;C=-x;var G=1/Math.sqrt(E*E+C*C);E*=G;C*=G;var s=E;var p=C;x=s;var m=q.m_R;s=m.col1.x*x+m.col2.x*p;p=m.col1.y*x+m.col2.y*p;var e=s;var b=p;m=o.m_R;x=e*m.col1.x+b*m.col1.y;b=e*m.col2.x+b*m.col2.y;e=x;var l=0;var k=0;var n=Number.MAX_VALUE;for(var D=0;D<h;++D){var B=D;var A=D+1<h?D+1:0;f=t[A];var v=f.x;var u=f.y;f=t[B];v-=f.x;u-=f.y;x=v;v=u;u=-x;G=1/Math.sqrt(v*v+u*u);v*=G;u*=G;var y=v*e+u*b;if(y<n){n=y;l=B;k=A}}var z;z=F[0];f=z.v;f.SetV(t[l]);f.MulM(o.m_R);f.Add(o.m_position);z.id.features.referenceFace=r;z.id.features.incidentEdge=l;z.id.features.incidentVertex=l;z=F[1];f=z.v;f.SetV(t[k]);f.MulM(o.m_R);f.Add(o.m_position);z.id.features.referenceFace=r;z.id.features.incidentEdge=l;z.id.features.incidentVertex=k};b2Collision.b2CollidePolyTempVec=new b2Vec2();b2Collision.b2CollidePoly=function(y,l,k,b){y.pointCount=0;var O=0;var I=[O];var H=b2Collision.FindMaxSeparation(I,l,k,b);O=I[0];if(H>0&&b==false){return}var M=0;var h=[M];var G=b2Collision.FindMaxSeparation(h,k,l,b);M=h[0];if(G>0&&b==false){return}var q;var p;var a=0;var T=0;var e=0.98;var Q=0.001;if(G>e*H+Q){q=k;p=l;a=M;T=1}else{q=l;p=k;a=O;T=0}var c=[new ClipVertex(),new ClipVertex()];b2Collision.FindIncidentEdge(c,q,a,p);var D=q.m_vertexCount;var r=q.m_vertices;var K=r[a];var J=a+1<D?r[a+1]:r[0];var V=J.x-K.x;var U=J.y-K.y;var g=J.x-K.x;var f=J.y-K.y;var j=g;var L=q.m_R;g=L.col1.x*j+L.col2.x*f;f=L.col1.y*j+L.col2.y*f;var t=1/Math.sqrt(g*g+f*f);g*=t;f*=t;var o=g;var n=f;j=o;o=n;n=-j;var P=K.x;var N=K.y;j=P;L=q.m_R;P=L.col1.x*j+L.col2.x*N;N=L.col1.y*j+L.col2.y*N;P+=q.m_position.x;N+=q.m_position.y;var x=J.x;var v=J.y;j=x;L=q.m_R;x=L.col1.x*j+L.col2.x*v;v=L.col1.y*j+L.col2.y*v;x+=q.m_position.x;v+=q.m_position.y;var E=o*P+n*N;var C=-(g*P+f*N);var B=g*x+f*v;var A=[new ClipVertex(),new ClipVertex()];var z=[new ClipVertex(),new ClipVertex()];var S=0;b2Collision.b2CollidePolyTempVec.Set(-g,-f);S=b2Collision.ClipSegmentToLine(A,c,b2Collision.b2CollidePolyTempVec,C);if(S<2){return}b2Collision.b2CollidePolyTempVec.Set(g,f);S=b2Collision.ClipSegmentToLine(z,A,b2Collision.b2CollidePolyTempVec,B);if(S<2){return}if(T){y.normal.Set(-o,-n)}else{y.normal.Set(o,n)}var s=0;for(var R=0;R<b2Settings.b2_maxManifoldPoints;++R){var F=z[R].v;var m=(o*F.x+n*F.y)-E;if(m<=0||b==true){var u=y.points[s];u.separation=m;u.position.SetV(z[R].v);u.id.Set(z[R].id);u.id.features.flip=T;++s}}y.pointCount=s};b2Collision.b2CollideCircle=function(i,j,g,b){i.pointCount=0;var h=g.m_position.x-j.m_position.x;var f=g.m_position.y-j.m_position.y;var n=h*h+f*f;var m=j.m_radius+g.m_radius;if(n>m*m&&b==false){return}var e;if(n<Number.MIN_VALUE){e=-m;i.normal.Set(0,1)}else{var k=Math.sqrt(n);e=k-m;var l=1/k;i.normal.x=l*h;i.normal.y=l*f}i.pointCount=1;var c=i.points[0];c.id.set_key(0);c.separation=e;c.position.x=g.m_position.x-(g.m_radius*i.normal.x);c.position.y=g.m_position.y-(g.m_radius*i.normal.y)};b2Collision.b2CollidePolyAndCircle=function(z,n,l,E){z.pointCount=0;var j;var f;var e;var B=l.m_position.x-n.m_position.x;var A=l.m_position.y-n.m_position.y;var o=n.m_R;var x=B*o.col1.x+A*o.col1.y;A=B*o.col2.x+A*o.col2.y;B=x;var y;var D=0;var p=-Number.MAX_VALUE;var h=l.m_radius;for(var C=0;C<n.m_vertexCount;++C){var v=n.m_normals[C].x*(B-n.m_vertices[C].x)+n.m_normals[C].y*(A-n.m_vertices[C].y);if(v>h){return}if(v>p){p=v;D=C}}if(p<Number.MIN_VALUE){z.pointCount=1;var c=n.m_normals[D];z.normal.x=o.col1.x*c.x+o.col2.x*c.y;z.normal.y=o.col1.y*c.x+o.col2.y*c.y;j=z.points[0];j.id.features.incidentEdge=D;j.id.features.incidentVertex=b2Collision.b2_nullFeature;j.id.features.referenceFace=b2Collision.b2_nullFeature;j.id.features.flip=0;j.position.x=l.m_position.x-h*z.normal.x;j.position.y=l.m_position.y-h*z.normal.y;j.separation=p-h;return}var b=D;var a=b+1<n.m_vertexCount?b+1:0;var t=n.m_vertices[a].x-n.m_vertices[b].x;var q=n.m_vertices[a].y-n.m_vertices[b].y;var g=Math.sqrt(t*t+q*q);t/=g;q/=g;if(g<Number.MIN_VALUE){f=B-n.m_vertices[b].x;e=A-n.m_vertices[b].y;y=Math.sqrt(f*f+e*e);f/=y;e/=y;if(y>h){return}z.pointCount=1;z.normal.Set(o.col1.x*f+o.col2.x*e,o.col1.y*f+o.col2.y*e);j=z.points[0];j.id.features.incidentEdge=b2Collision.b2_nullFeature;j.id.features.incidentVertex=b;j.id.features.referenceFace=b2Collision.b2_nullFeature;j.id.features.flip=0;j.position.x=l.m_position.x-h*z.normal.x;j.position.y=l.m_position.y-h*z.normal.y;j.separation=y-h;return}var r=(B-n.m_vertices[b].x)*t+(A-n.m_vertices[b].y)*q;j=z.points[0];j.id.features.incidentEdge=b2Collision.b2_nullFeature;j.id.features.incidentVertex=b2Collision.b2_nullFeature;j.id.features.referenceFace=b2Collision.b2_nullFeature;j.id.features.flip=0;var m,k;if(r<=0){m=n.m_vertices[b].x;k=n.m_vertices[b].y;j.id.features.incidentVertex=b}else{if(r>=g){m=n.m_vertices[a].x;k=n.m_vertices[a].y;j.id.features.incidentVertex=a}else{m=t*r+n.m_vertices[b].x;k=q*r+n.m_vertices[b].y;j.id.features.incidentEdge=b}}f=B-m;e=A-k;y=Math.sqrt(f*f+e*e);f/=y;e/=y;if(y>h){return}z.pointCount=1;z.normal.Set(o.col1.x*f+o.col2.x*e,o.col1.y*f+o.col2.y*e);j.position.x=l.m_position.x-h*z.normal.x;j.position.y=l.m_position.y-h*z.normal.y;j.separation=y-h};b2Collision.b2TestOverlap=function(e,c){var j=c.minVertex;var h=e.maxVertex;var g=j.x-h.x;var f=j.y-h.y;j=e.minVertex;h=c.maxVertex;var k=j.x-h.x;var i=j.y-h.y;if(g>0||f>0){return false}if(k>0||i>0){return false}return true};var Features=Class.create();Features.prototype={set_referenceFace:function(a){this._referenceFace=a;this._m_id._key=(this._m_id._key&4294967040)|(this._referenceFace&255)},get_referenceFace:function(){return this._referenceFace},_referenceFace:0,set_incidentEdge:function(a){this._incidentEdge=a;this._m_id._key=(this._m_id._key&4294902015)|((this._incidentEdge<<8)&65280)},get_incidentEdge:function(){return this._incidentEdge},_incidentEdge:0,set_incidentVertex:function(a){this._incidentVertex=a;this._m_id._key=(this._m_id._key&4278255615)|((this._incidentVertex<<16)&16711680)},get_incidentVertex:function(){return this._incidentVertex},_incidentVertex:0,set_flip:function(a){this._flip=a;this._m_id._key=(this._m_id._key&16777215)|((this._flip<<24)&4278190080)},get_flip:function(){return this._flip},_flip:0,_m_id:null,initialize:function(){}};var b2ContactID=Class.create();b2ContactID.prototype={initialize:function(){this.features=new Features();this.features._m_id=this},Set:function(a){this.set_key(a._key)},Copy:function(){var a=new b2ContactID();a.set_key(this._key);return a},get_key:function(){return this._key},set_key:function(a){this._key=a;this.features._referenceFace=this._key&255;this.features._incidentEdge=((this._key&65280)>>8)&255;this.features._incidentVertex=((this._key&16711680)>>16)&255;this.features._flip=((this._key&4278190080)>>24)&255},features:new Features(),_key:0};var b2ContactPoint=Class.create();b2ContactPoint.prototype={position:new b2Vec2(),separation:null,normalImpulse:null,tangentImpulse:null,id:new b2ContactID(),initialize:function(){this.position=new b2Vec2();this.id=new b2ContactID()}};var b2Distance=Class.create();b2Distance.prototype={initialize:function(){}};b2Distance.ProcessTwo=function(k,i,b,l,j){var g=-j[1].x;var f=-j[1].y;var e=j[0].x-j[1].x;var c=j[0].y-j[1].y;var a=Math.sqrt(e*e+c*c);e/=a;c/=a;var h=g*e+f*c;if(h<=0||a<Number.MIN_VALUE){k.SetV(b[1]);i.SetV(l[1]);b[0].SetV(b[1]);l[0].SetV(l[1]);j[0].SetV(j[1]);return 1}h/=a;k.x=b[1].x+h*(b[0].x-b[1].x);k.y=b[1].y+h*(b[0].y-b[1].y);i.x=l[1].x+h*(l[0].x-l[1].x);i.y=l[1].y+h*(l[0].y-l[1].y);return 2};b2Distance.ProcessThree=function(r,E,o,D,H){var l=H[0].x;var i=H[0].y;var A=H[1].x;var t=H[1].y;var K=H[2].x;var J=H[2].y;var m=A-l;var j=t-i;var z=K-l;var s=J-i;var c=K-A;var b=J-t;var I=-(l*m+i*j);var a=(A*m+t*j);var k=-(l*z+i*s);var p=(K*z+J*s);var y=-(A*c+t*b);var G=(K*c+J*b);if(p<=0&&G<=0){r.SetV(o[2]);E.SetV(D[2]);o[0].SetV(o[2]);D[0].SetV(D[2]);H[0].SetV(H[2]);return 1}var F=m*s-j*z;var f=F*(l*t-i*A);var h=F*(A*J-t*K);if(h<=0&&y>=0&&G>=0){var C=y/(y+G);r.x=o[1].x+C*(o[2].x-o[1].x);r.y=o[1].y+C*(o[2].y-o[1].y);E.x=D[1].x+C*(D[2].x-D[1].x);E.y=D[1].y+C*(D[2].y-D[1].y);o[0].SetV(o[2]);D[0].SetV(D[2]);H[0].SetV(H[2]);return 2}var g=F*(K*i-J*l);if(g<=0&&k>=0&&p>=0){var C=k/(k+p);r.x=o[0].x+C*(o[2].x-o[0].x);r.y=o[0].y+C*(o[2].y-o[0].y);E.x=D[0].x+C*(D[2].x-D[0].x);E.y=D[0].y+C*(D[2].y-D[0].y);o[1].SetV(o[2]);D[1].SetV(D[2]);H[1].SetV(H[2]);return 2}var e=h+g+f;e=1/e;var B=h*e;var x=g*e;var q=1-B-x;r.x=B*o[0].x+x*o[1].x+q*o[2].x;r.y=B*o[0].y+x*o[1].y+q*o[2].y;E.x=B*D[0].x+x*D[1].x+q*D[2].x;E.y=B*D[0].y+x*D[1].y+q*D[2].y;return 3};b2Distance.InPoinsts=function(a,c,e){for(var b=0;b<e;++b){if(a.x==c[b].x&&a.y==c[b].y){return true}}return false};b2Distance.Distance=function(j,o,c,a){var e=new Array(3);var m=new Array(3);var t=new Array(3);var v=0;j.SetV(c.m_position);o.SetV(a.m_position);var l=0;var r=20;for(var u=0;u<r;++u){var g=o.x-j.x;var f=o.y-j.y;var k=c.Support(g,f);var h=a.Support(-g,-f);l=(g*g+f*f);var q=h.x-k.x;var n=h.y-k.y;var p=(g*q+f*n);if(l-b2Dot(g*q+f*n)<=0.01*l){if(v==0){j.SetV(k);o.SetV(h)}b2Distance.g_GJK_Iterations=u;return Math.sqrt(l)}switch(v){case 0:e[0].SetV(k);m[0].SetV(h);t[0]=w;j.SetV(e[0]);o.SetV(m[0]);++v;break;case 1:e[1].SetV(k);m[1].SetV(h);t[1].x=q;t[1].y=n;v=b2Distance.ProcessTwo(j,o,e,m,t);break;case 2:e[2].SetV(k);m[2].SetV(h);t[2].x=q;t[2].y=n;v=b2Distance.ProcessThree(j,o,e,m,t);break}if(v==3){b2Distance.g_GJK_Iterations=u;return 0}var b=-Number.MAX_VALUE;for(var s=0;s<v;++s){b=b2Math.b2Max(b,(t[s].x*t[s].x+t[s].y*t[s].y))}if(v==3||l<=100*Number.MIN_VALUE*b){b2Distance.g_GJK_Iterations=u;return Math.sqrt(l)}}b2Distance.g_GJK_Iterations=r;return Math.sqrt(l)};b2Distance.g_GJK_Iterations=0;var b2Manifold=Class.create();b2Manifold.prototype={initialize:function(){this.points=new Array(b2Settings.b2_maxManifoldPoints);for(var a=0;a<b2Settings.b2_maxManifoldPoints;a++){this.points[a]=new b2ContactPoint()}this.normal=new b2Vec2()},points:null,normal:null,pointCount:0};var b2OBB=Class.create();b2OBB.prototype={R:new b2Mat22(),center:new b2Vec2(),extents:new b2Vec2(),initialize:function(){this.R=new b2Mat22();this.center=new b2Vec2();this.extents=new b2Vec2()}};var b2Proxy=Class.create();b2Proxy.prototype={GetNext:function(){return this.lowerBounds[0]},SetNext:function(a){this.lowerBounds[0]=a},IsValid:function(){return this.overlapCount!=b2BroadPhase.b2_invalid},lowerBounds:[0,0],upperBounds:[0,0],overlapCount:0,timeStamp:0,userData:null,initialize:function(){this.lowerBounds=[0,0];this.upperBounds=[0,0]}};var ClipVertex=Class.create();ClipVertex.prototype={v:new b2Vec2(),id:new b2ContactID(),initialize:function(){this.v=new b2Vec2();this.id=new b2ContactID()}};var b2Shape=Class.create();b2Shape.prototype={TestPoint:function(a){return false},GetUserData:function(){return this.m_userData},GetType:function(){return this.m_type},GetBody:function(){return this.m_body},GetPosition:function(){return this.m_position},GetRotationMatrix:function(){return this.m_R},ResetProxy:function(a){},GetNext:function(){return this.m_next},initialize:function(b,a){this.m_R=new b2Mat22();this.m_position=new b2Vec2();this.m_userData=b.userData;this.m_friction=b.friction;this.m_restitution=b.restitution;this.m_body=a;this.m_proxyId=b2Pair.b2_nullProxy;this.m_maxRadius=0;this.m_categoryBits=b.categoryBits;this.m_maskBits=b.maskBits;this.m_groupIndex=b.groupIndex},DestroyProxy:function(){if(this.m_proxyId!=b2Pair.b2_nullProxy){this.m_body.m_world.m_broadPhase.DestroyProxy(this.m_proxyId);this.m_proxyId=b2Pair.b2_nullProxy}},Synchronize:function(b,e,a,c){},QuickSync:function(a,b){},Support:function(b,a,c){},GetMaxRadius:function(){return this.m_maxRadius},m_next:null,m_R:new b2Mat22(),m_position:new b2Vec2(),m_type:0,m_userData:null,m_body:null,m_friction:null,m_restitution:null,m_maxRadius:null,m_proxyId:0,m_categoryBits:0,m_maskBits:0,m_groupIndex:0};b2Shape.Create=function(c,b,a){switch(c.type){case b2Shape.e_circleShape:return new b2CircleShape(c,b,a);case b2Shape.e_boxShape:case b2Shape.e_polyShape:return new b2PolyShape(c,b,a)}return null};b2Shape.Destroy=function(a){if(a.m_proxyId!=b2Pair.b2_nullProxy){a.m_body.m_world.m_broadPhase.DestroyProxy(a.m_proxyId)}};b2Shape.e_unknownShape=-1;b2Shape.e_circleShape=0;b2Shape.e_boxShape=1;b2Shape.e_polyShape=2;b2Shape.e_meshShape=3;b2Shape.e_shapeTypeCount=4;b2Shape.PolyMass=function(p,y,m,f){var B=new b2Vec2();B.SetZero();var A=0;var o=0;var k=new b2Vec2(0,0);var u=1/3;for(var z=0;z<m;++z){var e=k;var c=y[z];var b=z+1<m?y[z+1]:y[0];var n=b2Math.SubtractVV(c,e);var l=b2Math.SubtractVV(b,e);var s=b2Math.b2CrossVV(n,l);var j=0.5*s;A+=j;var h=new b2Vec2();h.SetV(e);h.Add(c);h.Add(b);h.Multiply(u*j);B.Add(h);var t=e.x;var r=e.y;var x=n.x;var a=n.y;var v=l.x;var C=l.y;var g=u*(0.25*(x*x+v*x+v*v)+(t*x+t*v))+0.5*t*t;var q=u*(0.25*(a*a+C*a+C*C)+(r*a+r*C))+0.5*r*r;o+=s*(g+q)}p.mass=f*A;B.Multiply(1/A);p.center=B;o=f*(o-A*b2Math.b2Dot(B,B));p.I=o};b2Shape.PolyCentroid=function(p,h,t){var v=0;var u=0;var x=0;var c=0;var b=0;var m=1/3;for(var s=0;s<h;++s){var r=c;var q=b;var f=p[s].x;var e=p[s].y;var k=s+1<h?p[s+1].x:p[0].x;var j=s+1<h?p[s+1].y:p[0].y;var o=f-r;var n=e-q;var a=k-r;var y=j-q;var l=(o*y-n*a);var g=0.5*l;x+=g;v+=g*m*(r+f+k);u+=g*m*(q+e+j)}v*=1/x;u*=1/x;t.Set(v,u)};var b2ShapeDef=Class.create();b2ShapeDef.prototype={initialize:function(){this.type=b2Shape.e_unknownShape;this.userData=null;this.localPosition=new b2Vec2(0,0);this.localRotation=0;this.friction=0.2;this.restitution=0;this.density=0;this.categoryBits=1;this.maskBits=65535;this.groupIndex=0},ComputeMass:function(a){a.center=new b2Vec2(0,0);if(this.density==0){a.mass=0;a.center.Set(0,0);a.I=0}switch(this.type){case b2Shape.e_circleShape:var e=this;a.mass=this.density*b2Settings.b2_pi*e.radius*e.radius;a.center.Set(0,0);a.I=0.5*(a.mass)*e.radius*e.radius;break;case b2Shape.e_boxShape:var b=this;a.mass=4*this.density*b.extents.x*b.extents.y;a.center.Set(0,0);a.I=a.mass/3*b2Math.b2Dot(b.extents,b.extents);break;case b2Shape.e_polyShape:var c=this;b2Shape.PolyMass(a,c.vertices,c.vertexCount,this.density);break;default:a.mass=0;a.center.Set(0,0);a.I=0;break}},type:0,userData:null,localPosition:null,localRotation:null,friction:null,restitution:null,density:null,categoryBits:0,maskBits:0,groupIndex:0};var b2BoxDef=Class.create();Object.extend(b2BoxDef.prototype,b2ShapeDef.prototype);Object.extend(b2BoxDef.prototype,{initialize:function(){this.type=b2Shape.e_unknownShape;this.userData=null;this.localPosition=new b2Vec2(0,0);this.localRotation=0;this.friction=0.2;this.restitution=0;this.density=0;this.categoryBits=1;this.maskBits=65535;this.groupIndex=0;this.type=b2Shape.e_boxShape;this.extents=new b2Vec2(1,1)},extents:null});var b2CircleDef=Class.create();Object.extend(b2CircleDef.prototype,b2ShapeDef.prototype);Object.extend(b2CircleDef.prototype,{initialize:function(){this.type=b2Shape.e_unknownShape;this.userData=null;this.localPosition=new b2Vec2(0,0);this.localRotation=0;this.friction=0.2;this.restitution=0;this.density=0;this.categoryBits=1;this.maskBits=65535;this.groupIndex=0;this.type=b2Shape.e_circleShape;this.radius=1},radius:null});var b2CircleShape=Class.create();Object.extend(b2CircleShape.prototype,b2Shape.prototype);Object.extend(b2CircleShape.prototype,{TestPoint:function(a){var b=new b2Vec2();b.SetV(a);b.Subtract(this.m_position);return b2Math.b2Dot(b,b)<=this.m_radius*this.m_radius},initialize:function(h,c,b){this.m_R=new b2Mat22();this.m_position=new b2Vec2();this.m_userData=h.userData;this.m_friction=h.friction;this.m_restitution=h.restitution;this.m_body=c;this.m_proxyId=b2Pair.b2_nullProxy;this.m_maxRadius=0;this.m_categoryBits=h.categoryBits;this.m_maskBits=h.maskBits;this.m_groupIndex=h.groupIndex;this.m_localPosition=new b2Vec2();var i=h;this.m_localPosition.Set(h.localPosition.x-b.x,h.localPosition.y-b.y);this.m_type=b2Shape.e_circleShape;this.m_radius=i.radius;this.m_R.SetM(this.m_body.m_R);var g=this.m_R.col1.x*this.m_localPosition.x+this.m_R.col2.x*this.m_localPosition.y;var f=this.m_R.col1.y*this.m_localPosition.x+this.m_R.col2.y*this.m_localPosition.y;this.m_position.x=this.m_body.m_position.x+g;this.m_position.y=this.m_body.m_position.y+f;this.m_maxRadius=Math.sqrt(g*g+f*f)+this.m_radius;var e=new b2AABB();e.minVertex.Set(this.m_position.x-this.m_radius,this.m_position.y-this.m_radius);e.maxVertex.Set(this.m_position.x+this.m_radius,this.m_position.y+this.m_radius);var a=this.m_body.m_world.m_broadPhase;if(a.InRange(e)){this.m_proxyId=a.CreateProxy(e,this)}else{this.m_proxyId=b2Pair.b2_nullProxy}if(this.m_proxyId==b2Pair.b2_nullProxy){this.m_body.Freeze()}},Synchronize:function(c,f,a,b){this.m_R.SetM(b);this.m_position.x=(b.col1.x*this.m_localPosition.x+b.col2.x*this.m_localPosition.y)+a.x;this.m_position.y=(b.col1.y*this.m_localPosition.x+b.col2.y*this.m_localPosition.y)+a.y;if(this.m_proxyId==b2Pair.b2_nullProxy){return}var j=c.x+(f.col1.x*this.m_localPosition.x+f.col2.x*this.m_localPosition.y);var i=c.y+(f.col1.y*this.m_localPosition.x+f.col2.y*this.m_localPosition.y);var m=Math.min(j,this.m_position.x);var l=Math.min(i,this.m_position.y);var g=Math.max(j,this.m_position.x);var e=Math.max(i,this.m_position.y);var h=new b2AABB();h.minVertex.Set(m-this.m_radius,l-this.m_radius);h.maxVertex.Set(g+this.m_radius,e+this.m_radius);var k=this.m_body.m_world.m_broadPhase;if(k.InRange(h)){k.MoveProxy(this.m_proxyId,h)}else{this.m_body.Freeze()}},QuickSync:function(a,b){this.m_R.SetM(b);this.m_position.x=(b.col1.x*this.m_localPosition.x+b.col2.x*this.m_localPosition.y)+a.x;this.m_position.y=(b.col1.y*this.m_localPosition.x+b.col2.y*this.m_localPosition.y)+a.y},ResetProxy:function(a){if(this.m_proxyId==b2Pair.b2_nullProxy){return}var c=a.GetProxy(this.m_proxyId);a.DestroyProxy(this.m_proxyId);c=null;var b=new b2AABB();b.minVertex.Set(this.m_position.x-this.m_radius,this.m_position.y-this.m_radius);b.maxVertex.Set(this.m_position.x+this.m_radius,this.m_position.y+this.m_radius);if(a.InRange(b)){this.m_proxyId=a.CreateProxy(b,this)}else{this.m_proxyId=b2Pair.b2_nullProxy}if(this.m_proxyId==b2Pair.b2_nullProxy){this.m_body.Freeze()}},Support:function(c,b,e){var a=Math.sqrt(c*c+b*b);c/=a;b/=a;e.Set(this.m_position.x+this.m_radius*c,this.m_position.y+this.m_radius*b)},m_localPosition:new b2Vec2(),m_radius:null});var b2MassData=Class.create();b2MassData.prototype={mass:0,center:new b2Vec2(0,0),I:0,initialize:function(){this.center=new b2Vec2(0,0)}};var b2PolyDef=Class.create();Object.extend(b2PolyDef.prototype,b2ShapeDef.prototype);Object.extend(b2PolyDef.prototype,{initialize:function(){this.type=b2Shape.e_unknownShape;this.userData=null;this.localPosition=new b2Vec2(0,0);this.localRotation=0;this.friction=0.2;this.restitution=0;this.density=0;this.categoryBits=1;this.maskBits=65535;this.groupIndex=0;this.vertices=new Array(b2Settings.b2_maxPolyVertices);this.type=b2Shape.e_polyShape;this.vertexCount=0;for(var a=0;a<b2Settings.b2_maxPolyVertices;a++){this.vertices[a]=new b2Vec2()}},vertices:new Array(b2Settings.b2_maxPolyVertices),vertexCount:0});var b2PolyShape=Class.create();Object.extend(b2PolyShape.prototype,b2Shape.prototype);Object.extend(b2PolyShape.prototype,{TestPoint:function(e){var f=new b2Vec2();f.SetV(e);f.Subtract(this.m_position);f.MulTM(this.m_R);for(var c=0;c<this.m_vertexCount;++c){var b=new b2Vec2();b.SetV(f);b.Subtract(this.m_vertices[c]);var a=b2Math.b2Dot(this.m_normals[c],b);if(a>0){return false}}return true},initialize:function(t,p,a){this.m_R=new b2Mat22();this.m_position=new b2Vec2();this.m_userData=t.userData;this.m_friction=t.friction;this.m_restitution=t.restitution;this.m_body=p;this.m_proxyId=b2Pair.b2_nullProxy;this.m_maxRadius=0;this.m_categoryBits=t.categoryBits;this.m_maskBits=t.maskBits;this.m_groupIndex=t.groupIndex;this.syncAABB=new b2AABB();this.syncMat=new b2Mat22();this.m_localCentroid=new b2Vec2();this.m_localOBB=new b2OBB();var y=0;var s;var r;var b;var l=new b2AABB();this.m_vertices=new Array(b2Settings.b2_maxPolyVertices);this.m_coreVertices=new Array(b2Settings.b2_maxPolyVertices);this.m_normals=new Array(b2Settings.b2_maxPolyVertices);this.m_type=b2Shape.e_polyShape;var c=new b2Mat22(t.localRotation);if(t.type==b2Shape.e_boxShape){this.m_localCentroid.x=t.localPosition.x-a.x;this.m_localCentroid.y=t.localPosition.y-a.y;var o=t;this.m_vertexCount=4;s=o.extents.x;r=o.extents.y;var k=Math.max(0,s-2*b2Settings.b2_linearSlop);var h=Math.max(0,r-2*b2Settings.b2_linearSlop);b=this.m_vertices[0]=new b2Vec2();b.x=c.col1.x*s+c.col2.x*r;b.y=c.col1.y*s+c.col2.y*r;b=this.m_vertices[1]=new b2Vec2();b.x=c.col1.x*-s+c.col2.x*r;b.y=c.col1.y*-s+c.col2.y*r;b=this.m_vertices[2]=new b2Vec2();b.x=c.col1.x*-s+c.col2.x*-r;b.y=c.col1.y*-s+c.col2.y*-r;b=this.m_vertices[3]=new b2Vec2();b.x=c.col1.x*s+c.col2.x*-r;b.y=c.col1.y*s+c.col2.y*-r;b=this.m_coreVertices[0]=new b2Vec2();b.x=c.col1.x*k+c.col2.x*h;b.y=c.col1.y*k+c.col2.y*h;b=this.m_coreVertices[1]=new b2Vec2();b.x=c.col1.x*-k+c.col2.x*h;b.y=c.col1.y*-k+c.col2.y*h;b=this.m_coreVertices[2]=new b2Vec2();b.x=c.col1.x*-k+c.col2.x*-h;b.y=c.col1.y*-k+c.col2.y*-h;b=this.m_coreVertices[3]=new b2Vec2();b.x=c.col1.x*k+c.col2.x*-h;b.y=c.col1.y*k+c.col2.y*-h}else{var f=t;this.m_vertexCount=f.vertexCount;b2Shape.PolyCentroid(f.vertices,f.vertexCount,b2PolyShape.tempVec);var j=b2PolyShape.tempVec.x;var g=b2PolyShape.tempVec.y;this.m_localCentroid.x=t.localPosition.x+(c.col1.x*j+c.col2.x*g)-a.x;this.m_localCentroid.y=t.localPosition.y+(c.col1.y*j+c.col2.y*g)-a.y;for(y=0;y<this.m_vertexCount;++y){this.m_vertices[y]=new b2Vec2();this.m_coreVertices[y]=new b2Vec2();s=f.vertices[y].x-j;r=f.vertices[y].y-g;this.m_vertices[y].x=c.col1.x*s+c.col2.x*r;this.m_vertices[y].y=c.col1.y*s+c.col2.y*r;var F=this.m_vertices[y].x;var E=this.m_vertices[y].y;var e=Math.sqrt(F*F+E*E);if(e>Number.MIN_VALUE){F*=1/e;E*=1/e}this.m_coreVertices[y].x=this.m_vertices[y].x-2*b2Settings.b2_linearSlop*F;this.m_coreVertices[y].y=this.m_vertices[y].y-2*b2Settings.b2_linearSlop*E}}var A=Number.MAX_VALUE;var z=Number.MAX_VALUE;var n=-Number.MAX_VALUE;var m=-Number.MAX_VALUE;this.m_maxRadius=0;for(y=0;y<this.m_vertexCount;++y){var q=this.m_vertices[y];A=Math.min(A,q.x);z=Math.min(z,q.y);n=Math.max(n,q.x);m=Math.max(m,q.y);this.m_maxRadius=Math.max(this.m_maxRadius,q.Length())}this.m_localOBB.R.SetIdentity();this.m_localOBB.center.Set((A+n)*0.5,(z+m)*0.5);this.m_localOBB.extents.Set((n-A)*0.5,(m-z)*0.5);var x=0;var u=0;for(y=0;y<this.m_vertexCount;++y){this.m_normals[y]=new b2Vec2();x=y;u=y+1<this.m_vertexCount?y+1:0;this.m_normals[y].x=this.m_vertices[u].y-this.m_vertices[x].y;this.m_normals[y].y=-(this.m_vertices[u].x-this.m_vertices[x].x);this.m_normals[y].Normalize()}for(y=0;y<this.m_vertexCount;++y){x=y;u=y+1<this.m_vertexCount?y+1:0}this.m_R.SetM(this.m_body.m_R);this.m_position.x=this.m_body.m_position.x+(this.m_R.col1.x*this.m_localCentroid.x+this.m_R.col2.x*this.m_localCentroid.y);this.m_position.y=this.m_body.m_position.y+(this.m_R.col1.y*this.m_localCentroid.x+this.m_R.col2.y*this.m_localCentroid.y);b2PolyShape.tAbsR.col1.x=this.m_R.col1.x*this.m_localOBB.R.col1.x+this.m_R.col2.x*this.m_localOBB.R.col1.y;b2PolyShape.tAbsR.col1.y=this.m_R.col1.y*this.m_localOBB.R.col1.x+this.m_R.col2.y*this.m_localOBB.R.col1.y;b2PolyShape.tAbsR.col2.x=this.m_R.col1.x*this.m_localOBB.R.col2.x+this.m_R.col2.x*this.m_localOBB.R.col2.y;b2PolyShape.tAbsR.col2.y=this.m_R.col1.y*this.m_localOBB.R.col2.x+this.m_R.col2.y*this.m_localOBB.R.col2.y;b2PolyShape.tAbsR.Abs();s=b2PolyShape.tAbsR.col1.x*this.m_localOBB.extents.x+b2PolyShape.tAbsR.col2.x*this.m_localOBB.extents.y;r=b2PolyShape.tAbsR.col1.y*this.m_localOBB.extents.x+b2PolyShape.tAbsR.col2.y*this.m_localOBB.extents.y;var D=this.m_position.x+(this.m_R.col1.x*this.m_localOBB.center.x+this.m_R.col2.x*this.m_localOBB.center.y);var C=this.m_position.y+(this.m_R.col1.y*this.m_localOBB.center.x+this.m_R.col2.y*this.m_localOBB.center.y);l.minVertex.x=D-s;l.minVertex.y=C-r;l.maxVertex.x=D+s;l.maxVertex.y=C+r;var B=this.m_body.m_world.m_broadPhase;if(B.InRange(l)){this.m_proxyId=B.CreateProxy(l,this)}else{this.m_proxyId=b2Pair.b2_nullProxy}if(this.m_proxyId==b2Pair.b2_nullProxy){this.m_body.Freeze()}},syncAABB:new b2AABB(),syncMat:new b2Mat22(),Synchronize:function(c,f,a,b){this.m_R.SetM(b);this.m_position.x=this.m_body.m_position.x+(b.col1.x*this.m_localCentroid.x+b.col2.x*this.m_localCentroid.y);this.m_position.y=this.m_body.m_position.y+(b.col1.y*this.m_localCentroid.x+b.col2.y*this.m_localCentroid.y);if(this.m_proxyId==b2Pair.b2_nullProxy){return}var n;var m;var l=f.col1;var k=f.col2;var j=this.m_localOBB.R.col1;var i=this.m_localOBB.R.col2;this.syncMat.col1.x=l.x*j.x+k.x*j.y;this.syncMat.col1.y=l.y*j.x+k.y*j.y;this.syncMat.col2.x=l.x*i.x+k.x*i.y;this.syncMat.col2.y=l.y*i.x+k.y*i.y;this.syncMat.Abs();n=this.m_localCentroid.x+this.m_localOBB.center.x;m=this.m_localCentroid.y+this.m_localOBB.center.y;var g=c.x+(f.col1.x*n+f.col2.x*m);var e=c.y+(f.col1.y*n+f.col2.y*m);n=this.syncMat.col1.x*this.m_localOBB.extents.x+this.syncMat.col2.x*this.m_localOBB.extents.y;m=this.syncMat.col1.y*this.m_localOBB.extents.x+this.syncMat.col2.y*this.m_localOBB.extents.y;this.syncAABB.minVertex.x=g-n;this.syncAABB.minVertex.y=e-m;this.syncAABB.maxVertex.x=g+n;this.syncAABB.maxVertex.y=e+m;l=b.col1;k=b.col2;j=this.m_localOBB.R.col1;i=this.m_localOBB.R.col2;this.syncMat.col1.x=l.x*j.x+k.x*j.y;this.syncMat.col1.y=l.y*j.x+k.y*j.y;this.syncMat.col2.x=l.x*i.x+k.x*i.y;this.syncMat.col2.y=l.y*i.x+k.y*i.y;this.syncMat.Abs();n=this.m_localCentroid.x+this.m_localOBB.center.x;m=this.m_localCentroid.y+this.m_localOBB.center.y;g=a.x+(b.col1.x*n+b.col2.x*m);e=a.y+(b.col1.y*n+b.col2.y*m);n=this.syncMat.col1.x*this.m_localOBB.extents.x+this.syncMat.col2.x*this.m_localOBB.extents.y;m=this.syncMat.col1.y*this.m_localOBB.extents.x+this.syncMat.col2.y*this.m_localOBB.extents.y;this.syncAABB.minVertex.x=Math.min(this.syncAABB.minVertex.x,g-n);this.syncAABB.minVertex.y=Math.min(this.syncAABB.minVertex.y,e-m);this.syncAABB.maxVertex.x=Math.max(this.syncAABB.maxVertex.x,g+n);this.syncAABB.maxVertex.y=Math.max(this.syncAABB.maxVertex.y,e+m);var h=this.m_body.m_world.m_broadPhase;if(h.InRange(this.syncAABB)){h.MoveProxy(this.m_proxyId,this.syncAABB)}else{this.m_body.Freeze()}},QuickSync:function(a,b){this.m_R.SetM(b);this.m_position.x=a.x+(b.col1.x*this.m_localCentroid.x+b.col2.x*this.m_localCentroid.y);this.m_position.y=a.y+(b.col1.y*this.m_localCentroid.x+b.col2.y*this.m_localCentroid.y)},ResetProxy:function(b){if(this.m_proxyId==b2Pair.b2_nullProxy){return}var f=b.GetProxy(this.m_proxyId);b.DestroyProxy(this.m_proxyId);f=null;var i=b2Math.b2MulMM(this.m_R,this.m_localOBB.R);var e=b2Math.b2AbsM(i);var g=b2Math.b2MulMV(e,this.m_localOBB.extents);var a=b2Math.b2MulMV(this.m_R,this.m_localOBB.center);a.Add(this.m_position);var c=new b2AABB();c.minVertex.SetV(a);c.minVertex.Subtract(g);c.maxVertex.SetV(a);c.maxVertex.Add(g);if(b.InRange(c)){this.m_proxyId=b.CreateProxy(c,this)}else{this.m_proxyId=b2Pair.b2_nullProxy}if(this.m_proxyId==b2Pair.b2_nullProxy){this.m_body.Freeze()}},Support:function(c,a,b){var h=(c*this.m_R.col1.x+a*this.m_R.col1.y);var g=(c*this.m_R.col2.x+a*this.m_R.col2.y);var f=0;var k=(this.m_coreVertices[0].x*h+this.m_coreVertices[0].y*g);for(var e=1;e<this.m_vertexCount;++e){var j=(this.m_coreVertices[e].x*h+this.m_coreVertices[e].y*g);if(j>k){f=e;k=j}}b.Set(this.m_position.x+(this.m_R.col1.x*this.m_coreVertices[f].x+this.m_R.col2.x*this.m_coreVertices[f].y),this.m_position.y+(this.m_R.col1.y*this.m_coreVertices[f].x+this.m_R.col2.y*this.m_coreVertices[f].y))},m_localCentroid:new b2Vec2(),m_localOBB:new b2OBB(),m_vertices:null,m_coreVertices:null,m_vertexCount:0,m_normals:null});b2PolyShape.tempVec=new b2Vec2();b2PolyShape.tAbsR=new b2Mat22();var b2Body=Class.create();b2Body.prototype={SetOriginPosition:function(a,b){if(this.IsFrozen()){return}this.m_rotation=b;this.m_R.Set(this.m_rotation);this.m_position=b2Math.AddVV(a,b2Math.b2MulMV(this.m_R,this.m_center));this.m_position0.SetV(this.m_position);this.m_rotation0=this.m_rotation;for(var c=this.m_shapeList;c!=null;c=c.m_next){c.Synchronize(this.m_position,this.m_R,this.m_position,this.m_R)}this.m_world.m_broadPhase.Commit()},GetOriginPosition:function(){return b2Math.SubtractVV(this.m_position,b2Math.b2MulMV(this.m_R,this.m_center))},SetCenterPosition:function(a,b){if(this.IsFrozen()){return}this.m_rotation=b;this.m_R.Set(this.m_rotation);this.m_position.SetV(a);this.m_position0.SetV(this.m_position);this.m_rotation0=this.m_rotation;for(var c=this.m_shapeList;c!=null;c=c.m_next){c.Synchronize(this.m_position,this.m_R,this.m_position,this.m_R)}this.m_world.m_broadPhase.Commit()},GetCenterPosition:function(){return this.m_position},GetRotation:function(){return this.m_rotation},GetRotationMatrix:function(){return this.m_R},SetLinearVelocity:function(a){this.m_linearVelocity.SetV(a)},GetLinearVelocity:function(){return this.m_linearVelocity},SetAngularVelocity:function(a){this.m_angularVelocity=a},GetAngularVelocity:function(){return this.m_angularVelocity},ApplyForce:function(b,a){if(this.IsSleeping()==false){this.m_force.Add(b);this.m_torque+=b2Math.b2CrossVV(b2Math.SubtractVV(a,this.m_position),b)}},ApplyTorque:function(a){if(this.IsSleeping()==false){this.m_torque+=a}},ApplyImpulse:function(b,a){if(this.IsSleeping()==false){this.m_linearVelocity.Add(b2Math.MulFV(this.m_invMass,b));this.m_angularVelocity+=(this.m_invI*b2Math.b2CrossVV(b2Math.SubtractVV(a,this.m_position),b))}},GetMass:function(){return this.m_mass},GetInertia:function(){return this.m_I},GetWorldPoint:function(a){return b2Math.AddVV(this.m_position,b2Math.b2MulMV(this.m_R,a))},GetWorldVector:function(a){return b2Math.b2MulMV(this.m_R,a)},GetLocalPoint:function(a){return b2Math.b2MulTMV(this.m_R,b2Math.SubtractVV(a,this.m_position))},GetLocalVector:function(a){return b2Math.b2MulTMV(this.m_R,a)},IsStatic:function(){return(this.m_flags&b2Body.e_staticFlag)==b2Body.e_staticFlag},IsFrozen:function(){return(this.m_flags&b2Body.e_frozenFlag)==b2Body.e_frozenFlag},IsSleeping:function(){return(this.m_flags&b2Body.e_sleepFlag)==b2Body.e_sleepFlag},AllowSleeping:function(a){if(a){this.m_flags|=b2Body.e_allowSleepFlag}else{this.m_flags&=~b2Body.e_allowSleepFlag;this.WakeUp()}},WakeUp:function(){this.m_flags&=~b2Body.e_sleepFlag;this.m_sleepTime=0},GetShapeList:function(){return this.m_shapeList},GetContactList:function(){return this.m_contactList},GetJointList:function(){return this.m_jointList},GetNext:function(){return this.m_next},GetUserData:function(){return this.m_userData},initialize:function(g,f){this.sMat0=new b2Mat22();this.m_position=new b2Vec2();this.m_R=new b2Mat22(0);this.m_position0=new b2Vec2();var c=0;var h;var a;this.m_flags=0;this.m_position.SetV(g.position);this.m_rotation=g.rotation;this.m_R.Set(this.m_rotation);this.m_position0.SetV(this.m_position);this.m_rotation0=this.m_rotation;this.m_world=f;this.m_linearDamping=b2Math.b2Clamp(1-g.linearDamping,0,1);this.m_angularDamping=b2Math.b2Clamp(1-g.angularDamping,0,1);this.m_force=new b2Vec2(0,0);this.m_torque=0;this.m_mass=0;var j=new Array(b2Settings.b2_maxShapesPerBody);for(c=0;c<b2Settings.b2_maxShapesPerBody;c++){j[c]=new b2MassData()}this.m_shapeCount=0;this.m_center=new b2Vec2(0,0);for(c=0;c<b2Settings.b2_maxShapesPerBody;++c){h=g.shapes[c];if(h==null){break}a=j[c];h.ComputeMass(a);this.m_mass+=a.mass;this.m_center.x+=a.mass*(h.localPosition.x+a.center.x);this.m_center.y+=a.mass*(h.localPosition.y+a.center.y);++this.m_shapeCount}if(this.m_mass>0){this.m_center.Multiply(1/this.m_mass);this.m_position.Add(b2Math.b2MulMV(this.m_R,this.m_center))}else{this.m_flags|=b2Body.e_staticFlag}this.m_I=0;for(c=0;c<this.m_shapeCount;++c){h=g.shapes[c];a=j[c];this.m_I+=a.I;var e=b2Math.SubtractVV(b2Math.AddVV(h.localPosition,a.center),this.m_center);this.m_I+=a.mass*b2Math.b2Dot(e,e)}if(this.m_mass>0){this.m_invMass=1/this.m_mass}else{this.m_invMass=0}if(this.m_I>0&&g.preventRotation==false){this.m_invI=1/this.m_I}else{this.m_I=0;this.m_invI=0}this.m_linearVelocity=b2Math.AddVV(g.linearVelocity,b2Math.b2CrossFV(g.angularVelocity,this.m_center));this.m_angularVelocity=g.angularVelocity;this.m_jointList=null;this.m_contactList=null;this.m_prev=null;this.m_next=null;this.m_shapeList=null;for(c=0;c<this.m_shapeCount;++c){h=g.shapes[c];var b=b2Shape.Create(h,this,this.m_center);b.m_next=this.m_shapeList;this.m_shapeList=b}this.m_sleepTime=0;if(g.allowSleep){this.m_flags|=b2Body.e_allowSleepFlag}if(g.isSleeping){this.m_flags|=b2Body.e_sleepFlag}if((this.m_flags&b2Body.e_sleepFlag)||this.m_invMass==0){this.m_linearVelocity.Set(0,0);this.m_angularVelocity=0}this.m_userData=g.userData},Destroy:function(){var b=this.m_shapeList;while(b){var a=b;b=b.m_next;b2Shape.Destroy(a)}},sMat0:new b2Mat22(),SynchronizeShapes:function(){this.sMat0.Set(this.m_rotation0);for(var a=this.m_shapeList;a!=null;a=a.m_next){a.Synchronize(this.m_position0,this.sMat0,this.m_position,this.m_R)}},QuickSyncShapes:function(){for(var a=this.m_shapeList;a!=null;a=a.m_next){a.QuickSync(this.m_position,this.m_R)}},IsConnected:function(a){for(var b=this.m_jointList;b!=null;b=b.next){if(b.other==a){return b.joint.m_collideConnected==false}}return false},Freeze:function(){this.m_flags|=b2Body.e_frozenFlag;this.m_linearVelocity.SetZero();this.m_angularVelocity=0;for(var a=this.m_shapeList;a!=null;a=a.m_next){a.DestroyProxy()}},m_flags:0,m_position:new b2Vec2(),m_rotation:null,m_R:new b2Mat22(0),m_position0:new b2Vec2(),m_rotation0:null,m_linearVelocity:null,m_angularVelocity:null,m_force:null,m_torque:null,m_center:null,m_world:null,m_prev:null,m_next:null,m_shapeList:null,m_shapeCount:0,m_jointList:null,m_contactList:null,m_mass:null,m_invMass:null,m_I:null,m_invI:null,m_linearDamping:null,m_angularDamping:null,m_sleepTime:null,m_userData:null};b2Body.e_staticFlag=1;b2Body.e_frozenFlag=2;b2Body.e_islandFlag=4;b2Body.e_sleepFlag=8;b2Body.e_allowSleepFlag=16;b2Body.e_destroyFlag=32;var b2BodyDef=Class.create();b2BodyDef.prototype={initialize:function(){this.shapes=new Array();this.userData=null;for(var a=0;a<b2Settings.b2_maxShapesPerBody;a++){this.shapes[a]=null}this.position=new b2Vec2(0,0);this.rotation=0;this.linearVelocity=new b2Vec2(0,0);this.angularVelocity=0;this.linearDamping=0;this.angularDamping=0;this.allowSleep=true;this.isSleeping=false;this.preventRotation=false},userData:null,shapes:new Array(),position:null,rotation:null,linearVelocity:null,angularVelocity:null,linearDamping:null,angularDamping:null,allowSleep:null,isSleeping:null,preventRotation:null,AddShape:function(a){for(var b=0;b<b2Settings.b2_maxShapesPerBody;++b){if(this.shapes[b]==null){this.shapes[b]=a;break}}}};var b2CollisionFilter=Class.create();b2CollisionFilter.prototype={ShouldCollide:function(b,a){if(b.m_groupIndex==a.m_groupIndex&&b.m_groupIndex!=0){return b.m_groupIndex>0}var c=(b.m_maskBits&a.m_categoryBits)!=0&&(b.m_categoryBits&a.m_maskBits)!=0;return c},initialize:function(){}};b2CollisionFilter.b2_defaultFilter=new b2CollisionFilter;var b2Island=Class.create();b2Island.prototype={initialize:function(f,e,c,a){var b=0;this.m_bodyCapacity=f;this.m_contactCapacity=e;this.m_jointCapacity=c;this.m_bodyCount=0;this.m_contactCount=0;this.m_jointCount=0;this.m_bodies=new Array(f);for(b=0;b<f;b++){this.m_bodies[b]=null}this.m_contacts=new Array(e);for(b=0;b<e;b++){this.m_contacts[b]=null}this.m_joints=new Array(c);for(b=0;b<c;b++){this.m_joints[b]=null}this.m_allocator=a},Clear:function(){this.m_bodyCount=0;this.m_contactCount=0;this.m_jointCount=0},Solve:function(c,m){var g=0;var l;for(g=0;g<this.m_bodyCount;++g){l=this.m_bodies[g];if(l.m_invMass==0){continue}l.m_linearVelocity.Add(b2Math.MulFV(c.dt,b2Math.AddVV(m,b2Math.MulFV(l.m_invMass,l.m_force))));l.m_angularVelocity+=c.dt*l.m_invI*l.m_torque;l.m_linearVelocity.Multiply(l.m_linearDamping);l.m_angularVelocity*=l.m_angularDamping;l.m_position0.SetV(l.m_position);l.m_rotation0=l.m_rotation}var e=new b2ContactSolver(this.m_contacts,this.m_contactCount,this.m_allocator);e.PreSolve();for(g=0;g<this.m_jointCount;++g){this.m_joints[g].PrepareVelocitySolver()}for(g=0;g<c.iterations;++g){e.SolveVelocityConstraints();for(var f=0;f<this.m_jointCount;++f){this.m_joints[f].SolveVelocityConstraints(c)}}for(g=0;g<this.m_bodyCount;++g){l=this.m_bodies[g];if(l.m_invMass==0){continue}l.m_position.x+=c.dt*l.m_linearVelocity.x;l.m_position.y+=c.dt*l.m_linearVelocity.y;l.m_rotation+=c.dt*l.m_angularVelocity;l.m_R.Set(l.m_rotation)}for(g=0;g<this.m_jointCount;++g){this.m_joints[g].PreparePositionSolver()}if(b2World.s_enablePositionCorrection){for(b2Island.m_positionIterationCount=0;b2Island.m_positionIterationCount<c.iterations;++b2Island.m_positionIterationCount){var h=e.SolvePositionConstraints(b2Settings.b2_contactBaumgarte);var k=true;for(g=0;g<this.m_jointCount;++g){var a=this.m_joints[g].SolvePositionConstraints();k=k&&a}if(h&&k){break}}}e.PostSolve();for(g=0;g<this.m_bodyCount;++g){l=this.m_bodies[g];if(l.m_invMass==0){continue}l.m_R.Set(l.m_rotation);l.SynchronizeShapes();l.m_force.Set(0,0);l.m_torque=0}},UpdateSleep:function(h){var g=0;var a;var f=Number.MAX_VALUE;var e=b2Settings.b2_linearSleepTolerance*b2Settings.b2_linearSleepTolerance;var c=b2Settings.b2_angularSleepTolerance*b2Settings.b2_angularSleepTolerance;for(g=0;g<this.m_bodyCount;++g){a=this.m_bodies[g];if(a.m_invMass==0){continue}if((a.m_flags&b2Body.e_allowSleepFlag)==0){a.m_sleepTime=0;f=0}if((a.m_flags&b2Body.e_allowSleepFlag)==0||a.m_angularVelocity*a.m_angularVelocity>c||b2Math.b2Dot(a.m_linearVelocity,a.m_linearVelocity)>e){a.m_sleepTime=0;f=0}else{a.m_sleepTime+=h;f=b2Math.b2Min(f,a.m_sleepTime)}}if(f>=b2Settings.b2_timeToSleep){for(g=0;g<this.m_bodyCount;++g){a=this.m_bodies[g];a.m_flags|=b2Body.e_sleepFlag}}},AddBody:function(a){this.m_bodies[this.m_bodyCount++]=a},AddContact:function(a){this.m_contacts[this.m_contactCount++]=a},AddJoint:function(a){this.m_joints[this.m_jointCount++]=a},m_allocator:null,m_bodies:null,m_contacts:null,m_joints:null,m_bodyCount:0,m_jointCount:0,m_contactCount:0,m_bodyCapacity:0,m_contactCapacity:0,m_jointCapacity:0,m_positionError:null};b2Island.m_positionIterationCount=0;var b2TimeStep=Class.create();b2TimeStep.prototype={dt:null,inv_dt:null,iterations:0,initialize:function(){}};var b2ContactNode=Class.create();b2ContactNode.prototype={other:null,contact:null,prev:null,next:null,initialize:function(){}};var b2Contact=Class.create();b2Contact.prototype={GetManifolds:function(){return null},GetManifoldCount:function(){return this.m_manifoldCount},GetNext:function(){return this.m_next},GetShape1:function(){return this.m_shape1},GetShape2:function(){return this.m_shape2},initialize:function(b,a){this.m_node1=new b2ContactNode();this.m_node2=new b2ContactNode();this.m_flags=0;if(!b||!a){this.m_shape1=null;this.m_shape2=null;return}this.m_shape1=b;this.m_shape2=a;this.m_manifoldCount=0;this.m_friction=Math.sqrt(this.m_shape1.m_friction*this.m_shape2.m_friction);this.m_restitution=b2Math.b2Max(this.m_shape1.m_restitution,this.m_shape2.m_restitution);this.m_prev=null;this.m_next=null;this.m_node1.contact=null;this.m_node1.prev=null;this.m_node1.next=null;this.m_node1.other=null;this.m_node2.contact=null;this.m_node2.prev=null;this.m_node2.next=null;this.m_node2.other=null},Evaluate:function(){},m_flags:0,m_prev:null,m_next:null,m_node1:new b2ContactNode(),m_node2:new b2ContactNode(),m_shape1:null,m_shape2:null,m_manifoldCount:0,m_friction:null,m_restitution:null};b2Contact.e_islandFlag=1;b2Contact.e_destroyFlag=2;b2Contact.AddType=function(c,e,b,a){b2Contact.s_registers[b][a].createFcn=c;b2Contact.s_registers[b][a].destroyFcn=e;b2Contact.s_registers[b][a].primary=true;if(b!=a){b2Contact.s_registers[a][b].createFcn=c;b2Contact.s_registers[a][b].destroyFcn=e;b2Contact.s_registers[a][b].primary=false}};b2Contact.InitializeRegisters=function(){b2Contact.s_registers=new Array(b2Shape.e_shapeTypeCount);for(var b=0;b<b2Shape.e_shapeTypeCount;b++){b2Contact.s_registers[b]=new Array(b2Shape.e_shapeTypeCount);for(var a=0;a<b2Shape.e_shapeTypeCount;a++){b2Contact.s_registers[b][a]=new b2ContactRegister()}}b2Contact.AddType(b2CircleContact.Create,b2CircleContact.Destroy,b2Shape.e_circleShape,b2Shape.e_circleShape);b2Contact.AddType(b2PolyAndCircleContact.Create,b2PolyAndCircleContact.Destroy,b2Shape.e_polyShape,b2Shape.e_circleShape);b2Contact.AddType(b2PolyContact.Create,b2PolyContact.Destroy,b2Shape.e_polyShape,b2Shape.e_polyShape)};b2Contact.Create=function(l,k,a){if(b2Contact.s_initialized==false){b2Contact.InitializeRegisters();b2Contact.s_initialized=true}var f=l.m_type;var e=k.m_type;var h=b2Contact.s_registers[f][e].createFcn;if(h){if(b2Contact.s_registers[f][e].primary){return h(l,k,a)}else{var j=h(k,l,a);for(var g=0;g<j.GetManifoldCount();++g){var b=j.GetManifolds()[g];b.normal=b.normal.Negative()}return j}}else{return null}};b2Contact.Destroy=function(a,c){if(a.GetManifoldCount()>0){a.m_shape1.m_body.WakeUp();a.m_shape2.m_body.WakeUp()}var e=a.m_shape1.m_type;var b=a.m_shape2.m_type;var f=b2Contact.s_registers[e][b].destroyFcn;f(a,c)};b2Contact.s_registers=null;b2Contact.s_initialized=false;var b2ContactConstraint=Class.create();b2ContactConstraint.prototype={initialize:function(){this.normal=new b2Vec2();this.points=new Array(b2Settings.b2_maxManifoldPoints);for(var a=0;a<b2Settings.b2_maxManifoldPoints;a++){this.points[a]=new b2ContactConstraintPoint()}},points:null,normal:new b2Vec2(),manifold:null,body1:null,body2:null,friction:null,restitution:null,pointCount:0};var b2ContactConstraintPoint=Class.create();b2ContactConstraintPoint.prototype={localAnchor1:new b2Vec2(),localAnchor2:new b2Vec2(),normalImpulse:null,tangentImpulse:null,positionImpulse:null,normalMass:null,tangentMass:null,separation:null,velocityBias:null,initialize:function(){this.localAnchor1=new b2Vec2();this.localAnchor2=new b2Vec2()}};var b2ContactRegister=Class.create();b2ContactRegister.prototype={createFcn:null,destroyFcn:null,primary:null,initialize:function(){}};var b2ContactSolver=Class.create();b2ContactSolver.prototype={initialize:function(p,q,m){this.m_constraints=new Array();this.m_allocator=m;var W=0;var J;var P;this.m_constraintCount=0;for(W=0;W<q;++W){this.m_constraintCount+=p[W].GetManifoldCount()}for(W=0;W<this.m_constraintCount;W++){this.m_constraints[W]=new b2ContactConstraint()}var N=0;for(W=0;W<q;++W){var o=p[W];var A=o.m_shape1.m_body;var z=o.m_shape2.m_body;var f=o.GetManifoldCount();var M=o.GetManifolds();var y=o.m_friction;var a=o.m_restitution;var v=A.m_linearVelocity.x;var t=A.m_linearVelocity.y;var g=z.m_linearVelocity.x;var e=z.m_linearVelocity.y;var I=A.m_angularVelocity;var H=z.m_angularVelocity;for(var V=0;V<f;++V){var D=M[V];var L=D.normal.x;var K=D.normal.y;var X=this.m_constraints[N];X.body1=A;X.body2=z;X.manifold=D;X.normal.x=L;X.normal.y=K;X.pointCount=D.pointCount;X.friction=y;X.restitution=a;for(var T=0;T<X.pointCount;++T){var B=D.points[T];var b=X.points[T];b.normalImpulse=B.normalImpulse;b.tangentImpulse=B.tangentImpulse;b.separation=B.separation;var U=B.position.x-A.m_position.x;var S=B.position.y-A.m_position.y;var F=B.position.x-z.m_position.x;var E=B.position.y-z.m_position.y;J=b.localAnchor1;P=A.m_R;J.x=U*P.col1.x+S*P.col1.y;J.y=U*P.col2.x+S*P.col2.y;J=b.localAnchor2;P=z.m_R;J.x=F*P.col1.x+E*P.col1.y;J.y=F*P.col2.x+E*P.col2.y;var n=U*U+S*S;var G=F*F+E*E;var s=U*L+S*K;var r=F*L+E*K;var C=A.m_invMass+z.m_invMass;C+=A.m_invI*(n-s*s)+z.m_invI*(G-r*r);b.normalMass=1/C;var Q=K;var O=-L;var x=U*Q+S*O;var u=F*Q+E*O;var Y=A.m_invMass+z.m_invMass;Y+=A.m_invI*(n-x*x)+z.m_invI*(G-u*u);b.tangentMass=1/Y;b.velocityBias=0;if(b.separation>0){b.velocityBias=-60*b.separation}var l=g+(-H*E)-v-(-I*S);var h=e+(H*F)-t-(I*U);var R=X.normal.x*l+X.normal.y*h;if(R<-b2Settings.b2_velocityThreshold){b.velocityBias+=-X.restitution*R}}++N}}},PreSolve:function(){var b;var C;var s;for(var y=0;y<this.m_constraintCount;++y){var D=this.m_constraints[y];var p=D.body1;var o=D.body2;var u=p.m_invMass;var n=p.m_invI;var t=o.m_invMass;var m=o.m_invI;var f=D.normal.x;var e=D.normal.y;var l=e;var k=-f;var x=0;var z=0;if(b2World.s_enableWarmStarting){z=D.pointCount;for(x=0;x<z;++x){var a=D.points[x];var r=a.normalImpulse*f+a.tangentImpulse*l;var q=a.normalImpulse*e+a.tangentImpulse*k;s=p.m_R;b=a.localAnchor1;var B=s.col1.x*b.x+s.col2.x*b.y;var A=s.col1.y*b.x+s.col2.y*b.y;s=o.m_R;b=a.localAnchor2;var h=s.col1.x*b.x+s.col2.x*b.y;var g=s.col1.y*b.x+s.col2.y*b.y;p.m_angularVelocity-=n*(B*q-A*r);p.m_linearVelocity.x-=u*r;p.m_linearVelocity.y-=u*q;o.m_angularVelocity+=m*(h*q-g*r);o.m_linearVelocity.x+=t*r;o.m_linearVelocity.y+=t*q;a.positionImpulse=0}}else{z=D.pointCount;for(x=0;x<z;++x){var v=D.points[x];v.normalImpulse=0;v.tangentImpulse=0;v.positionImpulse=0}}}},SolveVelocityConstraints:function(){var F=0;var a;var K;var J;var l;var h;var C;var B;var z;var M;var s;var r;var t;var b;for(var G=0;G<this.m_constraintCount;++G){var L=this.m_constraints[G];var q=L.body1;var p=L.body2;var x=q.m_angularVelocity;var g=q.m_linearVelocity;var A=p.m_angularVelocity;var v=p.m_linearVelocity;var y=q.m_invMass;var o=q.m_invI;var u=p.m_invMass;var n=p.m_invI;var f=L.normal.x;var e=L.normal.y;var m=e;var k=-f;var I=L.pointCount;for(F=0;F<I;++F){a=L.points[F];t=q.m_R;b=a.localAnchor1;K=t.col1.x*b.x+t.col2.x*b.y;J=t.col1.y*b.x+t.col2.y*b.y;t=p.m_R;b=a.localAnchor2;l=t.col1.x*b.x+t.col2.x*b.y;h=t.col1.y*b.x+t.col2.y*b.y;C=v.x+(-A*h)-g.x-(-x*J);B=v.y+(A*l)-g.y-(x*K);var H=C*f+B*e;z=-a.normalMass*(H-a.velocityBias);M=b2Math.b2Max(a.normalImpulse+z,0);z=M-a.normalImpulse;s=z*f;r=z*e;g.x-=y*s;g.y-=y*r;x-=o*(K*r-J*s);v.x+=u*s;v.y+=u*r;A+=n*(l*r-h*s);a.normalImpulse=M;C=v.x+(-A*h)-g.x-(-x*J);B=v.y+(A*l)-g.y-(x*K);var E=C*m+B*k;z=a.tangentMass*(-E);var D=L.friction*a.normalImpulse;M=b2Math.b2Clamp(a.tangentImpulse+z,-D,D);z=M-a.tangentImpulse;s=z*m;r=z*k;g.x-=y*s;g.y-=y*r;x-=o*(K*r-J*s);v.x+=u*s;v.y+=u*r;A+=n*(l*r-h*s);a.tangentImpulse=M}q.m_angularVelocity=x;p.m_angularVelocity=A}},SolvePositionConstraints:function(y){var z=0;var J;var A;for(var P=0;P<this.m_constraintCount;++P){var S=this.m_constraints[P];var t=S.body1;var s=S.body2;var g=t.m_position;var a=t.m_rotation;var n=s.m_position;var h=s.m_rotation;var G=t.m_invMass;var q=t.m_invI;var E=s.m_invMass;var p=s.m_invI;var D=S.normal.x;var B=S.normal.y;var L=B;var K=-D;var r=S.pointCount;for(var O=0;O<r;++O){var b=S.points[O];J=t.m_R;A=b.localAnchor1;var N=J.col1.x*A.x+J.col2.x*A.y;var M=J.col1.y*A.x+J.col2.y*A.y;J=s.m_R;A=b.localAnchor2;var x=J.col1.x*A.x+J.col2.x*A.y;var v=J.col1.y*A.x+J.col2.y*A.y;var f=g.x+N;var e=g.y+M;var H=n.x+x;var F=n.y+v;var R=H-f;var Q=F-e;var l=(R*D+Q*B)+b.separation;z=b2Math.b2Min(z,l);var k=y*b2Math.b2Clamp(l+b2Settings.b2_linearSlop,-b2Settings.b2_maxLinearCorrection,0);var u=-b.normalMass*k;var I=b.positionImpulse;b.positionImpulse=b2Math.b2Max(I+u,0);u=b.positionImpulse-I;var o=u*D;var m=u*B;g.x-=G*o;g.y-=G*m;a-=q*(N*m-M*o);t.m_R.Set(a);n.x+=E*o;n.y+=E*m;h+=p*(x*m-v*o);s.m_R.Set(h)}t.m_rotation=a;s.m_rotation=h}return z>=-b2Settings.b2_linearSlop},PostSolve:function(){for(var e=0;e<this.m_constraintCount;++e){var h=this.m_constraints[e];var a=h.manifold;for(var b=0;b<h.pointCount;++b){var g=a.points[b];var f=h.points[b];g.normalImpulse=f.normalImpulse;g.tangentImpulse=f.tangentImpulse}}},m_allocator:null,m_constraints:new Array(),m_constraintCount:0};var b2CircleContact=Class.create();Object.extend(b2CircleContact.prototype,b2Contact.prototype);Object.extend(b2CircleContact.prototype,{initialize:function(b,a){this.m_node1=new b2ContactNode();this.m_node2=new b2ContactNode();this.m_flags=0;if(!b||!a){this.m_shape1=null;this.m_shape2=null;return}this.m_shape1=b;this.m_shape2=a;this.m_manifoldCount=0;this.m_friction=Math.sqrt(this.m_shape1.m_friction*this.m_shape2.m_friction);this.m_restitution=b2Math.b2Max(this.m_shape1.m_restitution,this.m_shape2.m_restitution);this.m_prev=null;this.m_next=null;this.m_node1.contact=null;this.m_node1.prev=null;this.m_node1.next=null;this.m_node1.other=null;this.m_node2.contact=null;this.m_node2.prev=null;this.m_node2.next=null;this.m_node2.other=null;this.m_manifold=[new b2Manifold()];this.m_manifold[0].pointCount=0;this.m_manifold[0].points[0].normalImpulse=0;this.m_manifold[0].points[0].tangentImpulse=0},Evaluate:function(){b2Collision.b2CollideCircle(this.m_manifold[0],this.m_shape1,this.m_shape2,false);if(this.m_manifold[0].pointCount>0){this.m_manifoldCount=1}else{this.m_manifoldCount=0}},GetManifolds:function(){return this.m_manifold},m_manifold:[new b2Manifold()]});b2CircleContact.Create=function(b,a,c){return new b2CircleContact(b,a)};b2CircleContact.Destroy=function(a,b){};var b2Conservative=Class.create();b2Conservative.prototype={initialize:function(){}};b2Conservative.R1=new b2Mat22();b2Conservative.R2=new b2Mat22();b2Conservative.x1=new b2Vec2();b2Conservative.x2=new b2Vec2();b2Conservative.Conservative=function(k,j){var i=k.GetBody();var h=j.GetBody();var s=i.m_position.x-i.m_position0.x;var q=i.m_position.y-i.m_position0.y;var I=i.m_rotation-i.m_rotation0;var b=h.m_position.x-h.m_position0.x;var a=h.m_position.y-h.m_position0.y;var G=h.m_rotation-h.m_rotation0;var m=k.GetMaxRadius();var l=j.GetMaxRadius();var J=i.m_position0.x;var E=i.m_position0.y;var A=i.m_rotation0;var F=h.m_position0.x;var D=h.m_position0.y;var n=h.m_rotation0;var e=J;var c=E;var K=A;var C=F;var B=D;var H=n;b2Conservative.R1.Set(K);b2Conservative.R2.Set(H);k.QuickSync(p1,b2Conservative.R1);j.QuickSync(p2,b2Conservative.R2);var M=0;var o=10;var u;var t;var z=0;var v=true;for(var x=0;x<o;++x){var r=b2Distance.Distance(b2Conservative.x1,b2Conservative.x2,k,j);if(r<b2Settings.b2_linearSlop){if(x==0){v=false}else{v=true}break}if(x==0){u=b2Conservative.x2.x-b2Conservative.x1.x;t=b2Conservative.x2.y-b2Conservative.x1.y;var f=Math.sqrt(u*u+t*t);var y=(u*(s-b)+t*(q-a))+Math.abs(I)*m+Math.abs(G)*l;if(Math.abs(y)<Number.MIN_VALUE){v=false;break}z=1/y}var g=r*z;var L=M+g;if(L<0||1<L){v=false;break}if(L<(1+100*Number.MIN_VALUE)*M){v=true;break}M=L;e=J+M*v1.x;c=E+M*v1.y;K=A+M*I;C=F+M*v2.x;B=D+M*v2.y;H=n+M*G;b2Conservative.R1.Set(K);b2Conservative.R2.Set(H);k.QuickSync(p1,b2Conservative.R1);j.QuickSync(p2,b2Conservative.R2)}if(v){u=b2Conservative.x2.x-b2Conservative.x1.x;t=b2Conservative.x2.y-b2Conservative.x1.y;var p=Math.sqrt(u*u+t*t);if(p>FLT_EPSILON){d*=b2_linearSlop/p}if(i.IsStatic()){i.m_position.x=e;i.m_position.y=c}else{i.m_position.x=e-u;i.m_position.y=c-t}i.m_rotation=K;i.m_R.Set(K);i.QuickSyncShapes();if(h.IsStatic()){h.m_position.x=C;h.m_position.y=B}else{h.m_position.x=C+u;h.m_position.y=B+t}h.m_position.x=C+u;h.m_position.y=B+t;h.m_rotation=H;h.m_R.Set(H);h.QuickSyncShapes();return true}k.QuickSync(i.m_position,i.m_R);j.QuickSync(h.m_position,h.m_R);return false};var b2NullContact=Class.create();Object.extend(b2NullContact.prototype,b2Contact.prototype);Object.extend(b2NullContact.prototype,{initialize:function(b,a){this.m_node1=new b2ContactNode();this.m_node2=new b2ContactNode();this.m_flags=0;if(!b||!a){this.m_shape1=null;this.m_shape2=null;return}this.m_shape1=b;this.m_shape2=a;this.m_manifoldCount=0;this.m_friction=Math.sqrt(this.m_shape1.m_friction*this.m_shape2.m_friction);this.m_restitution=b2Math.b2Max(this.m_shape1.m_restitution,this.m_shape2.m_restitution);this.m_prev=null;this.m_next=null;this.m_node1.contact=null;this.m_node1.prev=null;this.m_node1.next=null;this.m_node1.other=null;this.m_node2.contact=null;this.m_node2.prev=null;this.m_node2.next=null;this.m_node2.other=null},Evaluate:function(){},GetManifolds:function(){return null}});var b2PolyAndCircleContact=Class.create();Object.extend(b2PolyAndCircleContact.prototype,b2Contact.prototype);Object.extend(b2PolyAndCircleContact.prototype,{initialize:function(b,a){this.m_node1=new b2ContactNode();this.m_node2=new b2ContactNode();this.m_flags=0;if(!b||!a){this.m_shape1=null;this.m_shape2=null;return}this.m_shape1=b;this.m_shape2=a;this.m_manifoldCount=0;this.m_friction=Math.sqrt(this.m_shape1.m_friction*this.m_shape2.m_friction);this.m_restitution=b2Math.b2Max(this.m_shape1.m_restitution,this.m_shape2.m_restitution);this.m_prev=null;this.m_next=null;this.m_node1.contact=null;this.m_node1.prev=null;this.m_node1.next=null;this.m_node1.other=null;this.m_node2.contact=null;this.m_node2.prev=null;this.m_node2.next=null;this.m_node2.other=null;this.m_manifold=[new b2Manifold()];b2Settings.b2Assert(this.m_shape1.m_type==b2Shape.e_polyShape);b2Settings.b2Assert(this.m_shape2.m_type==b2Shape.e_circleShape);this.m_manifold[0].pointCount=0;this.m_manifold[0].points[0].normalImpulse=0;this.m_manifold[0].points[0].tangentImpulse=0},Evaluate:function(){b2Collision.b2CollidePolyAndCircle(this.m_manifold[0],this.m_shape1,this.m_shape2,false);if(this.m_manifold[0].pointCount>0){this.m_manifoldCount=1}else{this.m_manifoldCount=0}},GetManifolds:function(){return this.m_manifold},m_manifold:[new b2Manifold()]});b2PolyAndCircleContact.Create=function(b,a,c){return new b2PolyAndCircleContact(b,a)};b2PolyAndCircleContact.Destroy=function(a,b){};var b2PolyContact=Class.create();Object.extend(b2PolyContact.prototype,b2Contact.prototype);Object.extend(b2PolyContact.prototype,{initialize:function(b,a){this.m_node1=new b2ContactNode();this.m_node2=new b2ContactNode();this.m_flags=0;if(!b||!a){this.m_shape1=null;this.m_shape2=null;return}this.m_shape1=b;this.m_shape2=a;this.m_manifoldCount=0;this.m_friction=Math.sqrt(this.m_shape1.m_friction*this.m_shape2.m_friction);this.m_restitution=b2Math.b2Max(this.m_shape1.m_restitution,this.m_shape2.m_restitution);this.m_prev=null;this.m_next=null;this.m_node1.contact=null;this.m_node1.prev=null;this.m_node1.next=null;this.m_node1.other=null;this.m_node2.contact=null;this.m_node2.prev=null;this.m_node2.next=null;this.m_node2.other=null;this.m0=new b2Manifold();this.m_manifold=[new b2Manifold()];this.m_manifold[0].pointCount=0},m0:new b2Manifold(),Evaluate:function(){var a=this.m_manifold[0];var b=this.m0.points;for(var e=0;e<a.pointCount;e++){var c=b[e];var p=a.points[e];c.normalImpulse=p.normalImpulse;c.tangentImpulse=p.tangentImpulse;c.id=p.id.Copy()}this.m0.pointCount=a.pointCount;b2Collision.b2CollidePoly(a,this.m_shape1,this.m_shape2,false);if(a.pointCount>0){var l=[false,false];for(var g=0;g<a.pointCount;++g){var n=a.points[g];n.normalImpulse=0;n.tangentImpulse=0;var m=n.id.key;for(var f=0;f<this.m0.pointCount;++f){if(l[f]==true){continue}var h=this.m0.points[f];var o=h.id;if(o.key==m){l[f]=true;n.normalImpulse=h.normalImpulse;n.tangentImpulse=h.tangentImpulse;break}}}this.m_manifoldCount=1}else{this.m_manifoldCount=0}},GetManifolds:function(){return this.m_manifold},m_manifold:[new b2Manifold()]});b2PolyContact.Create=function(b,a,c){return new b2PolyContact(b,a)};b2PolyContact.Destroy=function(a,b){};var b2ContactManager=Class.create();Object.extend(b2ContactManager.prototype,b2PairCallback.prototype);Object.extend(b2ContactManager.prototype,{initialize:function(){this.m_nullContact=new b2NullContact();this.m_world=null;this.m_destroyImmediate=false},PairAdded:function(g,e){var j=g;var h=e;var a=j.m_body;var i=h.m_body;if(a.IsStatic()&&i.IsStatic()){return this.m_nullContact}if(j.m_body==h.m_body){return this.m_nullContact}if(i.IsConnected(a)){return this.m_nullContact}if(this.m_world.m_filter!=null&&this.m_world.m_filter.ShouldCollide(j,h)==false){return this.m_nullContact}if(i.m_invMass==0){var f=j;j=h;h=f;var c=a;a=i;i=c}var b=b2Contact.Create(j,h,this.m_world.m_blockAllocator);if(b==null){return this.m_nullContact}else{b.m_prev=null;b.m_next=this.m_world.m_contactList;if(this.m_world.m_contactList!=null){this.m_world.m_contactList.m_prev=b}this.m_world.m_contactList=b;this.m_world.m_contactCount++}return b},PairRemoved:function(f,b,a){if(a==null){return}var e=a;if(e!=this.m_nullContact){if(this.m_destroyImmediate==true){this.DestroyContact(e);e=null}else{e.m_flags|=b2Contact.e_destroyFlag}}},DestroyContact:function(g){if(g.m_prev){g.m_prev.m_next=g.m_next}if(g.m_next){g.m_next.m_prev=g.m_prev}if(g==this.m_world.m_contactList){this.m_world.m_contactList=g.m_next}if(g.GetManifoldCount()>0){var f=g.m_shape1.m_body;var e=g.m_shape2.m_body;var b=g.m_node1;var a=g.m_node2;f.WakeUp();e.WakeUp();if(b.prev){b.prev.next=b.next}if(b.next){b.next.prev=b.prev}if(b==f.m_contactList){f.m_contactList=b.next}b.prev=null;b.next=null;if(a.prev){a.prev.next=a.next}if(a.next){a.next.prev=a.prev}if(a==e.m_contactList){e.m_contactList=a.next}a.prev=null;a.next=null}b2Contact.Destroy(g,this.m_world.m_blockAllocator);--this.m_world.m_contactCount},CleanContactList:function(){var b=this.m_world.m_contactList;while(b!=null){var a=b;b=b.m_next;if(a.m_flags&b2Contact.e_destroyFlag){this.DestroyContact(a);a=null}}},Collide:function(){var g;var f;var e;var a;for(var i=this.m_world.m_contactList;i!=null;i=i.m_next){if(i.m_shape1.m_body.IsSleeping()&&i.m_shape2.m_body.IsSleeping()){continue}var b=i.GetManifoldCount();i.Evaluate();var h=i.GetManifoldCount();if(b==0&&h>0){g=i.m_shape1.m_body;f=i.m_shape2.m_body;e=i.m_node1;a=i.m_node2;e.contact=i;e.other=f;e.prev=null;e.next=g.m_contactList;if(e.next!=null){e.next.prev=i.m_node1}g.m_contactList=i.m_node1;a.contact=i;a.other=g;a.prev=null;a.next=f.m_contactList;if(a.next!=null){a.next.prev=a}f.m_contactList=a}else{if(b>0&&h==0){g=i.m_shape1.m_body;f=i.m_shape2.m_body;e=i.m_node1;a=i.m_node2;if(e.prev){e.prev.next=e.next}if(e.next){e.next.prev=e.prev}if(e==g.m_contactList){g.m_contactList=e.next}e.prev=null;e.next=null;if(a.prev){a.prev.next=a.next}if(a.next){a.next.prev=a.prev}if(a==f.m_contactList){f.m_contactList=a.next}a.prev=null;a.next=null}}}},m_world:null,m_nullContact:new b2NullContact(),m_destroyImmediate:null});var b2World=Class.create();b2World.prototype={initialize:function(a,e,c){this.step=new b2TimeStep();this.m_contactManager=new b2ContactManager();this.m_listener=null;this.m_filter=b2CollisionFilter.b2_defaultFilter;this.m_bodyList=null;this.m_contactList=null;this.m_jointList=null;this.m_bodyCount=0;this.m_contactCount=0;this.m_jointCount=0;this.m_bodyDestroyList=null;this.m_allowSleep=c;this.m_gravity=e;this.m_contactManager.m_world=this;this.m_broadPhase=new b2BroadPhase(a,this.m_contactManager);var b=new b2BodyDef();this.m_groundBody=this.CreateBody(b)},SetListener:function(a){this.m_listener=a},SetFilter:function(a){this.m_filter=a},CreateBody:function(c){var a=new b2Body(c,this);a.m_prev=null;a.m_next=this.m_bodyList;if(this.m_bodyList){this.m_bodyList.m_prev=a}this.m_bodyList=a;++this.m_bodyCount;return a},DestroyBody:function(a){if(a.m_flags&b2Body.e_destroyFlag){return}if(a.m_prev){a.m_prev.m_next=a.m_next}if(a.m_next){a.m_next.m_prev=a.m_prev}if(a==this.m_bodyList){this.m_bodyList=a.m_next}a.m_flags|=b2Body.e_destroyFlag;--this.m_bodyCount;a.m_prev=null;a.m_next=this.m_bodyDestroyList;this.m_bodyDestroyList=a},CleanBodyList:function(){this.m_contactManager.m_destroyImmediate=true;var c=this.m_bodyDestroyList;while(c){var f=c;c=c.m_next;var e=f.m_jointList;while(e){var a=e;e=e.next;if(this.m_listener){this.m_listener.NotifyJointDestroyed(a.joint)}this.DestroyJoint(a.joint)}f.Destroy()}this.m_bodyDestroyList=null;this.m_contactManager.m_destroyImmediate=false},CreateJoint:function(f){var c=b2Joint.Create(f,this.m_blockAllocator);c.m_prev=null;c.m_next=this.m_jointList;if(this.m_jointList){this.m_jointList.m_prev=c}this.m_jointList=c;++this.m_jointCount;c.m_node1.joint=c;c.m_node1.other=c.m_body2;c.m_node1.prev=null;c.m_node1.next=c.m_body1.m_jointList;if(c.m_body1.m_jointList){c.m_body1.m_jointList.prev=c.m_node1}c.m_body1.m_jointList=c.m_node1;c.m_node2.joint=c;c.m_node2.other=c.m_body1;c.m_node2.prev=null;c.m_node2.next=c.m_body2.m_jointList;if(c.m_body2.m_jointList){c.m_body2.m_jointList.prev=c.m_node2}c.m_body2.m_jointList=c.m_node2;if(f.collideConnected==false){var a=f.body1.m_shapeCount<f.body2.m_shapeCount?f.body1:f.body2;for(var e=a.m_shapeList;e;e=e.m_next){e.ResetProxy(this.m_broadPhase)}}return c},DestroyJoint:function(f){var h=f.m_collideConnected;if(f.m_prev){f.m_prev.m_next=f.m_next}if(f.m_next){f.m_next.m_prev=f.m_prev}if(f==this.m_jointList){this.m_jointList=f.m_next}var e=f.m_body1;var c=f.m_body2;e.WakeUp();c.WakeUp();if(f.m_node1.prev){f.m_node1.prev.next=f.m_node1.next}if(f.m_node1.next){f.m_node1.next.prev=f.m_node1.prev}if(f.m_node1==e.m_jointList){e.m_jointList=f.m_node1.next}f.m_node1.prev=null;f.m_node1.next=null;if(f.m_node2.prev){f.m_node2.prev.next=f.m_node2.next}if(f.m_node2.next){f.m_node2.next.prev=f.m_node2.prev}if(f.m_node2==c.m_jointList){c.m_jointList=f.m_node2.next}f.m_node2.prev=null;f.m_node2.next=null;b2Joint.Destroy(f,this.m_blockAllocator);--this.m_jointCount;if(h==false){var a=e.m_shapeCount<c.m_shapeCount?e:c;for(var g=a.m_shapeList;g;g=g.m_next){g.ResetProxy(this.m_broadPhase)}}},GetGroundBody:function(){return this.m_groundBody},step:new b2TimeStep(),Step:function(a,e){var s;var p;this.step.dt=a;this.step.iterations=e;if(a>0){this.step.inv_dt=1/a}else{this.step.inv_dt=0}this.m_positionIterationCount=0;this.m_contactManager.CleanContactList();this.CleanBodyList();this.m_contactManager.Collide();var o=new b2Island(this.m_bodyCount,this.m_contactCount,this.m_jointCount,this.m_stackAllocator);for(s=this.m_bodyList;s!=null;s=s.m_next){s.m_flags&=~b2Body.e_islandFlag}for(var q=this.m_contactList;q!=null;q=q.m_next){q.m_flags&=~b2Contact.e_islandFlag}for(var l=this.m_jointList;l!=null;l=l.m_next){l.m_islandFlag=false}var v=this.m_bodyCount;var r=new Array(this.m_bodyCount);for(var h=0;h<this.m_bodyCount;h++){r[h]=null}for(var n=this.m_bodyList;n!=null;n=n.m_next){if(n.m_flags&(b2Body.e_staticFlag|b2Body.e_islandFlag|b2Body.e_sleepFlag|b2Body.e_frozenFlag)){continue}o.Clear();var u=0;r[u++]=n;n.m_flags|=b2Body.e_islandFlag;while(u>0){s=r[--u];o.AddBody(s);s.m_flags&=~b2Body.e_sleepFlag;if(s.m_flags&b2Body.e_staticFlag){continue}for(var t=s.m_contactList;t!=null;t=t.next){if(t.contact.m_flags&b2Contact.e_islandFlag){continue}o.AddContact(t.contact);t.contact.m_flags|=b2Contact.e_islandFlag;p=t.other;if(p.m_flags&b2Body.e_islandFlag){continue}r[u++]=p;p.m_flags|=b2Body.e_islandFlag}for(var g=s.m_jointList;g!=null;g=g.next){if(g.joint.m_islandFlag==true){continue}o.AddJoint(g.joint);g.joint.m_islandFlag=true;p=g.other;if(p.m_flags&b2Body.e_islandFlag){continue}r[u++]=p;p.m_flags|=b2Body.e_islandFlag}}o.Solve(this.step,this.m_gravity);this.m_positionIterationCount=b2Math.b2Max(this.m_positionIterationCount,b2Island.m_positionIterationCount);if(this.m_allowSleep){o.UpdateSleep(a)}for(var m=0;m<o.m_bodyCount;++m){s=o.m_bodies[m];if(s.m_flags&b2Body.e_staticFlag){s.m_flags&=~b2Body.e_islandFlag}if(s.IsFrozen()&&this.m_listener){var f=this.m_listener.NotifyBoundaryViolated(s);if(f==b2WorldListener.b2_destroyBody){this.DestroyBody(s);s=null;o.m_bodies[m]=null}}}}this.m_broadPhase.Commit()},Query:function(b,a,g){var e=new Array();var f=this.m_broadPhase.QueryAABB(b,e,g);for(var c=0;c<f;++c){a[c]=e[c]}return f},GetBodyList:function(){return this.m_bodyList},GetJointList:function(){return this.m_jointList},GetContactList:function(){return this.m_contactList},m_blockAllocator:null,m_stackAllocator:null,m_broadPhase:null,m_contactManager:new b2ContactManager(),m_bodyList:null,m_contactList:null,m_jointList:null,m_bodyCount:0,m_contactCount:0,m_jointCount:0,m_bodyDestroyList:null,m_gravity:null,m_allowSleep:null,m_groundBody:null,m_listener:null,m_filter:null,m_positionIterationCount:0};b2World.s_enablePositionCorrection=1;b2World.s_enableWarmStarting=1;var b2WorldListener=Class.create();b2WorldListener.prototype={NotifyJointDestroyed:function(a){},NotifyBoundaryViolated:function(a){return b2WorldListener.b2_freezeBody},initialize:function(){}};b2WorldListener.b2_freezeBody=0;b2WorldListener.b2_destroyBody=1;var b2JointNode=Class.create();b2JointNode.prototype={other:null,joint:null,prev:null,next:null,initialize:function(){}};var b2Joint=Class.create();b2Joint.prototype={GetType:function(){return this.m_type},GetAnchor1:function(){return null},GetAnchor2:function(){return null},GetReactionForce:function(a){return null},GetReactionTorque:function(a){return 0},GetBody1:function(){return this.m_body1},GetBody2:function(){return this.m_body2},GetNext:function(){return this.m_next},GetUserData:function(){return this.m_userData},initialize:function(a){this.m_node1=new b2JointNode();this.m_node2=new b2JointNode();this.m_type=a.type;this.m_prev=null;this.m_next=null;this.m_body1=a.body1;this.m_body2=a.body2;this.m_collideConnected=a.collideConnected;this.m_islandFlag=false;this.m_userData=a.userData},PrepareVelocitySolver:function(){},SolveVelocityConstraints:function(a){},PreparePositionSolver:function(){},SolvePositionConstraints:function(){return false},m_type:0,m_prev:null,m_next:null,m_node1:new b2JointNode(),m_node2:new b2JointNode(),m_body1:null,m_body2:null,m_islandFlag:null,m_collideConnected:null,m_userData:null};b2Joint.Create=function(b,a){var c=null;switch(b.type){case b2Joint.e_distanceJoint:c=new b2DistanceJoint(b);break;case b2Joint.e_mouseJoint:c=new b2MouseJoint(b);break;case b2Joint.e_prismaticJoint:c=new b2PrismaticJoint(b);break;case b2Joint.e_revoluteJoint:c=new b2RevoluteJoint(b);break;case b2Joint.e_pulleyJoint:c=new b2PulleyJoint(b);break;case b2Joint.e_gearJoint:c=new b2GearJoint(b);break;default:break}return c};b2Joint.Destroy=function(b,a){};b2Joint.e_unknownJoint=0;b2Joint.e_revoluteJoint=1;b2Joint.e_prismaticJoint=2;b2Joint.e_distanceJoint=3;b2Joint.e_pulleyJoint=4;b2Joint.e_mouseJoint=5;b2Joint.e_gearJoint=6;b2Joint.e_inactiveLimit=0;b2Joint.e_atLowerLimit=1;b2Joint.e_atUpperLimit=2;b2Joint.e_equalLimits=3;var b2JointDef=Class.create();b2JointDef.prototype={initialize:function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false},type:0,userData:null,body1:null,body2:null,collideConnected:null};var b2DistanceJoint=Class.create();Object.extend(b2DistanceJoint.prototype,b2Joint.prototype);Object.extend(b2DistanceJoint.prototype,{initialize:function(c){this.m_node1=new b2JointNode();this.m_node2=new b2JointNode();this.m_type=c.type;this.m_prev=null;this.m_next=null;this.m_body1=c.body1;this.m_body2=c.body2;this.m_collideConnected=c.collideConnected;this.m_islandFlag=false;this.m_userData=c.userData;this.m_localAnchor1=new b2Vec2();this.m_localAnchor2=new b2Vec2();this.m_u=new b2Vec2();var b;var a;var e;b=this.m_body1.m_R;a=c.anchorPoint1.x-this.m_body1.m_position.x;e=c.anchorPoint1.y-this.m_body1.m_position.y;this.m_localAnchor1.x=a*b.col1.x+e*b.col1.y;this.m_localAnchor1.y=a*b.col2.x+e*b.col2.y;b=this.m_body2.m_R;a=c.anchorPoint2.x-this.m_body2.m_position.x;e=c.anchorPoint2.y-this.m_body2.m_position.y;this.m_localAnchor2.x=a*b.col1.x+e*b.col1.y;this.m_localAnchor2.y=a*b.col2.x+e*b.col2.y;a=c.anchorPoint2.x-c.anchorPoint1.x;e=c.anchorPoint2.y-c.anchorPoint1.y;this.m_length=Math.sqrt(a*a+e*e);this.m_impulse=0},PrepareVelocitySolver:function(){var h;h=this.m_body1.m_R;var k=h.col1.x*this.m_localAnchor1.x+h.col2.x*this.m_localAnchor1.y;var j=h.col1.y*this.m_localAnchor1.x+h.col2.y*this.m_localAnchor1.y;h=this.m_body2.m_R;var g=h.col1.x*this.m_localAnchor2.x+h.col2.x*this.m_localAnchor2.y;var f=h.col1.y*this.m_localAnchor2.x+h.col2.y*this.m_localAnchor2.y;this.m_u.x=this.m_body2.m_position.x+g-this.m_body1.m_position.x-k;this.m_u.y=this.m_body2.m_position.y+f-this.m_body1.m_position.y-j;var a=Math.sqrt(this.m_u.x*this.m_u.x+this.m_u.y*this.m_u.y);if(a>b2Settings.b2_linearSlop){this.m_u.Multiply(1/a)}else{this.m_u.SetZero()}var i=(k*this.m_u.y-j*this.m_u.x);var e=(g*this.m_u.y-f*this.m_u.x);this.m_mass=this.m_body1.m_invMass+this.m_body1.m_invI*i*i+this.m_body2.m_invMass+this.m_body2.m_invI*e*e;this.m_mass=1/this.m_mass;if(b2World.s_enableWarmStarting){var c=this.m_impulse*this.m_u.x;var b=this.m_impulse*this.m_u.y;this.m_body1.m_linearVelocity.x-=this.m_body1.m_invMass*c;this.m_body1.m_linearVelocity.y-=this.m_body1.m_invMass*b;this.m_body1.m_angularVelocity-=this.m_body1.m_invI*(k*b-j*c);this.m_body2.m_linearVelocity.x+=this.m_body2.m_invMass*c;this.m_body2.m_linearVelocity.y+=this.m_body2.m_invMass*b;this.m_body2.m_angularVelocity+=this.m_body2.m_invI*(g*b-f*c)}else{this.m_impulse=0}},SolveVelocityConstraints:function(b){var k;k=this.m_body1.m_R;var o=k.col1.x*this.m_localAnchor1.x+k.col2.x*this.m_localAnchor1.y;var n=k.col1.y*this.m_localAnchor1.x+k.col2.y*this.m_localAnchor1.y;k=this.m_body2.m_R;var i=k.col1.x*this.m_localAnchor2.x+k.col2.x*this.m_localAnchor2.y;var h=k.col1.y*this.m_localAnchor2.x+k.col2.y*this.m_localAnchor2.y;var m=this.m_body1.m_linearVelocity.x+(-this.m_body1.m_angularVelocity*n);var l=this.m_body1.m_linearVelocity.y+(this.m_body1.m_angularVelocity*o);var g=this.m_body2.m_linearVelocity.x+(-this.m_body2.m_angularVelocity*h);var f=this.m_body2.m_linearVelocity.y+(this.m_body2.m_angularVelocity*i);var j=(this.m_u.x*(g-m)+this.m_u.y*(f-l));var a=-this.m_mass*j;this.m_impulse+=a;var e=a*this.m_u.x;var c=a*this.m_u.y;this.m_body1.m_linearVelocity.x-=this.m_body1.m_invMass*e;this.m_body1.m_linearVelocity.y-=this.m_body1.m_invMass*c;this.m_body1.m_angularVelocity-=this.m_body1.m_invI*(o*c-n*e);this.m_body2.m_linearVelocity.x+=this.m_body2.m_invMass*e;this.m_body2.m_linearVelocity.y+=this.m_body2.m_invMass*c;this.m_body2.m_angularVelocity+=this.m_body2.m_invI*(i*c-h*e)},SolvePositionConstraints:function(){var k;k=this.m_body1.m_R;var m=k.col1.x*this.m_localAnchor1.x+k.col2.x*this.m_localAnchor1.y;var l=k.col1.y*this.m_localAnchor1.x+k.col2.y*this.m_localAnchor1.y;k=this.m_body2.m_R;var j=k.col1.x*this.m_localAnchor2.x+k.col2.x*this.m_localAnchor2.y;var i=k.col1.y*this.m_localAnchor2.x+k.col2.y*this.m_localAnchor2.y;var h=this.m_body2.m_position.x+j-this.m_body1.m_position.x-m;var g=this.m_body2.m_position.y+i-this.m_body1.m_position.y-l;var c=Math.sqrt(h*h+g*g);h/=c;g/=c;var a=c-this.m_length;a=b2Math.b2Clamp(a,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);var b=-this.m_mass*a;this.m_u.Set(h,g);var f=b*this.m_u.x;var e=b*this.m_u.y;this.m_body1.m_position.x-=this.m_body1.m_invMass*f;this.m_body1.m_position.y-=this.m_body1.m_invMass*e;this.m_body1.m_rotation-=this.m_body1.m_invI*(m*e-l*f);this.m_body2.m_position.x+=this.m_body2.m_invMass*f;this.m_body2.m_position.y+=this.m_body2.m_invMass*e;this.m_body2.m_rotation+=this.m_body2.m_invI*(j*e-i*f);this.m_body1.m_R.Set(this.m_body1.m_rotation);this.m_body2.m_R.Set(this.m_body2.m_rotation);return b2Math.b2Abs(a)<b2Settings.b2_linearSlop},GetAnchor1:function(){return b2Math.AddVV(this.m_body1.m_position,b2Math.b2MulMV(this.m_body1.m_R,this.m_localAnchor1))},GetAnchor2:function(){return b2Math.AddVV(this.m_body2.m_position,b2Math.b2MulMV(this.m_body2.m_R,this.m_localAnchor2))},GetReactionForce:function(a){var b=new b2Vec2();b.SetV(this.m_u);b.Multiply(this.m_impulse*a);return b},GetReactionTorque:function(a){return 0},m_localAnchor1:new b2Vec2(),m_localAnchor2:new b2Vec2(),m_u:new b2Vec2(),m_impulse:null,m_mass:null,m_length:null});var b2DistanceJointDef=Class.create();Object.extend(b2DistanceJointDef.prototype,b2JointDef.prototype);Object.extend(b2DistanceJointDef.prototype,{initialize:function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false;this.anchorPoint1=new b2Vec2();this.anchorPoint2=new b2Vec2();this.type=b2Joint.e_distanceJoint},anchorPoint1:new b2Vec2(),anchorPoint2:new b2Vec2()});var b2Jacobian=Class.create();b2Jacobian.prototype={linear1:new b2Vec2(),angular1:null,linear2:new b2Vec2(),angular2:null,SetZero:function(){this.linear1.SetZero();this.angular1=0;this.linear2.SetZero();this.angular2=0},Set:function(e,b,c,a){this.linear1.SetV(e);this.angular1=b;this.linear2.SetV(c);this.angular2=a},Compute:function(e,b,c,a){return(this.linear1.x*e.x+this.linear1.y*e.y)+this.angular1*b+(this.linear2.x*c.x+this.linear2.y*c.y)+this.angular2*a},initialize:function(){this.linear1=new b2Vec2();this.linear2=new b2Vec2()}};var b2GearJoint=Class.create();Object.extend(b2GearJoint.prototype,b2Joint.prototype);Object.extend(b2GearJoint.prototype,{GetAnchor1:function(){var a=this.m_body1.m_R;return new b2Vec2(this.m_body1.m_position.x+(a.col1.x*this.m_localAnchor1.x+a.col2.x*this.m_localAnchor1.y),this.m_body1.m_position.y+(a.col1.y*this.m_localAnchor1.x+a.col2.y*this.m_localAnchor1.y))},GetAnchor2:function(){var a=this.m_body2.m_R;return new b2Vec2(this.m_body2.m_position.x+(a.col1.x*this.m_localAnchor2.x+a.col2.x*this.m_localAnchor2.y),this.m_body2.m_position.y+(a.col1.y*this.m_localAnchor2.x+a.col2.y*this.m_localAnchor2.y))},GetReactionForce:function(a){return new b2Vec2()},GetReactionTorque:function(a){return 0},GetRatio:function(){return this.m_ratio},initialize:function(a){this.m_node1=new b2JointNode();this.m_node2=new b2JointNode();this.m_type=a.type;this.m_prev=null;this.m_next=null;this.m_body1=a.body1;this.m_body2=a.body2;this.m_collideConnected=a.collideConnected;this.m_islandFlag=false;this.m_userData=a.userData;this.m_groundAnchor1=new b2Vec2();this.m_groundAnchor2=new b2Vec2();this.m_localAnchor1=new b2Vec2();this.m_localAnchor2=new b2Vec2();this.m_J=new b2Jacobian();this.m_revolute1=null;this.m_prismatic1=null;this.m_revolute2=null;this.m_prismatic2=null;var c;var b;this.m_ground1=a.joint1.m_body1;this.m_body1=a.joint1.m_body2;if(a.joint1.m_type==b2Joint.e_revoluteJoint){this.m_revolute1=a.joint1;this.m_groundAnchor1.SetV(this.m_revolute1.m_localAnchor1);this.m_localAnchor1.SetV(this.m_revolute1.m_localAnchor2);c=this.m_revolute1.GetJointAngle()}else{this.m_prismatic1=a.joint1;this.m_groundAnchor1.SetV(this.m_prismatic1.m_localAnchor1);this.m_localAnchor1.SetV(this.m_prismatic1.m_localAnchor2);c=this.m_prismatic1.GetJointTranslation()}this.m_ground2=a.joint2.m_body1;this.m_body2=a.joint2.m_body2;if(a.joint2.m_type==b2Joint.e_revoluteJoint){this.m_revolute2=a.joint2;this.m_groundAnchor2.SetV(this.m_revolute2.m_localAnchor1);this.m_localAnchor2.SetV(this.m_revolute2.m_localAnchor2);b=this.m_revolute2.GetJointAngle()}else{this.m_prismatic2=a.joint2;this.m_groundAnchor2.SetV(this.m_prismatic2.m_localAnchor1);this.m_localAnchor2.SetV(this.m_prismatic2.m_localAnchor2);b=this.m_prismatic2.GetJointTranslation()}this.m_ratio=a.ratio;this.m_constant=c+this.m_ratio*b;this.m_impulse=0},PrepareVelocitySolver:function(){var a=this.m_ground1;var m=this.m_ground2;var j=this.m_body1;var g=this.m_body2;var k;var h;var c;var b;var e;var l;var i;var f=0;this.m_J.SetZero();if(this.m_revolute1){this.m_J.angular1=-1;f+=j.m_invI}else{e=a.m_R;l=this.m_prismatic1.m_localXAxis1;k=e.col1.x*l.x+e.col2.x*l.y;h=e.col1.y*l.x+e.col2.y*l.y;e=j.m_R;c=e.col1.x*this.m_localAnchor1.x+e.col2.x*this.m_localAnchor1.y;b=e.col1.y*this.m_localAnchor1.x+e.col2.y*this.m_localAnchor1.y;i=c*h-b*k;this.m_J.linear1.Set(-k,-h);this.m_J.angular1=-i;f+=j.m_invMass+j.m_invI*i*i}if(this.m_revolute2){this.m_J.angular2=-this.m_ratio;f+=this.m_ratio*this.m_ratio*g.m_invI}else{e=m.m_R;l=this.m_prismatic2.m_localXAxis1;k=e.col1.x*l.x+e.col2.x*l.y;h=e.col1.y*l.x+e.col2.y*l.y;e=g.m_R;c=e.col1.x*this.m_localAnchor2.x+e.col2.x*this.m_localAnchor2.y;b=e.col1.y*this.m_localAnchor2.x+e.col2.y*this.m_localAnchor2.y;i=c*h-b*k;this.m_J.linear2.Set(-this.m_ratio*k,-this.m_ratio*h);this.m_J.angular2=-this.m_ratio*i;f+=this.m_ratio*this.m_ratio*(g.m_invMass+g.m_invI*i*i)}this.m_mass=1/f;j.m_linearVelocity.x+=j.m_invMass*this.m_impulse*this.m_J.linear1.x;j.m_linearVelocity.y+=j.m_invMass*this.m_impulse*this.m_J.linear1.y;j.m_angularVelocity+=j.m_invI*this.m_impulse*this.m_J.angular1;g.m_linearVelocity.x+=g.m_invMass*this.m_impulse*this.m_J.linear2.x;g.m_linearVelocity.y+=g.m_invMass*this.m_impulse*this.m_J.linear2.y;g.m_angularVelocity+=g.m_invI*this.m_impulse*this.m_J.angular2},SolveVelocityConstraints:function(c){var b=this.m_body1;var a=this.m_body2;var f=this.m_J.Compute(b.m_linearVelocity,b.m_angularVelocity,a.m_linearVelocity,a.m_angularVelocity);var e=-this.m_mass*f;this.m_impulse+=e;b.m_linearVelocity.x+=b.m_invMass*e*this.m_J.linear1.x;b.m_linearVelocity.y+=b.m_invMass*e*this.m_J.linear1.y;b.m_angularVelocity+=b.m_invI*e*this.m_J.angular1;a.m_linearVelocity.x+=a.m_invMass*e*this.m_J.linear2.x;a.m_linearVelocity.y+=a.m_invMass*e*this.m_J.linear2.y;a.m_angularVelocity+=a.m_invI*e*this.m_J.angular2},SolvePositionConstraints:function(){var h=0;var b=this.m_body1;var a=this.m_body2;var g;var e;if(this.m_revolute1){g=this.m_revolute1.GetJointAngle()}else{g=this.m_prismatic1.GetJointTranslation()}if(this.m_revolute2){e=this.m_revolute2.GetJointAngle()}else{e=this.m_prismatic2.GetJointTranslation()}var f=this.m_constant-(g+this.m_ratio*e);var c=-this.m_mass*f;b.m_position.x+=b.m_invMass*c*this.m_J.linear1.x;b.m_position.y+=b.m_invMass*c*this.m_J.linear1.y;b.m_rotation+=b.m_invI*c*this.m_J.angular1;a.m_position.x+=a.m_invMass*c*this.m_J.linear2.x;a.m_position.y+=a.m_invMass*c*this.m_J.linear2.y;a.m_rotation+=a.m_invI*c*this.m_J.angular2;b.m_R.Set(b.m_rotation);a.m_R.Set(a.m_rotation);return h<b2Settings.b2_linearSlop},m_ground1:null,m_ground2:null,m_revolute1:null,m_prismatic1:null,m_revolute2:null,m_prismatic2:null,m_groundAnchor1:new b2Vec2(),m_groundAnchor2:new b2Vec2(),m_localAnchor1:new b2Vec2(),m_localAnchor2:new b2Vec2(),m_J:new b2Jacobian(),m_constant:null,m_ratio:null,m_mass:null,m_impulse:null});var b2GearJointDef=Class.create();Object.extend(b2GearJointDef.prototype,b2JointDef.prototype);Object.extend(b2GearJointDef.prototype,{initialize:function(){this.type=b2Joint.e_gearJoint;this.joint1=null;this.joint2=null;this.ratio=1},joint1:null,joint2:null,ratio:null});var b2MouseJoint=Class.create();Object.extend(b2MouseJoint.prototype,b2Joint.prototype);Object.extend(b2MouseJoint.prototype,{GetAnchor1:function(){return this.m_target},GetAnchor2:function(){var a=b2Math.b2MulMV(this.m_body2.m_R,this.m_localAnchor);a.Add(this.m_body2.m_position);return a},GetReactionForce:function(a){var b=new b2Vec2();b.SetV(this.m_impulse);b.Multiply(a);return b},GetReactionTorque:function(a){return 0},SetTarget:function(a){this.m_body2.WakeUp();this.m_target=a},initialize:function(e){this.m_node1=new b2JointNode();this.m_node2=new b2JointNode();this.m_type=e.type;this.m_prev=null;this.m_next=null;this.m_body1=e.body1;this.m_body2=e.body2;this.m_collideConnected=e.collideConnected;this.m_islandFlag=false;this.m_userData=e.userData;this.K=new b2Mat22();this.K1=new b2Mat22();this.K2=new b2Mat22();this.m_localAnchor=new b2Vec2();this.m_target=new b2Vec2();this.m_impulse=new b2Vec2();this.m_ptpMass=new b2Mat22();this.m_C=new b2Vec2();this.m_target.SetV(e.target);var a=this.m_target.x-this.m_body2.m_position.x;var h=this.m_target.y-this.m_body2.m_position.y;this.m_localAnchor.x=(a*this.m_body2.m_R.col1.x+h*this.m_body2.m_R.col1.y);this.m_localAnchor.y=(a*this.m_body2.m_R.col2.x+h*this.m_body2.m_R.col2.y);this.m_maxForce=e.maxForce;this.m_impulse.SetZero();var c=this.m_body2.m_mass;var g=2*b2Settings.b2_pi*e.frequencyHz;var f=2*c*e.dampingRatio*g;var b=c*g*g;this.m_gamma=1/(f+e.timeStep*b);this.m_beta=e.timeStep*b/(f+e.timeStep*b)},K:new b2Mat22(),K1:new b2Mat22(),K2:new b2Mat22(),PrepareVelocitySolver:function(){var a=this.m_body2;var f;f=a.m_R;var j=f.col1.x*this.m_localAnchor.x+f.col2.x*this.m_localAnchor.y;var i=f.col1.y*this.m_localAnchor.x+f.col2.y*this.m_localAnchor.y;var h=a.m_invMass;var c=a.m_invI;this.K1.col1.x=h;this.K1.col2.x=0;this.K1.col1.y=0;this.K1.col2.y=h;this.K2.col1.x=c*i*i;this.K2.col2.x=-c*j*i;this.K2.col1.y=-c*j*i;this.K2.col2.y=c*j*j;this.K.SetM(this.K1);this.K.AddM(this.K2);this.K.col1.x+=this.m_gamma;this.K.col2.y+=this.m_gamma;this.K.Invert(this.m_ptpMass);this.m_C.x=a.m_position.x+j-this.m_target.x;this.m_C.y=a.m_position.y+i-this.m_target.y;a.m_angularVelocity*=0.98;var g=this.m_impulse.x;var e=this.m_impulse.y;a.m_linearVelocity.x+=h*g;a.m_linearVelocity.y+=h*e;a.m_angularVelocity+=c*(j*e-i*g)},SolveVelocityConstraints:function(e){var j=this.m_body2;var l;l=j.m_R;var i=l.col1.x*this.m_localAnchor.x+l.col2.x*this.m_localAnchor.y;var g=l.col1.y*this.m_localAnchor.x+l.col2.y*this.m_localAnchor.y;var a=j.m_linearVelocity.x+(-j.m_angularVelocity*g);var o=j.m_linearVelocity.y+(j.m_angularVelocity*i);l=this.m_ptpMass;var n=a+(this.m_beta*e.inv_dt)*this.m_C.x+this.m_gamma*this.m_impulse.x;var m=o+(this.m_beta*e.inv_dt)*this.m_C.y+this.m_gamma*this.m_impulse.y;var f=-(l.col1.x*n+l.col2.x*m);var c=-(l.col1.y*n+l.col2.y*m);var k=this.m_impulse.x;var h=this.m_impulse.y;this.m_impulse.x+=f;this.m_impulse.y+=c;var b=this.m_impulse.Length();if(b>e.dt*this.m_maxForce){this.m_impulse.Multiply(e.dt*this.m_maxForce/b)}f=this.m_impulse.x-k;c=this.m_impulse.y-h;j.m_linearVelocity.x+=j.m_invMass*f;j.m_linearVelocity.y+=j.m_invMass*c;j.m_angularVelocity+=j.m_invI*(i*c-g*f)},SolvePositionConstraints:function(){return true},m_localAnchor:new b2Vec2(),m_target:new b2Vec2(),m_impulse:new b2Vec2(),m_ptpMass:new b2Mat22(),m_C:new b2Vec2(),m_maxForce:null,m_beta:null,m_gamma:null});var b2MouseJointDef=Class.create();Object.extend(b2MouseJointDef.prototype,b2JointDef.prototype);Object.extend(b2MouseJointDef.prototype,{initialize:function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false;this.target=new b2Vec2();this.type=b2Joint.e_mouseJoint;this.maxForce=0;this.frequencyHz=5;this.dampingRatio=0.7;this.timeStep=1/60},target:new b2Vec2(),maxForce:null,frequencyHz:null,dampingRatio:null,timeStep:null});var b2PrismaticJoint=Class.create();Object.extend(b2PrismaticJoint.prototype,b2Joint.prototype);Object.extend(b2PrismaticJoint.prototype,{GetAnchor1:function(){var a=this.m_body1;var b=new b2Vec2();b.SetV(this.m_localAnchor1);b.MulM(a.m_R);b.Add(a.m_position);return b},GetAnchor2:function(){var a=this.m_body2;var b=new b2Vec2();b.SetV(this.m_localAnchor2);b.MulM(a.m_R);b.Add(a.m_position);return b},GetJointTranslation:function(){var m=this.m_body1;var l=this.m_body2;var k;k=m.m_R;var q=k.col1.x*this.m_localAnchor1.x+k.col2.x*this.m_localAnchor1.y;var o=k.col1.y*this.m_localAnchor1.x+k.col2.y*this.m_localAnchor1.y;k=l.m_R;var j=k.col1.x*this.m_localAnchor2.x+k.col2.x*this.m_localAnchor2.y;var i=k.col1.y*this.m_localAnchor2.x+k.col2.y*this.m_localAnchor2.y;var h=m.m_position.x+q;var g=m.m_position.y+o;var c=l.m_position.x+j;var b=l.m_position.y+i;var f=c-h;var e=b-g;k=m.m_R;var p=k.col1.x*this.m_localXAxis1.x+k.col2.x*this.m_localXAxis1.y;var n=k.col1.y*this.m_localXAxis1.x+k.col2.y*this.m_localXAxis1.y;var a=p*f+n*e;return a},GetJointSpeed:function(){var k=this.m_body1;var j=this.m_body2;var l;l=k.m_R;var u=l.col1.x*this.m_localAnchor1.x+l.col2.x*this.m_localAnchor1.y;var t=l.col1.y*this.m_localAnchor1.x+l.col2.y*this.m_localAnchor1.y;l=j.m_R;var i=l.col1.x*this.m_localAnchor2.x+l.col2.x*this.m_localAnchor2.y;var h=l.col1.y*this.m_localAnchor2.x+l.col2.y*this.m_localAnchor2.y;var s=k.m_position.x+u;var q=k.m_position.y+t;var c=j.m_position.x+i;var a=j.m_position.y+h;var g=c-s;var f=a-q;l=k.m_R;var p=l.col1.x*this.m_localXAxis1.x+l.col2.x*this.m_localXAxis1.y;var o=l.col1.y*this.m_localXAxis1.x+l.col2.y*this.m_localXAxis1.y;var e=k.m_linearVelocity;var b=j.m_linearVelocity;var n=k.m_angularVelocity;var m=j.m_angularVelocity;var r=(g*(-n*o)+f*(n*p))+(p*(((b.x+(-m*h))-e.x)-(-n*t))+o*(((b.y+(m*i))-e.y)-(n*u)));return r},GetMotorForce:function(a){return a*this.m_motorImpulse},SetMotorSpeed:function(a){this.m_motorSpeed=a},SetMotorForce:function(a){this.m_maxMotorForce=a},GetReactionForce:function(b){var f=b*this.m_limitImpulse;var e;e=this.m_body1.m_R;var h=f*(e.col1.x*this.m_localXAxis1.x+e.col2.x*this.m_localXAxis1.y);var g=f*(e.col1.y*this.m_localXAxis1.x+e.col2.y*this.m_localXAxis1.y);var c=f*(e.col1.x*this.m_localYAxis1.x+e.col2.x*this.m_localYAxis1.y);var a=f*(e.col1.y*this.m_localYAxis1.x+e.col2.y*this.m_localYAxis1.y);return new b2Vec2(h+c,g+a)},GetReactionTorque:function(a){return a*this.m_angularImpulse},initialize:function(c){this.m_node1=new b2JointNode();this.m_node2=new b2JointNode();this.m_type=c.type;this.m_prev=null;this.m_next=null;this.m_body1=c.body1;this.m_body2=c.body2;this.m_collideConnected=c.collideConnected;this.m_islandFlag=false;this.m_userData=c.userData;this.m_localAnchor1=new b2Vec2();this.m_localAnchor2=new b2Vec2();this.m_localXAxis1=new b2Vec2();this.m_localYAxis1=new b2Vec2();this.m_linearJacobian=new b2Jacobian();this.m_motorJacobian=new b2Jacobian();var b;var a;var e;b=this.m_body1.m_R;a=(c.anchorPoint.x-this.m_body1.m_position.x);e=(c.anchorPoint.y-this.m_body1.m_position.y);this.m_localAnchor1.Set((a*b.col1.x+e*b.col1.y),(a*b.col2.x+e*b.col2.y));b=this.m_body2.m_R;a=(c.anchorPoint.x-this.m_body2.m_position.x);e=(c.anchorPoint.y-this.m_body2.m_position.y);this.m_localAnchor2.Set((a*b.col1.x+e*b.col1.y),(a*b.col2.x+e*b.col2.y));b=this.m_body1.m_R;a=c.axis.x;e=c.axis.y;this.m_localXAxis1.Set((a*b.col1.x+e*b.col1.y),(a*b.col2.x+e*b.col2.y));this.m_localYAxis1.x=-this.m_localXAxis1.y;this.m_localYAxis1.y=this.m_localXAxis1.x;this.m_initialAngle=this.m_body2.m_rotation-this.m_body1.m_rotation;this.m_linearJacobian.SetZero();this.m_linearMass=0;this.m_linearImpulse=0;this.m_angularMass=0;this.m_angularImpulse=0;this.m_motorJacobian.SetZero();this.m_motorMass=0;this.m_motorImpulse=0;this.m_limitImpulse=0;this.m_limitPositionImpulse=0;this.m_lowerTranslation=c.lowerTranslation;this.m_upperTranslation=c.upperTranslation;this.m_maxMotorForce=c.motorForce;this.m_motorSpeed=c.motorSpeed;this.m_enableLimit=c.enableLimit;this.m_enableMotor=c.enableMotor},PrepareVelocitySolver:function(){var n=this.m_body1;var m=this.m_body2;var q;q=n.m_R;var B=q.col1.x*this.m_localAnchor1.x+q.col2.x*this.m_localAnchor1.y;var A=q.col1.y*this.m_localAnchor1.x+q.col2.y*this.m_localAnchor1.y;q=m.m_R;var j=q.col1.x*this.m_localAnchor2.x+q.col2.x*this.m_localAnchor2.y;var h=q.col1.y*this.m_localAnchor2.x+q.col2.y*this.m_localAnchor2.y;var t=n.m_invMass;var s=m.m_invMass;var l=n.m_invI;var k=m.m_invI;q=n.m_R;var i=q.col1.x*this.m_localYAxis1.x+q.col2.x*this.m_localYAxis1.y;var g=q.col1.y*this.m_localYAxis1.x+q.col2.y*this.m_localYAxis1.y;var u=m.m_position.x+j-n.m_position.x;var r=m.m_position.y+h-n.m_position.y;this.m_linearJacobian.linear1.x=-i;this.m_linearJacobian.linear1.y=-g;this.m_linearJacobian.linear2.x=i;this.m_linearJacobian.linear2.y=g;this.m_linearJacobian.angular1=-(u*g-r*i);this.m_linearJacobian.angular2=j*g-h*i;this.m_linearMass=t+l*this.m_linearJacobian.angular1*this.m_linearJacobian.angular1+s+k*this.m_linearJacobian.angular2*this.m_linearJacobian.angular2;this.m_linearMass=1/this.m_linearMass;this.m_angularMass=1/(l+k);if(this.m_enableLimit||this.m_enableMotor){q=n.m_R;var x=q.col1.x*this.m_localXAxis1.x+q.col2.x*this.m_localXAxis1.y;var v=q.col1.y*this.m_localXAxis1.x+q.col2.y*this.m_localXAxis1.y;this.m_motorJacobian.linear1.x=-x;this.m_motorJacobian.linear1.y=-v;this.m_motorJacobian.linear2.x=x;this.m_motorJacobian.linear2.y=v;this.m_motorJacobian.angular1=-(u*v-r*x);this.m_motorJacobian.angular2=j*v-h*x;this.m_motorMass=t+l*this.m_motorJacobian.angular1*this.m_motorJacobian.angular1+s+k*this.m_motorJacobian.angular2*this.m_motorJacobian.angular2;this.m_motorMass=1/this.m_motorMass;if(this.m_enableLimit){var f=u-B;var e=r-A;var c=x*f+v*e;if(b2Math.b2Abs(this.m_upperTranslation-this.m_lowerTranslation)<2*b2Settings.b2_linearSlop){this.m_limitState=b2Joint.e_equalLimits}else{if(c<=this.m_lowerTranslation){if(this.m_limitState!=b2Joint.e_atLowerLimit){this.m_limitImpulse=0}this.m_limitState=b2Joint.e_atLowerLimit}else{if(c>=this.m_upperTranslation){if(this.m_limitState!=b2Joint.e_atUpperLimit){this.m_limitImpulse=0}this.m_limitState=b2Joint.e_atUpperLimit}else{this.m_limitState=b2Joint.e_inactiveLimit;this.m_limitImpulse=0}}}}}if(this.m_enableMotor==false){this.m_motorImpulse=0}if(this.m_enableLimit==false){this.m_limitImpulse=0}if(b2World.s_enableWarmStarting){var b=this.m_linearImpulse*this.m_linearJacobian.linear1.x+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear1.x;var a=this.m_linearImpulse*this.m_linearJacobian.linear1.y+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear1.y;var p=this.m_linearImpulse*this.m_linearJacobian.linear2.x+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear2.x;var o=this.m_linearImpulse*this.m_linearJacobian.linear2.y+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.linear2.y;var z=this.m_linearImpulse*this.m_linearJacobian.angular1-this.m_angularImpulse+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.angular1;var y=this.m_linearImpulse*this.m_linearJacobian.angular2+this.m_angularImpulse+(this.m_motorImpulse+this.m_limitImpulse)*this.m_motorJacobian.angular2;n.m_linearVelocity.x+=t*b;n.m_linearVelocity.y+=t*a;n.m_angularVelocity+=l*z;m.m_linearVelocity.x+=s*p;m.m_linearVelocity.y+=s*o;m.m_angularVelocity+=k*y}else{this.m_linearImpulse=0;this.m_angularImpulse=0;this.m_limitImpulse=0;this.m_motorImpulse=0}this.m_limitPositionImpulse=0},SolveVelocityConstraints:function(b){var m=this.m_body1;var l=this.m_body2;var r=m.m_invMass;var p=l.m_invMass;var e=m.m_invI;var c=l.m_invI;var q;var f=this.m_linearJacobian.Compute(m.m_linearVelocity,m.m_angularVelocity,l.m_linearVelocity,l.m_angularVelocity);var k=-this.m_linearMass*f;this.m_linearImpulse+=k;m.m_linearVelocity.x+=(r*k)*this.m_linearJacobian.linear1.x;m.m_linearVelocity.y+=(r*k)*this.m_linearJacobian.linear1.y;m.m_angularVelocity+=e*k*this.m_linearJacobian.angular1;l.m_linearVelocity.x+=(p*k)*this.m_linearJacobian.linear2.x;l.m_linearVelocity.y+=(p*k)*this.m_linearJacobian.linear2.y;l.m_angularVelocity+=c*k*this.m_linearJacobian.angular2;var i=l.m_angularVelocity-m.m_angularVelocity;var a=-this.m_angularMass*i;this.m_angularImpulse+=a;m.m_angularVelocity-=e*a;l.m_angularVelocity+=c*a;if(this.m_enableMotor&&this.m_limitState!=b2Joint.e_equalLimits){var n=this.m_motorJacobian.Compute(m.m_linearVelocity,m.m_angularVelocity,l.m_linearVelocity,l.m_angularVelocity)-this.m_motorSpeed;var g=-this.m_motorMass*n;var o=this.m_motorImpulse;this.m_motorImpulse=b2Math.b2Clamp(this.m_motorImpulse+g,-b.dt*this.m_maxMotorForce,b.dt*this.m_maxMotorForce);g=this.m_motorImpulse-o;m.m_linearVelocity.x+=(r*g)*this.m_motorJacobian.linear1.x;m.m_linearVelocity.y+=(r*g)*this.m_motorJacobian.linear1.y;m.m_angularVelocity+=e*g*this.m_motorJacobian.angular1;l.m_linearVelocity.x+=(p*g)*this.m_motorJacobian.linear2.x;l.m_linearVelocity.y+=(p*g)*this.m_motorJacobian.linear2.y;l.m_angularVelocity+=c*g*this.m_motorJacobian.angular2}if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){var j=this.m_motorJacobian.Compute(m.m_linearVelocity,m.m_angularVelocity,l.m_linearVelocity,l.m_angularVelocity);var h=-this.m_motorMass*j;if(this.m_limitState==b2Joint.e_equalLimits){this.m_limitImpulse+=h}else{if(this.m_limitState==b2Joint.e_atLowerLimit){q=this.m_limitImpulse;this.m_limitImpulse=b2Math.b2Max(this.m_limitImpulse+h,0);h=this.m_limitImpulse-q}else{if(this.m_limitState==b2Joint.e_atUpperLimit){q=this.m_limitImpulse;this.m_limitImpulse=b2Math.b2Min(this.m_limitImpulse+h,0);h=this.m_limitImpulse-q}}}m.m_linearVelocity.x+=(r*h)*this.m_motorJacobian.linear1.x;m.m_linearVelocity.y+=(r*h)*this.m_motorJacobian.linear1.y;m.m_angularVelocity+=e*h*this.m_motorJacobian.angular1;l.m_linearVelocity.x+=(p*h)*this.m_motorJacobian.linear2.x;l.m_linearVelocity.y+=(p*h)*this.m_motorJacobian.linear2.y;l.m_angularVelocity+=c*h*this.m_motorJacobian.angular2}},SolvePositionConstraints:function(){var p;var A;var n=this.m_body1;var l=this.m_body2;var u=n.m_invMass;var t=l.m_invMass;var k=n.m_invI;var j=l.m_invI;var r;r=n.m_R;var G=r.col1.x*this.m_localAnchor1.x+r.col2.x*this.m_localAnchor1.y;var F=r.col1.y*this.m_localAnchor1.x+r.col2.y*this.m_localAnchor1.y;r=l.m_R;var i=r.col1.x*this.m_localAnchor2.x+r.col2.x*this.m_localAnchor2.y;var h=r.col1.y*this.m_localAnchor2.x+r.col2.y*this.m_localAnchor2.y;var D=n.m_position.x+G;var B=n.m_position.y+F;var b=l.m_position.x+i;var a=l.m_position.y+h;var f=b-D;var c=a-B;r=n.m_R;var g=r.col1.x*this.m_localYAxis1.x+r.col2.x*this.m_localYAxis1.y;var e=r.col1.y*this.m_localYAxis1.x+r.col2.y*this.m_localYAxis1.y;var m=g*f+e*c;m=b2Math.b2Clamp(m,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);var z=-this.m_linearMass*m;n.m_position.x+=(u*z)*this.m_linearJacobian.linear1.x;n.m_position.y+=(u*z)*this.m_linearJacobian.linear1.y;n.m_rotation+=k*z*this.m_linearJacobian.angular1;l.m_position.x+=(t*z)*this.m_linearJacobian.linear2.x;l.m_position.y+=(t*z)*this.m_linearJacobian.linear2.y;l.m_rotation+=j*z*this.m_linearJacobian.angular2;var q=b2Math.b2Abs(m);var C=l.m_rotation-n.m_rotation-this.m_initialAngle;C=b2Math.b2Clamp(C,-b2Settings.b2_maxAngularCorrection,b2Settings.b2_maxAngularCorrection);var s=-this.m_angularMass*C;n.m_rotation-=n.m_invI*s;n.m_R.Set(n.m_rotation);l.m_rotation+=l.m_invI*s;l.m_R.Set(l.m_rotation);var E=b2Math.b2Abs(C);if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){r=n.m_R;G=r.col1.x*this.m_localAnchor1.x+r.col2.x*this.m_localAnchor1.y;F=r.col1.y*this.m_localAnchor1.x+r.col2.y*this.m_localAnchor1.y;r=l.m_R;i=r.col1.x*this.m_localAnchor2.x+r.col2.x*this.m_localAnchor2.y;h=r.col1.y*this.m_localAnchor2.x+r.col2.y*this.m_localAnchor2.y;D=n.m_position.x+G;B=n.m_position.y+F;b=l.m_position.x+i;a=l.m_position.y+h;f=b-D;c=a-B;r=n.m_R;var x=r.col1.x*this.m_localXAxis1.x+r.col2.x*this.m_localXAxis1.y;var v=r.col1.y*this.m_localXAxis1.x+r.col2.y*this.m_localXAxis1.y;var o=(x*f+v*c);var y=0;if(this.m_limitState==b2Joint.e_equalLimits){p=b2Math.b2Clamp(o,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);y=-this.m_motorMass*p;q=b2Math.b2Max(q,b2Math.b2Abs(C))}else{if(this.m_limitState==b2Joint.e_atLowerLimit){p=o-this.m_lowerTranslation;q=b2Math.b2Max(q,-p);p=b2Math.b2Clamp(p+b2Settings.b2_linearSlop,-b2Settings.b2_maxLinearCorrection,0);y=-this.m_motorMass*p;A=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Max(this.m_limitPositionImpulse+y,0);y=this.m_limitPositionImpulse-A}else{if(this.m_limitState==b2Joint.e_atUpperLimit){p=o-this.m_upperTranslation;q=b2Math.b2Max(q,p);p=b2Math.b2Clamp(p-b2Settings.b2_linearSlop,0,b2Settings.b2_maxLinearCorrection);y=-this.m_motorMass*p;A=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Min(this.m_limitPositionImpulse+y,0);y=this.m_limitPositionImpulse-A}}}n.m_position.x+=(u*y)*this.m_motorJacobian.linear1.x;n.m_position.y+=(u*y)*this.m_motorJacobian.linear1.y;n.m_rotation+=k*y*this.m_motorJacobian.angular1;n.m_R.Set(n.m_rotation);l.m_position.x+=(t*y)*this.m_motorJacobian.linear2.x;l.m_position.y+=(t*y)*this.m_motorJacobian.linear2.y;l.m_rotation+=j*y*this.m_motorJacobian.angular2;l.m_R.Set(l.m_rotation)}return q<=b2Settings.b2_linearSlop&&E<=b2Settings.b2_angularSlop},m_localAnchor1:new b2Vec2(),m_localAnchor2:new b2Vec2(),m_localXAxis1:new b2Vec2(),m_localYAxis1:new b2Vec2(),m_initialAngle:null,m_linearJacobian:new b2Jacobian(),m_linearMass:null,m_linearImpulse:null,m_angularMass:null,m_angularImpulse:null,m_motorJacobian:new b2Jacobian(),m_motorMass:null,m_motorImpulse:null,m_limitImpulse:null,m_limitPositionImpulse:null,m_lowerTranslation:null,m_upperTranslation:null,m_maxMotorForce:null,m_motorSpeed:null,m_enableLimit:null,m_enableMotor:null,m_limitState:0});var b2PrismaticJointDef=Class.create();Object.extend(b2PrismaticJointDef.prototype,b2JointDef.prototype);Object.extend(b2PrismaticJointDef.prototype,{initialize:function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false;this.type=b2Joint.e_prismaticJoint;this.anchorPoint=new b2Vec2(0,0);this.axis=new b2Vec2(0,0);this.lowerTranslation=0;this.upperTranslation=0;this.motorForce=0;this.motorSpeed=0;this.enableLimit=false;this.enableMotor=false},anchorPoint:null,axis:null,lowerTranslation:null,upperTranslation:null,motorForce:null,motorSpeed:null,enableLimit:null,enableMotor:null});var b2PulleyJoint=Class.create();Object.extend(b2PulleyJoint.prototype,b2Joint.prototype);Object.extend(b2PulleyJoint.prototype,{GetAnchor1:function(){var a=this.m_body1.m_R;return new b2Vec2(this.m_body1.m_position.x+(a.col1.x*this.m_localAnchor1.x+a.col2.x*this.m_localAnchor1.y),this.m_body1.m_position.y+(a.col1.y*this.m_localAnchor1.x+a.col2.y*this.m_localAnchor1.y))},GetAnchor2:function(){var a=this.m_body2.m_R;return new b2Vec2(this.m_body2.m_position.x+(a.col1.x*this.m_localAnchor2.x+a.col2.x*this.m_localAnchor2.y),this.m_body2.m_position.y+(a.col1.y*this.m_localAnchor2.x+a.col2.y*this.m_localAnchor2.y))},GetGroundPoint1:function(){return new b2Vec2(this.m_ground.m_position.x+this.m_groundAnchor1.x,this.m_ground.m_position.y+this.m_groundAnchor1.y)},GetGroundPoint2:function(){return new b2Vec2(this.m_ground.m_position.x+this.m_groundAnchor2.x,this.m_ground.m_position.y+this.m_groundAnchor2.y)},GetReactionForce:function(a){return new b2Vec2()},GetReactionTorque:function(a){return 0},GetLength1:function(){var f;f=this.m_body1.m_R;var e=this.m_body1.m_position.x+(f.col1.x*this.m_localAnchor1.x+f.col2.x*this.m_localAnchor1.y);var c=this.m_body1.m_position.y+(f.col1.y*this.m_localAnchor1.x+f.col2.y*this.m_localAnchor1.y);var b=e-(this.m_ground.m_position.x+this.m_groundAnchor1.x);var a=c-(this.m_ground.m_position.y+this.m_groundAnchor1.y);return Math.sqrt(b*b+a*a)},GetLength2:function(){var f;f=this.m_body2.m_R;var e=this.m_body2.m_position.x+(f.col1.x*this.m_localAnchor2.x+f.col2.x*this.m_localAnchor2.y);var c=this.m_body2.m_position.y+(f.col1.y*this.m_localAnchor2.x+f.col2.y*this.m_localAnchor2.y);var b=e-(this.m_ground.m_position.x+this.m_groundAnchor2.x);var a=c-(this.m_ground.m_position.y+this.m_groundAnchor2.y);return Math.sqrt(b*b+a*a)},GetRatio:function(){return this.m_ratio},initialize:function(e){this.m_node1=new b2JointNode();this.m_node2=new b2JointNode();this.m_type=e.type;this.m_prev=null;this.m_next=null;this.m_body1=e.body1;this.m_body2=e.body2;this.m_collideConnected=e.collideConnected;this.m_islandFlag=false;this.m_userData=e.userData;this.m_groundAnchor1=new b2Vec2();this.m_groundAnchor2=new b2Vec2();this.m_localAnchor1=new b2Vec2();this.m_localAnchor2=new b2Vec2();this.m_u1=new b2Vec2();this.m_u2=new b2Vec2();var b;var a;var i;this.m_ground=this.m_body1.m_world.m_groundBody;this.m_groundAnchor1.x=e.groundPoint1.x-this.m_ground.m_position.x;this.m_groundAnchor1.y=e.groundPoint1.y-this.m_ground.m_position.y;this.m_groundAnchor2.x=e.groundPoint2.x-this.m_ground.m_position.x;this.m_groundAnchor2.y=e.groundPoint2.y-this.m_ground.m_position.y;b=this.m_body1.m_R;a=e.anchorPoint1.x-this.m_body1.m_position.x;i=e.anchorPoint1.y-this.m_body1.m_position.y;this.m_localAnchor1.x=a*b.col1.x+i*b.col1.y;this.m_localAnchor1.y=a*b.col2.x+i*b.col2.y;b=this.m_body2.m_R;a=e.anchorPoint2.x-this.m_body2.m_position.x;i=e.anchorPoint2.y-this.m_body2.m_position.y;this.m_localAnchor2.x=a*b.col1.x+i*b.col1.y;this.m_localAnchor2.y=a*b.col2.x+i*b.col2.y;this.m_ratio=e.ratio;a=e.groundPoint1.x-e.anchorPoint1.x;i=e.groundPoint1.y-e.anchorPoint1.y;var g=Math.sqrt(a*a+i*i);a=e.groundPoint2.x-e.anchorPoint2.x;i=e.groundPoint2.y-e.anchorPoint2.y;var c=Math.sqrt(a*a+i*i);var h=b2Math.b2Max(0.5*b2PulleyJoint.b2_minPulleyLength,g);var f=b2Math.b2Max(0.5*b2PulleyJoint.b2_minPulleyLength,c);this.m_constant=h+this.m_ratio*f;this.m_maxLength1=b2Math.b2Clamp(e.maxLength1,h,this.m_constant-this.m_ratio*b2PulleyJoint.b2_minPulleyLength);this.m_maxLength2=b2Math.b2Clamp(e.maxLength2,f,(this.m_constant-b2PulleyJoint.b2_minPulleyLength)/this.m_ratio);this.m_pulleyImpulse=0;this.m_limitImpulse1=0;this.m_limitImpulse2=0},PrepareVelocitySolver:function(){var i=this.m_body1;var h=this.m_body2;var m;m=i.m_R;var x=m.col1.x*this.m_localAnchor1.x+m.col2.x*this.m_localAnchor1.y;var v=m.col1.y*this.m_localAnchor1.x+m.col2.y*this.m_localAnchor1.y;m=h.m_R;var g=m.col1.x*this.m_localAnchor2.x+m.col2.x*this.m_localAnchor2.y;var f=m.col1.y*this.m_localAnchor2.x+m.col2.y*this.m_localAnchor2.y;var u=i.m_position.x+x;var s=i.m_position.y+v;var e=h.m_position.x+g;var c=h.m_position.y+f;var n=this.m_ground.m_position.x+this.m_groundAnchor1.x;var l=this.m_ground.m_position.y+this.m_groundAnchor1.y;var t=this.m_ground.m_position.x+this.m_groundAnchor2.x;var r=this.m_ground.m_position.y+this.m_groundAnchor2.y;this.m_u1.Set(u-n,s-l);this.m_u2.Set(e-t,c-r);var q=this.m_u1.Length();var p=this.m_u2.Length();if(q>b2Settings.b2_linearSlop){this.m_u1.Multiply(1/q)}else{this.m_u1.SetZero()}if(p>b2Settings.b2_linearSlop){this.m_u2.Multiply(1/p)}else{this.m_u2.SetZero()}if(q<this.m_maxLength1){this.m_limitState1=b2Joint.e_inactiveLimit;this.m_limitImpulse1=0}else{this.m_limitState1=b2Joint.e_atUpperLimit;this.m_limitPositionImpulse1=0}if(p<this.m_maxLength2){this.m_limitState2=b2Joint.e_inactiveLimit;this.m_limitImpulse2=0}else{this.m_limitState2=b2Joint.e_atUpperLimit;this.m_limitPositionImpulse2=0}var y=x*this.m_u1.y-v*this.m_u1.x;var o=g*this.m_u2.y-f*this.m_u2.x;this.m_limitMass1=i.m_invMass+i.m_invI*y*y;this.m_limitMass2=h.m_invMass+h.m_invI*o*o;this.m_pulleyMass=this.m_limitMass1+this.m_ratio*this.m_ratio*this.m_limitMass2;this.m_limitMass1=1/this.m_limitMass1;this.m_limitMass2=1/this.m_limitMass2;this.m_pulleyMass=1/this.m_pulleyMass;var b=(-this.m_pulleyImpulse-this.m_limitImpulse1)*this.m_u1.x;var a=(-this.m_pulleyImpulse-this.m_limitImpulse1)*this.m_u1.y;var k=(-this.m_ratio*this.m_pulleyImpulse-this.m_limitImpulse2)*this.m_u2.x;var j=(-this.m_ratio*this.m_pulleyImpulse-this.m_limitImpulse2)*this.m_u2.y;i.m_linearVelocity.x+=i.m_invMass*b;i.m_linearVelocity.y+=i.m_invMass*a;i.m_angularVelocity+=i.m_invI*(x*a-v*b);h.m_linearVelocity.x+=h.m_invMass*k;h.m_linearVelocity.y+=h.m_invMass*j;h.m_angularVelocity+=h.m_invI*(g*j-f*k)},SolveVelocityConstraints:function(i){var j=this.m_body1;var h=this.m_body2;var o;o=j.m_R;var t=o.col1.x*this.m_localAnchor1.x+o.col2.x*this.m_localAnchor1.y;var s=o.col1.y*this.m_localAnchor1.x+o.col2.y*this.m_localAnchor1.y;o=h.m_R;var g=o.col1.x*this.m_localAnchor2.x+o.col2.x*this.m_localAnchor2.y;var f=o.col1.y*this.m_localAnchor2.x+o.col2.y*this.m_localAnchor2.y;var e;var b;var p;var m;var c;var a;var n;var l;var q;var k;var r;e=j.m_linearVelocity.x+(-j.m_angularVelocity*s);b=j.m_linearVelocity.y+(j.m_angularVelocity*t);p=h.m_linearVelocity.x+(-h.m_angularVelocity*f);m=h.m_linearVelocity.y+(h.m_angularVelocity*g);q=-(this.m_u1.x*e+this.m_u1.y*b)-this.m_ratio*(this.m_u2.x*p+this.m_u2.y*m);k=-this.m_pulleyMass*q;this.m_pulleyImpulse+=k;c=-k*this.m_u1.x;a=-k*this.m_u1.y;n=-this.m_ratio*k*this.m_u2.x;l=-this.m_ratio*k*this.m_u2.y;j.m_linearVelocity.x+=j.m_invMass*c;j.m_linearVelocity.y+=j.m_invMass*a;j.m_angularVelocity+=j.m_invI*(t*a-s*c);h.m_linearVelocity.x+=h.m_invMass*n;h.m_linearVelocity.y+=h.m_invMass*l;h.m_angularVelocity+=h.m_invI*(g*l-f*n);if(this.m_limitState1==b2Joint.e_atUpperLimit){e=j.m_linearVelocity.x+(-j.m_angularVelocity*s);b=j.m_linearVelocity.y+(j.m_angularVelocity*t);q=-(this.m_u1.x*e+this.m_u1.y*b);k=-this.m_limitMass1*q;r=this.m_limitImpulse1;this.m_limitImpulse1=b2Math.b2Max(0,this.m_limitImpulse1+k);k=this.m_limitImpulse1-r;c=-k*this.m_u1.x;a=-k*this.m_u1.y;j.m_linearVelocity.x+=j.m_invMass*c;j.m_linearVelocity.y+=j.m_invMass*a;j.m_angularVelocity+=j.m_invI*(t*a-s*c)}if(this.m_limitState2==b2Joint.e_atUpperLimit){p=h.m_linearVelocity.x+(-h.m_angularVelocity*f);m=h.m_linearVelocity.y+(h.m_angularVelocity*g);q=-(this.m_u2.x*p+this.m_u2.y*m);k=-this.m_limitMass2*q;r=this.m_limitImpulse2;this.m_limitImpulse2=b2Math.b2Max(0,this.m_limitImpulse2+k);k=this.m_limitImpulse2-r;n=-k*this.m_u2.x;l=-k*this.m_u2.y;h.m_linearVelocity.x+=h.m_invMass*n;h.m_linearVelocity.y+=h.m_invMass*l;h.m_angularVelocity+=h.m_invI*(g*l-f*n)}},SolvePositionConstraints:function(){var h=this.m_body1;var g=this.m_body2;var k;var l=this.m_ground.m_position.x+this.m_groundAnchor1.x;var j=this.m_ground.m_position.y+this.m_groundAnchor1.y;var r=this.m_ground.m_position.x+this.m_groundAnchor2.x;var p=this.m_ground.m_position.y+this.m_groundAnchor2.y;var v;var u;var e;var c;var s;var q;var b;var a;var o;var n;var m;var i;var t;var f=0;k=h.m_R;v=k.col1.x*this.m_localAnchor1.x+k.col2.x*this.m_localAnchor1.y;u=k.col1.y*this.m_localAnchor1.x+k.col2.y*this.m_localAnchor1.y;k=g.m_R;e=k.col1.x*this.m_localAnchor2.x+k.col2.x*this.m_localAnchor2.y;c=k.col1.y*this.m_localAnchor2.x+k.col2.y*this.m_localAnchor2.y;s=h.m_position.x+v;q=h.m_position.y+u;b=g.m_position.x+e;a=g.m_position.y+c;this.m_u1.Set(s-l,q-j);this.m_u2.Set(b-r,a-p);o=this.m_u1.Length();n=this.m_u2.Length();if(o>b2Settings.b2_linearSlop){this.m_u1.Multiply(1/o)}else{this.m_u1.SetZero()}if(n>b2Settings.b2_linearSlop){this.m_u2.Multiply(1/n)}else{this.m_u2.SetZero()}m=this.m_constant-o-this.m_ratio*n;f=b2Math.b2Max(f,Math.abs(m));m=b2Math.b2Clamp(m,-b2Settings.b2_maxLinearCorrection,b2Settings.b2_maxLinearCorrection);i=-this.m_pulleyMass*m;s=-i*this.m_u1.x;q=-i*this.m_u1.y;b=-this.m_ratio*i*this.m_u2.x;a=-this.m_ratio*i*this.m_u2.y;h.m_position.x+=h.m_invMass*s;h.m_position.y+=h.m_invMass*q;h.m_rotation+=h.m_invI*(v*q-u*s);g.m_position.x+=g.m_invMass*b;g.m_position.y+=g.m_invMass*a;g.m_rotation+=g.m_invI*(e*a-c*b);h.m_R.Set(h.m_rotation);g.m_R.Set(g.m_rotation);if(this.m_limitState1==b2Joint.e_atUpperLimit){k=h.m_R;v=k.col1.x*this.m_localAnchor1.x+k.col2.x*this.m_localAnchor1.y;u=k.col1.y*this.m_localAnchor1.x+k.col2.y*this.m_localAnchor1.y;s=h.m_position.x+v;q=h.m_position.y+u;this.m_u1.Set(s-l,q-j);o=this.m_u1.Length();if(o>b2Settings.b2_linearSlop){this.m_u1.x*=1/o;this.m_u1.y*=1/o}else{this.m_u1.SetZero()}m=this.m_maxLength1-o;f=b2Math.b2Max(f,-m);m=b2Math.b2Clamp(m+b2Settings.b2_linearSlop,-b2Settings.b2_maxLinearCorrection,0);i=-this.m_limitMass1*m;t=this.m_limitPositionImpulse1;this.m_limitPositionImpulse1=b2Math.b2Max(0,this.m_limitPositionImpulse1+i);i=this.m_limitPositionImpulse1-t;s=-i*this.m_u1.x;q=-i*this.m_u1.y;h.m_position.x+=h.m_invMass*s;h.m_position.y+=h.m_invMass*q;h.m_rotation+=h.m_invI*(v*q-u*s);h.m_R.Set(h.m_rotation)}if(this.m_limitState2==b2Joint.e_atUpperLimit){k=g.m_R;e=k.col1.x*this.m_localAnchor2.x+k.col2.x*this.m_localAnchor2.y;c=k.col1.y*this.m_localAnchor2.x+k.col2.y*this.m_localAnchor2.y;b=g.m_position.x+e;a=g.m_position.y+c;this.m_u2.Set(b-r,a-p);n=this.m_u2.Length();if(n>b2Settings.b2_linearSlop){this.m_u2.x*=1/n;this.m_u2.y*=1/n}else{this.m_u2.SetZero()}m=this.m_maxLength2-n;f=b2Math.b2Max(f,-m);m=b2Math.b2Clamp(m+b2Settings.b2_linearSlop,-b2Settings.b2_maxLinearCorrection,0);i=-this.m_limitMass2*m;t=this.m_limitPositionImpulse2;this.m_limitPositionImpulse2=b2Math.b2Max(0,this.m_limitPositionImpulse2+i);i=this.m_limitPositionImpulse2-t;b=-i*this.m_u2.x;a=-i*this.m_u2.y;g.m_position.x+=g.m_invMass*b;g.m_position.y+=g.m_invMass*a;g.m_rotation+=g.m_invI*(e*a-c*b);g.m_R.Set(g.m_rotation)}return f<b2Settings.b2_linearSlop},m_ground:null,m_groundAnchor1:new b2Vec2(),m_groundAnchor2:new b2Vec2(),m_localAnchor1:new b2Vec2(),m_localAnchor2:new b2Vec2(),m_u1:new b2Vec2(),m_u2:new b2Vec2(),m_constant:null,m_ratio:null,m_maxLength1:null,m_maxLength2:null,m_pulleyMass:null,m_limitMass1:null,m_limitMass2:null,m_pulleyImpulse:null,m_limitImpulse1:null,m_limitImpulse2:null,m_limitPositionImpulse1:null,m_limitPositionImpulse2:null,m_limitState1:0,m_limitState2:0});b2PulleyJoint.b2_minPulleyLength=b2Settings.b2_lengthUnitsPerMeter;var b2PulleyJointDef=Class.create();Object.extend(b2PulleyJointDef.prototype,b2JointDef.prototype);Object.extend(b2PulleyJointDef.prototype,{initialize:function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false;this.groundPoint1=new b2Vec2();this.groundPoint2=new b2Vec2();this.anchorPoint1=new b2Vec2();this.anchorPoint2=new b2Vec2();this.type=b2Joint.e_pulleyJoint;this.groundPoint1.Set(-1,1);this.groundPoint2.Set(1,1);this.anchorPoint1.Set(-1,0);this.anchorPoint2.Set(1,0);this.maxLength1=0.5*b2PulleyJoint.b2_minPulleyLength;this.maxLength2=0.5*b2PulleyJoint.b2_minPulleyLength;this.ratio=1;this.collideConnected=true},groundPoint1:new b2Vec2(),groundPoint2:new b2Vec2(),anchorPoint1:new b2Vec2(),anchorPoint2:new b2Vec2(),maxLength1:null,maxLength2:null,ratio:null});var b2RevoluteJoint=Class.create();Object.extend(b2RevoluteJoint.prototype,b2Joint.prototype);Object.extend(b2RevoluteJoint.prototype,{GetAnchor1:function(){var a=this.m_body1.m_R;return new b2Vec2(this.m_body1.m_position.x+(a.col1.x*this.m_localAnchor1.x+a.col2.x*this.m_localAnchor1.y),this.m_body1.m_position.y+(a.col1.y*this.m_localAnchor1.x+a.col2.y*this.m_localAnchor1.y))},GetAnchor2:function(){var a=this.m_body2.m_R;return new b2Vec2(this.m_body2.m_position.x+(a.col1.x*this.m_localAnchor2.x+a.col2.x*this.m_localAnchor2.y),this.m_body2.m_position.y+(a.col1.y*this.m_localAnchor2.x+a.col2.y*this.m_localAnchor2.y))},GetJointAngle:function(){return this.m_body2.m_rotation-this.m_body1.m_rotation},GetJointSpeed:function(){return this.m_body2.m_angularVelocity-this.m_body1.m_angularVelocity},GetMotorTorque:function(a){return a*this.m_motorImpulse},SetMotorSpeed:function(a){this.m_motorSpeed=a},SetMotorTorque:function(a){this.m_maxMotorTorque=a},GetReactionForce:function(a){var b=this.m_ptpImpulse.Copy();b.Multiply(a);return b},GetReactionTorque:function(a){return a*this.m_limitImpulse},initialize:function(c){this.m_node1=new b2JointNode();this.m_node2=new b2JointNode();this.m_type=c.type;this.m_prev=null;this.m_next=null;this.m_body1=c.body1;this.m_body2=c.body2;this.m_collideConnected=c.collideConnected;this.m_islandFlag=false;this.m_userData=c.userData;this.K=new b2Mat22();this.K1=new b2Mat22();this.K2=new b2Mat22();this.K3=new b2Mat22();this.m_localAnchor1=new b2Vec2();this.m_localAnchor2=new b2Vec2();this.m_ptpImpulse=new b2Vec2();this.m_ptpMass=new b2Mat22();var b;var a;var e;b=this.m_body1.m_R;a=c.anchorPoint.x-this.m_body1.m_position.x;e=c.anchorPoint.y-this.m_body1.m_position.y;this.m_localAnchor1.x=a*b.col1.x+e*b.col1.y;this.m_localAnchor1.y=a*b.col2.x+e*b.col2.y;b=this.m_body2.m_R;a=c.anchorPoint.x-this.m_body2.m_position.x;e=c.anchorPoint.y-this.m_body2.m_position.y;this.m_localAnchor2.x=a*b.col1.x+e*b.col1.y;this.m_localAnchor2.y=a*b.col2.x+e*b.col2.y;this.m_intialAngle=this.m_body2.m_rotation-this.m_body1.m_rotation;this.m_ptpImpulse.Set(0,0);this.m_motorImpulse=0;this.m_limitImpulse=0;this.m_limitPositionImpulse=0;this.m_lowerAngle=c.lowerAngle;this.m_upperAngle=c.upperAngle;this.m_maxMotorTorque=c.motorTorque;this.m_motorSpeed=c.motorSpeed;this.m_enableLimit=c.enableLimit;this.m_enableMotor=c.enableMotor},K:new b2Mat22(),K1:new b2Mat22(),K2:new b2Mat22(),K3:new b2Mat22(),PrepareVelocitySolver:function(){var i=this.m_body1;var h=this.m_body2;var g;g=i.m_R;var l=g.col1.x*this.m_localAnchor1.x+g.col2.x*this.m_localAnchor1.y;var j=g.col1.y*this.m_localAnchor1.x+g.col2.y*this.m_localAnchor1.y;g=h.m_R;var f=g.col1.x*this.m_localAnchor2.x+g.col2.x*this.m_localAnchor2.y;var e=g.col1.y*this.m_localAnchor2.x+g.col2.y*this.m_localAnchor2.y;var m=i.m_invMass;var k=h.m_invMass;var c=i.m_invI;var b=h.m_invI;this.K1.col1.x=m+k;this.K1.col2.x=0;this.K1.col1.y=0;this.K1.col2.y=m+k;this.K2.col1.x=c*j*j;this.K2.col2.x=-c*l*j;this.K2.col1.y=-c*l*j;this.K2.col2.y=c*l*l;this.K3.col1.x=b*e*e;this.K3.col2.x=-b*f*e;this.K3.col1.y=-b*f*e;this.K3.col2.y=b*f*f;this.K.SetM(this.K1);this.K.AddM(this.K2);this.K.AddM(this.K3);this.K.Invert(this.m_ptpMass);this.m_motorMass=1/(c+b);if(this.m_enableMotor==false){this.m_motorImpulse=0}if(this.m_enableLimit){var a=h.m_rotation-i.m_rotation-this.m_intialAngle;if(b2Math.b2Abs(this.m_upperAngle-this.m_lowerAngle)<2*b2Settings.b2_angularSlop){this.m_limitState=b2Joint.e_equalLimits}else{if(a<=this.m_lowerAngle){if(this.m_limitState!=b2Joint.e_atLowerLimit){this.m_limitImpulse=0}this.m_limitState=b2Joint.e_atLowerLimit}else{if(a>=this.m_upperAngle){if(this.m_limitState!=b2Joint.e_atUpperLimit){this.m_limitImpulse=0}this.m_limitState=b2Joint.e_atUpperLimit}else{this.m_limitState=b2Joint.e_inactiveLimit;this.m_limitImpulse=0}}}}else{this.m_limitImpulse=0}if(b2World.s_enableWarmStarting){i.m_linearVelocity.x-=m*this.m_ptpImpulse.x;i.m_linearVelocity.y-=m*this.m_ptpImpulse.y;i.m_angularVelocity-=c*((l*this.m_ptpImpulse.y-j*this.m_ptpImpulse.x)+this.m_motorImpulse+this.m_limitImpulse);h.m_linearVelocity.x+=k*this.m_ptpImpulse.x;h.m_linearVelocity.y+=k*this.m_ptpImpulse.y;h.m_angularVelocity+=b*((f*this.m_ptpImpulse.y-e*this.m_ptpImpulse.x)+this.m_motorImpulse+this.m_limitImpulse)}else{this.m_ptpImpulse.SetZero();this.m_motorImpulse=0;this.m_limitImpulse=0}this.m_limitPositionImpulse=0},SolveVelocityConstraints:function(g){var h=this.m_body1;var f=this.m_body2;var j;j=h.m_R;var p=j.col1.x*this.m_localAnchor1.x+j.col2.x*this.m_localAnchor1.y;var o=j.col1.y*this.m_localAnchor1.x+j.col2.y*this.m_localAnchor1.y;j=f.m_R;var b=j.col1.x*this.m_localAnchor2.x+j.col2.x*this.m_localAnchor2.y;var a=j.col1.y*this.m_localAnchor2.x+j.col2.y*this.m_localAnchor2.y;var l;var r=f.m_linearVelocity.x+(-f.m_angularVelocity*a)-h.m_linearVelocity.x-(-h.m_angularVelocity*o);var q=f.m_linearVelocity.y+(f.m_angularVelocity*b)-h.m_linearVelocity.y-(h.m_angularVelocity*p);var n=-(this.m_ptpMass.col1.x*r+this.m_ptpMass.col2.x*q);var m=-(this.m_ptpMass.col1.y*r+this.m_ptpMass.col2.y*q);this.m_ptpImpulse.x+=n;this.m_ptpImpulse.y+=m;h.m_linearVelocity.x-=h.m_invMass*n;h.m_linearVelocity.y-=h.m_invMass*m;h.m_angularVelocity-=h.m_invI*(p*m-o*n);f.m_linearVelocity.x+=f.m_invMass*n;f.m_linearVelocity.y+=f.m_invMass*m;f.m_angularVelocity+=f.m_invI*(b*m-a*n);if(this.m_enableMotor&&this.m_limitState!=b2Joint.e_equalLimits){var s=f.m_angularVelocity-h.m_angularVelocity-this.m_motorSpeed;var c=-this.m_motorMass*s;var e=this.m_motorImpulse;this.m_motorImpulse=b2Math.b2Clamp(this.m_motorImpulse+c,-g.dt*this.m_maxMotorTorque,g.dt*this.m_maxMotorTorque);c=this.m_motorImpulse-e;h.m_angularVelocity-=h.m_invI*c;f.m_angularVelocity+=f.m_invI*c}if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){var i=f.m_angularVelocity-h.m_angularVelocity;var k=-this.m_motorMass*i;if(this.m_limitState==b2Joint.e_equalLimits){this.m_limitImpulse+=k}else{if(this.m_limitState==b2Joint.e_atLowerLimit){l=this.m_limitImpulse;this.m_limitImpulse=b2Math.b2Max(this.m_limitImpulse+k,0);k=this.m_limitImpulse-l}else{if(this.m_limitState==b2Joint.e_atUpperLimit){l=this.m_limitImpulse;this.m_limitImpulse=b2Math.b2Min(this.m_limitImpulse+k,0);k=this.m_limitImpulse-l}}}h.m_angularVelocity-=h.m_invI*k;f.m_angularVelocity+=f.m_invI*k}},SolvePositionConstraints:function(){var t;var n;var m=this.m_body1;var l=this.m_body2;var p=0;var o;o=m.m_R;var A=o.col1.x*this.m_localAnchor1.x+o.col2.x*this.m_localAnchor1.y;var z=o.col1.y*this.m_localAnchor1.x+o.col2.y*this.m_localAnchor1.y;o=l.m_R;var g=o.col1.x*this.m_localAnchor2.x+o.col2.x*this.m_localAnchor2.y;var f=o.col1.y*this.m_localAnchor2.x+o.col2.y*this.m_localAnchor2.y;var v=m.m_position.x+A;var u=m.m_position.y+z;var e=l.m_position.x+g;var c=l.m_position.y+f;var k=e-v;var j=c-u;p=Math.sqrt(k*k+j*j);var r=m.m_invMass;var q=l.m_invMass;var i=m.m_invI;var h=l.m_invI;this.K1.col1.x=r+q;this.K1.col2.x=0;this.K1.col1.y=0;this.K1.col2.y=r+q;this.K2.col1.x=i*z*z;this.K2.col2.x=-i*A*z;this.K2.col1.y=-i*A*z;this.K2.col2.y=i*A*A;this.K3.col1.x=h*f*f;this.K3.col2.x=-h*g*f;this.K3.col1.y=-h*g*f;this.K3.col2.y=h*g*g;this.K.SetM(this.K1);this.K.AddM(this.K2);this.K.AddM(this.K3);this.K.Solve(b2RevoluteJoint.tImpulse,-k,-j);var b=b2RevoluteJoint.tImpulse.x;var a=b2RevoluteJoint.tImpulse.y;m.m_position.x-=m.m_invMass*b;m.m_position.y-=m.m_invMass*a;m.m_rotation-=m.m_invI*(A*a-z*b);m.m_R.Set(m.m_rotation);l.m_position.x+=l.m_invMass*b;l.m_position.y+=l.m_invMass*a;l.m_rotation+=l.m_invI*(g*a-f*b);l.m_R.Set(l.m_rotation);var y=0;if(this.m_enableLimit&&this.m_limitState!=b2Joint.e_inactiveLimit){var x=l.m_rotation-m.m_rotation-this.m_intialAngle;var s=0;if(this.m_limitState==b2Joint.e_equalLimits){n=b2Math.b2Clamp(x,-b2Settings.b2_maxAngularCorrection,b2Settings.b2_maxAngularCorrection);s=-this.m_motorMass*n;y=b2Math.b2Abs(n)}else{if(this.m_limitState==b2Joint.e_atLowerLimit){n=x-this.m_lowerAngle;y=b2Math.b2Max(0,-n);n=b2Math.b2Clamp(n+b2Settings.b2_angularSlop,-b2Settings.b2_maxAngularCorrection,0);s=-this.m_motorMass*n;t=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Max(this.m_limitPositionImpulse+s,0);s=this.m_limitPositionImpulse-t}else{if(this.m_limitState==b2Joint.e_atUpperLimit){n=x-this.m_upperAngle;y=b2Math.b2Max(0,n);n=b2Math.b2Clamp(n-b2Settings.b2_angularSlop,0,b2Settings.b2_maxAngularCorrection);s=-this.m_motorMass*n;t=this.m_limitPositionImpulse;this.m_limitPositionImpulse=b2Math.b2Min(this.m_limitPositionImpulse+s,0);s=this.m_limitPositionImpulse-t}}}m.m_rotation-=m.m_invI*s;m.m_R.Set(m.m_rotation);l.m_rotation+=l.m_invI*s;l.m_R.Set(l.m_rotation)}return p<=b2Settings.b2_linearSlop&&y<=b2Settings.b2_angularSlop},m_localAnchor1:new b2Vec2(),m_localAnchor2:new b2Vec2(),m_ptpImpulse:new b2Vec2(),m_motorImpulse:null,m_limitImpulse:null,m_limitPositionImpulse:null,m_ptpMass:new b2Mat22(),m_motorMass:null,m_intialAngle:null,m_lowerAngle:null,m_upperAngle:null,m_maxMotorTorque:null,m_motorSpeed:null,m_enableLimit:null,m_enableMotor:null,m_limitState:0});b2RevoluteJoint.tImpulse=new b2Vec2();var b2RevoluteJointDef=Class.create();Object.extend(b2RevoluteJointDef.prototype,b2JointDef.prototype);Object.extend(b2RevoluteJointDef.prototype,{initialize:function(){this.type=b2Joint.e_unknownJoint;this.userData=null;this.body1=null;this.body2=null;this.collideConnected=false;this.type=b2Joint.e_revoluteJoint;this.anchorPoint=new b2Vec2(0,0);this.lowerAngle=0;this.upperAngle=0;this.motorTorque=0;this.motorSpeed=0;this.enableLimit=false;this.enableMotor=false},anchorPoint:null,lowerAngle:null,upperAngle:null,motorTorque:null,motorSpeed:null,enableLimit:null,enableMotor:null});