brepjs-cad 0.93.0 → 0.95.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +84 -0
- package/package.json +1 -1
- package/viewer/dist/assets/{brepjs-PrVqZ_q2.js → brepjs-By5zhkbr.js} +24 -24
- package/viewer/dist/assets/{index-D-CkaFtz.js → index-CdmuHLtd.js} +1 -1
- package/viewer/dist/assets/{kernelWorker-DMADrDhW.js → kernelWorker-24XPVxhk.js} +1 -1
- package/viewer/dist/index.html +1 -1
|
@@ -1,39 +1,39 @@
|
|
|
1
1
|
var e=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports);function t(e,t){return e[t]}function n(e,t=0){return[e[t],e[t+1],e[t+2]]}var r=class extends Error{location;constructor(e,t){super(`Bug in ${e}: ${t}`),this.name=`BrepBugError`,this.location=e}};function i(e,t){throw new r(e,t)}var a={exact:!0,brepExport:!0,exactMeasurement:!0,tessellationModel:`extract-time`},o={exact:!0,brepExport:!0,exactMeasurement:!0,tessellationModel:`none`},s=Symbol.for(`brepjs.kernel.unsupportedOperation`),c=class extends Error{constructor(e){super(e),this.name=`UnsupportedKernelOperationError`,Object.defineProperty(this,s,{value:!0})}};function l(e){return e instanceof Error&&Reflect.get(e,s)===!0}function u(e,t){return{x:e.x-t.x,y:e.y-t.y,z:e.z-t.z}}function d(e,t){return{x:e.y*t.z-e.z*t.y,y:e.z*t.x-e.x*t.z,z:e.x*t.y-e.y*t.x}}function f(e,t){return e.x*t.x+e.y*t.y+e.z*t.z}function p(e){return Math.sqrt(e.x*e.x+e.y*e.y+e.z*e.z)}function m(e,t){let n=e.x-t.x,r=e.y-t.y,i=e.z-t.z;return n*n+r*r+i*i}function h(e,t){let n=e[t];if(n===void 0)throw Error(`Index ${t} out of bounds`);return n}function g(e,t){let n=e[t];if(n===void 0)throw Error(`Index ${t} out of bounds`);return n}function _(e,t,n,r){let i=d(u(h(e,n),h(e,t)),u(h(e,r),h(e,t))),a=p(i),o=a>1e-14?{x:i.x/a,y:i.y/a,z:i.z/a}:i;return{a:t,b:n,c:r,normal:o,offset:f(o,h(e,t)),alive:!0,outsidePoints:[]}}function v(e,t){return f(e.normal,t)-e.offset}function y(e,t){let n=t*t,r=[];for(let t of e){let e=!1;for(let i of r)if(m(t,i)<n){e=!0;break}e||r.push(t)}return r}function b(e){let t=e.length;if(t<4)return null;let n=0,r=1,i=m(h(e,0),h(e,1));for(let a=0;a<t;a++)for(let o=a+1;o<t;o++){let t=m(h(e,a),h(e,o));t>i&&(i=t,n=a,r=o)}if(i<1e-20)return null;let a=u(h(e,r),h(e,n)),o=-1,s=-1;for(let i=0;i<t;i++){if(i===n||i===r)continue;let t=d(a,u(h(e,i),h(e,n))),c=f(t,t);c>s&&(s=c,o=i)}if(o===-1||s<1e-20)return null;let c=d(u(h(e,r),h(e,n)),u(h(e,o),h(e,n))),l=p(c);if(l<1e-14)return null;let g={x:c.x/l,y:c.y/l,z:c.z/l},_=f(g,h(e,n)),v=-1,y=-1;for(let i=0;i<t;i++){if(i===n||i===r||i===o)continue;let t=Math.abs(f(g,h(e,i))-_);t>y&&(y=t,v=i)}return v===-1||y<1e-14?null:f(g,h(e,v))-_>0?[n,o,r,v]:[n,r,o,v]}function x(e,t){let n=y(e,t);if(n.length<4)throw Error(n.length===0?`No points provided for convex hull`:`Fewer than 4 non-coincident points; cannot form a 3D convex hull`);let r=b(n);if(r===null)throw Error(`All points are coplanar; cannot form a 3D convex hull`);let[i,a,o,s]=r,c={x:(h(n,i).x+h(n,a).x+h(n,o).x+h(n,s).x)/4,y:(h(n,i).y+h(n,a).y+h(n,o).y+h(n,s).y)/4,z:(h(n,i).z+h(n,a).z+h(n,o).z+h(n,s).z)/4};function l(e,t,r){let i=_(n,e,t,r),a={x:(h(n,e).x+h(n,t).x+h(n,r).x)/3,y:(h(n,e).y+h(n,t).y+h(n,r).y)/3,z:(h(n,e).z+h(n,t).z+h(n,r).z)/3},o=u(c,a);return f(i.normal,o)>0?_(n,e,r,t):i}let d=[l(i,a,o),l(i,o,s),l(i,s,a),l(a,s,o)],p=new Set([i,a,o,s]),m=1e-10;for(let e=0;e<n.length;e++)if(!p.has(e)){for(let t of d)if(v(t,h(n,e))>m){t.outsidePoints.push(e);break}}for(let e=0;e<n.length*4;e++){let e=null;for(let t of d)if(t.alive&&t.outsidePoints.length>0){e=t;break}if(e===null)break;let t=g(e.outsidePoints,0),r=v(e,h(n,t));for(let i=1;i<e.outsidePoints.length;i++){let a=g(e.outsidePoints,i),o=v(e,h(n,a));o>r&&(r=o,t=a)}let i=[];for(let e of d)e.alive&&v(e,h(n,t))>m&&i.push(e);let a=new Map;for(let e of i){let t=[[e.a,e.b],[e.b,e.c],[e.c,e.a]];for(let[e,n]of t){let t=e<n?`${e}-${n}`:`${n}-${e}`,r=a.get(t);r?r.count++:a.set(t,{a:e,b:n,count:1})}}let o=[];for(let e of a.values())e.count===1&&o.push({a:e.a,b:e.b});let s=[];for(let e of i){for(let n of e.outsidePoints)n!==t&&s.push(n);e.alive=!1,e.outsidePoints=[]}let c=[];for(let e of o){let r=_(n,e.a,e.b,t);c.push(r),d.push(r)}for(let e of s)for(let t of c)if(v(t,h(n,e))>m){t.outsidePoints.push(e);break}}let x=[];for(let e of d)e.alive&&x.push([e.a,e.b,e.c]);return{faces:x,points:n}}function S(e,t){switch(e.__bk2d){case`line`:return[e.ox+e.dx*t,e.oy+e.dy*t];case`circle`:{let n=e.sense?t:-t;return[e.cx+e.radius*Math.cos(n),e.cy+e.radius*Math.sin(n)]}case`ellipse`:{let n=e.sense?t:-t,r=Math.cos(e.xDirAngle),i=Math.sin(e.xDirAngle),a=e.majorRadius*Math.cos(n),o=e.minorRadius*Math.sin(n);return[e.cx+a*r-o*i,e.cy+a*i+o*r]}case`bezier`:return Te(e.poles,t);case`bspline`:return Ee(e,t);case`trimmed`:{let n=e.tStart+t*(e.tEnd-e.tStart);return S(e.basis,n)}}}function C(e,t){switch(e.__bk2d){case`line`:return[e.dx,e.dy];case`circle`:{let n=e.sense?t:-t,r=e.sense?1:-1;return[-e.radius*Math.sin(n)*r,e.radius*Math.cos(n)*r]}case`ellipse`:{let n=e.sense?t:-t,r=e.sense?1:-1,i=Math.cos(e.xDirAngle),a=Math.sin(e.xDirAngle),o=-e.majorRadius*Math.sin(n)*r,s=e.minorRadius*Math.cos(n)*r;return[o*i-s*a,o*a+s*i]}case`bezier`:{let n=1e-8,r=Te(e.poles,Math.max(0,t-n)),i=Te(e.poles,Math.min(1,t+n)),a=Math.min(1,t+n)-Math.max(0,t-n);return[(i[0]-r[0])/a,(i[1]-r[1])/a]}case`bspline`:{let n=1e-8,r=e.knots[0],i=e.knots[e.knots.length-1],a=Ee(e,Math.max(r,t-n)),o=Ee(e,Math.min(i,t+n)),s=Math.min(i,t+n)-Math.max(r,t-n);return[(o[0]-a[0])/s,(o[1]-a[1])/s]}case`trimmed`:{let n=e.tStart+t*(e.tEnd-e.tStart),r=C(e.basis,n),i=e.tEnd-e.tStart;return[r[0]*i,r[1]*i]}}}function w(e){switch(e.__bk2d){case`line`:return{first:0,last:e.len};case`circle`:case`ellipse`:return{first:0,last:2*Math.PI};case`bezier`:return{first:0,last:1};case`bspline`:return{first:e.knots[0],last:e.knots[e.knots.length-1]};case`trimmed`:return{first:0,last:1}}}function ee(e){switch(e.__bk2d){case`line`:return`LINE`;case`circle`:return`CIRCLE`;case`ellipse`:return`ELLIPSE`;case`bezier`:return`BEZIER_CURVE`;case`bspline`:return`BSPLINE_CURVE`;case`trimmed`:return`TRIMMED_`+ee(e.basis)}}function te(e,t,n,r){let i=n-e,a=r-t,o=Math.sqrt(i*i+a*a);return{__bk2d:`line`,ox:e,oy:t,dx:o>0?i/o:1,dy:o>0?a/o:0,len:o}}function ne(e,t,n,r=!0){return{__bk2d:`circle`,cx:e,cy:t,radius:n,sense:r}}function re(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));if(Math.abs(o)<1e-12)return te(e,t,i,a);let s=((e*e+t*t)*(r-a)+(n*n+r*r)*(a-t)+(i*i+a*a)*(t-r))/o,c=((e*e+t*t)*(i-n)+(n*n+r*r)*(e-i)+(i*i+a*a)*(n-e))/o,l=Math.sqrt((e-s)**2+(t-c)**2),u=Math.atan2(t-c,e-s),d=Math.atan2(r-c,n-s),f=Math.atan2(a-c,i-s),p=d-u;p<0&&(p+=2*Math.PI);let m=f-u;m<0&&(m+=2*Math.PI);let h=p<m,g=ne(s,c,l,h);if(!h){let e=-u,t=-f;return t<e-1e-9&&(t+=2*Math.PI),{__bk2d:`trimmed`,basis:g,tStart:e,tEnd:t}}let _=f;return _<u-1e-9&&(_+=2*Math.PI),{__bk2d:`trimmed`,basis:g,tStart:u,tEnd:_}}function ie(e,t,n,r,i,a){let o=Math.sqrt(n*n+r*r),s=o>0?n/o:0,c=o>0?r/o:0,l=e-i,u=t-a,d=2*(u*s-l*c);if(Math.abs(d)<1e-12)return te(e,t,i,a);let f=-(l*l+u*u)/d,p=e-f*c,m=t+f*s,h=Math.abs(f),g=Math.atan2(t-m,e-p),_=Math.atan2(a-m,i-p),v=-(t-m)/h,y=(e-p)/h,b=s*v+c*y,x;if(b>0){let e=_-g;e<=0&&(e+=2*Math.PI),x=g+e/2}else{let e=_-g;e>=0&&(e-=2*Math.PI),x=g+e/2}return re(e,t,p+h*Math.cos(x),m+h*Math.sin(x),i,a)}function ae(e,t,n,r,i=1,a=0,o=!0){return{__bk2d:`ellipse`,cx:e,cy:t,majorRadius:n,minorRadius:r,xDirAngle:Math.atan2(a,i),sense:o}}function oe(e){return{__bk2d:`bezier`,poles:[...e]}}function se(e,t,n){switch(e.__bk2d){case`line`:return{...e,ox:e.ox+t,oy:e.oy+n};case`circle`:return{...e,cx:e.cx+t,cy:e.cy+n};case`ellipse`:return{...e,cx:e.cx+t,cy:e.cy+n};case`bezier`:return{...e,poles:e.poles.map(([e,r])=>[e+t,r+n])};case`bspline`:return{...e,poles:e.poles.map(([e,r])=>[e+t,r+n])};case`trimmed`:return{...e,basis:se(e.basis,t,n)}}}function ce(e,t,n,r){let i=Math.cos(t),a=Math.sin(t),o=(e,t)=>{let o=e-n,s=t-r;return[n+o*i-s*a,r+o*a+s*i]};switch(e.__bk2d){case`line`:{let[t,n]=o(e.ox,e.oy),r=e.dx*i-e.dy*a,s=e.dx*a+e.dy*i;return{...e,ox:t,oy:n,dx:r,dy:s}}case`circle`:{let[t,n]=o(e.cx,e.cy);return{...e,cx:t,cy:n}}case`ellipse`:{let[n,r]=o(e.cx,e.cy);return{...e,cx:n,cy:r,xDirAngle:e.xDirAngle+t}}case`bezier`:return{...e,poles:e.poles.map(([e,t])=>o(e,t))};case`bspline`:return{...e,poles:e.poles.map(([e,t])=>o(e,t))};case`trimmed`:return{...e,basis:ce(e.basis,t,n,r)}}}function le(e,t,n,r){let i=(e,i)=>[n+(e-n)*t,r+(i-r)*t];switch(e.__bk2d){case`line`:{let[t,n]=i(e.ox,e.oy),[r,a]=i(e.ox+e.dx*e.len,e.oy+e.dy*e.len),o=r-t,s=a-n,c=Math.sqrt(o*o+s*s);return{...e,ox:t,oy:n,dx:c>0?o/c:e.dx,dy:c>0?s/c:e.dy,len:c}}case`circle`:{let[n,r]=i(e.cx,e.cy);return{...e,cx:n,cy:r,radius:e.radius*Math.abs(t)}}case`ellipse`:{let[n,r]=i(e.cx,e.cy);return{...e,cx:n,cy:r,majorRadius:e.majorRadius*Math.abs(t),minorRadius:e.minorRadius*Math.abs(t)}}case`bezier`:return{...e,poles:e.poles.map(([e,t])=>i(e,t))};case`bspline`:return{...e,poles:e.poles.map(([e,t])=>i(e,t))};case`trimmed`:return{...e,basis:le(e.basis,t,n,r)}}}function ue(e,t,n){return le(e,-1,t,n)}function de(e,t,n,r,i){let a=Math.sqrt(r*r+i*i),o=r/a,s=i/a,c=(e,r)=>{let i=e-t,a=r-n,c=i*o+a*s;return[t+2*c*o-i,n+2*c*s-a]};switch(e.__bk2d){case`line`:{let[t,n]=c(e.ox,e.oy),r=2*(e.dx*o+e.dy*s)*o-e.dx,i=2*(e.dx*o+e.dy*s)*s-e.dy;return{...e,ox:t,oy:n,dx:r,dy:i}}case`circle`:{let[t,n]=c(e.cx,e.cy);return{...e,cx:t,cy:n,sense:!e.sense}}case`ellipse`:{let[t,n]=c(e.cx,e.cy),r=o*o-s*s,i=2*o*s,a=Math.atan2(i*Math.cos(e.xDirAngle)-r*Math.sin(e.xDirAngle),r*Math.cos(e.xDirAngle)+i*Math.sin(e.xDirAngle));return{...e,cx:t,cy:n,xDirAngle:a,sense:!e.sense}}case`bezier`:return{...e,poles:e.poles.map(([e,t])=>c(e,t))};case`bspline`:return{...e,poles:e.poles.map(([e,t])=>c(e,t))};case`trimmed`:return{...e,basis:de(e.basis,t,n,r,i)}}}function fe(e,t,n){let r=pe(e),i=pe(t);return r.__bk2d===`line`&&i.__bk2d===`line`?ge(e,r,t,i,n):r.__bk2d===`line`&&i.__bk2d===`circle`?{points:_e(e,r,t,i,n),segments:[]}:r.__bk2d===`circle`&&i.__bk2d===`line`?{points:_e(t,i,e,r,n),segments:[]}:r.__bk2d===`circle`&&i.__bk2d===`circle`?{points:ye(e,r,t,i,n),segments:[]}:be(e,t,n,e===t)}function pe(e){let t=e;for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function me(e,t,n){let r=w(e);return t>=r.first-n&&t<=r.last+n}function he(e,t,n){let r=w(e);if(!isFinite(r.first)||!isFinite(r.last))return null;let i=(r.last-r.first)/80,a=r.first,o=1/0;for(let s=0;s<=80;s++){let c=r.first+s*i,[l,u]=S(e,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}let[s,c]=S(e,r.first),[l,u]=S(e,r.last),[d,f]=S(e,(r.first+r.last)/2),p=Math.max(Math.sqrt((l-s)**2+(u-c)**2),Math.sqrt((d-s)**2+(f-c)**2),1e-6)*.1;return o<p*p?a:null}function ge(e,t,n,r,i){let a=t.dx*r.dy-t.dy*r.dx;if(Math.abs(a)>=1e-14){let o=r.ox-t.ox,s=r.oy-t.oy,c=(o*r.dy-s*r.dx)/a,l=(o*t.dy-s*t.dx)/a;return!me(e,c,i)||!me(n,l,i)?{points:[],segments:[]}:{points:[[t.ox+c*t.dx,t.oy+c*t.dy]],segments:[]}}let o=r.ox-t.ox,s=r.oy-t.oy,c=o*t.dy-s*t.dx;if(Math.abs(c)>i)return{points:[],segments:[]};let l=w(e),u=w(n),d=S(n,u.first),f=S(n,u.last),p=(d[0]-t.ox)*t.dx+(d[1]-t.oy)*t.dy,m=(f[0]-t.ox)*t.dx+(f[1]-t.oy)*t.dy,h=Math.max(l.first,Math.min(p,m)),g=Math.min(l.last,Math.max(p,m));return g-h<i?{points:[],segments:[]}:{points:[],segments:[te(t.ox+h*t.dx,t.oy+h*t.dy,t.ox+g*t.dx,t.oy+g*t.dy)]}}function _e(e,t,n,r,i){let a=t.ox-r.cx,o=t.oy-r.cy,s=t.dx*t.dx+t.dy*t.dy,c=2*(a*t.dx+o*t.dy),l=a*a+o*o-r.radius*r.radius,u=c*c-4*s*l;if(u<-i)return[];let d=[],f=Math.sqrt(Math.max(0,u)),p=(-c-f)/(2*s),m=(-c+f)/(2*s);for(let r of u<i*i?[p]:[p,m]){if(!me(e,r,i))continue;let a=t.ox+r*t.dx,o=t.oy+r*t.dy,s=he(n,a,o);if(s===null)continue;let[c,l]=S(n,s);(c-a)**2+(l-o)**2>i*i*1e6||d.push([a,o])}return d}function ve(e,t,n){let r=w(e),i=w(t),a=Math.abs(r.last-r.first-2*Math.PI)<1e-10,o=Math.abs(i.last-i.first-2*Math.PI)<1e-10;if(a&&o)return[];if(a)return[S(t,i.first),S(t,i.last)];if(o)return[S(e,r.first),S(e,r.last)];let s=[],c=[[t,S(e,r.first)],[t,S(e,r.last)],[e,S(t,i.first)],[e,S(t,i.last)]];for(let[e,t]of c){let r=he(e,t[0],t[1]);if(r!==null){let[i,a]=S(e,r);(i-t[0])**2+(a-t[1])**2<n*n*100&&s.push(t)}}let l=[];for(let e of s)l.some(([t,r])=>(t-e[0])**2+(r-e[1])**2<n*n*100)||l.push(e);return l}function ye(e,t,n,r,i){let a=r.cx-t.cx,o=r.cy-t.cy,s=Math.sqrt(a*a+o*o);if(s>t.radius+r.radius+i||s<Math.abs(t.radius-r.radius)-i)return[];if(s<1e-14)return Math.abs(t.radius-r.radius)>i?[]:ve(e,n,i);let c=(t.radius*t.radius-r.radius*r.radius+s*s)/(2*s),l=t.radius*t.radius-c*c,u=Math.sqrt(Math.max(0,l)),d=t.cx+c*a/s,f=t.cy+c*o/s,p=u<i?[[d,f]]:[[d+u*o/s,f-u*a/s],[d-u*o/s,f+u*a/s]],m=[];for(let[t,r]of p){let a=he(e,t,r),o=he(n,t,r);if(a===null||o===null)continue;let[s,c]=S(e,a),[l,u]=S(n,o),d=(i*10)**2;(s-t)**2+(c-r)**2>d||(l-t)**2+(u-r)**2>d||m.push([t,r])}return m}function be(e,t,n,r=!1){let i=w(e),a=w(t);if(!isFinite(i.first)||!isFinite(i.last)||!isFinite(a.first)||!isFinite(a.last))return{points:[],segments:[]};let o=[],s=[];for(let n=0;n<=100;n++){let r=i.first+(i.last-i.first)*n/100,[c,l]=S(e,r);o.push({t:r,x:c,y:l});let u=a.first+(a.last-a.first)*n/100,[d,f]=S(t,u);s.push({t:u,x:d,y:f})}let c=Math.max(n*100,.5),l=new Float64Array(600);for(let e=0;e<100;e++){let t=s[e],n=s[e+1],r=e*6;l[r]=Math.min(t.x,n.x),l[r+1]=Math.max(t.x,n.x),l[r+2]=Math.min(t.y,n.y),l[r+3]=Math.max(t.y,n.y),l[r+4]=(t.t+n.t)/2}let u=[],d=(i.last-i.first)/5;for(let e=0;e<100;e++){let t=o[e],n=o[e+1],i=Math.min(t.x,n.x)-c,a=Math.max(t.x,n.x)+c,s=Math.min(t.y,n.y)-c,f=Math.max(t.y,n.y)+c,p=(t.t+n.t)/2;for(let e=0;e<100;e++){let t=e*6;if(a<l[t]||l[t+1]<i||f<l[t+2]||l[t+3]<s)continue;let n=l[t+4];r&&Math.abs(p-n)<d||u.push({t1:p,t2:n})}}let f=n*n,p=[];for(let{t1:o,t2:s}of u){let c=o,l=s;for(let n=0;n<20;n++){let[n,r]=S(e,c),[o,s]=S(t,l),u=n-o,d=r-s;if(u*u+d*d<f)break;let p=C(e,c),m=C(t,l),h=p[0]*-m[1]- -m[0]*p[1];if(Math.abs(h)<1e-14)break;let g=(-u*-m[1]- -d*-m[0])/h,_=(p[0]*-d-p[1]*-u)/h;c+=g,l+=_,c=Math.max(i.first,Math.min(i.last,c)),l=Math.max(a.first,Math.min(a.last,l))}let[u,d]=S(e,c),[m,h]=S(t,l);if(!(r&&Math.abs(c-l)<(i.last-i.first)*.05)&&(u-m)**2+(d-h)**2<n*n*1e6){let e=(u+m)/2,t=(d+h)/2,r=!1;for(let[i,a]of p)if((i-e)**2+(a-t)**2<n*n*1e4){r=!0;break}r||p.push([e,t])}}return{points:p,segments:[]}}function xe(e){return JSON.stringify(e)}function Se(e){return JSON.parse(e)}function Ce(){return{__bk2d_bbox:!0,xMin:1/0,yMin:1/0,xMax:-1/0,yMax:-1/0}}function we(e,t,n){let r=t.__bk2d===`trimmed`?t.basis:t;if(r.__bk2d===`line`){let n=w(t);if(!isFinite(n.first)||!isFinite(n.last))return;let[r,i]=S(t,n.first),[a,o]=S(t,n.last);e.xMin=Math.min(e.xMin,r,a),e.yMin=Math.min(e.yMin,i,o),e.xMax=Math.max(e.xMax,r,a),e.yMax=Math.max(e.yMax,i,o);return}if(r.__bk2d===`circle`){let n=w(t);if(!isFinite(n.first)||!isFinite(n.last))return;let{cx:i,cy:a,radius:o,sense:s}=r,[c,l]=S(t,n.first),[u,d]=S(t,n.last),f=Math.min(c,u),p=Math.max(c,u),m=Math.min(l,d),h=Math.max(l,d),g=t.__bk2d===`trimmed`?t.tStart:n.first,_=t.__bk2d===`trimmed`?t.tEnd:n.last;for(let e=0;e<4;e++){let t=e*Math.PI/2,n=s?t:-t;for(let e=0;e<=1;e++){let r=n+e*2*Math.PI;if(r>=g-1e-10&&r<=_+1e-10){let e=i+o*Math.cos(t),n=a+o*Math.sin(t);f=Math.min(f,e),p=Math.max(p,e),m=Math.min(m,n),h=Math.max(h,n);break}}}e.xMin=Math.min(e.xMin,f),e.yMin=Math.min(e.yMin,m),e.xMax=Math.max(e.xMax,p),e.yMax=Math.max(e.yMax,h);return}let i=w(t);if(!isFinite(i.first)||!isFinite(i.last))return;let a=(i.last-i.first)/20;for(let n=0;n<=20;n++){let[r,o]=S(t,i.first+n*a);r<e.xMin&&(e.xMin=r),o<e.yMin&&(e.yMin=o),r>e.xMax&&(e.xMax=r),o>e.yMax&&(e.yMax=o)}}function Te(e,t){let n=e.length,r=e.map(([e,t])=>[e,t]);for(let e=1;e<n;e++)for(let i=0;i<n-e;i++){let e=r[i],n=r[i+1];e[0]=(1-t)*e[0]+t*n[0],e[1]=(1-t)*e[1]+t*n[1]}return r[0]}function Ee(e,t){let n=[];for(let t=0;t<e.knots.length;t++){let r=e.multiplicities[t]??1;for(let i=0;i<r;i++)n.push(e.knots[t])}let r=e.degree,i=e.poles.length,a=n.length,o=Math.max(n[r],Math.min(n[a-r-1],t)),s=r;for(let e=r;e<a-r-1;e++)if(o>=n[e]&&o<n[e+1]){s=e;break}o>=n[a-r-1]&&(s=a-r-2);let c=[];for(let t=0;t<=r;t++){let n=Math.min(s-r+t,i-1),a=e.poles[Math.max(0,n)];c.push([a[0],a[1]])}for(let e=1;e<=r;e++)for(let t=r;t>=e;t--){let i=s-r+t,a=n[i]??0,l=(n[i+r-e+1]??1)-a,u=l>1e-15?(o-a)/l:0,d=c[t],f=c[t-1];d[0]=(1-u)*f[0]+u*d[0],d[1]=(1-u)*f[1]+u*d[1]}return c[r]}var De=.001,Oe=.1,ke={nx:0,ny:0,nz:0,ax:0,ay:0,az:0,bx:0,by:0,bz:0,cx:0,cy:0,cz:0};function Ae(e,t,n){let r=(t[n*3]??0)*3,i=(t[n*3+1]??0)*3,a=(t[n*3+2]??0)*3,o=e[r]??0,s=e[r+1]??0,c=e[r+2]??0,l=e[i]??0,u=e[i+1]??0,d=e[i+2]??0,f=e[a]??0,p=e[a+1]??0,m=e[a+2]??0,h=l-o,g=u-s,_=d-c,v=f-o,y=p-s,b=m-c,x=g*b-_*y,S=_*v-h*b,C=h*y-g*v,w=Math.hypot(x,S,C)||1;return x/=w,S/=w,C/=w,ke.nx=x,ke.ny=S,ke.nz=C,ke.ax=o,ke.ay=s,ke.az=c,ke.bx=l,ke.by=u,ke.bz=d,ke.cx=f,ke.cy=p,ke.cz=m,ke}function je(e,t){let n=Math.floor(t.length/3),r=new ArrayBuffer(84+n*50),i=new DataView(r);i.setUint32(80,n,!0);let a=84;for(let r=0;r<n;r++){let n=Ae(e,t,r);i.setFloat32(a,n.nx,!0),i.setFloat32(a+4,n.ny,!0),i.setFloat32(a+8,n.nz,!0),i.setFloat32(a+12,n.ax,!0),i.setFloat32(a+16,n.ay,!0),i.setFloat32(a+20,n.az,!0),i.setFloat32(a+24,n.bx,!0),i.setFloat32(a+28,n.by,!0),i.setFloat32(a+32,n.bz,!0),i.setFloat32(a+36,n.cx,!0),i.setFloat32(a+40,n.cy,!0),i.setFloat32(a+44,n.cz,!0),i.setUint16(a+48,0,!0),a+=50}return r}function Me(e,t){let n=Math.floor(t.length/3),r=[`solid brepjs`];for(let i=0;i<n;i++){let n=Ae(e,t,i);r.push(`facet normal ${n.nx} ${n.ny} ${n.nz}`),r.push(`outer loop`),r.push(`vertex ${n.ax} ${n.ay} ${n.az}`),r.push(`vertex ${n.bx} ${n.by} ${n.bz}`),r.push(`vertex ${n.cx} ${n.cy} ${n.cz}`),r.push(`endloop`),r.push(`endfacet`)}return r.push(`endsolid brepjs`),r.join(`
|
|
2
2
|
`)+`
|
|
3
|
-
`}var Ne=()=>{};function T(e,t){return{__occtWasm:!0,type:e,id:t,delete:Ne,HashCode(e){return t%e},IsNull(){return!1}}}function Pe(e){return typeof e==`object`&&!!e&&e.__occtWasm}function E(e){if(Pe(e))return e.id;if(typeof e==`number`)return e;throw Error(`occt-wasm: expected an OcctWasmHandle or number, got `+typeof e)}function Fe(e){switch(e.toLowerCase()){case`vertex`:return`vertex`;case`edge`:return`edge`;case`wire`:return`wire`;case`face`:return`face`;case`shell`:return`shell`;case`solid`:return`solid`;case`compsolid`:return`compsolid`;case`compound`:return`compound`;default:return`compound`}}function D(e,t){return T(Fe(e.getShapeType(t)),t)}function Ie(e,t){let n=new e.VectorUint32;for(let e of t)n.push_back(e);return n}function Le(e,t){let n=new e.VectorInt;for(let e of t)n.push_back(e);return n}function Re(e,t){let n=new e.VectorDouble;for(let e of t)n.push_back(e);return n}function ze(e){let t=[],n=e.size();for(let r=0;r<n;r++)t.push(e.get(r));return t}function Be(e,t){let n=Array(16).fill(0);for(let r=0;r<4;r++)for(let i=0;i<4;i++)for(let a=0;a<4;a++)n[r*4+i]=n[r*4+i]+e[r*4+a]*t[a*4+i];return n}function Ve(e,t){if(typeof t==`number`)return t;if(Array.isArray(t))return t[0];if(e.length===0)throw Error(`occt-wasm: no edges provided`);let n=t(e[0]);return typeof n==`number`?n:n[0]}function He(e,t,n){let[r,i,a]=n,o=Math.sqrt(r*r+i*i+a*a);if(o<1e-10)return t;let s=r/o,c=i/o,l=a/o;if(Math.abs(l-1)<1e-10)return t;if(Math.abs(l+1)<1e-10)return e.rotate(t,0,0,0,1,0,0,Math.PI);let u=-c,d=s,f=Math.sqrt(u*u+d*d);if(f<1e-10)return t;let p=Math.acos(Math.max(-1,Math.min(1,l)));return e.rotate(t,0,0,0,u/f,d/f,0,p)}function Ue(e,t){return new Proxy(e,{get(e,n,r){let i=Reflect.get(e,n,r);return typeof i==`function`?function(...n){try{return i.apply(e,n)}catch(e){let n=WebAssembly.Exception;if(n&&e instanceof n)try{let[,n]=t.getExceptionMessage(e);throw Error(n,{cause:e})}catch(e){if(e instanceof Error&&!(e instanceof n))throw e}throw e}}:i}})}function We(e,t){let n=function(){return T(`compound`,t.makeNullShape())};return Object.assign(Object.create(e),{TopoDS_Solid:n,TopoDS_Face:n,TopoDS_Shape:n,TopoDS_Wire:n,TopoDS_Edge:n,TopoDS_Vertex:n,TopoDS_Shell:n,TopoDS_Compound:n,gp_Pnt_3:function(e,n,r){return T(`vertex`,t.makeVertex(e,n,r))},BRepBuilderAPI_MakeEdge_3:function(e,n){let r=e,i=n,a=t.vertexPosition(r.id),o=t.vertexPosition(i.id),s=t.makeLineEdge(a.get(0),a.get(1),a.get(2),o.get(0),o.get(1),o.get(2));return a.delete(),o.delete(),{Edge:()=>T(`edge`,s),delete(){}}}})}function Ge(e,t){let n=E(t),r=e.getSubShapes(n,`solid`);try{if(r.size()>1){let t=e.fuseAll(r);return{id:t,dispose:()=>{e.release(t)}}}return{id:n,dispose:()=>{}}}finally{for(let t=0,i=r.size();t<i;t++){let i=r.get(t);i!==n&&e.release(i)}r.delete()}}function Ke(e,t,n,r){return D(e,e.fuse(E(t),E(n)))}function qe(e,t,n,r){let i=Ge(e,n);try{return D(e,e.cut(E(t),i.id))}finally{i.dispose()}}function Je(e,t,n,r){let i=Ge(e,n);try{return D(e,e.intersect(E(t),i.id))}finally{i.dispose()}}function Ye(e,t,n,r){return D(e,e.section(E(t),E(n)))}function Xe(e,t,n,r){let i=Ie(t,n.map(E));try{return D(e,e.fuseAll(i))}finally{i.delete()}}function Ze(e,t,n,r,i){let a=Ie(t,r.map(E));try{return D(e,e.cutAll(E(n),a))}finally{a.delete()}}function Qe(e,t,n,r){let i=Ie(t,r.map(E));try{return D(e,e.split(E(n),i))}finally{i.delete()}}function $e(e,t,n,r){let i=[];return e.isNull(E(t))&&i.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),e.isNull(E(n))&&i.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is null`}),i.length===0&&!e.isValid(E(t))&&i.push({operand:`base`,issue:`not-valid`,message:`Base shape is not valid`}),i.length===0&&!e.isValid(E(n))&&i.push({operand:`tool`,issue:`not-valid`,message:`Tool shape is not valid`}),{valid:i.length===0,issues:i}}function et(e,t,n,r,i,a){throw Error(`occt-wasm: meshBoolean is not supported (use brepkit for mesh booleans)`)}function tt(e,t,n){return n!==t&&e.release(t),n}function nt(e,t,n,r){return T(`solid`,e.makeBox(t,n,r))}function rt(e,t,n,r,i){let a=e.makeCylinder(t,n);return i&&(a=tt(e,a,He(e,a,i))),r&&(r[0]!==0||r[1]!==0||r[2]!==0)&&(a=tt(e,a,e.translate(a,r[0],r[1],r[2]))),T(`solid`,a)}function it(e,t,n){let r=e.makeSphere(t);return n&&(n[0]!==0||n[1]!==0||n[2]!==0)&&(r=tt(e,r,e.translate(r,n[0],n[1],n[2]))),T(`solid`,r)}function at(e,t,n,r,i,a){let o=e.makeCone(t,n,r);return a&&(o=tt(e,o,He(e,o,a))),i&&(i[0]!==0||i[1]!==0||i[2]!==0)&&(o=tt(e,o,e.translate(o,i[0],i[1],i[2]))),T(`solid`,o)}function ot(e,t,n,r,i){let a=e.makeTorus(t,n);return i&&(a=tt(e,a,He(e,a,i))),r&&(r[0]!==0||r[1]!==0||r[2]!==0)&&(a=tt(e,a,e.translate(a,r[0],r[1],r[2]))),T(`solid`,a)}function st(e,t,n,r){return T(`solid`,e.makeEllipsoid(t,n,r))}function ct(e,t,n){return T(`solid`,e.makeBoxFromCorners(t[0],t[1],t[2],n[0],n[1],n[2]))}function lt(e,t,n){return T(`face`,e.makeRectangle(t,n))}function ut(e,t,n){let r=e.getSubShapes(E(t),n),i=[];try{let e=r.size();for(let t=0;t<e;t++)i.push(T(n,r.get(t)))}finally{r.delete()}return i}function dt(e,t){return Pe(t)?t.type:Fe(e.getShapeType(E(t)))}function ft(e,t,n){return e.isSame(E(t),E(n))}function pt(e,t,n){return e.isEqual(E(t),E(n))}function mt(e,t,n){return n?T(n,e.downcast(E(t),n)):t}function ht(e,t){return D(e,e.copy(E(t)))}function gt(e,t,n){return e.hashCode(E(t),n)}function _t(e,t){return e.isNull(E(t))}function vt(e,t){return e.shapeOrientation(E(t)).toLowerCase()}function yt(e,n){let r=e.edgeToFaceMap(E(n),1e6),i;try{i=ze(r)}finally{r.delete()}let a={};for(let e=0;e+1<i.length;e+=2){let n=t(i,e),r=t(i,e+1);a[n]||(a[n]=[]),a[n].push(r)}return JSON.stringify(a)}function bt(e,t,n){return e.subShapeCount(E(t),n)}function xt(e,t,n,r){let i=e.subShapeHashes(E(t),n,r);try{return ze(i)}finally{i.delete()}}function St(e,t,n){let r=e.sharedEdges(E(t),E(n)),i=[];try{let e=r.size();for(let t=0;t<e;t++)i.push(T(`edge`,r.get(t)))}finally{r.delete()}return i}function Ct(e,t,n){let r=e.adjacentFaces(E(t),E(n)),i=[];try{let e=r.size();for(let t=0;t<e;t++)i.push(T(`face`,r.get(t)))}finally{r.delete()}return i}function wt(e,t,n,r){let i=Ie(t,n.map(E));try{return D(e,e.sew(i,r??1e-6))}finally{i.delete()}}var Tt=1e-6;function Et(e,t){return e.isValid(E(t))}function Dt(e,t){let n=e.healSolid(E(t),Tt);return n===0?null:D(e,n)}function Ot(e,t){return D(e,e.healFace(E(t),Tt))}function kt(e,t,n){return D(e,e.healWire(E(t),Tt))}function At(e,t,n){return 0}function jt(e,t,n){return e.removeDegenerateEdges(E(t)),0}function Mt(e,t){return e.fixFaceOrientations(E(t)),0}function Nt(e,t){return D(e,e.fixShape(E(t)))}function Pt(e,t,n,r){let i=e.tessellate(E(n),r.tolerance,r.angularTolerance);try{let e=i.positionCount,n=i.normalCount,a=i.indexCount,o=i.getPositionsPtr()>>2,s=i.getNormalsPtr()>>2,c=i.getIndicesPtr()>>2,l=new Float32Array(e);for(let n=0;n<e;n++)l[n]=t.HEAPF32[o+n]??0;let u=new Float32Array(n);if(!r.skipNormals)for(let e=0;e<n;e++)u[e]=t.HEAPF32[s+e]??0;let d=i.uvCount,f=new Float32Array(r.includeUVs?d:0);if(r.includeUVs&&d>0){let e=i.getUvsPtr()>>2;for(let n=0;n<d;n++)f[n]=t.HEAPF32[e+n]??0}let p=new Uint32Array(a);for(let e=0;e<a;e++)p[e]=t.HEAPU32[c+e]??0;let m=[],h=i.faceGroupCount;if(h>0){let e=i.getFaceGroupsPtr()>>2;for(let n=0;n<h;n+=3)m.push({start:t.HEAP32[e+n]??0,count:t.HEAP32[e+n+1]??0,faceHash:t.HEAP32[e+n+2]??0})}return{vertices:l,normals:r.skipNormals?new Float32Array:u,triangles:p,uvs:f,faceGroups:m}}finally{i.delete()}}function Ft(e,t,n,r){for(let i=0;i+1<n;i++){let n=t+i*3,a=e[n]??0,o=e[n+1]??0,s=e[n+2]??0,c=e[n+3]??0,l=e[n+4]??0,u=e[n+5]??0;a===c&&o===l&&s===u||r.push(a,o,s,c,l,u)}}function It(e,t,n,r,i){let a=e.wireframe(E(n),r);try{let e=t.HEAPF32,n=a.getPointsPtr()>>2,r=[],i=[],o=a.edgeGroupCount,s=o>0?a.getEdgeGroupsPtr()>>2:0;for(let a=0;a<o;a+=3){let o=n+(t.HEAP32[s+a]??0),c=Math.floor((t.HEAP32[s+a+1]??0)/3),l=r.length/3;Ft(e,o,c,r),i.push({start:l,count:r.length/3-l,edgeHash:t.HEAP32[s+a+2]??0})}return{lines:new Float32Array(r),edgeGroups:i}}finally{a.delete()}}function Lt(e,t){return e.hasTriangulation(E(t))}function Rt(e,t,n,r){e.meshShape(E(t),n,r).delete()}var zt={line:`LINE`,circle:`CIRCLE`,ellipse:`ELLIPSE`,hyperbola:`HYPERBOLA`,parabola:`PARABOLA`,bezier:`BEZIER_CURVE`,bspline:`BSPLINE_CURVE`,offset:`OFFSET_CURVE`,other:`OTHER_CURVE`};function Bt(e,t){let n=e.curveType(E(t));return zt[n]??n.toUpperCase()}function Vt(e,t){let n=e.curveParameters(E(t));try{return[n.get(0),n.get(1)]}finally{n.delete()}}function Ht(e,t,n){let r=e.curvePointAtParam(E(t),n);try{return[r.get(0),r.get(1),r.get(2)]}finally{r.delete()}}function Ut(e,t,n){let r=e.curveTangent(E(t),n);try{let i=e.curvePointAtParam(E(t),n);try{return{point:[i.get(0),i.get(1),i.get(2)],tangent:[r.get(0),r.get(1),r.get(2)]}}finally{i.delete()}}finally{r.delete()}}function Wt(e,t){return e.curveIsClosed(E(t))}function Gt(e,t){return e.curveIsPeriodic(E(t))}function Kt(e,t){return 2*Math.PI}function qt(e,t,n,r){let i=[];for(let e of n)i.push(e[0],e[1],e[2]);let a=Re(t,i);try{return T(`edge`,e.interpolatePoints(a,r?.periodic??!1))}finally{a.delete()}}function Jt(e,t,n,r){let i=[];for(let e of n)i.push(e[0],e[1],e[2]);let a=Re(t,i);try{return T(`edge`,e.approximatePoints(a,r?.tolerance??.001))}finally{a.delete()}}function Yt(e,t,n){return T(`edge`,e.curveDegreeElevate(E(t),n))}function Xt(e,t,n,r){return T(`edge`,e.curveKnotInsert(E(t),n,r))}function Zt(e,t,n,r){return T(`edge`,e.curveKnotRemove(E(t),n,r))}function Qt(e,t,n){let r=e.curveSplit(E(t),n);try{return[T(`edge`,r.get(0)),T(`edge`,r.get(1))]}finally{r.delete()}}function $t(e,t){let n=en(e,t);if(!n||n.poles.length<2)return null;let r=n.poles[n.poles.length-2];return r?[r[0],r[1],r[2]]:null}function en(e,t){try{let n=e.getNurbsCurveData(E(t));try{let e=n.poles.size()/3,t=[];for(let r=0;r<e;r++)t.push([n.poles.get(r*3),n.poles.get(r*3+1),n.poles.get(r*3+2)]);let r=[];for(let e=0;e<n.knots.size();e++)r.push(n.knots.get(e));let i=[];for(let e=0;e<n.multiplicities.size();e++)i.push(n.multiplicities.get(e));let a=[];if(n.rational)for(let e=0;e<n.weights.size();e++)a.push(n.weights.get(e));else for(let t=0;t<e;t++)a.push(1);return{degree:n.degree,poles:t,weights:a,knots:r,multiplicities:i,isPeriodic:n.periodic,isRational:n.rational}}finally{n.delete()}}catch{return null}}function tn(e,t){let n=e.vertexPosition(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function nn(e,t){return e.surfaceType(E(t)).toLowerCase()}function rn(e,t){let n=e.uvBounds(E(t));try{return{uMin:n.get(0),uMax:n.get(1),vMin:n.get(2),vMax:n.get(3)}}finally{n.delete()}}function an(e,t){return T(`wire`,e.outerWire(E(t)))}function on(e,t,n,r){let i=e.surfaceNormal(E(t),n,r);try{return[i.get(0),i.get(1),i.get(2)]}finally{i.delete()}}function sn(e,t,n,r){let i=e.pointOnSurface(E(t),n,r);try{return[i.get(0),i.get(1),i.get(2)]}finally{i.delete()}}var cn=(e,t)=>[e[0]-t[0],e[1]-t[1],e[2]-t[2]],ln=(e,t)=>e[0]*t[0]+e[1]*t[1]+e[2]*t[2],un=e=>Math.hypot(e[0],e[1],e[2]),dn=(e,t)=>[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]];function fn(e,t){if(nn(e,t)!==`cylinder`)return null;let n=rn(e,t),r=.5*(n.vMin+n.vMax),i=n.uMin+.25*(n.uMax-n.uMin),a=n.uMin+.5*(n.uMax-n.uMin),o=on(e,t,i,r),s=on(e,t,a,r),c=sn(e,t,i,r),l=sn(e,t,a,r),u=dn(o,s),d=un(u),f=un(cn(o,s));if(d<1e-9||f<1e-9)return null;let p=[u[0]/d,u[1]/d,u[2]/d],m=un(cn(c,l))/f,h=[c[0]-m*o[0],c[1]-m*o[1],c[2]-m*o[2]],g=un(cn(h,[l[0]-m*s[0],l[1]-m*s[1],l[2]-m*s[2]]))<1e-6?h:[c[0]+m*o[0],c[1]+m*o[1],c[2]+m*o[2]];return{origin:g,direction:p,radius:m,isDirect:(vt(e,t)===`reversed`?-1:1)*ln(o,cn(c,g))>0}}function pn(e,t,n){let r=cn(t,e),i=cn(n,e),a=dn(r,i),o=ln(a,a);if(o<1e-18)return null;let s=ln(r,r),c=ln(i,i),l=dn([s*i[0]-c*r[0],s*i[1]-c*r[1],s*i[2]-c*r[2]],a),u=1/(2*o);return[e[0]+l[0]*u,e[1]+l[1]*u,e[2]+l[2]*u]}function mn(e,t,n,r,i){return pn(sn(e,t,n+.1*(r-n),i),sn(e,t,n+.45*(r-n),i),sn(e,t,n+.8*(r-n),i))}function hn(e,t){let n=rn(e,t),r=[.2,.5,.8].map(r=>mn(e,t,n.uMin,n.uMax,n.vMin+r*(n.vMax-n.vMin))).filter(e=>e!==null);if(r.length<2)return null;let i=null,a=1e-9;for(let e=0;e<r.length;e++)for(let t=e+1;t<r.length;t++){let n=r[e],o=r[t];if(!n||!o)continue;let s=cn(o,n),c=un(s);c>a&&(a=c,i={origin:n,direction:[s[0]/c,s[1]/c,s[2]/c]})}return i}function gn(e,t){let n=nn(e,t);if(n===`cylinder`){let n=fn(e,t);return n?{origin:n.origin,direction:n.direction}:null}return n===`cone`||n===`torus`||n===`revolution`?hn(e,t):null}function _n(e,t){let n=fn(e,t);return n?{radius:n.radius,isDirect:n.isDirect}:null}function vn(e,t,n){let r=e.uvFromPoint(E(t),n[0],n[1],n[2]);try{return r.size()<2?null:[r.get(0),r.get(1)]}finally{r.delete()}}function yn(e,t,n){let r=e.projectPointOnFace(E(t),n[0],n[1],n[2]);try{return[r.get(0),r.get(1),r.get(2)]}finally{r.delete()}}function bn(e,t,n,r,i){return e.classifyPointOnFace(E(t),n,r).toLowerCase()}function xn(e,t,n,r,i,a){let[o,s,c]=r,[l,u,d]=i,f=!!a,[p,m,h]=a??[1,0,0],g=e.projectEdges(E(n),o,s,c,l,u,d,p,m,h,f),_=n=>n===0?T(`compound`,e.makeCompound(new t.VectorUint32)):T(`compound`,n);return{visible:{outline:_(g.visibleOutline),smooth:_(g.visibleSmooth),sharp:_(g.visibleSharp)},hidden:{outline:_(g.hiddenOutline),smooth:_(g.hiddenSmooth),sharp:_(g.hiddenSharp)}}}function Sn(e,t){return e.getVolume(E(t))}function Cn(e,t){return e.getSurfaceArea(E(t))}function wn(e,t){return e.getLength(E(t))}function Tn(e,t){let n=e.getCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function En(e,t){let n=e.getLinearCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function Dn(e,t){let n=e.getBoundingBox(E(t),!0);return{min:[n.xmin,n.ymin,n.zmin],max:[n.xmax,n.ymax,n.zmax]}}function On(e,t){try{let n=e.getSurfaceCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}catch{return[0,0,0]}}function kn(e,t,n){return{volume:Sn(e,t),area:Cn(e,t),length:n?wn(e,t):0,centerOfMass:Tn(e,t),boundingBox:Dn(e,t)}}function An(e,t){let n=E(t);return{distanceTo(t){return{value:e.distanceBetween(n,E(t)),point1:[0,0,0],point2:[0,0,0]}},dispose:Ne}}var jn=256;function Mn(e,t,n){let r=[],i=e.getSubShapes(n,`vertex`);try{let t=i.size();for(let n=0;n<t;n++){let t=e.vertexPosition(i.get(n));r.push([t.get(0),t.get(1),t.get(2)]),t.delete()}}finally{i.delete()}let a=e.getBoundingBox(n,!0),o=Math.sqrt((a.xmax-a.xmin)**2+(a.ymax-a.ymin)**2+(a.zmax-a.zmin)**2),s=Math.max(o*.01,1e-4),c;try{c=e.tessellate(n,s,.5)}catch{return r}try{let e=c.positionCount;if(e>0){let n=c.getPositionsPtr()>>2,i=t.HEAPF32,a=Math.floor(e/3),o=(a>jn?Math.ceil(a/jn):1)*3;for(let t=0;t<e;t+=o)r.push([i[n+t]??0,i[n+t+1]??0,i[n+t+2]??0])}}finally{c.delete()}return r}function Nn(e,t,n,r){let i=E(n),a=E(r),o=e.distanceBetween(i,a),s=Mn(e,t,i),c=Mn(e,t,a);if(s.length===0||c.length===0)return{value:o,point1:[0,0,0],point2:[0,0,0]};let l=1/0,u=s[0]??[0,0,0],d=c[0]??[0,0,0];for(let e of s)for(let t of c){let n=t[0]-e[0],r=t[1]-e[1],i=t[2]-e[2],a=n*n+r*r+i*i;a<l&&(l=a,u=e,d=t)}return{value:o,point1:u,point2:d}}function Pn(e,t,n,r){let i=e.pointOnSurface(t,n,r),a=[i.get(0),i.get(1),i.get(2)];return i.delete(),a}function Fn(e,t,n,r){let i=e.uvBounds(t),a=i.get(0),o=i.get(1),s=i.get(2),c=i.get(3);i.delete();let l=Math.max(Math.max(o-a,1e-12)*.001,1e-6),u=Math.max(Math.max(c-s,1e-12)*.001,1e-6),d=Math.min(Math.max(n,a+l),o-l),f=Math.min(Math.max(r,s+u),c-u),p=Pn(e,t,d,f),m=Pn(e,t,d+l,f),h=Pn(e,t,d-l,f),g=Pn(e,t,d,f+u),_=Pn(e,t,d,f-u),v=Pn(e,t,d+l,f+u),y=Pn(e,t,d+l,f-u),b=Pn(e,t,d-l,f+u),x=Pn(e,t,d-l,f-u),S=l*l,C=u*u,w=4*l*u;return{Pu:[(m[0]-h[0])/(2*l),(m[1]-h[1])/(2*l),(m[2]-h[2])/(2*l)],Pv:[(g[0]-_[0])/(2*u),(g[1]-_[1])/(2*u),(g[2]-_[2])/(2*u)],Puu:[(m[0]-2*p[0]+h[0])/S,(m[1]-2*p[1]+h[1])/S,(m[2]-2*p[2]+h[2])/S],Pvv:[(g[0]-2*p[0]+_[0])/C,(g[1]-2*p[1]+_[1])/C,(g[2]-2*p[2]+_[2])/C],Puv:[(v[0]-y[0]-b[0]+x[0])/w,(v[1]-y[1]-b[1]+x[1])/w,(v[2]-y[2]-b[2]+x[2])/w]}}function In(e,t,n,r){return Math.abs(e)+Math.abs(t)>=Math.abs(n)+Math.abs(r)?Math.abs(e)+Math.abs(t)<1e-12?[1,0]:[-t,e]:Math.abs(n)+Math.abs(r)<1e-12?[0,1]:[-r,n]}function Ln(e,t,n){let r=e[0]*t[0]+e[1]*n[0],i=e[0]*t[1]+e[1]*n[1],a=e[0]*t[2]+e[1]*n[2],o=Math.sqrt(r*r+i*i+a*a);return o<1e-12?[1,0,0]:[r/o,i/o,a/o]}function Rn(e,t){let n=Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);if(n<1e-12)return{maxDirection:[1,0,0],minDirection:[0,1,0]};let r=e[0]/n,i=e[1]/n,a=e[2]/n,o=r*t[0]+i*t[1]+a*t[2],s=t[0]-o*r,c=t[1]-o*i,l=t[2]-o*a,u=Math.sqrt(s*s+c*c+l*l);if(u<1e-12){let e=Math.abs(r)<.9?[1,0,0]:[0,1,0],t=i*e[2]-a*e[1],n=a*e[0]-r*e[2],o=r*e[1]-i*e[0],s=Math.sqrt(t*t+n*n+o*o)||1;return{maxDirection:[r,i,a],minDirection:[t/s,n/s,o/s]}}return{maxDirection:[r,i,a],minDirection:[s/u,c/u,l/u]}}function zn(e,t,n,r,i,a){let{Pu:o,Pv:s,Puu:c,Pvv:l,Puv:u}=Fn(e,t,n,r),d=o[1]*s[2]-o[2]*s[1],f=o[2]*s[0]-o[0]*s[2],p=o[0]*s[1]-o[1]*s[0],m=Math.sqrt(d*d+f*f+p*p),h=o[0]*o[0]+o[1]*o[1]+o[2]*o[2],g=o[0]*s[0]+o[1]*s[1]+o[2]*s[2],_=s[0]*s[0]+s[1]*s[1]+s[2]*s[2];if(m<1e-12||h*_-g*g<1e-24)return Rn(o,s);let v=(c[0]*d+c[1]*f+c[2]*p)/m,y=(u[0]*d+u[1]*f+u[2]*p)/m,b=(l[0]*d+l[1]*f+l[2]*p)/m,x=h*_-g*g,S=(v*_-y*g)/x,C=(y*_-b*g)/x,w=(y*h-v*g)/x,ee=(b*h-y*g)/x;if(Math.abs(i-a)<1e-9*(Math.abs(i)+Math.abs(a)+1))return Rn(o,s);let te=In(S-i,C,w,ee-i),ne=In(S-a,C,w,ee-a);return{maxDirection:Ln(te,o,s),minDirection:Ln(ne,o,s)}}function Bn(e,t,n,r){let i=E(t),a=e.surfaceCurvature(i,n,r),o=a.get(0),s=a.get(1),c=a.get(2),l=a.get(3);a.delete();let{maxDirection:u,minDirection:d}=zn(e,i,n,r,c,l);return{gaussian:s,mean:o,max:c,min:l,maxDirection:u,minDirection:d}}function Vn(e,t,n,r,i){let a=Ve(r,i),o=Ie(t,r.map(E));try{return D(e,e.fillet(E(n),o,a))}finally{o.delete()}}function Hn(e,t,n,r,i){let a=Ve(r,i),o=Ie(t,r.map(E));try{return D(e,e.chamfer(E(n),o,a))}finally{o.delete()}}function Un(e,t,n,r,i,a){let o=Ie(t,r.map(E));try{return D(e,e.chamferDistAngle(E(n),o,i,a))}finally{o.delete()}}function Wn(e,t,n,r,i,a){let o=Ie(t,r.map(E));try{return D(e,e.shell(E(n),o,i,a??.001))}finally{o.delete()}}function Gn(e,t,n){return D(e,e.thicken(E(t),n,.001))}function Kn(e,t,n,r){return D(e,e.offset(E(t),n,r??1e-6))}function qn(e,t,n){let r=JSON.parse(n);if(r.edgeId!==void 0&&r.startRadius!==void 0&&r.endRadius!==void 0)return D(e,e.filletVariable(E(t),r.edgeId,r.startRadius,r.endRadius));throw Error(`occt-wasm: filletVariable (complex spec) not implemented`)}function Jn(e,t,n,r,i,a){let o=E(t);for(let t of n){let n=(typeof a==`function`?a(t):a)*Math.PI/180;o=e.draft(o,E(t),n,r[0],r[1],r[2])}return D(e,o)}function Yn(e,t,n,r){let i=Ie(t,r.map(E));try{return D(e,e.defeature(E(n),i,.001))}finally{i.delete()}}function Xn(e,t,n,r){let i=0;return r===`intersection`||r===1?i=1:r===`tangent`||r===2?i=2:typeof r==`number`&&(i=r),D(e,e.offsetWire2D(E(t),n,i))}function Zn(e,t){return D(e,e.simplify(E(t)))}function Qn(e,t){return D(e,e.reverseShape(E(t)))}function $n(e,t,n,r){let i=n[0]*r,a=n[1]*r,o=n[2]*r;return D(e,e.extrude(E(t),i,a,o))}function er(e,t,n,r){let i=n.origin,a=n.direction;return D(e,e.revolve(E(t),i.x,i.y,i.z,a.x,a.y,a.z,r))}function tr(e,t,n,r,i,a){let o=i?E(i):0,s=a?E(a):0,c=Ie(t,n.map(E));try{return o||s?D(e,e.loftWithVertices(c,!0,r??!1,o,s)):D(e,e.loft(c,!0,r??!1))}finally{c.delete()}}function nr(e,t,n,r){let i=r?.transitionMode??0;return D(e,e.sweep(E(t),E(n),i))}function rr(e,t,n){return D(e,e.simplePipe(E(t),E(n)))}function ir(e,t,n,r){let i=r?.frenet??!1,a=r?.transitionMode===`round`,o=r?.shellMode??!1,s=D(e,e.sweepPipeShell(E(t),E(n),i,a));if(o){let t=e.getSubShapes(E(s),`wire`);try{return{shape:s,firstShape:t.size()>0?D(e,t.get(0)):s,lastShape:t.size()>1?D(e,t.get(t.size()-1)):s}}finally{t.delete()}}return s}function ar(e,t,n,r){let i=r?.solid??!0,a=r?.ruled??!1,o=r?.startVertex?E(r.startVertex):0,s=r?.endVertex?E(r.endVertex):0,c=Ie(t,n.map(E));try{return o||s?D(e,e.loftWithVertices(c,i,a,o,s)):D(e,e.loft(c,i,a))}finally{c.delete()}}function or(e,t,n,r){let i={__occtWasmLaw:!0,profile:t,length:n,endFactor:r,Trim(e,t,n){return{...i,trimFirst:e,trimLast:t}},delete(){}};return i}function sr(e,t,n,r,i){return D(e,e.revolveVec(E(t),n[0],n[1],n[2],r[0],r[1],r[2],i))}function cr(e,t,n,r,i,a,o){let s=i??10;return D(e,e.draftPrism(E(t),0,0,s,a))}function lr(e){let t=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];for(let n of e)if(n.type===`translate`)t=Be([1,0,0,n.x,0,1,0,n.y,0,0,1,n.z,0,0,0,1],t);else{let e=n.axis??[0,0,1],r=n.center??[0,0,0],i=n.angle*Math.PI/180,a=Math.cos(i),o=Math.sin(i),s=1-a,c=Math.sqrt(e[0]**2+e[1]**2+e[2]**2),[l,u,d]=[e[0]/c,e[1]/c,e[2]/c],f=s*l*l+a,p=s*l*u-o*d,m=s*l*d+o*u,h=s*u*l+o*d,g=s*u*u+a,_=s*u*d-o*l,v=s*d*l-o*u,y=s*d*u+o*l,b=s*d*d+a;t=Be([f,p,m,r[0]-(f*r[0]+p*r[1]+m*r[2]),h,g,_,r[1]-(h*r[0]+g*r[1]+_*r[2]),v,y,b,r[2]-(v*r[0]+y*r[1]+b*r[2]),0,0,0,1],t)}return{handle:{__type:`transform_matrix`,matrix:t,delete:Ne},dispose:Ne}}function ur(e){let t=e,n;return Array.isArray(t)?n=t:typeof t==`object`&&t&&(Array.isArray(t.matrix)?n=t.matrix:Array.isArray(t.elements)&&(n=t.elements)),n&&n.length===16&&(n=n.slice(0,12)),n&&n.length>=12?n:void 0}function dr(e,t,n,r){let i=ur(r);if(i){let r=Re(t,i);try{return D(e,e.transform(E(n),r))}finally{r.delete()}}return T(e.getShapeType(E(n)),e.copy(E(n)))}function fr(e,t,n,r){if(typeof e.located==`function`){let i=ur(r);if(i){let r=Re(t,i);try{return D(e,e.located(E(n),r))}finally{r.delete()}}}return dr(e,t,n,r)}function pr(e,t,n,r,i){return D(e,e.translate(E(t),n,r,i))}function mr(e,t,n,r,i){let a=r??[0,0,1],o=i??[0,0,0];return D(e,e.rotate(E(t),o[0],o[1],o[2],a[0],a[1],a[2],n))}function hr(e,t,n,r){return D(e,e.mirror(E(t),n[0],n[1],n[2],r[0],r[1],r[2]))}function gr(e,t,n,r){return D(e,e.scale(E(t),n[0],n[1],n[2],r))}function _r(e,t,n,r,i,a){let o=Re(t,[r[0],r[1],r[2],i[0],r[3],r[4],r[5],i[1],r[6],r[7],r[8],i[2]]);try{return D(e,e.generalTransform(E(n),o))}finally{o.delete()}}function vr(e,t,n,r,i){let a=e.curvePointAtParam(E(r),i),[o,s,c]=(()=>{try{return[a.get(0),a.get(1),a.get(2)]}finally{a.delete()}})(),l=e.curveTangent(E(r),i),[u,d,f]=(()=>{try{return[l.get(0),l.get(1),l.get(2)]}finally{l.delete()}})(),p,m,h;Math.abs(u)<.9?(p=0,m=f,h=-d):(p=-f,m=0,h=u);let g=Math.sqrt(p*p+m*m+h*h);p/=g,m/=g,h/=g;let _=d*h-f*m,v=f*p-u*h,y=u*m-d*p,b=new t.VectorDouble;b.push_back(p),b.push_back(_),b.push_back(u),b.push_back(o),b.push_back(m),b.push_back(v),b.push_back(d),b.push_back(s),b.push_back(h),b.push_back(y),b.push_back(f),b.push_back(c);try{return D(e,e.transform(E(n),b))}finally{b.delete()}}function yr(e,t,n,r,i){let a=e.linearPattern(E(t),n[0],n[1],n[2],r,i),o=e.getSubShapes(a,`solid`),s=[];try{let e=o.size();for(let t=0;t<e;t++)s.push(T(`solid`,o.get(t)))}finally{o.delete()}if(s.length===0){let t=e.iterShapes(a);try{let n=t.size();for(let r=0;r<n;r++)s.push(D(e,t.get(r)))}finally{t.delete()}}return e.release(a),s}function br(e,t,n,r,i,a){let o=e.circularPattern(E(t),n[0],n[1],n[2],r[0],r[1],r[2],i,a),s=e.getSubShapes(o,`solid`),c=[];try{let e=s.size();for(let t=0;t<e;t++)c.push(T(`solid`,s.get(t)))}finally{s.delete()}if(c.length===0){let t=e.iterShapes(o);try{let n=t.size();for(let r=0;r<n;r++)c.push(D(e,t.get(r)))}finally{t.delete()}}return e.release(o),c}function xr(e,t){return t.map(t=>{switch(t.type){case`translate`:return pr(e,t.shape,t.x,t.y,t.z);case`rotate`:return mr(e,t.shape,t.angle,t.axis,t.center);case`scale`:return gr(e,t.shape,t.center,t.factor);case`mirror`:return hr(e,t.shape,t.origin,t.normal);default:throw Error(`occt-wasm: transformBatch unknown type`)}})}function Sr(e,t){if(t===0)return{min:[0,0,0],max:[0,0,0]};let n=1/0,r=1/0,i=1/0,a=-1/0,o=-1/0,s=-1/0;for(let c=0;c<t;c++){let t=c*3,l=e[t]??0,u=e[t+1]??0,d=e[t+2]??0;l<n&&(n=l),u<r&&(r=u),d<i&&(i=d),l>a&&(a=l),u>o&&(o=u),d>s&&(s=d)}return{min:[n,r,i],max:[a,o,s]}}function Cr(e,t,n,r,i,a,o,s){return{asset:{version:`2.0`,generator:`brepjs occt-wasm`},scene:0,scenes:[{nodes:[0]}],nodes:[{mesh:0}],meshes:[{primitives:[{attributes:{POSITION:0,NORMAL:1},indices:2,mode:4}]}],buffers:[{byteLength:o}],bufferViews:[{buffer:0,byteOffset:0,byteLength:r,target:34962},{buffer:0,byteOffset:r,byteLength:i,target:34962},{buffer:0,byteOffset:r+i,byteLength:a,target:34963}],accessors:[{bufferView:0,componentType:5126,count:e,type:`VEC3`,min:s.min,max:s.max},{bufferView:1,componentType:5126,count:t,type:`VEC3`},{bufferView:2,componentType:5125,count:n,type:`SCALAR`}]}}function wr(e,t,n){if(n.length===1)return e.exportStep(E(n[0]));let r=t(n);return e.exportStep(E(r))}function Tr(e,t,n,r=De,i=Oe){let{vertices:a,triangles:o}=e(t,{tolerance:r,angularTolerance:i,skipNormals:!0});return n?je(a,o):Me(a,o)}function Er(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(t);return[D(e,e.importStep(n))]}function Dr(e,t,n){let r=typeof n==`string`?new TextEncoder().encode(n):new Uint8Array(n),i=t;if(i.FS)i.FS.writeFile(`/tmp/import.stl`,r);else{let t=Array.from(r,e=>String.fromCharCode(e)).join(``);return D(e,e.importStl(t))}return D(e,e.importStl(``))}function Or(e,t,n){if(n.length===1)return e.exportIges(E(n[0]));let r=t(n);return e.exportIges(E(r))}function kr(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(t);return[D(e,e.importIges(n))]}function Ar(e,t,n,r){if(n.length===0)return``;let i=Ir(e,t,n);try{return Lr(e,i)}finally{i.delete()}}function jr(e,t,n){let r=e(t,{tolerance:n,angularTolerance:.5,skipNormals:!1}),i=r.vertices,a=r.normals,o=r.triangles,s=i.length/3,c=a.length/3,l=o.length,u=i.byteLength,d=a.byteLength,f=o.byteLength,p=u+d+f,m=p+(4-p%4)%4,h=Cr(s,c,l,u,d,f,m,Sr(i,s)),g=new TextEncoder().encode(JSON.stringify(h)),_=g.byteLength+(4-g.byteLength%4)%4,v=20+_+8+m,y=new ArrayBuffer(v),b=new DataView(y);b.setUint32(0,1179937895,!0),b.setUint32(4,2,!0),b.setUint32(8,v,!0),b.setUint32(12,_,!0),b.setUint32(16,1313821514,!0);let x=new Uint8Array(y,20,_);x.set(g);for(let e=g.byteLength;e<_;e++)x[e]=32;let S=20+_;b.setUint32(S,m,!0),b.setUint32(S+4,5130562,!0);let C=S+8;return new Uint8Array(y,C,u).set(new Uint8Array(i.buffer,i.byteOffset,u)),new Uint8Array(y,C+u,d).set(new Uint8Array(a.buffer,a.byteOffset,d)),new Uint8Array(y,C+u+d,f).set(new Uint8Array(o.buffer,o.byteOffset,f)),y}function Mr(e,t,n){let r=e(t,{tolerance:n,angularTolerance:.5,skipNormals:!1}),i=r.vertices,a=r.normals,o=r.triangles,s=[`# brepjs OBJ export`],c=i.length/3;for(let e=0;e<c;e++){let t=e*3;s.push(`v ${i[t]??0} ${i[t+1]??0} ${i[t+2]??0}`)}let l=a.length/3;for(let e=0;e<l;e++){let t=e*3;s.push(`vn ${a[t]??0} ${a[t+1]??0} ${a[t+2]??0}`)}let u=e=>{let t=(o[e]??0)+1,n=(o[e+1]??0)+1,r=(o[e+2]??0)+1;s.push(`f ${t}//${t} ${n}//${n} ${r}//${r}`)};if(r.faceGroups.length>0)for(let e of r.faceGroups){s.push(`g face_${e.faceHash}`);let t=e.count/3;for(let n=0;n<t;n++)u(e.start+n*3)}else{let e=o.length/3;for(let t=0;t<e;t++)u(t*3)}return new TextEncoder().encode(s.join(`
|
|
3
|
+
`}var Ne=()=>{};function T(e,t){return{__occtWasm:!0,type:e,id:t,delete:Ne,HashCode(e){return t%e},IsNull(){return!1}}}function Pe(e){return typeof e==`object`&&!!e&&e.__occtWasm}function E(e){if(Pe(e))return e.id;if(typeof e==`number`)return e;throw Error(`occt-wasm: expected an OcctWasmHandle or number, got `+typeof e)}function Fe(e){switch(e.toLowerCase()){case`vertex`:return`vertex`;case`edge`:return`edge`;case`wire`:return`wire`;case`face`:return`face`;case`shell`:return`shell`;case`solid`:return`solid`;case`compsolid`:return`compsolid`;case`compound`:return`compound`;default:return`compound`}}function D(e,t){return T(Fe(e.getShapeType(t)),t)}function Ie(e,t){let n=new e.VectorUint32;for(let e of t)n.push_back(e);return n}function Le(e,t){let n=new e.VectorInt;for(let e of t)n.push_back(e);return n}function Re(e,t){let n=new e.VectorDouble;for(let e of t)n.push_back(e);return n}function ze(e){let t=[],n=e.size();for(let r=0;r<n;r++)t.push(e.get(r));return t}function Be(e,t){let n=Array(16).fill(0);for(let r=0;r<4;r++)for(let i=0;i<4;i++)for(let a=0;a<4;a++)n[r*4+i]=n[r*4+i]+e[r*4+a]*t[a*4+i];return n}function Ve(e,t){if(typeof t==`number`)return t;if(Array.isArray(t))return t[0];if(e.length===0)throw Error(`occt-wasm: no edges provided`);let n=t(e[0]);return typeof n==`number`?n:n[0]}function He(e,t,n){let[r,i,a]=n,o=Math.sqrt(r*r+i*i+a*a);if(o<1e-10)return t;let s=r/o,c=i/o,l=a/o;if(Math.abs(l-1)<1e-10)return t;if(Math.abs(l+1)<1e-10)return e.rotate(t,0,0,0,1,0,0,Math.PI);let u=-c,d=s,f=Math.sqrt(u*u+d*d);if(f<1e-10)return t;let p=Math.acos(Math.max(-1,Math.min(1,l)));return e.rotate(t,0,0,0,u/f,d/f,0,p)}function Ue(e,t){return new Proxy(e,{get(e,n,r){let i=Reflect.get(e,n,r);return typeof i==`function`?function(...n){try{return i.apply(e,n)}catch(e){let n=WebAssembly.Exception;if(n&&e instanceof n)try{let[,n]=t.getExceptionMessage(e);throw Error(n,{cause:e})}catch(e){if(e instanceof Error&&!(e instanceof n))throw e}throw e}}:i}})}function We(e,t){let n=function(){return T(`compound`,t.makeNullShape())};return Object.assign(Object.create(e),{TopoDS_Solid:n,TopoDS_Face:n,TopoDS_Shape:n,TopoDS_Wire:n,TopoDS_Edge:n,TopoDS_Vertex:n,TopoDS_Shell:n,TopoDS_Compound:n,gp_Pnt_3:function(e,n,r){return T(`vertex`,t.makeVertex(e,n,r))},BRepBuilderAPI_MakeEdge_3:function(e,n){let r=e,i=n,a=t.vertexPosition(r.id),o=t.vertexPosition(i.id),s=t.makeLineEdge(a.get(0),a.get(1),a.get(2),o.get(0),o.get(1),o.get(2));return a.delete(),o.delete(),{Edge:()=>T(`edge`,s),delete(){}}}})}function Ge(e,t){let n=E(t),r=e.getSubShapes(n,`solid`);try{if(r.size()>1){let t=e.fuseAll(r);return{id:t,dispose:()=>{e.release(t)}}}return{id:n,dispose:()=>{}}}finally{for(let t=0,i=r.size();t<i;t++){let i=r.get(t);i!==n&&e.release(i)}r.delete()}}function Ke(e,t,n,r){return D(e,e.fuse(E(t),E(n)))}function qe(e,t,n,r){let i=Ge(e,n);try{return D(e,e.cut(E(t),i.id))}finally{i.dispose()}}function Je(e,t,n,r){let i=Ge(e,n);try{return D(e,e.intersect(E(t),i.id))}finally{i.dispose()}}function Ye(e,t,n,r){return D(e,e.section(E(t),E(n)))}function Xe(e,t,n,r){let i=Ie(t,n.map(E));try{return D(e,e.fuseAll(i))}finally{i.delete()}}function Ze(e,t,n,r,i){let a=Ie(t,r.map(E));try{return D(e,e.cutAll(E(n),a))}finally{a.delete()}}function Qe(e,t,n,r){let i=Ie(t,r.map(E));try{return D(e,e.split(E(n),i))}finally{i.delete()}}function $e(e,t,n,r){let i=[];return e.isNull(E(t))&&i.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),e.isNull(E(n))&&i.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is null`}),i.length===0&&!e.isValid(E(t))&&i.push({operand:`base`,issue:`not-valid`,message:`Base shape is not valid`}),i.length===0&&!e.isValid(E(n))&&i.push({operand:`tool`,issue:`not-valid`,message:`Tool shape is not valid`}),{valid:i.length===0,issues:i}}function et(e,t,n,r,i,a){throw Error(`occt-wasm: meshBoolean is not supported (use brepkit for mesh booleans)`)}function tt(e,t,n){return n!==t&&e.release(t),n}function nt(e,t,n,r){return T(`solid`,e.makeBox(t,n,r))}function rt(e,t,n,r,i){let a=e.makeCylinder(t,n);return i&&(a=tt(e,a,He(e,a,i))),r&&(r[0]!==0||r[1]!==0||r[2]!==0)&&(a=tt(e,a,e.translate(a,r[0],r[1],r[2]))),T(`solid`,a)}function it(e,t,n){let r=e.makeSphere(t);return n&&(n[0]!==0||n[1]!==0||n[2]!==0)&&(r=tt(e,r,e.translate(r,n[0],n[1],n[2]))),T(`solid`,r)}function at(e,t,n,r,i,a){let o=e.makeCone(t,n,r);return a&&(o=tt(e,o,He(e,o,a))),i&&(i[0]!==0||i[1]!==0||i[2]!==0)&&(o=tt(e,o,e.translate(o,i[0],i[1],i[2]))),T(`solid`,o)}function ot(e,t,n,r,i){let a=e.makeTorus(t,n);return i&&(a=tt(e,a,He(e,a,i))),r&&(r[0]!==0||r[1]!==0||r[2]!==0)&&(a=tt(e,a,e.translate(a,r[0],r[1],r[2]))),T(`solid`,a)}function st(e,t,n,r){return T(`solid`,e.makeEllipsoid(t,n,r))}function ct(e,t,n){return T(`solid`,e.makeBoxFromCorners(t[0],t[1],t[2],n[0],n[1],n[2]))}function lt(e,t,n){return T(`face`,e.makeRectangle(t,n))}function ut(e,t,n){let r=e.getSubShapes(E(t),n),i=[];try{let e=r.size();for(let t=0;t<e;t++)i.push(T(n,r.get(t)))}finally{r.delete()}return i}function dt(e,t){return Pe(t)?t.type:Fe(e.getShapeType(E(t)))}function ft(e,t,n){return e.isSame(E(t),E(n))}function pt(e,t,n){return e.isEqual(E(t),E(n))}function mt(e,t,n){return n?T(n,e.downcast(E(t),n)):t}function ht(e,t){return D(e,e.copy(E(t)))}function gt(e,t,n){return e.hashCode(E(t),n)}function _t(e,t){return e.isNull(E(t))}function vt(e,t){return e.shapeOrientation(E(t)).toLowerCase()}function yt(e,n){let r=e.edgeToFaceMap(E(n),1e6),i;try{i=ze(r)}finally{r.delete()}let a={};for(let e=0;e+1<i.length;e+=2){let n=t(i,e),r=t(i,e+1);a[n]||(a[n]=[]),a[n].push(r)}return JSON.stringify(a)}function bt(e,t,n){return e.subShapeCount(E(t),n)}function xt(e,t,n,r){let i=e.subShapeHashes(E(t),n,r);try{return ze(i)}finally{i.delete()}}function St(e,t,n){let r=e.sharedEdges(E(t),E(n)),i=[];try{let e=r.size();for(let t=0;t<e;t++)i.push(T(`edge`,r.get(t)))}finally{r.delete()}return i}function Ct(e,t,n){let r=e.adjacentFaces(E(t),E(n)),i=[];try{let e=r.size();for(let t=0;t<e;t++)i.push(T(`face`,r.get(t)))}finally{r.delete()}return i}function wt(e,t,n,r){let i=Ie(t,n.map(E));try{return D(e,e.sew(i,r??1e-6))}finally{i.delete()}}var Tt=1e-6;function Et(e,t){return e.isValid(E(t))}function Dt(e,t){let n=e.healSolid(E(t),Tt);return n===0?null:D(e,n)}function Ot(e,t){return D(e,e.healFace(E(t),Tt))}function kt(e,t,n){return D(e,e.healWire(E(t),Tt))}function At(e,t,n){return 0}function jt(e,t,n){return e.removeDegenerateEdges(E(t)),0}function Mt(e,t){return e.fixFaceOrientations(E(t)),0}function Nt(e,t){return D(e,e.fixShape(E(t)))}function Pt(e,t,n,r){let i=e.tessellate(E(n),r.tolerance,r.angularTolerance);try{let e=i.positionCount,n=i.normalCount,a=i.indexCount,o=i.getPositionsPtr()>>2,s=i.getNormalsPtr()>>2,c=i.getIndicesPtr()>>2,l=new Float32Array(e);for(let n=0;n<e;n++)l[n]=t.HEAPF32[o+n]??0;let u=new Float32Array(n);if(!r.skipNormals)for(let e=0;e<n;e++)u[e]=t.HEAPF32[s+e]??0;let d=i.uvCount,f=new Float32Array(r.includeUVs?d:0);if(r.includeUVs&&d>0){let e=i.getUvsPtr()>>2;for(let n=0;n<d;n++)f[n]=t.HEAPF32[e+n]??0}let p=new Uint32Array(a);for(let e=0;e<a;e++)p[e]=t.HEAPU32[c+e]??0;let m=[],h=i.faceGroupCount;if(h>0){let e=i.getFaceGroupsPtr()>>2;for(let n=0;n<h;n+=3)m.push({start:t.HEAP32[e+n]??0,count:t.HEAP32[e+n+1]??0,faceHash:t.HEAP32[e+n+2]??0})}return{vertices:l,normals:r.skipNormals?new Float32Array:u,triangles:p,uvs:f,faceGroups:m}}finally{i.delete()}}function Ft(e,t,n,r){for(let i=0;i+1<n;i++){let n=t+i*3,a=e[n]??0,o=e[n+1]??0,s=e[n+2]??0,c=e[n+3]??0,l=e[n+4]??0,u=e[n+5]??0;a===c&&o===l&&s===u||r.push(a,o,s,c,l,u)}}function It(e,t,n,r,i){let a=e.wireframe(E(n),r);try{let e=t.HEAPF32,n=a.getPointsPtr()>>2,r=[],i=[],o=a.edgeGroupCount,s=o>0?a.getEdgeGroupsPtr()>>2:0;for(let a=0;a<o;a+=3){let o=n+(t.HEAP32[s+a]??0),c=Math.floor((t.HEAP32[s+a+1]??0)/3),l=r.length/3;Ft(e,o,c,r),i.push({start:l,count:r.length/3-l,edgeHash:t.HEAP32[s+a+2]??0})}return{lines:new Float32Array(r),edgeGroups:i}}finally{a.delete()}}function Lt(e,t){return e.hasTriangulation(E(t))}function Rt(e,t,n,r){e.meshShape(E(t),n,r).delete()}var zt={line:`LINE`,circle:`CIRCLE`,ellipse:`ELLIPSE`,hyperbola:`HYPERBOLA`,parabola:`PARABOLA`,bezier:`BEZIER_CURVE`,bspline:`BSPLINE_CURVE`,offset:`OFFSET_CURVE`,other:`OTHER_CURVE`};function Bt(e,t){let n=e.curveType(E(t));return zt[n]??n.toUpperCase()}function Vt(e,t){let n=e.curveParameters(E(t));try{return[n.get(0),n.get(1)]}finally{n.delete()}}function Ht(e,t,n){let r=e.curvePointAtParam(E(t),n);try{return[r.get(0),r.get(1),r.get(2)]}finally{r.delete()}}function Ut(e,t,n){let r=e.curveTangent(E(t),n);try{let i=e.curvePointAtParam(E(t),n);try{return{point:[i.get(0),i.get(1),i.get(2)],tangent:[r.get(0),r.get(1),r.get(2)]}}finally{i.delete()}}finally{r.delete()}}function Wt(e,t){return e.curveIsClosed(E(t))}function Gt(e,t){return e.curveIsPeriodic(E(t))}function Kt(e,t){return 2*Math.PI}function qt(e,t,n,r){let i=[];for(let e of n)i.push(e[0],e[1],e[2]);let a=Re(t,i);try{return T(`edge`,e.interpolatePoints(a,r?.periodic??!1))}finally{a.delete()}}function Jt(e,t,n,r){let i=[];for(let e of n)i.push(e[0],e[1],e[2]);let a=Re(t,i);try{return T(`edge`,e.approximatePoints(a,r?.tolerance??.001))}finally{a.delete()}}function Yt(e,t,n){return T(`edge`,e.curveDegreeElevate(E(t),n))}function Xt(e,t,n,r){return T(`edge`,e.curveKnotInsert(E(t),n,r))}function Zt(e,t,n,r){return T(`edge`,e.curveKnotRemove(E(t),n,r))}function Qt(e,t,n){let r=e.curveSplit(E(t),n);try{return[T(`edge`,r.get(0)),T(`edge`,r.get(1))]}finally{r.delete()}}function $t(e,t){let n=en(e,t);if(!n||n.poles.length<2)return null;let r=n.poles[n.poles.length-2];return r?[r[0],r[1],r[2]]:null}function en(e,t){try{let n=e.getNurbsCurveData(E(t));try{let e=n.poles.size()/3,t=[];for(let r=0;r<e;r++)t.push([n.poles.get(r*3),n.poles.get(r*3+1),n.poles.get(r*3+2)]);let r=[];for(let e=0;e<n.knots.size();e++)r.push(n.knots.get(e));let i=[];for(let e=0;e<n.multiplicities.size();e++)i.push(n.multiplicities.get(e));let a=[];if(n.rational)for(let e=0;e<n.weights.size();e++)a.push(n.weights.get(e));else for(let t=0;t<e;t++)a.push(1);return{degree:n.degree,poles:t,weights:a,knots:r,multiplicities:i,isPeriodic:n.periodic,isRational:n.rational}}finally{n.delete()}}catch{return null}}function tn(e,t){let n=e.vertexPosition(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function nn(e,t){return e.surfaceType(E(t)).toLowerCase()}function rn(e,t){let n=e.uvBounds(E(t));try{return{uMin:n.get(0),uMax:n.get(1),vMin:n.get(2),vMax:n.get(3)}}finally{n.delete()}}function an(e,t){return T(`wire`,e.outerWire(E(t)))}function on(e,t,n,r){let i=e.surfaceNormal(E(t),n,r);try{return[i.get(0),i.get(1),i.get(2)]}finally{i.delete()}}function sn(e,t,n,r){let i=e.pointOnSurface(E(t),n,r);try{return[i.get(0),i.get(1),i.get(2)]}finally{i.delete()}}var cn=(e,t)=>[e[0]-t[0],e[1]-t[1],e[2]-t[2]],ln=(e,t)=>e[0]*t[0]+e[1]*t[1]+e[2]*t[2],un=e=>Math.hypot(e[0],e[1],e[2]),dn=(e,t)=>[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]];function fn(e,t){if(nn(e,t)!==`cylinder`)return null;let n=rn(e,t),r=.5*(n.vMin+n.vMax),i=n.uMin+.25*(n.uMax-n.uMin),a=n.uMin+.5*(n.uMax-n.uMin),o=on(e,t,i,r),s=on(e,t,a,r),c=sn(e,t,i,r),l=sn(e,t,a,r),u=dn(o,s),d=un(u),f=un(cn(o,s));if(d<1e-9||f<1e-9)return null;let p=[u[0]/d,u[1]/d,u[2]/d],m=un(cn(c,l))/f,h=[c[0]-m*o[0],c[1]-m*o[1],c[2]-m*o[2]],g=un(cn(h,[l[0]-m*s[0],l[1]-m*s[1],l[2]-m*s[2]]))<1e-6?h:[c[0]+m*o[0],c[1]+m*o[1],c[2]+m*o[2]];return{origin:g,direction:p,radius:m,isDirect:(vt(e,t)===`reversed`?-1:1)*ln(o,cn(c,g))>0}}function pn(e,t,n){let r=cn(t,e),i=cn(n,e),a=dn(r,i),o=ln(a,a);if(o<1e-18)return null;let s=ln(r,r),c=ln(i,i),l=dn([s*i[0]-c*r[0],s*i[1]-c*r[1],s*i[2]-c*r[2]],a),u=1/(2*o);return[e[0]+l[0]*u,e[1]+l[1]*u,e[2]+l[2]*u]}function mn(e,t,n,r,i){return pn(sn(e,t,n+.1*(r-n),i),sn(e,t,n+.45*(r-n),i),sn(e,t,n+.8*(r-n),i))}function hn(e,t){let n=rn(e,t),r=[.2,.5,.8].map(r=>mn(e,t,n.uMin,n.uMax,n.vMin+r*(n.vMax-n.vMin))).filter(e=>e!==null);if(r.length<2)return null;let i=null,a=1e-9;for(let e=0;e<r.length;e++)for(let t=e+1;t<r.length;t++){let n=r[e],o=r[t];if(!n||!o)continue;let s=cn(o,n),c=un(s);c>a&&(a=c,i={origin:n,direction:[s[0]/c,s[1]/c,s[2]/c]})}return i}function gn(e,t){let n=nn(e,t);if(n===`cylinder`){let n=fn(e,t);return n?{origin:n.origin,direction:n.direction}:null}return n===`cone`||n===`torus`||n===`revolution`?hn(e,t):null}function _n(e,t){let n=fn(e,t);return n?{radius:n.radius,isDirect:n.isDirect}:null}function vn(e,t,n){let r=e.uvFromPoint(E(t),n[0],n[1],n[2]);try{return r.size()<2?null:[r.get(0),r.get(1)]}finally{r.delete()}}function yn(e,t,n){let r=e.projectPointOnFace(E(t),n[0],n[1],n[2]);try{return[r.get(0),r.get(1),r.get(2)]}finally{r.delete()}}function bn(e,t,n,r,i){return e.classifyPointOnFace(E(t),n,r).toLowerCase()}function xn(e,t,n,r,i,a){let[o,s,c]=r,[l,u,d]=i,f=!!a,[p,m,h]=a??[1,0,0],g=e.projectEdges(E(n),o,s,c,l,u,d,p,m,h,f),_=n=>n===0?T(`compound`,e.makeCompound(new t.VectorUint32)):T(`compound`,n);return{visible:{outline:_(g.visibleOutline),smooth:_(g.visibleSmooth),sharp:_(g.visibleSharp)},hidden:{outline:_(g.hiddenOutline),smooth:_(g.hiddenSmooth),sharp:_(g.hiddenSharp)}}}function Sn(e,t){return e.getVolume(E(t))}function Cn(e,t){return e.getSurfaceArea(E(t))}function wn(e,t){return e.getLength(E(t))}function Tn(e,t){let n=e.getCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function En(e,t){let n=e.getLinearCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}function Dn(e,t){let n=e.getBoundingBox(E(t),!0);return{min:[n.xmin,n.ymin,n.zmin],max:[n.xmax,n.ymax,n.zmax]}}function On(e,t){try{let n=e.getSurfaceCenterOfMass(E(t));try{return[n.get(0),n.get(1),n.get(2)]}finally{n.delete()}}catch{return[0,0,0]}}function kn(e,t,n){return{volume:Sn(e,t),area:Cn(e,t),length:n?wn(e,t):0,centerOfMass:Tn(e,t),boundingBox:Dn(e,t)}}function An(e,t){let n=E(t);return{distanceTo(t){return{value:e.distanceBetween(n,E(t)),point1:[0,0,0],point2:[0,0,0]}},dispose:Ne}}var jn=256;function Mn(e,t,n){let r=[],i=e.getSubShapes(n,`vertex`);try{let t=i.size();for(let n=0;n<t;n++){let t=e.vertexPosition(i.get(n));r.push([t.get(0),t.get(1),t.get(2)]),t.delete()}}finally{i.delete()}let a=e.getBoundingBox(n,!0),o=Math.sqrt((a.xmax-a.xmin)**2+(a.ymax-a.ymin)**2+(a.zmax-a.zmin)**2),s=Math.max(o*.01,1e-4),c;try{c=e.tessellate(n,s,.5)}catch{return r}try{let e=c.positionCount;if(e>0){let n=c.getPositionsPtr()>>2,i=t.HEAPF32,a=Math.floor(e/3),o=(a>jn?Math.ceil(a/jn):1)*3;for(let t=0;t<e;t+=o)r.push([i[n+t]??0,i[n+t+1]??0,i[n+t+2]??0])}}finally{c.delete()}return r}function Nn(e,t,n,r){let i=E(n),a=E(r),o=e.distanceBetween(i,a),s=Mn(e,t,i),c=Mn(e,t,a);if(s.length===0||c.length===0)return{value:o,point1:[0,0,0],point2:[0,0,0]};let l=1/0,u=s[0]??[0,0,0],d=c[0]??[0,0,0];for(let e of s)for(let t of c){let n=t[0]-e[0],r=t[1]-e[1],i=t[2]-e[2],a=n*n+r*r+i*i;a<l&&(l=a,u=e,d=t)}return{value:o,point1:u,point2:d}}function Pn(e,t,n,r){let i=e.pointOnSurface(t,n,r),a=[i.get(0),i.get(1),i.get(2)];return i.delete(),a}function Fn(e,t,n,r){let i=e.uvBounds(t),a=i.get(0),o=i.get(1),s=i.get(2),c=i.get(3);i.delete();let l=Math.max(Math.max(o-a,1e-12)*.001,1e-6),u=Math.max(Math.max(c-s,1e-12)*.001,1e-6),d=Math.min(Math.max(n,a+l),o-l),f=Math.min(Math.max(r,s+u),c-u),p=Pn(e,t,d,f),m=Pn(e,t,d+l,f),h=Pn(e,t,d-l,f),g=Pn(e,t,d,f+u),_=Pn(e,t,d,f-u),v=Pn(e,t,d+l,f+u),y=Pn(e,t,d+l,f-u),b=Pn(e,t,d-l,f+u),x=Pn(e,t,d-l,f-u),S=l*l,C=u*u,w=4*l*u;return{Pu:[(m[0]-h[0])/(2*l),(m[1]-h[1])/(2*l),(m[2]-h[2])/(2*l)],Pv:[(g[0]-_[0])/(2*u),(g[1]-_[1])/(2*u),(g[2]-_[2])/(2*u)],Puu:[(m[0]-2*p[0]+h[0])/S,(m[1]-2*p[1]+h[1])/S,(m[2]-2*p[2]+h[2])/S],Pvv:[(g[0]-2*p[0]+_[0])/C,(g[1]-2*p[1]+_[1])/C,(g[2]-2*p[2]+_[2])/C],Puv:[(v[0]-y[0]-b[0]+x[0])/w,(v[1]-y[1]-b[1]+x[1])/w,(v[2]-y[2]-b[2]+x[2])/w]}}function In(e,t,n,r){return Math.abs(e)+Math.abs(t)>=Math.abs(n)+Math.abs(r)?Math.abs(e)+Math.abs(t)<1e-12?[1,0]:[-t,e]:Math.abs(n)+Math.abs(r)<1e-12?[0,1]:[-r,n]}function Ln(e,t,n){let r=e[0]*t[0]+e[1]*n[0],i=e[0]*t[1]+e[1]*n[1],a=e[0]*t[2]+e[1]*n[2],o=Math.sqrt(r*r+i*i+a*a);return o<1e-12?[1,0,0]:[r/o,i/o,a/o]}function Rn(e,t){let n=Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);if(n<1e-12)return{maxDirection:[1,0,0],minDirection:[0,1,0]};let r=e[0]/n,i=e[1]/n,a=e[2]/n,o=r*t[0]+i*t[1]+a*t[2],s=t[0]-o*r,c=t[1]-o*i,l=t[2]-o*a,u=Math.sqrt(s*s+c*c+l*l);if(u<1e-12){let e=Math.abs(r)<.9?[1,0,0]:[0,1,0],t=i*e[2]-a*e[1],n=a*e[0]-r*e[2],o=r*e[1]-i*e[0],s=Math.sqrt(t*t+n*n+o*o)||1;return{maxDirection:[r,i,a],minDirection:[t/s,n/s,o/s]}}return{maxDirection:[r,i,a],minDirection:[s/u,c/u,l/u]}}function zn(e,t,n,r,i,a){let{Pu:o,Pv:s,Puu:c,Pvv:l,Puv:u}=Fn(e,t,n,r),d=o[1]*s[2]-o[2]*s[1],f=o[2]*s[0]-o[0]*s[2],p=o[0]*s[1]-o[1]*s[0],m=Math.sqrt(d*d+f*f+p*p),h=o[0]*o[0]+o[1]*o[1]+o[2]*o[2],g=o[0]*s[0]+o[1]*s[1]+o[2]*s[2],_=s[0]*s[0]+s[1]*s[1]+s[2]*s[2];if(m<1e-12||h*_-g*g<1e-24)return Rn(o,s);let v=(c[0]*d+c[1]*f+c[2]*p)/m,y=(u[0]*d+u[1]*f+u[2]*p)/m,b=(l[0]*d+l[1]*f+l[2]*p)/m,x=h*_-g*g,S=(v*_-y*g)/x,C=(y*_-b*g)/x,w=(y*h-v*g)/x,ee=(b*h-y*g)/x;if(Math.abs(i-a)<1e-9*(Math.abs(i)+Math.abs(a)+1))return Rn(o,s);let te=In(S-i,C,w,ee-i),ne=In(S-a,C,w,ee-a);return{maxDirection:Ln(te,o,s),minDirection:Ln(ne,o,s)}}function Bn(e,t,n,r){let i=E(t),a=e.surfaceCurvature(i,n,r),o=a.get(0),s=a.get(1),c=a.get(2),l=a.get(3);a.delete();let{maxDirection:u,minDirection:d}=zn(e,i,n,r,c,l);return{gaussian:s,mean:o,max:c,min:l,maxDirection:u,minDirection:d}}var Vn=2147483647;function Hn(e,t,n,r,i){let a=Ve(r,i),o=Ie(t,r.map(E));try{return D(e,e.fillet(E(n),o,a))}finally{o.delete()}}function Un(e,t,n,r,i){let a=Ve(r,i),o=Ie(t,r.map(E));try{return D(e,e.chamfer(E(n),o,a))}finally{o.delete()}}function Wn(e,t,n,r,i,a){let o=Ie(t,r.map(E));try{return D(e,e.chamferDistAngle(E(n),o,i,a))}finally{o.delete()}}function Gn(e,t,n,r,i,a){let o=Ie(t,r.map(E));try{return D(e,e.shell(E(n),o,i,a??.001))}finally{o.delete()}}function Kn(e,t,n){return D(e,e.thicken(E(t),n,.001))}function qn(e,t,n,r){return D(e,e.offset(E(t),n,r??1e-6))}function Jn(e,t,n,r,i){let a=e.filletVariable(t,n,r,i),o=!0;try{let t=e.getSubShapes(a,`solid`);try{let n=t.size()===1?t.get(0):-1;for(let r=0,i=t.size();r<i;r++){let i=t.get(r);i!==n&&e.release(i)}return n===-1?(o=!1,D(e,a)):D(e,n)}finally{t.delete()}}finally{o&&e.release(a)}}function Yn(e,t,n){let r=JSON.parse(n);if(r.edgeId!==void 0&&r.startRadius!==void 0&&r.endRadius!==void 0)return Jn(e,E(t),r.edgeId,r.startRadius,r.endRadius);if(r.edge!==void 0&&Array.isArray(r.radii)&&r.radii.length>0){let n=r.radii;if(n.length>2)throw new c(`occt-wasm: filletVariable supports only a linear (<=2-point) radius profile; a multi-point variable radius requires the brepkit kernel`);let i=n[0].radius,a=n[n.length-1].radius,o=E(t),s=e.getSubShapes(o,`edge`),l=-1;try{for(let t=0,n=s.size();t<n;t++){let n=s.get(t);if(e.hashCode(n,Vn)===r.edge){l=n;break}}}finally{for(let t=0,n=s.size();t<n;t++){let n=s.get(t);n!==l&&e.release(n)}s.delete()}if(l===-1)throw new c(`occt-wasm: filletVariable: target edge not found on the shape`);try{return Jn(e,o,l,i,a)}finally{e.release(l)}}throw new c(`occt-wasm: filletVariable: unrecognized spec`)}function Xn(e,t,n,r,i,a){let o=E(t);for(let t of n){let n=(typeof a==`function`?a(t):a)*Math.PI/180;o=e.draft(o,E(t),n,r[0],r[1],r[2])}return D(e,o)}function Zn(e,t,n,r){let i=Ie(t,r.map(E));try{return D(e,e.defeature(E(n),i,.001))}finally{i.delete()}}function Qn(e,t,n,r){let i=0;return r===`intersection`||r===1?i=1:r===`tangent`||r===2?i=2:typeof r==`number`&&(i=r),D(e,e.offsetWire2D(E(t),n,i))}function $n(e,t){return D(e,e.simplify(E(t)))}function er(e,t){return D(e,e.reverseShape(E(t)))}function tr(e,t,n,r){let i=n[0]*r,a=n[1]*r,o=n[2]*r;return D(e,e.extrude(E(t),i,a,o))}function nr(e,t,n,r){let i=n.origin,a=n.direction;return D(e,e.revolve(E(t),i.x,i.y,i.z,a.x,a.y,a.z,r))}function rr(e,t,n,r,i,a){let o=i?E(i):0,s=a?E(a):0,c=Ie(t,n.map(E));try{return o||s?D(e,e.loftWithVertices(c,!0,r??!1,o,s)):D(e,e.loft(c,!0,r??!1))}finally{c.delete()}}function ir(e,t,n,r){let i=r?.transitionMode??0;return D(e,e.sweep(E(t),E(n),i))}function ar(e,t,n){return D(e,e.simplePipe(E(t),E(n)))}function or(e,t,n,r){let i=r?.frenet??!1,a=r?.transitionMode===`round`,o=r?.shellMode??!1,s=D(e,e.sweepPipeShell(E(t),E(n),i,a));if(o){let t=e.getSubShapes(E(s),`wire`);try{return{shape:s,firstShape:t.size()>0?D(e,t.get(0)):s,lastShape:t.size()>1?D(e,t.get(t.size()-1)):s}}finally{t.delete()}}return s}function sr(e,t,n,r){let i=r?.solid??!0,a=r?.ruled??!1,o=r?.startVertex?E(r.startVertex):0,s=r?.endVertex?E(r.endVertex):0,c=Ie(t,n.map(E));try{return o||s?D(e,e.loftWithVertices(c,i,a,o,s)):D(e,e.loft(c,i,a))}finally{c.delete()}}function cr(e,t,n,r){let i={__occtWasmLaw:!0,profile:t,length:n,endFactor:r,Trim(e,t,n){return{...i,trimFirst:e,trimLast:t}},delete(){}};return i}function lr(e,t,n,r,i){return D(e,e.revolveVec(E(t),n[0],n[1],n[2],r[0],r[1],r[2],i))}function ur(e,t,n,r,i,a,o){let s=i??10;return D(e,e.draftPrism(E(t),0,0,s,a))}function dr(e){let t=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];for(let n of e)if(n.type===`translate`)t=Be([1,0,0,n.x,0,1,0,n.y,0,0,1,n.z,0,0,0,1],t);else{let e=n.axis??[0,0,1],r=n.center??[0,0,0],i=n.angle*Math.PI/180,a=Math.cos(i),o=Math.sin(i),s=1-a,c=Math.sqrt(e[0]**2+e[1]**2+e[2]**2),[l,u,d]=[e[0]/c,e[1]/c,e[2]/c],f=s*l*l+a,p=s*l*u-o*d,m=s*l*d+o*u,h=s*u*l+o*d,g=s*u*u+a,_=s*u*d-o*l,v=s*d*l-o*u,y=s*d*u+o*l,b=s*d*d+a;t=Be([f,p,m,r[0]-(f*r[0]+p*r[1]+m*r[2]),h,g,_,r[1]-(h*r[0]+g*r[1]+_*r[2]),v,y,b,r[2]-(v*r[0]+y*r[1]+b*r[2]),0,0,0,1],t)}return{handle:{__type:`transform_matrix`,matrix:t,delete:Ne},dispose:Ne}}function fr(e){let t=e,n;return Array.isArray(t)?n=t:typeof t==`object`&&t&&(Array.isArray(t.matrix)?n=t.matrix:Array.isArray(t.elements)&&(n=t.elements)),n&&n.length===16&&(n=n.slice(0,12)),n&&n.length>=12?n:void 0}function pr(e,t,n,r){let i=fr(r);if(i){let r=Re(t,i);try{return D(e,e.transform(E(n),r))}finally{r.delete()}}return T(e.getShapeType(E(n)),e.copy(E(n)))}function mr(e,t,n,r){if(typeof e.located==`function`){let i=fr(r);if(i){let r=Re(t,i);try{return D(e,e.located(E(n),r))}finally{r.delete()}}}return pr(e,t,n,r)}function hr(e,t,n,r,i){return D(e,e.translate(E(t),n,r,i))}function gr(e,t,n,r,i){let a=r??[0,0,1],o=i??[0,0,0];return D(e,e.rotate(E(t),o[0],o[1],o[2],a[0],a[1],a[2],n))}function _r(e,t,n,r){return D(e,e.mirror(E(t),n[0],n[1],n[2],r[0],r[1],r[2]))}function vr(e,t,n,r){return D(e,e.scale(E(t),n[0],n[1],n[2],r))}function yr(e,t,n,r,i,a){let o=Re(t,[r[0],r[1],r[2],i[0],r[3],r[4],r[5],i[1],r[6],r[7],r[8],i[2]]);try{return D(e,e.generalTransform(E(n),o))}finally{o.delete()}}function br(e,t,n,r,i){let a=e.curvePointAtParam(E(r),i),[o,s,c]=(()=>{try{return[a.get(0),a.get(1),a.get(2)]}finally{a.delete()}})(),l=e.curveTangent(E(r),i),[u,d,f]=(()=>{try{return[l.get(0),l.get(1),l.get(2)]}finally{l.delete()}})(),p,m,h;Math.abs(u)<.9?(p=0,m=f,h=-d):(p=-f,m=0,h=u);let g=Math.sqrt(p*p+m*m+h*h);p/=g,m/=g,h/=g;let _=d*h-f*m,v=f*p-u*h,y=u*m-d*p,b=new t.VectorDouble;b.push_back(p),b.push_back(_),b.push_back(u),b.push_back(o),b.push_back(m),b.push_back(v),b.push_back(d),b.push_back(s),b.push_back(h),b.push_back(y),b.push_back(f),b.push_back(c);try{return D(e,e.transform(E(n),b))}finally{b.delete()}}function xr(e,t,n,r,i){let a=e.linearPattern(E(t),n[0],n[1],n[2],r,i),o=e.getSubShapes(a,`solid`),s=[];try{let e=o.size();for(let t=0;t<e;t++)s.push(T(`solid`,o.get(t)))}finally{o.delete()}if(s.length===0){let t=e.iterShapes(a);try{let n=t.size();for(let r=0;r<n;r++)s.push(D(e,t.get(r)))}finally{t.delete()}}return e.release(a),s}function Sr(e,t,n,r,i,a){let o=e.circularPattern(E(t),n[0],n[1],n[2],r[0],r[1],r[2],i,a),s=e.getSubShapes(o,`solid`),c=[];try{let e=s.size();for(let t=0;t<e;t++)c.push(T(`solid`,s.get(t)))}finally{s.delete()}if(c.length===0){let t=e.iterShapes(o);try{let n=t.size();for(let r=0;r<n;r++)c.push(D(e,t.get(r)))}finally{t.delete()}}return e.release(o),c}function Cr(e,t){return t.map(t=>{switch(t.type){case`translate`:return hr(e,t.shape,t.x,t.y,t.z);case`rotate`:return gr(e,t.shape,t.angle,t.axis,t.center);case`scale`:return vr(e,t.shape,t.center,t.factor);case`mirror`:return _r(e,t.shape,t.origin,t.normal);default:throw Error(`occt-wasm: transformBatch unknown type`)}})}function wr(e,t){if(t===0)return{min:[0,0,0],max:[0,0,0]};let n=1/0,r=1/0,i=1/0,a=-1/0,o=-1/0,s=-1/0;for(let c=0;c<t;c++){let t=c*3,l=e[t]??0,u=e[t+1]??0,d=e[t+2]??0;l<n&&(n=l),u<r&&(r=u),d<i&&(i=d),l>a&&(a=l),u>o&&(o=u),d>s&&(s=d)}return{min:[n,r,i],max:[a,o,s]}}function Tr(e,t,n,r,i,a,o,s){return{asset:{version:`2.0`,generator:`brepjs occt-wasm`},scene:0,scenes:[{nodes:[0]}],nodes:[{mesh:0}],meshes:[{primitives:[{attributes:{POSITION:0,NORMAL:1},indices:2,mode:4}]}],buffers:[{byteLength:o}],bufferViews:[{buffer:0,byteOffset:0,byteLength:r,target:34962},{buffer:0,byteOffset:r,byteLength:i,target:34962},{buffer:0,byteOffset:r+i,byteLength:a,target:34963}],accessors:[{bufferView:0,componentType:5126,count:e,type:`VEC3`,min:s.min,max:s.max},{bufferView:1,componentType:5126,count:t,type:`VEC3`},{bufferView:2,componentType:5125,count:n,type:`SCALAR`}]}}function Er(e,t,n){if(n.length===1)return e.exportStep(E(n[0]));let r=t(n);return e.exportStep(E(r))}function Dr(e,t,n,r=De,i=Oe){let{vertices:a,triangles:o}=e(t,{tolerance:r,angularTolerance:i,skipNormals:!0});return n?je(a,o):Me(a,o)}function Or(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(t);return[D(e,e.importStep(n))]}function kr(e,t,n){let r=typeof n==`string`?new TextEncoder().encode(n):new Uint8Array(n),i=t;if(i.FS)i.FS.writeFile(`/tmp/import.stl`,r);else{let t=Array.from(r,e=>String.fromCharCode(e)).join(``);return D(e,e.importStl(t))}return D(e,e.importStl(``))}function Ar(e,t,n){if(n.length===1)return e.exportIges(E(n[0]));let r=t(n);return e.exportIges(E(r))}function jr(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(t);return[D(e,e.importIges(n))]}function Mr(e,t,n,r){if(n.length===0)return``;let i=Rr(e,t,n);try{return zr(e,i)}finally{i.delete()}}function Nr(e,t,n){let r=e(t,{tolerance:n,angularTolerance:.5,skipNormals:!1}),i=r.vertices,a=r.normals,o=r.triangles,s=i.length/3,c=a.length/3,l=o.length,u=i.byteLength,d=a.byteLength,f=o.byteLength,p=u+d+f,m=p+(4-p%4)%4,h=Tr(s,c,l,u,d,f,m,wr(i,s)),g=new TextEncoder().encode(JSON.stringify(h)),_=g.byteLength+(4-g.byteLength%4)%4,v=20+_+8+m,y=new ArrayBuffer(v),b=new DataView(y);b.setUint32(0,1179937895,!0),b.setUint32(4,2,!0),b.setUint32(8,v,!0),b.setUint32(12,_,!0),b.setUint32(16,1313821514,!0);let x=new Uint8Array(y,20,_);x.set(g);for(let e=g.byteLength;e<_;e++)x[e]=32;let S=20+_;b.setUint32(S,m,!0),b.setUint32(S+4,5130562,!0);let C=S+8;return new Uint8Array(y,C,u).set(new Uint8Array(i.buffer,i.byteOffset,u)),new Uint8Array(y,C+u,d).set(new Uint8Array(a.buffer,a.byteOffset,d)),new Uint8Array(y,C+u+d,f).set(new Uint8Array(o.buffer,o.byteOffset,f)),y}function Pr(e,t,n){let r=e(t,{tolerance:n,angularTolerance:.5,skipNormals:!1}),i=r.vertices,a=r.normals,o=r.triangles,s=[`# brepjs OBJ export`],c=i.length/3;for(let e=0;e<c;e++){let t=e*3;s.push(`v ${i[t]??0} ${i[t+1]??0} ${i[t+2]??0}`)}let l=a.length/3;for(let e=0;e<l;e++){let t=e*3;s.push(`vn ${a[t]??0} ${a[t+1]??0} ${a[t+2]??0}`)}let u=e=>{let t=(o[e]??0)+1,n=(o[e+1]??0)+1,r=(o[e+2]??0)+1;s.push(`f ${t}//${t} ${n}//${n} ${r}//${r}`)};if(r.faceGroups.length>0)for(let e of r.faceGroups){s.push(`g face_${e.faceHash}`);let t=e.count/3;for(let n=0;n<t;n++)u(e.start+n*3)}else{let e=o.length/3;for(let t=0;t<e;t++)u(t*3)}return new TextEncoder().encode(s.join(`
|
|
4
4
|
`)+`
|
|
5
|
-
`).buffer}function
|
|
5
|
+
`).buffer}function Fr(e,t,n){let r=e(t,{tolerance:n,angularTolerance:.5,skipNormals:!1}),i=r.vertices,a=r.normals,o=r.triangles,s=i.length/3,c=o.length/3,l=a.length===i.length,u=[`ply`,`format ascii 1.0`,`comment brepjs PLY export`,`element vertex ${s}`,`property float x`,`property float y`,`property float z`];l&&u.push(`property float nx`,`property float ny`,`property float nz`),u.push(`element face ${c}`,`property list uchar int vertex_index`,`end_header`);for(let e=0;e<s;e++){let t=e*3,n=i[t]??0,r=i[t+1]??0,o=i[t+2]??0;if(l){let e=a[t]??0,i=a[t+1]??0,s=a[t+2]??0;u.push(`${n} ${r} ${o} ${e} ${i} ${s}`)}else u.push(`${n} ${r} ${o}`)}for(let e=0;e<c;e++){let t=o[e*3]??0,n=o[e*3+1]??0,r=o[e*3+2]??0;u.push(`3 ${t} ${n} ${r}`)}return new TextEncoder().encode(u.join(`
|
|
6
6
|
`)+`
|
|
7
|
-
`).buffer}function Pr(e,t){return e.toBREP(E(t))}function Fr(e,t){return D(e,e.fromBREP(t))}function Ir(e,t,n){let r=e.xcafNewDocument();for(let t of n){let n=e.xcafAddShape(r,E(t.shape));if(t.name&&e.xcafSetName(r,n,t.name),t.color){let[i,a,o]=t.color;e.xcafSetColor(r,n,i/255,a/255,o/255)}}return T(`compound`,r)}function Lr(e,t,n){let r=E(t),i=e.xcafGetRootLabels(r),a=(()=>{try{return i.size()>0}finally{i.delete()}})();try{return a?e.xcafExportSTEP(r):``}finally{e.xcafClose(r)}}function Rr(e,t,n,r){if(n.length===0)return``;let i=Ir(e,t,n.map(e=>({shape:e.shape,name:e.name??``,color:e.color})));try{return Lr(e,i)}finally{i.delete()}}function zr(e,t,n,r){return T(`vertex`,e.makeVertex(t,n,r))}function Br(e,t){throw Pe(t)?Error(`occt-wasm: makeEdge from curve handle is not implemented`):Error(`occt-wasm: makeEdge is not implemented`)}function Vr(e,t,n){let r=Ie(t,n.map(E));try{return T(`wire`,e.makeWire(r))}finally{r.delete()}}function Hr(e,t,n){let r=[],i=new Set(n.map(e=>E(e)));for(let t of n){let n=e.getSubShapes(E(t),`edge`);try{let e=n.size();for(let t=0;t<e;t++)r.push(n.get(t))}finally{n.delete()}}let a=Ie(t,r);try{return T(`wire`,e.makeWire(a))}finally{a.delete();for(let t of r)i.has(t)||e.release(t)}}function Ur(e,t,n){return T(`face`,e.makeFace(E(t)))}function Wr(e,t,n){return T(`edge`,e.makeLineEdge(t[0],t[1],t[2],n[0],n[1],n[2]))}function Gr(e,t,n,r){return T(`edge`,e.makeCircleEdge(t[0],t[1],t[2],n[0],n[1],n[2],r))}function Kr(e,t,n,r,i,a){return T(`edge`,e.makeCircleArc(t[0],t[1],t[2],n[0],n[1],n[2],r,i,a))}function qr(e,t,n,r){return T(`edge`,e.makeArcEdge(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]))}function Jr(e,t,n,r,i){return T(`edge`,e.makeEllipseEdge(t[0],t[1],t[2],n[0],n[1],n[2],r,i))}function Yr(e,t,n,r,i,a,o){return T(`edge`,e.makeEllipseArc(t[0],t[1],t[2],n[0],n[1],n[2],r,i,a,o))}function Xr(e,t,n){let r=[];for(let e of n)r.push(e[0],e[1],e[2]);let i=Re(t,r);try{return T(`edge`,e.makeBezierEdge(i))}finally{i.delete()}}function Zr(e,t,n,r){let[i,a,o]=t,[s,c,l]=n,[u,d,f]=r;return T(`edge`,e.makeTangentArc(i,a,o,s,c,l,u,d,f))}function Qr(e,t,n,r,i,a){let o=i?i[0]:0,s=i?i[1]:0,c=i?i[2]:0,l=a?a[0]:0,u=a?a[1]:0,d=a?a[2]:1,f=e.makeHelixWire(o,s,c,l,u,d,t,n,r);return e.buildCurves3d(f),T(`wire`,f)}function $r(e,t,n){let r=Ie(t,n.map(E));try{return T(`compound`,e.makeCompound(r))}finally{r.delete()}}function ei(e,t){return T(`solid`,e.solidFromShell(E(t)))}function ti(e,t,n,r,i){let a=[];for(let[t,i,o]of r){let r=n[t],s=n[i],c=n[o];!r||!s||!c||a.push(e.buildTriFace(r.x,r.y,r.z,s.x,s.y,s.z,c.x,c.y,c.z))}let o=Ie(t,a);try{let t=e.sewAndSolidify(o,i),n=e.fixFaceOrientations(t);return n!==t&&e.release(t),D(e,n)}finally{o.delete();for(let t of a)e.release(t)}}function ni(e,t){return T(`face`,e.makeNonPlanarFace(E(t)))}function ri(e,t,n,r){let i=Ie(t,r.map(E));try{return T(`face`,e.addHolesInFace(E(n),i))}finally{i.delete()}}function ii(e,t,n){let r=e.getSubShapes(E(n),`wire`),i=(()=>{try{return r.size()-1}finally{r.delete()}})(),a=[];for(let e=0;e<i;e++)a.push(e);let o=Le(t,a);try{return T(`face`,e.removeHolesFromFace(E(n),o))}finally{o.delete()}}function ai(e,t,n){let r=E(t);return T(`face`,e.makeFaceOnSurface(r,E(n)))}function oi(e,t,n,r,i){let a=new t.VectorDouble;for(let[e,t,r]of n)a.push_back(e),a.push_back(t),a.push_back(r);try{return T(`face`,e.bsplineSurface(a,r,i))}finally{a.delete()}}function si(e,t,n,r,i){let a=[];for(let t=0;t<r-1;t++)for(let r=0;r<i-1;r++){let o=t*i+r,s=(t+1)*i+r,c=t*i+(r+1),l=(t+1)*i+(r+1),u=n[o],d=n[s],f=n[c],p=n[l];u&&d&&f&&a.push(e.buildTriFace(u[0],u[1],u[2],d[0],d[1],d[2],f[0],f[1],f[2])),d&&p&&f&&a.push(e.buildTriFace(d[0],d[1],d[2],p[0],p[1],p[2],f[0],f[1],f[2]))}let o=Ie(t,a);try{return D(e,e.sewAndSolidify(o,.001))}finally{o.delete();for(let t of a)e.release(t)}}function ci(e,t,n,r){let i=e.buildTriFace(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]);return i===0?null:T(`face`,i)}function li(e,t,n,r){let i=Ie(t,n.map(E));try{let t=e.sewAndSolidify(i,r),n=e.fixFaceOrientations(t);return n!==t&&e.release(t),T(`solid`,n)}finally{i.delete()}}function ui(e,t,n){return{x:e,y:t,z:n,__type:`point3d`,delete:Ne}}function di(e,t,n){return{x:e,y:t,z:n,__type:`direction3d`,delete:Ne}}function fi(e,t,n){return{x:e,y:t,z:n,__type:`vector3d`,delete:Ne}}function pi(e,t,n,r,i,a){return{origin:{x:e,y:t,z:n},direction:{x:r,y:i,z:a},__type:`axis1`,delete:Ne}}function mi(e,t,n,r,i,a,o,s,c){return{origin:{x:e,y:t,z:n},zDir:{x:r,y:i,z:a},xDir:o===void 0?void 0:{x:o,y:s,z:c},__type:`axis2`,delete:Ne}}function hi(e,t,n,r,i,a,o,s,c){return{origin:{x:e,y:t,z:n},zDir:{x:r,y:i,z:a},xDir:o===void 0?void 0:{x:o,y:s,z:c},__type:`axis3`,delete:Ne}}function gi(e){return e}function _i(e){return e}function vi(e,t){return{x:e,y:t}}function yi(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`occt-wasm: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function bi(e,t){return{x:e,y:t}}function xi(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete(){}}}function Si(e){return e}function Ci(e,t,n,r){return _i(te(e,t,n,r))}function wi(e,t,n,r){return _i(ne(e,t,n,r))}function Ti(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));if(Math.abs(o)<1e-12)return _i(te(e,t,i,a));let s=((e*e+t*t)*(r-a)+(n*n+r*r)*(a-t)+(i*i+a*a)*(t-r))/o,c=((e*e+t*t)*(i-n)+(n*n+r*r)*(e-i)+(i*i+a*a)*(n-e))/o,l=Math.sqrt((e-s)**2+(t-c)**2),u=Math.atan2(t-c,e-s),d=Math.atan2(r-c,n-s),f=Math.atan2(a-c,i-s),p=d-u;p<0&&(p+=2*Math.PI);let m=f-u;m<0&&(m+=2*Math.PI);let h=p<m,g=ne(s,c,l,h);if(!h){let e=-u,t=-f;return t<e-1e-9&&(t+=2*Math.PI),_i({__bk2d:`trimmed`,basis:g,tStart:e,tEnd:t})}let _=f;return _<u-1e-9&&(_+=2*Math.PI),_i({__bk2d:`trimmed`,basis:g,tStart:u,tEnd:_})}function Ei(e,t,n,r,i,a){let o=Math.sqrt(n*n+r*r),s=o>0?n/o:0,c=o>0?r/o:0,l=e-i,u=t-a,d=2*(u*s-l*c);if(Math.abs(d)<1e-12)return _i(te(e,t,i,a));let f=-(l*l+u*u)/d,p=e-f*c,m=t+f*s,h=Math.abs(f),g=Math.atan2(t-m,e-p),_=Math.atan2(a-m,i-p),v=-(t-m)/h,y=(e-p)/h,b=v*s+y*c>0,x=ne(p,m,h,b);if(!b){let e=-g,t=-_;return t<e-1e-9&&(t+=2*Math.PI),_i({__bk2d:`trimmed`,basis:x,tStart:e,tEnd:t})}let S=_;return S<g-1e-9&&(S+=2*Math.PI),_i({__bk2d:`trimmed`,basis:x,tStart:g,tEnd:S})}function Di(e,t,n,r,i,a,o){return _i(ae(e,t,n,r,i??1,a??0,o??!0))}function Oi(e,t,n,r,i,a,o,s,c){return _i({...ae(e,t,n,r,o??1,s??0,c??!0),__bk2d:`ellipse`,startAngle:i,endAngle:a})}function ki(e){return _i(oe(e))}function Ai(e,t){let n=e,r=n.length,i=Math.max(1,Math.min(t?.degMax??3,r-1)),a=[0],o=[i+1],s=r-i-1;for(let e=1;e<=s;e++)a.push(e/(s+1)),o.push(1);return a.push(1),o.push(i+1),_i({__bk2d:`bspline`,poles:n,knots:a,multiplicities:o,degree:i,isPeriodic:!1})}function ji(e,t){return S(gi(e),t)}function Mi(e,t){return{point:S(gi(e),t),tangent:C(gi(e),t)}}function Ni(e){return w(gi(e))}function Pi(e){let t=gi(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return ee(t)}function Fi(e,t,n){return _i({__bk2d:`trimmed`,basis:gi(e),tStart:t,tEnd:n})}function Ii(e){return _i(JSON.parse(JSON.stringify(gi(e))))}function Li(e,t){let n=gi(e),r=w(n),i=[];for(let e=0;e<=20;e++){let a=r.first+(r.last-r.first)*e/20,[o,s]=S(n,a),[c,l]=C(n,a),u=Math.sqrt(c*c+l*l)||1;i.push([o-l/u*t,s+c/u*t])}return _i(oe(i.length<=25?i:i.filter((e,t)=>t%2==0||t===i.length-1)))}function Ri(e,t,n){return _i(se(gi(e),t,n))}function zi(e,t,n,r){return _i(ce(gi(e),t,n,r))}function Bi(e,t,n,r){return _i(le(gi(e),t,n,r))}function Vi(e,t,n){return _i(ue(gi(e),t,n))}function Hi(e,t,n,r,i){return _i(de(gi(e),t,n,r,i))}function Ui(e,t,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return e;let s=-i/o,c=r/o,l=a-1,u=1+l*s*s,d=l*s*c,f=l*c*s,p=1+l*c*c,m=t-u*t-d*n,h=n-f*t-p*n,g=gi(e),_=w(g),v=[];for(let e=0;e<=20;e++){let[t,n]=S(g,_.first+(_.last-_.first)*e/20);v.push([u*t+d*n+m,f*t+p*n+h])}return _i(oe(v))}function Wi(e,t,n,r,i,a){return Ui(e,t,n,r,i,a)}function Gi(){return{type:`identity2d`,delete(){}}}function Ki(e,t,n,r,i){return{type:`affinity2d`,axOriginX:e,axOriginY:t,axDirX:n,axDirY:r,ratio:i,delete(){}}}function qi(e,t){return{type:`translate2d`,dx:e,dy:t,delete(){}}}function Ji(e,t,n,r,i,a,o){return{type:`mirror2d`,cx:e,cy:t,mode:n,originX:r,originY:i,dirX:a,dirY:o,delete(){}}}function Yi(e,t,n){return{type:`rotate2d`,angle:e,cx:t,cy:n,delete(){}}}function Xi(e,t,n){return{type:`scale2d`,sx:e,sy:e,cx:t,cy:n,delete(){}}}function Zi(e,t,n){let r=e;r.dx=(Number(r.dx)||0)+t,r.dy=(Number(r.dy)||0)+n}function Qi(e,t){let n=e,r=t;n.dx=(Number(n.dx)||0)+(Number(r.dx)||0),n.dy=(Number(n.dy)||0)+(Number(r.dy)||0),r.type===`scale2d`&&(n.type=`scale2d`,n.sx=r.sx,n.sy=r.sy)}function $i(e,t){let n=t;return n.type===`translate2d`?Ri(e,Number(n.dx)||0,Number(n.dy)||0):n.type===`rotate2d`?zi(e,Number(n.angle)||0,Number(n.cx)||0,Number(n.cy)||0):n.type===`scale2d`?Bi(e,Number(n.sx)||1,Number(n.cx)||0,Number(n.cy)||0):n.type===`mirror2d`?Vi(e,Number(n.ox)||0,Number(n.oy)||0):n.type===`affinity2d`?Ui(e,Number(n.axOriginX)||0,Number(n.axOriginY)||0,Number(n.axDirX)||0,Number(n.axDirY)||0,Number(n.ratio)||1):Number(n.dx)||Number(n.dy)?Ri(e,Number(n.dx)||0,Number(n.dy)||0):e}function ea(e,t,n){let r=fe(gi(e),gi(t),n);return{points:r.points,segments:r.segments.map(e=>_i(e))}}function ta(e,t,n){let r=gi(e),i=w(r),a=(e,r,i)=>{if(e.__bk2d===`line`){let a=(t-e.ox)*e.dx+(n-e.oy)*e.dy,o=Math.max(r,Math.min(i,a)),[s,c]=S(e,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}let a=r,o=1/0;for(let s=0;s<=200;s++){let c=r+(i-r)*s/200,[l,u]=S(e,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}return{param:a,distance:Math.sqrt(o)}};if(r.__bk2d===`trimmed`){let e=r.tStart,t=r.tEnd,n=a(r.basis,e,t);if(!n)return null;let i=t-e,o=i>1e-15?(n.param-e)/i:0;return{param:Math.max(0,Math.min(1,o)),distance:n.distance}}return a(r,i.first,i.last)}function na(e,t,n,r,i,a){let o=1/0;for(let s=0;s<=20;s++){let c=n+(r-n)*(s/20),[l,u]=S(gi(e),c);for(let e=0;e<=20;e++){let n=i+(a-i)*(e/20),[r,s]=S(gi(t),n),c=Math.sqrt((r-l)**2+(s-u)**2);c<o&&(o=c)}}return o}function ra(e,t){let n=gi(e),r=w(n),i=Math.min(Math.max(t+1,10),100),a=[];for(let e=0;e<i;e++){let t=r.first+(r.last-r.first)*e/(i-1);a.push(S(n,t))}let o=Math.min(3,i-1),s=a.length,c=[],l=[],u=s-o-1;c.push(0),l.push(o+1);for(let e=1;e<=u;e++)c.push(e/(u+1)),l.push(1);return c.push(1),l.push(o+1),_i({__bk2d:`bspline`,poles:a,knots:c,multiplicities:l,degree:o,isPeriodic:!1})}function ia(e){let t=gi(e);for(;t.__bk2d===`trimmed`;)t=t.basis;if(t.__bk2d!==`bspline`)return[e];let n=t.poles,r=t.degree,i=[];for(let e=0;e<t.knots.length;e++){let n=t.knots[e]??0,r=t.multiplicities[e]??0;for(let e=0;e<r;e++)i.push(n)}let a=n.length-1+r+1;if(r<1||i.length!==a+1)return[_i(oe(n))];let o=e=>[e[0],e[1]],s=[],c=r,l=r+1,u=[];for(let e=0;e<=r;e++)u[e]=o(n[e]);let d=[];for(;l<a;){let e=l;for(;l<a&&i[l+1]===i[l];)l++;let t=l-e+1;if(t<r){let e=i[l]-i[c],n=[];for(let a=r;a>t;a--)n[a-t-1]=e/(i[c+a]-i[c]);let s=r-t;for(let e=1;e<=s;e++){let i=s-e,c=t+e;for(let e=r;e>=c;e--){let t=n[e-c],r=u[e],i=u[e-1];u[e]=[t*r[0]+(1-t)*i[0],t*r[1]+(1-t)*i[1]]}l<a&&(d[i]=o(u[r]))}}if(s.push(u),l<a){for(let e=r-t;e<=r;e++)d[e]=o(n[l-r+e]);u=d,d=[],c=l,l++}}return s.map(e=>_i(oe(e)))}function aa(){return Ce()}function oa(e,t,n){we(e,gi(t),n)}function sa(e){return{xMin:e.xMin,yMin:e.yMin,xMax:e.xMax,yMax:e.yMax}}function ca(e,t){e.xMin=Math.min(e.xMin,t.xMin),e.yMin=Math.min(e.yMin,t.yMin),e.xMax=Math.max(e.xMax,t.xMax),e.yMax=Math.max(e.yMax,t.yMax)}function la(e,t){return e.xMax<t.xMin||e.xMin>t.xMax||e.yMax<t.yMin||e.yMin>t.yMax}function ua(e,t,n){return t<e.xMin||t>e.xMax||n<e.yMin||n>e.yMax}function da(e){let t=gi(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function fa(e){let t=gi(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function pa(e){let t=gi(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t.__bk2d===`bezier`?t.poles:null}function ma(e){let t=gi(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t.__bk2d===`bezier`?t.poles.length-1:null}function ha(e){return xe(gi(e))}function ga(e){return _i(Se(e))}function _a(e,t){let n=w(gi(e)),r=[n.first,...t.sort((e,t)=>e-t),n.last],i=[];for(let t=0;t<r.length-1;t++){let a=r[t]??n.first,o=r[t+1]??n.last;i.push(Fi(e,a,o))}return i}function va(e,t,n,r,i,a){let o=gi(n),[s,c,l]=r,[u,d,f]=i,[p,m,h]=a,g=d*h-f*m,_=f*p-u*h,v=u*m-d*p,y=(e,t)=>[s+e*p+t*g,c+e*m+t*_,l+e*h+t*v],b=o.__bk2d;if(b===`line`){let t=w(o),[n,r]=S(o,t.first),[i,a]=S(o,t.last),s=y(n,r),c=y(i,a);return T(`edge`,e.makeLineEdge(s[0],s[1],s[2],c[0],c[1],c[2]))}if(b===`trimmed`){let t=o;if(t.basis&&t.basis.__bk2d===`line`){let[t,n]=S(o,0),[r,i]=S(o,1),a=y(t,n),s=y(r,i);return T(`edge`,e.makeLineEdge(a[0],a[1],a[2],s[0],s[1],s[2]))}if(t.basis&&t.basis.__bk2d===`circle`){let t=w(o),[n,r]=S(o,t.first),[i,a]=S(o,(t.first+t.last)/2),[s,c]=S(o,t.last),l=y(n,r),u=y(i,a),d=y(s,c);return T(`edge`,e.makeArcEdge(l[0],l[1],l[2],u[0],u[1],u[2],d[0],d[1],d[2]))}}if(b===`circle`){let t=o;if(t.cx!==void 0&&t.radius!==void 0){let[n,r,i]=y(t.cx,t.cy);return T(`edge`,e.makeCircleEdge(n,r,i,u,d,f,t.radius))}let n=w(o),[r,i]=S(o,n.first),[a,s]=S(o,(n.first+n.last)/2),[c,l]=S(o,n.last),p=y(r,i),m=y(a,s),h=y(c,l);return T(`edge`,e.makeArcEdge(p[0],p[1],p[2],m[0],m[1],m[2],h[0],h[1],h[2]))}let x=w(o),C=(x.last-x.first)/24,ee=[];for(let e=0;e<=24;e++){let[t,n]=S(o,x.first+e*C),[r,i,a]=y(t,n);ee.push(r,i,a)}let te=new t.VectorDouble;for(let e of ee)te.push_back(e);try{return T(`edge`,e.interpolatePoints(te,!1))}finally{te.delete()}}function ya(e,t,n,r){let i=gi(n),a=w(i),o=E(r),s=new t.VectorDouble;for(let t=0;t<=30;t++){let[n,r]=S(i,a.first+(a.last-a.first)*t/30),c=e.pointOnSurface(o,n,r);try{s.push_back(c.get(0)),s.push_back(c.get(1)),s.push_back(c.get(2))}finally{c.delete()}}try{return T(`edge`,e.interpolatePoints(s,!1))}finally{s.delete()}}function ba(e){return e}function xa(e,t,n){let[r,i]=Vt(e,t),a=[];for(let o=0;o<=60;o++){let s=vn(e,n,Ht(e,t,r+(i-r)*o/60));s&&a.push(s)}if(a.length<2)throw Error(`occt-wasm: extractCurve2dFromEdge could not project the edge onto the face surface`);return Ai(a)}function Sa(e,t){e.buildCurves3d(E(t))}function Ca(e,t,n,r){return T(`wire`,e.fixWireOnFace(E(t),E(n),r))}function wa(e){try{let t=ze(e.modified),n=ze(e.generated),r=ze(e.deleted),i=e=>{let t=new Map,n=0;for(;n+1<e.length;){let r=e[n]??0,i=e[n+1]??0;n+=2;let a=[];for(let t=0;t<i&&n<e.length;t++,n++)a.push(e[n]??0);t.set(r,a)}return t};return{id:e.resultId,evolution:{modified:i(t),generated:i(n),deleted:new Set(r)}}}finally{e.delete()}}function Ta(e,t,n,r,i,a,o,s){let c=Le(t,o);try{let{id:t,evolution:o}=wa(e.translateWithHistory(E(n),r,i,a,c,s));return{shape:D(e,t),evolution:o}}finally{c.delete()}}function Ea(e,t,n,r,i,a,o,s){let c=o??[0,0,1],l=s??[0,0,0],u=Le(t,i);try{let{id:t,evolution:i}=wa(e.rotateWithHistory(E(n),l[0],l[1],l[2],c[0],c[1],c[2],r,u,a));return{shape:D(e,t),evolution:i}}finally{u.delete()}}function Da(e,t,n,r,i,a,o){let s=Le(t,a);try{let{id:t,evolution:a}=wa(e.mirrorWithHistory(E(n),r[0],r[1],r[2],i[0],i[1],i[2],s,o));return{shape:D(e,t),evolution:a}}finally{s.delete()}}function Oa(e,t,n,r,i,a,o){let s=Le(t,a);try{let{id:t,evolution:a}=wa(e.scaleWithHistory(E(n),r[0],r[1],r[2],i,s,o));return{shape:D(e,t),evolution:a}}finally{s.delete()}}function ka(e,t,n,r,i,a){let o=e(t,n,r,i),s=new Map;for(let e of a)s.set(e,[e]);return{shape:o,evolution:{modified:s,generated:new Map,deleted:new Set}}}function Aa(e,t,n,r,i,a,o){let s=Le(t,i);try{let{id:t,evolution:i}=wa(e.fuseWithHistory(E(n),E(r),s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete()}}function ja(e,t,n,r,i,a,o){let s=Le(t,i),c;try{c=Ge(e,r);let{id:t,evolution:i}=wa(e.cutWithHistory(E(n),c.id,s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete(),c?.dispose()}}function Ma(e,t,n,r,i,a,o){let s=Le(t,i),c;try{c=Ge(e,r);let{id:t,evolution:i}=wa(e.intersectWithHistory(E(n),c.id,s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete(),c?.dispose()}}function Na(e,t,n,r,i,a,o){let s=Ve(r,i),c=Ie(t,r.map(E)),l=Le(t,a);try{let{id:t,evolution:r}=wa(e.filletWithHistory(E(n),c,s,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function Pa(e,t,n,r,i,a,o){let s=Ve(r,i),c=Ie(t,r.map(E)),l=Le(t,a);try{let{id:t,evolution:r}=wa(e.chamferWithHistory(E(n),c,s,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function Fa(e,t,n,r,i,a,o,s){let c=Ie(t,r.map(E)),l=Le(t,a);try{let{id:t,evolution:r}=wa(e.shellWithHistory(E(n),c,i,s??.001,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function Ia(e,t,n,r,i,a){let o=Le(t,i);try{let{id:t,evolution:i}=wa(e.thickenWithHistory(E(n),r,.001,o,a));return{shape:D(e,t),evolution:i}}finally{o.delete()}}function La(e,t,n,r,i,a,o){let s=Le(t,i);try{let{id:t,evolution:i}=wa(e.offsetWithHistory(E(n),r,o??1e-6,s,a));return{shape:D(e,t),evolution:i}}finally{s.delete()}}function Ra(e,t,n,r,i){let[a,o,s]=r,c=E(t);for(let t of n){let n=(typeof i==`number`?i:i(t))*Math.PI/180;c=e.draft(c,E(t),n,a,o,s)}return{shape:D(e,c),evolution:{modified:new Map,generated:new Map,deleted:new Set}}}function za(e,t,n,r,i,a,o){let s=e(r,i),c=t(s,`face`),l=new Map,u=Math.min(a.length,c.length);for(let e=0;e<u;e++){let t=c[e],r=a[e];t!==void 0&&r!==void 0&&l.set(r,[n(t,o)])}return{shape:s,evolution:{modified:l,generated:new Map,deleted:new Set}}}function Ba(e,t,n,r){if(n.length<4)throw Error(`hullFromPoints: need at least 4 points`);let{points:i,faces:a}=x(n,r);if(a.length<4)throw Error(`hullFromPoints: degenerate hull (fewer than 4 faces)`);return ti(e,t,[...i],[...a],r)}function Va(e,t,n,r){let i=Math.max(r,1),a=[];for(let r of n){let n=e.tessellate(E(r),i,i*.5);try{let e=n.positionCount,r=n.getPositionsPtr()>>2;for(let n=0;n<e;n+=3)a.push({x:t.HEAPF32[r+n]??0,y:t.HEAPF32[r+n+1]??0,z:t.HEAPF32[r+n+2]??0})}finally{n.delete()}}return a}function Ha(e,t,n,r){if(n.length===0)throw Error(`hull: no shapes provided`);let i=Va(e,t,n,r);if(i.length<4)throw Error(`hull: fewer than 4 vertices extracted from input shapes`);return Ba(e,t,i,r)}function Ua(e){throw new c(`occt-wasm: ${e} is not yet implemented`)}var Wa=class e{oc;kernelId=`occt-wasm`;capabilities=a;Module;k;owner;constructor(e,t,n){this.Module=e,this.k=Ue(t,e),this.oc=We(e,this.k),this.owner=n}static fromKernel(t){let n=t.getRawModule(),r=t.getRawKernel();return new e(n,r,t)}get retainedKernelOwner(){return this.owner}dispose(e){Pe(e)?this.k.release(e.id):typeof e.delete==`function`&&e.delete()}executeBatch(e){Ua(`executeBatch`)}openCheckpoints=[];checkpoint(){let e=this.k.checkpoint();return this.openCheckpoints.push(e),e}checkpointCount(){return this.openCheckpoints.length}restoreCheckpoint(e){let t=this.openCheckpoints.lastIndexOf(e);if(t===-1)throw new r(`occtWasmAdapter.restoreCheckpoint`,`checkpoint ${e} is not open — releaseSince would erase unrelated live handles`);this.k.releaseSince(e),this.openCheckpoints.length=t}discardCheckpoint(e){this.closeCheckpoint(e)}closeCheckpoint(e){let t=this.openCheckpoints.lastIndexOf(e);t!==-1&&(this.openCheckpoints.length=t)}makeBox(e,t,n){return nt(this.k,e,t,n)}makeCylinder(e,t,n,r){return rt(this.k,e,t,n,r)}makeSphere(e,t){return it(this.k,e,t)}makeCone(e,t,n,r,i){return at(this.k,e,t,n,r,i)}makeTorus(e,t,n,r){return ot(this.k,e,t,n,r)}makeEllipsoid(e,t,n){return st(this.k,e,t,n)}makeBoxFromCorners(e,t){return ct(this.k,e,t)}makeRectangle(e,t){return lt(this.k,e,t)}fuse(e,t,n){return Ke(this.k,e,t,n)}cut(e,t,n){return qe(this.k,e,t,n)}intersect(e,t,n){return Je(this.k,e,t,n)}section(e,t,n){return Ye(this.k,e,t,n)}fuseAll(e,t){return Xe(this.k,this.Module,e,t)}cutAll(e,t,n){return Ze(this.k,this.Module,e,t,n)}split(e,t){return Qe(this.k,this.Module,e,t)}checkBoolean(e,t,n){return $e(this.k,e,t,n)}meshBoolean(e,t,n,r,i,a){return et(e,t,n,r,i,a)}makeVertex(e,t,n){return zr(this.k,e,t,n)}makeEdge(e,t,n){return Br(this.k,e)}makeWire(e){return Vr(this.k,this.Module,e)}makeFace(e,t){return Ur(this.k,e,t)}makeLineEdge(e,t){return Wr(this.k,e,t)}makeCircleEdge(e,t,n){return Gr(this.k,e,t,n)}makeCircleArc(e,t,n,r,i){return Kr(this.k,e,t,n,r,i)}makeArcEdge(e,t,n){return qr(this.k,e,t,n)}makeEllipseEdge(e,t,n,r,i){return Jr(this.k,e,t,n,r)}makeEllipseArc(e,t,n,r,i,a,o){return Yr(this.k,e,t,n,r,i,a)}makeBezierEdge(e){return Xr(this.k,this.Module,e)}makeTangentArc(e,t,n){return Zr(this.k,e,t,n)}makeHelixWire(e,t,n,r,i,a){return Qr(this.k,e,t,n,r,i)}makeWireFromMixed(e){return Hr(this.k,this.Module,e)}makeCompound(e){return $r(this.k,this.Module,e)}solidFromShell(e){return ei(this.k,e)}hull(e,t){return Ha(this.k,this.Module,e,t)}hullFromPoints(e,t){return Ba(this.k,this.Module,e,t)}buildSolidFromFaces(e,t,n){return ti(this.k,this.Module,e,t,n)}makeNonPlanarFace(e){return ni(this.k,e)}addHolesInFace(e,t){return ri(this.k,this.Module,e,t)}removeHolesFromFace(e){return ii(this.k,this.Module,e)}makeFaceOnSurface(e,t){return ai(this.k,e,t)}bsplineSurface(e,t,n){return oi(this.k,this.Module,e,t,n)}triangulatedSurface(e,t,n){return si(this.k,this.Module,e,t,n)}buildTriFace(e,t,n){return ci(this.k,e,t,n)}sewAndSolidify(e,t){return li(this.k,this.Module,e,t)}createPoint3d(e,t,n){return ui(e,t,n)}createDirection3d(e,t,n){return di(e,t,n)}createVector3d(e,t,n){return fi(e,t,n)}createAxis1(e,t,n,r,i,a){return pi(e,t,n,r,i,a)}createAxis2(e,t,n,r,i,a,o,s,c){return mi(e,t,n,r,i,a,o,s,c)}createAxis3(e,t,n,r,i,a,o,s,c){return hi(e,t,n,r,i,a,o,s,c)}extrude(e,t,n){return $n(this.k,e,t,n)}revolve(e,t,n){return er(this.k,e,t,n)}loft(e,t,n,r){return tr(this.k,this.Module,e,t,n,r)}sweep(e,t,n){return nr(this.k,e,t,n)}simplePipe(e,t){return rr(this.k,e,t)}helicalSweep(e,t,n,r,i,a){throw Error(`helicalSweep on occt-wasm requires profile positioning+orientation logic not yet implemented; brepkit has a native implementation`)}sweepWithOptions(e,t,n,r,i){Ua(`sweepWithOptions`)}sweepPipeShell(e,t,n){return ir(this.k,e,t,n)}loftAdvanced(e,t){return ar(this.k,this.Module,e,t)}buildExtrusionLaw(e,t,n){return or(this.k,e,t,n)}revolveVec(e,t,n,r){return sr(this.k,e,t,n,r)}draftPrism(e,t,n,r,i,a){return cr(this.k,e,t,n,r,i,a)}fillet(e,t,n){return Vn(this.k,this.Module,e,t,n)}chamfer(e,t,n){return Hn(this.k,this.Module,e,t,n)}chamferDistAngle(e,t,n,r){return Un(this.k,this.Module,e,t,n,r)}shell(e,t,n,r){return Wn(this.k,this.Module,e,t,n,r)}thicken(e,t){return Gn(this.k,e,t)}offset(e,t,n){return Kn(this.k,e,t,n)}filletVariable(e,t){return qn(this.k,e,t)}draft(e,t,n,r,i){return Jn(this.k,e,t,n,r,i)}defeature(e,t){return Yn(this.k,this.Module,e,t)}offsetWire2D(e,t,n){return Xn(this.k,e,t,n)}simplify(e){return Zn(this.k,e)}reverseShape(e){return Qn(this.k,e)}composeTransform(e){return lr(e)}transform(e,t){return dr(this.k,this.Module,e,t)}locate(e,t){return fr(this.k,this.Module,e,t)}translate(e,t,n,r){return pr(this.k,e,t,n,r)}rotate(e,t,n,r){return mr(this.k,e,t,n,r)}mirror(e,t,n){return hr(this.k,e,t,n)}scale(e,t,n){return gr(this.k,e,t,n)}generalTransform(e,t,n,r){return _r(this.k,this.Module,e,t,n,r)}generalTransformNonOrthogonal(e,t,n){return _r(this.k,this.Module,e,t,n,!1)}positionOnCurve(e,t,n){return vr(this.k,this.Module,e,t,n)}linearPattern(e,t,n,r){return yr(this.k,e,t,n,r)}circularPattern(e,t,n,r,i){return br(this.k,e,t,n,r,i)}transformBatch(e){return xr(this.k,e)}translateWithHistory(e,t,n,r,i,a){return Ta(this.k,this.Module,e,t,n,r,i,a)}rotateWithHistory(e,t,n,r,i,a){return Ea(this.k,this.Module,e,t,n,r,i,a)}mirrorWithHistory(e,t,n,r,i){return Da(this.k,this.Module,e,t,n,r,i)}scaleWithHistory(e,t,n,r,i){return Oa(this.k,this.Module,e,t,n,r,i)}generalTransformWithHistory(e,t,n,r,i,a){return ka((e,t,n,r)=>this.generalTransform(e,t,n,r),e,t,n,r,i)}fuseWithHistory(e,t,n,r,i){return Aa(this.k,this.Module,e,t,n,r,i)}cutWithHistory(e,t,n,r,i){return ja(this.k,this.Module,e,t,n,r,i)}intersectWithHistory(e,t,n,r,i){return Ma(this.k,this.Module,e,t,n,r,i)}filletWithHistory(e,t,n,r,i){return Na(this.k,this.Module,e,t,n,r,i)}chamferWithHistory(e,t,n,r,i){return Pa(this.k,this.Module,e,t,n,r,i)}shellWithHistory(e,t,n,r,i,a){return Fa(this.k,this.Module,e,t,n,r,i,a)}thickenWithHistory(e,t,n,r){return Ia(this.k,this.Module,e,t,n,r)}offsetWithHistory(e,t,n,r,i){return La(this.k,this.Module,e,t,n,r,i)}draftWithHistory(e,t,n,r,i,a,o){return Ra(this.k,e,t,n,i)}applyComposedTransformWithHistory(e,t,n,r){return za((e,t)=>this.transform(e,t),(e,t)=>this.iterShapes(e,t),(e,t)=>this.hashCode(e,t),e,t,n,r)}mesh(e,t){return Pt(this.k,this.Module,e,t)}meshEdges(e,t,n){return It(this.k,this.Module,e,t,n)}hasTriangulation(e){return Lt(this.k,e)}meshShape(e,t,n){Rt(this.k,e,t,n)}exportSTEP(e){return wr(this.k,this.makeCompound.bind(this),e)}exportSTL(e,t,n,r){return Tr(this.mesh.bind(this),e,t,n,r)}importSTEP(e){return Er(this.k,e)}importSTL(e){return Dr(this.k,this.Module,e)}exportIGES(e){return Or(this.k,this.makeCompound.bind(this),e)}importIGES(e){return kr(this.k,e)}exportSTEPAssembly(e,t){return Ar(this.k,this.Module,e,t)}export3MF(e,t){throw Error(`export3MF is only available with the brepkit kernel`)}exportGLB(e,t){return jr(this.mesh.bind(this),e,t)}exportOBJ(e,t){return Mr(this.mesh.bind(this),e,t)}exportPLY(e,t){return Nr(this.mesh.bind(this),e,t)}import3MF(e){throw Error(`import3MF is only available with the brepkit kernel`)}importOBJ(e){throw Error(`importOBJ is only available with the brepkit kernel`)}importGLB(e){throw Error(`importGLB is only available with the brepkit kernel`)}toBREP(e){return Pr(this.k,e)}fromBREP(e){return Fr(this.k,e)}createXCAFDocument(e){return Ir(this.k,this.Module,e)}writeXCAFToSTEP(e,t){return Lr(this.k,e,t)}exportSTEPConfigured(e,t){return Rr(this.k,this.Module,e,t)}volume(e){return Sn(this.k,e)}area(e){return Cn(this.k,e)}length(e){return wn(this.k,e)}centerOfMass(e){return Tn(this.k,e)}linearCenterOfMass(e){return En(this.k,e)}boundingBox(e){return Dn(this.k,e)}distance(e,t){return Nn(this.k,this.Module,e,t)}surfaceCurvature(e,t,n){return Bn(this.k,e,t,n)}surfaceCenterOfMass(e){return On(this.k,e)}measureBulk(e,t){return kn(this.k,e,t)}createDistanceQuery(e){return An(this.k,e)}iterShapes(e,t){return ut(this.k,e,t)}iterShapeList(e,t){throw Error(`iterShapeList is not applicable to occt-wasm: the arena model has no TopTools_ListOfShape handles`)}shapeType(e){return dt(this.k,e)}isSame(e,t){return ft(this.k,e,t)}isEqual(e,t){return pt(this.k,e,t)}downcast(e,t){return mt(this.k,e,t)}copyShape(e){return ht(this.k,e)}hashCode(e,t){return gt(this.k,e,t)}subShapeCount(e,t){return bt(this.k,e,t)}subShapeHashes(e,t,n){return xt(this.k,e,t,n)}isNull(e){return _t(this.k,e)}shapeOrientation(e){return vt(this.k,e)}edgeToFaceMap(e){return yt(this.k,e)}sharedEdges(e,t){return St(this.k,e,t)}adjacentFaces(e,t){return Ct(this.k,e,t)}sew(e,t){return wt(this.k,this.Module,e,t)}curveType(e){return Bt(this.k,e)}curveParameters(e){return Vt(this.k,e)}curvePointAtParam(e,t){return Ht(this.k,e,t)}curveTangent(e,t){return Ut(this.k,e,t)}curveIsClosed(e){return Wt(this.k,e)}curveIsPeriodic(e){return Gt(this.k,e)}curvePeriod(e){return Kt(this.k,e)}interpolatePoints(e,t){return qt(this.k,this.Module,e,t)}approximatePoints(e,t){return Jt(this.k,this.Module,e,t)}curveDegreeElevate(e,t){return Yt(this.k,e,t)}curveKnotInsert(e,t,n){return Xt(this.k,e,t,n)}curveKnotRemove(e,t,n){return Zt(this.k,e,t,n)}curveSplit(e,t){return Qt(this.k,e,t)}getBezierPenultimatePole(e){return $t(this.k,e)}createCurveAdaptor(e){Ua(`createCurveAdaptor`)}vertexPosition(e){return tn(this.k,e)}surfaceType(e){return nn(this.k,e)}uvBounds(e){return rn(this.k,e)}outerWire(e){return an(this.k,e)}surfaceNormal(e,t,n){return on(this.k,e,t,n)}pointOnSurface(e,t,n){return sn(this.k,e,t,n)}uvFromPoint(e,t){return vn(this.k,e,t)}projectPointOnFace(e,t){return yn(this.k,e,t)}classifyPointOnFace(e,t,n,r){return bn(this.k,e,t,n,r)}classifyPointRobust(e,t,n){Ua(`classifyPointRobust`)}classifyPointWinding(e,t,n){Ua(`classifyPointWinding`)}approximateSurfaceLspia(e,t,n,r,i,a,o,s,c){Ua(`approximateSurfaceLspia`)}untrimFace(e,t,n){Ua(`untrimFace`)}getSurfaceCylinderData(e){return _n(this.k,e)}getSurfaceAxis(e){return gn(this.k,e)}reverseSurfaceU(e){Ua(`reverseSurfaceU`)}detectSmallFeatures(e,t,n){Ua(`detectSmallFeatures`)}recognizeFeatures(e,t){Ua(`recognizeFeatures`)}projectEdges(e,t,n,r){return xn(this.k,this.Module,e,t,n,r)}isValid(e){return Et(this.k,e)}healSolid(e){return Dt(this.k,e)}healFace(e){return Ot(this.k,e)}healWire(e,t){return kt(this.k,e,t)}mergeCoincidentVertices(e,t){return At(this.k,e,t)}removeDegenerateEdges(e,t){return jt(this.k,e,t)}fixFaceOrientations(e){return Mt(this.k,e)}fixShape(e){return Nt(this.k,e)}fixSelfIntersection(e){Ua(`fixSelfIntersection`)}createPoint2d(e,t){return vi(e,t)}createDirection2d(e,t){return yi(e,t)}createVector2d(e,t){return bi(e,t)}createAxis2d(e,t,n,r){return xi(e,t,n,r)}wrapCurve2dHandle(e){return Si(e)}createCurve2dAdaptor(e){Ua(`createCurve2dAdaptor`)}makeLine2d(e,t,n,r){return Ci(e,t,n,r)}makeCircle2d(e,t,n,r){return wi(e,t,n,r)}makeArc2dThreePoints(e,t,n,r,i,a){return Ti(e,t,n,r,i,a)}makeArc2dTangent(e,t,n,r,i,a){return Ei(e,t,n,r,i,a)}makeEllipse2d(e,t,n,r,i,a,o){return Di(e,t,n,r,i,a,o)}makeEllipseArc2d(e,t,n,r,i,a,o,s,c){return Oi(e,t,n,r,i,a,o,s,c)}makeBezier2d(e){return ki(e)}makeBSpline2d(e,t){return Ai(e)}evaluateCurve2d(e,t){return ji(e,t)}evaluateCurve2dD1(e,t){return Mi(e,t)}getCurve2dBounds(e){return Ni(e)}getCurve2dType(e){return Pi(e)}trimCurve2d(e,t,n){return Fi(e,t,n)}reverseCurve2d(e){}copyCurve2d(e){return Ii(e)}offsetCurve2d(e,t){return Li(e,t)}translateCurve2d(e,t,n){return Ri(e,t,n)}rotateCurve2d(e,t,n,r){return zi(e,t,n,r)}scaleCurve2d(e,t,n,r){return Bi(e,t,n,r)}mirrorCurve2dAtPoint(e,t,n){return Vi(e,t,n)}mirrorCurve2dAcrossAxis(e,t,n,r,i){return Hi(e,t,n,r,i)}affinityTransform2d(e,t,n,r,i,a){return Wi(e,t,n,r,i,a)}createIdentityGTrsf2d(){return Gi()}createAffinityGTrsf2d(e,t,n,r,i){return Ki(e,t,n,r,i)}createTranslationGTrsf2d(e,t){return qi(e,t)}createMirrorGTrsf2d(e,t,n,r,i,a,o){return Ji(e,t,n,r,i,a,o)}createRotationGTrsf2d(e,t,n){return Yi(e,t,n)}createScaleGTrsf2d(e,t,n){return Xi(e,t,n)}setGTrsf2dTranslationPart(e,t,n){Zi(e,t,n)}multiplyGTrsf2d(e,t){Qi(e,t)}transformCurve2dGeneral(e,t){return $i(e,t)}intersectCurves2d(e,t,n){return ea(e,t,n)}projectPointOnCurve2d(e,t,n){return ta(e,t,n)}distanceBetweenCurves2d(e,t,n,r,i,a){return na(e,t,n,r,i,a)}approximateCurve2dAsBSpline(e,t,n,r){return ra(e,r)}decomposeBSpline2dToBeziers(e){return ia(e)}createBoundingBox2d(){return aa()}addCurveToBBox2d(e,t,n){oa(e,t,n)}getBBox2dBounds(e){return sa(e)}mergeBBox2d(e,t){ca(e,t)}isBBox2dOut(e,t){return la(e,t)}isBBox2dOutPoint(e,t,n){return ua(e,t,n)}getCurve2dCircleData(e){return da(e)}getCurve2dEllipseData(e){return fa(e)}getCurve2dBezierPoles(e){return pa(e)}getCurve2dBezierDegree(e){return ma(e)}getCurve2dBSplineData(e){Ua(`getCurve2dBSplineData`)}serializeCurve2d(e){return ha(e)}deserializeCurve2d(e){return ga(e)}splitCurve2d(e,t){return _a(e,t)}liftCurve2dToPlane(e,t,n,r){return va(this.k,this.Module,e,t,n,r)}buildEdgeOnSurface(e,t){return ya(this.k,this.Module,e,t)}extractSurfaceFromFace(e){return ba(e)}extractCurve2dFromEdge(e,t){return xa(this.k,e,t)}buildCurves3d(e){Sa(this.k,e)}fixWireOnFace(e,t,n){return Ca(this.k,e,t,n)}fillSurface(e,t){Ua(`fillSurface`)}getNurbsCurveData(e){return en(this.k,e)}};function O(e){return{ok:!0,value:e}}function k(e){return{ok:!1,error:e}}var Ga=O(void 0);function Ka(e){return e.ok}function A(e){return!e.ok}function qa(e,t){return e.ok?O(t(e.value)):e}function Ja(e,t){return e.ok?e:k(t(e.error))}function Ya(e,t){return e.ok?t(e.value):e}var Xa=Ya;function Za(e,t){return e.ok?e:t}function Qa(e,t){return e.ok?e:t(e.error)}function $a(e,t){return e.ok?t.ok?O([e.value,t.value]):t:e}var eo=fo;function to(e,t){return e.ok&&t(e.value),e}function no(e,t){return e.ok||t(e.error),e}function ro(e){return e.ok?e.value:e}function io(e,t,n){return e.ok?O(t(e.value)):k(n(e.error))}function ao(e,t){return e==null?k(t()):O(e)}function oo(e){if(typeof e==`object`&&e&&`kind`in e&&`code`in e&&`message`in e){let t=e;return`[${t.kind}] ${t.code}: ${t.message}`}return String(e)}function j(e){if(e.ok)return e.value;throw Error(`Called unwrap() on an Err: ${oo(e.error)}`)}function so(e,t){return e.ok?e.value:t}function co(e,t){return e.ok?e.value:t(e.error)}function lo(e){if(!e.ok)return e.error;throw Error(`Called unwrapErr() on an Ok: ${String(e.value)}`)}function uo(e,t){return e.ok?t.ok(e.value):t.err(e.error)}function fo(e){let t=[];for(let n of e){if(!n.ok)return n;t.push(n.value)}return O(t)}function po(e,t){try{return O(e())}catch(e){return k(t(e))}}async function mo(e,t){try{return O(await e())}catch(e){return k(t(e))}}function ho(e){function t(e){return typeof e==`object`&&!!e&&`ok`in e&&typeof e.ok==`boolean`}let n=t(e)?e:O(e);function r(e){return{then(t){return e.ok?r(t(e.value)):r(e)},get result(){return e}}}return r(n)}var go=[{pattern:/invalid edge configuration|edges?.*(not|fail|invalid)/i,translation:`The edges may not form a continuous loop. Check that edges connect end-to-end without gaps.`},{pattern:/BRepAlgoAPI.*failed|boolean.*operation.*failed/i,translation:`Boolean operation failed. Common causes: overlapping faces, zero-thickness geometry, or degenerate shapes. Try healing input shapes first.`},{pattern:/fillet.*radius.*too.*large|fillet.*failed/i,translation:`Fillet operation failed. The radius may be too large for the selected edges. Try reducing the radius or check that edges have enough room.`},{pattern:/chamfer.*failed|chamfer.*distance.*too.*large/i,translation:`Chamfer operation failed. The distance may be too large for the selected edges. Try reducing the distance or check edge geometry.`},{pattern:/shell.*failed|offset.*failed/i,translation:`Shell/offset operation failed. The thickness may be too large, or the shape may have complex geometry. Try reducing thickness.`},{pattern:/sweep.*failed|pipe.*failed/i,translation:`Sweep operation failed. Check that the profile and spine are compatible, and that the spine has no sharp twists or self-intersections.`},{pattern:/loft.*failed/i,translation:`Loft operation failed. Profiles may be incompatible or have different orientations. Ensure profiles are ordered consistently.`},{pattern:/extrude.*failed|prism.*failed/i,translation:`Extrusion failed. The profile may be invalid or self-intersecting. Check that the profile forms a valid closed wire.`},{pattern:/revolve.*failed|revolution.*failed/i,translation:`Revolution operation failed. The profile may intersect the axis of revolution, or the angle may be invalid.`},{pattern:/self.*intersect|self-intersect/i,translation:`Shape has self-intersections. The operation resulted in overlapping geometry. Simplify the input or adjust parameters.`},{pattern:/degener|degenerat/i,translation:`Degenerate geometry detected. The shape has edges or faces with zero length/area. Check input geometry for collapsed elements.`},{pattern:/BRepCheck.*fail|shape.*invalid|shape.*not.*valid/i,translation:`Shape validation failed. The resulting shape has invalid topology. Try healing the shape or checking input geometry.`}],_o={FUSE_FAILED:`Try autoHeal() on both operands before the boolean operation. Check for overlapping faces or zero-thickness geometry.`,CUT_FAILED:`Try autoHeal() on both operands before the boolean operation. Check for overlapping faces or zero-thickness geometry.`,FUSE_NOT_3D:`The boolean result was not a 3D solid. Ensure both input shapes are valid 3D solids, not shells or open surfaces.`,CUT_NOT_3D:`The boolean result was not a 3D solid. Ensure both input shapes are valid 3D solids, not shells or open surfaces.`,INTERSECT_NOT_3D:`The boolean result was not a 3D solid. Ensure both input shapes are valid 3D solids, not shells or open surfaces.`,SWEEP_FAILED:`Ensure the spine curve has no sharp corners or self-intersections. Try simplifying the profile or using a smoother path.`,LOFT_FAILED:`Check that all profiles have the same number of edges and consistent orientation. Try reordering profiles.`,FILLET_NOT_3D:`The fillet radius may be too large for the selected edges. Try a smaller radius or check that adjacent faces have enough room.`,CHAMFER_NOT_3D:`The chamfer distance may be too large. Try a smaller distance or check edge geometry.`,SHELL_NOT_3D:`The shell thickness may be too large for the shape. Try reducing thickness or removing problematic faces.`,OFFSET_NOT_3D:`The offset distance may be too large for the shape geometry. Try a smaller distance.`,DRAFT_FAILED:`The draft angle may be too large or the selected faces incompatible. Try a smaller angle or different faces.`};function vo(e){return _o[e]}function yo(e){for(let{pattern:t,translation:n}of go)if(t.test(e))return`${n} (kernel: ${e})`;return e}var M={BSPLINE_FAILED:`BSPLINE_FAILED`,FACE_BUILD_FAILED:`FACE_BUILD_FAILED`,SWEEP_FAILED:`SWEEP_FAILED`,LOFT_FAILED:`LOFT_FAILED`,FUSE_FAILED:`FUSE_FAILED`,CUT_FAILED:`CUT_FAILED`,HEAL_NO_EFFECT:`HEAL_NO_EFFECT`,BOOLEAN_HAS_ERRORS:`BOOLEAN_HAS_ERRORS`,VARIABLE_FILLET_FAILED:`VARIABLE_FILLET_FAILED`,POSITION_ON_CURVE_FAILED:`POSITION_ON_CURVE_FAILED`,FIX_SHAPE_FAILED:`FIX_SHAPE_FAILED`,SOLID_FROM_SHELL_FAILED:`SOLID_FROM_SHELL_FAILED`,FIX_SELF_INTERSECTION_FAILED:`FIX_SELF_INTERSECTION_FAILED`,ELLIPSE_RADII:`ELLIPSE_RADII`,FUSE_ALL_EMPTY:`FUSE_ALL_EMPTY`,FILLET_NO_EDGES:`FILLET_NO_EDGES`,CHAMFER_NO_EDGES:`CHAMFER_NO_EDGES`,CHAMFER_ANGLE_NO_EDGES:`CHAMFER_ANGLE_NO_EDGES`,CHAMFER_ANGLE_BAD_DISTANCE:`CHAMFER_ANGLE_BAD_DISTANCE`,CHAMFER_ANGLE_BAD_ANGLE:`CHAMFER_ANGLE_BAD_ANGLE`,BEZIER_MIN_POINTS:`BEZIER_MIN_POINTS`,POLYGON_MIN_POINTS:`POLYGON_MIN_POINTS`,ZERO_LENGTH_EXTRUSION:`ZERO_LENGTH_EXTRUSION`,ZERO_TWIST_ANGLE:`ZERO_TWIST_ANGLE`,LOFT_EMPTY:`LOFT_EMPTY`,UNSUPPORTED_PROFILE:`UNSUPPORTED_PROFILE`,UNKNOWN_PLANE:`UNKNOWN_PLANE`,NULL_SHAPE_INPUT:`NULL_SHAPE_INPUT`,INVALID_FILLET_RADIUS:`INVALID_FILLET_RADIUS`,INVALID_CHAMFER_DISTANCE:`INVALID_CHAMFER_DISTANCE`,INVALID_THICKNESS:`INVALID_THICKNESS`,ZERO_OFFSET:`ZERO_OFFSET`,NO_EDGES:`NO_EDGES`,NO_FACES:`NO_FACES`,DRAFT_NO_FACES:`DRAFT_NO_FACES`,DRAFT_INVALID_ANGLE:`DRAFT_INVALID_ANGLE`,DRAFT_NOT_3D:`DRAFT_NOT_3D`,DRAFT_FAILED:`DRAFT_FAILED`,FUSE_NOT_3D:`FUSE_NOT_3D`,CUT_NOT_3D:`CUT_NOT_3D`,INTERSECT_NOT_3D:`INTERSECT_NOT_3D`,FUSE_ALL_NOT_3D:`FUSE_ALL_NOT_3D`,CUT_ALL_NOT_3D:`CUT_ALL_NOT_3D`,LOFT_NOT_3D:`LOFT_NOT_3D`,SWEEP_NOT_3D:`SWEEP_NOT_3D`,REVOLUTION_NOT_3D:`REVOLUTION_NOT_3D`,FILLET_NOT_3D:`FILLET_NOT_3D`,CHAMFER_NOT_3D:`CHAMFER_NOT_3D`,CHAMFER_ANGLE_NOT_3D:`CHAMFER_ANGLE_NOT_3D`,CHAMFER_ANGLE_FAILED:`CHAMFER_ANGLE_FAILED`,CSG_NOT_3D:`CSG_NOT_3D`,SHELL_NOT_3D:`SHELL_NOT_3D`,OFFSET_NOT_3D:`OFFSET_NOT_3D`,NULL_SHAPE:`NULL_SHAPE`,NO_WRAPPER:`NO_WRAPPER`,WELD_NOT_SHELL:`WELD_NOT_SHELL`,SOLID_BUILD_FAILED:`SOLID_BUILD_FAILED`,OFFSET_NOT_WIRE:`OFFSET_NOT_WIRE`,UNKNOWN_SURFACE_TYPE:`UNKNOWN_SURFACE_TYPE`,UNKNOWN_CURVE_TYPE:`UNKNOWN_CURVE_TYPE`,SWEEP_START_NOT_WIRE:`SWEEP_START_NOT_WIRE`,SWEEP_END_NOT_WIRE:`SWEEP_END_NOT_WIRE`,STEP_EXPORT_FAILED:`STEP_EXPORT_FAILED`,STEP_EXPORT_CONFIGURED_FAILED:`STEP_EXPORT_CONFIGURED_FAILED`,STEP_FILE_READ_ERROR:`STEP_FILE_READ_ERROR`,STEP_EXPORT_CRASHED:`STEP_EXPORT_CRASHED`,STEP_EXPORT_UNSERIALIZABLE:`STEP_EXPORT_UNSERIALIZABLE`,STL_EXPORT_FAILED:`STL_EXPORT_FAILED`,STL_FILE_READ_ERROR:`STL_FILE_READ_ERROR`,STL_EXPORT_CRASHED:`STL_EXPORT_CRASHED`,STL_EXPORT_UNSERIALIZABLE:`STL_EXPORT_UNSERIALIZABLE`,STEP_IMPORT_FAILED:`STEP_IMPORT_FAILED`,STL_IMPORT_FAILED:`STL_IMPORT_FAILED`,IGES_EXPORT_FAILED:`IGES_EXPORT_FAILED`,IGES_IMPORT_FAILED:`IGES_IMPORT_FAILED`,DXF_IMPORT_FAILED:`DXF_IMPORT_FAILED`,OBJ_IMPORT_FAILED:`OBJ_IMPORT_FAILED`,THREEMF_IMPORT_FAILED:`THREEMF_IMPORT_FAILED`,PARAMETER_NOT_FOUND:`PARAMETER_NOT_FOUND`,INTERSECTION_FAILED:`INTERSECTION_FAILED`,SELF_INTERSECTION_FAILED:`SELF_INTERSECTION_FAILED`,STRAIGHT_SKELETON_FAILED:`STRAIGHT_SKELETON_FAILED`,CENTER_OF_MASS_FAILED:`CENTER_OF_MASS_FAILED`,COMPOUND_NO_FACES:`COMPOUND_NO_FACES`,COMPOUND_FACE_NOT_FOUND:`COMPOUND_FACE_NOT_FOUND`,FINDER_NOT_UNIQUE:`FINDER_NOT_UNIQUE`,HULL_EMPTY_INPUT:`HULL_EMPTY_INPUT`,HULL_FAILED:`HULL_FAILED`,HULL_DEGENERATE:`HULL_DEGENERATE`,HULL_NOT_3D:`HULL_NOT_3D`,MINKOWSKI_FAILED:`MINKOWSKI_FAILED`,MINKOWSKI_NULL_TOOL:`MINKOWSKI_NULL_TOOL`,MINKOWSKI_NOT_3D:`MINKOWSKI_NOT_3D`,POLYHEDRON_INSUFFICIENT_POINTS:`POLYHEDRON_INSUFFICIENT_POINTS`,POLYHEDRON_INSUFFICIENT_FACES:`POLYHEDRON_INSUFFICIENT_FACES`,POLYHEDRON_INVALID_INDEX:`POLYHEDRON_INVALID_INDEX`,POLYHEDRON_FAILED:`POLYHEDRON_FAILED`,VALIDATION_FAILED:`VALIDATION_FAILED`,ROOF_FAILED:`ROOF_FAILED`,MULTI_SWEEP_INSUFFICIENT_SECTIONS:`MULTI_SWEEP_INSUFFICIENT_SECTIONS`,MULTI_SWEEP_FAILED:`MULTI_SWEEP_FAILED`,GUIDED_SWEEP_FAILED:`GUIDED_SWEEP_FAILED`,SURFACE_GRID_TOO_SMALL:`SURFACE_GRID_TOO_SMALL`,SURFACE_GRID_JAGGED:`SURFACE_GRID_JAGGED`,SURFACE_FAILED:`SURFACE_FAILED`,ASSEMBLY_MATE_INVALID:`ASSEMBLY_MATE_INVALID`,ASSEMBLY_SOLVE_FAILED:`ASSEMBLY_SOLVE_FAILED`,ASSEMBLY_NOT_CONVERGED:`ASSEMBLY_NOT_CONVERGED`,BLUEPRINT_EMPTY_CURVES:`BLUEPRINT_EMPTY_CURVES`,COMPOUND_BLUEPRINT_EMPTY:`COMPOUND_BLUEPRINT_EMPTY`,GLB_IMPORT_FAILED:`GLB_IMPORT_FAILED`,FONT_FETCH_FAILED:`FONT_FETCH_FAILED`,FONT_PARSE_FAILED:`FONT_PARSE_FAILED`,NO_FONT_LOADED:`NO_FONT_LOADED`,CURVE2D_CONSTRUCTION_FAILED:`CURVE2D_CONSTRUCTION_FAILED`,CURVE2D_INVALID_RADIUS:`CURVE2D_INVALID_RADIUS`,CURVE2D_TRANSFORM_FAILED:`CURVE2D_TRANSFORM_FAILED`,CURVE2D_QUERY_FAILED:`CURVE2D_QUERY_FAILED`,CURVE2D_INTERSECTION_FAILED:`CURVE2D_INTERSECTION_FAILED`,CURVE2D_BRIDGE_FAILED:`CURVE2D_BRIDGE_FAILED`,CLONE_FAILED:`CLONE_FAILED`,SIMPLIFY_FAILED:`SIMPLIFY_FAILED`,TO_BREP_FAILED:`TO_BREP_FAILED`,UNSUPPORTED_CAPABILITY:`UNSUPPORTED_CAPABILITY`};function bo(e,t,n,r,i,a){let o={kind:e,code:t,message:n,cause:r};if(a){let e={...o,suggestion:a};return i?{...e,metadata:i}:e}return i?{...o,metadata:i}:o}function N(e,t,n,r,i){return bo(`KERNEL_OPERATION`,e,t,n,r,i)}function P(e,t,n,r,i){return bo(`VALIDATION`,e,t,n,r,i)}function xo(e,t,n,r,i){return bo(`TYPE_CAST`,e,t,n,r,i)}function So(e,t,n,r,i){return bo(`SKETCHER_STATE`,e,t,n,r,i)}function Co(e,t,n,r,i){return bo(`MODULE_INIT`,e,t,n,r,i)}function wo(e,t,n,r,i){return bo(`COMPUTATION`,e,t,n,r,i)}function To(e,t,n,r,i){return bo(`IO`,e,t,n,r,i)}function Eo(e,t,n,r,i){return bo(`QUERY`,e,t,n,r,i)}function Do(e,t,n,r,i){return bo(`UNSUPPORTED`,e,t,n,r,i)}function Oo(e,n,r){return(n<0||n>=e.length)&&i(r??`safeIndex`,`Index ${n} is out of bounds (array length ${e.length})`),t(e,n)}var ko={draft:{tolerance:.01,angularTolerance:.5},standard:{tolerance:.001,angularTolerance:.1},fine:{tolerance:1e-4,angularTolerance:.05}},Ao=`standard`;function jo(){return Ao}function Mo(e=Ao){return ko[e]}function No(e){Ao=e}function Po(e){return`makeLine2d`in e}var Fo=[`boolean`,`loft`,`extrude`,`shell`,`fillet`,`mesh`,`edgeMesh`,`transform`],Io=Object.create(null),Lo=Object.create(null);function Ro(){for(let e of Fo)Io[e]=0,Lo[e]=0}Ro();function zo(e){let t=performance.now();return()=>{Io[e]=(Io[e]??0)+(performance.now()-t),Lo[e]=(Lo[e]??0)+1}}function Bo(){let e={};for(let t of Fo)e[t]={totalMs:Io[t]??0,count:Lo[t]??0};return e}function Vo(){Ro()}var Ho;function Uo(){Ho=void 0}function Wo(e){return Ho??=typeof e.BooleanBatch==`function`,Ho}function Go(e){return e===`commonFace`?1:e===`sameFace`?2:0}function Ko(e,t,n={}){if(!Wo(e))return null;let r=zo(`boolean`),i=new e.BooleanBatch;try{for(let e of t)i.addShape(e);return i.fuseAll(Go(n.optimisation),!!n.simplify,n.fuzzyValue??0)}finally{i.delete(),r()}}function qo(e,t,n,r={}){if(!Wo(e))return null;if(n.length===0)return t;let i=zo(`boolean`),a=new e.BooleanBatch;try{for(let e of n)a.addShape(e);return a.cutAll(t,Go(r.optimisation),!!r.simplify,r.fuzzyValue??0)}finally{a.delete(),i()}}var Jo=2147483647,Yo;function Xo(){Yo=void 0}function Zo(e){return Yo??=typeof e.MeasurementExtractor?.extract==`function`,Yo}function Qo(e,t,n=!1){if(Zo(e)){let r=e.MeasurementExtractor.extract(t,n);try{let t=r.getDataPtr()/8,n=r.getDataSize(),i=e.HEAPF64.slice(t,t+n);return{volume:i[0]??0,area:i[1]??0,length:i[2]??0,centerOfMass:[i[3]??0,i[4]??0,i[5]??0],boundingBox:{min:[i[6]??0,i[7]??0,i[8]??0],max:[i[9]??0,i[10]??0,i[11]??0]}}}finally{r.delete()}}return{volume:$o(e,t),area:es(e,t),length:n?ts(e,t):0,centerOfMass:ns(e,t),boundingBox:is(e,t)}}function $o(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(t,n,!0,!1,!1);let r=n.Mass();return n.delete(),r}function es(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.SurfaceProperties_2(t,n,1e-7,!0);let r=n.Mass();return n.delete(),r}function ts(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.LinearProperties(t,n,!0,!1);let r=n.Mass();return n.delete(),r}function ns(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(t,n,!0,!1,!1);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function rs(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.LinearProperties(t,n,!0,!1);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function is(e,t){let n=new e.Bnd_Box;e.BRepBndLib.Add(t,n,!0);let r={min:[n.GetXMin(),n.GetYMin(),n.GetZMin()],max:[n.GetXMax(),n.GetYMax(),n.GetZMax()]};return n.delete(),r}function as(e,t,n){let r=new e.BRepExtrema_DistShapeShape_1;r.LoadS1(t),r.LoadS2(n);let i=new e.Message_ProgressRange_1;if(r.Perform(i),!r.IsDone())throw i.delete(),r.delete(),Error(`BRepExtrema_DistShapeShape failed`);let a=r.Value(),o=r.PointOnShape1(1),s=r.PointOnShape2(1),c={value:a,point1:[o.X(),o.Y(),o.Z()],point2:[s.X(),s.Y(),s.Z()]};return o.delete(),s.delete(),i.delete(),r.delete(),c}function os(e,t,n,r,i=1e-6){if(!e.BRepClass_FaceClassifier)throw Error(`BRepClass_FaceClassifier not available in this WASM build`);let a=new e.gp_Pnt2d_3(n,r),o=new e.BRepClass_FaceClassifier_3(t,a,i),s=o.State();a.delete(),o.delete();let c=e.TopAbs_State;return s===c.TopAbs_IN?`in`:s===c.TopAbs_ON?`on`:`out`}function ss(e){return{volume:t=>$o(e,t),area:t=>es(e,t),length:t=>ts(e,t),centerOfMass:t=>ns(e,t),linearCenterOfMass:t=>rs(e,t),boundingBox:t=>is(e,t),distance:(t,n)=>as(e,t,n),classifyPointOnFace:(t,n,r,i)=>os(e,t,n,r,i),measureBulk:(t,n)=>Qo(e,t,n)}}var cs={vertex:7,edge:6,wire:5,face:4,shell:3,solid:2,compsolid:1,compound:0};function ls(e,t,n){let r=e.TopologyExtractor.extract(t,cs[n]),i=r.getShapesCount(),a=[];for(let e=0;e<i;e++)a.push(r.getShape(e));return r.delete(),a}var us=new WeakMap;function ds(e,t,n){let r=us.get(e);if(!r){let t=e.TopAbs_ShapeEnum;r={vertex:t.TopAbs_VERTEX,edge:t.TopAbs_EDGE,wire:t.TopAbs_WIRE,face:t.TopAbs_FACE,shell:t.TopAbs_SHELL,solid:t.TopAbs_SOLID,compsolid:t.TopAbs_COMPSOLID,compound:t.TopAbs_COMPOUND},us.set(e,r)}let i=new e.TopExp_Explorer_2(t,r[n],e.TopAbs_ShapeEnum.TopAbs_SHAPE),a=[],o=new Map;for(;i.More();){let t=i.Current(),n=e.shapeHashCode(t,Jo),r=o.get(n);r?r.some(e=>e.IsSame(t))||(r.push(t),a.push(t)):(o.set(n,[t]),a.push(t)),i.Next()}return i.delete(),a}function fs(e,t,n){return e.TopologyExtractor?ls(e,t,n):ds(e,t,n)}var ps=new WeakMap;function ms(e){let t=ps.get(e);if(!t){let n=e.TopAbs_ShapeEnum;t=new Map([[n.TopAbs_VERTEX,`vertex`],[n.TopAbs_EDGE,`edge`],[n.TopAbs_WIRE,`wire`],[n.TopAbs_FACE,`face`],[n.TopAbs_SHELL,`shell`],[n.TopAbs_SOLID,`solid`],[n.TopAbs_COMPSOLID,`compsolid`],[n.TopAbs_COMPOUND,`compound`]]),ps.set(e,t)}return t}function hs(e,t){if(t.IsNull())throw Error(`Cannot determine shape type: shape is null`);let n=ms(e).get(t.ShapeType());if(!n)throw Error(`Unknown shape type enum value`);return n}function gs(e,t){let n=new e.BRepCheck_Analyzer(t,!0,!1,!1),r=n.IsValid_2();return n.delete(),r}function _s(e,t,n=1e-6){let r=new e.BRepBuilderAPI_Sewing(n,!0,!0,!0,!1);for(let e of t)r.Add(e);let i=new e.Message_ProgressRange_1;r.Perform(i);let a=r.SewedShape();return i.delete(),r.delete(),a}function vs(e,t,n){if(e.TopTools_ListIteratorOfListOfShape){let r=new e.TopTools_ListIteratorOfListOfShape(t);for(;r.More();)n(r.Value()),r.Next();r.delete()}else{let r=new e.TopTools_ListOfShape_3(t);for(;r.Size()>0;)n(r.First_1()),r.RemoveFirst();r.delete()}}function ys(e,t){return e.IsSame(t)}function bs(e,t){return e.IsEqual(t)}function xs(e){return{iterShapes:(t,n)=>fs(e,t,n),iterShapeList:(t,n)=>{vs(e,t,n)},shapeType:t=>hs(e,t),isSame:(e,t)=>ys(e,t),isEqual:(e,t)=>bs(e,t),isValid:t=>gs(e,t),sew:(t,n)=>_s(e,t,n)}}var Ss=.001;function Cs(e,t,n){n===`commonFace`&&t.SetGlue(e.BOPAlgo_GlueEnum.BOPAlgo_GlueShift),n===`sameFace`&&t.SetGlue(e.BOPAlgo_GlueEnum.BOPAlgo_GlueFull)}function ws(e,t){e.SetRunParallel(!0),e.SetUseOBB?.(!0),t!==void 0&&t>0&&e.SetFuzzyValue?.(t)}function Ts(e,t){if(t.length<3)return 0;let n=t[0];if(!n)return 0;let r=new e.Bnd_Box;if(e.BRepBndLib.Add(n,r,!0),r.IsVoid())return r.delete(),0;let i=r.CornerMin(),a=r.CornerMax(),o=a.X()-i.X(),s=a.Y()-i.Y(),c=a.Z()-i.Z();return i.delete(),a.delete(),r.delete(),Math.sqrt(o*o+s*s+c*c)>1?1e-5:0}function Es(e,t){let n=new e.TopoDS_Builder,r=new e.TopoDS_Compound;n.MakeCompound(r);for(let e of t)n.Add(r,e);return n.delete(),r}function Ds(e,t,n,r={}){let i=zo(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Fuse_3(t,n,s);Cs(e,c,i),ws(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,Ss);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function Os(e,t,n,r={}){let i=zo(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Cut_3(t,n,s);Cs(e,c,i),ws(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,Ss);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function ks(e,t,n,r={}){let i=zo(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Common_3(t,n,s);Cs(e,c,i),ws(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,Ss);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function As(e,t,n,r=!0){let i=new e.Message_ProgressRange_1,a=new e.BRepAlgoAPI_Section_3(t,n,!1);if(a.Approximation(r),ws(a),a.Build(i),!a.IsDone())throw a.delete(),i.delete(),Error(`BRepAlgoAPI_Section build failed`);let o=a.Shape();return a.delete(),i.delete(),o}function js(e,t,n={}){let r=Ko(e,t,n);if(r!==null)return r;let i=zo(`boolean`);try{let{optimisation:r,simplify:i=!1}=n,a=n.fuzzyValue??Ts(e,t),o=new e.TopTools_ListOfShape_1;for(let e of t)o.Append_1(e);let s=new e.BRepAlgoAPI_BuilderAlgo_1;s.SetArguments(o),Cs(e,s,r),ws(s,a);let c=new e.Message_ProgressRange_1;s.Build(c);let l=s.Shape();if(i){let t=new e.ShapeUpgrade_UnifySameDomain_2(l,!0,!0,!1);t.Build(),l=t.Shape(),t.delete()}return o.delete(),s.delete(),c.delete(),l}finally{i()}}function Ms(e,n,r,i,a){a.signal?.throwIfAborted();let o=i-r;if(o===1)return t(n,r);if(o===2)return Ds(e,n[r],n[r+1],{...a,simplify:!1});let s=r+Math.ceil(o/2);return Ds(e,Ms(e,n,r,s,a),Ms(e,n,s,i,a),{...a,simplify:!1})}function Ns(e,t,n={}){let r=Ms(e,t,0,t.length,n);if(n.simplify){let t=new e.ShapeUpgrade_UnifySameDomain_2(r,!0,!0,!1);t.Build();let n=t.Shape();return t.delete(),n}return r}function Ps(e,n,r={}){if(n.length===0)throw Error(`fuseAll requires at least one shape`);if(n.length===1)return t(n,0);let{strategy:i=`native`}=r;return i===`pairwise`?Ns(e,n,r):js(e,n,r)}function Fs(e,t,n){if(!e.BRepAlgoAPI_Splitter)throw Error(`BRepAlgoAPI_Splitter not available in this WASM build`);let r=new e.TopTools_ListOfShape_1;r.Append_1(t);let i=new e.TopTools_ListOfShape_1;for(let e of n)i.Append_1(e);let a=new e.BRepAlgoAPI_Splitter;a.SetArguments(r),a.SetTools(i),ws(a);let o=new e.Message_ProgressRange_1;a.Build(o);let s=a.Shape();return a.delete(),o.delete(),r.delete(),i.delete(),s}function Is(e,t,n,r={}){if(n.length===0)return t;let i=qo(e,t,n,r);if(i!==null)return i;let a=Es(e,n),o=Os(e,t,a,r);return a.delete(),o}function Ls(e,t,n,r,i){let a=[];return t.IsNull()&&a.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),n.IsNull()&&a.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is null`}),a.length>0?{valid:!1,issues:a}:(i(t)||a.push({operand:`base`,issue:`not-valid`,message:`Base shape fails BRepCheck validation. Try autoHeal() first.`}),i(n)||a.push({operand:`tool`,issue:`not-valid`,message:`Tool shape fails BRepCheck validation. Try autoHeal() first.`}),{valid:a.length===0,issues:a})}function Rs(e){return{fuse:(t,n,r)=>Ds(e,t,n,r),cut:(t,n,r)=>Os(e,t,n,r),intersect:(t,n,r)=>ks(e,t,n,r),section:(t,n,r)=>As(e,t,n,r),fuseAll:(t,n)=>Ps(e,t,n),cutAll:(t,n,r)=>Is(e,t,n,r),split:(t,n)=>Fs(e,t,n),checkBoolean:(t,n,r)=>Ls(e,t,n,r,t=>gs(e,t))}}var zs={fuse:0,cut:1,intersect:2};function Bs(e,t,n,r={}){let{glueMode:i=0,fuzzyValue:a=0}=r;if(typeof e.BooleanPipeline==`function`){let r=new e.BooleanPipeline;try{for(let e of n)r.addStep(zs[e.op],e.tool);let e=r.execute(t,i,a);return e.IsNull()?null:e}finally{r.delete()}}}function Vs(e){return{booleanPipeline:(t,n,r)=>Bs(e,t,n,r)??null}}function Hs(e,t,n,r){let i=new e.gp_Pnt_3(t,n,r),a=new e.BRepBuilderAPI_MakeVertex(i),o=a.Vertex();return a.delete(),i.delete(),o}function Us(e,t,n,r){let i=n!==void 0&&r!==void 0?new e.BRepBuilderAPI_MakeEdge_24(t,n,r):new e.BRepBuilderAPI_MakeEdge_24(t),a=i.Edge();return i.delete(),a}function Ws(e,t){let n=new e.BRepBuilderAPI_MakeWire_1;for(let e of t)n.Add_1(e);let r=new e.Message_ProgressRange_1;n.Build(r);let i=n.Wire();return n.delete(),r.delete(),i}function Gs(e,t,n=!0){if(n){let n=new e.BRepBuilderAPI_MakeFace_15(t,!1),r=n.Face();return n.delete(),r}let r=new e.BRepOffsetAPI_MakeFilling(3,15,2,!1,1e-5,1e-4,.01,.1,8,9),i=fs(e,t,`edge`);for(let t of i)r.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,!0);let a=new e.Message_ProgressRange_1;r.Build(a);let o=r.Shape();return r.delete(),a.delete(),o}function Ks(e,t,n,r){let i=new e.BRepPrimAPI_MakeBox_2(t,n,r),a=i.Solid();return i.delete(),a}function qs(e,t,n,r=[0,0,0],i=[0,0,1]){let a=new e.gp_Pnt_3(...r),o=new e.gp_Dir_5(...i),s=new e.gp_Ax2_4(a,o),c=new e.BRepPrimAPI_MakeCylinder_3(s,t,n),l=c.Shape();return c.delete(),s.delete(),a.delete(),o.delete(),l}function Js(e,t,n=[0,0,0]){if(n[0]===0&&n[1]===0&&n[2]===0){let n=new e.BRepPrimAPI_MakeSphere_1(t),r=n.Shape();return n.delete(),r}let r=new e.gp_Pnt_3(...n),i=new e.BRepPrimAPI_MakeSphere_2(r,t),a=i.Shape();return i.delete(),r.delete(),a}function Ys(e,t,n,r,i=[0,0,0],a=[0,0,1]){let o=new e.gp_Pnt_3(...i),s=new e.gp_Dir_5(...a),c=new e.gp_Ax2_4(o,s),l=new e.BRepPrimAPI_MakeCone_3(c,t,n,r),u=l.Shape();return l.delete(),c.delete(),o.delete(),s.delete(),u}function Xs(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.BRepBuilderAPI_MakeEdge_3(i,a),c=new e.BRepBuilderAPI_MakeEdge_3(a,o),l=new e.BRepBuilderAPI_MakeEdge_3(o,i),u=new e.BRepBuilderAPI_MakeWire_1;u.Add_1(s.Edge()),u.Add_1(c.Edge()),u.Add_1(l.Edge());let d=null;if(u.IsDone()){let t=new e.BRepBuilderAPI_MakeFace_15(u.Wire(),!1);t.IsDone()&&(d=t.Face()),t.delete()}return u.delete(),s.delete(),c.delete(),l.delete(),i.delete(),a.delete(),o.delete(),d}function Zs(e,t){let n=new e.BRepBuilderAPI_MakeWire_1;for(let r of t){let t=r.ShapeType();t===e.TopAbs_ShapeEnum.TopAbs_EDGE?n.Add_1(r):t===e.TopAbs_ShapeEnum.TopAbs_WIRE&&n.Add_2(r)}let r=new e.Message_ProgressRange_1;n.Build(r);let i=n.Wire();return n.delete(),r.delete(),i}function Qs(e,t,n,r=[0,0,0],i=[0,0,1]){let a=new e.gp_Pnt_3(...r),o=new e.gp_Dir_5(...i),s=new e.gp_Ax2_4(a,o),c=new e.BRepPrimAPI_MakeTorus_5(s,t,n),l=c.Shape();return c.delete(),s.delete(),a.delete(),o.delete(),l}function $s(e){return{makeVertex:(t,n,r)=>Hs(e,t,n,r),makeEdge:(t,n,r)=>Us(e,t,n,r),makeWire:t=>Ws(e,t),makeWireFromMixed:t=>Zs(e,t),makeFace:(t,n)=>Gs(e,t,n),makeBox:(t,n,r)=>Ks(e,t,n,r),makeCylinder:(t,n,r,i)=>qs(e,t,n,r,i),makeSphere:(t,n)=>Js(e,t,n),makeCone:(t,n,r,i,a)=>Ys(e,t,n,r,i,a),makeTorus:(t,n,r,i)=>Qs(e,t,n,r,i),buildTriFace:(t,n,r)=>Xs(e,t,n,r)}}function ec(e,t){let n=e[t];if(n===void 0)throw Error(`Index ${t} out of bounds`);return n}function tc(e,t,n){let r=[],i=Math.max(n,1);for(let n of t){new e.BRepMesh_IncrementalMeshWrapper(n,i,!1,i*.5,!1).delete();let t=new e.TopExp_Explorer_2(n,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;t.More();){let n=e.TopoDS_Cast.Face(t.Current()),i=new e.TopLoc_Location_1,a=e.BRep_Tool_Triangulation(n,i,0);if(!a.IsNull()){let e=i.Transformation(),t=a.get().NbNodes();for(let n=1;n<=t;n++){let t=a.get().Node(n),i=t.Transformed(e);r.push({x:i.X(),y:i.Y(),z:i.Z()}),i.delete(),t.delete()}e.delete()}i.delete(),t.Next()}t.delete()}return r}function nc(e,t,n){let{faces:r,points:i}=t,a=[];for(let[t,n,o]of r){let r=ec(i,t),s=ec(i,n),c=ec(i,o),l=Xs(e,[r.x,r.y,r.z],[s.x,s.y,s.z],[c.x,c.y,c.z]);l!==null&&a.push(l)}if(a.length<4)throw Error(`hull: only ${a.length} faces built, need at least 4 for a solid`);let o=Math.max(n,1e-4),s=new e.BRepBuilderAPI_Sewing(o,!0,!0,!0,!1);for(let e of a)s.Add(e);let c=new e.Message_ProgressRange_1;s.Perform(c),c.delete();let l=s.SewedShape();s.delete();let u=new e.TopExp_Explorer_2(l,e.TopAbs_ShapeEnum.TopAbs_SHELL,e.TopAbs_ShapeEnum.TopAbs_SHAPE);if(u.More()){let t=e.TopoDS_Cast.Shell(u.Current());u.delete();let n=new e.BRepBuilderAPI_MakeSolid_1;n.Add(t);let r=new e.Message_ProgressRange_1;if(n.Build(r),r.delete(),n.IsDone()){let r=n.Solid();n.delete(),t.delete();let i=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(r,i,!1,!1,!1);let a=i.Mass();return i.delete(),a<0&&r.Complement(),r}return t.delete(),n.delete(),l}return u.delete(),l}function rc(e,t,n){if(t.length===0)throw Error(`hull: no shapes provided`);let r=tc(e,t,n);if(r.length<4)throw Error(`hull: fewer than 4 vertices extracted from input shapes`);let i=x(r,n);if(i.faces.length<4)throw Error(`hull: degenerate hull (fewer than 4 faces)`);return nc(e,i,n)}function ic(e,t,n,r){return nc(e,{points:t,faces:n},r)}function ac(e,t,n){if(t.length<4)throw Error(`hullFromPoints: fewer than 4 points`);let r=x(t,n);if(r.faces.length<4)throw Error(`hullFromPoints: degenerate hull (fewer than 4 faces)`);return nc(e,r,n)}function oc(e){return{hull:(t,n)=>rc(e,t,n),hullFromPoints:(t,n)=>ac(e,t,n),buildSolidFromFaces:(t,n,r)=>ic(e,t,n,r)}}function sc(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepBuilderAPI_MakeEdge_3(r,i),o=a.Edge();return a.delete(),r.delete(),i.delete(),o}function cc(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Dir_5(n[0],n[1],n[2]),o=new e.gp_Ax2_4(i,a),s=new e.gp_Circ_2(o,r),c=new e.BRepBuilderAPI_MakeEdge_8(s),l=c.Edge();return c.delete(),s.delete(),o.delete(),a.delete(),i.delete(),l}function lc(e,t,n,r,i,a){let o=new e.gp_Pnt_3(t[0],t[1],t[2]),s=new e.gp_Dir_5(n[0],n[1],n[2]),c=new e.gp_Ax2_4(o,s),l=new e.gp_Circ_2(c,r),u=new e.BRepBuilderAPI_MakeEdge_9(l,i,a),d=u.Edge();return u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),d}function uc(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_4(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function dc(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Vec_4(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_5(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function fc(e,t,n,r,i,a){let o=new e.gp_Pnt_3(t[0],t[1],t[2]),s=new e.gp_Dir_5(n[0],n[1],n[2]),c;if(a){let t=new e.gp_Dir_5(a[0],a[1],a[2]);c=new e.gp_Ax2_2(o,s,t),t.delete()}else c=new e.gp_Ax2_4(o,s);let l=new e.gp_Elips_2(c,r,i),u=new e.BRepBuilderAPI_MakeEdge_12(l),d=u.Edge();return u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),d}function pc(e,t,n,r,i,a,o,s){let c=new e.gp_Pnt_3(t[0],t[1],t[2]),l=new e.gp_Dir_5(n[0],n[1],n[2]),u;if(s){let t=new e.gp_Dir_5(s[0],s[1],s[2]);u=new e.gp_Ax2_2(c,l,t),t.delete()}else u=new e.gp_Ax2_4(c,l);let d=new e.gp_Elips_2(u,r,i),f=new e.BRepBuilderAPI_MakeEdge_13(d,a,o),p=f.Edge();return f.delete(),d.delete(),u.delete(),l.delete(),c.delete(),p}function mc(e,n){let r=new e.TColgp_Array1OfPnt_2(1,n.length);for(let i=0;i<n.length;i++){let a=t(n,i),o=new e.gp_Pnt_3(a[0],a[1],a[2]);r.SetValue_1(i+1,o),o.delete()}let i=new e.Geom_BezierCurve_1(r),a=new e.Handle_Geom_Curve_2(i),o=new e.BRepBuilderAPI_MakeEdge_24(a),s=o.Edge();return o.delete(),a.delete(),r.delete(),s}function hc(e,t,n,r,i=[0,0,0],a=[0,0,1],o=!1){let s=e.HelixWireBuilder;if(typeof s?.build==`function`){let e=s.build(r,t,n,i[0],i[1],i[2],a[0],a[1],a[2],o);if(!e.IsNull())return e}let c=n/t,l=o?-2*Math.PI:2*Math.PI,u=new e.gp_Pnt_3(i[0],i[1],i[2]),d=new e.gp_Dir_5(a[0],a[1],a[2]),f=new e.gp_Ax3_5(u,d),p=new e.Geom_CylindricalSurface_1(f,r);f.delete();let m=new e.gp_Pnt2d_3(0,0),h=new e.gp_Dir2d_5(l,t),g=new e.Geom2d_Line_3(m,h),_=g.Value(0),v=g.Value(c*Math.sqrt((2*Math.PI)**2+t**2)),y=new e.GCE2d_MakeSegment_1(_,v),b=new e.Handle_Geom2d_Curve_2(y.Value().get()),x=new e.Handle_Geom_Surface_2(p),S=new e.BRepBuilderAPI_MakeEdge_30(b,x),C=S.Edge();e.BRepLib.BuildCurves3d_2(C);let w=new e.BRepBuilderAPI_MakeWire_2(C),ee=w.Wire();return w.delete(),S.delete(),b.delete(),x.delete(),_.delete(),v.delete(),g.delete(),m.delete(),h.delete(),d.delete(),u.delete(),ee}function gc(e,t,n,r){let i=Math.sqrt(t*n/r),a=t/i,o=n/i,s=new e.gp_Pnt_3(0,0,0),c=new e.gp_Dir_5(0,1,0),l=new e.gp_Ax1_2(s,c),u=new e.gp_Dir_5(0,0,1),d=new e.gp_Ax1_2(s,u),f=new e.gp_Dir_5(1,0,0),p=new e.gp_Ax1_2(s,f),m=new e.gp_GTrsf_1;m.SetAffinity_1(l,a);let h=new e.gp_GTrsf_1;h.SetAffinity_1(d,i);let g=new e.gp_GTrsf_1;return g.SetAffinity_1(p,o),m.Multiply(h),m.Multiply(g),h.delete(),g.delete(),l.delete(),d.delete(),p.delete(),c.delete(),u.delete(),f.delete(),s.delete(),{transform:m,applyToPoint(t){let n=t.XYZ();m.Transforms_1(n);let r=new e.gp_Pnt_2(n);return n.delete(),r}}}function _c(e,t,n,r){let i=new e.gp_Sphere_1;i.SetRadius(1);let a=new e.Geom_SphericalSurface_2(i),o=e.GeomConvert.SurfaceToBSplineSurface(a.UReversed()).get();i.delete(),a.delete();try{let i=gc(e,t,n,r),a=o.NbUPoles(),s=o.NbVPoles();for(let t=1;t<=a;t++)for(let n=1;n<=s;n++){let r=e.bsplineSurfacePole(o,t,n),a=i.applyToPoint(r);o.SetPole_1(t,n,a),r.delete(),a.delete()}i.transform.delete();let c=new e.BRepBuilderAPI_MakeShell_2(o.UReversed(),!1),l=c.Shell();c.delete();let u=new e.ShapeFix_Solid_1,d=u.SolidFromShell(l);return u.delete(),d}finally{o.delete()}}function vc(e,t){let n=new e.TopoDS_Builder,r=new e.TopoDS_Compound;n.MakeCompound(r);for(let e of t)n.Add(r,e);return n.delete(),r}function yc(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepPrimAPI_MakeBox_4(r,i),o=a.Solid();return a.delete(),r.delete(),i.delete(),o}function bc(e,t){let n=new e.ShapeFix_Solid_1,r=n.SolidFromShell(e.TopoDS_Cast.Shell(t));return n.delete(),r}function xc(e,t){return e.BRepToolsWrapper.Write(t)}function Sc(e,t){return e.BRepToolsWrapper.Read(t)}function Cc(e,t,n={}){let r=n.unit??`MM`;e.Interface_Static.SetCVal(`xstep.cascade.unit`,r),e.Interface_Static.SetCVal(`write.step.unit`,r),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,5),new e.STEPCAFControl_Writer_1().delete();let i=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),a=new e.TDocStd_Document(i);i.delete();let o=a.Main(),s=e.XCAFDoc_DocumentTool.ShapeTool(o).get(),c=e.XCAFDoc_DocumentTool.ColorTool(o).get();e.XCAFDoc_ShapeTool.SetAutoNaming(!1);for(let n of t){let t=s.AddShape(n.shape,!1,!0),r=new e.TCollection_ExtendedString_2(n.name,!0);if(e.TDataStd_Name.Set_1(t,r),r.delete(),n.color){let[r,i,a,o]=n.color,s=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,o/255);c.SetColor_6(t,s,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),s.delete()}}let l=new e.XSControl_WorkSession,u=new e.Handle_XSControl_WorkSession_2(l),d=new e.STEPCAFControl_Writer_2(u,!1),f=new e.Handle_TDocStd_Document_2(a),p=new e.Message_ProgressRange_1;d.Transfer_1(f,e.STEPControl_StepModelType.STEPControl_AsIs,null,p),p.delete();let m=`assembly_export_${Date.now()}.step`,h=d.Write_1(m),g=``;if(h===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+m);g=new TextDecoder().decode(t),e.FS.unlink(`/`+m)}return d.delete(),u.delete(),f.delete(),a.delete(),g}function wc(e,t){try{t.delete()}catch{}}function Tc(e,t,n){let r=sc(e,[0,0,0],[t,0,0]),i=sc(e,[t,0,0],[t,n,0]),a=sc(e,[t,n,0],[0,n,0]),o=sc(e,[0,n,0],[0,0,0]),s=new e.BRepBuilderAPI_MakeWire_1;s.Add_1(r),s.Add_1(i),s.Add_1(a),s.Add_1(o);let c=s.Wire();s.delete(),r.delete(),i.delete(),a.delete(),o.delete();let l=new e.BRepBuilderAPI_MakeFace_15(c,!1),u=l.Face();return l.delete(),u}function Ec(e,t,n,r){return new e.gp_Pnt_3(t,n,r)}function Dc(e,t,n,r){return new e.gp_Dir_5(t,n,r)}function Oc(e,t,n,r){return new e.gp_Vec_4(t,n,r)}function kc(e,t,n,r,i,a,o){let s=new e.gp_Pnt_3(t,n,r),c=new e.gp_Dir_5(i,a,o),l=new e.gp_Ax1_2(s,c);return s.delete(),c.delete(),l}function Ac(e,t,n,r,i,a,o,s,c,l){let u=new e.gp_Pnt_3(t,n,r),d=new e.gp_Dir_5(i,a,o),f;if(s!==void 0&&c!==void 0&&l!==void 0){let t=new e.gp_Dir_5(s,c,l);f=new e.gp_Ax2_2(u,d,t),t.delete()}else f=new e.gp_Ax2_4(u,d);return u.delete(),d.delete(),f}function jc(e,t,n,r,i,a,o,s,c,l){let u=new e.gp_Pnt_3(t,n,r),d=new e.gp_Dir_5(i,a,o),f;if(s!==void 0&&c!==void 0&&l!==void 0){let t=new e.gp_Dir_5(s,c,l);f=new e.gp_Ax3_3(u,d,t),t.delete()}else f=new e.gp_Ax3_5(u,d);return u.delete(),d.delete(),f}function Mc(e){return{makeLineEdge:(t,n)=>sc(e,t,n),makeCircleEdge:(t,n,r)=>cc(e,t,n,r),makeCircleArc:(t,n,r,i,a)=>lc(e,t,n,r,i,a),makeArcEdge:(t,n,r)=>uc(e,t,n,r),makeEllipseEdge:(t,n,r,i,a)=>fc(e,t,n,r,i,a),makeEllipseArc:(t,n,r,i,a,o,s)=>pc(e,t,n,r,i,a,o,s),makeBezierEdge:t=>mc(e,t),makeTangentArc:(t,n,r)=>dc(e,t,n,r),makeHelixWire:(t,n,r,i,a,o)=>hc(e,t,n,r,i,a,o),makeCompound:t=>vc(e,t),makeBoxFromCorners:(t,n)=>yc(e,t,n),makeRectangle:(t,n)=>Tc(e,t,n),solidFromShell:t=>bc(e,t),makeEllipsoid:(t,n,r)=>_c(e,t,n,r),toBREP:t=>xc(e,t),fromBREP:t=>Sc(e,t),exportSTEPAssembly:(t,n)=>Cc(e,t,n??{}),dispose:t=>{wc(e,t)},createPoint3d:(t,n,r)=>Ec(e,t,n,r),createDirection3d:(t,n,r)=>Dc(e,t,n,r),createVector3d:(t,n,r)=>Oc(e,t,n,r),createAxis1:(t,n,r,i,a,o)=>kc(e,t,n,r,i,a,o),createAxis2:(t,n,r,i,a,o,s,c,l)=>Ac(e,t,n,r,i,a,o,s,c,l),createAxis3:(t,n,r,i,a,o,s,c,l)=>jc(e,t,n,r,i,a,o,s,c,l)}}function Nc(e,t,n,r){let i=zo(`extrude`);try{let i=new e.gp_Vec_4(n[0]*r,n[1]*r,n[2]*r),a=new e.BRepPrimAPI_MakePrism_1(t,i,!1,!0),o=a.Shape();return a.delete(),i.delete(),o}finally{i()}}function Pc(e,t,n,r){let i=new e.BRepPrimAPI_MakeRevol_1(t,n,r,!1),a=i.Shape();return i.delete(),a}function Fc(e,t,n=!1,r,i){let a=zo(`loft`);try{let a=new e.BRepOffsetAPI_ThruSections(!0,n,1e-6);r&&a.AddVertex(r);for(let e of t)a.AddWire(e);i&&a.AddVertex(i);let o=new e.Message_ProgressRange_1;a.Build(o);let s=a.Shape();return a.delete(),o.delete(),s}finally{a()}}function Ic(e,t,n,r={}){let{transitionMode:i}=r,a=new e.BRepOffsetAPI_MakePipeShell(n);typeof a.SetIsBuildHistory==`function`&&a.SetIsBuildHistory(!1),i!==void 0&&a.SetTransitionMode(i),a.Add_1(t,!1,!1);let o=new e.Message_ProgressRange_1;if(a.Build(o),o.delete(),!a.IsDone())throw a.delete(),Error(`Sweep build failed (IsDone=false)`);a.MakeSolid();let s=a.Shape();return a.delete(),s}function Lc(e,t,n){let r=new e.BRepOffsetAPI_MakePipe_1(n,t),i=new e.Message_ProgressRange_1;r.Build(i),i.delete();let a=r.Shape();if(a.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_SHELL){let t=new e.BRepBuilderAPI_MakeSolid_1,n=e.TopoDS_Cast.Shell(a);t.Add(n);let i=new e.Message_ProgressRange_1;t.Build(i),i.delete();let o=a;if(t.IsDone()){let n=t.Solid(),r=new e.BRepCheck_Analyzer(n,!0,!1,!1);r.IsValid_2()?o=n:n.delete(),r.delete()}return n.delete(),t.delete(),r.delete(),o}return r.delete(),a}var Rc,zc;function Bc(){Rc=void 0}function Vc(){zc=void 0}function Hc(e){return Rc??=typeof e.LoftBatch==`function`,Rc}function Uc(e){return zc??=typeof e.ExtrudeBatch==`function`,zc}function Wc(e,t){if(t.length===0)return[];if(Hc(e)){let n=zo(`loft`),r=new e.LoftBatch;try{for(let e of t){let t=r.beginLoft(e.solid??!0,e.ruled??!1,e.tolerance??1e-6);e.startVertex&&r.setStartVertex(t,e.startVertex);for(let n of e.wires)r.addWire(t,n);e.endVertex&&r.setEndVertex(t,e.endVertex)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>Fc(e,t.wires,t.ruled??!1,t.startVertex,t.endVertex))}function Gc(e,t){if(t.length===0)return[];if(Uc(e)){let n=zo(`extrude`),r=new e.ExtrudeBatch;try{for(let e of t)r.addExtrude(e.face,e.direction[0]*e.length,e.direction[1]*e.length,e.direction[2]*e.length);let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>Nc(e,t.face,t.direction,t.length))}function Kc(e){return{extrude:(t,n,r)=>Nc(e,t,n,r),revolve:(t,n,r)=>Pc(e,t,n,r),loft:(t,n,r,i)=>Fc(e,t,n,r,i),sweep:(t,n,r)=>Ic(e,t,n,r??{}),simplePipe:(t,n)=>Lc(e,t,n),loftBatch:t=>Wc(e,t),extrudeBatch:t=>Gc(e,t)}}function qc(e,t,n,r){let i=zo(`fillet`);try{let i=new e.BRepFilletAPI_MakeFillet(t,e.ChFi3d_FilletShape.ChFi3d_Rational);for(let t of n){let n=typeof r==`function`?r(t):r,a=e.TopoDS_Cast.Edge(t);if(typeof n==`number`)n>0&&i.Add_2(n,a);else{let[e,t]=n;e>0&&t>0&&i.Add_3(e,t,a)}}let a=i.Shape();return i.delete(),a}finally{i()}}function Jc(e,t,n,r){let i=new e.BRepFilletAPI_MakeChamfer(t),a=null;function o(){if(a)return a;a=new Map;let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let t=e.TopoDS_Cast.Face(n.Current()),r=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;r.More();){let n=e.shapeHashCode(r.Current(),2147483647);a.has(n)||a.set(n,t),r.Next()}r.delete(),n.Next()}return n.delete(),a}function s(t){return o().get(e.shapeHashCode(t,2147483647))??null}for(let t of n){let n=typeof r==`function`?r(t):r,a=e.TopoDS_Cast.Edge(t);if(typeof n==`number`)n>0&&i.Add_2(n,a);else{let[e,r]=n;if(e>0&&r>0){let n=s(t);n&&i.Add_3(e,r,a,n)}}}let c=i.Shape();return i.delete(),c}function Yc(e,t,n,r,i=.001){let a=zo(`shell`);try{let a=new e.TopTools_ListOfShape_1;for(let e of n)a.Append_1(e);let o=new e.Message_ProgressRange_1,s=new e.BRepOffsetAPI_MakeThickSolid;s.MakeThickSolidByJoin(t,a,-r,i,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,o);let c=s.Shape();return s.delete(),a.delete(),o.delete(),c}finally{a()}}function Xc(e,t,n){let r=new e.BRepOffsetAPI_MakeThickSolid;r.MakeThickSolidBySimple(t,n);let i=new e.Message_ProgressRange_1;r.Build(i);let a=r.Shape();return r.delete(),i.delete(),a}function Zc(e,t,n,r,i){let a=new e.BRepFilletAPI_MakeChamfer(t),o=i*Math.PI/180,s=new Map,c=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;c.More();){let t=e.TopoDS_Cast.Face(c.Current()),n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let r=e.shapeHashCode(n.Current(),2147483647);s.has(r)||s.set(r,t),n.Next()}n.delete(),c.Next()}c.delete();for(let t of n){let n=s.get(e.shapeHashCode(t,2147483647))??null;n&&r>0&&a.AddDA(r,o,e.TopoDS_Cast.Edge(t),n)}let l=a.Shape();return a.delete(),l}function Qc(e,t,n,r){let i;i=typeof r==`string`?{arc:e.GeomAbs_JoinType.GeomAbs_Arc,intersection:e.GeomAbs_JoinType.GeomAbs_Intersection,tangent:e.GeomAbs_JoinType.GeomAbs_Tangent}[r]??e.GeomAbs_JoinType.GeomAbs_Arc:r??e.GeomAbs_JoinType.GeomAbs_Arc;let a=new e.BRepOffsetAPI_MakeOffset_3(t,i,!1);a.Perform(n,0);let o=a.Shape();return a.delete(),o}function $c(e,t,n,r=1e-6){let i=new e.Message_ProgressRange_1,a=new e.BRepOffsetAPI_MakeOffsetShape;a.PerformByJoin(t,n,r,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,i);let o=a.Shape();return a.delete(),i.delete(),o}var el,tl;function nl(){el=void 0}function rl(){tl=void 0}function il(e){return el??=typeof e.ShellBatch==`function`,el}function al(e){return tl??=typeof e.FilletBatch==`function`,tl}function ol(e,t){if(t.length===0)return[];if(il(e)){let n=zo(`shell`),r=new e.ShellBatch;try{for(let e of t){let t=r.beginShell(e.shape,e.thickness,e.tolerance??.001);for(let n of e.faces)r.addFaceToRemove(t,n)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>Yc(e,t.shape,t.faces,t.thickness,t.tolerance??.001))}function sl(e,t){if(t.length===0)return[];if(al(e)){let n=zo(`fillet`),r=new e.FilletBatch;try{for(let e of t){let t=r.beginFillet(e.shape);for(let n of e.edges)n.r2===void 0?r.addEdge(t,n.edge,n.radius):r.addEdgeVariable(t,n.edge,n.radius,n.r2)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>{let n=t.edges.map(e=>e.edge);return qc(e,t.shape,n,e=>{let n=t.edges.find(t=>t.edge===e);return n?n.r2===void 0?n.radius:[n.radius,n.r2]:0})})}function cl(e){return{fillet:(t,n,r)=>qc(e,t,n,r),chamfer:(t,n,r)=>Jc(e,t,n,r),chamferDistAngle:(t,n,r,i)=>Zc(e,t,n,r,i),shell:(t,n,r,i)=>Yc(e,t,n,r,i),thicken:(t,n)=>Xc(e,t,n),offset:(t,n,r)=>$c(e,t,n,r),offsetWire2D:(t,n,r)=>Qc(e,t,n,r),shellBatch:t=>ol(e,t),filletBatch:t=>sl(e,t)}}var ll;function ul(){ll=void 0}function dl(e){return ll??=typeof e.TransformBatch==`function`,ll}function fl(e,t){if(t.length===0)return[];let n=zo(`transform`);try{if(dl(e)){let n=new e.TransformBatch;try{for(let e of t)switch(e.type){case`translate`:n.addTranslate(e.shape,e.x,e.y,e.z);break;case`rotate`:n.addRotate(e.shape,e.angle*Math.PI/180,...e.axis,...e.center);break;case`scale`:n.addScale(e.shape,...e.center,e.factor);break;case`mirror`:n.addMirror(e.shape,...e.origin,...e.normal);break}let e=n.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{n.delete()}}return t.map(t=>{switch(t.type){case`translate`:return hl(e,t.shape,t.x,t.y,t.z);case`rotate`:return gl(e,t.shape,t.angle,[...t.axis],[...t.center]);case`scale`:return vl(e,t.shape,[...t.center],t.factor);case`mirror`:return _l(e,t.shape,[...t.origin],[...t.normal])}})}finally{n()}}function pl(e,t,n){let r=new e.BRepBuilderAPI_Transform_2(t,n,!0,!1),i=r.ModifiedShape(t);return r.delete(),i}function ml(e,t,n){let r=new e.BRepBuilderAPI_Transform_2(t,n,!1,!1);try{return r.ModifiedShape(t)}finally{r.delete()}}function hl(e,t,n,r,i){let a=new e.gp_Trsf_1,o=new e.gp_Vec_4(n,r,i);a.SetTranslation_1(o);let s=pl(e,t,a);return a.delete(),o.delete(),s}function gl(e,t,n,r=[0,0,1],i=[0,0,0]){let a=new e.gp_Trsf_1,o=new e.gp_Pnt_3(...i),s=new e.gp_Dir_5(...r),c=new e.gp_Ax1_2(o,s);a.SetRotation_1(c,n*Math.PI/180);let l=pl(e,t,a);return a.delete(),c.delete(),o.delete(),s.delete(),l}function _l(e,t,n,r){let i=new e.gp_Trsf_1,a=new e.gp_Pnt_3(...n),o=new e.gp_Dir_5(...r),s=new e.gp_Ax2_4(a,o);i.SetMirror_3(s);let c=pl(e,t,i);return i.delete(),s.delete(),a.delete(),o.delete(),c}function vl(e,t,n,r){let i=new e.gp_Trsf_1,a=new e.gp_Pnt_3(...n);i.SetScale(a,r);let o=pl(e,t,i);return i.delete(),a.delete(),o}function yl(e,t,n,r,i){if(i){let i=new e.gp_Trsf_1;i.SetValues(n[0],n[1],n[2],r[0],n[3],n[4],n[5],r[1],n[6],n[7],n[8],r[2]);let a=new e.BRepBuilderAPI_Transform_2(t,i,!0,!1),o=a.ModifiedShape(t);return a.delete(),i.delete(),o}let a=new e.gp_GTrsf_1;for(let e=0;e<3;e++)for(let t=0;t<3;t++)a.SetValue(e+1,t+1,n[e*3+t]);let o=new e.gp_XYZ_2(r[0],r[1],r[2]);a.SetTranslationPart(o),o.delete();let s=new e.BRepBuilderAPI_GTransform_2(t,a,!0),c=s.ModifiedShape(t);return s.delete(),a.delete(),c}function bl(e,t){let n=new e.ShapeUpgrade_UnifySameDomain_2(t,!0,!0,!1);n.Build();let r=n.Shape();return n.delete(),r}function xl(e){return{transform:(t,n)=>pl(e,t,n),locate:(t,n)=>ml(e,t,n),translate:(t,n,r,i)=>hl(e,t,n,r,i),rotate:(t,n,r,i)=>gl(e,t,n,r,i),mirror:(t,n,r)=>_l(e,t,n,r),scale:(t,n,r)=>vl(e,t,n,r),transformBatch:t=>fl(e,t),generalTransform:(t,n,r,i)=>yl(e,t,n,r,i),simplify:t=>bl(e,t)}}function Sl(e,t,n){if(n===0)return new Float32Array;let r=t/4;return e.slice(r,r+n)}function Cl(e,t,n){let r=zo(`mesh`);try{let r=e.MeshExtractor.extract(t,n.tolerance,n.angularTolerance,!!n.skipNormals,!!n.includeUVs),i=r.getVerticesSize(),a=r.getNormalsSize(),o=r.getTrianglesSize(),s=r.getFaceGroupsSize(),c=r.getUvsSize(),l=Sl(e.HEAPF32,r.getVerticesPtr(),i),u=n.skipNormals||a===0?new Float32Array:Sl(e.HEAPF32,r.getNormalsPtr(),a),d=r.getTrianglesPtr()/4,f=e.HEAPU32.slice(d,d+o),p=c>0?Sl(e.HEAPF32,r.getUvsPtr(),c):new Float32Array,m=[];if(s>0){let t=r.getFaceGroupsPtr()/4,n=e.HEAP32.slice(t,t+s);for(let e=0;e<n.length;e+=3)m.push({start:n[e],count:n[e+1],faceHash:n[e+2]})}return r.delete(),{vertices:l,normals:u,triangles:f,uvs:p,faceGroups:m}}finally{r()}}function wl(e,t,n,r){let i=zo(`edgeMesh`);try{let i=e.EdgeMeshExtractor.extract(t,n,r),a=i.getLinesSize(),o=i.getEdgeGroupsSize(),s=Sl(e.HEAPF32,i.getLinesPtr(),a),c=[];if(o>0){let t=i.getEdgeGroupsPtr()/4,n=e.HEAP32.slice(t,t+o);for(let e=0;e<n.length;e+=3)c.push({start:n[e],count:n[e+1],edgeHash:n[e+2]})}return i.delete(),{lines:s,edgeGroups:c}}finally{i()}}function Tl(e){return{mesh:(t,n)=>Cl(e,t,n),meshEdges:(t,n,r)=>wl(e,t,n,r)}}var El=0;function Dl(e,t){return`${e}_${++El}.${t}`}function Ol(e,t){let n=e.StepStreamIO;if(typeof n?.exportSTEP==`function`&&t.length===1)return n.exportSTEP(t[0],5);let r=new e.STEPControl_Writer_1;e.Interface_Static.SetIVal(`write.step.schema`,5),r.Model(!0).delete();let i=new e.Message_ProgressRange_1;for(let n of t)r.Transfer_1(n,e.STEPControl_StepModelType.STEPControl_AsIs,!0,i);let a=Dl(`_export`,`step`),o=r.Write(a);if(r.delete(),i.delete(),o===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+a);return e.FS.unlink(`/`+a),new TextDecoder().decode(t)}throw Error(`STEP export failed: writer did not complete successfully`)}function kl(e,t,n=!1){let r=Dl(`_export`,`stl`);if(e.StlAPI.Write(t,r,!n)){let t=e.FS.readFile(`/`+r);return e.FS.unlink(`/`+r),n?t.buffer:new TextDecoder().decode(t)}throw Error(`STL export failed: StlAPI.Write returned false`)}function Al(e,t){let n=new e.IGESControl_Writer_1;for(let e of t)n.AddShape(e);n.ComputeModel();let r=Dl(`_export`,`iges`),i=n.Write_2(r);if(n.delete(),i){let t=e.FS.readFile(`/`+r);return e.FS.unlink(`/`+r),new TextDecoder().decode(t)}throw Error(`IGES export failed: writer did not complete successfully`)}function jl(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(new Uint8Array(t)),r=e.StepStreamIO;if(typeof r?.importSTEP==`function`){let e=r.importSTEP(n);if(e.IsNull())throw Error(`Failed to import STEP file: stream reader could not parse the input data`);return[e]}let i=Dl(`_import`,`step`),a=new TextEncoder().encode(n);e.FS.writeFile(`/`+i,a);let o=new e.STEPControl_Reader_1;if(o.ReadFile(i)){e.FS.unlink(`/`+i);let t=new e.Message_ProgressRange_1;o.TransferRoots(t),t.delete();let n=o.OneShape();return o.delete(),[n]}throw e.FS.unlink(`/`+i),o.delete(),Error(`Failed to import STEP file: reader could not parse the input data`)}function Ml(e,t){let n=Dl(`_import`,`stl`),r=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);e.FS.writeFile(`/`+n,r);let i=new e.StlAPI_Reader,a=new e.TopoDS_Shape;if(i.Read_1(a,`/`+n)){e.FS.unlink(`/`+n);let t=new e.ShapeUpgrade_UnifySameDomain_2(a,!0,!0,!1);t.Build();let r=t.Shape(),o=new e.BRepBuilderAPI_MakeSolid_1;o.Add(e.TopoDS_Cast.Shell(r));let s=o.Solid();return a.delete(),t.delete(),o.delete(),i.delete(),s}throw e.FS.unlink(`/`+n),a.delete(),i.delete(),Error(`Failed to import STL file: reader could not parse the input data`)}function Nl(e,t){let n=Dl(`_import`,`iges`),r=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);e.FS.writeFile(`/`+n,r);let i=new e.IGESControl_Reader_1;if(i.ReadFile(n)===e.IFSelect_ReturnStatus.IFSelect_RetDone){e.FS.unlink(`/`+n);let t=new e.Message_ProgressRange_1;i.TransferRoots(t),t.delete();let r=i.OneShape();return i.delete(),[r]}throw e.FS.unlink(`/`+n),i.delete(),Error(`Failed to import IGES file: reader could not parse the input data`)}function Pl(e){return{exportSTEP:t=>Ol(e,t),exportSTL:(t,n)=>kl(e,t,n),importSTEP:t=>jl(e,t),importSTL:t=>Ml(e,t),exportIGES:t=>Al(e,t),importIGES:t=>Nl(e,t)}}function Fl(e,t){let n=e.BRep_Tool.Pnt(t),r=[n.X(),n.Y(),n.Z()];return n.delete(),r}function Il(e){let t=e.GeomAbs_SurfaceType;return new Map([[t.GeomAbs_Plane,`plane`],[t.GeomAbs_Cylinder,`cylinder`],[t.GeomAbs_Cone,`cone`],[t.GeomAbs_Sphere,`sphere`],[t.GeomAbs_Torus,`torus`],[t.GeomAbs_BezierSurface,`bezier`],[t.GeomAbs_BSplineSurface,`bspline`],[t.GeomAbs_SurfaceOfRevolution,`revolution`],[t.GeomAbs_SurfaceOfExtrusion,`extrusion`],[t.GeomAbs_OffsetSurface,`offset`],[t.GeomAbs_OtherSurface,`other`]])}var Ll=new WeakMap;function Rl(e,t){let n=Ll.get(e);n||(n=Il(e),Ll.set(e,n));let r=new e.BRepAdaptor_Surface_2(t,!1),i=r.GetType();return r.delete(),n.get(i)??`other`}function zl(e,t){let n=e.BRepTools.UVBounds_1(t);return{uMin:n.UMin,uMax:n.UMax,vMin:n.VMin,vMax:n.VMax}}function Bl(e,t){return e.BRepTools.OuterWire(t)}function Vl(e,t,n,r){let i=new e.BRepGProp_Face_2(t,!1),a=new e.gp_Pnt_1,o=new e.gp_Vec_1;i.Normal(n,r,a,o);let s=[o.X(),o.Y(),o.Z()];return i.delete(),a.delete(),o.delete(),s}function Hl(e,t,n,r){let i=new e.BRepAdaptor_Surface_2(t,!1),a=new e.gp_Pnt_1;i.D0(n,r,a);let o=[a.X(),a.Y(),a.Z()];return i.delete(),a.delete(),o}function Ul(e,t,n){let r=e.BRep_Tool.Surface_2(t),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.GeomAPI_ProjectPointOnSurf_2(i,r,e.Extrema_ExtAlgo.Extrema_ExtAlgo_Grad),o=null;if(a.NbPoints()>0){let e=a.LowerDistanceParameters();o=[e.U,e.V]}return a.delete(),i.delete(),o}function Wl(e,t,n){let r=e.BRep_Tool.Surface_2(t),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.GeomAPI_ProjectPointOnSurf_2(i,r,e.Extrema_ExtAlgo.Extrema_ExtAlgo_Grad),o;if(a.NbPoints()>0){let e=a.NearestPoint();o=[e.X(),e.Y(),e.Z()],e.delete()}else o=n;return a.delete(),i.delete(),o}function Gl(e,t,n){let r=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),i=new e.gp_Pnt_1,a=new e.gp_Vec_1;r.D1(n,i,a);let o={point:[i.X(),i.Y(),i.Z()],tangent:[a.X(),a.Y(),a.Z()]};return r.delete(),i.delete(),a.delete(),o}function Kl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=[n.FirstParameter(),n.LastParameter()];return n.delete(),r}function ql(e,t,n){let r=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),i=r.Value(n),a=[i.X(),i.Y(),i.Z()];return i.delete(),r.delete(),a}function Jl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.IsClosed();return n.delete(),r}function Yl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.IsPeriodic();return n.delete(),r}function Xl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.Period();return n.delete(),r}function Zl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.GetType();return n.delete(),{0:`LINE`,1:`CIRCLE`,2:`ELLIPSE`,3:`HYPERBOLA`,4:`PARABOLA`,5:`BEZIER_CURVE`,6:`BSPLINE_CURVE`,7:`OFFSET_CURVE`,8:`OTHER_CURVE`}[typeof r==`number`?r:Number(r?.value??r)]??`OTHER_CURVE`}function Ql(e,t){let n=t.Orientation_1(),r=e.TopAbs_Orientation;return n===r.TopAbs_FORWARD?`forward`:n===r.TopAbs_REVERSED?`reversed`:n===r.TopAbs_INTERNAL?`internal`:`external`}function $l(e,t,n){switch(n??eu(e,t)){case`vertex`:return e.TopoDS_Cast.Vertex(t);case`edge`:return e.TopoDS_Cast.Edge(t);case`wire`:return e.TopoDS_Cast.Wire(t);case`face`:return e.TopoDS_Cast.Face(t);case`shell`:return e.TopoDS_Cast.Shell(t);case`solid`:return e.TopoDS_Cast.Solid(t);case`compsolid`:return e.TopoDS_Cast.CompSolid(t);default:return e.TopoDS_Cast.Compound(t)}}function eu(e,t){let n=t.ShapeType(),r=e.TopAbs_ShapeEnum;return n===r.TopAbs_VERTEX?`vertex`:n===r.TopAbs_EDGE?`edge`:n===r.TopAbs_WIRE?`wire`:n===r.TopAbs_FACE?`face`:n===r.TopAbs_SHELL?`shell`:n===r.TopAbs_SOLID?`solid`:n===r.TopAbs_COMPSOLID?`compsolid`:`compound`}function tu(e,t,n){return e.shapeHashCode(t,n)}function nu(e,t){return t.IsNull()}function ru(e,t){return t.Reversed()}function iu(e,t){let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE),r=new e.TopLoc_Location_1,i=!1;for(;n.More();){let t=e.TopoDS_Cast.Face(n.Current());if(!e.BRep_Tool_Triangulation(t,r,0).IsNull()){i=!0;break}n.Next()}return n.delete(),r.delete(),i}function au(e,t,n,r){new e.BRepMesh_IncrementalMeshWrapper(t,n,!1,r,!1).delete()}function ou(e,t){let n=new e.BRepAdaptor_Curve_2(t);try{let e=n.Bezier().get(),t=e.NbPoles();if(t<2)return null;let r=e.Pole(t-1),i=[r.X(),r.Y(),r.Z()];return r.delete(),i}catch{return null}finally{n.delete()}}function su(e,t){return t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t)}function cu(e,t){let n=t.get();if(typeof n.Cylinder!=`function`)return null;let r=n.Cylinder(),i={radius:r.Radius(),isDirect:r.Direct()};return r.delete(),i}function lu(e,t){let n=null;try{if(t===7)return e.AxeOfRevolution();if(t===1)n=e.Cylinder();else if(t===2)n=e.Cone();else if(t===4)n=e.Torus();else return null;let r=n.Axis();return n.delete(),r}catch{return n?.delete?.(),null}}function uu(e,t){let n=new e.BRepAdaptor_Surface_2(t,!1);try{let e=n.GetType(),t=lu(n,typeof e==`number`?e:Number(e?.value??e));if(!t)return null;let r=null,i=null;try{return r=t.Location(),i=t.Direction(),{origin:[r.X(),r.Y(),r.Z()],direction:[i.X(),i.Y(),i.Z()]}}finally{r?.delete?.(),i?.delete?.(),t.delete()}}finally{n.delete()}}function du(e,t){return t.get().UReversed()}function fu(e){return{vertexPosition:t=>Fl(e,t),surfaceType:t=>Rl(e,t),uvBounds:t=>zl(e,t),outerWire:t=>Bl(e,t),surfaceNormal:(t,n,r)=>Vl(e,t,n,r),pointOnSurface:(t,n,r)=>Hl(e,t,n,r),uvFromPoint:(t,n)=>Ul(e,t,n),projectPointOnFace:(t,n)=>Wl(e,t,n),curveTangent:(t,n)=>Gl(e,t,n),curveParameters:t=>Kl(e,t),shapeOrientation:t=>Ql(e,t),downcast:(t,n)=>$l(e,t,n),copyShape:t=>$l(e,t),hashCode:(t,n)=>tu(e,t,n),isNull:t=>nu(e,t),hasTriangulation:t=>iu(e,t),meshShape:(t,n,r)=>{au(e,t,n,r)},getBezierPenultimatePole:t=>ou(e,t),createCurveAdaptor:t=>su(e,t),reverseShape:t=>ru(e,t),curvePointAtParam:(t,n)=>ql(e,t,n),curveIsClosed:t=>Jl(e,t),curveIsPeriodic:t=>Yl(e,t),curvePeriod:t=>Xl(e,t),curveType:t=>Zl(e,t),getSurfaceCylinderData:t=>cu(e,t),getSurfaceAxis:t=>uu(e,t),reverseSurfaceU:t=>du(e,t)}}function pu(e,t){let n=new e.BRepAdaptor_Curve_2(t);try{let t=n.GetType(),r=typeof t==`number`?t:Number(t?.value??t),i=e.GeomAbs_CurveType,a=typeof i.GeomAbs_BSplineCurve==`number`?i.GeomAbs_BSplineCurve:Number(i.GeomAbs_BSplineCurve?.value??i.GeomAbs_BSplineCurve),o=typeof i.GeomAbs_BezierCurve==`number`?i.GeomAbs_BezierCurve:Number(i.GeomAbs_BezierCurve?.value??i.GeomAbs_BezierCurve);if(r!==a&&r!==o)return null;let s=n.BSpline(),c=s.get(),l=c.Degree(),u=c.NbPoles(),d=c.NbKnots(),f=c.IsPeriodic(),p=c.IsRational(),m=[];for(let e=1;e<=u;e++){let t=c.Pole(e);m.push([t.X(),t.Y(),t.Z()]),t.delete()}let h=[];for(let e=1;e<=u;e++)h.push(c.Weight(e));let g=[],_=[];for(let e=1;e<=d;e++)g.push(c.Knot(e)),_.push(c.Multiplicity(e));let v={degree:l,poles:m,weights:h,knots:g,multiplicities:_,isPeriodic:f,isRational:p};return s.delete(),v}catch{return null}finally{n.delete()}}function mu(e,t){let n=new e.BRepAdaptor_Surface_2(t,!1);try{let t=n.GetType(),r=typeof t==`number`?t:Number(t?.value??t),i=e.GeomAbs_SurfaceType;if(r!==(typeof i.GeomAbs_BSplineSurface==`number`?i.GeomAbs_BSplineSurface:Number(i.GeomAbs_BSplineSurface?.value??i.GeomAbs_BSplineSurface)))return null;let a=n.BSpline(),o=a.get(),s=o.UDegree(),c=o.VDegree(),l=o.NbUPoles(),u=o.NbVPoles(),d=o.IsUPeriodic(),f=o.IsVPeriodic(),p=o.IsURational()||o.IsVRational(),m=[],h=[];for(let e=1;e<=l;e++){let t=[],n=[];for(let r=1;r<=u;r++){let i=o.Pole(e,r);t.push([i.X(),i.Y(),i.Z()]),i.delete(),n.push(o.Weight(e,r))}m.push(t),h.push(n)}let g=o.NbUKnots(),_=[],v=[];for(let e=1;e<=g;e++)_.push(o.UKnot(e)),v.push(o.UMultiplicity(e));let y=o.NbVKnots(),b=[],x=[];for(let e=1;e<=y;e++)b.push(o.VKnot(e)),x.push(o.VMultiplicity(e));let S={degreeU:s,degreeV:c,nbPolesU:l,nbPolesV:u,poles:m,weights:h,knotsU:_,knotsV:b,multiplicitiesU:v,multiplicitiesV:x,isPeriodicU:d,isPeriodicV:f,isRational:p};return a.delete(),S}catch{return null}finally{n.delete()}}function hu(e){return{getNurbsCurveData:t=>pu(e,t),getNurbsSurfaceData:t=>mu(e,t)}}function gu(e,t,n={}){let{tolerance:r=1e-8}=n,i=new e.TColgp_Array1OfPnt_2(1,t.length),a=new e.gp_Pnt_1,o=1;for(let e of t)a.SetCoord_2(e[0],e[1],e[2]),i.SetValue_1(o++,a);a.delete();let s=new e.GeomAPI_PointsToBSpline_2(i,3,8,e.GeomAbs_Shape.GeomAbs_C2,r);if(i.delete(),!s.IsDone())throw s.delete(),Error(`Interpolation failed — GeomAPI_PointsToBSpline did not converge`);let c=s.Curve(),l=new e.Handle_Geom_Curve_2(c.get()),u=new e.BRepBuilderAPI_MakeEdge_24(l),d=u.Edge();return u.delete(),s.delete(),d}function _u(e,t,n={}){let{tolerance:r=.001,degMin:i=1,degMax:a=6,smoothing:o=null}=n,s=new e.TColgp_Array1OfPnt_2(1,t.length),c=new e.gp_Pnt_1,l=1;for(let e of t)c.SetCoord_2(e[0],e[1],e[2]),s.SetValue_1(l++,c);c.delete();let u;if(u=o?new e.GeomAPI_PointsToBSpline_5(s,o[0],o[1],o[2],a,e.GeomAbs_Shape.GeomAbs_C2,r):new e.GeomAPI_PointsToBSpline_2(s,i,a,e.GeomAbs_Shape.GeomAbs_C2,r),s.delete(),!u.IsDone())throw u.delete(),Error(`Approximation failed — GeomAPI_PointsToBSpline did not converge`);let d=u.Curve(),f=new e.Handle_Geom_Curve_2(d.get()),p=new e.BRepBuilderAPI_MakeEdge_24(f),m=p.Edge();return p.delete(),u.delete(),m}function vu(e){return{interpolatePoints:(t,n)=>gu(e,t,n??{}),approximatePoints:(t,n)=>_u(e,t,n??{})}}function yu(e,t){let n=new e.ShapeFix_Solid_2(t),r=new e.Message_ProgressRange_1;n.Perform(r),r.delete();let i=n.Solid();return n.delete(),i.IsNull()?null:i}function bu(e,t){let n=new e.ShapeFix_Face_2(t);n.Perform();let r=n.Face();return n.delete(),r}function xu(e,t,n){let r;n?r=new e.ShapeFix_Wire_2(t,n,1e-6):(r=new e.ShapeFix_Wire_1,r.Load_1(t)),r.Perform();let i=r.Wire();return r.delete(),i}function Su(e){return{healSolid:t=>yu(e,t),healFace:t=>bu(e,t),healWire:(t,n)=>xu(e,t,n)}}var Cu={modified:new Map,generated:new Map,deleted:new Set};function wu(e,t,n){let r=new Map;if(n===0)return r;let i=e.slice(t/4,t/4+n),a=0;for(;a+1<i.length;){let e=i[a++],t=i[a++];if(t<0||a+t>i.length)break;let n=[];for(let e=0;e<t;e++)n.push(i[a++]);r.set(e,n)}return r}function Tu(e,t){try{let n=wu(e.HEAP32,t.getModifiedPtr(),t.getModifiedSize()),r=wu(e.HEAP32,t.getGeneratedPtr(),t.getGeneratedSize()),i=new Set,a=t.getDeletedSize();if(a>0){let n=t.getDeletedPtr()/4,r=e.HEAP32.slice(n,n+a);for(let e=0;e<r.length;e++)i.add(r[e])}return{modified:n,generated:r,deleted:i}}finally{t.delete()}}function Eu(e,t,n){let r=[];if(t.Size()===0)return r;if(e.TopTools_ListIteratorOfListOfShape){let i=new e.TopTools_ListIteratorOfListOfShape(t);for(;i.More();)r.push(e.shapeHashCode(i.Value(),n)),i.Next();i.delete()}else{let i=new e.TopTools_ListOfShape_3(t);for(;i.Size()>0;)r.push(e.shapeHashCode(i.First_1(),n)),i.RemoveFirst();i.delete()}return r}function Du(e,t,n,r,i){if(r.length===0)return Cu;let a=Array.isArray(n)?n:[n];if(e.EvolutionExtractor){let n,r,o;if(a.length===1)n=a[0];else{r=new e.TopoDS_Builder,o=new e.TopoDS_Compound,r.MakeCompound(o);for(let e of a)r.Add(o,e);n=o}let s;try{s=e.EvolutionExtractor.extract(t,n,i)}catch{}finally{r?.delete(),o?.delete()}if(s!==void 0)return Tu(e,s)}let o=new Map,s=new Map,c=new Set,l=new Set(r),u=new Map;for(let t of a){let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let t=n.Current(),r=e.shapeHashCode(t,i);l.has(r)&&u.set(r,t),n.Next()}n.delete()}for(let[n,r]of u){if(t.IsDeleted?.(r)){c.add(n);continue}let a=t.Modified(r);a.Size()>0&&o.set(n,Eu(e,a,i));let l=t.Generated(r);l.Size()>0&&s.set(n,Eu(e,l,i))}return{modified:o,generated:s,deleted:c}}function Ou(e,t,n,r,i){let a=new e.BRepBuilderAPI_Transform_2(t,n,!0,!1),o=a.Shape(),s=r.length===0?Cu:Du(e,a,t,r,i);return a.delete(),{shape:o,evolution:s}}function ku(e,t,n,r,i,a,o){return a&&t.SimplifyResult(!0,!0,.001),{shape:t.Shape(),evolution:Du(e,t,n,r,i),diagnostics:o??{hasErrors:!1,hasWarnings:!1,messages:[]}}}function Au(e,t,n,r,i){return{shape:t.Shape(),evolution:Du(e,t,n,r,i)}}function ju(e,t,n,r,i,a,o){let s=new e.gp_Trsf_1,c=new e.gp_Vec_4(n,r,i);s.SetTranslation_1(c),c.delete();let l=Ou(e,t,s,a,o);return s.delete(),l}function Mu(e,t,n,r,i,a=[0,0,1],o=[0,0,0]){let s=new e.gp_Trsf_1,c=new e.gp_Pnt_3(o[0],o[1],o[2]),l=new e.gp_Dir_5(a[0],a[1],a[2]),u=new e.gp_Ax1_2(c,l);s.SetRotation_1(u,n),c.delete(),l.delete(),u.delete();let d=Ou(e,t,s,r,i);return s.delete(),d}function Nu(e,t,n,r,i,a){let o=new e.gp_Trsf_1,s=new e.gp_Pnt_3(n[0],n[1],n[2]),c=new e.gp_Dir_5(r[0],r[1],r[2]),l=new e.gp_Ax2_4(s,c);o.SetMirror_3(l),s.delete(),c.delete(),l.delete();let u=Ou(e,t,o,i,a);return o.delete(),u}function Pu(e,t,n,r,i,a){let o=new e.gp_Trsf_1,s=new e.gp_Pnt_3(n[0],n[1],n[2]);o.SetScale(s,r),s.delete();let c=Ou(e,t,o,i,a);return o.delete(),c}function Fu(e,t,n,r,i,a,o){let s=new e.gp_Trsf_1;s.SetValues(n[0],n[1],n[2],r[0],n[3],n[4],n[5],r[1],n[6],n[7],n[8],r[2]);let c=Ou(e,t,s,a,o);return s.delete(),c}function Iu(e){return{hasErrors:e.HasErrors(),hasWarnings:e.HasWarnings(),messages:[]}}function Lu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Fuse_3(t,n,o);Cs(e,s,a.optimisation),ws(s,a.fuzzyValue),s.Build(o);let c=Iu(s),l=ku(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function Ru(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Cut_3(t,n,o);Cs(e,s,a.optimisation),ws(s,a.fuzzyValue),s.Build(o);let c=Iu(s),l=ku(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function zu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Common_3(t,n,o);Cs(e,s,a.optimisation),ws(s,a.fuzzyValue),s.Build(o);let c=Iu(s),l=ku(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function Bu(e,t,n,r,i,a){let o=new e.BRepFilletAPI_MakeFillet(t,e.ChFi3d_FilletShape.ChFi3d_Rational);for(let t of n){let n=typeof r==`function`?r(t):r;Array.isArray(n)?o.Add_3(n[0],n[1],e.TopoDS_Cast.Edge(t)):o.Add_2(n,e.TopoDS_Cast.Edge(t))}let s=new e.Message_ProgressRange_1;o.Build(s),s.delete();let c=Au(e,o,t,i,a);return o.delete(),c}function Vu(e,t,n,r,i,a){let o=new e.BRepFilletAPI_MakeChamfer(t),s=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE),c=new Map;for(;s.More();){let t=e.TopoDS_Cast.Face(s.Current()),n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();)c.set(e.shapeHashCode(n.Current(),a),t),n.Next();n.delete(),s.Next()}s.delete();for(let t of n){let n=typeof r==`function`?r(t):r,i=c.get(e.shapeHashCode(t,a));if(Array.isArray(n)&&i)o.Add_3(n[0],n[1],e.TopoDS_Cast.Edge(t),i);else{let r=Array.isArray(n)?n[0]:n;o.Add_2(r,e.TopoDS_Cast.Edge(t))}}let l=new e.Message_ProgressRange_1;o.Build(l),l.delete();let u=Au(e,o,t,i,a);return o.delete(),u}function Hu(e,t,n,r,i,a,o=.001){let s=new e.BRepOffsetAPI_MakeThickSolid,c=new e.TopTools_ListOfShape_1;for(let e of n)c.Append_1(e);let l=new e.Message_ProgressRange_1;s.MakeThickSolidByJoin(t,c,-r,o,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,l),l.delete(),c.delete();let u=Au(e,s,t,i,a);return s.delete(),u}function Uu(e,t,n,r,i){let a=new e.BRepOffsetAPI_MakeThickSolid;a.MakeThickSolidBySimple(t,n);let o=new e.Message_ProgressRange_1;a.Build(o),o.delete();let s=Au(e,a,t,r,i);return a.delete(),s}function Wu(e,t,n,r,i,a=1e-6){let o=new e.BRepOffsetAPI_MakeOffsetShape,s=new e.Message_ProgressRange_1;o.PerformByJoin(t,n,a,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,s),s.delete();let c=Au(e,o,t,r,i);return o.delete(),c}function Gu(e,t,n,r,i,a,o,s){if(!e.BRepOffsetAPI_DraftAngle)throw Error(`BRepOffsetAPI_DraftAngle not available in this WASM build. Rebuild brepjs-opencascade with the updated build config.`);let[c,l,u]=r,[d,f,p]=i,m=new e.gp_Dir_5(c,l,u),h=new e.gp_Pnt_3(d,f,p),g=new e.gp_Pln_3(h,m),_=new e.BRepOffsetAPI_DraftAngle_2(t);try{for(let t of n){let n=(typeof a==`function`?a(t):a)*Math.PI/180;_.Add(e.TopoDS_Cast.Face(t),m,n,g,!0)}let r=new e.Message_ProgressRange_1;return _.Build(r),r.delete(),Au(e,_,t,o,s)}finally{_.delete(),g.delete(),h.delete(),m.delete()}}function Ku(e){return{translateWithHistory:(t,n,r,i,a,o)=>ju(e,t,n,r,i,a,o),rotateWithHistory:(t,n,r,i,a,o)=>Mu(e,t,n,r,i,a,o),mirrorWithHistory:(t,n,r,i,a)=>Nu(e,t,n,r,i,a),scaleWithHistory:(t,n,r,i,a)=>Pu(e,t,n,r,i,a),generalTransformWithHistory:(t,n,r,i,a,o)=>Fu(e,t,n,r,i,a,o),fuseWithHistory:(t,n,r,i,a)=>Lu(e,t,n,r,i,a),cutWithHistory:(t,n,r,i,a)=>Ru(e,t,n,r,i,a),intersectWithHistory:(t,n,r,i,a)=>zu(e,t,n,r,i,a),filletWithHistory:(t,n,r,i,a)=>Bu(e,t,n,r,i,a),chamferWithHistory:(t,n,r,i,a)=>Vu(e,t,n,r,i,a),shellWithHistory:(t,n,r,i,a,o)=>Hu(e,t,n,r,i,a,o),thickenWithHistory:(t,n,r,i)=>Uu(e,t,n,r,i),offsetWithHistory:(t,n,r,i,a)=>Wu(e,t,n,r,i,a),draftWithHistory:(t,n,r,i,a,o,s)=>Gu(e,t,n,r,i,a,o,s)}}function qu(e,t,n,r){let i=new e.gp_GTrsf_1;for(let e=0;e<3;e++)for(let t=0;t<3;t++)i.SetValue(e+1,t+1,n[e*3+t]);let a=new e.gp_XYZ_2(r[0],r[1],r[2]);i.SetTranslationPart(a),a.delete();let o=new e.BRepBuilderAPI_GTransform_2(t,i,!0),s=o.Shape();return o.delete(),i.delete(),s}function Ju(e,t){let n=new e.gp_Trsf_1;for(let r of t){let t=new e.gp_Trsf_1;if(r.type===`translate`){let n=new e.gp_Vec_4(r.x,r.y,r.z);t.SetTranslation_1(n),n.delete()}else{let n=r.axis??[0,0,1],i=r.center??[0,0,0],a=new e.gp_Pnt_3(i[0],i[1],i[2]),o=new e.gp_Dir_5(n[0],n[1],n[2]),s=new e.gp_Ax1_2(a,o);t.SetRotation_1(s,r.angle*Math.PI/180),s.delete(),o.delete(),a.delete()}n.PreMultiply(t),t.delete()}return{handle:n,dispose:()=>n.delete()}}function Yu(e,t,n,r,i){return Ou(e,t,n,r,i)}function Xu(e,t){if(!t)return;let n=e.BRepBuilderAPI_TransitionMode;switch(t){case`transformed`:return n.BRepBuilderAPI_Transformed;case`round`:return n.BRepBuilderAPI_RoundCorner;case`right`:return n.BRepBuilderAPI_RightCorner}}function Zu(e,t,n,r={}){let i=new e.BRepOffsetAPI_MakePipeShell(n);typeof i.SetIsBuildHistory==`function`&&i.SetIsBuildHistory(!1),r.tolerance!==void 0&&i.SetTolerance(r.tolerance,r.boundTolerance??r.tolerance,r.angularTolerance??1e-7),r.maxDegree!==void 0&&i.SetMaxDegree(r.maxDegree),r.maxSegments!==void 0&&i.SetMaxSegments(r.maxSegments);let a=Xu(e,r.transitionMode);a!==void 0&&i.SetTransitionMode(a),r.support?i.SetMode_4(r.support):r.frenet&&i.SetMode_1(!0),r.auxiliary&&i.SetMode_5(r.auxiliary,!1,e.BRepFill_TypeOfContact.BRepFill_NoContact);let o=!!r.contact,s=!!r.correction;r.law?i.SetLaw_1(t,r.law,o,s):i.Add_1(t,o,s);let c=new e.Message_ProgressRange_1;if(i.Build(c),c.delete(),!i.IsDone())throw i.delete(),Error(`Sweep pipe shell build failed (IsDone=false)`);if(r.shellMode){let e=i.Shape(),t=i.FirstShape(),n=i.LastShape();return i.delete(),{shape:e,firstShape:t,lastShape:n}}i.MakeSolid();let l=i.Shape();return i.delete(),l}function Qu(e,t,n={}){let r=n.solid??!0,i=n.ruled??!1,a=new e.BRepOffsetAPI_ThruSections(r,i,n.tolerance??1e-6);n.startVertex&&a.AddVertex(n.startVertex);for(let e of t)a.AddWire(e);n.endVertex&&a.AddVertex(n.endVertex);let o=new e.Message_ProgressRange_1;a.Build(o),o.delete();let s=a.Shape();return a.delete(),s}function $u(e,t,n,r){if(t===`linear`){let t=new e.Law_Linear;return t.Set(0,1,n,r),t}let i=new e.Law_S;return i.Set_1(0,1,n,r),i}function ed(e,t,n,r,i){let a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Dir_5(r[0],r[1],r[2]),s=new e.gp_Ax1_2(a,o),c=new e.BRepPrimAPI_MakeRevol_1(t,s,i,!1),l=c.Shape();return c.delete(),s.delete(),o.delete(),a.delete(),l}function td(e,t,n,r,i){let a=[],o=new e.gp_Trsf_1;for(let s=0;s<i;s++){let i=n[0]*r*s,c=n[1]*r*s,l=n[2]*r*s,u=new e.gp_Vec_4(i,c,l);o.SetTranslation_1(u),u.delete();let d=new e.BRepBuilderAPI_Transform_2(t,o,!0,!1);a.push(d.Shape()),d.delete()}return o.delete(),a}function nd(e,t,n,r,i,a){let o=[],s=new e.gp_Pnt_3(n[0],n[1],n[2]),c=new e.gp_Dir_5(r[0],r[1],r[2]),l=new e.gp_Ax1_2(s,c),u=new e.gp_Trsf_1;for(let n=0;n<a;n++){let r=i*n*Math.PI/180;u.SetRotation_1(l,r);let a=new e.BRepBuilderAPI_Transform_2(t,u,!0,!1);o.push(a.Shape()),a.delete()}return u.delete(),l.delete(),c.delete(),s.delete(),o}function rd(e,t,n,r){let i=n.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(n,!1):new e.BRepAdaptor_Curve_2(n),a=new e.gp_Pnt_1,o=new e.gp_Vec_1;try{i.D1(r,a,o);let n=new e.gp_Dir_2(o),s=new(e.gp_Ax3_5??e.gp_Ax3_4)(a,n),c=new e.gp_Trsf_1;c.SetTransformation_2(s),c.Invert();let l=new e.BRepBuilderAPI_Transform_2(t,c,!0,!1),u=l.Shape();return l.delete(),c.delete(),s.delete(),n.delete(),u}finally{o.delete(),a.delete(),i.delete()}}function id(e,t){let n=new e.BRepOffsetAPI_MakeFilling(3,15,2,!1,1e-5,1e-4,.01,.1,8,9),r=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;r.More();){let t=e.TopoDS_Cast.Edge(r.Current());n.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,!0),r.Next()}r.delete();let i=new e.Message_ProgressRange_1;n.Build(i),i.delete();let a=n.Shape();return n.delete(),a}function ad(e,t,n){let r=new e.BRepBuilderAPI_MakeFace_2(t);for(let e of n)r.Add(e);let i=r.Face();r.delete();let a=new e.ShapeFix_Face_2(i);a.FixOrientation_1(),a.Perform();let o=a.Face();return a.delete(),o}function od(e,t){let n=e.BRepTools.OuterWire(t),r=e.BRep_Tool.Surface_2(t);try{let t=new e.BRepBuilderAPI_MakeFace_21(r,n,!0),i=t.Face();t.delete();let a=new e.ShapeFix_Face_2(i);a.FixOrientation_1(),a.Perform();let o=a.Face();return a.delete(),o}finally{r.delete(),n.delete()}}function sd(e,t,n){let r=t,i=!1;try{t.ShapeType!==void 0&&(r=e.BRep_Tool.Surface_2(t),i=!0)}catch{}let a=new e.BRepBuilderAPI_MakeFace_21(r,n,!0),o=a.Face();return a.delete(),i&&r.delete(),o}function cd(e,n,r,i){let a=new e.TColgp_Array2OfPnt_2(1,r,1,i);for(let o=0;o<r;o++)for(let r=0;r<i;r++){let s=t(n,o*i+r),c=new e.gp_Pnt_3(s[0],s[1],s[2]);a.SetValue_1(o+1,r+1,c),c.delete()}let o=new e.GeomAPI_PointsToBSplineSurface_2(a,3,8,e.GeomAbs_Shape.GeomAbs_C2,.001),s=o.Surface();a.delete();let c=new e.BRepBuilderAPI_MakeFace_8(s,1e-6),l=c.Face();return c.delete(),o.delete(),l}function ld(e,n,r,i){let a=new e.BRepBuilderAPI_Sewing(1e-6,!0,!0,!0,!1);for(let o=0;o<r-1;o++)for(let r=0;r<i-1;r++){let s=o*i+r,c=(o+1)*i+r,l=o*i+(r+1),u=(o+1)*i+(r+1),d=t(n,s),f=t(n,c),p=t(n,l),m=t(n,u),h=ud(e,d,f,p);a.Add(h);let g=ud(e,f,m,p);a.Add(g)}let o=new e.Message_ProgressRange_1;a.Perform(o),o.delete();let s=a.SewedShape();return a.delete(),s}function ud(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.BRepBuilderAPI_MakeEdge_3(i,a),c=new e.BRepBuilderAPI_MakeEdge_3(a,o),l=new e.BRepBuilderAPI_MakeEdge_3(o,i),u=new e.BRepBuilderAPI_MakeWire_4(s.Edge(),c.Edge(),l.Edge()),d=u.Wire(),f=new e.BRepBuilderAPI_MakeFace_15(d,!0),p=f.Face();return f.delete(),u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),a.delete(),i.delete(),p}function dd(e,t,n){let r=new e.BRepBuilderAPI_Sewing(n,!0,!0,!0,!1);for(let e of t)r.Add(e);let i=new e.Message_ProgressRange_1;r.Perform(i),i.delete();let a=r.SewedShape();r.delete();let o=new e.ShapeFix_Solid_1;try{let t=e.TopoDS_Cast.Shell(a);return o.SolidFromShell(t)}catch{return a}finally{o.delete()}}function fd(e,t){let n=new e.ShapeFix_Shape_1(t),r=new e.Message_ProgressRange_1;n.Perform(r);let i=n.Shape();return r.delete(),n.delete(),i}function pd(e,t){let n=new e.ShapeFix_Wire_1;n.Load_1(t),n.FixSelfIntersection();let r=n.Wire();return n.delete(),r}function md(){return{gaussian:0,mean:0,max:0,min:0,maxDirection:[1,0,0],minDirection:[0,1,0]}}function hd(e,t,n,r,i,a){let o=e*n-t*t;if(Math.abs(o)<1e-15)return null;let s=(e*a-2*t*i+n*r)/(2*o),c=(r*a-i*i)/o,l=Math.sqrt(Math.max(0,s*s-c)),u=s+l,d=s-l,f=(n*i-t*a)/o,p=(e*i-t*r)/o,m=(n*r-t*i)/o,h,g;return Math.abs(f)>1e-15?(h=f,g=u-m):Math.abs(p)>1e-15?(h=u-(e*a-t*i)/o,g=p):(h=1,g=0),{mean:s,gaussian:c,k1:u,k2:d,du1:h,dv1:g}}function gd(e,t,n,r){let i=new e.BRepAdaptor_Surface_2(t,!1),a=new e.gp_Pnt_1,o=new e.gp_Vec_1,s=new e.gp_Vec_1,c=new e.gp_Vec_1,l=new e.gp_Vec_1,u=new e.gp_Vec_1;i.D2(n,r,a,o,s,c,l,u);let d=o.Dot(o),f=o.Dot(s),p=s.Dot(s),m=o.Crossed(s),h=m.Magnitude(),g=md();if(h>=1e-15){m.Divide(h);let e=hd(d,f,p,c.Dot(m),u.Dot(m),l.Dot(m));e&&(g={gaussian:e.gaussian,mean:e.mean,max:e.k1,min:e.k2,maxDirection:_d(o,s,e.du1,e.dv1),minDirection:_d(o,s,-e.dv1,e.du1)})}return a.delete(),o.delete(),s.delete(),c.delete(),l.delete(),u.delete(),m.delete(),i.delete(),g}function _d(e,t,n,r){let i=n*e.X()+r*t.X(),a=n*e.Y()+r*t.Y(),o=n*e.Z()+r*t.Z(),s=Math.sqrt(i*i+a*a+o*o);return s<1e-15?[1,0,0]:[i/s,a/s,o/s]}function vd(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.SurfaceProperties_2(t,n,1e-7,!0);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function yd(e,t){let n=new e.BRepExtrema_DistShapeShape_1;return n.LoadS1(t),{distanceTo(t){n.LoadS2(t);let r=new e.Message_ProgressRange_1;if(n.Perform(r),r.delete(),!n.IsDone())throw Error(`BRepExtrema_DistShapeShape failed`);let i=n.Value(),a=n.PointOnShape1(1),o=n.PointOnShape2(1),s={value:i,point1:[a.X(),a.Y(),a.Z()],point2:[o.X(),o.Y(),o.Z()]};return a.delete(),o.delete(),s},dispose(){n.delete()}}}function bd(e,t,n,r,i){let a=new e.HLRBRep_Algo_1;a.Add_2(t,0);let o=new e.gp_Pnt_3(n[0],n[1],n[2]),s=new e.gp_Dir_5(r[0],r[1],r[2]),c;if(i){let t=new e.gp_Dir_5(i[0],i[1],i[2]);c=new e.gp_Ax2_2(o,s,t),t.delete()}else c=new e.gp_Ax2_4(o,s);let l=new e.HLRAlgo_Projector_2(c);a.Projector_1(l),a.Update(),a.Hide_1();let u=new e.Handle_HLRBRep_Algo_2(a),d=new e.HLRBRep_HLRToShape(u),f={visible:{outline:d.OutLineVCompound_1(),smooth:d.Rg1LineVCompound_1(),sharp:d.VCompound_1()},hidden:{outline:d.OutLineHCompound_1(),smooth:d.Rg1LineHCompound_1(),sharp:d.HCompound_1()}};for(let t of[f.visible,f.hidden])for(let n of[t.outline,t.smooth,t.sharp])n.IsNull()||e.BRepLib.BuildCurves3d_2(n);return d.delete(),u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),f}function xd(e,t,n,r,i,a,o){let s=a*Math.PI/180,c=+!!o,l=new e.BRepFeat_MakeDPrism(t,n,r,s,c,!0);if(i!==null){let t=new e.Message_ProgressRange_1;l.Perform_1(i,t),t.delete()}else l.PerformThruAll();let u=l.Shape();return l.delete(),u}function Sd(e,t){let n=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),r=new e.TDocStd_Document(n);n.delete(),e.XCAFDoc_ShapeTool.SetAutoNaming(!1);let i=r.Main(),a=e.XCAFDoc_DocumentTool.ShapeTool(i).get(),o=e.XCAFDoc_DocumentTool.ColorTool(i).get();for(let n of t){let t=a.NewShape();a.SetShape(t,n.shape);let r=new e.TCollection_ExtendedString_2(n.name,!0);if(e.TDataStd_Name.Set_1(t,r),r.delete(),n.color){let[r,i,a,s]=n.color,c=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,s/255);o.SetColor_3(t,c,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),c.delete()}}return a.UpdateAssemblies(),r}function Cd(e,t,n={}){if(n.unit||n.modelUnit){new e.STEPCAFControl_Writer_1().delete();let t=(n.modelUnit??n.unit??`MM`).toUpperCase(),r=(n.unit??n.modelUnit??`MM`).toUpperCase();e.Interface_Static.SetCVal(`xstep.cascade.unit`,t),e.Interface_Static.SetCVal(`write.step.unit`,r)}let r=new e.XSControl_WorkSession,i=new e.Handle_XSControl_WorkSession_2(r),a=new e.STEPCAFControl_Writer_2(i,!1);a.SetColorMode(!0),a.SetLayerMode(!0),a.SetNameMode(!0),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,!0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,5);let o=new e.Handle_TDocStd_Document_2(t),s=new e.Message_ProgressRange_1;a.Transfer_1(o,e.STEPControl_StepModelType.STEPControl_AsIs,null,s),s.delete();let c=Dl(`_xcaf_export`,`step`),l=a.Write(c),u=``;if(l===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+c);u=new TextDecoder().decode(t),e.FS.unlink(`/`+c)}return a.delete(),i.delete(),u}function wd(e,t){new e.STEPCAFControl_Writer_1().delete();let n=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),r=new e.TDocStd_Document(n);n.delete();let i=r.Main(),a=e.XCAFDoc_DocumentTool.ShapeTool(i).get(),o=e.XCAFDoc_DocumentTool.ColorTool(i).get();e.XCAFDoc_ShapeTool.SetAutoNaming(!1);for(let n of t){let t=a.AddShape(n.shape,!1,!0);if(n.name){let r=new e.TCollection_ExtendedString_2(n.name,!0);e.TDataStd_Name.Set_1(t,r),r.delete()}if(n.color){let[r,i,a,s]=n.color,c=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,s/255);o.SetColor_3(t,c,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),c.delete()}}let s=new e.XSControl_WorkSession,c=new e.Handle_XSControl_WorkSession_2(s),l=new e.STEPCAFControl_Writer_2(c,!1),u=new e.Handle_TDocStd_Document_2(r),d=new e.Message_ProgressRange_1;l.Transfer_1(u,e.STEPControl_StepModelType.STEPControl_AsIs,null,d),d.delete();let f=Dl(`_step_cfg_export`,`step`),p=l.Write(f),m=``;if(p===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+f);m=new TextDecoder().decode(t),e.FS.unlink(`/`+f)}return l.delete(),c.delete(),u.delete(),r.delete(),m}function Td(e,t){let n=new e.STEPControl_Writer_1;n.Model(!0).delete();let r=new e.Message_ProgressRange_1;for(let i of t)n.Transfer(i.shape,e.STEPControl_StepModelType.STEPControl_AsIs,!0,r);let i=Dl(`_step_cfg_export`,`step`),a=n.Write(i);if(n.delete(),r.delete(),a===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+i);return e.FS.unlink(`/`+i),new TextDecoder().decode(t)}throw Error(`STEP configured export failed: writer did not complete successfully`)}function Ed(e,t,n={}){let r=n.unit??`MM`,i=n.modelUnit??r,a=n.schema??5;return e.Interface_Static.SetCVal(`xstep.cascade.unit`,i),e.Interface_Static.SetCVal(`write.step.unit`,r),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,!0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,a),t.some(e=>e.name||e.color)?wd(e,t):Td(e,t)}function Dd(e){return{composeTransform:t=>Ju(e,t),applyComposedTransformWithHistory:(t,n,r,i)=>Yu(e,t,n,r,i),sweepPipeShell:(t,n,r)=>Zu(e,t,n,r??{}),loftAdvanced:(t,n)=>Qu(e,t,n??{}),buildExtrusionLaw:(t,n,r)=>$u(e,t,n,r),revolveVec:(t,n,r,i)=>ed(e,t,n,r,i),positionOnCurve:(t,n,r)=>rd(e,t,n,r),linearPattern:(t,n,r,i)=>td(e,t,n,r,i),circularPattern:(t,n,r,i,a)=>nd(e,t,n,r,i,a),makeNonPlanarFace:t=>id(e,t),addHolesInFace:(t,n)=>ad(e,t,n),removeHolesFromFace:t=>od(e,t),makeFaceOnSurface:(t,n)=>sd(e,t,n),bsplineSurface:(t,n,r)=>cd(e,t,n,r),triangulatedSurface:(t,n,r)=>ld(e,t,n,r),sewAndSolidify:(t,n)=>dd(e,t,n),fixShape:t=>fd(e,t),fixSelfIntersection:t=>pd(e,t),surfaceCurvature:(t,n,r)=>gd(e,t,n,r),surfaceCenterOfMass:t=>vd(e,t),createDistanceQuery:t=>yd(e,t),projectEdges:(t,n,r,i)=>bd(e,t,n,r,i),draftPrism:(t,n,r,i,a,o)=>xd(e,t,n,r,i,a,o),generalTransformNonOrthogonal:(t,n,r)=>qu(e,t,n,r),createXCAFDocument:t=>Sd(e,t),writeXCAFToSTEP:(t,n)=>Cd(e,t,n??{}),exportSTEPConfigured:(t,n)=>Ed(e,t,n??{})}}var Od=()=>{};function kd(e){return e}function Ad(e){let t=kd(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function jd(e){return e}function Md(e,t){return{x:e,y:t}}function Nd(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`occt: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function Pd(e,t){return{x:e,y:t}}function Fd(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete:Od}}function Id(e){return e}function Ld(e){return e}function Rd(e,t,n,r){return te(e,t,n,r)}function zd(e,t,n,r){return ne(e,t,n,r)}function Bd(e,t,n,r,i,a,o){return ae(e,t,n,r,i,a,o)}function Vd(e,t,n,r,i,a,o,s,c){return{__bk2d:`trimmed`,basis:ae(e,t,n,r,o,s,c),tStart:i,tEnd:a}}function Hd(e){return oe(e)}function Ud(e,t){let n=e.length,r=Math.min(3,n-1),i=[],a=[];i.push(0),a.push(r+1);let o=n-r-1;for(let e=1;e<=o;e++)i.push(e/(o+1)),a.push(1);return i.push(1),a.push(r+1),{__bk2d:`bspline`,poles:[...e],knots:i,multiplicities:a,degree:r,isPeriodic:!1}}function Wd(e,t){return S(kd(e),t)}function Gd(e,t){return{point:S(kd(e),t),tangent:C(kd(e),t)}}function Kd(e){return w(kd(e))}function qd(e){return ee(Ad(e))}function Jd(e,t,n){return{__bk2d:`trimmed`,basis:kd(e),tStart:t,tEnd:n}}function Yd(e){return JSON.parse(JSON.stringify(e))}function Xd(e,t){let n=kd(e),r=w(n),i=[];for(let e=0;e<=30;e++){let a=r.first+(r.last-r.first)*e/30,[o,s]=S(n,a),[c,l]=C(n,a),u=Math.sqrt(c*c+l*l);u>1e-12?i.push([o-l/u*t,s+c/u*t]):i.push([o,s])}return Ud(i)}function Zd(e,t,n){return se(kd(e),t,n)}function Qd(e,t,n,r){return ce(kd(e),t,n,r)}function $d(e,t,n,r){return le(kd(e),t,n,r)}function ef(e,t,n){return ue(kd(e),t,n)}function tf(e,t,n,r,i){return de(kd(e),t,n,r,i)}function nf(e,t,n,r,i,a){return pf(e,of(t,n,r,i,a))}function rf(e,t,n){return{m:e,tx:t,ty:n,delete:Od}}function af(){return rf([1,0,0,0,1,0,0,0,1],0,0)}function of(e,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return af();let s=-i/o,c=r/o,l=a-1,u=[1+l*s*s,l*s*c,0,l*c*s,1+l*c*c,0,0,0,1];return rf(u,e-t(u,0)*e-t(u,1)*n,n-t(u,3)*e-t(u,4)*n)}function sf(e,t){return rf([1,0,0,0,1,0,0,0,1],e,t)}function cf(e,n,r,i,a,o,s){if(r===`axis`&&o!==void 0&&s!==void 0){let r=Math.sqrt(o*o+s*s),c=o/r,l=s/r,u=[2*c*c-1,2*c*l,0,2*c*l,2*l*l-1,0,0,0,1],d=i??e,f=a??n;return rf(u,d-t(u,0)*d-t(u,1)*f,f-t(u,3)*d-t(u,4)*f)}return rf([-1,0,0,0,-1,0,0,0,1],2*e,2*n)}function lf(e,t,n){let r=Math.cos(e),i=Math.sin(e);return rf([r,-i,0,i,r,0,0,0,1],t-r*t+i*n,n-i*t-r*n)}function uf(e,t,n){return rf([e,0,0,0,e,0,0,0,1],t*(1-e),n*(1-e))}function df(e,t,n){e.tx=t,e.ty=n}function ff(e,n){let r=e.m,i=n.m,a=e=>t(r,e),o=e=>t(i,e);e.m=[a(0)*o(0)+a(1)*o(3)+a(2)*o(6),a(0)*o(1)+a(1)*o(4)+a(2)*o(7),a(0)*o(2)+a(1)*o(5)+a(2)*o(8),a(3)*o(0)+a(4)*o(3)+a(5)*o(6),a(3)*o(1)+a(4)*o(4)+a(5)*o(7),a(3)*o(2)+a(4)*o(5)+a(5)*o(8),a(6)*o(0)+a(7)*o(3)+a(8)*o(6),a(6)*o(1)+a(7)*o(4)+a(8)*o(7),a(6)*o(2)+a(7)*o(5)+a(8)*o(8)];let s=e.tx,c=e.ty,l=Number(n.tx)||0,u=Number(n.ty)||0;e.tx=a(0)*l+a(1)*u+s,e.ty=a(3)*l+a(4)*u+c}function pf(e,n){let r=kd(e),i=n.m??[1,0,0,0,1,0,0,0,1],a=Number(n.tx)||0,o=Number(n.ty)||0,s=t(i,0),c=t(i,1),l=t(i,3),u=t(i,4);if(Math.abs(s-1)<1e-12&&Math.abs(u-1)<1e-12&&Math.abs(c)<1e-12&&Math.abs(l)<1e-12)return se(r,a,o);let d=w(r),f=[];for(let e=0;e<=20;e++){let[t,n]=S(r,d.first+(d.last-d.first)*e/20);f.push([s*t+c*n+a,l*t+u*n+o])}return oe(f)}function mf(e,t,n){let r=fe(kd(e),kd(t),n),i=r.segments.map(e=>Object.assign(e,{delete(){}}));return{points:r.points,segments:i}}function hf(e,t,n){let r=kd(e),i=w(r);if(r.__bk2d===`line`){let e=t-r.ox,a=n-r.oy,o=Math.max(i.first,Math.min(i.last,e*r.dx+a*r.dy)),[s,c]=S(r,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}if(r.__bk2d===`circle`){let e=Math.atan2(n-r.cy,t-r.cx),i=r.sense?e:-e;for(;i<0;)i+=2*Math.PI;for(;i>2*Math.PI;)i-=2*Math.PI;let[a,o]=S(r,i);return{param:i,distance:Math.sqrt((a-t)**2+(o-n)**2)}}if(!isFinite(i.first)||!isFinite(i.last))return null;let a=i.first,o=1/0,s=(i.last-i.first)/200;for(let e=0;e<=200;e++){let c=i.first+e*s,[l,u]=S(r,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}for(let e=0;e<10;e++){let[e,o]=S(r,a),[s,c]=C(r,a),l=(e-t)*s+(o-n)*c,u=s*s+c*c;if(u<1e-20)break;let d=l/u,f=Math.max(i.first,Math.min(i.last,a-d));if(Math.abs(f-a)<1e-14)break;a=f}let[c,l]=S(r,a);return{param:a,distance:Math.sqrt((c-t)**2+(l-n)**2)}}function gf(e,t,n,r,i,a){let o=kd(e),s=kd(t),c=n,l=i,u=1/0;for(let e=0;e<=50;e++){let t=n+(r-n)*e/50,[d,f]=S(o,t);for(let e=0;e<=50;e++){let n=i+(a-i)*e/50,[r,o]=S(s,n),p=(r-d)**2+(o-f)**2;p<u&&(u=p,c=t,l=n)}}let d=c,f=l;for(let c=0;c<20;c++){let[c,l]=S(s,f),u=hf(e,c,l);if(u){let e=Math.max(n,Math.min(r,u.param)),t=Math.abs(e-d)<1e-12;if(d=e,t)break}let[p,m]=S(o,d),h=hf(t,p,m);if(h){let e=Math.max(i,Math.min(a,h.param)),t=Math.abs(e-f)<1e-12;if(f=e,t)break}}let[p,m]=S(o,d),[h,g]=S(s,f);return Math.sqrt((h-p)**2+(g-m)**2)}function _f(e,n,r,i){let a=kd(e),o=w(a),s=Math.max(3,{C0:1,C1:2,C2:3,C3:4}[r]??4),c=Math.max(100,i*10),l=[],u=1/0;for(let e=0;e<3&&u>n;e++){l=[];for(let e=0;e<=c;e++){let t=o.first+(o.last-o.first)*e/c;l.push(S(a,t))}u=0;for(let e=0;e<c;e++){let[n,r]=S(a,o.first+(o.last-o.first)*(e+.5)/c),i=t(l,e),s=t(l,e+1),d=(i[0]+s[0])/2,f=(i[1]+s[1])/2,p=Math.sqrt((n-d)**2+(r-f)**2);p>u&&(u=p)}u>n&&(c=Math.min(c*2,500))}return Ud(l,{degMax:s})}function vf(e){let n=Ad(e);if(n.__bk2d===`bezier`)return[e];if(n.__bk2d!==`bspline`)return vf(_f(e,1e-6,`C2`,10));let r=w(kd(e)),i=r.first,a=r.last,o=[];for(let e of n.knots)e>i+1e-12&&e<a-1e-12&&o.push(e);let s=[i,...o,a],c=[];for(let e=0;e<s.length-1;e++){let r=t(s,e),i=t(s,e+1),a=i-r;if(a<1e-15)continue;let o=S(n,r),l=S(n,i),u=C(n,r),d=C(n,i),f=a/3,p={__bk2d:`bezier`,poles:[o,[o[0]+u[0]*f,o[1]+u[1]*f],[l[0]-d[0]*f,l[1]-d[1]*f],l]};c.push(p)}return c.length>0?c:[e]}function yf(){return Ce()}function bf(e,t,n){we(jd(e),kd(t),n)}function xf(e){let t=jd(e);return{xMin:t.xMin,yMin:t.yMin,xMax:t.xMax,yMax:t.yMax}}function Sf(e,t){let n=jd(e),r=jd(t);n.xMin=Math.min(n.xMin,r.xMin),n.yMin=Math.min(n.yMin,r.yMin),n.xMax=Math.max(n.xMax,r.xMax),n.yMax=Math.max(n.yMax,r.yMax)}function Cf(e,t){let n=jd(e),r=jd(t);return n.xMax<r.xMin||r.xMax<n.xMin||n.yMax<r.yMin||r.yMax<n.yMin}function wf(e,t,n){let r=jd(e);return t<r.xMin||t>r.xMax||n<r.yMin||n>r.yMax}function Tf(e){let t=Ad(e);return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function Ef(e){let t=Ad(e);return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function Df(e){let t=Ad(e);return t.__bk2d===`bezier`?[...t.poles]:null}function Of(e){let t=Ad(e);return t.__bk2d===`bezier`?t.poles.length-1:null}function kf(e){let t=Ad(e);return t.__bk2d===`bspline`?{poles:[...t.poles],knots:[...t.knots],multiplicities:[...t.multiplicities],degree:t.degree,isPeriodic:t.isPeriodic}:null}function Af(e){return xe(kd(e))}function jf(e){return Se(e)}function Mf(e,t){let n=kd(e),r=w(n),i=[r.first,...[...t].sort((e,t)=>e-t),r.last],a=[];for(let e=0;e<i.length-1;e++)a.push({__bk2d:`trimmed`,basis:n,tStart:i[e],tEnd:i[e+1]});return a}function Nf(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepBuilderAPI_MakeEdge_3(r,i),o=a.Edge();return a.delete(),r.delete(),i.delete(),o}function Pf(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_4(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function Ff(e,n){let r=new e.TColgp_Array1OfPnt_2(1,n.length),i=new e.gp_Pnt_1;for(let e=0;e<n.length;e++){let a=t(n,e);i.SetCoord_2(a[0],a[1],a[2]),r.SetValue_1(e+1,i)}i.delete();let a=new e.GeomAPI_PointsToBSpline_2(r,3,8,e.GeomAbs_Shape.GeomAbs_C2,1e-6);if(r.delete(),!a.IsDone())throw a.delete(),Error(`Interpolation failed — GeomAPI_PointsToBSpline did not converge`);let o=a.Curve(),s=new e.Handle_Geom_Curve_2(o.get()),c=new e.BRepBuilderAPI_MakeEdge_24(s),l=c.Edge();return c.delete(),a.delete(),l}function If(e,n,r,i,a){let o=kd(n),s=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],c=(e,t)=>[r[0]+e*a[0]+t*s[0],r[1]+e*a[1]+t*s[1],r[2]+e*a[2]+t*s[2]];if(o.__bk2d===`line`)return Nf(e,c(o.ox,o.oy),c(o.ox+o.dx*o.len,o.oy+o.dy*o.len));if(o.__bk2d===`circle`||o.__bk2d===`trimmed`){let t=o;for(;t.__bk2d===`trimmed`;)t=t.basis;if(t.__bk2d===`circle`){let n=t,r=c(n.cx,n.cy),a=n.sense?i:[-i[0],-i[1],-i[2]];if(o.__bk2d===`circle`){let t=new e.gp_Pnt_3(r[0],r[1],r[2]),i=new e.gp_Dir_5(a[0],a[1],a[2]),o=new e.gp_Ax2_4(t,i),s=new e.gp_Circ_2(o,n.radius),c=new e.BRepBuilderAPI_MakeEdge_8(s),l=c.Edge();return c.delete(),s.delete(),o.delete(),i.delete(),t.delete(),l}let s=w(o),[l,u]=S(o,s.first),[d,f]=S(o,(s.first+s.last)/2),[p,m]=S(o,s.last);return Pf(e,c(l,u),c(d,f),c(p,m))}}if(o.__bk2d===`bezier`||o.__bk2d===`bspline`){let n=o.poles.map(([e,t])=>c(e,t));return n.length===2?Nf(e,t(n,0),t(n,1)):Ff(e,n)}let l=w(o),u=[];for(let e=0;e<=60;e++){let[t,n]=S(o,l.first+(l.last-l.first)*e/60);u.push(c(t,n))}return Ff(e,u)}function Lf(e,t,n){let r=kd(t),i=w(r),a=[];for(let e=0;e<=60;e++){let[t,o]=S(r,i.first+(i.last-i.first)*e/60),s=n.get().Value(t,o);a.push([s.X(),s.Y(),s.Z()]),s.delete()}return Ff(e,a)}function Rf(e,t){return e.BRep_Tool.Surface_2(t)}function zf(e,t,n){let r=new e.BRepAdaptor_Curve2d_2(t,n),i=Number(r.FirstParameter()),a=Number(r.LastParameter()),o=[];for(let e=0;e<=30;e++){let t=i+(a-i)*e/30,n=r.Value(t);o.push([n.X(),n.Y()]),n.delete()}return r.delete(),Ud(o)}function Bf(e,t){e.BRepLib.BuildCurves3d_2(t)}function Vf(e,t,n,r){let i=new e.ShapeFix_Wire_2(t,n,r);i.FixEdgeCurves();let a=i.Wire();return i.delete(),a}function Hf(e,t,n={}){let{order:r=3,nbPtsOnCur:i=15,nbIter:a=2,tol3d:o=1e-5,tol2d:s=1e-4,maxDeg:c=8,maxSeg:l=9}=n,u=new e.BRepOffsetAPI_MakeFilling(r,i,a,!1,o,s,.01,.1,c,l);for(let n=0;n<t.length;n++){let r=fs(e,t[n],`edge`);for(let t of r)u.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,n===0)}let d=new e.Message_ProgressRange_1;u.Build(d);let f=u.Shape();return u.delete(),d.delete(),f}function Uf(e){return{wrapCurve2dHandle:e=>Id(e),createCurve2dAdaptor:e=>Ld(e),createPoint2d:(e,t)=>Md(e,t),createDirection2d:(e,t)=>Nd(e,t),createVector2d:(e,t)=>Pd(e,t),createAxis2d:(e,t,n,r)=>Fd(e,t,n,r),makeLine2d:(e,t,n,r)=>Rd(e,t,n,r),makeCircle2d:(e,t,n,r)=>zd(e,t,n,r),makeArc2dThreePoints:(e,t,n,r,i,a)=>re(e,t,n,r,i,a),makeArc2dTangent:(e,t,n,r,i,a)=>ie(e,t,n,r,i,a),makeEllipse2d:(e,t,n,r,i,a,o)=>Bd(e,t,n,r,i,a,o),makeEllipseArc2d:(e,t,n,r,i,a,o,s,c)=>Vd(e,t,n,r,i,a,o,s,c),makeBezier2d:e=>Hd(e),makeBSpline2d:(e,t)=>Ud(e,t),evaluateCurve2d:(e,t)=>Wd(e,t),evaluateCurve2dD1:(e,t)=>Gd(e,t),getCurve2dBounds:e=>Kd(e),getCurve2dType:e=>qd(e),trimCurve2d:(e,t,n)=>Jd(e,t,n),reverseCurve2d:e=>{},copyCurve2d:e=>Yd(e),offsetCurve2d:(e,t)=>Xd(e,t),translateCurve2d:(e,t,n)=>Zd(e,t,n),rotateCurve2d:(e,t,n,r)=>Qd(e,t,n,r),scaleCurve2d:(e,t,n,r)=>$d(e,t,n,r),mirrorCurve2dAtPoint:(e,t,n)=>ef(e,t,n),mirrorCurve2dAcrossAxis:(e,t,n,r,i)=>tf(e,t,n,r,i),affinityTransform2d:(e,t,n,r,i,a)=>nf(e,t,n,r,i,a),createIdentityGTrsf2d:()=>af(),createAffinityGTrsf2d:(e,t,n,r,i)=>of(e,t,n,r,i),createTranslationGTrsf2d:(e,t)=>sf(e,t),createMirrorGTrsf2d:(e,t,n,r,i,a,o)=>cf(e,t,n,r,i,a,o),createRotationGTrsf2d:(e,t,n)=>lf(e,t,n),createScaleGTrsf2d:(e,t,n)=>uf(e,t,n),setGTrsf2dTranslationPart:(e,t,n)=>{df(e,t,n)},multiplyGTrsf2d:(e,t)=>{ff(e,t)},transformCurve2dGeneral:(e,t)=>pf(e,t),intersectCurves2d:(e,t,n)=>mf(e,t,n),projectPointOnCurve2d:(e,t,n)=>hf(e,t,n),distanceBetweenCurves2d:(e,t,n,r,i,a)=>gf(e,t,n,r,i,a),approximateCurve2dAsBSpline:(e,t,n,r)=>_f(e,t,n,r),decomposeBSpline2dToBeziers:e=>vf(e),createBoundingBox2d:()=>yf(),addCurveToBBox2d:(e,t,n)=>{bf(e,t,n)},getBBox2dBounds:e=>xf(e),mergeBBox2d:(e,t)=>{Sf(e,t)},isBBox2dOut:(e,t)=>Cf(e,t),isBBox2dOutPoint:(e,t,n)=>wf(e,t,n),getCurve2dCircleData:e=>Tf(e),getCurve2dEllipseData:e=>Ef(e),getCurve2dBezierPoles:e=>Df(e),getCurve2dBezierDegree:e=>Of(e),getCurve2dBSplineData:e=>kf(e),serializeCurve2d:e=>Af(e),deserializeCurve2d:e=>jf(e),splitCurve2d:(e,t)=>Mf(e,t),liftCurve2dToPlane:(t,n,r,i)=>If(e,t,n,r,i),buildEdgeOnSurface:(t,n)=>Lf(e,t,n),extractSurfaceFromFace:t=>Rf(e,t),extractCurve2dFromEdge:(t,n)=>zf(e,t,n),buildCurves3d:t=>{Bf(e,t)},fixWireOnFace:(t,n,r)=>Vf(e,t,n,r),fillSurface:(t,n)=>Hf(e,t,n)}}function Wf(){let e=e=>()=>{throw new c(`${e} is only available with the brepkit kernel`)};return{export3MF:e(`export3MF`),exportGLB:e(`exportGLB`),exportOBJ:e(`exportOBJ`),exportPLY:e(`exportPLY`),import3MF:e(`import3MF`),importOBJ:e(`importOBJ`),importGLB:e(`importGLB`),filletVariable:e(`filletVariable`),helicalSweep:e(`helicalSweep`),sweepWithOptions:e(`sweepWithOptions`),defeature:e(`defeature`),detectSmallFeatures:e(`detectSmallFeatures`),recognizeFeatures:e(`recognizeFeatures`),meshBoolean:(()=>{throw new c(`meshBoolean is only available with the brepkit kernel`)}),edgeToFaceMap:e(`edgeToFaceMap`),sharedEdges:e(`sharedEdges`),adjacentFaces:e(`adjacentFaces`),curveDegreeElevate:e(`curveDegreeElevate`),curveKnotInsert:e(`curveKnotInsert`),curveKnotRemove:e(`curveKnotRemove`),curveSplit:e(`curveSplit`),approximateSurfaceLspia:e(`approximateSurfaceLspia`),untrimFace:e(`untrimFace`),mergeCoincidentVertices:e(`mergeCoincidentVertices`),removeDegenerateEdges:e(`removeDegenerateEdges`),fixFaceOrientations:e(`fixFaceOrientations`),classifyPointRobust:e(`classifyPointRobust`),classifyPointWinding:e(`classifyPointWinding`),executeBatch:e(`executeBatch`),checkpoint:e(`checkpoint`),checkpointCount:e(`checkpointCount`),restoreCheckpoint:e(`restoreCheckpoint`),discardCheckpoint:e(`discardCheckpoint`)}}function Gf(e){return{draft:(t,n,r,i,a)=>Gu(e,t,n,r,i,a,[],1).shape}}var Kf=class{oc;kernelId=`occt`;capabilities=a;constructor(e){this.oc=e,Object.assign(this,Rs(e),Vs(e),oc(e),$s(e),Mc(e),Kc(e),cl(e),xl(e),Tl(e),Pl(e),ss(e),xs(e),fu(e),hu(e),vu(e),Su(e),Ku(e),Dd(e),Uf(e),Gf(e),Wf())}},qf=()=>{};function Jf(e){return typeof e==`object`&&!!e&&e.__brepkit}function Yf(e,t){return{__brepkit:!0,type:e,id:t,delete:qf,HashCode(e){return t%e},IsNull(){return!1}}}function F(e){return Yf(`solid`,e)}function Xf(e){return Yf(`face`,e)}function Zf(e){return Yf(`edge`,e)}function Qf(e){return Yf(`wire`,e)}function $f(e){return Yf(`shell`,e)}function ep(e){let t=Yf(`compound`,e);return gp.has(e)?{...t,delete:()=>gp.delete(e)}:t}function tp(e){return Yf(`vertex`,e)}function I(e,t){if(!Jf(e))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof e);if(t&&e.type!==t)throw Error(`brepkit: expected ${t} handle, got ${e.type}`);return e.id}function L(e){return Array.from(e)}function np(e,t){if(!Jf(e))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof e);if(e.type!==`solid`)throw Error(`brepkit: ${t} requires a solid, got ${e.type}. Consider using makeCompound() to combine shapes first.`);return e.id}function rp(e,t,n){if(!Jf(t))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof t);if(t.type===`solid`)return[t.id];if(t.type===`compound`){let r=L(e.getCompoundSolids(t.id));if(r.length>0)return r;throw Error(`brepkit: ${n} received a compound with no solids.`)}throw Error(`brepkit: ${n} requires a solid or compound of solids, got ${t.type}.`)}function ip(e,t,n,r,i,a){let o=e-r,s=t-i,c=n-a;return Math.sqrt(o*o+s*s+c*c)}function ap(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function op(e,t,n){return[1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1]}function sp(e,t){if(!Array.isArray(e)||e.length<3)return t;let[n,r,i]=e;return typeof n==`number`&&typeof r==`number`&&typeof i==`number`&&Number.isFinite(n)&&Number.isFinite(r)&&Number.isFinite(i)?[n,r,i]:t}function cp(e,t=[0,0,1],n=[0,0,0]){let r=sp(t,[0,0,1]),i=r[0]===0&&r[1]===0&&r[2]===0?[0,0,1]:r,a=sp(n,[0,0,0]),o=e*Math.PI/180,s=Math.cos(o),c=Math.sin(o),l=1-s,u=Math.sqrt(i[0]**2+i[1]**2+i[2]**2),[d,f,p]=[i[0]/u,i[1]/u,i[2]/u],m=l*d*d+s,h=l*d*f-c*p,g=l*d*p+c*f,_=l*f*d+c*p,v=l*f*f+s,y=l*f*p-c*d,b=l*p*d-c*f,x=l*p*f+c*d,S=l*p*p+s,[C,w,ee]=a;return[m,h,g,C-(m*C+h*w+g*ee),_,v,y,w-(_*C+v*w+y*ee),b,x,S,ee-(b*C+x*w+S*ee),0,0,0,1]}function lp(e,t){let[n,r,i]=sp(e,[0,0,0]);return[t,0,0,n*(1-t),0,t,0,r*(1-t),0,0,t,i*(1-t),0,0,0,1]}function up(e,n){let r=n=>t(e,n);return[r(0),r(1),r(2),n[0],r(3),r(4),r(5),n[1],r(6),r(7),r(8),n[2],0,0,0,1]}function dp(e,t){let[n,r,i]=e,a=Math.sqrt(t[0]**2+t[1]**2+t[2]**2),o=t[0]/a,s=t[1]/a,c=t[2]/a,l=2*(n*o+r*s+i*c);return[1-2*o*o,-2*o*s,-2*o*c,l*o,-2*s*o,1-2*s*s,-2*s*c,l*s,-2*c*o,-2*c*s,1-2*c*c,l*c,0,0,0,1]}function fp(e,t){let n=Array(16).fill(0);for(let r=0;r<4;r++)for(let i=0;i<4;i++)for(let a=0;a<4;a++)n[r*4+i]=n[r*4+i]+e[r*4+a]*t[a*4+i];return n}var pp=.01,mp=9e5;function hp(){return mp++}var gp=new Map,_p=new Set;function vp(e,t){_p.has(e)||(_p.add(e),console.warn(`brepkit: ${t}`))}function yp(e){return e.optimisation!==void 0||e.simplify!==void 0||e.strategy!==void 0||e.fuzzyValue!==void 0}function bp(e){return e}function xp(e){let t=e;for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function Sp(e){return e}function Cp(e,t){if(typeof t!=`function`)return t;let n;for(let r of e){let e;try{e=t(r)}catch{throw Error(`brepkit does not support variable draft with multiple distinct angles. Use the OCCT kernel for per-face angle variation, or use a uniform angle.`)}if(n===void 0)n=e;else if(e!==n)throw Error(`brepkit does not support variable draft with multiple distinct angles. Use the OCCT kernel for per-face angle variation, or use a uniform angle.`)}if(n===void 0)throw Error(`draft: no faces provided`);return n}function wp(e,t,n){let r=gp.get(t);return r?r.flatMap(t=>t.type===n?[t]:Mp(e,t,n)):n===`solid`?L(e.getCompoundSolids(t)).map(F):n===`face`||n===`edge`||n===`vertex`||n===`wire`?L(e.getCompoundSolids(t)).map(F).flatMap(t=>Mp(e,t,n)):[]}function Tp(e,t,n,r){switch(r){case`solid`:return[t];case`shell`:return L(e.getSolidShells(n)).map($f);case`face`:return L(e.getSolidFaces(n)).map(Xf);case`edge`:return L(e.getSolidEdges(n)).map(Zf);case`vertex`:return L(e.getSolidVertices(n)).map(tp);case`wire`:return L(e.getSolidFaces(n)).flatMap(t=>L(e.getFaceWires(t)).map(Qf));default:return[]}}function Ep(e,t,n){let r=L(e.getShellFaces(t)).map(Xf),i=new Set,a=[];for(let t of r)for(let r of Mp(e,t,n)){let e=I(r);i.has(e)||(i.add(e),a.push(r))}return a}function Dp(e,t,n,r){return r===`shell`?[t]:r===`face`?L(e.getShellFaces(n)).map(Xf):r===`edge`||r===`vertex`?Ep(e,n,r):[]}function Op(e,t,n,r){return r===`face`?[t]:r===`edge`?L(e.getFaceEdges(n)).map(Zf):r===`vertex`?L(e.getFaceVertices(n)).map(tp):r===`wire`?L(e.getFaceWires(n)).map(Qf):[]}function kp(e,n){let r=L(e.getWireEdges(n)),i=new Set,a=[];for(let n of r){let r=e.getEdgeVertices(n),o=[[t(r,0),t(r,1),t(r,2)],[t(r,3),t(r,4),t(r,5)]];for(let[t,n,r]of o){let o=`${t},${n},${r}`;i.has(o)||(i.add(o),a.push(tp(e.makeVertex(t,n,r))))}}return a}function Ap(e,t,n,r){return r===`wire`?[t]:r===`edge`?L(e.getWireEdges(n)).map(Zf):r===`vertex`?kp(e,n):[]}function jp(e,n,r,i){if(i===`edge`)return[n];if(i===`vertex`){let n=e.getEdgeVertices(r),i=e.makeVertex(t(n,0),t(n,1),t(n,2)),a=e.makeVertex(t(n,3),t(n,4),t(n,5));return[tp(i),tp(a)]}return[]}function Mp(e,t,n){let r=I(t);switch(t.type){case`compound`:return wp(e,r,n);case`solid`:return Tp(e,t,r,n);case`shell`:return Dp(e,t,r,n);case`face`:return Op(e,t,r,n);case`wire`:return Ap(e,t,r,n);case`edge`:return jp(e,t,r,n);default:return[]}}function Np(e,t,n){if(Array.isArray(t))for(let e of t)n(e)}function Pp(e,t){if(Jf(t))return t.type;throw Error(`brepkit: cannot determine shape type of non-brepkit handle`)}function Fp(e,t,n){return Jf(t)&&Jf(n)&&t.id===n.id&&t.type===n.type}function Ip(e,t,n){return Fp(e,t,n)}function Lp(e,t,n){return t}function Rp(e,t,n){return Jf(t)?t.id%n:0}function zp(e,t){return!t||!Jf(t)}function Bp(e,t){let n=I(t);return e.getShapeOrientation(n)}function Vp(e,t){let n=np(t,`edgeToFaceMap`);return e.edgeToFaceMap(n)}function Hp(e,t,n){let r=I(t,`face`),i=I(n,`face`);return Array.from(e.sharedEdges(r,i)).map(e=>Zf(e))}function Up(e,t,n){let r=np(t,`adjacentFaces`),i=I(n,`face`);return Array.from(e.adjacentFaces(r,i)).map(e=>Xf(e))}function Wp(e,t){let n=t;return n.type===`face`?[n.id]:n.type===`solid`?L(e.getSolidFaces(n.id)):n.type===`shell`?L(e.getShellFaces(n.id)):[]}function Gp(e,t,n){let r=t.flatMap(t=>Wp(e,t)),i=n??1e-7;try{return $f(e.weldShellsAndFaces(r,i))}catch(e){console.warn(`brepkit: weldShellsAndFaces failed, falling back to sewFaces:`,e)}return $f(e.sewFaces(r,i))}function Kp(e){return{iterShapes:(t,n)=>Mp(e,t,n),iterShapeList:(t,n)=>{Np(e,t,n)},shapeType:t=>Pp(e,t),isSame:(t,n)=>Fp(e,t,n),isEqual:(t,n)=>Ip(e,t,n),downcast:(t,n)=>Lp(e,t,n),copyShape:t=>Lp(e,t),hashCode:(t,n)=>Rp(e,t,n),isNull:t=>zp(e,t),shapeOrientation:t=>Bp(e,t),edgeToFaceMap:t=>Vp(e,t),sharedEdges:(t,n)=>Hp(e,t,n),adjacentFaces:(t,n)=>Up(e,t,n),sew:(t,n)=>Gp(e,t,n)}}function qp(e,t){return n(e.getVertexPosition(I(t,`vertex`)))}function Jp(e,t){return e.getSurfaceType(I(t,`face`))}function Yp(e,n){let r=e.getSurfaceDomain(I(n,`face`));return{uMin:t(r,0),uMax:t(r,1),vMin:t(r,2),vMax:t(r,3)}}function Xp(e,t){return Qf(e.getFaceOuterWire(I(t,`face`)))}function Zp(e,t,r,i){return n(e.evaluateSurfaceNormal(I(t,`face`),r,i))}function Qp(e,t,r,i){return n(e.evaluateSurface(I(t,`face`),r,i))}function $p(e,n,r){try{let i=e.projectPointOnSurface(I(n,`face`),r[0],r[1],r[2]);return[t(i,0),t(i,1)]}catch(e){return console.warn(`brepkit: uvFromPoint failed:`,e),null}}function em(e,t,r){return n(e.projectPointOnSurface(I(t,`face`),r[0],r[1],r[2]),2)}function tm(e,r,i){let a=r,o,s=i;if(a.type===`wire`){let n=L(e.getWireEdges(a.id));o=t(n,n.length-1);let r=0;for(let a of n){let n=e.getEdgeCurveParameters(a),c=t(n,1)-t(n,0);if(i<=r+c||a===o){o=a,s=Math.min(t(n,0)+(i-r),t(n,1));break}r+=c}}else o=I(r,`edge`);let c=e.evaluateEdgeCurveD1(o,s);return{point:n(c,0),tangent:n(c,3)}}function nm(e,n){let r=n;if(r.type===`wire`){let n=L(e.getWireEdges(r.id));if(n.length===0)return[0,0];let i=0;for(let r of n){let n=e.getEdgeCurveParameters(r);i+=t(n,1)-t(n,0)}return[0,i]}let i=e.getEdgeCurveParameters(I(n,`edge`));return[t(i,0),t(i,1)]}function rm(e,r,i){let a=r;if(a.type===`wire`){let r=L(e.getWireEdges(a.id)),o=0;for(let a of r){let s=e.getEdgeCurveParameters(a),c=t(s,1)-t(s,0);if(i<=o+c||a===r[r.length-1]){let r=t(s,0)+(i-o);return n(e.evaluateEdgeCurve(a,Math.min(r,t(s,1))))}o+=c}return n(e.evaluateEdgeCurve(t(r,0),i))}return n(e.evaluateEdgeCurve(I(r,`edge`),i))}function im(e,r){let i=r;if(i.type===`wire`){let r=L(e.getWireEdges(i.id));if(r.length===0)return!1;if(r.length===1)return am(e.getEdgeVertices(t(r,0)));let a=[];for(let t of r){let r=e.getEdgeVertices(t);a.push(n(r,0)),a.push(n(r,3))}let o=[];for(let e of a){let t=o.findIndex(t=>ip(t[0],t[1],t[2],e[0],e[1],e[2])<1e-7);t>=0?o.splice(t,1):o.push(e)}return o.length===0}return am(e.getEdgeVertices(I(r,`edge`)))}function am(e){return ip(t(e,0),t(e,1),t(e,2),t(e,3),t(e,4),t(e,5))<1e-7}function om(e,t){let n=t;try{if(n.type===`edge`||n.type===`wire`&&L(e.getWireEdges(n.id)).length===1)return im(e,t)}catch{}return!1}function sm(e,t){try{if(om(e,t)){let n=nm(e,t);return n[1]-n[0]}}catch{}return 0}function cm(e,t){if(t.type===`wire`){let n=Mp(e,t,`edge`)[0];return n?e.getEdgeCurveType(I(n,`edge`)):`LINE`}return e.getEdgeCurveType(I(t,`edge`))}function lm(e,t,n){let r=I(t,`edge`);return Zf(e.curveDegreeElevate(r,n))}function um(e,t,n,r){let i=I(t,`edge`);return Zf(e.curveKnotInsert(i,n,r))}function dm(e,t,n,r){let i=I(t,`edge`);return Zf(e.curveKnotRemove(i,n,r))}function fm(e,n,r){let i=I(n,`edge`),a=e.curveSplit(i,r);return[Zf(t(a,0)),Zf(t(a,1))]}function pm(e,t,n,r,i,a,o,s,c,l){return Xf(e.approximateSurfaceLspia(t,n,r,i,a,o,s,c,l))}function mm(e,t,n,r){let i=I(t,`face`);return Xf(e.untrimFace(i,n,r))}function hm(e,t){return t}function gm(e,t){let r=Km(e,t);return!r||r.controlPoints.length<6?null:n(r.controlPoints,r.controlPoints.length-6)}function _m(e,t){if(Jf(t)&&t.type===`face`){let n=t.id,r=JSON.parse(e.getAnalyticSurfaceParams(n));if(r.type===`cylinder`)return{radius:r.radius,isDirect:!0}}return null}function vm(e,t){let n=JSON.parse(e.getAnalyticSurfaceParams(I(t,`face`))),r=n.type===`cylinder`?n.origin:n.type===`cone`?n.apex:null;if(!r||!n.axis)return null;let[i,a,o]=r,[s,c,l]=n.axis,u=Math.hypot(s,c,l);return u<1e-12?null:{origin:[i,a,o],direction:[s/u,c/u,l/u]}}function ym(e,t){return t}function bm(e,n,r,i,a){a!==void 0&&vp(`classify-tolerance`,`classifyPointOnFace() tolerance parameter is not supported; brepkit uses domain-based classification.`);let o=I(n,`face`),s=e.getSurfaceDomain(o);return r<t(s,0)||r>t(s,1)||i<t(s,2)||i>t(s,3)?`out`:`in`}function xm(e,t,n,r){let i=np(t,`classifyPointRobust`);return e.classifyPointRobust(i,n[0],n[1],n[2],r)}function Sm(e,t,n,r){let i=np(t,`classifyPointWinding`);return e.classifyPointWinding(i,n[0],n[1],n[2],r)}function Cm(e,t,n,r){let i=np(t,`detectSmallFeatures`);return Array.from(e.detectSmallFeatures(i,n,r)).map(e=>Xf(e))}function wm(e,t,n){let r=np(t,`recognizeFeatures`);return e.recognizeFeatures(r,n)}function Tm(e,t,r,i,a){let o=I(t),[s,c,l]=r,[u,d,f]=i,[p,m,h]=a??[1,0,0],g=.1;try{let t=e.boundingBox(o),[r,i,a]=n(t,0),[s,c,l]=n(t,3),u=ip(r,i,a,s,c,l);u>0&&(g=Math.max(u*.001,1e-6))}catch{}let _=e.projectEdges(o,s,c,l,u,d,f,p,m,h,!0,g),v;try{v=JSON.parse(_)}catch{v={visible:[],hidden:[]}}let y=t=>{let n=[];for(let r of t)for(let t=0;t+3<r.length;t+=2){let i=r[t],a=r[t+1],o=r[t+2],s=r[t+3];i===void 0||a===void 0||o===void 0||s===void 0||i===o&&a===s||n.push(Zf(e.makeLineEdge(i,a,0,o,s,0)))}let r=hp();return gp.set(r,n),ep(r)},b=()=>{let e=hp();return gp.set(e,[]),ep(e)};return{visible:{outline:y(v.visible),smooth:b(),sharp:b()},hidden:{outline:y(v.hidden),smooth:b(),sharp:b()}}}function Em(e,t){let n=I(t,`edge`),r=e.getNurbsCurveData(n);if(!r)return null;let i=JSON.parse(r);return{degree:i.degree,poles:i.controlPoints,weights:i.weights,knots:i.distinctKnots,multiplicities:i.multiplicities,isPeriodic:i.periodic,isRational:i.rational}}function Dm(e,t){return JSON.parse(e.getNurbsSurfaceDataParity(I(t,`face`)))}function Om(e){return{vertexPosition:t=>qp(e,t),surfaceType:t=>Jp(e,t),uvBounds:t=>Yp(e,t),outerWire:t=>Xp(e,t),surfaceNormal:(t,n,r)=>Zp(e,t,n,r),pointOnSurface:(t,n,r)=>Qp(e,t,n,r),uvFromPoint:(t,n)=>$p(e,t,n),projectPointOnFace:(t,n)=>em(e,t,n),curveTangent:(t,n)=>tm(e,t,n),curveParameters:t=>nm(e,t),curvePointAtParam:(t,n)=>rm(e,t,n),curveIsClosed:t=>im(e,t),curveIsPeriodic:t=>om(e,t),curvePeriod:t=>sm(e,t),curveType:t=>cm(e,t),curveDegreeElevate:(t,n)=>lm(e,t,n),curveKnotInsert:(t,n,r)=>um(e,t,n,r),curveKnotRemove:(t,n,r)=>dm(e,t,n,r),curveSplit:(t,n)=>fm(e,t,n),approximateSurfaceLspia:(t,n,r,i,a,o,s,c,l)=>pm(e,t,n,r,i,a,o,s,c,l),untrimFace:(t,n,r)=>mm(e,t,n,r),createCurveAdaptor:t=>hm(e,t),getBezierPenultimatePole:t=>gm(e,t),getSurfaceCylinderData:t=>_m(e,t),getSurfaceAxis:t=>vm(e,t),reverseSurfaceU:t=>ym(e,t),classifyPointOnFace:(t,n,r,i)=>bm(e,t,n,r,i),classifyPointRobust:(t,n,r)=>xm(e,t,n,r),classifyPointWinding:(t,n,r)=>Sm(e,t,n,r),detectSmallFeatures:(t,n,r)=>Cm(e,t,n,r),recognizeFeatures:(t,n)=>wm(e,t,n),projectEdges:(t,n,r,i)=>Tm(e,t,n,r,i),getNurbsCurveData:t=>Em(e,t),getNurbsSurfaceData:t=>Dm(e,t)}}function km(e,t,n){if(Array.isArray(n)&&n.length===16)return Hm(e,t,n);throw Error(`brepkit: transform expects a 16-element matrix array`)}function Am(e,t,n,r,i){return Hm(e,t,op(n,r,i))}function jm(e,t,n,r,i){return Hm(e,t,cp(n,r,i))}function Mm(e,t,n,r){let i=t;return i.type===`solid`?F(e.mirror(i.id,n[0],n[1],n[2],r[0],r[1],r[2])):Hm(e,t,dp(n,r))}function Nm(e,t,n,r){return Hm(e,t,lp(n,r))}function Pm(e,t,n,r,i){return Hm(e,t,up(n,r))}function Fm(e,t,n,r){return Hm(e,t,up(n,r))}function Im(e,t,n,r){let{point:i,tangent:a}=tm(e,n,r),[o,s,c]=a,l=Math.sqrt(o*o+s*s+c*c);if(l<1e-12)return Am(e,t,i[0],i[1],i[2]);let u=o/l,d=s/l,f=c/l,p=t;if(Math.abs(f+1)<1e-10)p=jm(e,p,180,[1,0,0]);else if(Math.abs(f-1)>1e-10){let t=[-d,u,0],n=180/Math.PI*Math.acos(Math.max(-1,Math.min(1,f)));p=jm(e,p,n,t)}return Am(e,p,i[0],i[1],i[2])}function Lm(e,t,n,r,i){let a=[t];for(let o=1;o<i;o++){let i=r*o;a.push(Am(e,t,n[0]*i,n[1]*i,n[2]*i))}return a}function Rm(e,t,n,r,i,a){let o=[t];for(let s=1;s<a;s++)o.push(jm(e,t,i*s,r,n));return o}function zm(e,t,n,r,i,a,o,s){return ep(e.gridPattern(np(t,`gridPattern`),n[0],n[1],n[2],r[0],r[1],r[2],i,a,o,s))}function Bm(e,t){return t.map(t=>{switch(t.type){case`translate`:return Am(e,t.shape,t.x,t.y,t.z);case`rotate`:return jm(e,t.shape,t.angle,t.axis,t.center);case`scale`:return Nm(e,t.shape,t.center,t.factor);case`mirror`:return Mm(e,t.shape,t.origin,t.normal)}})}function Vm(e){return{transform:(t,n)=>km(e,t,n),locate:(t,n)=>km(e,t,n),translate:(t,n,r,i)=>Am(e,t,n,r,i),rotate:(t,n,r,i)=>jm(e,t,n,r,i),mirror:(t,n,r)=>Mm(e,t,n,r),scale:(t,n,r)=>Nm(e,t,n,r),generalTransform:(t,n,r,i)=>Pm(e,t,n,r,i),generalTransformNonOrthogonal:(t,n,r)=>Fm(e,t,n,r),positionOnCurve:(t,n,r)=>Im(e,t,n,r),linearPattern:(t,n,r,i)=>Lm(e,t,n,r,i),circularPattern:(t,n,r,i,a)=>Rm(e,t,n,r,i,a),gridPattern:(t,n,r,i,a,o,s)=>zm(e,t,n,r,i,a,o,s),transformBatch:t=>Bm(e,t)}}function Hm(e,t,n){let r=t;if(!Jf(t))throw Error(`brepkit: applyMatrix requires a BrepkitHandle`);switch(r.type){case`solid`:{let t=e.copySolid(r.id);return e.transformSolid(t,n),F(t)}case`face`:{if(typeof e.copyFace!=`function`)throw Error(`brepkit: applyMatrix for faces requires copyFace/transformFace WASM exports`);let t=e.copyFace(r.id);return e.transformFace(t,n),Xf(t)}case`wire`:{if(typeof e.copyWire!=`function`||typeof e.transformWire!=`function`)throw Error(`brepkit: applyMatrix for wires requires copyWire/transformWire WASM exports`);let t=e.copyWire(r.id);return e.transformWire(t,n),Qf(t)}case`edge`:{if(typeof e.copyEdge!=`function`||typeof e.transformEdge!=`function`)throw Error(`brepkit: applyMatrix for edges requires copyEdge/transformEdge WASM exports`);let t=e.copyEdge(r.id);return e.transformEdge(t,n),Zf(t)}default:throw Error(`brepkit: applyMatrix does not support '${r.type}' shapes`)}}function Um(e,t){return!!(e&&(e[0]!==0||e[1]!==0||e[2]!==0)||t&&(t[0]!==0||t[1]!==0||t[2]!==1))}function Wm(e,t,n,r){let i=t;if(r&&(r[0]!==0||r[1]!==0||r[2]!==1)){let[t,n,a]=r,o=Math.sqrt(t*t+n*n+a*a),s=t/o,c=n/o,l=a/o;if(Math.abs(l+1)<1e-10)i=jm(e,i,180,[1,0,0]);else if(Math.abs(l-1)>1e-10){let t=[-c,s,0],n=180/Math.PI*Math.acos(Math.max(-1,Math.min(1,l)));i=jm(e,i,n,t)}}return n&&(n[0]!==0||n[1]!==0||n[2]!==0)&&(i=Am(e,i,n[0],n[1],n[2])),i}function Gm(e,t){let r,i=t;if(i.type===`solid`||i.type===`compound`){let n=Mp(e,t,`face`);if(n.length===0)throw Error(`brepkit: extractPlaneFromFace: no faces found`);let i=n[0];if(!i)throw Error(`brepkit: extractPlaneFromFace: no faces found`);let a=I(i,`face`),o=0;for(let t of n){let n=I(t,`face`);try{let t=e.faceArea(n,pp);t>o&&(o=t,a=n)}catch{}}r=a}else r=I(t,`face`);let a=n(e.getFaceNormal(r)),o=e.tessellateFace(r,1).positions;return o.length>=3?{point:n(o),normal:a}:{point:[0,0,0],normal:a}}function Km(e,n){let r=n;if(r.type!==`edge`)return null;let i=e.getEdgeNurbsData(r.id);if(i){let e=JSON.parse(i);return{degree:e.degree,knots:e.knots,controlPoints:e.controlPoints,weights:e.weights}}let a=e.getEdgeVertices(r.id);return{degree:1,knots:[0,0,1,1],controlPoints:[t(a,0),t(a,1),t(a,2),t(a,3),t(a,4),t(a,5)],weights:[1,1]}}function qm(e,t){if(!Jf(t))return!1;if(t.type!==`solid`)return!0;try{return e.validateSolidRelaxed(t.id)===0}catch(e){return console.warn(`brepkit: isValid check failed:`,e),!1}}function Jm(e,t){if(!Jf(t))return!1;if(t.type!==`solid`)return!0;try{return e.validateSolid(t.id)===0}catch(e){return console.warn(`brepkit: isValidStrict check failed:`,e),!1}}function Ym(e,t){let n=t;if(n.type!==`solid`)throw Error(`brepkit: healSolid requires a solid, got ${n.type}. Consider using makeCompound() to combine shapes first.`);try{let n=e.repairSolid(I(t));return n>0&&console.warn(`brepkit: repairSolid left ${n} error(s) on solid.`),t}catch(n){try{return e.healSolid(I(t)),t}catch(e){return console.warn(`brepkit: healSolid failed (repairSolid error:`,n,`, healSolid error:`,e,`)`),null}}}function Xm(e,t){return t}function Zm(e,t,n){return t}function Qm(e,t,n){let r=np(t,`mergeCoincidentVertices`);return e.mergeCoincidentVertices(r,n)}function $m(e,t,n){let r=np(t,`removeDegenerateEdges`);return e.removeDegenerateEdges(r,n)}function eh(e,t){let n=np(t,`fixFaceOrientations`);return e.fixFaceOrientations(n)}function th(e,t){let n=t;return n.type===`solid`&&e.healSolid(n.id),t}function nh(e,t){return t}function rh(e,t){if(!Jf(t)||t.type!==`solid`)return null;try{return typeof e.validateSolidDetails==`function`?e.validateSolidDetails(t.id):null}catch{return null}}function ih(e){return{isValid:t=>qm(e,t),isValidStrict:t=>Jm(e,t),healSolid:t=>Ym(e,t),healFace:t=>Xm(e,t),healWire:(t,n)=>Zm(e,t,n),fixShape:t=>th(e,t),fixSelfIntersection:t=>nh(e,t),mergeCoincidentVertices:(t,n)=>Qm(e,t,n),removeDegenerateEdges:(t,n)=>$m(e,t,n),fixFaceOrientations:t=>eh(e,t),validationDetails:t=>rh(e,t)}}function ah(e){if(!(e instanceof Error))return!1;let t=e.message;return t.startsWith(`empty result:`)||t.includes(`produced empty result`)||t.includes(`produces empty result`)}function oh(e,t){return t.type===`compound`?L(e.getCompoundSolids(t.id)).length===0:!1}function sh(e){return ep(e.makeCompound([]))}function ch(e,t,n,r){if(r&&yp(r)&&vp(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),oh(e,t))return n;if(oh(e,n))return t;let i=np(t,`fuse`),a=n;if(a.type===`compound`){let t=L(e.getCompoundSolids(a.id)),n=i;for(let r of t)n=e.fuse(n,r);return F(n)}return F(e.fuse(i,np(n,`fuse`)))}function lh(e,t,n,r){if(r&&yp(r)&&vp(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),oh(e,t))return sh(e);if(oh(e,n))return t;let i=np(t,`cut`),a=n;if(a.type===`compound`){let t=L(e.getCompoundSolids(a.id)),n=i;for(let r of t)try{n=e.cut(n,r)}catch(t){if(ah(t))return sh(e);throw t}return F(n)}try{return F(e.cut(i,np(n,`cut`)))}catch(t){if(ah(t))return sh(e);throw t}}function uh(e,t,n,r){if(r&&yp(r)&&vp(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),oh(e,t)||oh(e,n))return sh(e);try{return F(e.intersect(np(t,`intersect`),np(n,`intersect`)))}catch(t){if(ah(t))return sh(e);throw t}}function dh(e,n,r,i){let{point:a,normal:o}=Gm(e,r),s=Jf(n)&&n.type===`solid`?n.id:I(n,`solid`),c=L(e.section(s,a[0],a[1],a[2],o[0],o[1],o[2]));if(c.length===0)return ep(e.makeCompound([]));let l=[];for(let n=0;n<c.length;n++){let r=L(e.getFaceWires(t(c,n)));for(let e=0;e<r.length;e++)l.push(Qf(t(r,e)))}let[u]=l;if(l.length===1&&u!==void 0)return u;let d=hp();return gp.set(d,l),ep(d)}function fh(e,n,r){if(n.length===0)throw Error(`brepkit: fuseAll requires at least one shape`);if(n.length===1)return t(n,0);if(e.compoundFuse){let t=[];for(let r of n){let n=r;n.type===`compound`?t.push(...L(e.getCompoundSolids(n.id))):t.push(np(r,`fuseAll`))}if(t.length===0)throw Error(`brepkit: fuseAll resolved to zero solid IDs`);return F(e.compoundFuse(new Uint32Array(t)))}let i=[...n];for(;i.length>1;){let t=[];for(let n=0;n<i.length;n+=2)n+1<i.length?t.push(ch(e,i[n],i[n+1],r)):t.push(i[n]);i=t}return t(i,0)}function ph(e,t,n,r){if(n.length===0)return t;if(n.length===1)return lh(e,t,n[0],r);let i=np(t,`cutAll`),a=[];for(let t of n){let n=t;n.type===`compound`?a.push(...L(e.getCompoundSolids(n.id))):a.push(np(t,`cutAll`))}return a.length===0?t:F(e.compoundCut(i,new Uint32Array(a)))}function mh(e,t,n){if(n.length===0)throw Error(`brepkit: split requires at least one tool`);let{point:r,normal:i}=Gm(e,n[0]),a=L(e.split(I(t,`solid`),r[0],r[1],r[2],i[0],i[1],i[2]));return ep(e.makeCompound(a))}function hh(e,t,n,r,i,a,o){let s=e.meshBoolean(t,n,r,i,a,o);return{vertices:new Float32Array(s.positions),normals:new Float32Array(s.normals),triangles:new Uint32Array(s.indices),uvs:new Float32Array,faceGroups:[{start:0,count:s.indices.length,faceHash:0}]}}function gh(e,t,n,r,i){let a=[];return(!Jf(t)||t.IsNull())&&a.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),(!Jf(n)||n.IsNull())&&a.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is null`}),a.length>0?{valid:!1,issues:a}:(i(t)||a.push({operand:`base`,issue:`not-valid`,message:`Base shape fails BRepCheck validation. Try autoHeal() first.`}),i(n)||a.push({operand:`tool`,issue:`not-valid`,message:`Tool shape fails BRepCheck validation. Try autoHeal() first.`}),{valid:a.length===0,issues:a})}function _h(e,n,r){let i=[];for(let r of n){let n=r;if(n.type===`solid`){let r=L(e.getSolidVertices(n.id));for(let n of r){let r=e.getVertexPosition(n);i.push(t(r,0),t(r,1),t(r,2))}}else if(n.type===`vertex`){let r=e.getVertexPosition(n.id);i.push(t(r,0),t(r,1),t(r,2))}}if(i.length<12)throw Error(`brepkit: hull requires enough points`);return F(e.convexHull(i))}function vh(e,t,n){if(t.length<4)throw Error(`brepkit: hull needs at least 4 points`);let r=[];for(let e of t)r.push(e.x,e.y,e.z);return F(e.convexHull(r))}function yh(e,n,r,i){let a=new Float64Array(n.length*3);for(let e=0;e<n.length;e++){let r=t(n,e);a[e*3]=r.x,a[e*3+1]=r.y,a[e*3+2]=r.z}let o=new Uint32Array(r.length*3);for(let e=0;e<r.length;e++){let n=t(r,e);o[e*3]=n[0],o[e*3+1]=n[1],o[e*3+2]=n[2]}return F(e.importIndexedMesh(a,o))}function bh(e){return{fuse:(t,n,r)=>ch(e,t,n,r),cut:(t,n,r)=>lh(e,t,n,r),intersect:(t,n,r)=>uh(e,t,n,r),section:(t,n,r)=>dh(e,t,n,r),fuseAll:(t,n)=>fh(e,t,n),cutAll:(t,n,r)=>ph(e,t,n,r),split:(t,n)=>mh(e,t,n),meshBoolean:(t,n,r,i,a,o)=>hh(e,t,n,r,i,a,o),checkBoolean:(t,n,r)=>gh(e,t,n,r,t=>qm(e,t)),hull:(t,n)=>_h(e,t,n),hullFromPoints:(t,n)=>vh(e,t,n),buildSolidFromFaces:(t,n,r)=>yh(e,t,n,r)}}function xh(e,t,n,r){return tp(e.makeVertex(t,n,r))}function Sh(e,t,n,r){if(t&&typeof t==`object`&&`origin`in t&&`direction`in t){let{origin:i,direction:a}=t,o=n??0,s=r??1;return Mh(e,[i[0]+a[0]*o,i[1]+a[1]*o,i[2]+a[2]*o],[i[0]+a[0]*s,i[1]+a[1]*s,i[2]+a[2]*s])}if(Jf(t)&&t.type===`edge`)return t;throw Error(`brepkit: makeEdge requires a curve with origin/direction, or an edge handle`)}function Ch(e,t){let n=[];for(let r of t){let t=r;if(t.type===`wire`)for(let r of L(e.getWireEdges(t.id)))n.push(r);else n.push(I(r,`edge`))}return Qf(e.makeWire(n,!0))}function wh(e,t,n){let r=t,i=r.type===`edge`?e.makeWire([r.id],!0):I(t,`wire`);return Xf(n?e.makePlanarFaceFromWire(i):e.makeFaceFromWire(i))}function Th(e,t,n,r){return F(e.makeBox(t,n,r))}function Eh(e,t,n){return Xf(e.makeRectangle(t,n))}function Dh(e,t,n,r,i){let a=F(e.makeCylinder(t,n));return Um(r,i)?Wm(e,a,r,i):a}function Oh(e,t,n){let r=F(e.makeSphere(t,32));return n&&(n[0]!==0||n[1]!==0||n[2]!==0)?Am(e,r,n[0],n[1],n[2]):r}function kh(e,t,n,r,i,a){let o=F(e.makeCone(t,n,r));return Um(i,a)?Wm(e,o,i,a):o}function Ah(e,t,n,r,i){let a=F(e.makeTorus(t,n,32));return Um(r,i)?Wm(e,a,r,i):a}function jh(e,t,n,r){let i=Math.max(t,n,r);return Pm(e,Oh(e,i),[t/i,0,0,0,n/i,0,0,0,r/i],[0,0,0],!1)}function Mh(e,t,n){return Zf(e.makeLineEdge(t[0],t[1],t[2],n[0],n[1],n[2]))}function Nh(e,t,n,r){let i=Math.sqrt(n[0]**2+n[1]**2+n[2]**2);return Zf(e.makeCircleEdge(t[0],t[1],t[2],n[0]/i,n[1]/i,n[2]/i,r))}function Ph(e,t,n,r,i,a){let o=a-i,s=1e-9;if(o>s&&o<2*Math.PI-s){let o=Math.hypot(n[0],n[1],n[2]),s=[n[0]/o,n[1]/o,n[2]/o],c=Math.abs(s[0])<.9?[1,0,0]:[0,1,0],l=[s[1]*c[2]-s[2]*c[1],s[2]*c[0]-s[0]*c[2],s[0]*c[1]-s[1]*c[0]],u=Math.hypot(l[0],l[1],l[2]),d=[l[0]/u,l[1]/u,l[2]/u],f=[s[1]*d[2]-s[2]*d[1],s[2]*d[0]-s[0]*d[2],s[0]*d[1]-s[1]*d[0]],p=e=>{let n=Math.cos(e),i=Math.sin(e);return[t[0]+r*(n*d[0]+i*f[0]),t[1]+r*(n*d[1]+i*f[1]),t[2]+r*(n*d[2]+i*f[2])]},m=p(i),h=p(a);return Zf(e.makeCircleArc3d(m[0],m[1],m[2],h[0],h[1],h[2],t[0],t[1],t[2],s[0],s[1],s[2]))}return cg(e,t,n,r,i,a)}function Fh(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));return Math.abs(o)<1e-12?null:[((e**2+t**2)*(r-a)+(n**2+r**2)*(a-t)+(i**2+a**2)*(t-r))/o,((e**2+t**2)*(i-n)+(n**2+r**2)*(e-i)+(i**2+a**2)*(n-e))/o]}function Ih(e,t,n,r){let i=[n[0]-t[0],n[1]-t[1],n[2]-t[2]],a=[r[0]-t[0],r[1]-t[1],r[2]-t[2]],o=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],s=Math.sqrt(o[0]**2+o[1]**2+o[2]**2);if(s<1e-12)return Mh(e,t,r);let c=[o[0]/s,o[1]/s,o[2]/s],l=Math.sqrt(i[0]**2+i[1]**2+i[2]**2),u=[i[0]/l,i[1]/l,i[2]/l],d=[c[1]*u[2]-c[2]*u[1],c[2]*u[0]-c[0]*u[2],c[0]*u[1]-c[1]*u[0]],f=e=>{let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return[n*u[0]+r*u[1]+i*u[2],n*d[0]+r*d[1]+i*d[2]]},[p,m]=f(t),[h,g]=f(n),[_,v]=f(r),y=Fh(p,m,h,g,_,v);if(!y)return Mh(e,t,r);let[b,x]=y,S=[t[0]+b*u[0]+x*d[0],t[1]+b*u[1]+x*d[1],t[2]+b*u[2]+x*d[2]];return Zf(e.makeCircleArc3d(t[0],t[1],t[2],r[0],r[1],r[2],S[0],S[1],S[2],c[0],c[1],c[2]))}function Lh(e,t,n,r,i,a){let o=Math.sqrt(n[0]**2+n[1]**2+n[2]**2);if(a!==void 0){let s=Math.sqrt(a[0]**2+a[1]**2+a[2]**2);return Zf(e.makeEllipseEdgeWithRef(t[0],t[1],t[2],n[0]/o,n[1]/o,n[2]/o,r,i,a[0]/s,a[1]/s,a[2]/s))}return Zf(e.makeEllipseEdge(t[0],t[1],t[2],n[0]/o,n[1]/o,n[2]/o,r,i))}function Rh(e,t,n,r,i,a,o,s){return lg(e,t,n,r,i,a,o,s)}function zh(e,n){if(n.length<2)throw Error(`brepkit: bezier requires at least 2 points`);let r=n.length-1,i=n.length,a=[...Array(r+1).fill(0),...Array(r+1).fill(1)],o=Array(i).fill(1),s=n.flatMap(([e,t,n])=>[e,t,n]),c=t(n,0),l=t(n,i-1);return Zf(e.makeNurbsEdge(c[0],c[1],c[2],l[0],l[1],l[2],r,a,s,o))}function Bh(e,t,n,r){return Zf(e.makeTangentArc3d(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]))}function Vh(e,t,n,r,i,a,o){let s=n/t,c=Math.max(4,Math.ceil(s*16)),l=i?.[0]??0,u=i?.[1]??0,d=i?.[2]??0,f=o?-1:1,p=[];for(let e=0;e<=c;e++){let t=e/c,i=f*2*Math.PI*s*t;p.push([l+r*Math.cos(i),u+r*Math.sin(i),d+n*t])}return Ch(e,[eg(e,p)])}function Hh(e,t){let n=[];for(let r of t){let t=r;if(t.type===`edge`)n.push(t.id);else if(t.type===`wire`)for(let r of L(e.getWireEdges(t.id)))n.push(r)}if(n.length===0)throw Error(`brepkit: makeWireFromMixed requires at least one edge`);return Qf(e.makeWire(n,!1))}function Uh(e,t){let n=t.filter(Jf);if(n.length===0)throw Error(`brepkit: makeCompound requires at least one shape`);if(n.every(e=>e.type===`solid`))return ep(e.makeCompound(n.map(e=>e.id)));let r=hp();return gp.set(r,n),ep(r)}function Wh(e,t,n){let r=Th(e,Math.abs(n[0]-t[0]),Math.abs(n[1]-t[1]),Math.abs(n[2]-t[2])),i=Math.min(t[0],n[0]),a=Math.min(t[1],n[1]),o=Math.min(t[2],n[2]);return i!==0||a!==0||o!==0?Am(e,r,i,a,o):r}function Gh(e,t){let n=t;if(n.type===`solid`)return t;if(n.type===`shell`){try{return e.getSolidFaces(n.id),F(n.id)}catch{}return F(e.solidFromShell(n.id))}return F(e.solidFromShell(I(t,`shell`)))}function Kh(e,t){return wh(e,t,!1)}function qh(e,t,n){let r=n.map(e=>I(e,`wire`));return Xf(e.addHolesToFace(I(t,`face`),r))}function Jh(e,t){return Xf(e.removeHolesFromFace(I(t,`face`)))}function Yh(e,t,n){return wh(e,n,!1)}function Xh(e,t,n,r){let i=[];for(let[e,n,r]of t)i.push(e,n,r);let a=Math.min(3,n-1),o=Math.min(3,r-1);try{return Xf(e.interpolateSurface(i,n,r,a,o))}catch{return Zh(e,t,n,r)}}function Zh(e,n,r,i){let a=[];for(let o=0;o<r-1;o++)for(let r=0;r<i-1;r++){let s=o*i+r,c=(o+1)*i+r,l=o*i+(r+1),u=(o+1)*i+(r+1),d=Qh(e,t(n,s),t(n,c),t(n,l));d&&a.push(d);let f=Qh(e,t(n,c),t(n,u),t(n,l));f&&a.push(f)}if(a.length===0)throw Error(`brepkit: no valid faces in surface grid`);return Gp(e,a,1e-6)}function Qh(e,t,n,r){let i=n[0]-t[0],a=n[1]-t[1],o=n[2]-t[2],s=r[0]-t[0],c=r[1]-t[1],l=r[2]-t[2],u=a*l-o*c,d=o*s-i*l,f=i*c-a*s;if(Math.sqrt(u*u+d*d+f*f)<1e-12)return null;try{return wh(e,Ch(e,[Mh(e,t,n),Mh(e,n,r),Mh(e,r,t)]))}catch(e){return console.warn(`brepkit: makeNonPlanarFace failed:`,e),null}}function $h(e,t,n){let r=t.map(e=>I(e,`face`));return F(e.sewFaces(r,n))}function eg(e,n,r){if(r?.tolerance!==void 0&&vp(`interpolate-tolerance`,`interpolatePoints() tolerance parameter is not supported; brepkit uses chord-length parameterisation.`),n.length<2)throw Error(`brepkit: need at least 2 points`);if(n.length===2)return Mh(e,t(n,0),t(n,1));let i=Math.min(3,n.length-1),a=n.flatMap(([e,t,n])=>[e,t,n]);return Zf(e.interpolatePoints(a,i))}function tg(e,t,n){let r=n?.degMax??3,i=n?.tolerance??1e-6,a=[];for(let e of t)a.push(e[0],e[1],e[2]);let o=Math.max(r+1,Math.min(t.length,Math.ceil(t.length*.7)));return Zf(e.approximateCurveLspia(a,r,o,i,100))}function ng(e,t,n,r){return{x:t,y:n,z:r}}function rg(e,t,n,r){let i=Math.sqrt(t*t+n*n+r*r);return{x:t/i,y:n/i,z:r/i}}function ig(e,t,n,r){return{x:t,y:n,z:r}}function ag(e,t,n,r,i,a,o){return{origin:[t,n,r],direction:[i,a,o]}}function og(e,t,n,r,i,a,o,s,c,l){return{origin:[t,n,r],z:[i,a,o],x:s===void 0?void 0:[s,c,l]}}function sg(e,t,n,r,i,a,o,s,c,l){return{origin:[t,n,r],z:[i,a,o],x:s===void 0?void 0:[s,c,l]}}function cg(e,n,r,i,a,o){let s=Math.sqrt(r[0]**2+r[1]**2+r[2]**2),c=[r[0]/s,r[1]/s,r[2]/s],l=Math.abs(c[0])<.9?[1,0,0]:[0,1,0],u=[c[1]*l[2]-c[2]*l[1],c[2]*l[0]-c[0]*l[2],c[0]*l[1]-c[1]*l[0]],d=Math.sqrt(u[0]**2+u[1]**2+u[2]**2),f=[u[0]/d,u[1]/d,u[2]/d],p=[c[1]*f[2]-c[2]*f[1],c[2]*f[0]-c[0]*f[2],c[0]*f[1]-c[1]*f[0]],m=Math.ceil(Math.abs(o-a)/(Math.PI/2)),h=(o-a)/m,g=[],_=[];for(let e=0;e<=m;e++){let t=a+e*h,r=Math.cos(t),o=Math.sin(t),s=n[0]+i*(r*f[0]+o*p[0]),c=n[1]+i*(r*f[1]+o*p[1]),l=n[2]+i*(r*f[2]+o*p[2]);if(e>0){let t=a+(e-.5)*h,r=Math.cos(t),o=Math.sin(t),s=i/Math.cos(h/2),c=n[0]+s*(r*f[0]+o*p[0]),l=n[1]+s*(r*f[1]+o*p[1]),u=n[2]+s*(r*f[2]+o*p[2]);g.push(c,l,u),_.push(Math.cos(h/2))}g.push(s,c,l),_.push(1)}let v=[,,,].fill(0);for(let e=1;e<m;e++)v.push(e,e);v.push(...[,,,].fill(m));let y=t(v,v.length-1);for(let e=0;e<v.length;e++)v[e]=t(v,e)/y;let b=t(g,0),x=t(g,1),S=t(g,2),C=t(g,g.length-3),w=t(g,g.length-2),ee=t(g,g.length-1);return Zf(e.makeNurbsEdge(b,x,S,C,w,ee,2,v,g,_))}function lg(e,n,r,i,a,o,s,c){let l=Math.sqrt(r[0]**2+r[1]**2+r[2]**2),u=[r[0]/l,r[1]/l,r[2]/l],d;if(c){let e=Math.sqrt(c[0]**2+c[1]**2+c[2]**2);d=[c[0]/e,c[1]/e,c[2]/e]}else{let e=Math.abs(u[0])<.9?[1,0,0]:[0,1,0],t=[u[1]*e[2]-u[2]*e[1],u[2]*e[0]-u[0]*e[2],u[0]*e[1]-u[1]*e[0]],n=Math.sqrt(t[0]**2+t[1]**2+t[2]**2);d=[t[0]/n,t[1]/n,t[2]/n]}let f=[u[1]*d[2]-u[2]*d[1],u[2]*d[0]-u[0]*d[2],u[0]*d[1]-u[1]*d[0]],p=Math.ceil(Math.abs(s-o)/(Math.PI/2)),m=(s-o)/p,h=[],g=[];for(let e=0;e<=p;e++){let t=o+e*m,r=Math.cos(t),s=Math.sin(t),c=n[0]+i*r*d[0]+a*s*f[0],l=n[1]+i*r*d[1]+a*s*f[1],u=n[2]+i*r*d[2]+a*s*f[2];if(e>0){let t=o+(e-.5)*m,r=Math.cos(t),s=Math.sin(t),c=1/Math.cos(m/2),l=n[0]+i*c*r*d[0]+a*c*s*f[0],u=n[1]+i*c*r*d[1]+a*c*s*f[1],p=n[2]+i*c*r*d[2]+a*c*s*f[2];h.push(l,u,p),g.push(Math.cos(m/2))}h.push(c,l,u),g.push(1)}let _=[,,,].fill(0);for(let e=1;e<p;e++)_.push(e,e);_.push(...[,,,].fill(p));let v=t(_,_.length-1);for(let e=0;e<_.length;e++)_[e]=t(_,e)/v;let y=t(h,0),b=t(h,1),x=t(h,2),S=t(h,h.length-3),C=t(h,h.length-2),w=t(h,h.length-1);return Zf(e.makeNurbsEdge(y,b,x,S,C,w,2,_,h,g))}function ug(e){return{makeVertex:(t,n,r)=>xh(e,t,n,r),makeEdge:(t,n,r)=>Sh(e,t,n,r),makeWire:t=>Ch(e,t),makeWireFromMixed:t=>Hh(e,t),makeFace:(t,n)=>wh(e,t,n),makeBox:(t,n,r)=>Th(e,t,n,r),makeRectangle:(t,n)=>Eh(e,t,n),makeCylinder:(t,n,r,i)=>Dh(e,t,n,r,i),makeSphere:(t,n)=>Oh(e,t,n),makeCone:(t,n,r,i,a)=>kh(e,t,n,r,i,a),makeTorus:(t,n,r,i)=>Ah(e,t,n,r,i),makeEllipsoid:(t,n,r)=>jh(e,t,n,r),makeLineEdge:(t,n)=>Mh(e,t,n),makeCircleEdge:(t,n,r)=>Nh(e,t,n,r),makeCircleArc:(t,n,r,i,a)=>Ph(e,t,n,r,i,a),makeArcEdge:(t,n,r)=>Ih(e,t,n,r),makeEllipseEdge:(t,n,r,i,a)=>Lh(e,t,n,r,i,a),makeEllipseArc:(t,n,r,i,a,o,s)=>Rh(e,t,n,r,i,a,o,s),makeBezierEdge:t=>zh(e,t),makeTangentArc:(t,n,r)=>Bh(e,t,n,r),makeHelixWire:(t,n,r,i,a,o)=>Vh(e,t,n,r,i,a,o),makeCompound:t=>Uh(e,t),makeBoxFromCorners:(t,n)=>Wh(e,t,n),solidFromShell:t=>Gh(e,t),makeNonPlanarFace:t=>Kh(e,t),addHolesInFace:(t,n)=>qh(e,t,n),removeHolesFromFace:t=>Jh(e,t),makeFaceOnSurface:(t,n)=>Yh(e,t,n),bsplineSurface:(t,n,r)=>Xh(e,t,n,r),triangulatedSurface:(t,n,r)=>Zh(e,t,n,r),buildTriFace:(t,n,r)=>Qh(e,t,n,r),sewAndSolidify:(t,n)=>$h(e,t,n),interpolatePoints:(t,n)=>eg(e,t,n),approximatePoints:(t,n)=>tg(e,t,n),createPoint3d:(t,n,r)=>ng(e,t,n,r),createDirection3d:(t,n,r)=>rg(e,t,n,r),createVector3d:(t,n,r)=>ig(e,t,n,r),createAxis1:(t,n,r,i,a,o)=>ag(e,t,n,r,i,a,o),createAxis2:(t,n,r,i,a,o,s,c,l)=>og(e,t,n,r,i,a,o,s,c,l),createAxis3:(t,n,r,i,a,o,s,c,l)=>sg(e,t,n,r,i,a,o,s,c,l)}}function dg(e,t,n,r){let i=np(t,`fillet`),a=n.map(e=>I(e,`edge`));if(typeof r==`number`)return F(e.fillet(i,a,r));let o=[];for(let[e,t]of n.entries()){let n=a[e]??0,i;i=typeof r==`function`?r(t):r;let[s,c]=Array.isArray(i)?i:[i,i];o.push({edge:n,startRadius:s,endRadius:c})}return F(e.filletVariable(i,JSON.stringify(o)))}function fg(e,t,n,r){let i=np(t,`chamfer`),a=n.map(e=>I(e,`edge`));if(typeof r==`number`)return F(e.chamfer(i,a,r));if(Array.isArray(r)){let[t,n]=r;return typeof e.chamferAsymmetric==`function`?F(e.chamferAsymmetric(i,a,t,n)):(vp(`chamfer-asymmetric`,`chamferAsymmetric not available; using averaged distance.`),F(e.chamfer(i,a,(t+n)/2)))}let o=new Map;for(let[e,t]of n.entries()){let n=r(t),i=a[e];if(i===void 0)continue;let[s,c]=Array.isArray(n)?n:[n,n],l=`${s},${c}`,u=o.get(l);u?u.ids.push(i):o.set(l,{ids:[i],d1:s,d2:c})}let s=i;for(let t of o.values())t.d1===t.d2?s=e.chamfer(s,t.ids,t.d1):typeof e.chamferAsymmetric==`function`?s=e.chamferAsymmetric(s,t.ids,t.d1,t.d2):(vp(`chamfer-callback`,`chamferAsymmetric not available; asymmetric edges use averaged distance.`),s=e.chamfer(s,t.ids,(t.d1+t.d2)/2));return F(s)}function pg(e,t,n,r,i){let a=r*Math.tan(i*Math.PI/180),o=np(t,`chamferDistAngle`),s=n.map(e=>I(e,`edge`));return typeof e.chamferAsymmetric==`function`?F(e.chamferAsymmetric(o,s,r,a)):(vp(`chamfer-dist-angle`,`chamferAsymmetric not available; using averaged distance.`),F(e.chamfer(o,s,(r+a)/2)))}function mg(e,n){let r=L(e.getFaceVertices(n));if(r.length<1)return null;let i=0,a=0,o=0;for(let n of r){let r=e.getVertexPosition(n);i+=t(r,0),a+=t(r,1),o+=t(r,2)}let s=r.length;return{x:i/s,y:a/s,z:o/s}}function hg(e,t,n){try{let r=e.getFaceNormal(t),i=-1,a=-2;for(let t of n)try{let n=e.getFaceNormal(t),o=(r[0]??0)*(n[0]??0)+(r[1]??0)*(n[1]??0)+(r[2]??0)*(n[2]??0);o>a&&(a=o,i=t)}catch{}if(i>=0&&a>.99)return i}catch{}return null}function gg(e,t,n){try{let r=mg(e,t);if(r===null)return null;let i=-1,a=1/0;for(let t of n)try{let n=mg(e,t);if(n===null)continue;let o=Math.sqrt((r.x-n.x)**2+(r.y-n.y)**2+(r.z-n.z)**2);o<a&&(a=o,i=t)}catch{}if(i>=0&&a<.001)return i}catch{}return null}function _g(e,t,n,r){if(r.has(t))return t;let i=hg(e,t,n);if(i!==null)return i;let a=gg(e,t,n);return a===null?t:a}function vg(e,t,n,r,i){i!==void 0&&vp(`shell-tolerance`,`shell() tolerance parameter is not supported; brepkit uses its own internal tolerance.`);let a=np(t,`shell`),o=L(e.getSolidFaces(a)),s=new Set(o),c=n.map(t=>_g(e,I(t,`face`),o,s));return F(e.shell(a,r,c))}function yg(e,t,n){let r=t;if(r.type===`face`)return F(e.thicken(r.id,n));throw Error(`brepkit: thicken() requires a face`)}function bg(e,t,n,r){r!==void 0&&vp(`offset-tolerance`,`offset() tolerance parameter is not supported; brepkit uses its own internal tolerance.`);let i=t;if(i.type===`face`)return F(e.thicken(i.id,n));let a=np(t,`offset`);return F(e.offsetSolidV2(a,n))}function xg(e,t,n){let r=np(t,`filletVariable`);return F(e.filletVariable(r,n))}function Sg(e,t,n,r,i,a){let o=np(t,`draft`),s=n.map(e=>I(e,`face`));return F(e.draft(o,s,r[0],r[1],r[2],i[0],i[1],i[2],a))}function Cg(e,t,n){let r=np(t,`defeature`),i=n.map(e=>I(e,`face`));return F(e.defeature(r,i))}function wg(e){switch(e){case`arc`:case`tangent`:return`arc`;case`intersection`:return`intersection`;default:return`intersection`}}function Tg(e,n,r,i){if(typeof e.offsetWire2DWithJoin==`function`)return Qf(e.offsetWire2DWithJoin(I(n,`wire`),r,wg(i)));let a=Mp(e,n,`edge`);if(a.length===0)return n;let o=[];for(let n of a){let r=e.getEdgeVertices(I(n,`edge`));o.push(t(r,0),t(r,1))}if(o.length<6)return n;let s=e.offsetPolygon2d(o,r,1e-10),c=[];for(let e=0;e<s.length;e+=2)c.push(t(s,e),t(s,e+1),0);return Qf(e.makePolygonWire(c))}function Eg(e,t){if(t.type===`solid`)try{e.healSolid(I(t))}catch(e){console.warn(`brepkit: healing failed in simplify:`,e)}return t}function Dg(e,t){let n=t,r=e.reverseShape(n.id);return Yf(n.type,r)}function Og(e){return{fillet:(t,n,r)=>dg(e,t,n,r),chamfer:(t,n,r)=>fg(e,t,n,r),chamferDistAngle:(t,n,r,i)=>pg(e,t,n,r,i),shell:(t,n,r,i)=>vg(e,t,n,r,i),thicken:(t,n)=>yg(e,t,n),offset:(t,n,r)=>bg(e,t,n,r),filletVariable:(t,n)=>xg(e,t,n),draft:(t,n,r,i,a)=>Sg(e,t,n,r,i,Cp(n,a)),defeature:(t,n)=>Cg(e,t,n),offsetWire2D:(t,n,r)=>Tg(e,t,n,r),simplify:t=>Eg(e,t),reverseShape:t=>Dg(e,t)}}function kg(e,t){let n=JSON.parse(e),r=n.evolution;if(!r||typeof r.modified!=`object`||typeof r.generated!=`object`)throw Error(`brepkit: invalid evolution JSON structure`);let i=F(n.solid),a=e=>{let n=new Map;for(let[r,i]of Object.entries(e)){let e=Number(r)%t,a=i.map(e=>e%t),o=n.get(e);o?o.push(...a):n.set(e,a)}return n},o=a(r.modified),s=a(r.generated),c=new Set;for(let e of r.deleted)c.add(e%t);return{shape:i,evolution:{modified:o,generated:s,deleted:c}}}function Ag(e,t){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return n*n+r*r+i*i}function jg(e,n){try{let r=e.tessellateFace(n,1).positions;if(r.length<3)return[0,0,0];let i=0,a=0,o=0,s=r.length/3;for(let e=0;e<r.length;e+=3)i+=t(r,e),a+=t(r,e+1),o+=t(r,e+2);return[i/s,a/s,o/s]}catch{return[0,0,0]}}function Mg(e,t,n){try{return{hash:n,normal:e.getFaceNormal(t),centroid:jg(e,t)}}catch{return{hash:n,normal:[0,0,0],centroid:jg(e,t)}}}var Ng=.707,Pg=100,Fg=.05;function Ig(e,n){let r=-1/0,i=[];for(let a=0;a<n.length;a++){let o=t(n,a),s=(e.normal[0]??0)*(o.normal[0]??0)+(e.normal[1]??0)*(o.normal[1]??0)+(e.normal[2]??0)*(o.normal[2]??0);if(s<Ng)continue;let c=Ag(e.centroid,o.centroid);if(c>Pg)continue;let l=s-c/Pg;l>r&&(r=l),i.push({idx:a,score:l})}return{matches:i,bestScore:r}}function Lg(e,t){let n=1/0,r;for(let i of t){let t=Ag(e.centroid,i.centroid);t<n&&(n=t,r=i)}return r}function Rg(e,n,r,i,a,o,s,c){let l=n;if(l.type!==`solid`)return;let u=L(e.getSolidFaces(l.id)),d=Math.min(u.length,r.length),f=[];for(let n=0;n<d;n++){let i=t(u,n);f.push(Mg(e,i,r[n]??i%a))}let p=i.map(t=>Mg(e,t,t%a)),m=new Set;for(let e of p){let{matches:n,bestScore:r}=Ig(e,f);if(n.length>0){for(let i of n)if(i.score>=r-Fg){let n=t(f,i.idx),r=o.get(n.hash)??[];r.push(e.hash),o.set(n.hash,r),m.add(i.idx)}}else{let t=Lg(e,f);if(t){let n=s.get(t.hash)??[];n.push(e.hash),s.set(t.hash,n)}}}for(let e=0;e<f.length;e++)m.has(e)||c.add(t(f,e).hash)}function zg(e,t,n,r,i,a,o,s){let c=new Set(s),l=new Map(a);Rg(e,t,n,r,i,a,o,s),s.clear();for(let e of c)s.add(e);for(let e of n){let t=!l.has(e)&&a.has(e)&&(a.get(e)?.length??0)>0,n=o.has(e)&&(o.get(e)?.length??0)>0;!t&&!n&&s.add(e)}}function Bg(e,n,r,i,a,o){let s=n.filter(e=>!r.has(e));s.length>0&&e.length>0&&a.set(t(e,0),s);for(let t of e)i.has(t)||o.add(t)}function Vg(e,n,r,i,a,o,s,c,l){let u=new Set(i);if(r.some(e=>u.has(e))){let t=new Set(r);for(let e of r)u.has(e)&&o.set(e,[e]);let d=i.filter(e=>!t.has(e)),f=n.filter(e=>!u.has(e%a));l&&d.length>0&&f.length>0?zg(e,l,d,f,a,o,s,c):Bg(i,r,u,t,s,c)}else if(l)Rg(e,l,i,n,a,o,s,c);else{for(let e=0;e<i.length&&e<r.length;e++)o.set(t(i,e),[t(r,e)]);r.length>i.length&&i.length>0&&s.set(t(i,0),r.slice(i.length))}}function Hg(e,n,r,i,a,o){let s=n,c=new Map,l=new Map,u=new Set;if(s.type===`solid`){let n=L(e.getSolidFaces(s.id)),d=n.map(e=>e%i);if(a)for(let e=0;e<r.length&&e<d.length;e++)c.set(t(r,e),[t(d,e)]);else Vg(e,n,d,r,i,c,l,u,o)}return{shape:n,evolution:{modified:c,generated:l,deleted:u}}}function Ug(e,t,n,r,i){for(let[a,o]of e){let s=[];for(let e of o){r.add(e);let i=t.get(e);i?s.push(...i):n.has(e)||s.push(e)}s.length>0?e.set(a,s):(e.delete(a),i?.add(a))}}function Wg(e,t){let n=new Set;Ug(t.combinedModified,e.evolution.modified,e.evolution.deleted,n,t.combinedDeleted),Ug(t.combinedGenerated,e.evolution.modified,e.evolution.deleted,n);for(let[r,i]of e.evolution.modified)t.combinedModified.has(r)||n.has(r)||t.combinedModified.set(r,[...i]);for(let[r,i]of e.evolution.generated){if(n.has(r))continue;let e=t.combinedGenerated.get(r)??[];t.combinedGenerated.set(r,[...e,...i])}for(let n of e.evolution.deleted)t.inputFaceHashSet.has(n)&&t.combinedDeleted.add(n)}function Gg(e,t,n,r,i,a){let o=L(e.getCompoundSolids(n)),s=t,c={combinedModified:new Map,combinedGenerated:new Map,combinedDeleted:new Set,inputFaceHashSet:new Set(r)};for(let e of o){let t=s;if(t.type!==`solid`)break;let n=kg(a(t.id,e),i);s=n.shape,Wg(n,c)}return{shape:s,accum:c}}function Kg(e,t,n,r,i,a,o,s,c){let l={hasErrors:!1,hasWarnings:!1,messages:[]},u=t,d=n;if(r.length>0&&u.type===`solid`){if(d.type===`solid`)try{return{...kg(o(u.id,d.id),i),diagnostics:l}}catch(e){if(!ah(e))throw e}if(d.type===`compound`){let{shape:n,accum:a}=Gg(e,t,d.id,r,i,o);return{shape:n,evolution:{modified:a.combinedModified,generated:a.combinedGenerated,deleted:a.combinedDeleted},diagnostics:l}}}return{...Hg(e,s(t,n,a),r,i,!1,t),diagnostics:l}}function qg(e,t,n,r,i,a,o){return Hg(e,Am(e,t,n,r,i),a,o,!0)}function Jg(e,t,n,r,i,a,o){return Hg(e,jm(e,t,n*180/Math.PI,a,o),r,i,!0)}function Yg(e,t,n,r,i,a){return Hg(e,Mm(e,t,n,r),i,a,!0)}function Xg(e,t,n,r,i,a){return Hg(e,Nm(e,t,n,r),i,a,!0)}function Zg(e,t,n,r,i,a,o){return Hg(e,Pm(e,t,n,r,i),a,o,!0)}function Qg(e,t,n,r,i,a){return Kg(e,t,n,r,i,a,(t,n)=>e.fuseWithEvolution(t,n),(t,n,r)=>ch(e,t,n,r),`fuseWithHistory`)}function $g(e,t,n,r,i,a){return Kg(e,t,n,r,i,a,(t,n)=>e.cutWithEvolution(t,n),(t,n,r)=>lh(e,t,n,r),`cutWithHistory`)}function e_(e,t,n,r,i,a){return Kg(e,t,n,r,i,a,(t,n)=>e.intersectWithEvolution(t,n),(t,n,r)=>uh(e,t,n,r),`intersectWithHistory`)}function t_(e,t,n,r,i,a){return Hg(e,dg(e,t,n,r),i,a,!1,t)}function n_(e,t,n,r,i,a){return Hg(e,fg(e,t,n,r),i,a,!1,t)}function r_(e,t,n,r,i,a,o){return Hg(e,vg(e,t,n,r,o),i,a,!1,t)}function i_(e,t,n,r,i){return Hg(e,yg(e,t,n),r,i,!1,t)}function a_(e,t,n,r,i,a){return Hg(e,bg(e,t,n,a),r,i,!1,t)}function o_(e,t,n,r,i,a,o,s){return Hg(e,Sg(e,t,n,r,i,a),o,s,!1,t)}function s_(e,t,n,r,i){return Hg(e,Hm(e,t,n),r,i,!0)}function c_(e,t){let n=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];for(let e of t)n=fp(e.type===`translate`?op(e.x,e.y,e.z):cp(e.angle,e.axis,e.center),n);return{handle:n,dispose:()=>{}}}function l_(e){return{translateWithHistory:(t,n,r,i,a,o)=>qg(e,t,n,r,i,a,o),rotateWithHistory:(t,n,r,i,a,o)=>Jg(e,t,n,r,i,a,o),mirrorWithHistory:(t,n,r,i,a)=>Yg(e,t,n,r,i,a),scaleWithHistory:(t,n,r,i,a)=>Xg(e,t,n,r,i,a),generalTransformWithHistory:(t,n,r,i,a,o)=>Zg(e,t,n,r,i,a,o),fuseWithHistory:(t,n,r,i,a)=>Qg(e,t,n,r,i,a),cutWithHistory:(t,n,r,i,a)=>$g(e,t,n,r,i,a),intersectWithHistory:(t,n,r,i,a)=>e_(e,t,n,r,i,a),filletWithHistory:(t,n,r,i,a)=>t_(e,t,n,r,i,a),chamferWithHistory:(t,n,r,i,a)=>n_(e,t,n,r,i,a),shellWithHistory:(t,n,r,i,a,o)=>r_(e,t,n,r,i,a,o),thickenWithHistory:(t,n,r,i)=>i_(e,t,n,r,i),offsetWithHistory:(t,n,r,i,a)=>a_(e,t,n,r,i,a),draftWithHistory:(t,n,r,i,a,o,s)=>o_(e,t,n,r,i,Cp(n,a),o,s),applyComposedTransformWithHistory:(t,n,r,i)=>s_(e,t,n,r,i),composeTransform:t=>c_(e,t)}}function u_(e,t,n){let r=I(t),i=t,a=n.tolerance||.01,o=n.angularTolerance>0?n.angularTolerance:void 0,s;if(i.type===`solid`)s=p_(e,r,a,!!n.includeUVs,o);else if(i.type===`face`)s=v_(e,r,a,0,o);else throw Error(`brepkit: cannot mesh shape of type '${i.type}'`);return n.skipNormals&&(s.normals=new Float32Array),n.includeUVs||(s.uvs=new Float32Array),s}function d_(e,n,r,i){let a=n;if(a.type!==`solid`)return{lines:new Float32Array,edgeGroups:[]};let o=i>0?i:void 0,s=e.meshEdgesAll(a.id,r,o),c=s.positions,l=s.offsets,u=s.edgeCount,d=[];for(let e=0;e<u;e++){let n=t(l,e),r=((e+1<u?t(l,e+1):c.length)-n)/3;d.push({start:n/3,count:r,edgeHash:e})}return{lines:new Float32Array(c),edgeGroups:d}}function f_(e,t){return!1}function p_(e,t,n,r,i){try{return m_(e,t,n,r,i)}catch(r){return console.warn(`brepkit: tessellateSolidGrouped failed (solidId=${t}), falling back to per-face:`,r),__(e,t,n,i)}}function m_(e,t,n,r,i){return typeof e.tessellateSolidGroupedBinary==`function`?h_(e,t,n,r,i,e.tessellateSolidGroupedBinary(t,n,i)):g_(e,t,n,r,i)}function h_(e,n,r,i,a,o){let s=o.positions,c=o.normals,l=o.indices,u=o.faceOffsets,d=L(e.getSolidFaces(n)),f=u.length-1;if(f!==d.length)throw Error(`faceOffsets/faceIds length mismatch: ${f} groups vs ${d.length} faces`);let p=[];for(let e=0;e<u.length-1;e++){let n=t(u,e),r=t(u,e+1)-n;r!==0&&p.push({start:n,count:r,faceHash:d[e]??0})}let m=new Float32Array;if(i){let t=s.length/3*2;try{let i=e.tessellateSolidUV(n,r,a),o=JSON.parse(i);m=o.uvs.length===t?new Float32Array(o.uvs):new Float32Array(t)}catch{m=new Float32Array(t)}}return{vertices:s,normals:c,triangles:l,uvs:m,faceGroups:p}}function g_(e,n,r,i,a){let o=e.tessellateSolidGrouped(n,r,a),s=JSON.parse(o),c=L(e.getSolidFaces(n)),l=s.faceOffsets.length-1;if(l!==c.length)throw Error(`faceOffsets/faceIds length mismatch: ${l} groups vs ${c.length} faces`);let u=[];for(let e=0;e<s.faceOffsets.length-1;e++){let n=t(s.faceOffsets,e),r=t(s.faceOffsets,e+1)-n;r!==0&&u.push({start:n,count:r,faceHash:c[e]??0})}let d=new Float32Array;if(i){let t=s.positions.length/3*2;try{let i=e.tessellateSolidUV(n,r,a),o=JSON.parse(i);d=o.uvs.length===t?new Float32Array(o.uvs):new Float32Array(t)}catch{d=new Float32Array(t)}}return{vertices:new Float32Array(s.positions),normals:new Float32Array(s.normals),triangles:new Uint32Array(s.indices),uvs:d,faceGroups:u}}function __(e,t,n,r){let i=L(e.getSolidFaces(t)),a=[],o=[],s=[],c=[],l=[],u=0;for(let t of i)try{let i=e.tessellateFace(t,n,r),d=i.positions,f=i.normals,p=i.indices,m=d.length/3;if(m===0)continue;let h=s.length;for(let e of d)a.push(e);for(let e of f)o.push(e);for(let e of p)s.push(e+u);for(let e=0;e<m;e++)c.push(0,0);l.push({start:h,count:p.length,faceHash:t}),u+=m}catch(e){console.warn(`brepkit: face tessellation failed (faceId=${t}):`,e)}return{vertices:new Float32Array(a),normals:new Float32Array(o),triangles:new Uint32Array(s),uvs:new Float32Array(c),faceGroups:l}}function v_(e,t,n,r,i){let a=e.tessellateFace(t,n,i),o=a.positions,s=a.normals,c=a.indices,l=o.length/3,u=[];for(let e=0;e<l;e++)u.push(0,0);return{vertices:new Float32Array(o),normals:new Float32Array(s),triangles:new Uint32Array(c),uvs:new Float32Array(u),faceGroups:[{start:0,count:c.length,faceHash:r}]}}function y_(e){return{mesh:(t,n)=>u_(e,t,n),meshEdges:(t,n,r)=>d_(e,t,n,r),hasTriangulation:t=>f_(e,t),meshShape:(e,t,n)=>{}}}function b_(e,t){if(t.length===0)return``;let n=[];for(let r of t){let t=rp(e,r,`exportSTEP`);for(let r of t){let t=e.exportStep(r);n.push(new TextDecoder().decode(t))}}return n.join(`
|
|
8
|
-
`)}function
|
|
9
|
-
`)}function T_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return L(e.importIges(n)).map(F)}function E_(e,t,n){return t.length===0?``:b_(e,t.map(e=>e.shape))}function D_(e,t,n){let r=np(t,`export3MF`);return ap(e.export3mf(r,n))}function O_(e,t,n){let r=np(t,`exportGLB`);return ap(e.exportGlb(r,n))}function k_(e,t,n){let r=np(t,`exportOBJ`);return ap(e.exportObj(r,n))}function A_(e,t,n){let r=np(t,`exportPLY`);return ap(e.exportPly(r,n))}function j_(e,t){return L(e.import3mf(new Uint8Array(t))).map(e=>F(e))}function M_(e,t){return F(e.importObj(new Uint8Array(t)))}function N_(e,t){return F(e.importGlb(new Uint8Array(t)))}function P_(e,t){let n=t;return n.type===`solid`?e.toBREP(n.id):(vp(`brep-non-solid`,`toBREP for non-solid shapes uses STEP format.`),b_(e,[t]))}function F_(e,t){if(typeof e.fromBREP==`function`&&t.trimStart().startsWith(`{`))return F(e.fromBREP(t));let n=S_(e,t)[0];if(!n)throw Error(`brepkit: fromBREP produced no shapes`);return n}function I_(e,t){return{__brepkit_xcaf:!0,shapes:t,delete:qf}}function L_(e,t,n){return t&&t.__brepkit_xcaf&&Array.isArray(t.shapes)?b_(e,t.shapes.map(e=>e.shape)):``}function R_(e,t,n){return b_(e,t.map(e=>e.shape))}function z_(e){return{exportSTEP:t=>b_(e,t),exportSTL:(t,n,r,i)=>x_(e,t,n,r,i),importSTEP:t=>S_(e,t),importSTL:t=>C_(e,t),exportIGES:t=>w_(e,t),importIGES:t=>T_(e,t),exportSTEPAssembly:(t,n)=>E_(e,t,n),export3MF:(t,n)=>D_(e,t,n),exportGLB:(t,n)=>O_(e,t,n),exportOBJ:(t,n)=>k_(e,t,n),exportPLY:(t,n)=>A_(e,t,n),import3MF:t=>j_(e,t),importOBJ:t=>M_(e,t),importGLB:t=>N_(e,t),toBREP:t=>P_(e,t),fromBREP:t=>F_(e,t),createXCAFDocument:t=>I_(e,t),writeXCAFToSTEP:(t,n)=>L_(e,t,n),exportSTEPConfigured:(t,n)=>R_(e,t,n)}}function B_(e,t){return{x:e,y:t}}function V_(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`brepkit: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function H_(e,t){return{x:e,y:t}}function U_(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete:qf}}function W_(e){return e}function G_(e){return e}function K_(e,t,n,r){return te(e,t,n,r)}function q_(e,t,n,r){return ne(e,t,n,r)}function J_(e,t,n,r,i,a,o){return ae(e,t,n,r,i,a,o)}function Y_(e,t,n,r,i,a,o,s,c){let l=ae(e,t,n,r,o,s,c),u=c!==!1,d=u?i:-i,f=u?a:-a;return f<d-1e-9&&(f+=2*Math.PI),{__bk2d:`trimmed`,basis:l,tStart:d,tEnd:f}}function X_(e){return oe(e)}function Z_(e,t){let n=e.length,r=Math.min(3,n-1),i=[],a=[];i.push(0),a.push(r+1);let o=n-r-1;for(let e=1;e<=o;e++)i.push(e/(o+1)),a.push(1);return i.push(1),a.push(r+1),{__bk2d:`bspline`,poles:[...e],knots:i,multiplicities:a,degree:r,isPeriodic:!1}}function Q_(e,t){return S(bp(e),t)}function $_(e,t){return{point:S(bp(e),t),tangent:C(bp(e),t)}}function ev(e){return w(bp(e))}function tv(e){return ee(xp(e))}function nv(e,t,n){return{__bk2d:`trimmed`,basis:bp(e),tStart:t,tEnd:n}}function rv(e){let t=e;switch(t.__bk2d){case`line`:{let e=t;e.ox+=e.dx*e.len,e.oy+=e.dy*e.len,e.dx=-e.dx,e.dy=-e.dy;break}case`circle`:case`ellipse`:{let e=t;e.sense=!e.sense;break}case`trimmed`:{let e=t;[e.tStart,e.tEnd]=[e.tEnd,e.tStart];break}case`bezier`:{let e=t;e.poles=[...e.poles].reverse();break}case`bspline`:{let e=t;e.poles=[...e.poles].reverse();let n=e.knots[0],r=e.knots[e.knots.length-1];n!==void 0&&r!==void 0&&(e.knots=e.knots.map(e=>n+r-e).reverse()),Array.isArray(e.weights)&&(e.weights=[...e.weights].reverse());break}default:break}}function iv(e){return JSON.parse(JSON.stringify(e))}function av(e,t){let n=bp(e),r=w(n),i=[];for(let e=0;e<=30;e++){let a=r.first+(r.last-r.first)*e/30,[o,s]=S(n,a),[c,l]=C(n,a),u=Math.sqrt(c*c+l*l);u>1e-12?i.push([o-l/u*t,s+c/u*t]):i.push([o,s])}return Z_(i)}function ov(e,t,n){return se(bp(e),t,n)}function sv(e,t,n,r){return ce(bp(e),t,n,r)}function cv(e,t,n,r){return le(bp(e),t,n,r)}function lv(e,t,n){return ue(bp(e),t,n)}function uv(e,t,n,r,i){return de(bp(e),t,n,r,i)}function dv(e,t,n,r,i,a){return xv(e,mv(t,n,r,i,a))}function fv(e,t,n){return{m:e,tx:t,ty:n,delete:qf}}function pv(){return fv([1,0,0,0,1,0,0,0,1],0,0)}function mv(e,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return pv();let s=-i/o,c=r/o,l=a-1,u=[1+l*s*s,l*s*c,0,l*c*s,1+l*c*c,0,0,0,1];return fv(u,e-t(u,0)*e-t(u,1)*n,n-t(u,3)*e-t(u,4)*n)}function hv(e,t){return fv([1,0,0,0,1,0,0,0,1],e,t)}function gv(e,n,r,i,a,o,s){if(r===`axis`&&o!==void 0&&s!==void 0){let r=Math.sqrt(o*o+s*s),c=o/r,l=s/r,u=[2*c*c-1,2*c*l,0,2*c*l,2*l*l-1,0,0,0,1],d=i??e,f=a??n;return fv(u,d-t(u,0)*d-t(u,1)*f,f-t(u,3)*d-t(u,4)*f)}return fv([-1,0,0,0,-1,0,0,0,1],2*e,2*n)}function _v(e,t,n){let r=Math.cos(e),i=Math.sin(e);return fv([r,-i,0,i,r,0,0,0,1],t-r*t+i*n,n-i*t-r*n)}function vv(e,t,n){return fv([e,0,0,0,e,0,0,0,1],t*(1-e),n*(1-e))}function yv(e,t,n){e.tx=t,e.ty=n}function bv(e,n){let r=e.m,i=n.m,a=e=>t(r,e),o=e=>t(i,e);e.m=[a(0)*o(0)+a(1)*o(3)+a(2)*o(6),a(0)*o(1)+a(1)*o(4)+a(2)*o(7),a(0)*o(2)+a(1)*o(5)+a(2)*o(8),a(3)*o(0)+a(4)*o(3)+a(5)*o(6),a(3)*o(1)+a(4)*o(4)+a(5)*o(7),a(3)*o(2)+a(4)*o(5)+a(5)*o(8),a(6)*o(0)+a(7)*o(3)+a(8)*o(6),a(6)*o(1)+a(7)*o(4)+a(8)*o(7),a(6)*o(2)+a(7)*o(5)+a(8)*o(8)];let s=e.tx,c=e.ty,l=Number(n.tx)||0,u=Number(n.ty)||0;e.tx=a(0)*l+a(1)*u+s,e.ty=a(3)*l+a(4)*u+c}function xv(e,n){let r=bp(e),i=n.m??[1,0,0,0,1,0,0,0,1],a=Number(n.tx)||0,o=Number(n.ty)||0,s=t(i,0),c=t(i,1),l=t(i,3),u=t(i,4);if(Math.abs(s-1)<1e-12&&Math.abs(u-1)<1e-12&&Math.abs(c)<1e-12&&Math.abs(l)<1e-12)return se(r,a,o);let d=w(r),f=[];for(let e=0;e<=20;e++){let[t,n]=S(r,d.first+(d.last-d.first)*e/20);f.push([s*t+c*n+a,l*t+u*n+o])}return oe(f)}function Sv(e,t,n){let r=fe(bp(e),bp(t),n),i=r.segments.map(e=>Object.assign(e,{delete(){}}));return{points:r.points,segments:i}}function Cv(e,t,n){let r=bp(e),i=w(r);if(r.__bk2d===`line`){let e=t-r.ox,a=n-r.oy,o=Math.max(i.first,Math.min(i.last,e*r.dx+a*r.dy)),[s,c]=S(r,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}if(r.__bk2d===`circle`){let e=Math.atan2(n-r.cy,t-r.cx),i=r.sense?e:-e;for(;i<0;)i+=2*Math.PI;for(;i>2*Math.PI;)i-=2*Math.PI;let[a,o]=S(r,i);return{param:i,distance:Math.sqrt((a-t)**2+(o-n)**2)}}if(!isFinite(i.first)||!isFinite(i.last))return null;let a=i.first,o=1/0,s=(i.last-i.first)/200;for(let e=0;e<=200;e++){let c=i.first+e*s,[l,u]=S(r,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}for(let e=0;e<10;e++){let[e,o]=S(r,a),[s,c]=C(r,a),l=(e-t)*s+(o-n)*c,u=s*s+c*c;if(u<1e-20)break;let d=l/u,f=Math.max(i.first,Math.min(i.last,a-d));if(Math.abs(f-a)<1e-14)break;a=f}let[c,l]=S(r,a);return{param:a,distance:Math.sqrt((c-t)**2+(l-n)**2)}}function wv(e,t,n,r,i,a){let o=bp(e),s=bp(t),c=n,l=i,u=1/0;for(let e=0;e<=50;e++){let t=n+(r-n)*e/50,[d,f]=S(o,t);for(let e=0;e<=50;e++){let n=i+(a-i)*e/50,[r,o]=S(s,n),p=(r-d)**2+(o-f)**2;p<u&&(u=p,c=t,l=n)}}let d=c,f=l;for(let c=0;c<20;c++){let[c,l]=S(s,f),u=Cv(e,c,l);if(u){let e=Math.max(n,Math.min(r,u.param)),t=Math.abs(e-d)<1e-12;if(d=e,t)break}let[p,m]=S(o,d),h=Cv(t,p,m);if(h){let e=Math.max(i,Math.min(a,h.param)),t=Math.abs(e-f)<1e-12;if(f=e,t)break}}let[p,m]=S(o,d),[h,g]=S(s,f);return Math.sqrt((h-p)**2+(g-m)**2)}function Tv(e,n,r,i){let a=bp(e),o=w(a),s=Math.max(3,{C0:1,C1:2,C2:3,C3:4}[r]??4),c=Math.max(100,i*10),l=[],u=1/0;for(let e=0;e<3&&u>n;e++){l=[];for(let e=0;e<=c;e++){let t=o.first+(o.last-o.first)*e/c;l.push(S(a,t))}u=0;for(let e=0;e<c;e++){let[n,r]=S(a,o.first+(o.last-o.first)*(e+.5)/c),i=t(l,e),s=t(l,e+1),d=(i[0]+s[0])/2,f=(i[1]+s[1])/2,p=Math.sqrt((n-d)**2+(r-f)**2);p>u&&(u=p)}u>n&&(c=Math.min(c*2,500))}return Z_(l,{degMax:s})}function Ev(e){let n=xp(e);if(n.__bk2d===`bezier`)return[e];if(n.__bk2d!==`bspline`)return Ev(Tv(e,1e-6,`C2`,10));let r=w(bp(e)),i=r.first,a=r.last,o=[];for(let e of n.knots)e>i+1e-12&&e<a-1e-12&&o.push(e);let s=[i,...o,a],c=[];for(let e=0;e<s.length-1;e++){let r=t(s,e),i=t(s,e+1),a=i-r;if(a<1e-15)continue;let o=S(n,r),l=S(n,i),u=C(n,r),d=C(n,i),f=a/3,p={__bk2d:`bezier`,poles:[o,[o[0]+u[0]*f,o[1]+u[1]*f],[l[0]-d[0]*f,l[1]-d[1]*f],l]};c.push(p)}return c.length>0?c:[e]}function Dv(){return Ce()}function Ov(e,t,n){we(Sp(e),bp(t),n)}function kv(e){let t=Sp(e);return{xMin:t.xMin,yMin:t.yMin,xMax:t.xMax,yMax:t.yMax}}function Av(e,t){let n=Sp(e),r=Sp(t);n.xMin=Math.min(n.xMin,r.xMin),n.yMin=Math.min(n.yMin,r.yMin),n.xMax=Math.max(n.xMax,r.xMax),n.yMax=Math.max(n.yMax,r.yMax)}function jv(e,t){let n=Sp(e),r=Sp(t);return n.xMax<r.xMin||r.xMax<n.xMin||n.yMax<r.yMin||r.yMax<n.yMin}function Mv(e,t,n){let r=Sp(e);return t<r.xMin||t>r.xMax||n<r.yMin||n>r.yMax}function Nv(e){let t=xp(e);return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function Pv(e){let t=xp(e);return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function Fv(e){let t=xp(e);return t.__bk2d===`bezier`?[...t.poles]:null}function Iv(e){let t=xp(e);return t.__bk2d===`bezier`?t.poles.length-1:null}function Lv(e){let t=xp(e);return t.__bk2d===`bspline`?{poles:[...t.poles],knots:[...t.knots],multiplicities:[...t.multiplicities],degree:t.degree,isPeriodic:t.isPeriodic}:null}function Rv(e){return xe(bp(e))}function zv(e){return Se(e)}function Bv(e,t){let n=bp(e),r=w(n),i=[r.first,...[...t].sort((e,t)=>e-t),r.last],a=[];for(let e=0;e<i.length-1;e++)a.push({__bk2d:`trimmed`,basis:n,tStart:i[e],tEnd:i[e+1]});return a}function Vv(e,n,r,i,a){let o=bp(n),s=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],c=(e,t)=>[r[0]+e*a[0]+t*s[0],r[1]+e*a[1]+t*s[1],r[2]+e*a[2]+t*s[2]];if(o.__bk2d===`line`)return Mh(e,c(o.ox,o.oy),c(o.ox+o.dx*o.len,o.oy+o.dy*o.len));if(o.__bk2d===`circle`||o.__bk2d===`trimmed`){let n=o;for(;n.__bk2d===`trimmed`;)n=n.basis;if(n.__bk2d===`circle`){let r=n,a=c(r.cx,r.cy),s=r.sense?i:[-i[0],-i[1],-i[2]],l=w(o),u;u=o.__bk2d===`trimmed`?Math.abs(o.tEnd-o.tStart):2*Math.PI;let d=u>Math.PI?4:u>Math.PI/2?2:1,f=(l.last-l.first)/d,p=[];for(let t=0;t<d;t++){let[n,r]=S(o,l.first+t*f),[i,u]=S(o,l.first+(t+1)*f);p.push(e.makeCircleArc3d(...c(n,r),...c(i,u),...a,...s))}return p.length===1?Zf(t(p,0)):Qf(e.makeWire(p,!1))}if(n.__bk2d===`ellipse`){let r=n,l=c(r.cx,r.cy),u=Math.cos(r.xDirAngle),d=Math.sin(r.xDirAngle),f=[u*a[0]+d*s[0],u*a[1]+d*s[1],u*a[2]+d*s[2]],p=w(o),m=p.last-p.first,h=m*1e-4,[g,_]=S(o,p.first),[v,y]=S(o,p.first+h),b=(g-r.cx)*(y-r.cy)-(_-r.cy)*(v-r.cx)>=0?i:[-i[0],-i[1],-i[2]],x=o.__bk2d===`trimmed`?Math.abs(o.tEnd-o.tStart):2*Math.PI,C=x>Math.PI?4:x>Math.PI/2?2:1,ee=m/C,te=[];for(let t=0;t<C;t++){let[n,i]=S(o,p.first+t*ee),[a,s]=S(o,p.first+(t+1)*ee);te.push(e.makeEllipseArc3d(...c(n,i),...c(a,s),...l,...b,...f,r.majorRadius,r.minorRadius))}return te.length===1?Zf(t(te,0)):Qf(e.makeWire(te,!1))}}if(o.__bk2d===`bezier`||o.__bk2d===`bspline`){let n=o.poles.map(([e,t])=>c(e,t));if(n.length===2)return Mh(e,t(n,0),t(n,1));let r=Math.min(3,n.length-1),i=n.flatMap(([e,t,n])=>[e,t,n]);return Zf(e.interpolatePoints(i,r))}let l=w(o),u=[];for(let e=0;e<=100;e++){let[t,n]=S(o,l.first+(l.last-l.first)*e/100);u.push(c(t,n))}return eg(e,u)}function Hv(e,t,r){if(!Jf(r))throw Error(`brepkit: buildEdgeOnSurface requires a face handle as surface`);let i=I(r,`face`),a=bp(t),o=w(a),s=e.getSurfaceType(i)===`plane`?50:100,c=[];for(let t=0;t<=s;t++){let[r,l]=S(a,o.first+(o.last-o.first)*t/s);c.push(n(e.evaluateSurface(i,r,l)))}return eg(e,c)}function Uv(e){return e}function Wv(e,n,r,i){let a=0;for(;e.length<r;){let o=[];for(let r=0;r<e.length-1;r++){let a=t(e,r),s=t(e,r+1),c=(a.t+s.t)/2,l=n(c),u=(a.uv[0]+s.uv[0])/2,d=(a.uv[1]+s.uv[1])/2;Math.sqrt((l[0]-u)**2+(l[1]-d)**2)>i&&o.push({index:r+1,t:c,uv:l})}if(o.length===0)break;let s=r-e.length;for(let n=o.length-1;n>=0&&s>0;n--){let r=t(o,n);e.splice(r.index,0,{t:r.t,uv:r.uv}),s--}if(a++,a>3)break}}function Gv(e,n,r){let i=I(n,`edge`),a=I(r,`face`),o=e.getEdgeCurveParameters(i),s=o[0]??0,c=o[1]??1,l=[];for(let e=0;e<=20;e++)l.push(s+(c-s)*e/20);let u=n=>{let r=e.evaluateEdgeCurve(i,n),o=e.projectPointOnSurface(a,t(r,0),t(r,1),t(r,2));return[t(o,0),t(o,1)]},d=l.map(e=>({t:e,uv:u(e)}));Wv(d,u,80,.05);let f=d.map(e=>e.uv);if(f.length>=2)return Z_(f);let p=e.getEdgeVertices(i);if(p.length>=6){let n=e.projectPointOnSurface(a,t(p,0),t(p,1),t(p,2)),r=e.projectPointOnSurface(a,t(p,3),t(p,4),t(p,5));return te(t(n,0),t(n,1),t(r,0),t(r,1))}throw Error(`brepkit: extractCurve2dFromEdge: degenerate edge (${p.length} coords)`)}function Kv(e,t,n){return e}function qv(e,n,r){if(n.length>=1){let r=Mp(e,n[0],`edge`);if(r.length===4){let n=[],i=[];for(let a of r){let r=I(a,`edge`),o=e.getEdgeCurveParameters(r),s=t(o,0),c=t(o,1),l=[];for(let n=0;n<=10;n++){let i=s+(c-s)*n/10,a=e.evaluateEdgeCurve(r,i);l.push(t(a,0),t(a,1),t(a,2))}n.push(...l),i.push(11)}try{return Xf(e.fillCoonsPatch(n,i))}catch(e){console.warn(`brepkit: Coons patch failed, falling back:`,e)}}}let i=n[0];if(!i)throw Error(`fillSurface: no wires provided`);return Kh(e,i)}function Jv(e){return{createPoint2d:(e,t)=>B_(e,t),createDirection2d:(e,t)=>V_(e,t),createVector2d:(e,t)=>H_(e,t),createAxis2d:(e,t,n,r)=>U_(e,t,n,r),wrapCurve2dHandle:e=>W_(e),createCurve2dAdaptor:e=>G_(e),makeLine2d:(e,t,n,r)=>K_(e,t,n,r),makeCircle2d:(e,t,n,r)=>q_(e,t,n,r),makeArc2dThreePoints:(e,t,n,r,i,a)=>re(e,t,n,r,i,a),makeArc2dTangent:(e,t,n,r,i,a)=>ie(e,t,n,r,i,a),makeEllipse2d:(e,t,n,r,i,a,o)=>J_(e,t,n,r,i,a,o),makeEllipseArc2d:(e,t,n,r,i,a,o,s,c)=>Y_(e,t,n,r,i,a,o,s,c),makeBezier2d:e=>X_(e),makeBSpline2d:(e,t)=>Z_(e,t),evaluateCurve2d:(e,t)=>Q_(e,t),evaluateCurve2dD1:(e,t)=>$_(e,t),getCurve2dBounds:e=>ev(e),getCurve2dType:e=>tv(e),trimCurve2d:(e,t,n)=>nv(e,t,n),reverseCurve2d:e=>{rv(e)},copyCurve2d:e=>iv(e),offsetCurve2d:(e,t)=>av(e,t),translateCurve2d:(e,t,n)=>ov(e,t,n),rotateCurve2d:(e,t,n,r)=>sv(e,t,n,r),scaleCurve2d:(e,t,n,r)=>cv(e,t,n,r),mirrorCurve2dAtPoint:(e,t,n)=>lv(e,t,n),mirrorCurve2dAcrossAxis:(e,t,n,r,i)=>uv(e,t,n,r,i),affinityTransform2d:(e,t,n,r,i,a)=>dv(e,t,n,r,i,a),createIdentityGTrsf2d:()=>pv(),createAffinityGTrsf2d:(e,t,n,r,i)=>mv(e,t,n,r,i),createTranslationGTrsf2d:(e,t)=>hv(e,t),createMirrorGTrsf2d:(e,t,n,r,i,a,o)=>gv(e,t,n,r,i,a,o),createRotationGTrsf2d:(e,t,n)=>_v(e,t,n),createScaleGTrsf2d:(e,t,n)=>vv(e,t,n),setGTrsf2dTranslationPart:(e,t,n)=>{yv(e,t,n)},multiplyGTrsf2d:(e,t)=>{bv(e,t)},transformCurve2dGeneral:(e,t)=>xv(e,t),intersectCurves2d:(e,t,n)=>Sv(e,t,n),projectPointOnCurve2d:(e,t,n)=>Cv(e,t,n),distanceBetweenCurves2d:(e,t,n,r,i,a)=>wv(e,t,n,r,i,a),approximateCurve2dAsBSpline:(e,t,n,r)=>Tv(e,t,n,r),decomposeBSpline2dToBeziers:e=>Ev(e),createBoundingBox2d:()=>Dv(),addCurveToBBox2d:(e,t,n)=>{Ov(e,t,n)},getBBox2dBounds:e=>kv(e),mergeBBox2d:(e,t)=>{Av(e,t)},isBBox2dOut:(e,t)=>jv(e,t),isBBox2dOutPoint:(e,t,n)=>Mv(e,t,n),getCurve2dCircleData:e=>Nv(e),getCurve2dEllipseData:e=>Pv(e),getCurve2dBezierPoles:e=>Fv(e),getCurve2dBezierDegree:e=>Iv(e),getCurve2dBSplineData:e=>Lv(e),serializeCurve2d:e=>Rv(e),deserializeCurve2d:e=>zv(e),splitCurve2d:(e,t)=>Bv(e,t),liftCurve2dToPlane:(t,n,r,i)=>Vv(e,t,n,r,i),buildEdgeOnSurface:(t,n)=>Hv(e,t,n),extractSurfaceFromFace:e=>Uv(e),extractCurve2dFromEdge:(t,n)=>Gv(e,t,n),buildCurves3d:e=>{},fixWireOnFace:(e,t,n)=>Kv(e,t,n),fillSurface:(t,n)=>qv(e,t,n)}}function Yv(e,t){let n=t;if(n.type===`solid`)return e.volume(I(t),pp);if(n.type===`compound`){let n=Mp(e,t,`solid`),r=0;for(let t of n)r+=e.volume(I(t),pp);return r}return 0}function Xv(e,t){let n=t;if(n.type===`face`)return e.faceArea(I(t),pp);if(n.type===`solid`)return e.surfaceArea(I(t),pp);if(n.type===`compound`){let n=Mp(e,t,`face`),r=0;for(let t of n)r+=e.faceArea(I(t),pp);return r}return 0}function Zv(e,t){let n=t;if(n.type===`edge`)return e.edgeLength(I(t));if(n.type===`face`)return e.facePerimeter(I(t));if(n.type===`wire`)return e.wireLength(n.id);throw Error(`brepkit: length() requires an edge, wire, or face`)}function Qv(e,n){let r=e.getEdgeVertices(n);return[(t(r,0)+t(r,3))/2,(t(r,1)+t(r,4))/2,(t(r,2)+t(r,5))/2]}function $v(e,t){let r=t;if(r.type===`solid`)return n(e.centerOfMass(I(t),pp));if(r.type===`face`){let n=Yp(e,t);return Qp(e,t,(n.uMin+n.uMax)/2,(n.vMin+n.vMax)/2)}if(r.type===`edge`)return Qv(e,r.id);if(r.type===`vertex`)return qp(e,t);let i=Mp(e,t,`vertex`);if(i.length>0){let t=0,n=0,r=0;for(let a of i){let i=qp(e,a);t+=i[0],n+=i[1],r+=i[2]}return[t/i.length,n/i.length,r/i.length]}return[0,0,0]}function ey(e,t){let n=t;return n.type===`edge`?Qv(e,n.id):$v(e,t)}function ty(e,t){let r=t;if(r.type===`solid`){let r=e.boundingBox(I(t));return{min:n(r,0),max:n(r,3)}}if(r.type===`vertex`){let n=qp(e,t);return{min:[...n],max:[...n]}}let i=Mp(e,t,`vertex`);if(i.length===0)return{min:[0,0,0],max:[0,0,0]};let a=qp(e,i[0]),o=a[0],s=a[1],c=a[2],l=a[0],u=a[1],d=a[2];for(let t=1;t<i.length;t++){let n=qp(e,i[t]);n[0]<o&&(o=n[0]),n[0]>l&&(l=n[0]),n[1]<s&&(s=n[1]),n[1]>u&&(u=n[1]),n[2]<c&&(c=n[2]),n[2]>d&&(d=n[2])}return{min:[o,s,c],max:[l,u,d]}}function ny(e,r,i){let a=r,o=i;if(a.type===`solid`&&o.type===`solid`){let r=e.solidToSolidDistance(a.id,o.id);return{value:t(r,0),point1:n(r,1),point2:n(r,4)}}if(a.type===`vertex`&&(o.type===`solid`||o.type===`face`||o.type===`edge`)){let r=n(e.getVertexPosition(a.id)),i=o.type===`solid`?e.pointToSolidDistance(r[0],r[1],r[2],o.id):o.type===`face`?e.pointToFaceDistance(r[0],r[1],r[2],o.id):e.pointToEdgeDistance(r[0],r[1],r[2],o.id);return{value:t(i,0),point1:r,point2:n(i,1)}}let s=r=>{if(r.type===`vertex`)return n(e.getVertexPosition(r.id));if(r.type===`solid`){let n=e.boundingBox(r.id);return[(t(n,0)+t(n,3))/2,(t(n,1)+t(n,4))/2,(t(n,2)+t(n,5))/2]}return[0,0,0]},c=s(a),l=s(o),u=l[0]-c[0],d=l[1]-c[1],f=l[2]-c[2];return{value:Math.sqrt(u*u+d*d+f*f),point1:c,point2:l}}function ry(e,r,i,a){let o=I(r,`face`),s=e.measureCurvatureAtSurface(o,i,a);if(s.length<8)throw Error(`brepkit: measureCurvatureAtSurface returned ${s.length} values, expected 8`);let c=t(s,0),l=t(s,1);return{gaussian:c*l,mean:(c+l)/2,max:Math.max(c,l),min:Math.min(c,l),maxDirection:n(s,2),minDirection:n(s,5)}}function iy(e,n){let r=e.tessellateFace(I(n,`face`),.1),i=r.positions,a=r.indices,o=0,s=0,c=0,l=0;for(let e=0;e<a.length;e+=3){let n=t(a,e)*3,r=t(a,e+1)*3,u=t(a,e+2)*3,d=t(i,n),f=t(i,n+1),p=t(i,n+2),m=t(i,r),h=t(i,r+1),g=t(i,r+2),_=t(i,u),v=t(i,u+1),y=t(i,u+2),b=(d+m+_)/3,x=(f+h+v)/3,S=(p+g+y)/3,C=m-d,w=h-f,ee=g-p,te=_-d,ne=v-f,re=y-p,ie=.5*Math.sqrt((w*re-ee*ne)**2+(ee*te-C*re)**2+(C*ne-w*te)**2);o+=b*ie,s+=x*ie,c+=S*ie,l+=ie}return l<1e-30?[0,0,0]:[o/l,s/l,c/l]}function ay(e,t){let n=n=>ny(e,t,n);return{distanceTo(e){return n(e)},dispose(){}}}function oy(e,t,n=!1){let r=t,i=r.type===`edge`||r.type===`wire`||r.type===`face`;return{volume:Yv(e,t),area:Xv(e,t),length:n&&i?Zv(e,t):0,centerOfMass:$v(e,t),boundingBox:ty(e,t)}}function sy(e){return{volume:t=>Yv(e,t),area:t=>Xv(e,t),length:t=>Zv(e,t),centerOfMass:t=>$v(e,t),linearCenterOfMass:t=>ey(e,t),boundingBox:t=>ty(e,t),distance:(t,n)=>ny(e,t,n),surfaceCurvature:(t,n,r)=>ry(e,t,n,r),surfaceCenterOfMass:t=>iy(e,t),createDistanceQuery:t=>ay(e,t),measureBulk:(t,n)=>oy(e,t,n)}}function cy(e){return e.sketchNew()}function ly(e,t,n,r,i){return e.sketchAddPoint(t,n,r,i)}function uy(e,t,n){e.sketchAddConstraint(t,n)}function dy(e,t,n,r){return e.sketchSolve(t,n,r)}function fy(e,t,n,r,i){return e.sketchAddArc(t,n,r,i)}function py(e,t){let n=e.sketchDof(t);return typeof n==`string`?n:String(n)}function my(e){return{sketchNew:()=>cy(e),sketchAddPoint:(t,n,r,i)=>ly(e,t,n,r,i),sketchAddArc:(t,n,r,i)=>fy(e,t,n,r,i),sketchAddConstraint:(t,n)=>{uy(e,t,n)},sketchSolve:(t,n,r)=>dy(e,t,n,r),sketchDof:t=>py(e,t)}}function hy(e,t,n,r){return F(e.extrude(I(t,`face`),n[0],n[1],n[2],r))}function gy(e,t,n,r){if(n&&typeof n==`object`&&`origin`in n&&`direction`in n){let{origin:i,direction:a}=n,o=180/Math.PI*r;return o>360&&(o=360),F(e.revolve(I(t,`face`),i[0],i[1],i[2],a[0],a[1],a[2],o))}throw Error(`brepkit: revolve requires axis with origin and direction`)}function _y(e,t,n,r,i){let a=180/Math.PI*i;return a>360&&(a=360),F(e.revolve(I(t,`face`),n[0],n[1],n[2],r[0],r[1],r[2],a))}function vy(e,t,n,r,i){(n!==void 0||r!==void 0||i!==void 0)&&vp(`loft-options`,`Loft options (ruled, startShape, endShape) not supported; ignored.`);let a=t.map(t=>{let n=t;return n.type===`wire`?e.makeFaceFromWire(n.id):I(t,`face`)});return F(e.loft(a))}function yy(e){switch(e){case 0:return`rmf`;case 1:return`rightCorner`;case 2:return`roundCorner`;default:return}}function by(e,t,n,r){let i=r?.transitionMode===void 0?void 0:yy(r.transitionMode),a=t,o=a.type===`wire`?e.makeFaceFromWire(a.id):I(t,`face`);if(n.type===`wire`){let t=Mp(e,n,`edge`).map(e=>I(e,`edge`));if(i&&t.length===1){let n=t[0];if(n!==void 0)return F(e.sweepWithOptions(o,n,i,[],0,`transformed`))}return i&&t.length>1&&vp(`sweep-transition-multi-edge`,`Sweep transition mode not supported for multi-edge wires; ignored.`),F(e.sweepAlongEdges(o,t))}if(i){let t=I(n,`edge`);return F(e.sweepWithOptions(o,t,i,[],0,`transformed`))}let s=Km(e,n);if(!s)throw Error(`brepkit: sweep spine must be an edge or wire`);return F(e.sweep(o,s.degree,s.knots,s.controlPoints,s.weights))}function xy(e,t,n){let r=t,i=r.type===`wire`?e.makeFaceFromWire(r.id):I(t,`face`);if(n.type===`wire`){let t=Mp(e,n,`edge`).map(e=>I(e,`edge`));return F(e.sweepAlongEdges(i,t))}let a=Km(e,n);if(!a)throw Error(`brepkit: pipe spine must be an edge or wire`);return F(e.pipe(i,a.degree,a.knots,a.controlPoints,a.weights))}function Sy(e,t,n,r,i,a,o){let s=I(t,`face`);return F(e.helicalSweep(s,n[0],n[1],n[2],r[0],r[1],r[2],i,a,o))}function Cy(e,t,n,r,i,a){let o=I(t,`face`),s=I(n,`edge`);return F(e.sweepWithOptions(o,s,r,i,a,`transformed`))}function wy(e){switch(e){case`right`:return`rightCorner`;case`round`:return`roundCorner`;case`transformed`:return`rmf`;default:return}}function Ty(e,t,n){return n?{shape:e,firstShape:t,lastShape:t}:e}function Ey(e,t,n,r){try{return F(e.sweepWithOptions(t,n,r,[],0,`transformed`))}catch(e){console.warn(`brepkit: sweepWithOptions failed, falling back to sweepSmooth/simplePipe:`,e);return}}function Dy(e,t){try{if(t.type!==`wire`)return{edgeId:I(t,`edge`)};let n=Mp(e,t,`edge`);if(n.length===1){let e=n[0];return e?{edgeId:I(e,`edge`)}:void 0}vp(`sweepPipeShell-transition-multi-edge`,`sweepPipeShell transition mode not supported for multi-edge wires; ignored.`);return}catch(e){console.warn(`brepkit: resolveContactModeEdge failed for unexpected spine type, falling through:`,e);return}}function Oy(e,t,n,r){let i=Dy(e,n);if(i)return Ey(e,t,i.edgeId,r)}function ky(e,t,n){let r=Km(e,n);if(!(!r||r.degree<=1))try{return F(e.sweepSmooth(t,r.degree,r.knots,r.controlPoints,r.weights))}catch(e){console.warn(`brepkit: sweepSmooth failed, falling back to simplePipe:`,e);return}}function Ay(e,t,n,r){let i=t,a=i.type===`wire`?e.makeFaceFromWire(i.id):I(t,`face`),o=!!(r&&r.shellMode),s=r?.transitionMode,c=s?wy(s):void 0;if(c){let r=Oy(e,a,n,c);if(r)return Ty(r,t,o)}return Ty(ky(e,a,n)||xy(e,t,n),t,o)}function jy(e,t,n){let r=t.map(t=>{let n=t;return n.type===`wire`?e.makeFaceFromWire(n.id):I(t,`face`)});try{let t={};if(n?.ruled!==void 0&&(t.ruled=n.ruled),n?.solid!==void 0&&(t.solid=n.solid),n?.tolerance!==void 0&&(t.tolerance=n.tolerance),n?.startVertex){let r=e.getVertexPosition(I(n.startVertex,`vertex`));t.startPoint=[r[0],r[1],r[2]]}if(n?.endVertex){let r=e.getVertexPosition(I(n.endVertex,`vertex`));t.endPoint=[r[0],r[1],r[2]]}return F(e.loftWithOptions(r,JSON.stringify(t)))}catch(e){console.warn(`brepkit: loftWithOptions failed, falling back to smooth/basic loft:`,e)}if(!n?.ruled)try{return F(e.loftSmooth(r))}catch(e){console.warn(`brepkit: loftSmooth failed, falling back to basic loft:`,e)}return vy(e,t)}function My(e,t,n,r){let i={type:`extrusionLaw`,profile:t,length:n,endFactor:r,Trim(e,t,n){return i},delete:qf};return i}function Ny(e,t,n,r,i,a,o){if(i!==null){let r=hy(e,n,Zp(e,n,0,0),i);return o?ch(e,t,r):r}return t}function Py(e){return{extrude:(t,n,r)=>hy(e,t,n,r),revolve:(t,n,r)=>gy(e,t,n,r),revolveVec:(t,n,r,i)=>_y(e,t,n,r,i),loft:(t,n,r,i)=>vy(e,t,n,r,i),sweep:(t,n,r)=>by(e,t,n,r),simplePipe:(t,n)=>xy(e,t,n),helicalSweep:(t,n,r,i,a,o)=>Sy(e,t,n,r,i,a,o),sweepWithOptions:(t,n,r,i,a)=>Cy(e,t,n,r,i,a),sweepPipeShell:(t,n,r)=>Ay(e,t,n,r),loftAdvanced:(t,n)=>jy(e,t,n),buildExtrusionLaw:(t,n,r)=>My(e,t,n,r),draftPrism:(t,n,r,i,a,o)=>Ny(e,t,n,r,i,a,o)}}function Fy(e){return{dispose:()=>{},executeBatch:t=>e.executeBatch(t),checkpoint:()=>e.checkpoint(),checkpointCount:()=>e.checkpointCount(),restoreCheckpoint:t=>{e.restore(t)},discardCheckpoint:t=>{e.discardCheckpoint(t)}}}var Iy=class{oc;kernelId=`brepkit`;capabilities=a;bk;constructor(e){this.bk=e,this.oc=e;let t=this.bk;Object.assign(this,bh(t),ug(t),Py(t),Og(t),Vm(t),y_(t),z_(t),sy(t),Kp(t),Om(t),ih(t),l_(t),my(t),Jv(t),Fy(t))}};function Ly(e){throw Error(`manifold: ${e} is not implemented`)}var Ry=new Set(`makeBox.makeBoxWithCorners.makeCylinder.makeSphere.makeCone.makeTorus.makeEllipsoid.makeFuse.makeCut.makeCommon.translateShape.rotateShape.scaleShape.mirrorShape.transformShape.generalTransform.generalTransformNonOrthogonal.gridPattern.extrude.revolve.revolveVec.loft.loftAdvanced.sweep.simplePipe.sweepWithOptions.sweepPipeShell.helicalSweep.draftPrism.fillet.chamfer.chamferDistAngle.shell.thicken.offset.filletVariable.draft.defeature.simplify.reverseShape.hull.hullFromPoints.sewAndSolidify.profileEdge.profileWire.profileFace`.split(`.`));function zy(e){return Ry.has(e)}function R(e,t,n){return{op:e,params:t,inputs:n,replayable:zy(e)&&n.every(e=>e.replayable)}}function z(e,t){return{manifold:e,node:t}}function B(e){return e.manifold}function By(e){return typeof e?.translate==`function`?e.translate([0,0,0]):e}function V(e){return e.node}function Vy(e){if(e&&typeof e==`object`&&`manifold`in e&&`node`in e)return e}var Hy=[`occt`,`occt-wasm`];function Uy(){for(let e of Hy)try{return H(e)}catch{}}function Wy(e){let t=Uy();if(!t)throw new c(`manifold: ${e} requires a registered occt kernel; none is available`);return t}var Gy=new WeakMap,Ky=[0,0,0],qy=[0,0,1];function Jy(e){return Math.hypot(e[0],e[1],e[2])}function Yy(e){let t=Jy(e);return t===0?[...qy]:[e[0]/t,e[1]/t,e[2]/t]}function Xy(e){let[t,n,r]=Yy(e);return[0,180/Math.PI*Math.atan2(Math.hypot(t,n),r),180/Math.PI*Math.atan2(n,t)]}function Zy(e){let t=e.Manifold;function n(e,t,n){let r=e;return n[0]===0&&n[1]===0&&n[2]>0||(r=r.rotate(Xy(n))),(t[0]!==0||t[1]!==0||t[2]!==0)&&(r=r.translate(t)),r}return{makeBox:(e,n,r)=>z(t.cube([e,n,r],!1),R(`makeBox`,{width:e,height:n,depth:r},[])),makeBoxFromCorners:(e,n)=>{let r=[Math.abs(n[0]-e[0]),Math.abs(n[1]-e[1]),Math.abs(n[2]-e[2])],i=[Math.min(e[0],n[0]),Math.min(e[1],n[1]),Math.min(e[2],n[2])];return z(t.cube(r,!1).translate(i),R(`makeBoxWithCorners`,{p1:e,p2:n},[]))},makeCylinder:(e,r,i=Ky,a=qy)=>z(n(t.cylinder(r,e,e,0,!1),i,a),R(`makeCylinder`,{radius:e,height:r,center:i,direction:a},[])),makeSphere:(e,n=Ky)=>{let r=t.sphere(e,0);return(n[0]!==0||n[1]!==0||n[2]!==0)&&(r=r.translate(n)),z(r,R(`makeSphere`,{radius:e,center:n},[]))},makeCone:(e,r,i,a=Ky,o=qy)=>z(n(t.cylinder(i,e,r,0,!1),a,o),R(`makeCone`,{radius1:e,radius2:r,height:i,center:a,direction:o},[])),makeTorus:(r,i,a=Ky,o=qy)=>{let s=Math.max(3,e.getCircularSegments(i)),c=[];for(let e=0;e<s;e++){let t=e/s*Math.PI*2;c.push([r+i*Math.cos(t),i*Math.sin(t)])}return z(n(t.revolve([c],0),a,o),R(`makeTorus`,{majorRadius:r,minorRadius:i,center:a,direction:o},[]))},makeEllipsoid:(e,n,r)=>z(t.sphere(1,0).scale([e,n,r]),R(`makeEllipsoid`,{aLength:e,bLength:n,cLength:r},[])),makeRectangle:()=>Ly(`makeRectangle`)}}function Qy(e){return e}function $y(e,t,n){switch(n){case`cut`:case`subtract`:case`difference`:return e.subtract(t);case`intersect`:case`common`:case`intersection`:return e.intersect(t);default:return e.add(t)}}function eb(e){let t=V(Qy(e)).params,n=t.normal,r=t.origin;if(!n||!r)throw Error(`manifold: section/split plane must carry normal+origin params`);return{normal:n,offset:n[0]*r[0]+n[1]*r[1]+n[2]*r[2]}}function tb(e){let t=new Uint32Array(e.triVerts),n=e.vertProperties.length/3,r=new Float32Array(n*3);for(let t=0;t<n;t++)r[t*3]=e.vertProperties[t*3]??0,r[t*3+1]=e.vertProperties[t*3+1]??0,r[t*3+2]=e.vertProperties[t*3+2]??0;return{vertices:r,normals:new Float32Array,triangles:t,uvs:new Float32Array,faceGroups:[{start:0,count:t.length,faceHash:0}]}}function nb(e){let t=e.Manifold;function n(e,t,n){let r=Qy(e),i=Qy(t);return z(B(r).add(B(i)),R(`makeFuse`,{},[V(r),V(i)]))}function r(e,t,n){let r=Qy(e),i=Qy(t);return z(B(r).subtract(B(i)),R(`makeCut`,{},[V(r),V(i)]))}function i(e,t,n){let r=Qy(e),i=Qy(t);return z(B(r).intersect(B(i)),R(`makeCommon`,{},[V(r),V(i)]))}function a(e,n){if(e.length===0)throw Error(`manifold: fuseAll requires at least one shape`);let r=e.map(Qy),[i]=r;if(i===void 0)throw Error(`manifold: fuseAll requires at least one shape`);return r.length===1?i:z(t.union(r.map(B)),R(`makeFuse`,{},r.map(V)))}function o(e,n,r){let i=Qy(e);if(n.length===0)return i;let a=n.map(Qy);return z(t.difference([B(i),...a.map(B)]),R(`makeCut`,{},[V(i),...a.map(V)]))}function s(e,t,n){let r=Qy(e),{normal:i,offset:a}=eb(t),[o]=B(r).splitByPlane(i,a);return z(o,R(`section`,{normal:i,offset:a},[V(r),V(Qy(t))]))}function c(e,n){let r=Qy(e),[i]=n;if(i===void 0)throw Error(`manifold: split requires at least one tool`);let a=Qy(i),{normal:o,offset:s}=eb(i),[c,l]=B(r).splitByPlane(o,s);return z(t.union([c,l]),R(`split`,{normal:o,offset:s},[V(r),V(a)]))}function l(e,t,n){let r=[],i=Qy(e),a=Qy(t);return(B(i)===void 0||B(i).isEmpty())&&r.push({operand:`base`,issue:`null-shape`,message:`Base shape is empty`}),(B(a)===void 0||B(a).isEmpty())&&r.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is empty`}),{valid:r.length===0,issues:r}}function u(n,r,i,a,o,s){let c=new e.Mesh({numProp:3,vertProperties:new Float32Array(n),triVerts:new Uint32Array(r)}),l=new e.Mesh({numProp:3,vertProperties:new Float32Array(i),triVerts:new Uint32Array(a)});return tb($y(t.ofMesh(c),t.ofMesh(l),o).getMesh())}return{fuse:n,cut:r,intersect:i,section:s,fuseAll:a,cutAll:o,split:c,checkBoolean:l,meshBoolean:u}}function rb(e){return e}function ib(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function ab(e){let t=Math.hypot(e[0],e[1],e[2]);return t<1e-12?[0,0,1]:[e[0]/t,e[1]/t,e[2]/t]}function ob(e,t,n){let r=ib();return r[12]=e,r[13]=t,r[14]=n,r}function sb(e,t,n){let r=e,[i,a,o]=ab(t),s=Math.cos(r),c=Math.sin(r),l=1-s,u=l*i*i+s,d=l*i*a+c*o,f=l*i*o-c*a,p=l*i*a-c*o,m=l*a*a+s,h=l*a*o+c*i,g=l*i*o+c*a,_=l*a*o-c*i,v=l*o*o+s,y=ib();return y[0]=u,y[1]=d,y[2]=f,y[4]=p,y[5]=m,y[6]=h,y[8]=g,y[9]=_,y[10]=v,y[12]=n[0]-(u*n[0]+p*n[1]+g*n[2]),y[13]=n[1]-(d*n[0]+m*n[1]+_*n[2]),y[14]=n[2]-(f*n[0]+h*n[1]+v*n[2]),y}function cb(e,t){let n=ib();return n[0]=t,n[5]=t,n[10]=t,n[12]=e[0]*(1-t),n[13]=e[1]*(1-t),n[14]=e[2]*(1-t),n}function lb(e,t){let[n,r,i]=ab(t),a=1-2*n*n,o=1-2*r*r,s=1-2*i*i,c=-2*n*r,l=-2*n*i,u=-2*r*i,d=ib();d[0]=a,d[1]=c,d[2]=l,d[4]=c,d[5]=o,d[6]=u,d[8]=l,d[9]=u,d[10]=s;let f=e[0]*n+e[1]*r+e[2]*i;return d[12]=2*f*n,d[13]=2*f*r,d[14]=2*f*i,d}function ub(e,t){let n=ib();return n[0]=e[0],n[1]=e[3],n[2]=e[6],n[4]=e[1],n[5]=e[4],n[6]=e[7],n[8]=e[2],n[9]=e[5],n[10]=e[8],n[12]=t[0],n[13]=t[1],n[14]=t[2],n}function db(e,t,n,r,i){return z(e.transform(t),R(n,r,[i]))}function fb(e,t,n,r){let i=rb(e);return db(B(i),ob(t,n,r),`translateShape`,{x:t,y:n,z:r},V(i))}function pb(e,t,n=[0,0,1],r=[0,0,0]){let i=rb(e);return db(B(i),sb(t,n,r),`rotateShape`,{angle:t,axis:n,center:r},V(i))}function mb(e,t,n){let r=rb(e);return db(B(r),lb(t,n),`mirrorShape`,{origin:t,normal:n},V(r))}function hb(e,t,n){let r=rb(e);return db(B(r),cb(t,n),`scaleShape`,{center:t,factor:n},V(r))}function gb(e,t){if(!Array.isArray(t)||t.length!==16)throw Error(`manifold: transform expects a 16-element column-major matrix`);let n=rb(e);return db(B(n),t,`transformShape`,{matrix:[...t]},V(n))}function _b(e,t,n,r){let i=rb(e);return db(B(i),ub(t,n),`generalTransform`,{linear:t,translation:n,isOrthogonal:r},V(i))}function vb(e,t,n){let r=rb(e);return db(B(r),ub(t,n),`generalTransformNonOrthogonal`,{linear:t,translation:n},V(r))}function yb(e){let t=ib();for(let n of e)t=Tb(n.type===`translate`?ob(n.x,n.y,n.z):sb(n.angle*Math.PI/180,n.axis??[0,0,1],n.center??[0,0,0]),t);return{handle:t,dispose:()=>{}}}function bb(e,t,n,r){let i=[e];for(let a=1;a<r;a++){let r=n*a;i.push(fb(e,t[0]*r,t[1]*r,t[2]*r))}return i}function xb(e,t,n,r,i){let a=[e];for(let o=1;o<i;o++)a.push(pb(e,r*o*Math.PI/180,n,t));return a}function Sb(e,t,n,r,i,a,o,s){let c=rb(t),l=[],u=[];for(let e=0;e<o;e++)for(let t=0;t<s;t++){let o=n[0]*i*e+r[0]*a*t,s=n[1]*i*e+r[1]*a*t,d=n[2]*i*e+r[2]*a*t;l.push(B(c).transform(ob(o,s,d))),u.push(V(c))}return z(l.length===1?l[0]:e.Manifold.union(l),R(`gridPattern`,{directionX:n,directionY:r,spacingX:i,spacingY:a,countX:o,countY:s},u))}function Cb(e){return e.map(e=>{switch(e.type){case`translate`:return fb(e.shape,e.x,e.y,e.z);case`rotate`:return pb(e.shape,e.angle*Math.PI/180,e.axis,e.center);case`scale`:return hb(e.shape,e.center,e.factor);case`mirror`:return mb(e.shape,e.origin,e.normal)}})}function wb(e){return{composeTransform:yb,transform:gb,locate:gb,translate:fb,rotate:pb,mirror:mb,scale:hb,generalTransform:_b,generalTransformNonOrthogonal:vb,positionOnCurve:()=>Ly(`positionOnCurve`),linearPattern:bb,circularPattern:xb,gridPattern:(t,n,r,i,a,o,s)=>Sb(e,t,n,r,i,a,o,s),transformBatch:Cb}}function Tb(e,t){let n=ib();for(let r=0;r<4;r++)for(let i=0;i<4;i++){let a=0;for(let n=0;n<4;n++){let o=e[n*4+i]??0,s=t[r*4+n]??0;a+=o*s}n[r*4+i]=a}return n}var Eb=2*Math.PI,Db=e=>Math.hypot(e[0],e[1],e[2]),Ob=(e,t)=>[e[0]-t[0],e[1]-t[1],e[2]-t[2]];function kb(e){return Db(Ob(e.p2,e.p1))}function Ab(e,t){let n=e.map(e=>[e[0],e[1],e[2]]);for(let e=1;e<n.length;e++)for(let r=0;r<n.length-e;r++){let e=n[r]??[0,0,0],i=n[r+1]??[0,0,0];n[r]=[e[0]*(1-t)+i[0]*t,e[1]*(1-t)+i[1]*t,e[2]*(1-t)+i[2]*t]}return n[0]??[0,0,0]}function jb(e){return e.k===`line`?`LINE`:e.k===`bezier`?`BEZIER`:e.k===`helix`?`BSPLINE`:Math.abs(e.rx-e.ry)<1e-9*Math.max(1,e.rx)?`CIRCLE`:`ELLIPSE`}function Mb(e){return e.k===`line`?{first:0,last:kb(e)}:e.k===`conic`?{first:e.a0,last:e.a1}:e.k===`helix`?{first:0,last:Eb*e.turns}:{first:0,last:1}}function Nb(e,t){if(e.k===`line`){let n=t/(kb(e)||1);return[e.p1[0]+(e.p2[0]-e.p1[0])*n,e.p1[1]+(e.p2[1]-e.p1[1])*n,e.p1[2]+(e.p2[2]-e.p1[2])*n]}if(e.k===`bezier`)return Ab(e.points,t);if(e.k===`helix`){let n=Math.cos(t),r=Math.sin(t),i=e.pitch*t/Eb;return[e.center[0]+e.radius*(n*e.x[0]+r*e.y[0])+i*e.axis[0],e.center[1]+e.radius*(n*e.x[1]+r*e.y[1])+i*e.axis[1],e.center[2]+e.radius*(n*e.x[2]+r*e.y[2])+i*e.axis[2]]}let n=Math.cos(t),r=Math.sin(t);return[e.center[0]+e.rx*n*e.x[0]+e.ry*r*e.y[0],e.center[1]+e.rx*n*e.x[1]+e.ry*r*e.y[1],e.center[2]+e.rx*n*e.x[2]+e.ry*r*e.y[2]]}function Pb(e,t){let n;if(e.k===`line`)n=Ob(e.p2,e.p1);else if(e.k===`bezier`){let r=Ab(e.points,Math.max(0,t-1e-4));n=Ob(Ab(e.points,Math.min(1,t+1e-4)),r)}else if(e.k===`helix`){let r=Math.cos(t),i=Math.sin(t),a=e.pitch/Eb;n=[e.radius*(-i*e.x[0]+r*e.y[0])+a*e.axis[0],e.radius*(-i*e.x[1]+r*e.y[1])+a*e.axis[1],e.radius*(-i*e.x[2]+r*e.y[2])+a*e.axis[2]]}else{let r=Math.cos(t),i=Math.sin(t);n=[-e.rx*i*e.x[0]+e.ry*r*e.y[0],-e.rx*i*e.x[1]+e.ry*r*e.y[1],-e.rx*i*e.x[2]+e.ry*r*e.y[2]]}let r=Db(n)||1;return[n[0]/r,n[1]/r,n[2]/r]}function Fb(e){if(e.k===`line`)return kb(e);if(e.k===`helix`){let t=Eb*e.radius;return e.turns*Math.sqrt(t*t+e.pitch*e.pitch)}if(e.k===`conic`){let t=Math.abs(e.a1-e.a0);if(Math.abs(e.rx-e.ry)<1e-9*Math.max(1,e.rx))return e.rx*t;if(Math.abs(t-Eb)<1e-9){let t=e.rx,n=e.ry,r=(t-n)*(t-n)/((t+n)*(t+n));return Math.PI*(t+n)*(1+3*r/(10+Math.sqrt(4-3*r)))}return zb(t=>Nb(e,t),e.a0,e.a1,256)}return zb(t=>Nb(e,t),0,1,128)}function Ib(e){return e.k===`conic`?Math.abs(Math.abs(e.a1-e.a0)-Eb)<1e-9:!1}function Lb(e){return Ib(e)}function Rb(e){return e.k===`conic`?Eb:0}function zb(e,t,n,r){let i=0,a=e(t);for(let o=1;o<=r;o++){let s=e(t+(n-t)*o/r);i+=Db(Ob(s,a)),a=s}return i}function Bb(e){return e}function Vb(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Hb(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function Ub(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function Wb(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function Gb(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function Kb(e){return Math.hypot(e[0],e[1],e[2])}function qb(e){let t=Kb(e);return t<1e-12?[0,0,1]:[e[0]/t,e[1]/t,e[2]/t]}function Jb(e){return qb(Hb(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function Yb(e){let t=qb(e),n=Jb(t);return{xAxis:n,yAxis:qb(Hb(t,n))}}function Xb(e){let t=0;for(let n=0;n<e.length;n++){let r=e[n]??[0,0],i=e[(n+1)%e.length]??[0,0];t+=r[0]*i[1]-i[0]*r[1]}return t/2}function Zb(e){return Xb(e)<0?[...e].reverse():e}function Qb(e){return Xb(e)>0?[...e].reverse():e}function $b(e){return e.node?.params}function ex(e){let t=Bb(e),n=$b(t),r=n?.outline??n?.polygon??n?.points;if(r&&r.length>=3){let e=n?.origin??[0,0,0],t=Zb(r.map(e=>[e[0],e[1]])),i=(n?.holes)?.filter(e=>e.length>=3).map(e=>Qb(e.map(e=>[e[0],e[1]])));if(n?.xAxis&&n.yAxis)return{outline:t,holes:i,origin:e,xAxis:n.xAxis,yAxis:n.yAxis};let{xAxis:a,yAxis:o}=Yb(n?.normal??[0,0,1]);return{outline:t,holes:i,origin:e,xAxis:a,yAxis:o}}return tx(t)}function tx(e){let t=B(e)?.getMesh?.();if(!t)throw Error(`manifold: profile carries no recorded outline and no mesh to derive one`);let n=t.numProp,r=Math.floor(t.vertProperties.length/n),i=[],a=0;for(let e=0;e<r;e++)i.push([t.vertProperties[e*n]??0,t.vertProperties[e*n+1]??0]),a+=t.vertProperties[e*n+2]??0;a/=Math.max(1,r);let o=nx(i);return{outline:Zb(o.length>=3?o:[[-.5,-.5],[.5,-.5],[0,.5]]),origin:[0,0,a],xAxis:[1,0,0],yAxis:[0,1,0]}}function nx(e){let t=[...e].sort((e,t)=>e[0]===t[0]?e[1]-t[1]:e[0]-t[0]);if(t.length<3)return[...t];let n=(e,t,n)=>(t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0]),r=[];for(let e of t){for(;r.length>=2&&n(r[r.length-2]??e,r[r.length-1]??e,e)<=0;)r.pop();r.push(e)}let i=[];for(let e=t.length-1;e>=0;e--){let r=t[e]??[0,0];for(;i.length>=2&&n(i[i.length-2]??r,i[i.length-1]??r,r)<=0;)i.pop();i.push(r)}return r.pop(),i.pop(),[...r,...i]}function rx(e){let t=[];for(let n=1;n+1<e;n++)t.push(0,n,n+1);return t}function ix(e,t){let n=e.length;if(n<2||t<=n)return e.map(e=>[e[0],e[1]]);let r=[],i=0;for(let t=0;t<n;t++){let a=e[t]??[0,0],o=e[(t+1)%n]??[0,0],s=Math.hypot(o[0]-a[0],o[1]-a[1]);r.push(s),i+=s}if(i===0)return e.map(e=>[e[0],e[1]]);let a=t-n,o=r.map(e=>a*e/i),s=o.map(e=>Math.floor(e)),c=s.reduce((e,t)=>e+t,0),l=o.map((e,t)=>({i:t,f:e-Math.floor(e)})).sort((e,t)=>t.f-e.f);for(let e=0;c<a;e++,c++){let t=l[e%l.length]?.i??0;s[t]=(s[t]??0)+1}let u=[];for(let t=0;t<n;t++){let r=e[t]??[0,0],i=e[(t+1)%n]??[0,0];u.push([r[0],r[1]]);let a=s[t]??0;for(let e=1;e<=a;e++){let t=e/(a+1);u.push([r[0]+(i[0]-r[0])*t,r[1]+(i[1]-r[1])*t])}}return u}function ax(e,t,n=1){return e.outline.map(e=>{let r=e[0]*n,i=e[1]*n;return[t.origin[0]+t.xAxis[0]*r+t.yAxis[0]*i,t.origin[1]+t.xAxis[1]*r+t.yAxis[1]*i,t.origin[2]+t.xAxis[2]*r+t.yAxis[2]*i]})}function ox(e,t){if(t.length<2)throw Error(`manifold: skinning requires at least two rings`);let n=t[0]?.length??0;if(n<3)throw Error(`manifold: skinning requires rings of at least three points`);let r=[];for(let e of t){if(e.length!==n)throw Error(`manifold: skinning requires all rings to share a vertex count`);for(let t of e)r.push(t[0],t[1],t[2])}let i=cx(t.length,n),a=new e.Mesh({numProp:3,vertProperties:Float32Array.from(r),triVerts:Uint32Array.from(i)});return sx(e,new e.Manifold(a))}function sx(e,t){if(typeof t.volume!=`function`||t.volume()>=0)return t;let n=t.getMesh(),r=n.triVerts;for(let e=0;e+2<r.length;e+=3){let t=r[e+1]??0;r[e+1]=r[e+2]??0,r[e+2]=t}let i=new e.Mesh({numProp:n.numProp,vertProperties:n.vertProperties,triVerts:r}),a=new e.Manifold(i);return typeof t.delete==`function`&&t.delete(),a}function cx(e,t){let n=[];for(let r=0;r+1<e;r++){let e=r*t,i=(r+1)*t;for(let r=0;r<t;r++){let a=(r+1)%t;n.push(e+r,e+a,i+a),n.push(e+r,i+a,i+r)}}let r=rx(t);for(let e=0;e<r.length;e+=3)n.push(r[e]??0,r[e+2]??0,r[e+1]??0);let i=(e-1)*t,a=rx(t);for(let e=0;e<a.length;e+=3)n.push(i+(a[e]??0),i+(a[e+1]??0),i+(a[e+2]??0));return n}function lx(e,t){let n=[];if(e.length===0)return n;let r=t=>{let n=e[Math.max(0,t-1)]??e[t]??[0,0,0];return qb(Ub(e[Math.min(e.length-1,t+1)]??e[t]??[0,0,0],n))},i=r(0),a=qb(Ub(t,Gb(i,Vb(t,i))));Kb(a)<1e-9&&(a=Jb(i)),n.push({origin:e[0]??[0,0,0],xAxis:a,yAxis:qb(Hb(i,a)),tangent:i});for(let t=1;t<e.length;t++){let o=e[t-1]??[0,0,0],s=e[t]??[0,0,0],c=Ub(s,o),l=Vb(c,c),u=a;if(l>1e-18){let e=Ub(a,Gb(c,2/l*Vb(c,a))),n=Ub(i,Gb(c,2/l*Vb(c,i))),o=Ub(r(t),n),s=Vb(o,o);u=s>1e-18?Ub(e,Gb(o,2/s*Vb(o,e))):e}let d=r(t),f=qb(Ub(u,Gb(d,Vb(u,d)))),p=qb(Hb(d,f));n.push({origin:s,xAxis:f,yAxis:p,tangent:d}),i=d,a=f}return n}var ux=24,dx=24,fx=null;function px(e){let t=fx?fx(Math.max(Math.abs(e),1e-6)):ux;return Math.max(ux,t)}var mx=[0,0,0],hx=1e-6,gx={delete:()=>{},isEmpty:()=>!1};function _x(e,t){return e[t]??mx}function vx(e,t=1){return Math.max(2,Math.ceil(Math.abs(e)/(2*Math.PI)*px(t)))}function yx(e){return qb(Hb(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function bx(e,t,n,r,i,a){let o=qb(t),s=a?qb(a):yx(o),c=qb(Hb(o,s)),l=i-r,u=vx(l,n),d=[];for(let t=0;t<=u;t++){let i=r+l*t/u;d.push(Wb(e,Wb(Gb(s,n*Math.cos(i)),Gb(c,n*Math.sin(i)))))}return d}function xx(e,t,n){let r=Ub(t,e),i=Ub(n,e),a=Hb(r,i);if(Kb(a)<1e-12)return[e,t,n];let o=qb(a),s=Vb(r,r),c=Vb(i,i),l=Vb(r,i),u=2*(s*c-l*l);if(Math.abs(u)<1e-18)return[e,t,n];let d=c*(s-l)/u,f=s*(c-l)/u,p=Wb(e,Wb(Gb(r,d),Gb(i,f))),m=Kb(Ub(e,p)),h=qb(Ub(e,p)),g=qb(Hb(o,h)),_=(e=>Math.atan2(Vb(Ub(e,p),g),Vb(Ub(e,p),h)))(n);return _<0&&(_+=2*Math.PI),bx(p,o,m,0,_,h)}function Sx(e){let t=[];for(let n=0;n<=dx;n++){let r=n/dx,i=e.map(e=>[...e]);for(let e=1;e<i.length;e++)for(let t=0;t<i.length-e;t++){let e=_x(i,t),n=_x(i,t+1);i[t]=[e[0]*(1-r)+n[0]*r,e[1]*(1-r)+n[1]*r,e[2]*(1-r)+n[2]*r]}t.push(_x(i,0))}return t}function Cx(e){let t=0,n=0,r=0;for(let i=0;i<e.length;i++){let a=_x(e,i),o=_x(e,(i+1)%e.length);t+=(a[1]-o[1])*(a[2]+o[2]),n+=(a[2]-o[2])*(a[0]+o[0]),r+=(a[0]-o[0])*(a[1]+o[1])}let i=[t,n,r];return Kb(i)<1e-12?[0,0,1]:qb(i)}function wx(e,t){return Kb(Ub(e,t))<hx}function Tx(e){let t=e[0];if(!t)return[];let n=[...t];for(let t=1;t<e.length;t++){let r=e[t]??[];if(r.length===0)continue;let i=_x(n,n.length-1),a=wx(_x(r,0),i),o=wx(_x(r,r.length-1),i);!a&&o&&(r=[...r].reverse());let s=wx(_x(r,0),i);for(let e=+!!s;e<r.length;e++)n.push(_x(r,e))}return n.length>1&&wx(_x(n,0),_x(n,n.length-1))&&n.pop(),n}function Ex(e){let t=Cx(e),n=_x(e,0),r=e.length>1?qb(Ub(_x(e,1),n)):yx(t);r=qb(Ub(r,Gb(t,Vb(r,t)))),Kb(r)<1e-9&&(r=yx(t));let i=qb(Hb(t,r));return{outline:Zb(e.map(e=>{let t=Ub(e,n);return[Vb(t,r),Vb(t,i)]})),origin:n,xAxis:r,yAxis:i}}var Dx=12;function Ox(e,t){let[n,r]=e.curveParameters(t),i=Dx;try{e.curveType(t)===`line`&&(i=1)}catch{}let a=[];for(let o=0;o<=i;o++)a.push(e.curvePointAtParam(t,n+(r-n)*o/i));return a}function kx(e,t){return Tx(e.iterShapes(t,`edge`).map(t=>Ox(e,t)))}function Ax(e){let t=e.getCircularSegments;typeof t==`function`&&(fx=e=>t(e));function n(e,t){return z(gx,R(`profileEdge`,t?{pts:e,curve:t}:{pts:e},[]))}function r(e,t){let n=qb(e),r=t?qb(t):yx(n);return{x:r,y:qb(Hb(n,r))}}function i(e,t,n){let r=Ub(t,e),i=Ub(n,e),a=Hb(r,i);if(Kb(a)<1e-12)return;let o=qb(a),s=Vb(r,r),c=Vb(i,i),l=Vb(r,i),u=2*(s*c-l*l);if(Math.abs(u)<1e-18)return;let d=c*(s-l)/u,f=s*(c-l)/u,p=Wb(e,Wb(Gb(r,d),Gb(i,f))),m=Kb(Ub(e,p)),h=qb(Ub(e,p)),g=qb(Hb(o,h)),_=Math.atan2(Vb(Ub(n,p),g),Vb(Ub(n,p),h));return _<0&&(_+=2*Math.PI),{k:`conic`,center:p,x:h,y:g,rx:m,ry:m,a0:0,a1:_}}function a(e){let t=Vy(e);if(t){let e=t.node.params;return e?.ring??e?.pts??[]}let n=Uy();return n?Ox(n,e):[]}function o(e){let t=[];for(let n of e){let e=Vy(n);e&&t.push(V(e))}return t}function s(e){let t=Tx(e.map(e=>a(e)));return z(gx,R(`profileWire`,{ring:t,...t.length>=3?Ex(t):void 0},o(e)))}function c(e,t){let{outline:n,origin:r,xAxis:i,yAxis:a}=Ex(e);return z(gx,R(`profileFace`,{outline:n,origin:r,xAxis:i,yAxis:a},t?[t]:[]))}function l(e){let t=Vy(e);if(t){let e=t.node.params?.ring??[];if(e.length>=3)return c(e,V(t))}let n=Uy();return c(n?kx(n,e):[],t?V(t):void 0)}function u(e,t){let n=Vy(e),r=n?.node?.params??{},i=r.origin??mx,a=r.xAxis??[1,0,0],s=r.yAxis??[0,1,0],c=e=>{let t=Ub(e,i);return[Vb(t,a),Vb(t,s)]},l=[];for(let e of t){let t=Vy(e),n;if(t)n=t.node.params?.ring??[];else{let t=Uy();n=t?kx(t,e):[]}n.length>=3&&l.push(n.map(c))}let u=[...r.holes??[],...l],d=n?[V(n),...o(t)]:o(t);return z(gx,R(`profileFace`,{outline:r.outline??[],holes:u,origin:i,xAxis:a,yAxis:s},d))}function d(e,t,n,r,i){let a=qb(t),o=i?qb(i):yx(a),s=qb(Hb(a,o)),c=[],l=px(Math.max(n,r));for(let t=0;t<=l;t++){let i=2*Math.PI*t/l;c.push(Wb(e,Wb(Gb(o,n*Math.cos(i)),Gb(s,r*Math.sin(i)))))}return c}return{makeVertex:(e,t,r)=>n([[e,t,r]]),makeLineEdge:(e,t)=>n([e,t],{k:`line`,p1:e,p2:t}),makeCircleEdge:(e,t,i)=>{let{x:a,y:o}=r(t);return n(bx(e,t,i,0,2*Math.PI),{k:`conic`,center:e,x:a,y:o,rx:i,ry:i,a0:0,a1:2*Math.PI})},makeCircleArc:(e,t,i,a,o)=>{let{x:s,y:c}=r(t);return n(bx(e,t,i,a,o),{k:`conic`,center:e,x:s,y:c,rx:i,ry:i,a0:a,a1:o})},makeArcEdge:(e,t,r)=>n(xx(e,t,r),i(e,t,r)),makeEllipseEdge:(e,t,i,a,o)=>{let{x:s,y:c}=r(t,o);return n(d(e,t,i,a,o),{k:`conic`,center:e,x:s,y:c,rx:i,ry:a,a0:0,a1:2*Math.PI})},makeBezierEdge:e=>n(Sx(e),{k:`bezier`,points:e.map(e=>[...e])}),makeTangentArc:(e,t,r)=>n([e,r],{k:`line`,p1:e,p2:r}),makeHelixWire:(e,t,r,i=[0,0,0],a=[0,0,1],o=!1)=>{let s=qb(a),c=yx(s),l=qb(Hb(s,c)),u=o?Gb(l,-1):l,d=e===0?0:t/e,f={k:`helix`,center:i,axis:s,x:c,y:u,radius:r,pitch:e,turns:d},p=Math.max(8,Math.ceil(d*ux)),m=[];for(let e=0;e<=p;e++)m.push(Nb(f,2*Math.PI*d*e/p));return n(m,f)},makeWire:e=>s(e),makeWireFromMixed:e=>s(e),makeFace:l,addHolesInFace:u,makePolygonFace:e=>c(e)}}function jx(e){let t=e.Manifold,n=Ax(e);function r(e,n){let r=e.map(e=>[e.x,e.y,e.z]);return z(t.hull(r),R(`hullFromPoints`,{points:r,tolerance:n},[]))}function i(e,n){let r=e.map(e=>B(e));return z(t.hull(r),R(`hull`,{tolerance:n},e.map(e=>V(e))))}function a(e){let n=e.map(e=>B(e)),r=n[0];if(!r)throw Error(`manifold: makeCompound requires at least one input shape`);return z(n.length===1?r:t.union(n),R(`makeCompound`,{},e.map(e=>V(e))))}function o(e,t){let n=e[0];return n||Ly(`sewAndSolidify (no input faces on manifold kernel)`),z(B(n),R(`sewAndSolidify`,{tolerance:t},e.map(e=>V(e))))}return{makeVertex:(e,t,r)=>n.makeVertex(e,t,r),makeEdge:()=>Ly(`makeEdge`),makeWire:e=>n.makeWire(e),makeFace:(e,t)=>n.makeFace(e,t),makeLineEdge:(e,t)=>n.makeLineEdge(e,t),makeCircleEdge:(e,t,r)=>n.makeCircleEdge(e,t,r),makeCircleArc:(e,t,r,i,a)=>n.makeCircleArc(e,t,r,i,a),makeArcEdge:(e,t,r)=>n.makeArcEdge(e,t,r),makeEllipseEdge:(e,t,r,i,a)=>n.makeEllipseEdge(e,t,r,i,a),makeEllipseArc:()=>Ly(`makeEllipseArc`),makeBezierEdge:e=>n.makeBezierEdge(e),makeTangentArc:(e,t,r)=>n.makeTangentArc(e,t,r),makeHelixWire:(e,t,r,i,a,o)=>n.makeHelixWire(e,t,r,i,a,o),makeWireFromMixed:e=>n.makeWireFromMixed(e),makeCompound:a,solidFromShell:()=>Ly(`solidFromShell`),hull:i,hullFromPoints:r,buildSolidFromFaces:()=>Ly(`buildSolidFromFaces`),makeNonPlanarFace:()=>Ly(`makeNonPlanarFace`),addHolesInFace:(e,t)=>n.addHolesInFace(e,t),removeHolesFromFace:()=>Ly(`removeHolesFromFace`),makeFaceOnSurface:()=>Ly(`makeFaceOnSurface`),bsplineSurface:(e,t,n)=>Wy(`bsplineSurface`).bsplineSurface(e,t,n),triangulatedSurface:(e,t,n)=>Wy(`triangulatedSurface`).triangulatedSurface(e,t,n),buildTriFace:()=>Ly(`buildTriFace`),sewAndSolidify:o,createPoint3d:()=>Ly(`createPoint3d`),createDirection3d:()=>Ly(`createDirection3d`),createVector3d:()=>Ly(`createVector3d`),createAxis1:()=>Ly(`createAxis1`),createAxis2:()=>Ly(`createAxis2`),createAxis3:()=>Ly(`createAxis3`)}}var Mx=Math.PI/180;function Nx(e){return e}function Px(e){let t=180/Math.PI*e;return t>360?360:t}function Fx(e){let t=e;if(t&&typeof t.X==`function`&&typeof t.Y==`function`&&typeof t.Z==`function`)return[t.X(),t.Y(),t.Z()]}function Ix(e){if(e&&typeof e==`object`){let t=e;if(`origin`in t&&`direction`in t)return{origin:t.origin,direction:t.direction};let n=e;if(typeof n.Location==`function`&&typeof n.Direction==`function`){let e=Fx(n.Location()),t=Fx(n.Direction());if(e&&t)return{origin:e,direction:t}}}}function Lx(e){return e.outline.map(e=>[e[0],e[1]])}function Rx(e){return{outline:e.outline,origin:e.origin,xAxis:e.xAxis,yAxis:e.yAxis}}function zx(e){return{origin:e.origin,xAxis:e.xAxis,yAxis:e.yAxis,tangent:qb(Hb(e.xAxis,e.yAxis))}}function Bx(e){let t=0;for(let n of e.outline)t=Math.max(t,Math.hypot(n[0],n[1]));return t||1}function Vx(e){let t=B(e)?.getMesh?.();if(!t)return[];let n=t.numProp,r=Math.floor(t.vertProperties.length/n),i=[];for(let e=0;e<r;e++)i.push([t.vertProperties[e*n]??0,t.vertProperties[e*n+1]??0,t.vertProperties[e*n+2]??0]);return i}function Hx(e,t){let n=Nx(e),r=n.node?.params,i=r?.path??r?.points;if(i&&i.length>=2)return i.map(e=>[e[0],e[1],e[2]]);let a=Vx(n);if(a.length>=2)return a;let o=[],s=Math.max(2,t);for(let e=0;e<s;e++)o.push([0,0,e/(s-1)]);return o}function Ux(e){return e?.node??R(`spine`,{},[])}function Wx(e,t,n){let r=t.xAxis,i=t.yAxis,a=t.origin,o=[r[0],r[1],r[2],0,i[0],i[1],i[2],0,n[0],n[1],n[2],0,a[0],a[1],a[2],1];return e.transform(o)}function Gx(e,t,n){let r=qb(n);return e.outline.map(n=>{let i=Ub(Wb(e.origin,Wb(Gb(e.xAxis,n[0]),Gb(e.yAxis,n[1]))),t),a=i[0]*r[0]+i[1]*r[1]+i[2]*r[2];return[Kb(Ub(i,Gb(r,a))),a]})}function Kx(e,t,n){let r=e,i=qb(n);if(!(Math.abs(i[0])<1e-9&&Math.abs(i[2])<1e-9&&i[1]>0)){let e=Math.acos(Math.max(-1,Math.min(1,i[1])))*(180/Math.PI),t=Hb([0,1,0],i);Kb(t)<1e-9&&(t=[1,0,0]),t=qb(t),r=r.rotate([t[0]*e,t[1]*e,t[2]*e])}return(t[0]!==0||t[1]!==0||t[2]!==0)&&(r=r.translate([t[0],t[1],t[2]])),r}function qx(e,t,n,r,i){let a=qb(t),{xAxis:o,yAxis:s}=Yb(a),c=i*2*Math.PI,l=Math.max(8,Math.ceil(Math.abs(i)*24)),u=r*i,d=[];for(let t=0;t<=l;t++){let r=t/l,i=c*r,f=Wb(Gb(o,n*Math.cos(i)),Gb(s,n*Math.sin(i)));d.push(Wb(e,Wb(f,Gb(a,u*r))))}return d}function Jx(e){if(e.length!==0)return t=>{let n=t*(e.length-1),r=Math.floor(n),i=Math.min(e.length-1,r+1),a=n-r;return(e[r]??1)*(1-a)+(e[i]??1)*a}}function Yx(e,t,n,r){let i=ex(t),a=qb([n[0],n[1],n[2]]),o=Kb([n[0]*r,n[1]*r,n[2]*r]),s=[Lx(i),...(i.holes??[]).map(e=>e.map(e=>[e[0],e[1]]))];return z(Wx(sx(e,e.Manifold.extrude(s,o)),i,a),R(`extrude`,{outline:i.outline,holes:i.holes,origin:i.origin,xAxis:i.xAxis,yAxis:i.yAxis,direction:[n[0],n[1],n[2]],length:r},[V(Nx(t))]))}function Xx(e,t,n,r,i,a,o){let s=ex(t),c=Px(i),l=Gx(s,n,r);return z(Kx(e.Manifold.revolve([l],0,c),n,r),R(a,o,[V(Nx(t))]))}function Zx(e,t){let n=e.length;if(n===0||t.length!==n)return e;let r=0,i=1/0;for(let a=0;a<n;a++){let o=0;for(let r=0;r<n&&o<i;r++){let i=e[(r+a)%n]??[0,0,0],s=t[r]??[0,0,0],c=i[0]-s[0],l=i[1]-s[1],u=i[2]-s[2];o+=c*c+l*l+u*u}o<i&&(i=o,r=a)}if(r===0)return e;let a=[];for(let t=0;t<n;t++)a.push(e[(t+r)%n]??[0,0,0]);return a}function Qx(e,t,n,r){if(t.length<2)throw Error(`manifold: loft requires at least two profiles`);let i=t.map(ex),a=i.reduce((e,t)=>Math.max(e,t.outline.length),0),o=i.map(e=>ax({...e,outline:ix(e.outline,a)},zx(e)));for(let e=1;e<o.length;e++)o[e]=Zx(o[e]??[],o[e-1]??[]);return z(ox(e,o),R(n,{sections:i.map(Rx),...r},t.map(e=>V(Nx(e)))))}function $x(e,t,n,r,i,a,o){let s=ex(t),c=lx(n,s.xAxis),l=c.length;return z(ox(e,c.map((e,t)=>{let n=o?o(l>1?t/(l-1):0):1;return ax(s,e,n)})),R(i,{section:Rx(s),path:n.map(e=>[e[0],e[1],e[2]]),...a},[V(Nx(t)),r]))}function eS(e,t,n,r,i,a){if(r===null)return t;let o=ex(n),s=qb(Hb(o.xAxis,o.yAxis)),c=Math.tan(i*Mx),l={origin:Wb(o.origin,Gb(s,r)),xAxis:o.xAxis,yAxis:o.yAxis,tangent:s},u=1+c*r/Bx(o),d=ox(e,[ax(o,zx(o),1),ax(o,l,u)]),f=R(`draftPrism`,{outline:o.outline,origin:o.origin,xAxis:o.xAxis,yAxis:o.yAxis,height:r,angleDeg:i,fuse:a},[V(Nx(n))]);if(a){let e=Nx(t);return z(B(e).add(d),R(`makeFuse`,{},[V(e),f]))}return z(d,f)}function tS(e){return{revolve:(t,n,r)=>{let i=Ix(n);if(!i)throw Error(`manifold: revolve could not read the axis; pass {origin,direction}, a gp_Ax1, or use revolveVec`);let{origin:a,direction:o}=i;return Xx(e,t,a,o,r,`revolve`,{...Rx(ex(t)),axisOrigin:[a[0],a[1],a[2]],axisDirection:[o[0],o[1],o[2]],angleDeg:Px(r)})},revolveVec:(t,n,r,i)=>Xx(e,t,n,r,i,`revolveVec`,{...Rx(ex(t)),center:[n[0],n[1],n[2]],direction:[r[0],r[1],r[2]],angleDeg:Px(i)})}}function nS(e){return{sweep:(t,n,r)=>{let i={};return r?.transitionMode!==void 0&&(i.transitionMode=r.transitionMode),$x(e,t,Hx(n,16),Ux(n),`sweep`,i)},simplePipe:(t,n)=>$x(e,t,Hx(n,16),Ux(n),`simplePipe`,{}),sweepWithOptions:(t,n,r,i,a)=>$x(e,t,Hx(n,Math.max(2,a||16)),Ux(n),`sweepWithOptions`,{contactMode:r,scaleValues:[...i],segments:a},Jx(i)),sweepPipeShell:(t,n,r)=>{let i={};r?.transitionMode!==void 0&&(i.transitionMode=r.transitionMode);let a=$x(e,t,Hx(n,16),Ux(n),`sweepPipeShell`,i);return r?.shellMode?{shape:a,firstShape:t,lastShape:t}:a},helicalSweep:(t,n,r,i,a,o)=>$x(e,t,qx(n,r,i,a,o),Ux(t),`helicalSweep`,{axisOrigin:[n[0],n[1],n[2]],axisDirection:[r[0],r[1],r[2]],radius:i,pitch:a,turns:o})}}function rS(e){return{extrude:(t,n,r)=>Yx(e,t,n,r),...tS(e),loft:(t,n)=>Qx(e,t,`loft`,{ruled:n??!1}),loftAdvanced:(t,n)=>Qx(e,t,`loftAdvanced`,{solid:n?.solid??!0,ruled:n?.ruled??!1,tolerance:n?.tolerance}),...nS(e),draftPrism:(t,n,r,i,a,o)=>eS(e,t,n,i,a,o),buildExtrusionLaw:(e,t,n)=>({type:`extrusionLaw`,profile:e,length:t,endFactor:n}),loftBatch:()=>Ly(`loftBatch`),extrudeBatch:t=>t.map(t=>Yx(e,t.face,t.direction,t.length))}}var iS=16;function aS(e,t,n){if(!(n>0))return By(t);let r=cS(e,n);return r===void 0||typeof t?.minkowskiDifference!=`function`||typeof t?.minkowskiSum!=`function`?By(t):t.minkowskiDifference(r).minkowskiSum(r)}function oS(e,t,n){if(n===0)return By(t);let r=cS(e,Math.abs(n));return r===void 0?By(t):n>0?typeof t?.minkowskiSum==`function`?t.minkowskiSum(r):By(t):typeof t?.minkowskiDifference==`function`?t.minkowskiDifference(r):By(t)}function sS(e,t,n,r){if(n===0)return By(t);if(r)return oS(e,t,Math.abs(n));let i=oS(e,t,-Math.abs(n));return typeof t?.subtract==`function`?t.subtract(i):By(t)}function cS(e,t){let n=e?.Manifold;if(typeof n?.sphere==`function`)return n.sphere(t,iS)}function lS(e){return e}function uS(e){let t=e;if(t!=null){if(typeof t.index==`number`)return t.index;if(typeof t.id==`number`)return t.id}}function dS(e){let{min:t,max:n}=e;if(!(t===void 0||n===void 0||t.length<3||n.length<3))return[((t[0]??0)+(n[0]??0))/2,((t[1]??0)+(n[1]??0))/2,((t[2]??0)+(n[2]??0))/2]}function fS(e){let t=e;if(t?.box!==void 0)return dS(t.box);let n=(e?.manifold)?.boundingBox?.();return n===void 0?void 0:dS(n)}function pS(e){let t=e.length;if(t===0)return{kind:`all`,count:t};let n=[];for(let t of e){let e=fS(t);if(e===void 0){n.length=0;break}n.push(e)}if(n.length===t)return{kind:`witness`,count:t,points:n};let r=[];for(let t of e){let e=uS(t);if(e===void 0){r.length=0;break}r.push(e)}return r.length===t?{kind:`index`,count:t,indices:r}:{kind:`all`,count:t}}function mS(e){return typeof e==`function`&&Ly(`fillet (per-edge radius callback)`),e}function hS(e){return typeof e==`number`?e:e[0]}function gS(e){let t=e.match(/[-+]?\d*\.?\d+/);return t?Number(t[0]):0}function _S(e,t,n,r,i){let a=lS(n),o=mS(i),s=pS(r);return z(aS(e,B(a),hS(o)),R(t,{radius:o,selection:s},[V(a)]))}function vS(e,t,n,r,i){let a=lS(t),o=pS(n);return z(aS(e,B(a),r),R(`chamferDistAngle`,{distance:r,angleDeg:i,selection:o},[V(a)]))}function yS(e,t,n){let r=t.node;if(r?.op!==`extrude`)return;let i=r.params??{},a=i.outline,o=i.origin,s=i.direction,c=i.length;if(!a||a.length<3||!o||!s||typeof c!=`number`)return;let l=Math.abs(n);try{let n=new e.CrossSection([a.map(e=>[e[0],e[1]])]).offset(-l);if(typeof n.isEmpty==`function`&&n.isEmpty())return;let r=e.Manifold.extrude(n,c),i=Math.hypot(s[0],s[1],s[2])||1,u=Math.abs(s[0])<1e-9&&Math.abs(s[1])<1e-9&&s[2]>0,d=r;if(!u){let e=Math.atan2(Math.hypot(s[0],s[1]),s[2])*(180/Math.PI),t=Math.atan2(s[1],s[0])*(180/Math.PI);d=d.rotate([0,e,t])}return d=d.translate([o[0]+s[0]/i*l,o[1]+s[1]/i*l,o[2]+s[2]/i*l]),sx(e,B(t).subtract(d))}catch{return}}function bS(e,t,n,r,i){let a=lS(t),o=pS(n);return z(yS(e,a,r)??sS(e,B(a),r,!1),R(`shell`,i===void 0?{thickness:r,selection:o}:{thickness:r,selection:o,tolerance:i},[V(a)]))}function xS(e,t,n){let r=lS(t);return z(sS(e,B(r),n,!0),R(`thicken`,{thickness:n},[V(r)]))}function SS(e,t,n,r){let i=lS(t);return z(oS(e,B(i),n),R(`offset`,r===void 0?{distance:n}:{distance:n,tolerance:r},[V(i)]))}function CS(e,t,n){let r=lS(t);return z(aS(e,B(r),gS(n)),R(`filletVariable`,{spec:n},[V(r)]))}function wS(e,t,n,r,i){typeof i==`function`&&Ly(`draft (per-face angle callback)`);let a=lS(e),o=pS(t);return z(By(B(a)),R(`draft`,{pullDirection:n,neutralPlane:r,angleDeg:i,selection:o},[V(a)]))}function TS(e,t){let n=lS(e),r=pS(t);return z(By(B(n)),R(`defeature`,{selection:r},[V(n)]))}function ES(e){let t=lS(e),n=B(t);return z(typeof n?.simplify==`function`?n.simplify():By(n),R(`simplify`,{},[V(t)]))}function DS(e){let t=lS(e),n=B(t);return z(typeof n?.mirror==`function`?n.mirror([1,0,0]):By(n),R(`reverseShape`,{},[V(t)]))}function OS(e,t){let n=lS(t.shape),r=pS(t.edges.map(e=>e.edge)),i=t.edges.map(e=>e.r2===void 0?e.radius:[e.radius,e.r2]),a=t.edges[0]?.radius??0;return z(aS(e,B(n),a),R(`fillet`,{radii:i,selection:r},[V(n)]))}function kS(e){return{fillet:(t,n,r)=>_S(e,`fillet`,t,n,r),chamfer:(t,n,r)=>_S(e,`chamfer`,t,n,r),chamferDistAngle:(t,n,r,i)=>vS(e,t,n,r,i),shell:(t,n,r,i)=>bS(e,t,n,r,i),thicken:(t,n)=>xS(e,t,n),offset:(t,n,r)=>SS(e,t,n,r),filletVariable:(t,n)=>CS(e,t,n),draft:(e,t,n,r,i)=>wS(e,t,n,r,i),defeature:(e,t)=>TS(e,t),offsetWire2D:()=>Ly(`offsetWire2D`),simplify:e=>ES(e),reverseShape:e=>DS(e),shellBatch:t=>t.map(t=>bS(e,t.shape,t.faces,t.thickness,t.tolerance)),filletBatch:t=>t.map(t=>OS(e,t))}}function AS(e){return B(e).getMesh()}function jS(e){let t=e.numProp,n=e.vertProperties.length/t;if(t===3)return new Float32Array(e.vertProperties);let r=new Float32Array(n*3);for(let i=0;i<n;i++)r[i*3]=e.vertProperties[i*t]??0,r[i*3+1]=e.vertProperties[i*t+1]??0,r[i*3+2]=e.vertProperties[i*t+2]??0;return r}function MS(e,t){let n=new Float32Array(e.length);for(let r=0;r<t.length;r+=3){let i=(t[r]??0)*3,a=(t[r+1]??0)*3,o=(t[r+2]??0)*3,s=e[i]??0,c=e[i+1]??0,l=e[i+2]??0,u=(e[a]??0)-s,d=(e[a+1]??0)-c,f=(e[a+2]??0)-l,p=(e[o]??0)-s,m=(e[o+1]??0)-c,h=(e[o+2]??0)-l,g=d*h-f*m,_=f*p-u*h,v=u*m-d*p;for(let e of[i,a,o])n[e]=(n[e]??0)+g,n[e+1]=(n[e+1]??0)+_,n[e+2]=(n[e+2]??0)+v}for(let e=0;e<n.length;e+=3){let t=n[e]??0,r=n[e+1]??0,i=n[e+2]??0,a=Math.sqrt(t*t+r*r+i*i);a>1e-12&&(n[e]=t/a,n[e+1]=r/a,n[e+2]=i/a)}return n}function NS(e){let t=e.triVerts.length/3,{runIndex:n,runOriginalID:r}=e;if(!n||!r||n.length<2)return[{start:0,count:e.triVerts.length,faceHash:0}];let i=[];for(let e=0;e+1<n.length;e++){let a=n[e]??0,o=(n[e+1]??t*3)-a;o!==0&&i.push({start:a,count:o,faceHash:r[e]??0})}return i}function PS(e,t){let n=AS(e),r=jS(n),i=new Uint32Array(n.triVerts);return{vertices:r,normals:t.skipNormals?new Float32Array:MS(r,i),triangles:i,uvs:t.includeUVs?new Float32Array(r.length/3*2):new Float32Array,faceGroups:NS(n)}}function FS(e,t,n){let r=AS(e),i=jS(r),a=r.triVerts,o=[],s=[],c=new Set,l=i.length/3,u=e=>{o.push(i[e*3]??0,i[e*3+1]??0,i[e*3+2]??0)};for(let e=0;e<a.length;e+=3){let t=a[e]??0,n=a[e+1]??0,r=a[e+2]??0;for(let[e,i]of[[t,n],[n,r],[r,t]]){let t=Math.min(e,i),n=Math.max(e,i),r=t*l+n;if(c.has(r))continue;c.add(r);let a=o.length/3;u(t),u(n),s.push({start:a,count:2,edgeHash:r})}}return{lines:new Float32Array(o),edgeGroups:s}}function IS(e){return!0}function LS(e){return{mesh:(e,t)=>PS(e,t),meshEdges:(e,t,n)=>FS(e,t,n),hasTriangulation:e=>IS(e),meshShape:(e,t,n)=>{}}}function RS(e,t=[0,0,0]){return Array.isArray(e)&&e.length>=3?[Number(e[0]),Number(e[1]),Number(e[2])]:[...t]}function zS(e,t=0){return typeof e==`number`?e:t}function BS(e,t=``){return typeof e==`string`?e:t}function VS(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function HS(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function US(e,t,n,r){return VS(t,VS(HS(n,e[0]),HS(r,e[1])))}function WS(e,t){let n=t.outline??[];if(n.length<3)throw Error(`manifold replay: profile outline needs at least three points`);let r=RS(t.origin),i=RS(t.xAxis,[1,0,0]),a=RS(t.yAxis,[0,1,0]),o=n.map(e=>US(e,r,i,a)),s=[];for(let t=0;t<o.length;t++){let n=o[t]??r,i=o[(t+1)%o.length]??r;s.push(e.makeLineEdge([n[0],n[1],n[2]],[i[0],i[1],i[2]]))}let c=e.makeWire(s),l=e.makeFace(c,!0);for(let t of s)e.dispose(t);return l}function GS(e,t){return WS(e,t)}function KS(e,t){let n=e.boundingBox(t);return[(n.min[0]+n.max[0])/2,(n.min[1]+n.max[1])/2,(n.min[2]+n.max[2])/2]}function qS(e,t){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return n*n+r*r+i*i}function JS(e,t,n,r){let i=e.iterShapes(t,r);if(!n||n.kind===`all`)return i;if(n.kind===`witness`){let t=n.points??[],r=i.map(t=>KS(e,t)),a=[],o=new Set;for(let e of t){let t=-1,n=1/0;for(let a=0;a<i.length;a++){if(o.has(a))continue;let i=qS(e,r[a]??[0,0,0]);i<n&&(n=i,t=a)}let s=i[t];t>=0&&s!==void 0&&(o.add(t),a.push(s))}return a}if(n.kind===`index`){let e=n.indices??[],t=[];for(let n of e){let e=i[n];e!==void 0&&t.push(e)}return t}let a=n.regions??[],o=e=>a.some(t=>e[0]>=t.min[0]&&e[0]<=t.max[0]&&e[1]>=t.min[1]&&e[1]<=t.max[1]&&e[2]>=t.min[2]&&e[2]<=t.max[2]);return i.filter(t=>o(KS(e,t)))}function YS(e){let t=e.selection;return t===void 0?void 0:t}function XS(e){let t=e[0];if(t===void 0)throw Error(`manifold replay: op requires an input shape`);return t}function ZS(e,t,n){return e.createAxis1(t[0],t[1],t[2],n[0],n[1],n[2])}function QS(e,t){return(n,r)=>{let i=WS(n,r),a=RS(r[e]),o=RS(r[t],[0,0,1]),s=zS(r.angleDeg,360);return n.revolve(i,ZS(n,a,o),Math.PI/180*s)}}var $S={makeBox:(e,t)=>e.makeBox(zS(t.width),zS(t.height),zS(t.depth)),makeBoxWithCorners:(e,t)=>e.makeBoxFromCorners(RS(t.p1),RS(t.p2)),makeCylinder:(e,t)=>e.makeCylinder(zS(t.radius),zS(t.height),RS(t.center),RS(t.direction,[0,0,1])),makeSphere:(e,t)=>e.makeSphere(zS(t.radius),RS(t.center)),makeCone:(e,t)=>e.makeCone(zS(t.radius1),zS(t.radius2),zS(t.height),RS(t.center),RS(t.direction,[0,0,1])),makeTorus:(e,t)=>e.makeTorus(zS(t.majorRadius),zS(t.minorRadius),RS(t.center),RS(t.direction,[0,0,1])),makeEllipsoid:(e,t)=>e.makeEllipsoid(zS(t.aLength),zS(t.bLength),zS(t.cLength)),makeFuse:(e,t,n)=>{if(n.length<2)return XS(n);let r=XS(n);for(let t of n.slice(1))r=e.fuse(r,t);return r},makeCut:(e,t,n)=>{let r=XS(n);return e.cutAll(r,n.slice(1))},makeCommon:(e,t,n)=>{let r=XS(n);for(let t of n.slice(1))r=e.intersect(r,t);return r},translateShape:(e,t,n)=>e.translate(XS(n),zS(t.x),zS(t.y),zS(t.z)),rotateShape:(e,t,n)=>e.rotate(XS(n),zS(t.angle),RS(t.axis,[0,0,1]),RS(t.center)),scaleShape:(e,t,n)=>e.scale(XS(n),RS(t.center),zS(t.factor,1)),mirrorShape:(e,t,n)=>e.mirror(XS(n),RS(t.origin),RS(t.normal,[1,0,0])),transformShape:(e,t,n)=>e.transform(XS(n),t.matrix),generalTransform:(e,t,n)=>e.generalTransform(XS(n),t.linear,RS(t.translation),!!t.isOrthogonal),generalTransformNonOrthogonal:(e,t,n)=>e.generalTransformNonOrthogonal(XS(n),t.linear,RS(t.translation)),gridPattern:(e,t,n)=>{if(typeof e.gridPattern!=`function`)throw Error(`manifold replay: target kernel lacks gridPattern`);return e.gridPattern(XS(n),RS(t.directionX),RS(t.directionY),zS(t.spacingX),zS(t.spacingY),zS(t.countX,1),zS(t.countY,1))},profileEdge:(e,t)=>{let n=t.pts??[],r=n[0]??[0,0,0],i=n.length>1?n[n.length-1]??r:[r[0]+.001,r[1],r[2]];return e.makeLineEdge([r[0],r[1],r[2]],[i[0],i[1],i[2]])},profileWire:(e,t)=>{let n=t.ring??[],r=[];for(let t=0;t<n.length;t++){let i=n[t]??[0,0,0],a=n[(t+1)%n.length]??i;r.push(e.makeLineEdge([i[0],i[1],i[2]],[a[0],a[1],a[2]]))}let i=e.makeWire(r);for(let t of r)e.dispose(t);return i},profileFace:(e,t)=>WS(e,t),extrude:(e,t)=>{let n=WS(e,t);return e.extrude(n,RS(t.direction,[0,0,1]),zS(t.length,1))},revolve:QS(`axisOrigin`,`axisDirection`),revolveVec:QS(`center`,`direction`),loft:(e,t)=>{let n=(t.sections??[]).map(t=>eC(e,t));return e.loft(n,!!t.ruled)},loftAdvanced:(e,t)=>{let n=(t.sections??[]).map(t=>eC(e,t)),r={solid:t.solid!==!1,ruled:!!t.ruled};return typeof t.tolerance==`number`&&(r.tolerance=t.tolerance),e.loftAdvanced(n,r)},sweep:(e,t)=>e.sweep(tC(e,t),nC(e,t)),simplePipe:(e,t)=>e.simplePipe(tC(e,t),nC(e,t)),sweepWithOptions:(e,t)=>e.sweepWithOptions(tC(e,t),nC(e,t),BS(t.contactMode),t.scaleValues??[],zS(t.segments,0)),sweepPipeShell:(e,t)=>{let n=e.sweepPipeShell(tC(e,t),nC(e,t));return rC(n)?n.shape:n},helicalSweep:(e,t)=>e.helicalSweep(tC(e,t),RS(t.axisOrigin),RS(t.axisDirection,[0,0,1]),zS(t.radius),zS(t.pitch),zS(t.turns,1)),draftPrism:(e,t)=>{let n=WS(e,t);return e.draftPrism(n,n,n,zS(t.height),zS(t.angleDeg),!!t.fuse)},fillet:(e,t,n)=>{let r=XS(n),i=JS(e,r,YS(t),`edge`),a=t.radii,o=t.radius;if(a&&a.length>1){let t=new Map;for(let e=0;e<i.length;e++){let n=i[e],r=a[e]??a[a.length-1];n!==void 0&&r!==void 0&&t.set(n,r)}return e.fillet(r,i,e=>t.get(e)??0)}let s=a?.[0]??o;return e.fillet(r,i,s??0)},chamfer:(e,t,n)=>{let r=XS(n),i=JS(e,r,YS(t),`edge`);return e.chamfer(r,i,t.radius)},chamferDistAngle:(e,t,n)=>{let r=XS(n),i=JS(e,r,YS(t),`edge`);return e.chamferDistAngle(r,i,zS(t.distance),zS(t.angleDeg))},shell:(e,t,n)=>{let r=XS(n),i=JS(e,r,YS(t),`face`);return typeof t.tolerance==`number`?e.shell(r,i,zS(t.thickness),t.tolerance):e.shell(r,i,zS(t.thickness))},thicken:(e,t,n)=>e.thicken(XS(n),zS(t.thickness)),offset:(e,t,n)=>typeof t.tolerance==`number`?e.offset(XS(n),zS(t.distance),t.tolerance):e.offset(XS(n),zS(t.distance)),filletVariable:(e,t,n)=>e.filletVariable(XS(n),BS(t.spec)),draft:(e,t,n)=>{let r=XS(n),i=JS(e,r,YS(t),`face`);return e.draft(r,i,RS(t.pullDirection,[0,0,1]),RS(t.neutralPlane),zS(t.angleDeg))},defeature:(e,t,n)=>{let r=XS(n),i=JS(e,r,YS(t),`face`);return e.defeature(r,i)},simplify:(e,t,n)=>e.simplify(XS(n)),reverseShape:(e,t,n)=>e.reverseShape(XS(n)),hull:(e,t,n)=>e.hull([...n],zS(t.tolerance)),hullFromPoints:(e,t)=>{let n=t.points??[];return e.hullFromPoints(n.map(e=>({x:e[0],y:e[1],z:e[2]})),zS(t.tolerance))},sewAndSolidify:(e,t,n)=>e.sewAndSolidify([...n],zS(t.tolerance))};function eC(e,t){let n=GS(e,t);return e.iterShapes(n,`wire`)[0]??n}function tC(e,t){let n=t.section;return n?GS(e,n):WS(e,t)}function nC(e,t){let n=t.path??[];if(n.length<2)throw Error(`manifold replay: sweep spine needs at least two path points`);let r=[];for(let t=0;t+1<n.length;t++){let i=n[t]??[0,0,0],a=n[t+1]??[0,0,0];r.push(e.makeLineEdge([i[0],i[1],i[2]],[a[0],a[1],a[2]]))}let i=e.makeWire(r);for(let t of r)e.dispose(t);return i}function rC(e){return typeof e==`object`&&!!e&&`shape`in e&&`firstShape`in e&&`lastShape`in e}function iC(e,t,n,r){let i=n.get(e);if(i!==void 0)return i;if(!e.replayable)throw Error(`manifold replay: op '${e.op}' is not replayable (raw-mesh origin or unsupported)`);let a=$S[e.op];if(!a)throw Error(`manifold replay: no replay handler for op '${e.op}'`);let o=e.inputs.map(e=>iC(e,t,n,r)),s=a(t,e.params,o);return n.set(e,s),r.add(s),s}function aC(e,t,n=new Map){let r=new Set,i=iC(e,t,n,r);for(let e of r)e!==i&&t.dispose(e);return i}function oC(e){return B(e)}function sC(e){let t=e?.node?.params;if(!t)return;let n=t.pts??t.ring;if(n&&n.length)return n;let r=t.outline;if(r&&r.length){let e=t.origin??[0,0,0],n=t.xAxis??[1,0,0],i=t.yAxis??[0,1,0];return r.map(t=>[e[0]+n[0]*t[0]+i[0]*t[1],e[1]+n[1]*t[0]+i[1]*t[1],e[2]+n[2]*t[0]+i[2]*t[1]])}}function cC(e){let t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];for(let r of e)for(let e=0;e<3;e++){let i=r[e]??0;i<(t[e]??1/0)&&(t[e]=i),i>(n[e]??-1/0)&&(n[e]=i)}return{min:t,max:n}}function lC(e){let t=e;if(t&&t.__manifoldSub&&t.box)return t.box;let n=sC(e);return n?cC(n):oC(e).boundingBox()}function uC(e){return oC(e)?.getMesh?.()}function dC(e,t){let n=t*e.numProp;return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function fC(e,t){let n=t*3;return[e.triVerts[n]??0,e.triVerts[n+1]??0,e.triVerts[n+2]??0]}function pC(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function mC(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function hC(e){let t=lC(e);return[(t.min[0]+t.max[0])/2,(t.min[1]+t.max[1])/2,(t.min[2]+t.max[2])/2]}function gC(e){let t=Math.floor(e.vertProperties.length/e.numProp);if(t===0)return[0,0,0];let n=[0,0,0];for(let r=0;r<t;r++){let t=dC(e,r);n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}return[n[0]/t,n[1]/t,n[2]/t]}function _C(e){let t=uC(e);if(!t)return hC(e);let n=Math.floor(t.triVerts.length/3),r=0,i=[0,0,0];for(let e=0;e<n;e++){let[n,a,o]=fC(t,e),s=dC(t,n),c=dC(t,a),l=dC(t,o),u=mC(s,pC(c,l))/6;r+=u,i[0]+=(s[0]+c[0]+l[0])/4*u,i[1]+=(s[1]+c[1]+l[1])/4*u,i[2]+=(s[2]+c[2]+l[2])/4*u}return Math.abs(r)<1e-12?gC(t):[i[0]/r,i[1]/r,i[2]/r]}function vC(e){let t=uC(e);if(!t)return hC(e);let n=Math.floor(t.triVerts.length/3),r=0,i=[0,0,0];for(let e=0;e<n;e++){let[n,a,o]=fC(t,e),s=dC(t,n),c=dC(t,a),l=dC(t,o),u=pC([c[0]-s[0],c[1]-s[1],c[2]-s[2]],[l[0]-s[0],l[1]-s[1],l[2]-s[2]]),d=Math.hypot(u[0],u[1],u[2])/2;r+=d,i[0]+=(s[0]+c[0]+l[0])/3*d,i[1]+=(s[1]+c[1]+l[1])/3*d,i[2]+=(s[2]+c[2]+l[2])/3*d}return r<1e-12?gC(t):[i[0]/r,i[1]/r,i[2]/r]}function yC(e){return oC(e).volume()}function bC(e){let t=e;return t&&t.__nativeFace&&typeof t.area==`number`?t.area:oC(e).surfaceArea()}function xC(e){let t=e;if(t&&t.__manifoldSub&&t.box)return{min:[...t.box.min],max:[...t.box.max]};let n=lC(e);return{min:[...n.min],max:[...n.max]}}function SC(e){return _C(e)}function CC(e,t){let n=(e,t,n,r)=>{if(t<n)return[t,n];if(r<e)return[e,r];let i=(Math.max(e,n)+Math.min(t,r))/2;return[i,i]},[r,i]=n(e.min[0],e.max[0],t.min[0],t.max[0]),[a,o]=n(e.min[1],e.max[1],t.min[1],t.max[1]),[s,c]=n(e.min[2],e.max[2],t.min[2],t.max[2]),l=i-r,u=o-a,d=c-s;return{value:Math.sqrt(l*l+u*u+d*d),point1:[r,a,s],point2:[i,o,c]}}function wC(e,t){return CC(lC(e),lC(t))}function TC(e,t=!1){return{volume:yC(e),area:bC(e),length:0,centerOfMass:SC(e),boundingBox:xC(e)}}function EC(e,t,n){let r=Uy();if(!r)throw new c(`manifold: surfaceCurvature requires a registered occt kernel; none is available`);let i=Vy(e);if(!i)return r.surfaceCurvature(e,t,n);if(!i.node.replayable)throw Error(`manifold: surfaceCurvature unsupported; shape originates from a non-replayable op (raw mesh import or mesh boolean)`);let a=Gy.get(i.node)??(()=>{let e=aC(i.node,r);return Gy.set(i.node,e),e})();return r.surfaceCurvature(a,t,n)}function DC(e){return{volume:e=>yC(e),area:e=>bC(e),length:e=>{let t=e;if(t&&t.__nativeEdge&&typeof t.length==`number`)return t.length;let n=Vy(e)?.node;return n?.op===`profileEdge`&&n.params?.curve?Fb(n.params.curve):Ly(`length`)},centerOfMass:e=>SC(e),linearCenterOfMass:e=>SC(e),boundingBox:e=>xC(e),distance:(e,t)=>wC(e,t),surfaceCurvature:(e,t,n)=>EC(e,t,n),surfaceCenterOfMass:e=>vC(e),measureBulk:(e,t)=>TC(e,t),createDistanceQuery:e=>({distanceTo:t=>wC(e,t),dispose:()=>{}})}}function OC(e,t){let{runIndex:n,runOriginalID:r}=e;if(!n||!r)return 0;let i=t*3;for(let e=0;e<r.length;e++){let t=n[e]??0,a=n[e+1]??2**53-1;if(i>=t&&i<a)return r[e]??0}return 0}function kC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID,o=n.length/3,s=e=>{let t=e*i;return[r[t]??0,r[t+1]??0,r[t+2]??0]},c=new Map;for(let e=0;e<o;e++){let t=a?a[e]??e:e,n=c.get(t);n||(n=[],c.set(t,n)),n.push(e)}let l=[];for(let[e,r]of c){let i=0,a=0,o=0,c=0,u=0,d=0,f=0,p=1/0,m=1/0,h=1/0,g=-1/0,_=-1/0,v=-1/0,y=new Float32Array(r.length*9),b=0;for(let e of r){let t=s(n[e*3]??0),r=s(n[e*3+1]??0),l=s(n[e*3+2]??0),x=r[0]-t[0],S=r[1]-t[1],C=r[2]-t[2],w=l[0]-t[0],ee=l[1]-t[1],te=l[2]-t[2],ne=S*te-C*ee,re=C*w-x*te,ie=x*ee-S*w;i+=ne,a+=re,o+=ie;let ae=.5*Math.hypot(ne,re,ie);f+=ae;let oe=(t[0]+r[0]+l[0])/3,se=(t[1]+r[1]+l[1])/3,ce=(t[2]+r[2]+l[2])/3;c+=ae*oe,u+=ae*se,d+=ae*ce;for(let e of[t,r,l])e[0]<p&&(p=e[0]),e[1]<m&&(m=e[1]),e[2]<h&&(h=e[2]),e[0]>g&&(g=e[0]),e[1]>_&&(_=e[1]),e[2]>v&&(v=e[2]),y[b++]=e[0],y[b++]=e[1],y[b++]=e[2]}let x=Math.hypot(i,a,o)||1,S=[i/x,a/x,o/x],C=f>0?[c/f,u/f,d/f]:[0,0,0];l.push({__nativeFace:!0,faceId:e,originId:OC(t,r[0]??0),normal:S,center:C,area:f,min:[p,m,h],max:[g,_,v],tris:y})}return l}function AC(e){return!!e&&typeof e==`object`&&e.__nativeFace===!0}var jC=Math.cos(45*Math.PI/180),MC=(e,t)=>e<t?e*1e9+t:t*1e9+e,NC=(e,t)=>e<t?`${e},${t}`:`${t},${e}`;function PC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID,o=n.length/3;if(!a)return[];let s=e=>{let t=e*i;return[r[t]??0,r[t+1]??0,r[t+2]??0]},c=e=>{let t=s(n[e*3]??0),r=s(n[e*3+1]??0),i=s(n[e*3+2]??0),a=r[0]-t[0],o=r[1]-t[1],c=r[2]-t[2],l=i[0]-t[0],u=i[1]-t[1],d=i[2]-t[2],f=o*d-c*u,p=c*l-a*d,m=a*u-o*l,h=Math.hypot(f,p,m)||1;return[f/h,p/h,m/h]},l=new Map;for(let e=0;e<o;e++){let t=n[e*3]??0,r=n[e*3+1]??0,i=n[e*3+2]??0,o=a[e]??e,s=c(e);for(let[e,n]of[[t,r],[r,i],[i,t]]){let t=MC(e,n),r=l.get(t);r||(r={v:[e,n],faces:[],nrm:[]},l.set(t,r)),r.faces.push(o),r.nrm.push(s)}}let u=new Map;for(let{v:e,faces:t,nrm:n}of l.values()){if(t.length!==2)continue;let[r,i]=t;if(r===i)continue;let[a,o]=n;if(a[0]*o[0]+a[1]*o[1]+a[2]*o[2]>jC)continue;let s=NC(r,i),c=u.get(s);c||(c={faces:r<i?[r,i]:[i,r],segs:[]},u.set(s,c)),c.segs.push(e)}let d=[];for(let{faces:e,segs:t}of u.values())for(let n of FC(t))d.push(IC(e,n,s));return d}function FC(e){let t=new Map,n=new Set,r=(e,n)=>{let r=t.get(e);r||(r=[],t.set(e,r)),r.push(n)};e.forEach(([e,t],n)=>{r(e,n),r(t,n)});let i=(t,n)=>{let r=e[t]??[n,n];return r[0]===n?r[1]:r[0]},a=[];for(let r=0;r<e.length;r++){if(n.has(r))continue;n.add(r);let o=e[r]??[0,0],s=[o[0],o[1]];for(let r=0;r<e.length;r++){let e=s[s.length-1]??0,r=(t.get(e)??[]).find(e=>!n.has(e));if(r===void 0)break;n.add(r),s.push(i(r,e))}for(let r=0;r<e.length;r++){let e=s[0]??0,r=(t.get(e)??[]).find(e=>!n.has(e));if(r===void 0)break;n.add(r),s.unshift(i(r,e))}a.push(s)}return a}function IC(e,t,n){let r=t.length,i=new Float32Array(r*3),a=new Float32Array(r),o=1/0,s=1/0,c=1/0,l=-1/0,u=-1/0,d=-1/0,f=0,p=null;for(let e=0;e<r;e++){let r=n(t[e]??0);i[e*3]=r[0],i[e*3+1]=r[1],i[e*3+2]=r[2],p&&(f+=Math.hypot(r[0]-p[0],r[1]-p[1],r[2]-p[2])),a[e]=f,p=r,r[0]<o&&(o=r[0]),r[1]<s&&(s=r[1]),r[2]<c&&(c=r[2]),r[0]>l&&(l=r[0]),r[1]>u&&(u=r[1]),r[2]>d&&(d=r[2])}return{__nativeEdge:!0,faces:e,pts:i,arc:a,length:f,min:[o,s,c],max:[l,u,d],curveType:LC(i)?`LINE`:`CIRCLE`}}function LC(e){let t=e.length/3;if(t<=2)return!0;let n=e[0]??0,r=e[1]??0,i=e[2]??0,a=e[(t-1)*3]??0,o=e[(t-1)*3+1]??0,s=e[(t-1)*3+2]??0,c=a-n,l=o-r,u=s-i,d=Math.hypot(c,l,u)||1;c/=d,l/=d,u/=d;for(let a=1;a<t-1;a++){let t=(e[a*3]??0)-n,o=(e[a*3+1]??0)-r,s=(e[a*3+2]??0)-i,f=t*c+o*l+s*u,p=t-f*c,m=o-f*l,h=s-f*u;if(Math.hypot(p,m,h)>1e-6*Math.max(1,d))return!1}return!0}function RC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID;if(!a)return[];let o=n.length/3,s=new Map;for(let e=0;e<o;e++){let t=a[e]??e;for(let r=0;r<3;r++){let i=n[e*3+r]??0,a=s.get(i);a||(a=new Set,s.set(i,a)),a.add(t)}}let c=[];for(let[e,t]of s){if(t.size<3)continue;let n=e*i;c.push({__nativeVertex:!0,point:[r[n]??0,r[n+1]??0,r[n+2]??0]})}return c}function zC(e){return!!e&&typeof e==`object`&&e.__nativeVertex===!0}function BC(e){return!!e&&typeof e==`object`&&e.__nativeEdge===!0}function VC(e,t){let{pts:n,arc:r}=e,i=r.length;if(i===0)return[0,0,0];if(t<=0)return[n[0]??0,n[1]??0,n[2]??0];if(t>=e.length)return[n[(i-1)*3]??0,n[(i-1)*3+1]??0,n[(i-1)*3+2]??0];let a=1;for(;a<i&&(r[a]??0)<t;)a++;let o=r[a-1]??0,s=r[a]??o,c=s>o?(t-o)/(s-o):0,l=(a-1)*3,u=a*3;return[(n[l]??0)+((n[u]??0)-(n[l]??0))*c,(n[l+1]??0)+((n[u+1]??0)-(n[l+1]??0))*c,(n[l+2]??0)+((n[u+2]??0)-(n[l+2]??0))*c]}function HC(e,t){let{pts:n,arc:r}=e,i=r.length;if(i<2)return[1,0,0];let a=1;for(;a<i-1&&(r[a]??0)<t;)a++;let o=(a-1)*3,s=a*3,c=(n[s]??0)-(n[o]??0),l=(n[s+1]??0)-(n[o+1]??0),u=(n[s+2]??0)-(n[o+2]??0),d=Math.hypot(c,l,u)||1;return[c/d,l/d,u/d]}function UC(e,t){let n=Vy(e);if(!n)throw Error(`manifold: ${t} requires a manifold shape handle`);if(!n.node.replayable)throw Error(`manifold: ${t} unsupported; shape originates from a non-replayable op (raw mesh import or mesh boolean)`);let r=Wy(t),i=Gy.get(n.node);if(i!==void 0)return{occt:r,brep:i};let a=aC(n.node,r);return Gy.set(n.node,a),{occt:r,brep:a}}function WC(e){if(Vy(e))return`solid`;let{occt:t,brep:n}=UC(e,`shapeType`);return t.shapeType(n)}function GC(e,t){let n=Vy(e),r=Vy(t);return!n||!r?!1:n.manifold===r.manifold}function KC(e,t){if(!Vy(e))return 0;let{occt:n,brep:r}=UC(e,`hashCode`);return n.hashCode(r,t)}function qC(e){let t=Vy(e);return t?!B(t):!0}function JC(e,t){let n=Vy(e);if(!n)return[];if(t===`solid`)return[e];if(t===`vertex`){let e=B(n);return e&&typeof e.getMesh==`function`?RC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.point,max:e.point},parent:n.node,subType:`vertex`})):[]}if(t!==`edge`&&t!==`face`)return[];if(t===`face`){let e=B(n);if(e&&typeof e.getMesh==`function`)return kC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.min,max:e.max},parent:n.node,subType:`face`}))}if(t===`edge`){let e=B(n);if(e&&typeof e.getMesh==`function`)return PC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.min,max:e.max},parent:n.node,subType:`edge`}))}if(!n.node.replayable)return[];let r=Uy();if(!r)return[];let i=Gy.get(n.node)??(()=>{let e=aC(n.node,r);return Gy.set(n.node,e),e})();return r.iterShapes(i,t).map((e,i)=>({__manifoldSub:!0,index:i,box:r.boundingBox(e),occt:e,parent:n.node,subType:t}))}function YC(e){let{occt:t,brep:n}=UC(e,`edgeToFaceMap`);return t.edgeToFaceMap(n)}function XC(e,t){let{occt:n,brep:r}=UC(e,`adjacentFaces`);return n.adjacentFaces(r,t)}function ZC(e){return{iterShapes:JC,iterShapeList:(e,t)=>{Wy(`iterShapeList`).iterShapeList(e,t)},shapeType:WC,isSame:GC,isEqual:GC,downcast:e=>e,copyShape:e=>{let t=Vy(e);return t?z(By(B(t)),R(`translateShape`,{x:0,y:0,z:0},[t.node])):e},hashCode:KC,isNull:qC,shapeOrientation:e=>`forward`,edgeToFaceMap:YC,sharedEdges:(e,t)=>Wy(`sharedEdges`).sharedEdges(e,t),adjacentFaces:XC,sew:()=>{throw Error(`manifold: sew is unsupported on the mesh kernel; use a B-rep kernel`)}}}function QC(e){return B(e).getMesh()}function $C(e){return e.numProp&&e.numProp>=3?e.numProp:3}function ew(e){return Math.floor(e.vertProperties.length/$C(e))}function tw(e,t){let n=t*$C(e);return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function nw(e,t){let n=t*3;return[e.triVerts[n]??0,e.triVerts[n+1]??0,e.triVerts[n+2]??0]}function rw(e,t,n){let r=t[0]-e[0],i=t[1]-e[1],a=t[2]-e[2],o=n[0]-e[0],s=n[1]-e[1],c=n[2]-e[2],l=i*c-a*s,u=a*o-r*c,d=r*s-i*o,f=Math.hypot(l,u,d)||1;return[l/f,u/f,d/f]}function iw(e,t){let n=QC(e),r=Math.floor(n.triVerts.length/3);if(t){let e=new ArrayBuffer(84+r*50),t=new DataView(e);t.setUint32(80,r,!0);let i=84;for(let e=0;e<r;e++){let[r,a,o]=nw(n,e),s=tw(n,r),c=tw(n,a),l=tw(n,o),u=rw(s,c,l);t.setFloat32(i,u[0],!0),t.setFloat32(i+4,u[1],!0),t.setFloat32(i+8,u[2],!0),i+=12;for(let e of[s,c,l])t.setFloat32(i,e[0],!0),t.setFloat32(i+4,e[1],!0),t.setFloat32(i+8,e[2],!0),i+=12;t.setUint16(i,0,!0),i+=2}return e}let i=[`solid manifold`];for(let e=0;e<r;e++){let[t,r,a]=nw(n,e),o=tw(n,t),s=tw(n,r),c=tw(n,a),l=rw(o,s,c);i.push(` facet normal ${l[0]} ${l[1]} ${l[2]}`),i.push(` outer loop`);for(let e of[o,s,c])i.push(` vertex ${e[0]} ${e[1]} ${e[2]}`);i.push(` endloop`),i.push(` endfacet`)}return i.push(`endsolid manifold`),i.join(`
|
|
10
|
-
`)}function
|
|
11
|
-
`)).buffer}function
|
|
12
|
-
`)){let t=e.trim();if(t.startsWith(`v `)){let e=t.slice(2).trim().split(/\s+/);r.push(Number(e[0]),Number(e[1]),Number(e[2]))}else if(t.startsWith(`f `)){let e=t.slice(2).trim().split(/\s+/).map(e=>{let t=e.split(`/`)[0]??``,n=Number(t);return n>0?n-1:r.length/3+n});for(let t=1;t+1<e.length;t++)i.push(e[0]??0,e[t]??0,e[t+1]??0)}}return sw(e,{vertProperties:Float32Array.from(r),triVerts:Uint32Array.from(i)})}function lw(e,t){let n=new Uint8Array(t),r=new TextDecoder().decode(n.subarray(0,Math.min(n.length,80))).trimStart().toLowerCase().startsWith(`solid`)&&fw(n),i=[];if(r){let e=new TextDecoder().decode(n).match(/vertex\s+(\S+)\s+(\S+)\s+(\S+)/g)??[];for(let t of e){let e=t.trim().split(/\s+/);i.push(Number(e[1]),Number(e[2]),Number(e[3]))}}else{let e=new DataView(t),n=e.getUint32(80,!0),r=84;for(let t=0;t<n;t++){r+=12;for(let t=0;t<3;t++)i.push(e.getFloat32(r,!0),e.getFloat32(r+4,!0),e.getFloat32(r+8,!0)),r+=12;r+=2}}let a=dw(i);return sw(e,{vertProperties:Float32Array.from(a.vertices),triVerts:Uint32Array.from(a.indices)})}var uw=1e6;function dw(e){let t=[],n=[],r=new Map;for(let i=0;i+2<e.length;i+=3){let a=e[i]??0,o=e[i+1]??0,s=e[i+2]??0,c=`${Math.round(a*uw)},${Math.round(o*uw)},${Math.round(s*uw)}`,l=r.get(c);l===void 0&&(l=t.length/3,r.set(c,l),t.push(a,o,s)),n.push(l)}return{vertices:t,indices:n}}function fw(e){return e.length<84?!0:84+new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(80,!0)*50!==e.length}var pw=1e-6;function mw(e,t){let n=V(t);if(n.replayable)return aC(n,e)}function hw(e,t){let n=QC(t),r=Math.floor(n.triVerts.length/3),i=[];for(let t=0;t<r;t++){let[r,a,o]=nw(n,t),s=e.buildTriFace(tw(n,r),tw(n,a),tw(n,o));s&&i.push(s)}if(i.length===0)throw Error(`manifold: cannot export — shape has no triangles to facet`);return e.sewAndSolidify(i,pw)}function gw(e){let t=Wy(`B-rep export`),n=mw(t,e);return n===void 0?(console.warn(`manifold: exact B-rep unavailable (non-replayable op-graph); exporting faceted approximation`),{occt:t,brep:hw(t,e)}):{occt:t,brep:n}}function _w(e,t,n,r){let i=t.mesh(n,{tolerance:.01,angularTolerance:.5});return sw(e,{vertProperties:Float32Array.from(i.vertices),triVerts:Uint32Array.from(i.triangles)},r)}var vw=1179937895,yw=2,bw=1313821514,xw=5130562,Sw=5126,Cw=5125,ww=5123,Tw=5121,Ew=34962,Dw=34963,Ow=4;function kw(e){return e+3&-4}function Aw(e){let t=QC(e),n=t.numProp&&t.numProp>=3?t.numProp:3,r=Math.floor(t.vertProperties.length/n),i=t.triVerts.length,a=new Float32Array(r*3),o=1/0,s=1/0,c=1/0,l=-1/0,u=-1/0,d=-1/0;for(let e=0;e<r;e++){let r=t.vertProperties[e*n]??0,i=t.vertProperties[e*n+1]??0,f=t.vertProperties[e*n+2]??0;a[e*3]=r,a[e*3+1]=i,a[e*3+2]=f,r<o&&(o=r),i<s&&(s=i),f<c&&(c=f),r>l&&(l=r),i>u&&(u=i),f>d&&(d=f)}r===0&&(o=s=c=l=u=d=0);let f=Uint32Array.from(t.triVerts),p=a.byteLength,m=kw(p),h=m+f.byteLength,g={asset:{version:`2.0`,generator:`brepjs manifold kernel`},scene:0,scenes:[{nodes:[0]}],nodes:[{mesh:0}],meshes:[{primitives:[{attributes:{POSITION:0},indices:1,mode:Ow}]}],accessors:[{bufferView:0,componentType:Sw,count:r,type:`VEC3`,min:[o,s,c],max:[l,u,d]},{bufferView:1,componentType:Cw,count:i,type:`SCALAR`}],bufferViews:[{buffer:0,byteOffset:0,byteLength:p,target:Ew},{buffer:0,byteOffset:m,byteLength:f.byteLength,target:Dw}],buffers:[{byteLength:h}]},_=new TextEncoder().encode(JSON.stringify(g)),v=kw(_.length),y=kw(h),b=20+v+8+y,x=new ArrayBuffer(b),S=new DataView(x),C=new Uint8Array(x);S.setUint32(0,vw,!0),S.setUint32(4,yw,!0),S.setUint32(8,b,!0);let w=12;S.setUint32(w,v,!0),S.setUint32(w+4,bw,!0),w+=8,C.set(_,w);for(let e=_.length;e<v;e++)C[w+e]=32;return w+=v,S.setUint32(w,y,!0),S.setUint32(w+4,xw,!0),w+=8,C.set(new Uint8Array(a.buffer,a.byteOffset,p),w),C.set(new Uint8Array(f.buffer,f.byteOffset,f.byteLength),w+m),x}function jw(e,t){let n=new DataView(t);if(n.getUint32(0,!0)!==vw)throw Error(`manifold: importGLB — not a binary glTF (bad magic)`);let r=n.getUint32(8,!0),i,a,o=12;for(;o<r;){let e=n.getUint32(o,!0),r=n.getUint32(o+4,!0),s=new Uint8Array(t,o+8,e);r===bw?i=JSON.parse(new TextDecoder().decode(s)):r===xw&&(a=s),o+=8+e}if(!i||typeof i!=`object`||!a)throw Error(`manifold: importGLB — missing JSON or BIN chunk`);let s=i,c=s.meshes?.[0]?.primitives[0],l=s.accessors??[],u=s.bufferViews??[];if(!c||c.attributes.POSITION===void 0)throw Error(`manifold: importGLB — no POSITION attribute`);let d=l[c.attributes.POSITION];if(!d)throw Error(`manifold: importGLB — invalid POSITION accessor`);let f=u[d.bufferView];if(!f)throw Error(`manifold: importGLB — invalid POSITION bufferView`);let p=new Float32Array(a.buffer.slice(a.byteOffset+(f.byteOffset??0),a.byteOffset+(f.byteOffset??0)+d.count*3*4)),m;if(c.indices!==void 0){let e=l[c.indices];if(!e)throw Error(`manifold: importGLB — invalid indices accessor`);let t=u[e.bufferView];if(!t)throw Error(`manifold: importGLB — invalid indices bufferView`);let n=e.componentType===Cw?4:e.componentType===ww?2:+(e.componentType===Tw);if(n===0)throw Error(`manifold: importGLB — unsupported index component type ${e.componentType}`);let r=a.byteOffset+(t.byteOffset??0),i=new DataView(a.buffer,r,e.count*n);m=new Uint32Array(e.count);for(let t=0;t<e.count;t++){let e=t*n;m[t]=n===4?i.getUint32(e,!0):n===2?i.getUint16(e,!0):i.getUint8(e)}}else m=Uint32Array.from({length:d.count},(e,t)=>t);return sw(e,{vertProperties:p,triVerts:m},`importGLB`)}function Mw(e){return{exportSTL:(e,t)=>iw(e,t),exportOBJ:e=>aw(e),exportPLY:e=>ow(e),importSTL:t=>lw(e,typeof t==`string`?new TextEncoder().encode(t).buffer:t),importOBJ:t=>cw(e,t),exportSTEP:e=>Wy(`exportSTEP`).exportSTEP(e.map(e=>gw(e).brep)),exportIGES:e=>Wy(`exportIGES`).exportIGES(e.map(e=>gw(e).brep)),toBREP:e=>{let{occt:t,brep:n}=gw(e);return t.toBREP(n)},exportSTEPAssembly:(e,t)=>{let n=Wy(`exportSTEPAssembly`),r=e.map(e=>{let t={shape:gw(e.shape).brep,name:e.name};return e.color===void 0?t:{...t,color:e.color}});return n.exportSTEPAssembly(r,t)},createXCAFDocument:e=>{let t=Wy(`createXCAFDocument`),n=e.map(e=>{let t={shape:gw(e.shape).brep,name:e.name};return e.color===void 0?t:{...t,color:e.color}});return t.createXCAFDocument(n)},writeXCAFToSTEP:(e,t)=>Wy(`writeXCAFToSTEP`).writeXCAFToSTEP(e,t),exportSTEPConfigured:(e,t)=>{let n=Wy(`exportSTEPConfigured`),r=e.map(e=>{let t={shape:gw(e.shape).brep},n=e.name===void 0?t:{...t,name:e.name};return e.color===void 0?n:{...n,color:e.color}});return n.exportSTEPConfigured(r,t)},importSTEP:t=>{let n=Wy(`importSTEP`);return n.importSTEP(t).map(t=>_w(e,n,t,`importSTEP`))},importIGES:t=>{let n=Wy(`importIGES`);return n.importIGES(t).map(t=>_w(e,n,t,`importIGES`))},fromBREP:t=>{let n=Wy(`fromBREP`);return _w(e,n,n.fromBREP(t),`fromBREP`)},exportGLB:e=>Aw(e),importGLB:t=>jw(e,t),export3MF:()=>{throw Error(`manifold: 3MF IO is unsupported on the mesh kernel; export GLB/STL/OBJ or use a B-rep kernel`)},import3MF:()=>{throw Error(`manifold: 3MF IO is unsupported on the mesh kernel; export GLB/STL/OBJ or use a B-rep kernel`)}}}function Nw(e){return B(e).getMesh()}function Pw(e,t){let n=t*(e.numProp&&e.numProp>=3?e.numProp:3);return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function Fw(e,t){let n=e;if(n&&n.__manifoldSub&&n.occt){let e=Uy();if(!e)throw new c(`manifold: sub-shape geometry query requires a registered occt kernel`);return t(n.occt,e)}let r=Vy(e);if(!r)throw Error(`manifold: exact geometry query requires a manifold shape handle`);let i=Uy();if(!i)throw new c(`manifold: exact geometry query unsupported on manifold kernel; no B-rep kernel registered`);if(!r.node.replayable)throw Error(`manifold: exact geometry query unsupported; shape originates from a non-replayable op (raw mesh import or mesh boolean)`);let a=Gy.get(r.node);return a===void 0&&(a=aC(r.node,i),Gy.set(r.node,a)),t(a,i)}function Iw(e){let t=Vy(e);if(!t)return;let n=t.node;return n.op===`profileEdge`?n.params?.curve:void 0}function Lw(e){return{curveType:e=>{let t=Iw(e);return t?jb(t):BC(e)?e.curveType:Fw(e,(e,t)=>t.curveType(e))},curveParameters:e=>{let t=Iw(e);if(t){let e=Mb(t);return[e.first,e.last]}return BC(e)?[0,e.length]:Fw(e,(e,t)=>t.curveParameters(e))},curvePointAtParam:(e,t)=>{let n=Iw(e);return n?Nb(n,t):BC(e)?VC(e,t):Fw(e,(e,n)=>n.curvePointAtParam(e,t))},curveTangent:(e,t)=>{let n=Iw(e);return n?{point:Nb(n,t),tangent:Pb(n,t)}:BC(e)?{point:VC(e,t),tangent:HC(e,t)}:Fw(e,(e,n)=>n.curveTangent(e,t))},curveIsClosed:e=>{let t=Iw(e);return t?Ib(t):Fw(e,(e,t)=>t.curveIsClosed(e))},curveIsPeriodic:e=>{let t=Iw(e);return t?Lb(t):Fw(e,(e,t)=>t.curveIsPeriodic(e))},curvePeriod:e=>{let t=Iw(e);return t?Rb(t):Fw(e,(e,t)=>t.curvePeriod(e))},interpolatePoints:(e,t)=>Wy(`interpolatePoints`).interpolatePoints(e,t),approximatePoints:(e,t)=>Wy(`approximatePoints`).approximatePoints(e,t),curveDegreeElevate:(e,t)=>Fw(e,(e,n)=>n.curveDegreeElevate(e,t)),curveKnotInsert:(e,t,n)=>Fw(e,(e,r)=>r.curveKnotInsert(e,t,n)),curveKnotRemove:(e,t,n)=>Fw(e,(e,r)=>r.curveKnotRemove(e,t,n)),curveSplit:(e,t)=>Fw(e,(e,n)=>n.curveSplit(e,t)),createCurveAdaptor:e=>Fw(e,(e,t)=>t.createCurveAdaptor(e)),getBezierPenultimatePole:e=>Fw(e,(e,t)=>t.getBezierPenultimatePole(e)),getNurbsCurveData:e=>Fw(e,(e,t)=>t.getNurbsCurveData?.(e)??null),vertexPosition:e=>zC(e)?e.point:Vy(e)?Pw(Nw(e),0):Fw(e,(e,t)=>t.vertexPosition(e)),surfaceType:e=>{if(AC(e))return`plane`;let t=Vy(e);return t&&t.node.op===`profileFace`?`plane`:Fw(e,(e,t)=>t.surfaceType(e))},uvBounds:e=>AC(e)?{uMin:0,uMax:1,vMin:0,vMax:1}:Fw(e,(e,t)=>t.uvBounds(e)),outerWire:e=>Fw(e,(e,t)=>t.outerWire(e)),surfaceNormal:(e,t,n)=>AC(e)?e.normal:Fw(e,(e,r)=>r.surfaceNormal(e,t,n)),pointOnSurface:(e,t,n)=>Fw(e,(e,r)=>r.pointOnSurface(e,t,n)),uvFromPoint:(e,t)=>Fw(e,(e,n)=>n.uvFromPoint(e,t)),projectPointOnFace:(e,t)=>Fw(e,(e,n)=>n.projectPointOnFace(e,t)),classifyPointOnFace:(e,t,n,r)=>Fw(e,(e,i)=>i.classifyPointOnFace(e,t,n,r)),classifyPointRobust:(e,t,n)=>Fw(e,(e,r)=>r.classifyPointRobust(e,t,n)),classifyPointWinding:(e,t,n)=>Fw(e,(e,r)=>r.classifyPointWinding(e,t,n)),approximateSurfaceLspia:(e,t,n,r,i,a,o,s,c)=>Wy(`approximateSurfaceLspia`).approximateSurfaceLspia(e,t,n,r,i,a,o,s,c),untrimFace:(e,t,n)=>Fw(e,(e,r)=>r.untrimFace(e,t,n)),getSurfaceCylinderData:e=>Fw(e,(e,t)=>t.getSurfaceCylinderData(e)),getSurfaceAxis:e=>Fw(e,(e,t)=>t.getSurfaceAxis(e)),reverseSurfaceU:e=>Wy(`reverseSurfaceU`).reverseSurfaceU(e),detectSmallFeatures:(e,t,n)=>Fw(e,(e,r)=>r.detectSmallFeatures(e,t,n)),recognizeFeatures:(e,t)=>Fw(e,(e,n)=>n.recognizeFeatures(e,t)),projectEdges:(e,t,n,r)=>Fw(e,(e,i)=>i.projectEdges(e,t,n,r)),getNurbsSurfaceData:e=>Fw(e,(e,t)=>t.getNurbsSurfaceData?.(e)??null)}}var Rw={hasErrors:!1,hasWarnings:!1,messages:[]};function zw(){return{modified:new Map,generated:new Map,deleted:new Set}}function Bw(e){return{shape:e,evolution:zw()}}function Vw(e){return{shape:e,evolution:zw(),diagnostics:Rw}}function Hw(e){let t=wb(e),n=nb(e),r=kS(e);return{translateWithHistory:(e,n,r,i)=>Bw(t.translate(e,n,r,i)),rotateWithHistory:(e,n,r,i,a,o)=>Bw(t.rotate(e,n,a,o)),mirrorWithHistory:(e,n,r)=>Bw(t.mirror(e,n,r)),scaleWithHistory:(e,n,r)=>Bw(t.scale(e,n,r)),generalTransformWithHistory:(e,n,r,i)=>Bw(t.generalTransform(e,n,r,i)),fuseWithHistory:(e,t,r,i,a)=>Vw(n.fuse(e,t,a)),cutWithHistory:(e,t,r,i,a)=>Vw(n.cut(e,t,a)),intersectWithHistory:(e,t,r,i,a)=>Vw(n.intersect(e,t,a)),filletWithHistory:(e,t,n)=>Bw(r.fillet(e,t,n)),chamferWithHistory:(e,t,n)=>Bw(r.chamfer(e,t,n)),shellWithHistory:(e,t,n,i,a,o)=>Bw(r.shell(e,t,n,o)),thickenWithHistory:(e,t)=>Bw(r.thicken(e,t)),offsetWithHistory:(e,t,n,i,a)=>Bw(r.offset(e,t,a)),draftWithHistory:(e,t,n,i,a)=>Bw(r.draft(e,t,n,i,a)),applyComposedTransformWithHistory:(e,n)=>Bw(t.transform(e,n))}}function Uw(e){let t=e?.manifold;if(!t||typeof t.isEmpty==`function`&&t.isEmpty())return!1;if(typeof t.status==`function`){let e=t.status(),n=typeof e==`number`?e:Number(e?.value??e);if(!Number.isNaN(n)&&n!==0)return!1}return!0}function Ww(e){return{isValid:e=>Uw(e),isValidStrict:e=>Uw(e),healSolid:e=>Uw(e)?e:null,healFace:e=>e,healWire:e=>e,mergeCoincidentVertices:()=>0,removeDegenerateEdges:()=>0,fixFaceOrientations:()=>0,fixShape:e=>e,fixSelfIntersection:e=>e}}var Gw=.004;function Kw(e){return!!e&&typeof e==`object`&&e.__nativeC2d===!0}function qw(e,t){return{__nativeC2d:!0,k:`line`,p1:e,p2:t}}function Jw(e,t,n,r,i){return{__nativeC2d:!0,k:`conic`,c:e,u:t,v:n,a0:r,a1:i}}function Yw(e,[t,n]){return[e.a*t+e.b*n+e.tx,e.c*t+e.d*n+e.ty]}function Xw(e,[t,n]){return[e.a*t+e.b*n,e.c*t+e.d*n]}function Zw(e,t){return{a:e.a*t.a+e.b*t.c,b:e.a*t.b+e.b*t.d,c:e.c*t.a+e.d*t.c,d:e.c*t.b+e.d*t.d,tx:e.a*t.tx+e.b*t.ty+e.tx,ty:e.c*t.tx+e.d*t.ty+e.ty}}function Qw(e,t){return e.k===`line`?qw(Yw(t,e.p1),Yw(t,e.p2)):e.k===`bezier`?{__nativeC2d:!0,k:`bezier`,pts:e.pts.map(e=>Yw(t,e))}:Jw(Yw(t,e.c),Xw(t,e.u),Xw(t,e.v),e.a0,e.a1)}function $w(e,t){let n=e.map(e=>[e[0],e[1]]);for(let e=1;e<n.length;e++)for(let r=0;r<n.length-e;r++){let e=n[r]??[0,0],i=n[r+1]??[0,0];n[r]=[e[0]*(1-t)+i[0]*t,e[1]*(1-t)+i[1]*t]}return n[0]??[0,0]}function eT(e,t){let n=Math.cos(t),r=Math.sin(t);return[e.c[0]+e.u[0]*n+e.v[0]*r,e.c[1]+e.u[1]*n+e.v[1]*r]}function tT(e,t){let n=e.length-1;if(n<1)return[0,0];let r=[];for(let t=0;t<n;t++){let i=e[t]??[0,0],a=e[t+1]??[0,0];r.push([n*(a[0]-i[0]),n*(a[1]-i[1])])}return $w(r,t)}function nT(e){let t=Math.abs(e.a1-e.a0),n=Math.hypot(e.u[0],e.u[1]),r=Math.hypot(e.v[0],e.v[1]),i=Math.max(n,r);if(i<=Gw)return Math.max(2,Math.ceil(t/(2*Math.PI)*8));let a=2*Math.acos(Math.max(-1,1-Gw/i));return Math.max(2,Math.ceil(t/a))}function rT(e){if(e.k===`line`)return[e.p1,e.p2];if(e.k===`bezier`){let t=[];for(let n=0;n<=24;n++)t.push($w(e.pts,n/24));return t}let t=e.a1-e.a0,n=nT(e),r=[];for(let i=0;i<=n;i++){let a=e.a0+t*i/n,o=Math.cos(a),s=Math.sin(a);r.push([e.c[0]+e.u[0]*o+e.v[0]*s,e.c[1]+e.u[1]*o+e.v[1]*s])}return r}function iT(e,t,n){let r=e[0],i=e[1],a=t[0],o=t[1],s=n[0],c=n[1],l=2*(r*(o-c)+a*(c-i)+s*(i-o));if(Math.abs(l)<1e-12)return qw(e,n);let u=((r*r+i*i)*(o-c)+(a*a+o*o)*(c-i)+(s*s+c*c)*(i-o))/l,d=((r*r+i*i)*(s-a)+(a*a+o*o)*(r-s)+(s*s+c*c)*(a-r))/l,f=[u,d],p=Math.hypot(r-u,i-d),m=e=>Math.atan2(e[1]-d,e[0]-u),h=m(e),g=m(t),_=m(n),v=e=>(e%(2*Math.PI)+2*Math.PI)%(2*Math.PI),y=v(g-h),b=v(_-h);return _=y<=b?h+b:h-v(h-_),Jw(f,[p,0],[0,p],h,_)}function aT(e,t){let n={delete:()=>{},isEmpty:()=>!1};function r(e,...n){let r=t(),i=r?.[e];if(!i)throw Error(`manifold 2D: ${e} needs an OCCT kernel (none registered)`);return i.call(r,...n)}let i=e=>e;function a(e){let n=t();if(!n)throw Error(`manifold 2D: ${e} needs an OCCT kernel (none registered)`);return n}function o(e){if(!Kw(e))return e;let t=a(`toOcct`),n=i(e);if(n.k===`line`)return t.makeLine2d(n.p1[0],n.p1[1],n.p2[0],n.p2[1]);if(n.k===`bezier`)return t.makeBezier2d(n.pts);let r=Math.hypot(n.u[0],n.u[1]),o=Math.hypot(n.v[0],n.v[1]),s=Math.abs(Math.abs(n.a1-n.a0)-2*Math.PI)<1e-9,c=n.u[0]*n.v[1]-n.u[1]*n.v[0]>=0;if(Math.abs(r-o)<1e-9*Math.max(1,r)){if(s)return t.makeCircle2d(n.c[0],n.c[1],r,c);let e=eT(n,n.a0),i=eT(n,(n.a0+n.a1)/2),a=eT(n,n.a1);return t.makeArc2dThreePoints(e[0],e[1],i[0],i[1],a[0],a[1])}let l=n.u[0]*n.v[0]+n.u[1]*n.v[1];if(Math.abs(l)<1e-9*Math.max(1,r*o)){let e=n.u[0]/r,i=n.u[1]/r;return s?t.makeEllipse2d(n.c[0],n.c[1],r,o,e,i,c):t.makeEllipseArc2d(n.c[0],n.c[1],r,o,n.a0,n.a1,e,i,c)}return t.makeBSpline2d(rT(n).map(e=>[e[0],e[1]]))}let s={createPoint2d:(e,t)=>({x:e,y:t}),createDirection2d:(e,t)=>({x:e,y:t}),createVector2d:(e,t)=>({x:e,y:t}),createAxis2d:(e,t,n,r)=>({px:e,py:t,dx:n,dy:r}),wrapCurve2dHandle:e=>e,createCurve2dAdaptor:e=>e,makeLine2d:(e,t,n,r)=>qw([e,t],[n,r]),makeCircle2d:(e,t,n,r=!0)=>Jw([e,t],[n,0],r?[0,n]:[0,-n],0,2*Math.PI),makeArc2dThreePoints:(e,t,n,r,i,a)=>iT([e,t],[n,r],[i,a]),makeArc2dTangent:(e,t,n,r,i,a)=>{let o=Math.hypot(n,r)||1,s=-r/o,c=n/o,l=[i-e,a-t],u=s*l[0]+c*l[1];if(Math.abs(u)<1e-12)return qw([e,t],[i,a]);let d=(l[0]*l[0]+l[1]*l[1])/(2*u),f=e+s*d,p=t+c*d,m=Math.hypot(e-f,t-p),h=Math.atan2(t-p,e-f),g=Math.atan2(a-p,i-f);s*n+c*r;let _=e=>(e%(2*Math.PI)+2*Math.PI)%(2*Math.PI),v=[-(t-p),e-f];return g=v[0]*n+v[1]*r>=0?h+_(g-h):h-_(h-g),Jw([f,p],[m,0],[0,m],h,g)},makeEllipse2d:(e,t,n,r,i=1,a=0,o=!0)=>{let s=Math.hypot(i,a)||1,c=i/s*n,l=a/s*n,u=-a/s*r*(o?1:-1),d=i/s*r*(o?1:-1);return Jw([e,t],[c,l],[u,d],0,2*Math.PI)},makeEllipseArc2d:(e,t,n,r,i,a,o=1,s=0,c=!0)=>{let l=Math.hypot(o,s)||1,u=o/l*n,d=s/l*n,f=-s/l*r*(c?1:-1),p=o/l*r*(c?1:-1);return Jw([e,t],[u,d],[f,p],i,a)},makeBezier2d:e=>({__nativeC2d:!0,k:`bezier`,pts:e.map(e=>[e[0],e[1]])}),evaluateCurve2d:(e,t)=>{let n=i(e);if(n.k===`line`){let e=n.p2[0]-n.p1[0],r=n.p2[1]-n.p1[1],i=Math.hypot(e,r)||1;return[n.p1[0]+e*t/i,n.p1[1]+r*t/i]}return n.k===`bezier`?$w(n.pts,t):[n.c[0]+n.u[0]*Math.cos(t)+n.v[0]*Math.sin(t),n.c[1]+n.u[1]*Math.cos(t)+n.v[1]*Math.sin(t)]},evaluateCurve2dD1:(e,t)=>{let n=i(e);if(n.k===`line`){let e=n.p2[0]-n.p1[0],r=n.p2[1]-n.p1[1],i=Math.hypot(e,r)||1;return{point:[n.p1[0]+e*t/i,n.p1[1]+r*t/i],tangent:[e/i,r/i]}}if(n.k===`bezier`)return{point:$w(n.pts,t),tangent:tT(n.pts,t)};let r=Math.cos(t),a=Math.sin(t);return{point:[n.c[0]+n.u[0]*r+n.v[0]*a,n.c[1]+n.u[1]*r+n.v[1]*a],tangent:[-n.u[0]*a+n.v[0]*r,-n.u[1]*a+n.v[1]*r]}},getCurve2dBounds:e=>{let t=i(e);return t.k===`conic`?{first:t.a0,last:t.a1}:t.k===`line`?{first:0,last:Math.hypot(t.p2[0]-t.p1[0],t.p2[1]-t.p1[1])}:{first:0,last:1}},getCurve2dType:e=>{let t=i(e);return t.k===`line`?`LINE`:t.k===`bezier`?`BEZIER`:`CIRCLE`},reverseCurve2d:e=>{let t=i(e);if(t.k===`line`){let e=t.p1;t.p1=t.p2,t.p2=e}else if(t.k===`bezier`)t.pts.reverse();else{let e=t.a0;t.a0=t.a1,t.a1=e}},copyCurve2d:e=>structuredClone(i(e)),trimCurve2d:(e,t,n)=>{let r=i(e);if(r.k===`conic`)return Jw(r.c,r.u,r.v,t,n);if(r.k===`line`){let e=r.p2[0]-r.p1[0],i=r.p2[1]-r.p1[1],a=Math.hypot(e,i)||1;return qw([r.p1[0]+e*t/a,r.p1[1]+i*t/a],[r.p1[0]+e*n/a,r.p1[1]+i*n/a])}return structuredClone(r)},createIdentityGTrsf2d:()=>({a:1,b:0,c:0,d:1,tx:0,ty:0}),createTranslationGTrsf2d:(e,t)=>({a:1,b:0,c:0,d:1,tx:e,ty:t}),createRotationGTrsf2d:(e,t,n)=>{let r=Math.cos(e),i=Math.sin(e);return{a:r,b:-i,c:i,d:r,tx:t-(r*t-i*n),ty:n-(i*t+r*n)}},createScaleGTrsf2d:(e,t,n)=>({a:e,b:0,c:0,d:e,tx:t-e*t,ty:n-e*n}),createMirrorGTrsf2d:(e,t,n,r=0,i=0,a=1,o=0)=>{if(n===`point`)return{a:-1,b:0,c:0,d:-1,tx:2*e,ty:2*t};let s=Math.hypot(a,o)||1,c=a/s,l=o/s,u=c*c-l*l,d=2*c*l;return{a:u,b:d,c:d,d:-u,tx:r-(u*r+d*i),ty:i-(d*r-u*i)}},createAffinityGTrsf2d:(e,t,n,r,i)=>{let a=Math.hypot(n,r)||1,o=n/a,s=r/a,c=-s,l=o,u=o*o+i*c*c,d=o*s+i*c*l,f=s*o+i*l*c,p=s*s+i*l*l;return{a:u,b:d,c:f,d:p,tx:e-(u*e+d*t),ty:t-(f*e+p*t)}},setGTrsf2dTranslationPart:(e,t,n)=>{let r=e;r.tx=t,r.ty=n},multiplyGTrsf2d:(e,t)=>{let n=Zw(e,t);Object.assign(e,n)},transformCurve2dGeneral:(e,t)=>Qw(i(e),t),translateCurve2d:(e,t,n)=>Qw(i(e),{a:1,b:0,c:0,d:1,tx:t,ty:n}),rotateCurve2d:(e,t,n,r)=>{let a=Math.cos(t),o=Math.sin(t);return Qw(i(e),{a,b:-o,c:o,d:a,tx:n-(a*n-o*r),ty:r-(o*n+a*r)})},scaleCurve2d:(e,t,n,r)=>Qw(i(e),{a:t,b:0,c:0,d:t,tx:n-t*n,ty:r-t*r}),mirrorCurve2dAtPoint:(e,t,n)=>Qw(i(e),{a:-1,b:0,c:0,d:-1,tx:2*t,ty:2*n}),mirrorCurve2dAcrossAxis:(e,t,n,r,a)=>{let o=Math.hypot(r,a)||1,s=r/o,c=a/o,l=s*s-c*c,u=2*s*c;return Qw(i(e),{a:l,b:u,c:u,d:-l,tx:t-(l*t+u*n),ty:n-(u*t-l*n)})},affinityTransform2d:(e,t,n,r,a,o)=>{let s=Math.hypot(r,a)||1,c=r/s,l=a/s,u=-l,d=c,f=c*c+o*u*u,p=c*l+o*u*d,m=l*c+o*d*u,h=l*l+o*d*d;return Qw(i(e),{a:f,b:p,c:m,d:h,tx:t-(f*t+p*n),ty:n-(m*t+h*n)})},createBoundingBox2d:()=>({min:[1/0,1/0],max:[-1/0,-1/0]}),addCurveToBBox2d:(e,t)=>{let n=e,r;if(Kw(t))r=rT(i(t));else{let e=a(`addCurveToBBox2d`),{first:n,last:i}=e.getCurve2dBounds(t);r=[];for(let a=0;a<=32;a++)r.push(e.evaluateCurve2d(t,n+(i-n)*a/32))}for(let[e,t]of r)e<n.min[0]&&(n.min[0]=e),t<n.min[1]&&(n.min[1]=t),e>n.max[0]&&(n.max[0]=e),t>n.max[1]&&(n.max[1]=t)},getBBox2dBounds:e=>{let t=e;return{xMin:t.min[0],yMin:t.min[1],xMax:t.max[0],yMax:t.max[1]}},mergeBBox2d:(e,t)=>{let n=e,r=t;n.min[0]=Math.min(n.min[0],r.min[0]),n.min[1]=Math.min(n.min[1],r.min[1]),n.max[0]=Math.max(n.max[0],r.max[0]),n.max[1]=Math.max(n.max[1],r.max[1])},isBBox2dOut:(e,t)=>{let n=e,r=t;return n.max[0]<r.min[0]||n.min[0]>r.max[0]||n.max[1]<r.min[1]||n.min[1]>r.max[1]},isBBox2dOutPoint:(e,t,n)=>{let r=e;return t<r.min[0]||t>r.max[0]||n<r.min[1]||n>r.max[1]},getCurve2dCircleData:e=>{let t=i(e);if(t.k!==`conic`)return null;let n=Math.hypot(t.u[0],t.u[1]),r=Math.hypot(t.v[0],t.v[1]);return Math.abs(n-r)>1e-6?null:{cx:t.c[0],cy:t.c[1],radius:n,isDirect:!0}},liftCurve2dToPlane:(e,t,r,a)=>{let o=r[0],s=r[1],c=r[2],l=a[0],u=a[1],d=a[2],f=s*d-c*u,p=c*l-o*d,m=o*u-s*l,h=rT(i(e)).map(([e,n])=>[t[0]+l*e+f*n,t[1]+u*e+p*n,t[2]+d*e+m*n]);return z(n,R(`profileEdge`,{pts:h},[]))},makeBSpline2d:(e,t)=>a(`makeBSpline2d`).makeBSpline2d(e,t),offsetCurve2d:(e,t)=>a(`offsetCurve2d`).offsetCurve2d(o(e),t),intersectCurves2d:(e,t,n)=>a(`intersectCurves2d`).intersectCurves2d(o(e),o(t),n),projectPointOnCurve2d:(e,t,n)=>a(`projectPointOnCurve2d`).projectPointOnCurve2d(o(e),t,n),distanceBetweenCurves2d:(e,t,n,r,i,s)=>a(`distanceBetweenCurves2d`).distanceBetweenCurves2d(o(e),o(t),n,r,i,s),approximateCurve2dAsBSpline:(e,t,n,r)=>a(`approximateCurve2dAsBSpline`).approximateCurve2dAsBSpline(o(e),t,n,r),decomposeBSpline2dToBeziers:e=>a(`decomposeBSpline2dToBeziers`).decomposeBSpline2dToBeziers(o(e)),serializeCurve2d:e=>a(`serializeCurve2d`).serializeCurve2d(o(e)),deserializeCurve2d:e=>a(`deserializeCurve2d`).deserializeCurve2d(e),splitCurve2d:(e,t)=>a(`splitCurve2d`).splitCurve2d(o(e),t),getCurve2dEllipseData:e=>a(`getCurve2dEllipseData`).getCurve2dEllipseData(o(e)),getCurve2dBezierPoles:e=>a(`getCurve2dBezierPoles`).getCurve2dBezierPoles(o(e)),getCurve2dBezierDegree:e=>a(`getCurve2dBezierDegree`).getCurve2dBezierDegree(o(e)),getCurve2dBSplineData:e=>a(`getCurve2dBSplineData`).getCurve2dBSplineData(o(e)),buildEdgeOnSurface:(e,t)=>a(`buildEdgeOnSurface`).buildEdgeOnSurface(o(e),t),extractSurfaceFromFace:e=>a(`extractSurfaceFromFace`).extractSurfaceFromFace(e),extractCurve2dFromEdge:(e,t)=>a(`extractCurve2dFromEdge`).extractCurve2dFromEdge(e,t),buildCurves3d:e=>{a(`buildCurves3d`).buildCurves3d(e)},fixWireOnFace:(e,t,n)=>a(`fixWireOnFace`).fixWireOnFace(e,t,n),fillSurface:(e,t)=>a(`fillSurface`).fillSurface(e,t)};for(let e of[`evaluateCurve2d`,`evaluateCurve2dD1`,`getCurve2dBounds`,`getCurve2dType`,`reverseCurve2d`,`copyCurve2d`,`trimCurve2d`,`transformCurve2dGeneral`,`translateCurve2d`,`rotateCurve2d`,`scaleCurve2d`,`mirrorCurve2dAtPoint`,`mirrorCurve2dAcrossAxis`,`affinityTransform2d`,`getCurve2dCircleData`,`liftCurve2dToPlane`]){let t=s[e];t&&(s[e]=((n,...i)=>Kw(n)?t(n,...i):r(e,n,...i)))}return s}var oT=`createPoint2d.createDirection2d.createVector2d.createAxis2d.wrapCurve2dHandle.createCurve2dAdaptor.makeLine2d.makeCircle2d.makeArc2dThreePoints.makeArc2dTangent.makeEllipse2d.makeEllipseArc2d.makeBezier2d.makeBSpline2d.evaluateCurve2d.evaluateCurve2dD1.getCurve2dBounds.getCurve2dType.trimCurve2d.reverseCurve2d.copyCurve2d.offsetCurve2d.translateCurve2d.rotateCurve2d.scaleCurve2d.mirrorCurve2dAtPoint.mirrorCurve2dAcrossAxis.affinityTransform2d.createIdentityGTrsf2d.createAffinityGTrsf2d.createTranslationGTrsf2d.createMirrorGTrsf2d.createRotationGTrsf2d.createScaleGTrsf2d.setGTrsf2dTranslationPart.multiplyGTrsf2d.transformCurve2dGeneral.intersectCurves2d.projectPointOnCurve2d.distanceBetweenCurves2d.approximateCurve2dAsBSpline.decomposeBSpline2dToBeziers.createBoundingBox2d.addCurveToBBox2d.getBBox2dBounds.mergeBBox2d.isBBox2dOut.isBBox2dOutPoint.getCurve2dCircleData.getCurve2dEllipseData.getCurve2dBezierPoles.getCurve2dBezierDegree.getCurve2dBSplineData.serializeCurve2d.deserializeCurve2d.splitCurve2d.liftCurve2dToPlane.buildEdgeOnSurface.extractSurfaceFromFace.extractCurve2dFromEdge.buildCurves3d.fixWireOnFace.fillSurface`.split(`.`);function sT(e){let t=Uy();if(!t)throw Error(`manifold: ${e} unsupported on manifold kernel; no B-rep kernel registered`);return t}function cT(e){let t={};for(let e of oT)t[e]=(...t)=>sT(e)[e](...t);let n=aT(e,()=>Uy());return Object.assign(t,n),t}function lT(e){return{sketchNew:()=>Ly(`sketchNew`),sketchAddPoint:()=>Ly(`sketchAddPoint`),sketchAddArc:()=>Ly(`sketchAddArc`),sketchAddConstraint:()=>Ly(`sketchAddConstraint`),sketchSolve:()=>Ly(`sketchSolve`),sketchDof:()=>Ly(`sketchDof`)}}function uT(e){return{projectEdges:()=>Ly(`projectEdges`)}}function dT(e){return{dispose(e){let t=Vy(e);if(t){let e=Gy.get(t.node);e!==void 0&&(Uy()?.dispose(e),Gy.delete(t.node))}(e?.manifold)?.delete?.()},executeBatch:()=>Ly(`executeBatch`),checkpoint:()=>Ly(`checkpoint`),checkpointCount:()=>0,restoreCheckpoint:()=>Ly(`restoreCheckpoint`),discardCheckpoint:()=>Ly(`discardCheckpoint`)}}var fT={draft:30,standard:10,fine:3},pT=class{oc;kernelId=`manifold`;capabilities={exact:!1,brepExport:!1,exactMeasurement:!1,tessellationModel:`build-time`};setQuality(e){let t=this.oc;t.setCircularSegments?.(0),t.setMinCircularEdgeLength?.(0),t.setMinCircularAngle?.(fT[e])}constructor(e){this.oc=e,Object.assign(this,Zy(e),nb(e),wb(e),jx(e),rS(e),kS(e),LS(e),DC(e),ZC(e),Mw(e),Lw(e),Hw(e),Ww(e),cT(e),lT(e),uT(e),dT(e))}};function mT(e){return import(e)}function hT(e){return`projectEdges`in e}function gT(e){return`sketchNew`in e&&`sketchDof`in e}var _T=new Map,vT=null,yT=null;function bT(e){xT(`manifold`,new pT(e))}function xT(e,t){_T.set(e,t),vT||=e,e===vT&&(yT=t)}function H(e){if(!e&&yT)return yT;let t=e??vT;if(!t)throw Error(`brepjs kernel not initialized. Call initFromOC() or registerKernel() before using the library.`);let n=_T.get(t);if(!n)throw Error(`brepjs: kernel '${t}' is not registered.`);return n}function ST(e){let t=H(e);if(!Po(t))throw Error(`brepjs: current kernel does not support 2D operations.`);return t}function CT(){return vT}function wT(e,t){let n=vT;vT=e,yT=_T.get(e)??null;try{let e=t();if(e instanceof Promise)throw Error(`withKernel() callback returned a Promise. Async code must use getKernel(id) directly — the kernel override is restored synchronously in finally.`);return e}finally{vT=n,yT=n?_T.get(n)??null:null}}function TT(e){return H(e).capabilities}function ET(e,t){let n=jo();try{No(e),H().setQuality?.(e);let n=t();if(n instanceof Promise)throw Error(`withQuality() callback returned a Promise. Async code must read currentQuality()/getKernel() directly.`);return n}finally{No(n),H().setQuality?.(n)}}var DT=new Map;function OT(e,t){DT.set(e,t)}function kT(e){return DT.get(e)}function AT(e,t){let n=DT.get(e);if(!n)throw Error(`withTier: no tier registered for "${e}". Call registerKernelTier("${e}", { kernel, quality }) first.`);return wT(n.kernel,()=>ET(n.quality,t))}function jT(e){Xo(),ul(),Uo(),Bc(),Vc(),nl(),rl();let t=new Kf(e);xT(`occt`,t),vT=`occt`,yT=t}function MT(){let e=H(),t=e.makeBox(1,1,1);try{e.dispose(t)}catch{}}async function NT(){if(vT)return vT;try{let{OcctKernel:e}=await mT(`occt-wasm`),t=await e.init();return xT(`occt-wasm`,Wa.fromKernel(t)),`occt-wasm`}catch{}try{return jT(await(await mT(`brepjs-opencascade`)).default()),`occt`}catch{}try{let e=await mT(`brepkit-wasm`);return typeof e.default==`function`&&await e.default(),xT(`brepkit`,new Iy(new e.BrepKernel)),`brepkit`}catch{}throw Error(`brepjs: no kernel package found. Install one of:
|
|
7
|
+
`).buffer}function Ir(e,t){return e.toBREP(E(t))}function Lr(e,t){return D(e,e.fromBREP(t))}function Rr(e,t,n){let r=e.xcafNewDocument();for(let t of n){let n=e.xcafAddShape(r,E(t.shape));if(t.name&&e.xcafSetName(r,n,t.name),t.color){let[i,a,o]=t.color;e.xcafSetColor(r,n,i/255,a/255,o/255)}}return T(`compound`,r)}function zr(e,t,n){let r=E(t),i=e.xcafGetRootLabels(r),a=(()=>{try{return i.size()>0}finally{i.delete()}})();try{return a?e.xcafExportSTEP(r):``}finally{e.xcafClose(r)}}function Br(e,t,n,r){if(n.length===0)return``;let i=Rr(e,t,n.map(e=>({shape:e.shape,name:e.name??``,color:e.color})));try{return zr(e,i)}finally{i.delete()}}function Vr(e,t,n,r){return T(`vertex`,e.makeVertex(t,n,r))}function Hr(e,t){throw Pe(t)?Error(`occt-wasm: makeEdge from curve handle is not implemented`):Error(`occt-wasm: makeEdge is not implemented`)}function Ur(e,t,n){let r=Ie(t,n.map(E));try{return T(`wire`,e.makeWire(r))}finally{r.delete()}}function Wr(e,t,n){let r=[],i=new Set(n.map(e=>E(e)));for(let t of n){let n=e.getSubShapes(E(t),`edge`);try{let e=n.size();for(let t=0;t<e;t++)r.push(n.get(t))}finally{n.delete()}}let a=Ie(t,r);try{return T(`wire`,e.makeWire(a))}finally{a.delete();for(let t of r)i.has(t)||e.release(t)}}function Gr(e,t,n){return T(`face`,e.makeFace(E(t)))}function Kr(e,t,n){return T(`edge`,e.makeLineEdge(t[0],t[1],t[2],n[0],n[1],n[2]))}function qr(e,t,n,r){return T(`edge`,e.makeCircleEdge(t[0],t[1],t[2],n[0],n[1],n[2],r))}function Jr(e,t,n,r,i,a){return T(`edge`,e.makeCircleArc(t[0],t[1],t[2],n[0],n[1],n[2],r,i,a))}function Yr(e,t,n,r){return T(`edge`,e.makeArcEdge(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]))}function Xr(e,t,n,r,i){return T(`edge`,e.makeEllipseEdge(t[0],t[1],t[2],n[0],n[1],n[2],r,i))}function Zr(e,t,n,r,i,a,o){return T(`edge`,e.makeEllipseArc(t[0],t[1],t[2],n[0],n[1],n[2],r,i,a,o))}function Qr(e,t,n){let r=[];for(let e of n)r.push(e[0],e[1],e[2]);let i=Re(t,r);try{return T(`edge`,e.makeBezierEdge(i))}finally{i.delete()}}function $r(e,t,n,r){let[i,a,o]=t,[s,c,l]=n,[u,d,f]=r;return T(`edge`,e.makeTangentArc(i,a,o,s,c,l,u,d,f))}function ei(e,t,n,r,i,a){let o=i?i[0]:0,s=i?i[1]:0,c=i?i[2]:0,l=a?a[0]:0,u=a?a[1]:0,d=a?a[2]:1,f=e.makeHelixWire(o,s,c,l,u,d,t,n,r);return e.buildCurves3d(f),T(`wire`,f)}function ti(e,t,n){let r=Ie(t,n.map(E));try{return T(`compound`,e.makeCompound(r))}finally{r.delete()}}function ni(e,t){return T(`solid`,e.solidFromShell(E(t)))}function ri(e,t,n,r,i){let a=[];for(let[t,i,o]of r){let r=n[t],s=n[i],c=n[o];!r||!s||!c||a.push(e.buildTriFace(r.x,r.y,r.z,s.x,s.y,s.z,c.x,c.y,c.z))}let o=Ie(t,a);try{let t=e.sewAndSolidify(o,i),n=e.fixFaceOrientations(t);return n!==t&&e.release(t),D(e,n)}finally{o.delete();for(let t of a)e.release(t)}}function ii(e,t){return T(`face`,e.makeNonPlanarFace(E(t)))}function ai(e,t,n,r){let i=Ie(t,r.map(E));try{return T(`face`,e.addHolesInFace(E(n),i))}finally{i.delete()}}function oi(e,t,n){let r=e.getSubShapes(E(n),`wire`),i=(()=>{try{return r.size()-1}finally{r.delete()}})(),a=[];for(let e=0;e<i;e++)a.push(e);let o=Le(t,a);try{return T(`face`,e.removeHolesFromFace(E(n),o))}finally{o.delete()}}function si(e,t,n){let r=E(t);return T(`face`,e.makeFaceOnSurface(r,E(n)))}function ci(e,t,n,r,i){let a=new t.VectorDouble;for(let[e,t,r]of n)a.push_back(e),a.push_back(t),a.push_back(r);try{return T(`face`,e.bsplineSurface(a,r,i))}finally{a.delete()}}function li(e,t,n,r,i){let a=[];for(let t=0;t<r-1;t++)for(let r=0;r<i-1;r++){let o=t*i+r,s=(t+1)*i+r,c=t*i+(r+1),l=(t+1)*i+(r+1),u=n[o],d=n[s],f=n[c],p=n[l];u&&d&&f&&a.push(e.buildTriFace(u[0],u[1],u[2],d[0],d[1],d[2],f[0],f[1],f[2])),d&&p&&f&&a.push(e.buildTriFace(d[0],d[1],d[2],p[0],p[1],p[2],f[0],f[1],f[2]))}let o=Ie(t,a);try{return D(e,e.sewAndSolidify(o,.001))}finally{o.delete();for(let t of a)e.release(t)}}function ui(e,t,n,r){let i=e.buildTriFace(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]);return i===0?null:T(`face`,i)}function di(e,t,n,r){let i=Ie(t,n.map(E));try{let t=e.sewAndSolidify(i,r),n=e.fixFaceOrientations(t);return n!==t&&e.release(t),T(`solid`,n)}finally{i.delete()}}function fi(e,t,n){return{x:e,y:t,z:n,__type:`point3d`,delete:Ne}}function pi(e,t,n){return{x:e,y:t,z:n,__type:`direction3d`,delete:Ne}}function mi(e,t,n){return{x:e,y:t,z:n,__type:`vector3d`,delete:Ne}}function hi(e,t,n,r,i,a){return{origin:{x:e,y:t,z:n},direction:{x:r,y:i,z:a},__type:`axis1`,delete:Ne}}function gi(e,t,n,r,i,a,o,s,c){return{origin:{x:e,y:t,z:n},zDir:{x:r,y:i,z:a},xDir:o===void 0?void 0:{x:o,y:s,z:c},__type:`axis2`,delete:Ne}}function _i(e,t,n,r,i,a,o,s,c){return{origin:{x:e,y:t,z:n},zDir:{x:r,y:i,z:a},xDir:o===void 0?void 0:{x:o,y:s,z:c},__type:`axis3`,delete:Ne}}function vi(e){return e}function yi(e){return e}function bi(e,t){return{x:e,y:t}}function xi(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`occt-wasm: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function Si(e,t){return{x:e,y:t}}function Ci(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete(){}}}function wi(e){return e}function Ti(e,t,n,r){return yi(te(e,t,n,r))}function Ei(e,t,n,r){return yi(ne(e,t,n,r))}function Di(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));if(Math.abs(o)<1e-12)return yi(te(e,t,i,a));let s=((e*e+t*t)*(r-a)+(n*n+r*r)*(a-t)+(i*i+a*a)*(t-r))/o,c=((e*e+t*t)*(i-n)+(n*n+r*r)*(e-i)+(i*i+a*a)*(n-e))/o,l=Math.sqrt((e-s)**2+(t-c)**2),u=Math.atan2(t-c,e-s),d=Math.atan2(r-c,n-s),f=Math.atan2(a-c,i-s),p=d-u;p<0&&(p+=2*Math.PI);let m=f-u;m<0&&(m+=2*Math.PI);let h=p<m,g=ne(s,c,l,h);if(!h){let e=-u,t=-f;return t<e-1e-9&&(t+=2*Math.PI),yi({__bk2d:`trimmed`,basis:g,tStart:e,tEnd:t})}let _=f;return _<u-1e-9&&(_+=2*Math.PI),yi({__bk2d:`trimmed`,basis:g,tStart:u,tEnd:_})}function Oi(e,t,n,r,i,a){let o=Math.sqrt(n*n+r*r),s=o>0?n/o:0,c=o>0?r/o:0,l=e-i,u=t-a,d=2*(u*s-l*c);if(Math.abs(d)<1e-12)return yi(te(e,t,i,a));let f=-(l*l+u*u)/d,p=e-f*c,m=t+f*s,h=Math.abs(f),g=Math.atan2(t-m,e-p),_=Math.atan2(a-m,i-p),v=-(t-m)/h,y=(e-p)/h,b=v*s+y*c>0,x=ne(p,m,h,b);if(!b){let e=-g,t=-_;return t<e-1e-9&&(t+=2*Math.PI),yi({__bk2d:`trimmed`,basis:x,tStart:e,tEnd:t})}let S=_;return S<g-1e-9&&(S+=2*Math.PI),yi({__bk2d:`trimmed`,basis:x,tStart:g,tEnd:S})}function ki(e,t,n,r,i,a,o){return yi(ae(e,t,n,r,i??1,a??0,o??!0))}function Ai(e,t,n,r,i,a,o,s,c){return yi({...ae(e,t,n,r,o??1,s??0,c??!0),__bk2d:`ellipse`,startAngle:i,endAngle:a})}function ji(e){return yi(oe(e))}function Mi(e,t){let n=e,r=n.length,i=Math.max(1,Math.min(t?.degMax??3,r-1)),a=[0],o=[i+1],s=r-i-1;for(let e=1;e<=s;e++)a.push(e/(s+1)),o.push(1);return a.push(1),o.push(i+1),yi({__bk2d:`bspline`,poles:n,knots:a,multiplicities:o,degree:i,isPeriodic:!1})}function Ni(e,t){return S(vi(e),t)}function Pi(e,t){return{point:S(vi(e),t),tangent:C(vi(e),t)}}function Fi(e){return w(vi(e))}function Ii(e){let t=vi(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return ee(t)}function Li(e,t,n){return yi({__bk2d:`trimmed`,basis:vi(e),tStart:t,tEnd:n})}function Ri(e){return yi(JSON.parse(JSON.stringify(vi(e))))}function zi(e,t){let n=vi(e),r=w(n),i=[];for(let e=0;e<=20;e++){let a=r.first+(r.last-r.first)*e/20,[o,s]=S(n,a),[c,l]=C(n,a),u=Math.sqrt(c*c+l*l)||1;i.push([o-l/u*t,s+c/u*t])}return yi(oe(i.length<=25?i:i.filter((e,t)=>t%2==0||t===i.length-1)))}function Bi(e,t,n){return yi(se(vi(e),t,n))}function Vi(e,t,n,r){return yi(ce(vi(e),t,n,r))}function Hi(e,t,n,r){return yi(le(vi(e),t,n,r))}function Ui(e,t,n){return yi(ue(vi(e),t,n))}function Wi(e,t,n,r,i){return yi(de(vi(e),t,n,r,i))}function Gi(e,t,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return e;let s=-i/o,c=r/o,l=a-1,u=1+l*s*s,d=l*s*c,f=l*c*s,p=1+l*c*c,m=t-u*t-d*n,h=n-f*t-p*n,g=vi(e),_=w(g),v=[];for(let e=0;e<=20;e++){let[t,n]=S(g,_.first+(_.last-_.first)*e/20);v.push([u*t+d*n+m,f*t+p*n+h])}return yi(oe(v))}function Ki(e,t,n,r,i,a){return Gi(e,t,n,r,i,a)}function qi(){return{type:`identity2d`,delete(){}}}function Ji(e,t,n,r,i){return{type:`affinity2d`,axOriginX:e,axOriginY:t,axDirX:n,axDirY:r,ratio:i,delete(){}}}function Yi(e,t){return{type:`translate2d`,dx:e,dy:t,delete(){}}}function Xi(e,t,n,r,i,a,o){return{type:`mirror2d`,cx:e,cy:t,mode:n,originX:r,originY:i,dirX:a,dirY:o,delete(){}}}function Zi(e,t,n){return{type:`rotate2d`,angle:e,cx:t,cy:n,delete(){}}}function Qi(e,t,n){return{type:`scale2d`,sx:e,sy:e,cx:t,cy:n,delete(){}}}function $i(e,t,n){let r=e;r.dx=(Number(r.dx)||0)+t,r.dy=(Number(r.dy)||0)+n}function ea(e,t){let n=e,r=t;n.dx=(Number(n.dx)||0)+(Number(r.dx)||0),n.dy=(Number(n.dy)||0)+(Number(r.dy)||0),r.type===`scale2d`&&(n.type=`scale2d`,n.sx=r.sx,n.sy=r.sy)}function ta(e,t){let n=t;return n.type===`translate2d`?Bi(e,Number(n.dx)||0,Number(n.dy)||0):n.type===`rotate2d`?Vi(e,Number(n.angle)||0,Number(n.cx)||0,Number(n.cy)||0):n.type===`scale2d`?Hi(e,Number(n.sx)||1,Number(n.cx)||0,Number(n.cy)||0):n.type===`mirror2d`?Ui(e,Number(n.ox)||0,Number(n.oy)||0):n.type===`affinity2d`?Gi(e,Number(n.axOriginX)||0,Number(n.axOriginY)||0,Number(n.axDirX)||0,Number(n.axDirY)||0,Number(n.ratio)||1):Number(n.dx)||Number(n.dy)?Bi(e,Number(n.dx)||0,Number(n.dy)||0):e}function na(e,t,n){let r=fe(vi(e),vi(t),n);return{points:r.points,segments:r.segments.map(e=>yi(e))}}function ra(e,t,n){let r=vi(e),i=w(r),a=(e,r,i)=>{if(e.__bk2d===`line`){let a=(t-e.ox)*e.dx+(n-e.oy)*e.dy,o=Math.max(r,Math.min(i,a)),[s,c]=S(e,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}let a=r,o=1/0;for(let s=0;s<=200;s++){let c=r+(i-r)*s/200,[l,u]=S(e,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}return{param:a,distance:Math.sqrt(o)}};if(r.__bk2d===`trimmed`){let e=r.tStart,t=r.tEnd,n=a(r.basis,e,t);if(!n)return null;let i=t-e,o=i>1e-15?(n.param-e)/i:0;return{param:Math.max(0,Math.min(1,o)),distance:n.distance}}return a(r,i.first,i.last)}function ia(e,t,n,r,i,a){let o=1/0;for(let s=0;s<=20;s++){let c=n+(r-n)*(s/20),[l,u]=S(vi(e),c);for(let e=0;e<=20;e++){let n=i+(a-i)*(e/20),[r,s]=S(vi(t),n),c=Math.sqrt((r-l)**2+(s-u)**2);c<o&&(o=c)}}return o}function aa(e,t){let n=vi(e),r=w(n),i=Math.min(Math.max(t+1,10),100),a=[];for(let e=0;e<i;e++){let t=r.first+(r.last-r.first)*e/(i-1);a.push(S(n,t))}let o=Math.min(3,i-1),s=a.length,c=[],l=[],u=s-o-1;c.push(0),l.push(o+1);for(let e=1;e<=u;e++)c.push(e/(u+1)),l.push(1);return c.push(1),l.push(o+1),yi({__bk2d:`bspline`,poles:a,knots:c,multiplicities:l,degree:o,isPeriodic:!1})}function oa(e){let t=vi(e);for(;t.__bk2d===`trimmed`;)t=t.basis;if(t.__bk2d!==`bspline`)return[e];let n=t.poles,r=t.degree,i=[];for(let e=0;e<t.knots.length;e++){let n=t.knots[e]??0,r=t.multiplicities[e]??0;for(let e=0;e<r;e++)i.push(n)}let a=n.length-1+r+1;if(r<1||i.length!==a+1)return[yi(oe(n))];let o=e=>[e[0],e[1]],s=[],c=r,l=r+1,u=[];for(let e=0;e<=r;e++)u[e]=o(n[e]);let d=[];for(;l<a;){let e=l;for(;l<a&&i[l+1]===i[l];)l++;let t=l-e+1;if(t<r){let e=i[l]-i[c],n=[];for(let a=r;a>t;a--)n[a-t-1]=e/(i[c+a]-i[c]);let s=r-t;for(let e=1;e<=s;e++){let i=s-e,c=t+e;for(let e=r;e>=c;e--){let t=n[e-c],r=u[e],i=u[e-1];u[e]=[t*r[0]+(1-t)*i[0],t*r[1]+(1-t)*i[1]]}l<a&&(d[i]=o(u[r]))}}if(s.push(u),l<a){for(let e=r-t;e<=r;e++)d[e]=o(n[l-r+e]);u=d,d=[],c=l,l++}}return s.map(e=>yi(oe(e)))}function sa(){return Ce()}function ca(e,t,n){we(e,vi(t),n)}function la(e){return{xMin:e.xMin,yMin:e.yMin,xMax:e.xMax,yMax:e.yMax}}function ua(e,t){e.xMin=Math.min(e.xMin,t.xMin),e.yMin=Math.min(e.yMin,t.yMin),e.xMax=Math.max(e.xMax,t.xMax),e.yMax=Math.max(e.yMax,t.yMax)}function da(e,t){return e.xMax<t.xMin||e.xMin>t.xMax||e.yMax<t.yMin||e.yMin>t.yMax}function fa(e,t,n){return t<e.xMin||t>e.xMax||n<e.yMin||n>e.yMax}function pa(e){let t=vi(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function ma(e){let t=vi(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function ha(e){let t=vi(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t.__bk2d===`bezier`?t.poles:null}function ga(e){let t=vi(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t.__bk2d===`bezier`?t.poles.length-1:null}function _a(e){return xe(vi(e))}function va(e){return yi(Se(e))}function ya(e,t){let n=w(vi(e)),r=[n.first,...t.sort((e,t)=>e-t),n.last],i=[];for(let t=0;t<r.length-1;t++){let a=r[t]??n.first,o=r[t+1]??n.last;i.push(Li(e,a,o))}return i}function ba(e,t,n,r,i,a){let o=vi(n),[s,c,l]=r,[u,d,f]=i,[p,m,h]=a,g=d*h-f*m,_=f*p-u*h,v=u*m-d*p,y=(e,t)=>[s+e*p+t*g,c+e*m+t*_,l+e*h+t*v],b=o.__bk2d;if(b===`line`){let t=w(o),[n,r]=S(o,t.first),[i,a]=S(o,t.last),s=y(n,r),c=y(i,a);return T(`edge`,e.makeLineEdge(s[0],s[1],s[2],c[0],c[1],c[2]))}if(b===`trimmed`){let t=o;if(t.basis&&t.basis.__bk2d===`line`){let[t,n]=S(o,0),[r,i]=S(o,1),a=y(t,n),s=y(r,i);return T(`edge`,e.makeLineEdge(a[0],a[1],a[2],s[0],s[1],s[2]))}if(t.basis&&t.basis.__bk2d===`circle`){let t=w(o),[n,r]=S(o,t.first),[i,a]=S(o,(t.first+t.last)/2),[s,c]=S(o,t.last),l=y(n,r),u=y(i,a),d=y(s,c);return T(`edge`,e.makeArcEdge(l[0],l[1],l[2],u[0],u[1],u[2],d[0],d[1],d[2]))}}if(b===`circle`){let t=o;if(t.cx!==void 0&&t.radius!==void 0){let[n,r,i]=y(t.cx,t.cy);return T(`edge`,e.makeCircleEdge(n,r,i,u,d,f,t.radius))}let n=w(o),[r,i]=S(o,n.first),[a,s]=S(o,(n.first+n.last)/2),[c,l]=S(o,n.last),p=y(r,i),m=y(a,s),h=y(c,l);return T(`edge`,e.makeArcEdge(p[0],p[1],p[2],m[0],m[1],m[2],h[0],h[1],h[2]))}let x=w(o),C=(x.last-x.first)/24,ee=[];for(let e=0;e<=24;e++){let[t,n]=S(o,x.first+e*C),[r,i,a]=y(t,n);ee.push(r,i,a)}let te=new t.VectorDouble;for(let e of ee)te.push_back(e);try{return T(`edge`,e.interpolatePoints(te,!1))}finally{te.delete()}}function xa(e,t,n,r){let i=vi(n),a=w(i),o=E(r),s=new t.VectorDouble;for(let t=0;t<=30;t++){let[n,r]=S(i,a.first+(a.last-a.first)*t/30),c=e.pointOnSurface(o,n,r);try{s.push_back(c.get(0)),s.push_back(c.get(1)),s.push_back(c.get(2))}finally{c.delete()}}try{return T(`edge`,e.interpolatePoints(s,!1))}finally{s.delete()}}function Sa(e){return e}function Ca(e,t,n){let[r,i]=Vt(e,t),a=[];for(let o=0;o<=60;o++){let s=vn(e,n,Ht(e,t,r+(i-r)*o/60));s&&a.push(s)}if(a.length<2)throw Error(`occt-wasm: extractCurve2dFromEdge could not project the edge onto the face surface`);return Mi(a)}function wa(e,t){e.buildCurves3d(E(t))}function Ta(e,t,n,r){return T(`wire`,e.fixWireOnFace(E(t),E(n),r))}function Ea(e){try{let t=ze(e.modified),n=ze(e.generated),r=ze(e.deleted),i=e=>{let t=new Map,n=0;for(;n+1<e.length;){let r=e[n]??0,i=e[n+1]??0;n+=2;let a=[];for(let t=0;t<i&&n<e.length;t++,n++)a.push(e[n]??0);t.set(r,a)}return t};return{id:e.resultId,evolution:{modified:i(t),generated:i(n),deleted:new Set(r)}}}finally{e.delete()}}function Da(e,t,n,r,i,a,o,s){let c=Le(t,o);try{let{id:t,evolution:o}=Ea(e.translateWithHistory(E(n),r,i,a,c,s));return{shape:D(e,t),evolution:o}}finally{c.delete()}}function Oa(e,t,n,r,i,a,o,s){let c=o??[0,0,1],l=s??[0,0,0],u=Le(t,i);try{let{id:t,evolution:i}=Ea(e.rotateWithHistory(E(n),l[0],l[1],l[2],c[0],c[1],c[2],r,u,a));return{shape:D(e,t),evolution:i}}finally{u.delete()}}function ka(e,t,n,r,i,a,o){let s=Le(t,a);try{let{id:t,evolution:a}=Ea(e.mirrorWithHistory(E(n),r[0],r[1],r[2],i[0],i[1],i[2],s,o));return{shape:D(e,t),evolution:a}}finally{s.delete()}}function Aa(e,t,n,r,i,a,o){let s=Le(t,a);try{let{id:t,evolution:a}=Ea(e.scaleWithHistory(E(n),r[0],r[1],r[2],i,s,o));return{shape:D(e,t),evolution:a}}finally{s.delete()}}function ja(e,t,n,r,i,a){let o=e(t,n,r,i),s=new Map;for(let e of a)s.set(e,[e]);return{shape:o,evolution:{modified:s,generated:new Map,deleted:new Set}}}function Ma(e,t,n,r,i,a,o){let s=Le(t,i);try{let{id:t,evolution:i}=Ea(e.fuseWithHistory(E(n),E(r),s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete()}}function Na(e,t,n,r,i,a,o){let s=Le(t,i),c;try{c=Ge(e,r);let{id:t,evolution:i}=Ea(e.cutWithHistory(E(n),c.id,s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete(),c?.dispose()}}function Pa(e,t,n,r,i,a,o){let s=Le(t,i),c;try{c=Ge(e,r);let{id:t,evolution:i}=Ea(e.intersectWithHistory(E(n),c.id,s,a));return{shape:D(e,t),evolution:i,diagnostics:{hasErrors:!1,hasWarnings:!1,messages:[]}}}finally{s.delete(),c?.dispose()}}function Fa(e,t,n,r,i,a,o){let s=Ve(r,i),c=Ie(t,r.map(E)),l=Le(t,a);try{let{id:t,evolution:r}=Ea(e.filletWithHistory(E(n),c,s,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function Ia(e,t,n,r,i,a,o){let s=Ve(r,i),c=Ie(t,r.map(E)),l=Le(t,a);try{let{id:t,evolution:r}=Ea(e.chamferWithHistory(E(n),c,s,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function La(e,t,n,r,i,a,o,s){let c=Ie(t,r.map(E)),l=Le(t,a);try{let{id:t,evolution:r}=Ea(e.shellWithHistory(E(n),c,i,s??.001,l,o));return{shape:D(e,t),evolution:r}}finally{c.delete(),l.delete()}}function Ra(e,t,n,r,i,a){let o=Le(t,i);try{let{id:t,evolution:i}=Ea(e.thickenWithHistory(E(n),r,.001,o,a));return{shape:D(e,t),evolution:i}}finally{o.delete()}}function za(e,t,n,r,i,a,o){let s=Le(t,i);try{let{id:t,evolution:i}=Ea(e.offsetWithHistory(E(n),r,o??1e-6,s,a));return{shape:D(e,t),evolution:i}}finally{s.delete()}}function Ba(e,t,n,r,i){let[a,o,s]=r,c=E(t);for(let t of n){let n=(typeof i==`number`?i:i(t))*Math.PI/180;c=e.draft(c,E(t),n,a,o,s)}return{shape:D(e,c),evolution:{modified:new Map,generated:new Map,deleted:new Set}}}function Va(e,t,n,r,i,a,o){let s=e(r,i),c=t(s,`face`),l=new Map,u=Math.min(a.length,c.length);for(let e=0;e<u;e++){let t=c[e],r=a[e];t!==void 0&&r!==void 0&&l.set(r,[n(t,o)])}return{shape:s,evolution:{modified:l,generated:new Map,deleted:new Set}}}function Ha(e,t,n,r){if(n.length<4)throw Error(`hullFromPoints: need at least 4 points`);let{points:i,faces:a}=x(n,r);if(a.length<4)throw Error(`hullFromPoints: degenerate hull (fewer than 4 faces)`);return ri(e,t,[...i],[...a],r)}function Ua(e,t,n,r){let i=Math.max(r,1),a=[];for(let r of n){let n=e.tessellate(E(r),i,i*.5);try{let e=n.positionCount,r=n.getPositionsPtr()>>2;for(let n=0;n<e;n+=3)a.push({x:t.HEAPF32[r+n]??0,y:t.HEAPF32[r+n+1]??0,z:t.HEAPF32[r+n+2]??0})}finally{n.delete()}}return a}function Wa(e,t,n,r){if(n.length===0)throw Error(`hull: no shapes provided`);let i=Ua(e,t,n,r);if(i.length<4)throw Error(`hull: fewer than 4 vertices extracted from input shapes`);return Ha(e,t,i,r)}function Ga(e){throw new c(`occt-wasm: ${e} is not yet implemented`)}var Ka=class e{oc;kernelId=`occt-wasm`;capabilities=a;Module;k;owner;constructor(e,t,n){this.Module=e,this.k=Ue(t,e),this.oc=We(e,this.k),this.owner=n}static fromKernel(t){let n=t.getRawModule(),r=t.getRawKernel();return new e(n,r,t)}get retainedKernelOwner(){return this.owner}dispose(e){Pe(e)?this.k.release(e.id):typeof e.delete==`function`&&e.delete()}executeBatch(e){Ga(`executeBatch`)}openCheckpoints=[];checkpoint(){let e=this.k.checkpoint();return this.openCheckpoints.push(e),e}checkpointCount(){return this.openCheckpoints.length}restoreCheckpoint(e){let t=this.openCheckpoints.lastIndexOf(e);if(t===-1)throw new r(`occtWasmAdapter.restoreCheckpoint`,`checkpoint ${e} is not open — releaseSince would erase unrelated live handles`);this.k.releaseSince(e),this.openCheckpoints.length=t}discardCheckpoint(e){this.closeCheckpoint(e)}closeCheckpoint(e){let t=this.openCheckpoints.lastIndexOf(e);t!==-1&&(this.openCheckpoints.length=t)}makeBox(e,t,n){return nt(this.k,e,t,n)}makeCylinder(e,t,n,r){return rt(this.k,e,t,n,r)}makeSphere(e,t){return it(this.k,e,t)}makeCone(e,t,n,r,i){return at(this.k,e,t,n,r,i)}makeTorus(e,t,n,r){return ot(this.k,e,t,n,r)}makeEllipsoid(e,t,n){return st(this.k,e,t,n)}makeBoxFromCorners(e,t){return ct(this.k,e,t)}makeRectangle(e,t){return lt(this.k,e,t)}fuse(e,t,n){return Ke(this.k,e,t,n)}cut(e,t,n){return qe(this.k,e,t,n)}intersect(e,t,n){return Je(this.k,e,t,n)}section(e,t,n){return Ye(this.k,e,t,n)}fuseAll(e,t){return Xe(this.k,this.Module,e,t)}cutAll(e,t,n){return Ze(this.k,this.Module,e,t,n)}split(e,t){return Qe(this.k,this.Module,e,t)}checkBoolean(e,t,n){return $e(this.k,e,t,n)}meshBoolean(e,t,n,r,i,a){return et(e,t,n,r,i,a)}makeVertex(e,t,n){return Vr(this.k,e,t,n)}makeEdge(e,t,n){return Hr(this.k,e)}makeWire(e){return Ur(this.k,this.Module,e)}makeFace(e,t){return Gr(this.k,e,t)}makeLineEdge(e,t){return Kr(this.k,e,t)}makeCircleEdge(e,t,n){return qr(this.k,e,t,n)}makeCircleArc(e,t,n,r,i){return Jr(this.k,e,t,n,r,i)}makeArcEdge(e,t,n){return Yr(this.k,e,t,n)}makeEllipseEdge(e,t,n,r,i){return Xr(this.k,e,t,n,r)}makeEllipseArc(e,t,n,r,i,a,o){return Zr(this.k,e,t,n,r,i,a)}makeBezierEdge(e){return Qr(this.k,this.Module,e)}makeTangentArc(e,t,n){return $r(this.k,e,t,n)}makeHelixWire(e,t,n,r,i,a){return ei(this.k,e,t,n,r,i)}makeWireFromMixed(e){return Wr(this.k,this.Module,e)}makeCompound(e){return ti(this.k,this.Module,e)}solidFromShell(e){return ni(this.k,e)}hull(e,t){return Wa(this.k,this.Module,e,t)}hullFromPoints(e,t){return Ha(this.k,this.Module,e,t)}buildSolidFromFaces(e,t,n){return ri(this.k,this.Module,e,t,n)}makeNonPlanarFace(e){return ii(this.k,e)}addHolesInFace(e,t){return ai(this.k,this.Module,e,t)}removeHolesFromFace(e){return oi(this.k,this.Module,e)}makeFaceOnSurface(e,t){return si(this.k,e,t)}bsplineSurface(e,t,n){return ci(this.k,this.Module,e,t,n)}triangulatedSurface(e,t,n){return li(this.k,this.Module,e,t,n)}buildTriFace(e,t,n){return ui(this.k,e,t,n)}sewAndSolidify(e,t){return di(this.k,this.Module,e,t)}createPoint3d(e,t,n){return fi(e,t,n)}createDirection3d(e,t,n){return pi(e,t,n)}createVector3d(e,t,n){return mi(e,t,n)}createAxis1(e,t,n,r,i,a){return hi(e,t,n,r,i,a)}createAxis2(e,t,n,r,i,a,o,s,c){return gi(e,t,n,r,i,a,o,s,c)}createAxis3(e,t,n,r,i,a,o,s,c){return _i(e,t,n,r,i,a,o,s,c)}extrude(e,t,n){return tr(this.k,e,t,n)}revolve(e,t,n){return nr(this.k,e,t,n)}loft(e,t,n,r){return rr(this.k,this.Module,e,t,n,r)}sweep(e,t,n){return ir(this.k,e,t,n)}simplePipe(e,t){return ar(this.k,e,t)}helicalSweep(e,t,n,r,i,a){throw Error(`helicalSweep on occt-wasm requires profile positioning+orientation logic not yet implemented; brepkit has a native implementation`)}sweepWithOptions(e,t,n,r,i){Ga(`sweepWithOptions`)}sweepPipeShell(e,t,n){return or(this.k,e,t,n)}loftAdvanced(e,t){return sr(this.k,this.Module,e,t)}buildExtrusionLaw(e,t,n){return cr(this.k,e,t,n)}revolveVec(e,t,n,r){return lr(this.k,e,t,n,r)}draftPrism(e,t,n,r,i,a){return ur(this.k,e,t,n,r,i,a)}fillet(e,t,n){return Hn(this.k,this.Module,e,t,n)}chamfer(e,t,n){return Un(this.k,this.Module,e,t,n)}chamferDistAngle(e,t,n,r){return Wn(this.k,this.Module,e,t,n,r)}shell(e,t,n,r){return Gn(this.k,this.Module,e,t,n,r)}thicken(e,t){return Kn(this.k,e,t)}offset(e,t,n){return qn(this.k,e,t,n)}filletVariable(e,t){return Yn(this.k,e,t)}draft(e,t,n,r,i){return Xn(this.k,e,t,n,r,i)}defeature(e,t){return Zn(this.k,this.Module,e,t)}offsetWire2D(e,t,n){return Qn(this.k,e,t,n)}simplify(e){return $n(this.k,e)}reverseShape(e){return er(this.k,e)}composeTransform(e){return dr(e)}transform(e,t){return pr(this.k,this.Module,e,t)}locate(e,t){return mr(this.k,this.Module,e,t)}translate(e,t,n,r){return hr(this.k,e,t,n,r)}rotate(e,t,n,r){return gr(this.k,e,t,n,r)}mirror(e,t,n){return _r(this.k,e,t,n)}scale(e,t,n){return vr(this.k,e,t,n)}generalTransform(e,t,n,r){return yr(this.k,this.Module,e,t,n,r)}generalTransformNonOrthogonal(e,t,n){return yr(this.k,this.Module,e,t,n,!1)}positionOnCurve(e,t,n){return br(this.k,this.Module,e,t,n)}linearPattern(e,t,n,r){return xr(this.k,e,t,n,r)}circularPattern(e,t,n,r,i){return Sr(this.k,e,t,n,r,i)}transformBatch(e){return Cr(this.k,e)}translateWithHistory(e,t,n,r,i,a){return Da(this.k,this.Module,e,t,n,r,i,a)}rotateWithHistory(e,t,n,r,i,a){return Oa(this.k,this.Module,e,t,n,r,i,a)}mirrorWithHistory(e,t,n,r,i){return ka(this.k,this.Module,e,t,n,r,i)}scaleWithHistory(e,t,n,r,i){return Aa(this.k,this.Module,e,t,n,r,i)}generalTransformWithHistory(e,t,n,r,i,a){return ja((e,t,n,r)=>this.generalTransform(e,t,n,r),e,t,n,r,i)}fuseWithHistory(e,t,n,r,i){return Ma(this.k,this.Module,e,t,n,r,i)}cutWithHistory(e,t,n,r,i){return Na(this.k,this.Module,e,t,n,r,i)}intersectWithHistory(e,t,n,r,i){return Pa(this.k,this.Module,e,t,n,r,i)}filletWithHistory(e,t,n,r,i){return Fa(this.k,this.Module,e,t,n,r,i)}chamferWithHistory(e,t,n,r,i){return Ia(this.k,this.Module,e,t,n,r,i)}shellWithHistory(e,t,n,r,i,a){return La(this.k,this.Module,e,t,n,r,i,a)}thickenWithHistory(e,t,n,r){return Ra(this.k,this.Module,e,t,n,r)}offsetWithHistory(e,t,n,r,i){return za(this.k,this.Module,e,t,n,r,i)}draftWithHistory(e,t,n,r,i,a,o){return Ba(this.k,e,t,n,i)}applyComposedTransformWithHistory(e,t,n,r){return Va((e,t)=>this.transform(e,t),(e,t)=>this.iterShapes(e,t),(e,t)=>this.hashCode(e,t),e,t,n,r)}mesh(e,t){return Pt(this.k,this.Module,e,t)}meshEdges(e,t,n){return It(this.k,this.Module,e,t,n)}hasTriangulation(e){return Lt(this.k,e)}meshShape(e,t,n){Rt(this.k,e,t,n)}exportSTEP(e){return Er(this.k,this.makeCompound.bind(this),e)}exportSTL(e,t,n,r){return Dr(this.mesh.bind(this),e,t,n,r)}importSTEP(e){return Or(this.k,e)}importSTL(e){return kr(this.k,this.Module,e)}exportIGES(e){return Ar(this.k,this.makeCompound.bind(this),e)}importIGES(e){return jr(this.k,e)}exportSTEPAssembly(e,t){return Mr(this.k,this.Module,e,t)}export3MF(e,t){throw Error(`export3MF is only available with the brepkit kernel`)}exportGLB(e,t){return Nr(this.mesh.bind(this),e,t)}exportOBJ(e,t){return Pr(this.mesh.bind(this),e,t)}exportPLY(e,t){return Fr(this.mesh.bind(this),e,t)}import3MF(e){throw Error(`import3MF is only available with the brepkit kernel`)}importOBJ(e){throw Error(`importOBJ is only available with the brepkit kernel`)}importGLB(e){throw Error(`importGLB is only available with the brepkit kernel`)}toBREP(e){return Ir(this.k,e)}fromBREP(e){return Lr(this.k,e)}createXCAFDocument(e){return Rr(this.k,this.Module,e)}writeXCAFToSTEP(e,t){return zr(this.k,e,t)}exportSTEPConfigured(e,t){return Br(this.k,this.Module,e,t)}volume(e){return Sn(this.k,e)}area(e){return Cn(this.k,e)}length(e){return wn(this.k,e)}centerOfMass(e){return Tn(this.k,e)}linearCenterOfMass(e){return En(this.k,e)}boundingBox(e){return Dn(this.k,e)}distance(e,t){return Nn(this.k,this.Module,e,t)}surfaceCurvature(e,t,n){return Bn(this.k,e,t,n)}surfaceCenterOfMass(e){return On(this.k,e)}measureBulk(e,t){return kn(this.k,e,t)}createDistanceQuery(e){return An(this.k,e)}iterShapes(e,t){return ut(this.k,e,t)}iterShapeList(e,t){throw Error(`iterShapeList is not applicable to occt-wasm: the arena model has no TopTools_ListOfShape handles`)}shapeType(e){return dt(this.k,e)}isSame(e,t){return ft(this.k,e,t)}isEqual(e,t){return pt(this.k,e,t)}downcast(e,t){return mt(this.k,e,t)}copyShape(e){return ht(this.k,e)}hashCode(e,t){return gt(this.k,e,t)}subShapeCount(e,t){return bt(this.k,e,t)}subShapeHashes(e,t,n){return xt(this.k,e,t,n)}isNull(e){return _t(this.k,e)}shapeOrientation(e){return vt(this.k,e)}edgeToFaceMap(e){return yt(this.k,e)}sharedEdges(e,t){return St(this.k,e,t)}adjacentFaces(e,t){return Ct(this.k,e,t)}sew(e,t){return wt(this.k,this.Module,e,t)}curveType(e){return Bt(this.k,e)}curveParameters(e){return Vt(this.k,e)}curvePointAtParam(e,t){return Ht(this.k,e,t)}curveTangent(e,t){return Ut(this.k,e,t)}curveIsClosed(e){return Wt(this.k,e)}curveIsPeriodic(e){return Gt(this.k,e)}curvePeriod(e){return Kt(this.k,e)}interpolatePoints(e,t){return qt(this.k,this.Module,e,t)}approximatePoints(e,t){return Jt(this.k,this.Module,e,t)}curveDegreeElevate(e,t){return Yt(this.k,e,t)}curveKnotInsert(e,t,n){return Xt(this.k,e,t,n)}curveKnotRemove(e,t,n){return Zt(this.k,e,t,n)}curveSplit(e,t){return Qt(this.k,e,t)}getBezierPenultimatePole(e){return $t(this.k,e)}createCurveAdaptor(e){Ga(`createCurveAdaptor`)}vertexPosition(e){return tn(this.k,e)}surfaceType(e){return nn(this.k,e)}uvBounds(e){return rn(this.k,e)}outerWire(e){return an(this.k,e)}surfaceNormal(e,t,n){return on(this.k,e,t,n)}pointOnSurface(e,t,n){return sn(this.k,e,t,n)}uvFromPoint(e,t){return vn(this.k,e,t)}projectPointOnFace(e,t){return yn(this.k,e,t)}classifyPointOnFace(e,t,n,r){return bn(this.k,e,t,n,r)}classifyPointRobust(e,t,n){Ga(`classifyPointRobust`)}classifyPointWinding(e,t,n){Ga(`classifyPointWinding`)}approximateSurfaceLspia(e,t,n,r,i,a,o,s,c){Ga(`approximateSurfaceLspia`)}untrimFace(e,t,n){Ga(`untrimFace`)}getSurfaceCylinderData(e){return _n(this.k,e)}getSurfaceAxis(e){return gn(this.k,e)}reverseSurfaceU(e){Ga(`reverseSurfaceU`)}detectSmallFeatures(e,t,n){Ga(`detectSmallFeatures`)}recognizeFeatures(e,t){Ga(`recognizeFeatures`)}projectEdges(e,t,n,r){return xn(this.k,this.Module,e,t,n,r)}isValid(e){return Et(this.k,e)}healSolid(e){return Dt(this.k,e)}healFace(e){return Ot(this.k,e)}healWire(e,t){return kt(this.k,e,t)}mergeCoincidentVertices(e,t){return At(this.k,e,t)}removeDegenerateEdges(e,t){return jt(this.k,e,t)}fixFaceOrientations(e){return Mt(this.k,e)}fixShape(e){return Nt(this.k,e)}fixSelfIntersection(e){Ga(`fixSelfIntersection`)}createPoint2d(e,t){return bi(e,t)}createDirection2d(e,t){return xi(e,t)}createVector2d(e,t){return Si(e,t)}createAxis2d(e,t,n,r){return Ci(e,t,n,r)}wrapCurve2dHandle(e){return wi(e)}createCurve2dAdaptor(e){Ga(`createCurve2dAdaptor`)}makeLine2d(e,t,n,r){return Ti(e,t,n,r)}makeCircle2d(e,t,n,r){return Ei(e,t,n,r)}makeArc2dThreePoints(e,t,n,r,i,a){return Di(e,t,n,r,i,a)}makeArc2dTangent(e,t,n,r,i,a){return Oi(e,t,n,r,i,a)}makeEllipse2d(e,t,n,r,i,a,o){return ki(e,t,n,r,i,a,o)}makeEllipseArc2d(e,t,n,r,i,a,o,s,c){return Ai(e,t,n,r,i,a,o,s,c)}makeBezier2d(e){return ji(e)}makeBSpline2d(e,t){return Mi(e)}evaluateCurve2d(e,t){return Ni(e,t)}evaluateCurve2dD1(e,t){return Pi(e,t)}getCurve2dBounds(e){return Fi(e)}getCurve2dType(e){return Ii(e)}trimCurve2d(e,t,n){return Li(e,t,n)}reverseCurve2d(e){}copyCurve2d(e){return Ri(e)}offsetCurve2d(e,t){return zi(e,t)}translateCurve2d(e,t,n){return Bi(e,t,n)}rotateCurve2d(e,t,n,r){return Vi(e,t,n,r)}scaleCurve2d(e,t,n,r){return Hi(e,t,n,r)}mirrorCurve2dAtPoint(e,t,n){return Ui(e,t,n)}mirrorCurve2dAcrossAxis(e,t,n,r,i){return Wi(e,t,n,r,i)}affinityTransform2d(e,t,n,r,i,a){return Ki(e,t,n,r,i,a)}createIdentityGTrsf2d(){return qi()}createAffinityGTrsf2d(e,t,n,r,i){return Ji(e,t,n,r,i)}createTranslationGTrsf2d(e,t){return Yi(e,t)}createMirrorGTrsf2d(e,t,n,r,i,a,o){return Xi(e,t,n,r,i,a,o)}createRotationGTrsf2d(e,t,n){return Zi(e,t,n)}createScaleGTrsf2d(e,t,n){return Qi(e,t,n)}setGTrsf2dTranslationPart(e,t,n){$i(e,t,n)}multiplyGTrsf2d(e,t){ea(e,t)}transformCurve2dGeneral(e,t){return ta(e,t)}intersectCurves2d(e,t,n){return na(e,t,n)}projectPointOnCurve2d(e,t,n){return ra(e,t,n)}distanceBetweenCurves2d(e,t,n,r,i,a){return ia(e,t,n,r,i,a)}approximateCurve2dAsBSpline(e,t,n,r){return aa(e,r)}decomposeBSpline2dToBeziers(e){return oa(e)}createBoundingBox2d(){return sa()}addCurveToBBox2d(e,t,n){ca(e,t,n)}getBBox2dBounds(e){return la(e)}mergeBBox2d(e,t){ua(e,t)}isBBox2dOut(e,t){return da(e,t)}isBBox2dOutPoint(e,t,n){return fa(e,t,n)}getCurve2dCircleData(e){return pa(e)}getCurve2dEllipseData(e){return ma(e)}getCurve2dBezierPoles(e){return ha(e)}getCurve2dBezierDegree(e){return ga(e)}getCurve2dBSplineData(e){Ga(`getCurve2dBSplineData`)}serializeCurve2d(e){return _a(e)}deserializeCurve2d(e){return va(e)}splitCurve2d(e,t){return ya(e,t)}liftCurve2dToPlane(e,t,n,r){return ba(this.k,this.Module,e,t,n,r)}buildEdgeOnSurface(e,t){return xa(this.k,this.Module,e,t)}extractSurfaceFromFace(e){return Sa(e)}extractCurve2dFromEdge(e,t){return Ca(this.k,e,t)}buildCurves3d(e){wa(this.k,e)}fixWireOnFace(e,t,n){return Ta(this.k,e,t,n)}fillSurface(e,t){Ga(`fillSurface`)}getNurbsCurveData(e){return en(this.k,e)}};function O(e){return{ok:!0,value:e}}function k(e){return{ok:!1,error:e}}var qa=O(void 0);function Ja(e){return e.ok}function A(e){return!e.ok}function Ya(e,t){return e.ok?O(t(e.value)):e}function Xa(e,t){return e.ok?e:k(t(e.error))}function Za(e,t){return e.ok?t(e.value):e}var Qa=Za;function $a(e,t){return e.ok?e:t}function eo(e,t){return e.ok?e:t(e.error)}function to(e,t){return e.ok?t.ok?O([e.value,t.value]):t:e}var no=mo;function ro(e,t){return e.ok&&t(e.value),e}function io(e,t){return e.ok||t(e.error),e}function ao(e){return e.ok?e.value:e}function oo(e,t,n){return e.ok?O(t(e.value)):k(n(e.error))}function so(e,t){return e==null?k(t()):O(e)}function co(e){if(typeof e==`object`&&e&&`kind`in e&&`code`in e&&`message`in e){let t=e;return`[${t.kind}] ${t.code}: ${t.message}`}return String(e)}function j(e){if(e.ok)return e.value;throw Error(`Called unwrap() on an Err: ${co(e.error)}`)}function lo(e,t){return e.ok?e.value:t}function uo(e,t){return e.ok?e.value:t(e.error)}function fo(e){if(!e.ok)return e.error;throw Error(`Called unwrapErr() on an Ok: ${String(e.value)}`)}function po(e,t){return e.ok?t.ok(e.value):t.err(e.error)}function mo(e){let t=[];for(let n of e){if(!n.ok)return n;t.push(n.value)}return O(t)}function ho(e,t){try{return O(e())}catch(e){return k(t(e))}}async function go(e,t){try{return O(await e())}catch(e){return k(t(e))}}function _o(e){function t(e){return typeof e==`object`&&!!e&&`ok`in e&&typeof e.ok==`boolean`}let n=t(e)?e:O(e);function r(e){return{then(t){return e.ok?r(t(e.value)):r(e)},get result(){return e}}}return r(n)}var vo=[{pattern:/invalid edge configuration|edges?.*(not|fail|invalid)/i,translation:`The edges may not form a continuous loop. Check that edges connect end-to-end without gaps.`},{pattern:/BRepAlgoAPI.*failed|boolean.*operation.*failed/i,translation:`Boolean operation failed. Common causes: overlapping faces, zero-thickness geometry, or degenerate shapes. Try healing input shapes first.`},{pattern:/fillet.*radius.*too.*large|fillet.*failed/i,translation:`Fillet operation failed. The radius may be too large for the selected edges. Try reducing the radius or check that edges have enough room.`},{pattern:/chamfer.*failed|chamfer.*distance.*too.*large/i,translation:`Chamfer operation failed. The distance may be too large for the selected edges. Try reducing the distance or check edge geometry.`},{pattern:/shell.*failed|offset.*failed/i,translation:`Shell/offset operation failed. The thickness may be too large, or the shape may have complex geometry. Try reducing thickness.`},{pattern:/sweep.*failed|pipe.*failed/i,translation:`Sweep operation failed. Check that the profile and spine are compatible, and that the spine has no sharp twists or self-intersections.`},{pattern:/loft.*failed/i,translation:`Loft operation failed. Profiles may be incompatible or have different orientations. Ensure profiles are ordered consistently.`},{pattern:/extrude.*failed|prism.*failed/i,translation:`Extrusion failed. The profile may be invalid or self-intersecting. Check that the profile forms a valid closed wire.`},{pattern:/revolve.*failed|revolution.*failed/i,translation:`Revolution operation failed. The profile may intersect the axis of revolution, or the angle may be invalid.`},{pattern:/self.*intersect|self-intersect/i,translation:`Shape has self-intersections. The operation resulted in overlapping geometry. Simplify the input or adjust parameters.`},{pattern:/degener|degenerat/i,translation:`Degenerate geometry detected. The shape has edges or faces with zero length/area. Check input geometry for collapsed elements.`},{pattern:/BRepCheck.*fail|shape.*invalid|shape.*not.*valid/i,translation:`Shape validation failed. The resulting shape has invalid topology. Try healing the shape or checking input geometry.`}],yo={FUSE_FAILED:`Try autoHeal() on both operands before the boolean operation. Check for overlapping faces or zero-thickness geometry.`,CUT_FAILED:`Try autoHeal() on both operands before the boolean operation. Check for overlapping faces or zero-thickness geometry.`,FUSE_NOT_3D:`The boolean result was not a 3D solid. Ensure both input shapes are valid 3D solids, not shells or open surfaces.`,CUT_NOT_3D:`The boolean result was not a 3D solid. Ensure both input shapes are valid 3D solids, not shells or open surfaces.`,INTERSECT_NOT_3D:`The boolean result was not a 3D solid. Ensure both input shapes are valid 3D solids, not shells or open surfaces.`,SWEEP_FAILED:`Ensure the spine curve has no sharp corners or self-intersections. Try simplifying the profile or using a smoother path.`,LOFT_FAILED:`Check that all profiles have the same number of edges and consistent orientation. Try reordering profiles.`,FILLET_NOT_3D:`The fillet radius may be too large for the selected edges. Try a smaller radius or check that adjacent faces have enough room.`,CHAMFER_NOT_3D:`The chamfer distance may be too large. Try a smaller distance or check edge geometry.`,SHELL_NOT_3D:`The shell thickness may be too large for the shape. Try reducing thickness or removing problematic faces.`,OFFSET_NOT_3D:`The offset distance may be too large for the shape geometry. Try a smaller distance.`,DRAFT_FAILED:`The draft angle may be too large or the selected faces incompatible. Try a smaller angle or different faces.`};function bo(e){return yo[e]}function xo(e){for(let{pattern:t,translation:n}of vo)if(t.test(e))return`${n} (kernel: ${e})`;return e}var M={BSPLINE_FAILED:`BSPLINE_FAILED`,FACE_BUILD_FAILED:`FACE_BUILD_FAILED`,SWEEP_FAILED:`SWEEP_FAILED`,LOFT_FAILED:`LOFT_FAILED`,FUSE_FAILED:`FUSE_FAILED`,CUT_FAILED:`CUT_FAILED`,HEAL_NO_EFFECT:`HEAL_NO_EFFECT`,BOOLEAN_HAS_ERRORS:`BOOLEAN_HAS_ERRORS`,VARIABLE_FILLET_FAILED:`VARIABLE_FILLET_FAILED`,POSITION_ON_CURVE_FAILED:`POSITION_ON_CURVE_FAILED`,FIX_SHAPE_FAILED:`FIX_SHAPE_FAILED`,SOLID_FROM_SHELL_FAILED:`SOLID_FROM_SHELL_FAILED`,FIX_SELF_INTERSECTION_FAILED:`FIX_SELF_INTERSECTION_FAILED`,ELLIPSE_RADII:`ELLIPSE_RADII`,FUSE_ALL_EMPTY:`FUSE_ALL_EMPTY`,FILLET_NO_EDGES:`FILLET_NO_EDGES`,CHAMFER_NO_EDGES:`CHAMFER_NO_EDGES`,CHAMFER_ANGLE_NO_EDGES:`CHAMFER_ANGLE_NO_EDGES`,CHAMFER_ANGLE_BAD_DISTANCE:`CHAMFER_ANGLE_BAD_DISTANCE`,CHAMFER_ANGLE_BAD_ANGLE:`CHAMFER_ANGLE_BAD_ANGLE`,BEZIER_MIN_POINTS:`BEZIER_MIN_POINTS`,POLYGON_MIN_POINTS:`POLYGON_MIN_POINTS`,ZERO_LENGTH_EXTRUSION:`ZERO_LENGTH_EXTRUSION`,ZERO_TWIST_ANGLE:`ZERO_TWIST_ANGLE`,LOFT_EMPTY:`LOFT_EMPTY`,UNSUPPORTED_PROFILE:`UNSUPPORTED_PROFILE`,UNKNOWN_PLANE:`UNKNOWN_PLANE`,NULL_SHAPE_INPUT:`NULL_SHAPE_INPUT`,INVALID_FILLET_RADIUS:`INVALID_FILLET_RADIUS`,INVALID_CHAMFER_DISTANCE:`INVALID_CHAMFER_DISTANCE`,INVALID_THICKNESS:`INVALID_THICKNESS`,ZERO_OFFSET:`ZERO_OFFSET`,NO_EDGES:`NO_EDGES`,NO_FACES:`NO_FACES`,DRAFT_NO_FACES:`DRAFT_NO_FACES`,DRAFT_INVALID_ANGLE:`DRAFT_INVALID_ANGLE`,DRAFT_NOT_3D:`DRAFT_NOT_3D`,DRAFT_FAILED:`DRAFT_FAILED`,FUSE_NOT_3D:`FUSE_NOT_3D`,CUT_NOT_3D:`CUT_NOT_3D`,INTERSECT_NOT_3D:`INTERSECT_NOT_3D`,FUSE_ALL_NOT_3D:`FUSE_ALL_NOT_3D`,CUT_ALL_NOT_3D:`CUT_ALL_NOT_3D`,LOFT_NOT_3D:`LOFT_NOT_3D`,SWEEP_NOT_3D:`SWEEP_NOT_3D`,REVOLUTION_NOT_3D:`REVOLUTION_NOT_3D`,FILLET_NOT_3D:`FILLET_NOT_3D`,CHAMFER_NOT_3D:`CHAMFER_NOT_3D`,CHAMFER_ANGLE_NOT_3D:`CHAMFER_ANGLE_NOT_3D`,CHAMFER_ANGLE_FAILED:`CHAMFER_ANGLE_FAILED`,CSG_NOT_3D:`CSG_NOT_3D`,SHELL_NOT_3D:`SHELL_NOT_3D`,OFFSET_NOT_3D:`OFFSET_NOT_3D`,NULL_SHAPE:`NULL_SHAPE`,NO_WRAPPER:`NO_WRAPPER`,WELD_NOT_SHELL:`WELD_NOT_SHELL`,SOLID_BUILD_FAILED:`SOLID_BUILD_FAILED`,OFFSET_NOT_WIRE:`OFFSET_NOT_WIRE`,UNKNOWN_SURFACE_TYPE:`UNKNOWN_SURFACE_TYPE`,UNKNOWN_CURVE_TYPE:`UNKNOWN_CURVE_TYPE`,SWEEP_START_NOT_WIRE:`SWEEP_START_NOT_WIRE`,SWEEP_END_NOT_WIRE:`SWEEP_END_NOT_WIRE`,STEP_EXPORT_FAILED:`STEP_EXPORT_FAILED`,STEP_EXPORT_CONFIGURED_FAILED:`STEP_EXPORT_CONFIGURED_FAILED`,STEP_FILE_READ_ERROR:`STEP_FILE_READ_ERROR`,STEP_EXPORT_CRASHED:`STEP_EXPORT_CRASHED`,STEP_EXPORT_UNSERIALIZABLE:`STEP_EXPORT_UNSERIALIZABLE`,STL_EXPORT_FAILED:`STL_EXPORT_FAILED`,STL_FILE_READ_ERROR:`STL_FILE_READ_ERROR`,STL_EXPORT_CRASHED:`STL_EXPORT_CRASHED`,STL_EXPORT_UNSERIALIZABLE:`STL_EXPORT_UNSERIALIZABLE`,STEP_IMPORT_FAILED:`STEP_IMPORT_FAILED`,STL_IMPORT_FAILED:`STL_IMPORT_FAILED`,IGES_EXPORT_FAILED:`IGES_EXPORT_FAILED`,IGES_IMPORT_FAILED:`IGES_IMPORT_FAILED`,DXF_IMPORT_FAILED:`DXF_IMPORT_FAILED`,OBJ_IMPORT_FAILED:`OBJ_IMPORT_FAILED`,THREEMF_IMPORT_FAILED:`THREEMF_IMPORT_FAILED`,PARAMETER_NOT_FOUND:`PARAMETER_NOT_FOUND`,INTERSECTION_FAILED:`INTERSECTION_FAILED`,SELF_INTERSECTION_FAILED:`SELF_INTERSECTION_FAILED`,STRAIGHT_SKELETON_FAILED:`STRAIGHT_SKELETON_FAILED`,CENTER_OF_MASS_FAILED:`CENTER_OF_MASS_FAILED`,COMPOUND_NO_FACES:`COMPOUND_NO_FACES`,COMPOUND_FACE_NOT_FOUND:`COMPOUND_FACE_NOT_FOUND`,FINDER_NOT_UNIQUE:`FINDER_NOT_UNIQUE`,HULL_EMPTY_INPUT:`HULL_EMPTY_INPUT`,HULL_FAILED:`HULL_FAILED`,HULL_DEGENERATE:`HULL_DEGENERATE`,HULL_NOT_3D:`HULL_NOT_3D`,MINKOWSKI_FAILED:`MINKOWSKI_FAILED`,MINKOWSKI_NULL_TOOL:`MINKOWSKI_NULL_TOOL`,MINKOWSKI_NOT_3D:`MINKOWSKI_NOT_3D`,POLYHEDRON_INSUFFICIENT_POINTS:`POLYHEDRON_INSUFFICIENT_POINTS`,POLYHEDRON_INSUFFICIENT_FACES:`POLYHEDRON_INSUFFICIENT_FACES`,POLYHEDRON_INVALID_INDEX:`POLYHEDRON_INVALID_INDEX`,POLYHEDRON_FAILED:`POLYHEDRON_FAILED`,VALIDATION_FAILED:`VALIDATION_FAILED`,ROOF_FAILED:`ROOF_FAILED`,MULTI_SWEEP_INSUFFICIENT_SECTIONS:`MULTI_SWEEP_INSUFFICIENT_SECTIONS`,MULTI_SWEEP_FAILED:`MULTI_SWEEP_FAILED`,GUIDED_SWEEP_FAILED:`GUIDED_SWEEP_FAILED`,SURFACE_GRID_TOO_SMALL:`SURFACE_GRID_TOO_SMALL`,SURFACE_GRID_JAGGED:`SURFACE_GRID_JAGGED`,SURFACE_FAILED:`SURFACE_FAILED`,ASSEMBLY_MATE_INVALID:`ASSEMBLY_MATE_INVALID`,ASSEMBLY_SOLVE_FAILED:`ASSEMBLY_SOLVE_FAILED`,ASSEMBLY_NOT_CONVERGED:`ASSEMBLY_NOT_CONVERGED`,BLUEPRINT_EMPTY_CURVES:`BLUEPRINT_EMPTY_CURVES`,COMPOUND_BLUEPRINT_EMPTY:`COMPOUND_BLUEPRINT_EMPTY`,GLB_IMPORT_FAILED:`GLB_IMPORT_FAILED`,FONT_FETCH_FAILED:`FONT_FETCH_FAILED`,FONT_PARSE_FAILED:`FONT_PARSE_FAILED`,NO_FONT_LOADED:`NO_FONT_LOADED`,CURVE2D_CONSTRUCTION_FAILED:`CURVE2D_CONSTRUCTION_FAILED`,CURVE2D_INVALID_RADIUS:`CURVE2D_INVALID_RADIUS`,CURVE2D_TRANSFORM_FAILED:`CURVE2D_TRANSFORM_FAILED`,CURVE2D_QUERY_FAILED:`CURVE2D_QUERY_FAILED`,CURVE2D_INTERSECTION_FAILED:`CURVE2D_INTERSECTION_FAILED`,CURVE2D_BRIDGE_FAILED:`CURVE2D_BRIDGE_FAILED`,CLONE_FAILED:`CLONE_FAILED`,SIMPLIFY_FAILED:`SIMPLIFY_FAILED`,TO_BREP_FAILED:`TO_BREP_FAILED`,UNSUPPORTED_CAPABILITY:`UNSUPPORTED_CAPABILITY`};function So(e,t,n,r,i,a){let o={kind:e,code:t,message:n,cause:r};if(a){let e={...o,suggestion:a};return i?{...e,metadata:i}:e}return i?{...o,metadata:i}:o}function N(e,t,n,r,i){return So(`KERNEL_OPERATION`,e,t,n,r,i)}function P(e,t,n,r,i){return So(`VALIDATION`,e,t,n,r,i)}function Co(e,t,n,r,i){return So(`TYPE_CAST`,e,t,n,r,i)}function wo(e,t,n,r,i){return So(`SKETCHER_STATE`,e,t,n,r,i)}function To(e,t,n,r,i){return So(`MODULE_INIT`,e,t,n,r,i)}function Eo(e,t,n,r,i){return So(`COMPUTATION`,e,t,n,r,i)}function Do(e,t,n,r,i){return So(`IO`,e,t,n,r,i)}function Oo(e,t,n,r,i){return So(`QUERY`,e,t,n,r,i)}function ko(e,t,n,r,i){return So(`UNSUPPORTED`,e,t,n,r,i)}function Ao(e,n,r){return(n<0||n>=e.length)&&i(r??`safeIndex`,`Index ${n} is out of bounds (array length ${e.length})`),t(e,n)}var jo={draft:{tolerance:.01,angularTolerance:.5},standard:{tolerance:.001,angularTolerance:.1},fine:{tolerance:1e-4,angularTolerance:.05}},Mo=`standard`;function No(){return Mo}function Po(e=Mo){return jo[e]}function Fo(e){Mo=e}function Io(e){return`makeLine2d`in e}var Lo=[`boolean`,`loft`,`extrude`,`shell`,`fillet`,`mesh`,`edgeMesh`,`transform`],Ro=Object.create(null),zo=Object.create(null);function Bo(){for(let e of Lo)Ro[e]=0,zo[e]=0}Bo();function Vo(e){let t=performance.now();return()=>{Ro[e]=(Ro[e]??0)+(performance.now()-t),zo[e]=(zo[e]??0)+1}}function Ho(){let e={};for(let t of Lo)e[t]={totalMs:Ro[t]??0,count:zo[t]??0};return e}function Uo(){Bo()}var Wo;function Go(){Wo=void 0}function Ko(e){return Wo??=typeof e.BooleanBatch==`function`,Wo}function qo(e){return e===`commonFace`?1:e===`sameFace`?2:0}function Jo(e,t,n={}){if(!Ko(e))return null;let r=Vo(`boolean`),i=new e.BooleanBatch;try{for(let e of t)i.addShape(e);return i.fuseAll(qo(n.optimisation),!!n.simplify,n.fuzzyValue??0)}finally{i.delete(),r()}}function Yo(e,t,n,r={}){if(!Ko(e))return null;if(n.length===0)return t;let i=Vo(`boolean`),a=new e.BooleanBatch;try{for(let e of n)a.addShape(e);return a.cutAll(t,qo(r.optimisation),!!r.simplify,r.fuzzyValue??0)}finally{a.delete(),i()}}var Xo=2147483647,Zo;function Qo(){Zo=void 0}function $o(e){return Zo??=typeof e.MeasurementExtractor?.extract==`function`,Zo}function es(e,t,n=!1){if($o(e)){let r=e.MeasurementExtractor.extract(t,n);try{let t=r.getDataPtr()/8,n=r.getDataSize(),i=e.HEAPF64.slice(t,t+n);return{volume:i[0]??0,area:i[1]??0,length:i[2]??0,centerOfMass:[i[3]??0,i[4]??0,i[5]??0],boundingBox:{min:[i[6]??0,i[7]??0,i[8]??0],max:[i[9]??0,i[10]??0,i[11]??0]}}}finally{r.delete()}}return{volume:ts(e,t),area:ns(e,t),length:n?rs(e,t):0,centerOfMass:is(e,t),boundingBox:os(e,t)}}function ts(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(t,n,!0,!1,!1);let r=n.Mass();return n.delete(),r}function ns(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.SurfaceProperties_2(t,n,1e-7,!0);let r=n.Mass();return n.delete(),r}function rs(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.LinearProperties(t,n,!0,!1);let r=n.Mass();return n.delete(),r}function is(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(t,n,!0,!1,!1);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function as(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.LinearProperties(t,n,!0,!1);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function os(e,t){let n=new e.Bnd_Box;e.BRepBndLib.Add(t,n,!0);let r={min:[n.GetXMin(),n.GetYMin(),n.GetZMin()],max:[n.GetXMax(),n.GetYMax(),n.GetZMax()]};return n.delete(),r}function ss(e,t,n){let r=new e.BRepExtrema_DistShapeShape_1;r.LoadS1(t),r.LoadS2(n);let i=new e.Message_ProgressRange_1;if(r.Perform(i),!r.IsDone())throw i.delete(),r.delete(),Error(`BRepExtrema_DistShapeShape failed`);let a=r.Value(),o=r.PointOnShape1(1),s=r.PointOnShape2(1),c={value:a,point1:[o.X(),o.Y(),o.Z()],point2:[s.X(),s.Y(),s.Z()]};return o.delete(),s.delete(),i.delete(),r.delete(),c}function cs(e,t,n,r,i=1e-6){if(!e.BRepClass_FaceClassifier)throw Error(`BRepClass_FaceClassifier not available in this WASM build`);let a=new e.gp_Pnt2d_3(n,r),o=new e.BRepClass_FaceClassifier_3(t,a,i),s=o.State();a.delete(),o.delete();let c=e.TopAbs_State;return s===c.TopAbs_IN?`in`:s===c.TopAbs_ON?`on`:`out`}function ls(e){return{volume:t=>ts(e,t),area:t=>ns(e,t),length:t=>rs(e,t),centerOfMass:t=>is(e,t),linearCenterOfMass:t=>as(e,t),boundingBox:t=>os(e,t),distance:(t,n)=>ss(e,t,n),classifyPointOnFace:(t,n,r,i)=>cs(e,t,n,r,i),measureBulk:(t,n)=>es(e,t,n)}}var us={vertex:7,edge:6,wire:5,face:4,shell:3,solid:2,compsolid:1,compound:0};function ds(e,t,n){let r=e.TopologyExtractor.extract(t,us[n]),i=r.getShapesCount(),a=[];for(let e=0;e<i;e++)a.push(r.getShape(e));return r.delete(),a}var fs=new WeakMap;function ps(e,t,n){let r=fs.get(e);if(!r){let t=e.TopAbs_ShapeEnum;r={vertex:t.TopAbs_VERTEX,edge:t.TopAbs_EDGE,wire:t.TopAbs_WIRE,face:t.TopAbs_FACE,shell:t.TopAbs_SHELL,solid:t.TopAbs_SOLID,compsolid:t.TopAbs_COMPSOLID,compound:t.TopAbs_COMPOUND},fs.set(e,r)}let i=new e.TopExp_Explorer_2(t,r[n],e.TopAbs_ShapeEnum.TopAbs_SHAPE),a=[],o=new Map;for(;i.More();){let t=i.Current(),n=e.shapeHashCode(t,Xo),r=o.get(n);r?r.some(e=>e.IsSame(t))||(r.push(t),a.push(t)):(o.set(n,[t]),a.push(t)),i.Next()}return i.delete(),a}function ms(e,t,n){return e.TopologyExtractor?ds(e,t,n):ps(e,t,n)}var hs=new WeakMap;function gs(e){let t=hs.get(e);if(!t){let n=e.TopAbs_ShapeEnum;t=new Map([[n.TopAbs_VERTEX,`vertex`],[n.TopAbs_EDGE,`edge`],[n.TopAbs_WIRE,`wire`],[n.TopAbs_FACE,`face`],[n.TopAbs_SHELL,`shell`],[n.TopAbs_SOLID,`solid`],[n.TopAbs_COMPSOLID,`compsolid`],[n.TopAbs_COMPOUND,`compound`]]),hs.set(e,t)}return t}function _s(e,t){if(t.IsNull())throw Error(`Cannot determine shape type: shape is null`);let n=gs(e).get(t.ShapeType());if(!n)throw Error(`Unknown shape type enum value`);return n}function vs(e,t){let n=new e.BRepCheck_Analyzer(t,!0,!1,!1),r=n.IsValid_2();return n.delete(),r}function ys(e,t,n=1e-6){let r=new e.BRepBuilderAPI_Sewing(n,!0,!0,!0,!1);for(let e of t)r.Add(e);let i=new e.Message_ProgressRange_1;r.Perform(i);let a=r.SewedShape();return i.delete(),r.delete(),a}function bs(e,t,n){if(e.TopTools_ListIteratorOfListOfShape){let r=new e.TopTools_ListIteratorOfListOfShape(t);for(;r.More();)n(r.Value()),r.Next();r.delete()}else{let r=new e.TopTools_ListOfShape_3(t);for(;r.Size()>0;)n(r.First_1()),r.RemoveFirst();r.delete()}}function xs(e,t){return e.IsSame(t)}function Ss(e,t){return e.IsEqual(t)}function Cs(e){return{iterShapes:(t,n)=>ms(e,t,n),iterShapeList:(t,n)=>{bs(e,t,n)},shapeType:t=>_s(e,t),isSame:(e,t)=>xs(e,t),isEqual:(e,t)=>Ss(e,t),isValid:t=>vs(e,t),sew:(t,n)=>ys(e,t,n)}}var ws=.001;function Ts(e,t,n){n===`commonFace`&&t.SetGlue(e.BOPAlgo_GlueEnum.BOPAlgo_GlueShift),n===`sameFace`&&t.SetGlue(e.BOPAlgo_GlueEnum.BOPAlgo_GlueFull)}function Es(e,t){e.SetRunParallel(!0),e.SetUseOBB?.(!0),t!==void 0&&t>0&&e.SetFuzzyValue?.(t)}function Ds(e,t){if(t.length<3)return 0;let n=t[0];if(!n)return 0;let r=new e.Bnd_Box;if(e.BRepBndLib.Add(n,r,!0),r.IsVoid())return r.delete(),0;let i=r.CornerMin(),a=r.CornerMax(),o=a.X()-i.X(),s=a.Y()-i.Y(),c=a.Z()-i.Z();return i.delete(),a.delete(),r.delete(),Math.sqrt(o*o+s*s+c*c)>1?1e-5:0}function Os(e,t){let n=new e.TopoDS_Builder,r=new e.TopoDS_Compound;n.MakeCompound(r);for(let e of t)n.Add(r,e);return n.delete(),r}function ks(e,t,n,r={}){let i=Vo(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Fuse_3(t,n,s);Ts(e,c,i),Es(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,ws);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function As(e,t,n,r={}){let i=Vo(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Cut_3(t,n,s);Ts(e,c,i),Es(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,ws);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function js(e,t,n,r={}){let i=Vo(`boolean`);try{let{optimisation:i,simplify:a=!1,fuzzyValue:o}=r,s=new e.Message_ProgressRange_1,c=new e.BRepAlgoAPI_Common_3(t,n,s);Ts(e,c,i),Es(c,o),c.Build(s),a&&c.SimplifyResult(!0,!0,ws);let l=c.Shape();return c.delete(),s.delete(),l}finally{i()}}function Ms(e,t,n,r=!0){let i=new e.Message_ProgressRange_1,a=new e.BRepAlgoAPI_Section_3(t,n,!1);if(a.Approximation(r),Es(a),a.Build(i),!a.IsDone())throw a.delete(),i.delete(),Error(`BRepAlgoAPI_Section build failed`);let o=a.Shape();return a.delete(),i.delete(),o}function Ns(e,t,n={}){let r=Jo(e,t,n);if(r!==null)return r;let i=Vo(`boolean`);try{let{optimisation:r,simplify:i=!1}=n,a=n.fuzzyValue??Ds(e,t),o=new e.TopTools_ListOfShape_1;for(let e of t)o.Append_1(e);let s=new e.BRepAlgoAPI_BuilderAlgo_1;s.SetArguments(o),Ts(e,s,r),Es(s,a);let c=new e.Message_ProgressRange_1;s.Build(c);let l=s.Shape();if(i){let t=new e.ShapeUpgrade_UnifySameDomain_2(l,!0,!0,!1);t.Build(),l=t.Shape(),t.delete()}return o.delete(),s.delete(),c.delete(),l}finally{i()}}function Ps(e,n,r,i,a){a.signal?.throwIfAborted();let o=i-r;if(o===1)return t(n,r);if(o===2)return ks(e,n[r],n[r+1],{...a,simplify:!1});let s=r+Math.ceil(o/2);return ks(e,Ps(e,n,r,s,a),Ps(e,n,s,i,a),{...a,simplify:!1})}function Fs(e,t,n={}){let r=Ps(e,t,0,t.length,n);if(n.simplify){let t=new e.ShapeUpgrade_UnifySameDomain_2(r,!0,!0,!1);t.Build();let n=t.Shape();return t.delete(),n}return r}function Is(e,n,r={}){if(n.length===0)throw Error(`fuseAll requires at least one shape`);if(n.length===1)return t(n,0);let{strategy:i=`native`}=r;return i===`pairwise`?Fs(e,n,r):Ns(e,n,r)}function Ls(e,t,n){if(!e.BRepAlgoAPI_Splitter)throw Error(`BRepAlgoAPI_Splitter not available in this WASM build`);let r=new e.TopTools_ListOfShape_1;r.Append_1(t);let i=new e.TopTools_ListOfShape_1;for(let e of n)i.Append_1(e);let a=new e.BRepAlgoAPI_Splitter;a.SetArguments(r),a.SetTools(i),Es(a);let o=new e.Message_ProgressRange_1;a.Build(o);let s=a.Shape();return a.delete(),o.delete(),r.delete(),i.delete(),s}function Rs(e,t,n,r={}){if(n.length===0)return t;let i=Yo(e,t,n,r);if(i!==null)return i;let a=Os(e,n),o=As(e,t,a,r);return a.delete(),o}function zs(e,t,n,r,i){let a=[];return t.IsNull()&&a.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),n.IsNull()&&a.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is null`}),a.length>0?{valid:!1,issues:a}:(i(t)||a.push({operand:`base`,issue:`not-valid`,message:`Base shape fails BRepCheck validation. Try autoHeal() first.`}),i(n)||a.push({operand:`tool`,issue:`not-valid`,message:`Tool shape fails BRepCheck validation. Try autoHeal() first.`}),{valid:a.length===0,issues:a})}function Bs(e){return{fuse:(t,n,r)=>ks(e,t,n,r),cut:(t,n,r)=>As(e,t,n,r),intersect:(t,n,r)=>js(e,t,n,r),section:(t,n,r)=>Ms(e,t,n,r),fuseAll:(t,n)=>Is(e,t,n),cutAll:(t,n,r)=>Rs(e,t,n,r),split:(t,n)=>Ls(e,t,n),checkBoolean:(t,n,r)=>zs(e,t,n,r,t=>vs(e,t))}}var Vs={fuse:0,cut:1,intersect:2};function Hs(e,t,n,r={}){let{glueMode:i=0,fuzzyValue:a=0}=r;if(typeof e.BooleanPipeline==`function`){let r=new e.BooleanPipeline;try{for(let e of n)r.addStep(Vs[e.op],e.tool);let e=r.execute(t,i,a);return e.IsNull()?null:e}finally{r.delete()}}}function Us(e){return{booleanPipeline:(t,n,r)=>Hs(e,t,n,r)??null}}function Ws(e,t,n,r){let i=new e.gp_Pnt_3(t,n,r),a=new e.BRepBuilderAPI_MakeVertex(i),o=a.Vertex();return a.delete(),i.delete(),o}function Gs(e,t,n,r){let i=n!==void 0&&r!==void 0?new e.BRepBuilderAPI_MakeEdge_24(t,n,r):new e.BRepBuilderAPI_MakeEdge_24(t),a=i.Edge();return i.delete(),a}function Ks(e,t){let n=new e.BRepBuilderAPI_MakeWire_1;for(let e of t)n.Add_1(e);let r=new e.Message_ProgressRange_1;n.Build(r);let i=n.Wire();return n.delete(),r.delete(),i}function qs(e,t,n=!0){if(n){let n=new e.BRepBuilderAPI_MakeFace_15(t,!1),r=n.Face();return n.delete(),r}let r=new e.BRepOffsetAPI_MakeFilling(3,15,2,!1,1e-5,1e-4,.01,.1,8,9),i=ms(e,t,`edge`);for(let t of i)r.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,!0);let a=new e.Message_ProgressRange_1;r.Build(a);let o=r.Shape();return r.delete(),a.delete(),o}function Js(e,t,n,r){let i=new e.BRepPrimAPI_MakeBox_2(t,n,r),a=i.Solid();return i.delete(),a}function Ys(e,t,n,r=[0,0,0],i=[0,0,1]){let a=new e.gp_Pnt_3(...r),o=new e.gp_Dir_5(...i),s=new e.gp_Ax2_4(a,o),c=new e.BRepPrimAPI_MakeCylinder_3(s,t,n),l=c.Shape();return c.delete(),s.delete(),a.delete(),o.delete(),l}function Xs(e,t,n=[0,0,0]){if(n[0]===0&&n[1]===0&&n[2]===0){let n=new e.BRepPrimAPI_MakeSphere_1(t),r=n.Shape();return n.delete(),r}let r=new e.gp_Pnt_3(...n),i=new e.BRepPrimAPI_MakeSphere_2(r,t),a=i.Shape();return i.delete(),r.delete(),a}function Zs(e,t,n,r,i=[0,0,0],a=[0,0,1]){let o=new e.gp_Pnt_3(...i),s=new e.gp_Dir_5(...a),c=new e.gp_Ax2_4(o,s),l=new e.BRepPrimAPI_MakeCone_3(c,t,n,r),u=l.Shape();return l.delete(),c.delete(),o.delete(),s.delete(),u}function Qs(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.BRepBuilderAPI_MakeEdge_3(i,a),c=new e.BRepBuilderAPI_MakeEdge_3(a,o),l=new e.BRepBuilderAPI_MakeEdge_3(o,i),u=new e.BRepBuilderAPI_MakeWire_1;u.Add_1(s.Edge()),u.Add_1(c.Edge()),u.Add_1(l.Edge());let d=null;if(u.IsDone()){let t=new e.BRepBuilderAPI_MakeFace_15(u.Wire(),!1);t.IsDone()&&(d=t.Face()),t.delete()}return u.delete(),s.delete(),c.delete(),l.delete(),i.delete(),a.delete(),o.delete(),d}function $s(e,t){let n=new e.BRepBuilderAPI_MakeWire_1;for(let r of t){let t=r.ShapeType();t===e.TopAbs_ShapeEnum.TopAbs_EDGE?n.Add_1(r):t===e.TopAbs_ShapeEnum.TopAbs_WIRE&&n.Add_2(r)}let r=new e.Message_ProgressRange_1;n.Build(r);let i=n.Wire();return n.delete(),r.delete(),i}function ec(e,t,n,r=[0,0,0],i=[0,0,1]){let a=new e.gp_Pnt_3(...r),o=new e.gp_Dir_5(...i),s=new e.gp_Ax2_4(a,o),c=new e.BRepPrimAPI_MakeTorus_5(s,t,n),l=c.Shape();return c.delete(),s.delete(),a.delete(),o.delete(),l}function tc(e){return{makeVertex:(t,n,r)=>Ws(e,t,n,r),makeEdge:(t,n,r)=>Gs(e,t,n,r),makeWire:t=>Ks(e,t),makeWireFromMixed:t=>$s(e,t),makeFace:(t,n)=>qs(e,t,n),makeBox:(t,n,r)=>Js(e,t,n,r),makeCylinder:(t,n,r,i)=>Ys(e,t,n,r,i),makeSphere:(t,n)=>Xs(e,t,n),makeCone:(t,n,r,i,a)=>Zs(e,t,n,r,i,a),makeTorus:(t,n,r,i)=>ec(e,t,n,r,i),buildTriFace:(t,n,r)=>Qs(e,t,n,r)}}function nc(e,t){let n=e[t];if(n===void 0)throw Error(`Index ${t} out of bounds`);return n}function rc(e,t,n){let r=[],i=Math.max(n,1);for(let n of t){new e.BRepMesh_IncrementalMeshWrapper(n,i,!1,i*.5,!1).delete();let t=new e.TopExp_Explorer_2(n,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;t.More();){let n=e.TopoDS_Cast.Face(t.Current()),i=new e.TopLoc_Location_1,a=e.BRep_Tool_Triangulation(n,i,0);if(!a.IsNull()){let e=i.Transformation(),t=a.get().NbNodes();for(let n=1;n<=t;n++){let t=a.get().Node(n),i=t.Transformed(e);r.push({x:i.X(),y:i.Y(),z:i.Z()}),i.delete(),t.delete()}e.delete()}i.delete(),t.Next()}t.delete()}return r}function ic(e,t,n){let{faces:r,points:i}=t,a=[];for(let[t,n,o]of r){let r=nc(i,t),s=nc(i,n),c=nc(i,o),l=Qs(e,[r.x,r.y,r.z],[s.x,s.y,s.z],[c.x,c.y,c.z]);l!==null&&a.push(l)}if(a.length<4)throw Error(`hull: only ${a.length} faces built, need at least 4 for a solid`);let o=Math.max(n,1e-4),s=new e.BRepBuilderAPI_Sewing(o,!0,!0,!0,!1);for(let e of a)s.Add(e);let c=new e.Message_ProgressRange_1;s.Perform(c),c.delete();let l=s.SewedShape();s.delete();let u=new e.TopExp_Explorer_2(l,e.TopAbs_ShapeEnum.TopAbs_SHELL,e.TopAbs_ShapeEnum.TopAbs_SHAPE);if(u.More()){let t=e.TopoDS_Cast.Shell(u.Current());u.delete();let n=new e.BRepBuilderAPI_MakeSolid_1;n.Add(t);let r=new e.Message_ProgressRange_1;if(n.Build(r),r.delete(),n.IsDone()){let r=n.Solid();n.delete(),t.delete();let i=new e.GProp_GProps_1;e.BRepGProp.VolumeProperties_1(r,i,!1,!1,!1);let a=i.Mass();return i.delete(),a<0&&r.Complement(),r}return t.delete(),n.delete(),l}return u.delete(),l}function ac(e,t,n){if(t.length===0)throw Error(`hull: no shapes provided`);let r=rc(e,t,n);if(r.length<4)throw Error(`hull: fewer than 4 vertices extracted from input shapes`);let i=x(r,n);if(i.faces.length<4)throw Error(`hull: degenerate hull (fewer than 4 faces)`);return ic(e,i,n)}function oc(e,t,n,r){return ic(e,{points:t,faces:n},r)}function sc(e,t,n){if(t.length<4)throw Error(`hullFromPoints: fewer than 4 points`);let r=x(t,n);if(r.faces.length<4)throw Error(`hullFromPoints: degenerate hull (fewer than 4 faces)`);return ic(e,r,n)}function cc(e){return{hull:(t,n)=>ac(e,t,n),hullFromPoints:(t,n)=>sc(e,t,n),buildSolidFromFaces:(t,n,r)=>oc(e,t,n,r)}}function lc(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepBuilderAPI_MakeEdge_3(r,i),o=a.Edge();return a.delete(),r.delete(),i.delete(),o}function uc(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Dir_5(n[0],n[1],n[2]),o=new e.gp_Ax2_4(i,a),s=new e.gp_Circ_2(o,r),c=new e.BRepBuilderAPI_MakeEdge_8(s),l=c.Edge();return c.delete(),s.delete(),o.delete(),a.delete(),i.delete(),l}function dc(e,t,n,r,i,a){let o=new e.gp_Pnt_3(t[0],t[1],t[2]),s=new e.gp_Dir_5(n[0],n[1],n[2]),c=new e.gp_Ax2_4(o,s),l=new e.gp_Circ_2(c,r),u=new e.BRepBuilderAPI_MakeEdge_9(l,i,a),d=u.Edge();return u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),d}function fc(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_4(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function pc(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Vec_4(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_5(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function mc(e,t,n,r,i,a){let o=new e.gp_Pnt_3(t[0],t[1],t[2]),s=new e.gp_Dir_5(n[0],n[1],n[2]),c;if(a){let t=new e.gp_Dir_5(a[0],a[1],a[2]);c=new e.gp_Ax2_2(o,s,t),t.delete()}else c=new e.gp_Ax2_4(o,s);let l=new e.gp_Elips_2(c,r,i),u=new e.BRepBuilderAPI_MakeEdge_12(l),d=u.Edge();return u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),d}function hc(e,t,n,r,i,a,o,s){let c=new e.gp_Pnt_3(t[0],t[1],t[2]),l=new e.gp_Dir_5(n[0],n[1],n[2]),u;if(s){let t=new e.gp_Dir_5(s[0],s[1],s[2]);u=new e.gp_Ax2_2(c,l,t),t.delete()}else u=new e.gp_Ax2_4(c,l);let d=new e.gp_Elips_2(u,r,i),f=new e.BRepBuilderAPI_MakeEdge_13(d,a,o),p=f.Edge();return f.delete(),d.delete(),u.delete(),l.delete(),c.delete(),p}function gc(e,n){let r=new e.TColgp_Array1OfPnt_2(1,n.length);for(let i=0;i<n.length;i++){let a=t(n,i),o=new e.gp_Pnt_3(a[0],a[1],a[2]);r.SetValue_1(i+1,o),o.delete()}let i=new e.Geom_BezierCurve_1(r),a=new e.Handle_Geom_Curve_2(i),o=new e.BRepBuilderAPI_MakeEdge_24(a),s=o.Edge();return o.delete(),a.delete(),r.delete(),s}function _c(e,t,n,r,i=[0,0,0],a=[0,0,1],o=!1){let s=e.HelixWireBuilder;if(typeof s?.build==`function`){let e=s.build(r,t,n,i[0],i[1],i[2],a[0],a[1],a[2],o);if(!e.IsNull())return e}let c=n/t,l=o?-2*Math.PI:2*Math.PI,u=new e.gp_Pnt_3(i[0],i[1],i[2]),d=new e.gp_Dir_5(a[0],a[1],a[2]),f=new e.gp_Ax3_5(u,d),p=new e.Geom_CylindricalSurface_1(f,r);f.delete();let m=new e.gp_Pnt2d_3(0,0),h=new e.gp_Dir2d_5(l,t),g=new e.Geom2d_Line_3(m,h),_=g.Value(0),v=g.Value(c*Math.sqrt((2*Math.PI)**2+t**2)),y=new e.GCE2d_MakeSegment_1(_,v),b=new e.Handle_Geom2d_Curve_2(y.Value().get()),x=new e.Handle_Geom_Surface_2(p),S=new e.BRepBuilderAPI_MakeEdge_30(b,x),C=S.Edge();e.BRepLib.BuildCurves3d_2(C);let w=new e.BRepBuilderAPI_MakeWire_2(C),ee=w.Wire();return w.delete(),S.delete(),b.delete(),x.delete(),_.delete(),v.delete(),g.delete(),m.delete(),h.delete(),d.delete(),u.delete(),ee}function vc(e,t,n,r){let i=Math.sqrt(t*n/r),a=t/i,o=n/i,s=new e.gp_Pnt_3(0,0,0),c=new e.gp_Dir_5(0,1,0),l=new e.gp_Ax1_2(s,c),u=new e.gp_Dir_5(0,0,1),d=new e.gp_Ax1_2(s,u),f=new e.gp_Dir_5(1,0,0),p=new e.gp_Ax1_2(s,f),m=new e.gp_GTrsf_1;m.SetAffinity_1(l,a);let h=new e.gp_GTrsf_1;h.SetAffinity_1(d,i);let g=new e.gp_GTrsf_1;return g.SetAffinity_1(p,o),m.Multiply(h),m.Multiply(g),h.delete(),g.delete(),l.delete(),d.delete(),p.delete(),c.delete(),u.delete(),f.delete(),s.delete(),{transform:m,applyToPoint(t){let n=t.XYZ();m.Transforms_1(n);let r=new e.gp_Pnt_2(n);return n.delete(),r}}}function yc(e,t,n,r){let i=new e.gp_Sphere_1;i.SetRadius(1);let a=new e.Geom_SphericalSurface_2(i),o=e.GeomConvert.SurfaceToBSplineSurface(a.UReversed()).get();i.delete(),a.delete();try{let i=vc(e,t,n,r),a=o.NbUPoles(),s=o.NbVPoles();for(let t=1;t<=a;t++)for(let n=1;n<=s;n++){let r=e.bsplineSurfacePole(o,t,n),a=i.applyToPoint(r);o.SetPole_1(t,n,a),r.delete(),a.delete()}i.transform.delete();let c=new e.BRepBuilderAPI_MakeShell_2(o.UReversed(),!1),l=c.Shell();c.delete();let u=new e.ShapeFix_Solid_1,d=u.SolidFromShell(l);return u.delete(),d}finally{o.delete()}}function bc(e,t){let n=new e.TopoDS_Builder,r=new e.TopoDS_Compound;n.MakeCompound(r);for(let e of t)n.Add(r,e);return n.delete(),r}function xc(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepPrimAPI_MakeBox_4(r,i),o=a.Solid();return a.delete(),r.delete(),i.delete(),o}function Sc(e,t){let n=new e.ShapeFix_Solid_1,r=n.SolidFromShell(e.TopoDS_Cast.Shell(t));return n.delete(),r}function Cc(e,t){return e.BRepToolsWrapper.Write(t)}function wc(e,t){return e.BRepToolsWrapper.Read(t)}function Tc(e,t,n={}){let r=n.unit??`MM`;e.Interface_Static.SetCVal(`xstep.cascade.unit`,r),e.Interface_Static.SetCVal(`write.step.unit`,r),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,5),new e.STEPCAFControl_Writer_1().delete();let i=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),a=new e.TDocStd_Document(i);i.delete();let o=a.Main(),s=e.XCAFDoc_DocumentTool.ShapeTool(o).get(),c=e.XCAFDoc_DocumentTool.ColorTool(o).get();e.XCAFDoc_ShapeTool.SetAutoNaming(!1);for(let n of t){let t=s.AddShape(n.shape,!1,!0),r=new e.TCollection_ExtendedString_2(n.name,!0);if(e.TDataStd_Name.Set_1(t,r),r.delete(),n.color){let[r,i,a,o]=n.color,s=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,o/255);c.SetColor_6(t,s,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),s.delete()}}let l=new e.XSControl_WorkSession,u=new e.Handle_XSControl_WorkSession_2(l),d=new e.STEPCAFControl_Writer_2(u,!1),f=new e.Handle_TDocStd_Document_2(a),p=new e.Message_ProgressRange_1;d.Transfer_1(f,e.STEPControl_StepModelType.STEPControl_AsIs,null,p),p.delete();let m=`assembly_export_${Date.now()}.step`,h=d.Write_1(m),g=``;if(h===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+m);g=new TextDecoder().decode(t),e.FS.unlink(`/`+m)}return d.delete(),u.delete(),f.delete(),a.delete(),g}function Ec(e,t){try{t.delete()}catch{}}function Dc(e,t,n){let r=lc(e,[0,0,0],[t,0,0]),i=lc(e,[t,0,0],[t,n,0]),a=lc(e,[t,n,0],[0,n,0]),o=lc(e,[0,n,0],[0,0,0]),s=new e.BRepBuilderAPI_MakeWire_1;s.Add_1(r),s.Add_1(i),s.Add_1(a),s.Add_1(o);let c=s.Wire();s.delete(),r.delete(),i.delete(),a.delete(),o.delete();let l=new e.BRepBuilderAPI_MakeFace_15(c,!1),u=l.Face();return l.delete(),u}function Oc(e,t,n,r){return new e.gp_Pnt_3(t,n,r)}function kc(e,t,n,r){return new e.gp_Dir_5(t,n,r)}function Ac(e,t,n,r){return new e.gp_Vec_4(t,n,r)}function jc(e,t,n,r,i,a,o){let s=new e.gp_Pnt_3(t,n,r),c=new e.gp_Dir_5(i,a,o),l=new e.gp_Ax1_2(s,c);return s.delete(),c.delete(),l}function Mc(e,t,n,r,i,a,o,s,c,l){let u=new e.gp_Pnt_3(t,n,r),d=new e.gp_Dir_5(i,a,o),f;if(s!==void 0&&c!==void 0&&l!==void 0){let t=new e.gp_Dir_5(s,c,l);f=new e.gp_Ax2_2(u,d,t),t.delete()}else f=new e.gp_Ax2_4(u,d);return u.delete(),d.delete(),f}function Nc(e,t,n,r,i,a,o,s,c,l){let u=new e.gp_Pnt_3(t,n,r),d=new e.gp_Dir_5(i,a,o),f;if(s!==void 0&&c!==void 0&&l!==void 0){let t=new e.gp_Dir_5(s,c,l);f=new e.gp_Ax3_3(u,d,t),t.delete()}else f=new e.gp_Ax3_5(u,d);return u.delete(),d.delete(),f}function Pc(e){return{makeLineEdge:(t,n)=>lc(e,t,n),makeCircleEdge:(t,n,r)=>uc(e,t,n,r),makeCircleArc:(t,n,r,i,a)=>dc(e,t,n,r,i,a),makeArcEdge:(t,n,r)=>fc(e,t,n,r),makeEllipseEdge:(t,n,r,i,a)=>mc(e,t,n,r,i,a),makeEllipseArc:(t,n,r,i,a,o,s)=>hc(e,t,n,r,i,a,o,s),makeBezierEdge:t=>gc(e,t),makeTangentArc:(t,n,r)=>pc(e,t,n,r),makeHelixWire:(t,n,r,i,a,o)=>_c(e,t,n,r,i,a,o),makeCompound:t=>bc(e,t),makeBoxFromCorners:(t,n)=>xc(e,t,n),makeRectangle:(t,n)=>Dc(e,t,n),solidFromShell:t=>Sc(e,t),makeEllipsoid:(t,n,r)=>yc(e,t,n,r),toBREP:t=>Cc(e,t),fromBREP:t=>wc(e,t),exportSTEPAssembly:(t,n)=>Tc(e,t,n??{}),dispose:t=>{Ec(e,t)},createPoint3d:(t,n,r)=>Oc(e,t,n,r),createDirection3d:(t,n,r)=>kc(e,t,n,r),createVector3d:(t,n,r)=>Ac(e,t,n,r),createAxis1:(t,n,r,i,a,o)=>jc(e,t,n,r,i,a,o),createAxis2:(t,n,r,i,a,o,s,c,l)=>Mc(e,t,n,r,i,a,o,s,c,l),createAxis3:(t,n,r,i,a,o,s,c,l)=>Nc(e,t,n,r,i,a,o,s,c,l)}}function Fc(e,t,n,r){let i=Vo(`extrude`);try{let i=new e.gp_Vec_4(n[0]*r,n[1]*r,n[2]*r),a=new e.BRepPrimAPI_MakePrism_1(t,i,!1,!0),o=a.Shape();return a.delete(),i.delete(),o}finally{i()}}function Ic(e,t,n,r){let i=new e.BRepPrimAPI_MakeRevol_1(t,n,r,!1),a=i.Shape();return i.delete(),a}function Lc(e,t,n=!1,r,i){let a=Vo(`loft`);try{let a=new e.BRepOffsetAPI_ThruSections(!0,n,1e-6);r&&a.AddVertex(r);for(let e of t)a.AddWire(e);i&&a.AddVertex(i);let o=new e.Message_ProgressRange_1;a.Build(o);let s=a.Shape();return a.delete(),o.delete(),s}finally{a()}}function Rc(e,t,n,r={}){let{transitionMode:i}=r,a=new e.BRepOffsetAPI_MakePipeShell(n);typeof a.SetIsBuildHistory==`function`&&a.SetIsBuildHistory(!1),i!==void 0&&a.SetTransitionMode(i),a.Add_1(t,!1,!1);let o=new e.Message_ProgressRange_1;if(a.Build(o),o.delete(),!a.IsDone())throw a.delete(),Error(`Sweep build failed (IsDone=false)`);a.MakeSolid();let s=a.Shape();return a.delete(),s}function zc(e,t,n){let r=new e.BRepOffsetAPI_MakePipe_1(n,t),i=new e.Message_ProgressRange_1;r.Build(i),i.delete();let a=r.Shape();if(a.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_SHELL){let t=new e.BRepBuilderAPI_MakeSolid_1,n=e.TopoDS_Cast.Shell(a);t.Add(n);let i=new e.Message_ProgressRange_1;t.Build(i),i.delete();let o=a;if(t.IsDone()){let n=t.Solid(),r=new e.BRepCheck_Analyzer(n,!0,!1,!1);r.IsValid_2()?o=n:n.delete(),r.delete()}return n.delete(),t.delete(),r.delete(),o}return r.delete(),a}var Bc,Vc;function Hc(){Bc=void 0}function Uc(){Vc=void 0}function Wc(e){return Bc??=typeof e.LoftBatch==`function`,Bc}function Gc(e){return Vc??=typeof e.ExtrudeBatch==`function`,Vc}function Kc(e,t){if(t.length===0)return[];if(Wc(e)){let n=Vo(`loft`),r=new e.LoftBatch;try{for(let e of t){let t=r.beginLoft(e.solid??!0,e.ruled??!1,e.tolerance??1e-6);e.startVertex&&r.setStartVertex(t,e.startVertex);for(let n of e.wires)r.addWire(t,n);e.endVertex&&r.setEndVertex(t,e.endVertex)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>Lc(e,t.wires,t.ruled??!1,t.startVertex,t.endVertex))}function qc(e,t){if(t.length===0)return[];if(Gc(e)){let n=Vo(`extrude`),r=new e.ExtrudeBatch;try{for(let e of t)r.addExtrude(e.face,e.direction[0]*e.length,e.direction[1]*e.length,e.direction[2]*e.length);let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>Fc(e,t.face,t.direction,t.length))}function Jc(e){return{extrude:(t,n,r)=>Fc(e,t,n,r),revolve:(t,n,r)=>Ic(e,t,n,r),loft:(t,n,r,i)=>Lc(e,t,n,r,i),sweep:(t,n,r)=>Rc(e,t,n,r??{}),simplePipe:(t,n)=>zc(e,t,n),loftBatch:t=>Kc(e,t),extrudeBatch:t=>qc(e,t)}}function Yc(e,t,n,r){let i=Vo(`fillet`);try{let i=new e.BRepFilletAPI_MakeFillet(t,e.ChFi3d_FilletShape.ChFi3d_Rational);for(let t of n){let n=typeof r==`function`?r(t):r,a=e.TopoDS_Cast.Edge(t);if(typeof n==`number`)n>0&&i.Add_2(n,a);else{let[e,t]=n;e>0&&t>0&&i.Add_3(e,t,a)}}let a=i.Shape();return i.delete(),a}finally{i()}}function Xc(e,t,n,r){let i=new e.BRepFilletAPI_MakeChamfer(t),a=null;function o(){if(a)return a;a=new Map;let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let t=e.TopoDS_Cast.Face(n.Current()),r=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;r.More();){let n=e.shapeHashCode(r.Current(),2147483647);a.has(n)||a.set(n,t),r.Next()}r.delete(),n.Next()}return n.delete(),a}function s(t){return o().get(e.shapeHashCode(t,2147483647))??null}for(let t of n){let n=typeof r==`function`?r(t):r,a=e.TopoDS_Cast.Edge(t);if(typeof n==`number`)n>0&&i.Add_2(n,a);else{let[e,r]=n;if(e>0&&r>0){let n=s(t);n&&i.Add_3(e,r,a,n)}}}let c=i.Shape();return i.delete(),c}function Zc(e,t,n,r,i=.001){let a=Vo(`shell`);try{let a=new e.TopTools_ListOfShape_1;for(let e of n)a.Append_1(e);let o=new e.Message_ProgressRange_1,s=new e.BRepOffsetAPI_MakeThickSolid;s.MakeThickSolidByJoin(t,a,-r,i,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,o);let c=s.Shape();return s.delete(),a.delete(),o.delete(),c}finally{a()}}function Qc(e,t,n){let r=new e.BRepOffsetAPI_MakeThickSolid;r.MakeThickSolidBySimple(t,n);let i=new e.Message_ProgressRange_1;r.Build(i);let a=r.Shape();return r.delete(),i.delete(),a}function $c(e,t,n,r,i){let a=new e.BRepFilletAPI_MakeChamfer(t),o=i*Math.PI/180,s=new Map,c=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;c.More();){let t=e.TopoDS_Cast.Face(c.Current()),n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let r=e.shapeHashCode(n.Current(),2147483647);s.has(r)||s.set(r,t),n.Next()}n.delete(),c.Next()}c.delete();for(let t of n){let n=s.get(e.shapeHashCode(t,2147483647))??null;n&&r>0&&a.AddDA(r,o,e.TopoDS_Cast.Edge(t),n)}let l=a.Shape();return a.delete(),l}function el(e,t,n,r){let i;i=typeof r==`string`?{arc:e.GeomAbs_JoinType.GeomAbs_Arc,intersection:e.GeomAbs_JoinType.GeomAbs_Intersection,tangent:e.GeomAbs_JoinType.GeomAbs_Tangent}[r]??e.GeomAbs_JoinType.GeomAbs_Arc:r??e.GeomAbs_JoinType.GeomAbs_Arc;let a=new e.BRepOffsetAPI_MakeOffset_3(t,i,!1);a.Perform(n,0);let o=a.Shape();return a.delete(),o}function tl(e,t,n,r=1e-6){let i=new e.Message_ProgressRange_1,a=new e.BRepOffsetAPI_MakeOffsetShape;a.PerformByJoin(t,n,r,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,i);let o=a.Shape();return a.delete(),i.delete(),o}var nl,rl;function il(){nl=void 0}function al(){rl=void 0}function ol(e){return nl??=typeof e.ShellBatch==`function`,nl}function sl(e){return rl??=typeof e.FilletBatch==`function`,rl}function cl(e,t){if(t.length===0)return[];if(ol(e)){let n=Vo(`shell`),r=new e.ShellBatch;try{for(let e of t){let t=r.beginShell(e.shape,e.thickness,e.tolerance??.001);for(let n of e.faces)r.addFaceToRemove(t,n)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>Zc(e,t.shape,t.faces,t.thickness,t.tolerance??.001))}function ll(e,t){if(t.length===0)return[];if(sl(e)){let n=Vo(`fillet`),r=new e.FilletBatch;try{for(let e of t){let t=r.beginFillet(e.shape);for(let n of e.edges)n.r2===void 0?r.addEdge(t,n.edge,n.radius):r.addEdgeVariable(t,n.edge,n.radius,n.r2)}let e=r.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{r.delete(),n()}}return t.map(t=>{let n=t.edges.map(e=>e.edge);return Yc(e,t.shape,n,e=>{let n=t.edges.find(t=>t.edge===e);return n?n.r2===void 0?n.radius:[n.radius,n.r2]:0})})}function ul(e){return{fillet:(t,n,r)=>Yc(e,t,n,r),chamfer:(t,n,r)=>Xc(e,t,n,r),chamferDistAngle:(t,n,r,i)=>$c(e,t,n,r,i),shell:(t,n,r,i)=>Zc(e,t,n,r,i),thicken:(t,n)=>Qc(e,t,n),offset:(t,n,r)=>tl(e,t,n,r),offsetWire2D:(t,n,r)=>el(e,t,n,r),shellBatch:t=>cl(e,t),filletBatch:t=>ll(e,t)}}var dl;function fl(){dl=void 0}function pl(e){return dl??=typeof e.TransformBatch==`function`,dl}function ml(e,t){if(t.length===0)return[];let n=Vo(`transform`);try{if(pl(e)){let n=new e.TransformBatch;try{for(let e of t)switch(e.type){case`translate`:n.addTranslate(e.shape,e.x,e.y,e.z);break;case`rotate`:n.addRotate(e.shape,e.angle*Math.PI/180,...e.axis,...e.center);break;case`scale`:n.addScale(e.shape,...e.center,e.factor);break;case`mirror`:n.addMirror(e.shape,...e.origin,...e.normal);break}let e=n.execute();try{let t=e.getShapesCount();return Array.from({length:t},(t,n)=>e.getShape(n))}finally{e.delete()}}finally{n.delete()}}return t.map(t=>{switch(t.type){case`translate`:return _l(e,t.shape,t.x,t.y,t.z);case`rotate`:return vl(e,t.shape,t.angle,[...t.axis],[...t.center]);case`scale`:return bl(e,t.shape,[...t.center],t.factor);case`mirror`:return yl(e,t.shape,[...t.origin],[...t.normal])}})}finally{n()}}function hl(e,t,n){let r=new e.BRepBuilderAPI_Transform_2(t,n,!0,!1),i=r.ModifiedShape(t);return r.delete(),i}function gl(e,t,n){let r=new e.BRepBuilderAPI_Transform_2(t,n,!1,!1);try{return r.ModifiedShape(t)}finally{r.delete()}}function _l(e,t,n,r,i){let a=new e.gp_Trsf_1,o=new e.gp_Vec_4(n,r,i);a.SetTranslation_1(o);let s=hl(e,t,a);return a.delete(),o.delete(),s}function vl(e,t,n,r=[0,0,1],i=[0,0,0]){let a=new e.gp_Trsf_1,o=new e.gp_Pnt_3(...i),s=new e.gp_Dir_5(...r),c=new e.gp_Ax1_2(o,s);a.SetRotation_1(c,n*Math.PI/180);let l=hl(e,t,a);return a.delete(),c.delete(),o.delete(),s.delete(),l}function yl(e,t,n,r){let i=new e.gp_Trsf_1,a=new e.gp_Pnt_3(...n),o=new e.gp_Dir_5(...r),s=new e.gp_Ax2_4(a,o);i.SetMirror_3(s);let c=hl(e,t,i);return i.delete(),s.delete(),a.delete(),o.delete(),c}function bl(e,t,n,r){let i=new e.gp_Trsf_1,a=new e.gp_Pnt_3(...n);i.SetScale(a,r);let o=hl(e,t,i);return i.delete(),a.delete(),o}function xl(e,t,n,r,i){if(i){let i=new e.gp_Trsf_1;i.SetValues(n[0],n[1],n[2],r[0],n[3],n[4],n[5],r[1],n[6],n[7],n[8],r[2]);let a=new e.BRepBuilderAPI_Transform_2(t,i,!0,!1),o=a.ModifiedShape(t);return a.delete(),i.delete(),o}let a=new e.gp_GTrsf_1;for(let e=0;e<3;e++)for(let t=0;t<3;t++)a.SetValue(e+1,t+1,n[e*3+t]);let o=new e.gp_XYZ_2(r[0],r[1],r[2]);a.SetTranslationPart(o),o.delete();let s=new e.BRepBuilderAPI_GTransform_2(t,a,!0),c=s.ModifiedShape(t);return s.delete(),a.delete(),c}function Sl(e,t){let n=new e.ShapeUpgrade_UnifySameDomain_2(t,!0,!0,!1);n.Build();let r=n.Shape();return n.delete(),r}function Cl(e){return{transform:(t,n)=>hl(e,t,n),locate:(t,n)=>gl(e,t,n),translate:(t,n,r,i)=>_l(e,t,n,r,i),rotate:(t,n,r,i)=>vl(e,t,n,r,i),mirror:(t,n,r)=>yl(e,t,n,r),scale:(t,n,r)=>bl(e,t,n,r),transformBatch:t=>ml(e,t),generalTransform:(t,n,r,i)=>xl(e,t,n,r,i),simplify:t=>Sl(e,t)}}function wl(e,t,n){if(n===0)return new Float32Array;let r=t/4;return e.slice(r,r+n)}function Tl(e,t,n){let r=Vo(`mesh`);try{let r=e.MeshExtractor.extract(t,n.tolerance,n.angularTolerance,!!n.skipNormals,!!n.includeUVs),i=r.getVerticesSize(),a=r.getNormalsSize(),o=r.getTrianglesSize(),s=r.getFaceGroupsSize(),c=r.getUvsSize(),l=wl(e.HEAPF32,r.getVerticesPtr(),i),u=n.skipNormals||a===0?new Float32Array:wl(e.HEAPF32,r.getNormalsPtr(),a),d=r.getTrianglesPtr()/4,f=e.HEAPU32.slice(d,d+o),p=c>0?wl(e.HEAPF32,r.getUvsPtr(),c):new Float32Array,m=[];if(s>0){let t=r.getFaceGroupsPtr()/4,n=e.HEAP32.slice(t,t+s);for(let e=0;e<n.length;e+=3)m.push({start:n[e],count:n[e+1],faceHash:n[e+2]})}return r.delete(),{vertices:l,normals:u,triangles:f,uvs:p,faceGroups:m}}finally{r()}}function El(e,t,n,r){let i=Vo(`edgeMesh`);try{let i=e.EdgeMeshExtractor.extract(t,n,r),a=i.getLinesSize(),o=i.getEdgeGroupsSize(),s=wl(e.HEAPF32,i.getLinesPtr(),a),c=[];if(o>0){let t=i.getEdgeGroupsPtr()/4,n=e.HEAP32.slice(t,t+o);for(let e=0;e<n.length;e+=3)c.push({start:n[e],count:n[e+1],edgeHash:n[e+2]})}return i.delete(),{lines:s,edgeGroups:c}}finally{i()}}function Dl(e){return{mesh:(t,n)=>Tl(e,t,n),meshEdges:(t,n,r)=>El(e,t,n,r)}}var Ol=0;function kl(e,t){return`${e}_${++Ol}.${t}`}function Al(e,t){let n=e.StepStreamIO;if(typeof n?.exportSTEP==`function`&&t.length===1)return n.exportSTEP(t[0],5);let r=new e.STEPControl_Writer_1;e.Interface_Static.SetIVal(`write.step.schema`,5),r.Model(!0).delete();let i=new e.Message_ProgressRange_1;for(let n of t)r.Transfer_1(n,e.STEPControl_StepModelType.STEPControl_AsIs,!0,i);let a=kl(`_export`,`step`),o=r.Write(a);if(r.delete(),i.delete(),o===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+a);return e.FS.unlink(`/`+a),new TextDecoder().decode(t)}throw Error(`STEP export failed: writer did not complete successfully`)}function jl(e,t,n=!1){let r=kl(`_export`,`stl`);if(e.StlAPI.Write(t,r,!n)){let t=e.FS.readFile(`/`+r);return e.FS.unlink(`/`+r),n?t.buffer:new TextDecoder().decode(t)}throw Error(`STL export failed: StlAPI.Write returned false`)}function Ml(e,t){let n=new e.IGESControl_Writer_1;for(let e of t)n.AddShape(e);n.ComputeModel();let r=kl(`_export`,`iges`),i=n.Write_2(r);if(n.delete(),i){let t=e.FS.readFile(`/`+r);return e.FS.unlink(`/`+r),new TextDecoder().decode(t)}throw Error(`IGES export failed: writer did not complete successfully`)}function Nl(e,t){let n=typeof t==`string`?t:new TextDecoder().decode(new Uint8Array(t)),r=e.StepStreamIO;if(typeof r?.importSTEP==`function`){let e=r.importSTEP(n);if(e.IsNull())throw Error(`Failed to import STEP file: stream reader could not parse the input data`);return[e]}let i=kl(`_import`,`step`),a=new TextEncoder().encode(n);e.FS.writeFile(`/`+i,a);let o=new e.STEPControl_Reader_1;if(o.ReadFile(i)){e.FS.unlink(`/`+i);let t=new e.Message_ProgressRange_1;o.TransferRoots(t),t.delete();let n=o.OneShape();return o.delete(),[n]}throw e.FS.unlink(`/`+i),o.delete(),Error(`Failed to import STEP file: reader could not parse the input data`)}function Pl(e,t){let n=kl(`_import`,`stl`),r=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);e.FS.writeFile(`/`+n,r);let i=new e.StlAPI_Reader,a=new e.TopoDS_Shape;if(i.Read_1(a,`/`+n)){e.FS.unlink(`/`+n);let t=new e.ShapeUpgrade_UnifySameDomain_2(a,!0,!0,!1);t.Build();let r=t.Shape(),o=new e.BRepBuilderAPI_MakeSolid_1;o.Add(e.TopoDS_Cast.Shell(r));let s=o.Solid();return a.delete(),t.delete(),o.delete(),i.delete(),s}throw e.FS.unlink(`/`+n),a.delete(),i.delete(),Error(`Failed to import STL file: reader could not parse the input data`)}function Fl(e,t){let n=kl(`_import`,`iges`),r=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);e.FS.writeFile(`/`+n,r);let i=new e.IGESControl_Reader_1;if(i.ReadFile(n)===e.IFSelect_ReturnStatus.IFSelect_RetDone){e.FS.unlink(`/`+n);let t=new e.Message_ProgressRange_1;i.TransferRoots(t),t.delete();let r=i.OneShape();return i.delete(),[r]}throw e.FS.unlink(`/`+n),i.delete(),Error(`Failed to import IGES file: reader could not parse the input data`)}function Il(e){return{exportSTEP:t=>Al(e,t),exportSTL:(t,n)=>jl(e,t,n),importSTEP:t=>Nl(e,t),importSTL:t=>Pl(e,t),exportIGES:t=>Ml(e,t),importIGES:t=>Fl(e,t)}}function Ll(e,t){let n=e.BRep_Tool.Pnt(t),r=[n.X(),n.Y(),n.Z()];return n.delete(),r}function Rl(e){let t=e.GeomAbs_SurfaceType;return new Map([[t.GeomAbs_Plane,`plane`],[t.GeomAbs_Cylinder,`cylinder`],[t.GeomAbs_Cone,`cone`],[t.GeomAbs_Sphere,`sphere`],[t.GeomAbs_Torus,`torus`],[t.GeomAbs_BezierSurface,`bezier`],[t.GeomAbs_BSplineSurface,`bspline`],[t.GeomAbs_SurfaceOfRevolution,`revolution`],[t.GeomAbs_SurfaceOfExtrusion,`extrusion`],[t.GeomAbs_OffsetSurface,`offset`],[t.GeomAbs_OtherSurface,`other`]])}var zl=new WeakMap;function Bl(e,t){let n=zl.get(e);n||(n=Rl(e),zl.set(e,n));let r=new e.BRepAdaptor_Surface_2(t,!1),i=r.GetType();return r.delete(),n.get(i)??`other`}function Vl(e,t){let n=e.BRepTools.UVBounds_1(t);return{uMin:n.UMin,uMax:n.UMax,vMin:n.VMin,vMax:n.VMax}}function Hl(e,t){return e.BRepTools.OuterWire(t)}function Ul(e,t,n,r){let i=new e.BRepGProp_Face_2(t,!1),a=new e.gp_Pnt_1,o=new e.gp_Vec_1;i.Normal(n,r,a,o);let s=[o.X(),o.Y(),o.Z()];return i.delete(),a.delete(),o.delete(),s}function Wl(e,t,n,r){let i=new e.BRepAdaptor_Surface_2(t,!1),a=new e.gp_Pnt_1;i.D0(n,r,a);let o=[a.X(),a.Y(),a.Z()];return i.delete(),a.delete(),o}function Gl(e,t,n){let r=e.BRep_Tool.Surface_2(t),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.GeomAPI_ProjectPointOnSurf_2(i,r,e.Extrema_ExtAlgo.Extrema_ExtAlgo_Grad),o=null;if(a.NbPoints()>0){let e=a.LowerDistanceParameters();o=[e.U,e.V]}return a.delete(),i.delete(),o}function Kl(e,t,n){let r=e.BRep_Tool.Surface_2(t),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.GeomAPI_ProjectPointOnSurf_2(i,r,e.Extrema_ExtAlgo.Extrema_ExtAlgo_Grad),o;if(a.NbPoints()>0){let e=a.NearestPoint();o=[e.X(),e.Y(),e.Z()],e.delete()}else o=n;return a.delete(),i.delete(),o}function ql(e,t,n){let r=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),i=new e.gp_Pnt_1,a=new e.gp_Vec_1;r.D1(n,i,a);let o={point:[i.X(),i.Y(),i.Z()],tangent:[a.X(),a.Y(),a.Z()]};return r.delete(),i.delete(),a.delete(),o}function Jl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=[n.FirstParameter(),n.LastParameter()];return n.delete(),r}function Yl(e,t,n){let r=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),i=r.Value(n),a=[i.X(),i.Y(),i.Z()];return i.delete(),r.delete(),a}function Xl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.IsClosed();return n.delete(),r}function Zl(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.IsPeriodic();return n.delete(),r}function Ql(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.Period();return n.delete(),r}function $l(e,t){let n=t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t),r=n.GetType();return n.delete(),{0:`LINE`,1:`CIRCLE`,2:`ELLIPSE`,3:`HYPERBOLA`,4:`PARABOLA`,5:`BEZIER_CURVE`,6:`BSPLINE_CURVE`,7:`OFFSET_CURVE`,8:`OTHER_CURVE`}[typeof r==`number`?r:Number(r?.value??r)]??`OTHER_CURVE`}function eu(e,t){let n=t.Orientation_1(),r=e.TopAbs_Orientation;return n===r.TopAbs_FORWARD?`forward`:n===r.TopAbs_REVERSED?`reversed`:n===r.TopAbs_INTERNAL?`internal`:`external`}function tu(e,t,n){switch(n??nu(e,t)){case`vertex`:return e.TopoDS_Cast.Vertex(t);case`edge`:return e.TopoDS_Cast.Edge(t);case`wire`:return e.TopoDS_Cast.Wire(t);case`face`:return e.TopoDS_Cast.Face(t);case`shell`:return e.TopoDS_Cast.Shell(t);case`solid`:return e.TopoDS_Cast.Solid(t);case`compsolid`:return e.TopoDS_Cast.CompSolid(t);default:return e.TopoDS_Cast.Compound(t)}}function nu(e,t){let n=t.ShapeType(),r=e.TopAbs_ShapeEnum;return n===r.TopAbs_VERTEX?`vertex`:n===r.TopAbs_EDGE?`edge`:n===r.TopAbs_WIRE?`wire`:n===r.TopAbs_FACE?`face`:n===r.TopAbs_SHELL?`shell`:n===r.TopAbs_SOLID?`solid`:n===r.TopAbs_COMPSOLID?`compsolid`:`compound`}function ru(e,t,n){return e.shapeHashCode(t,n)}function iu(e,t){return t.IsNull()}function au(e,t){return t.Reversed()}function ou(e,t){let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE),r=new e.TopLoc_Location_1,i=!1;for(;n.More();){let t=e.TopoDS_Cast.Face(n.Current());if(!e.BRep_Tool_Triangulation(t,r,0).IsNull()){i=!0;break}n.Next()}return n.delete(),r.delete(),i}function su(e,t,n,r){new e.BRepMesh_IncrementalMeshWrapper(t,n,!1,r,!1).delete()}function cu(e,t){let n=new e.BRepAdaptor_Curve_2(t);try{let e=n.Bezier().get(),t=e.NbPoles();if(t<2)return null;let r=e.Pole(t-1),i=[r.X(),r.Y(),r.Z()];return r.delete(),i}catch{return null}finally{n.delete()}}function lu(e,t){return t.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(t,!1):new e.BRepAdaptor_Curve_2(t)}function uu(e,t){let n=t.get();if(typeof n.Cylinder!=`function`)return null;let r=n.Cylinder(),i={radius:r.Radius(),isDirect:r.Direct()};return r.delete(),i}function du(e,t){let n=null;try{if(t===7)return e.AxeOfRevolution();if(t===1)n=e.Cylinder();else if(t===2)n=e.Cone();else if(t===4)n=e.Torus();else return null;let r=n.Axis();return n.delete(),r}catch{return n?.delete?.(),null}}function fu(e,t){let n=new e.BRepAdaptor_Surface_2(t,!1);try{let e=n.GetType(),t=du(n,typeof e==`number`?e:Number(e?.value??e));if(!t)return null;let r=null,i=null;try{return r=t.Location(),i=t.Direction(),{origin:[r.X(),r.Y(),r.Z()],direction:[i.X(),i.Y(),i.Z()]}}finally{r?.delete?.(),i?.delete?.(),t.delete()}}finally{n.delete()}}function pu(e,t){return t.get().UReversed()}function mu(e){return{vertexPosition:t=>Ll(e,t),surfaceType:t=>Bl(e,t),uvBounds:t=>Vl(e,t),outerWire:t=>Hl(e,t),surfaceNormal:(t,n,r)=>Ul(e,t,n,r),pointOnSurface:(t,n,r)=>Wl(e,t,n,r),uvFromPoint:(t,n)=>Gl(e,t,n),projectPointOnFace:(t,n)=>Kl(e,t,n),curveTangent:(t,n)=>ql(e,t,n),curveParameters:t=>Jl(e,t),shapeOrientation:t=>eu(e,t),downcast:(t,n)=>tu(e,t,n),copyShape:t=>tu(e,t),hashCode:(t,n)=>ru(e,t,n),isNull:t=>iu(e,t),hasTriangulation:t=>ou(e,t),meshShape:(t,n,r)=>{su(e,t,n,r)},getBezierPenultimatePole:t=>cu(e,t),createCurveAdaptor:t=>lu(e,t),reverseShape:t=>au(e,t),curvePointAtParam:(t,n)=>Yl(e,t,n),curveIsClosed:t=>Xl(e,t),curveIsPeriodic:t=>Zl(e,t),curvePeriod:t=>Ql(e,t),curveType:t=>$l(e,t),getSurfaceCylinderData:t=>uu(e,t),getSurfaceAxis:t=>fu(e,t),reverseSurfaceU:t=>pu(e,t)}}function hu(e,t){let n=new e.BRepAdaptor_Curve_2(t);try{let t=n.GetType(),r=typeof t==`number`?t:Number(t?.value??t),i=e.GeomAbs_CurveType,a=typeof i.GeomAbs_BSplineCurve==`number`?i.GeomAbs_BSplineCurve:Number(i.GeomAbs_BSplineCurve?.value??i.GeomAbs_BSplineCurve),o=typeof i.GeomAbs_BezierCurve==`number`?i.GeomAbs_BezierCurve:Number(i.GeomAbs_BezierCurve?.value??i.GeomAbs_BezierCurve);if(r!==a&&r!==o)return null;let s=n.BSpline(),c=s.get(),l=c.Degree(),u=c.NbPoles(),d=c.NbKnots(),f=c.IsPeriodic(),p=c.IsRational(),m=[];for(let e=1;e<=u;e++){let t=c.Pole(e);m.push([t.X(),t.Y(),t.Z()]),t.delete()}let h=[];for(let e=1;e<=u;e++)h.push(c.Weight(e));let g=[],_=[];for(let e=1;e<=d;e++)g.push(c.Knot(e)),_.push(c.Multiplicity(e));let v={degree:l,poles:m,weights:h,knots:g,multiplicities:_,isPeriodic:f,isRational:p};return s.delete(),v}catch{return null}finally{n.delete()}}function gu(e,t){let n=new e.BRepAdaptor_Surface_2(t,!1);try{let t=n.GetType(),r=typeof t==`number`?t:Number(t?.value??t),i=e.GeomAbs_SurfaceType;if(r!==(typeof i.GeomAbs_BSplineSurface==`number`?i.GeomAbs_BSplineSurface:Number(i.GeomAbs_BSplineSurface?.value??i.GeomAbs_BSplineSurface)))return null;let a=n.BSpline(),o=a.get(),s=o.UDegree(),c=o.VDegree(),l=o.NbUPoles(),u=o.NbVPoles(),d=o.IsUPeriodic(),f=o.IsVPeriodic(),p=o.IsURational()||o.IsVRational(),m=[],h=[];for(let e=1;e<=l;e++){let t=[],n=[];for(let r=1;r<=u;r++){let i=o.Pole(e,r);t.push([i.X(),i.Y(),i.Z()]),i.delete(),n.push(o.Weight(e,r))}m.push(t),h.push(n)}let g=o.NbUKnots(),_=[],v=[];for(let e=1;e<=g;e++)_.push(o.UKnot(e)),v.push(o.UMultiplicity(e));let y=o.NbVKnots(),b=[],x=[];for(let e=1;e<=y;e++)b.push(o.VKnot(e)),x.push(o.VMultiplicity(e));let S={degreeU:s,degreeV:c,nbPolesU:l,nbPolesV:u,poles:m,weights:h,knotsU:_,knotsV:b,multiplicitiesU:v,multiplicitiesV:x,isPeriodicU:d,isPeriodicV:f,isRational:p};return a.delete(),S}catch{return null}finally{n.delete()}}function _u(e){return{getNurbsCurveData:t=>hu(e,t),getNurbsSurfaceData:t=>gu(e,t)}}function vu(e,t,n={}){let{tolerance:r=1e-8}=n,i=new e.TColgp_Array1OfPnt_2(1,t.length),a=new e.gp_Pnt_1,o=1;for(let e of t)a.SetCoord_2(e[0],e[1],e[2]),i.SetValue_1(o++,a);a.delete();let s=new e.GeomAPI_PointsToBSpline_2(i,3,8,e.GeomAbs_Shape.GeomAbs_C2,r);if(i.delete(),!s.IsDone())throw s.delete(),Error(`Interpolation failed — GeomAPI_PointsToBSpline did not converge`);let c=s.Curve(),l=new e.Handle_Geom_Curve_2(c.get()),u=new e.BRepBuilderAPI_MakeEdge_24(l),d=u.Edge();return u.delete(),s.delete(),d}function yu(e,t,n={}){let{tolerance:r=.001,degMin:i=1,degMax:a=6,smoothing:o=null}=n,s=new e.TColgp_Array1OfPnt_2(1,t.length),c=new e.gp_Pnt_1,l=1;for(let e of t)c.SetCoord_2(e[0],e[1],e[2]),s.SetValue_1(l++,c);c.delete();let u;if(u=o?new e.GeomAPI_PointsToBSpline_5(s,o[0],o[1],o[2],a,e.GeomAbs_Shape.GeomAbs_C2,r):new e.GeomAPI_PointsToBSpline_2(s,i,a,e.GeomAbs_Shape.GeomAbs_C2,r),s.delete(),!u.IsDone())throw u.delete(),Error(`Approximation failed — GeomAPI_PointsToBSpline did not converge`);let d=u.Curve(),f=new e.Handle_Geom_Curve_2(d.get()),p=new e.BRepBuilderAPI_MakeEdge_24(f),m=p.Edge();return p.delete(),u.delete(),m}function bu(e){return{interpolatePoints:(t,n)=>vu(e,t,n??{}),approximatePoints:(t,n)=>yu(e,t,n??{})}}function xu(e,t){let n=new e.ShapeFix_Solid_2(t),r=new e.Message_ProgressRange_1;n.Perform(r),r.delete();let i=n.Solid();return n.delete(),i.IsNull()?null:i}function Su(e,t){let n=new e.ShapeFix_Face_2(t);n.Perform();let r=n.Face();return n.delete(),r}function Cu(e,t,n){let r;n?r=new e.ShapeFix_Wire_2(t,n,1e-6):(r=new e.ShapeFix_Wire_1,r.Load_1(t)),r.Perform();let i=r.Wire();return r.delete(),i}function wu(e){return{healSolid:t=>xu(e,t),healFace:t=>Su(e,t),healWire:(t,n)=>Cu(e,t,n)}}var Tu={modified:new Map,generated:new Map,deleted:new Set};function Eu(e,t,n){let r=new Map;if(n===0)return r;let i=e.slice(t/4,t/4+n),a=0;for(;a+1<i.length;){let e=i[a++],t=i[a++];if(t<0||a+t>i.length)break;let n=[];for(let e=0;e<t;e++)n.push(i[a++]);r.set(e,n)}return r}function Du(e,t){try{let n=Eu(e.HEAP32,t.getModifiedPtr(),t.getModifiedSize()),r=Eu(e.HEAP32,t.getGeneratedPtr(),t.getGeneratedSize()),i=new Set,a=t.getDeletedSize();if(a>0){let n=t.getDeletedPtr()/4,r=e.HEAP32.slice(n,n+a);for(let e=0;e<r.length;e++)i.add(r[e])}return{modified:n,generated:r,deleted:i}}finally{t.delete()}}function Ou(e,t,n){let r=[];if(t.Size()===0)return r;if(e.TopTools_ListIteratorOfListOfShape){let i=new e.TopTools_ListIteratorOfListOfShape(t);for(;i.More();)r.push(e.shapeHashCode(i.Value(),n)),i.Next();i.delete()}else{let i=new e.TopTools_ListOfShape_3(t);for(;i.Size()>0;)r.push(e.shapeHashCode(i.First_1(),n)),i.RemoveFirst();i.delete()}return r}function ku(e,t,n,r,i){if(r.length===0)return Tu;let a=Array.isArray(n)?n:[n];if(e.EvolutionExtractor){let n,r,o;if(a.length===1)n=a[0];else{r=new e.TopoDS_Builder,o=new e.TopoDS_Compound,r.MakeCompound(o);for(let e of a)r.Add(o,e);n=o}let s;try{s=e.EvolutionExtractor.extract(t,n,i)}catch{}finally{r?.delete(),o?.delete()}if(s!==void 0)return Du(e,s)}let o=new Map,s=new Map,c=new Set,l=new Set(r),u=new Map;for(let t of a){let n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();){let t=n.Current(),r=e.shapeHashCode(t,i);l.has(r)&&u.set(r,t),n.Next()}n.delete()}for(let[n,r]of u){if(t.IsDeleted?.(r)){c.add(n);continue}let a=t.Modified(r);a.Size()>0&&o.set(n,Ou(e,a,i));let l=t.Generated(r);l.Size()>0&&s.set(n,Ou(e,l,i))}return{modified:o,generated:s,deleted:c}}function Au(e,t,n,r,i){let a=new e.BRepBuilderAPI_Transform_2(t,n,!0,!1),o=a.Shape(),s=r.length===0?Tu:ku(e,a,t,r,i);return a.delete(),{shape:o,evolution:s}}function ju(e,t,n,r,i,a,o){return a&&t.SimplifyResult(!0,!0,.001),{shape:t.Shape(),evolution:ku(e,t,n,r,i),diagnostics:o??{hasErrors:!1,hasWarnings:!1,messages:[]}}}function Mu(e,t,n,r,i){return{shape:t.Shape(),evolution:ku(e,t,n,r,i)}}function Nu(e,t,n,r,i,a,o){let s=new e.gp_Trsf_1,c=new e.gp_Vec_4(n,r,i);s.SetTranslation_1(c),c.delete();let l=Au(e,t,s,a,o);return s.delete(),l}function Pu(e,t,n,r,i,a=[0,0,1],o=[0,0,0]){let s=new e.gp_Trsf_1,c=new e.gp_Pnt_3(o[0],o[1],o[2]),l=new e.gp_Dir_5(a[0],a[1],a[2]),u=new e.gp_Ax1_2(c,l);s.SetRotation_1(u,n),c.delete(),l.delete(),u.delete();let d=Au(e,t,s,r,i);return s.delete(),d}function Fu(e,t,n,r,i,a){let o=new e.gp_Trsf_1,s=new e.gp_Pnt_3(n[0],n[1],n[2]),c=new e.gp_Dir_5(r[0],r[1],r[2]),l=new e.gp_Ax2_4(s,c);o.SetMirror_3(l),s.delete(),c.delete(),l.delete();let u=Au(e,t,o,i,a);return o.delete(),u}function Iu(e,t,n,r,i,a){let o=new e.gp_Trsf_1,s=new e.gp_Pnt_3(n[0],n[1],n[2]);o.SetScale(s,r),s.delete();let c=Au(e,t,o,i,a);return o.delete(),c}function Lu(e,t,n,r,i,a,o){let s=new e.gp_Trsf_1;s.SetValues(n[0],n[1],n[2],r[0],n[3],n[4],n[5],r[1],n[6],n[7],n[8],r[2]);let c=Au(e,t,s,a,o);return s.delete(),c}function Ru(e){return{hasErrors:e.HasErrors(),hasWarnings:e.HasWarnings(),messages:[]}}function zu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Fuse_3(t,n,o);Ts(e,s,a.optimisation),Es(s,a.fuzzyValue),s.Build(o);let c=Ru(s),l=ju(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function Bu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Cut_3(t,n,o);Ts(e,s,a.optimisation),Es(s,a.fuzzyValue),s.Build(o);let c=Ru(s),l=ju(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function Vu(e,t,n,r,i,a={}){let o=new e.Message_ProgressRange_1,s=new e.BRepAlgoAPI_Common_3(t,n,o);Ts(e,s,a.optimisation),Es(s,a.fuzzyValue),s.Build(o);let c=Ru(s),l=ju(e,s,[t,n],r,i,a.simplify??!1,c);return s.delete(),o.delete(),l}function Hu(e,t,n,r,i,a){let o=new e.BRepFilletAPI_MakeFillet(t,e.ChFi3d_FilletShape.ChFi3d_Rational);for(let t of n){let n=typeof r==`function`?r(t):r;Array.isArray(n)?o.Add_3(n[0],n[1],e.TopoDS_Cast.Edge(t)):o.Add_2(n,e.TopoDS_Cast.Edge(t))}let s=new e.Message_ProgressRange_1;o.Build(s),s.delete();let c=Mu(e,o,t,i,a);return o.delete(),c}function Uu(e,t,n,r,i,a){let o=new e.BRepFilletAPI_MakeChamfer(t),s=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_FACE,e.TopAbs_ShapeEnum.TopAbs_SHAPE),c=new Map;for(;s.More();){let t=e.TopoDS_Cast.Face(s.Current()),n=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;n.More();)c.set(e.shapeHashCode(n.Current(),a),t),n.Next();n.delete(),s.Next()}s.delete();for(let t of n){let n=typeof r==`function`?r(t):r,i=c.get(e.shapeHashCode(t,a));if(Array.isArray(n)&&i)o.Add_3(n[0],n[1],e.TopoDS_Cast.Edge(t),i);else{let r=Array.isArray(n)?n[0]:n;o.Add_2(r,e.TopoDS_Cast.Edge(t))}}let l=new e.Message_ProgressRange_1;o.Build(l),l.delete();let u=Mu(e,o,t,i,a);return o.delete(),u}function Wu(e,t,n,r,i,a,o=.001){let s=new e.BRepOffsetAPI_MakeThickSolid,c=new e.TopTools_ListOfShape_1;for(let e of n)c.Append_1(e);let l=new e.Message_ProgressRange_1;s.MakeThickSolidByJoin(t,c,-r,o,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,l),l.delete(),c.delete();let u=Mu(e,s,t,i,a);return s.delete(),u}function Gu(e,t,n,r,i){let a=new e.BRepOffsetAPI_MakeThickSolid;a.MakeThickSolidBySimple(t,n);let o=new e.Message_ProgressRange_1;a.Build(o),o.delete();let s=Mu(e,a,t,r,i);return a.delete(),s}function Ku(e,t,n,r,i,a=1e-6){let o=new e.BRepOffsetAPI_MakeOffsetShape,s=new e.Message_ProgressRange_1;o.PerformByJoin(t,n,a,e.BRepOffset_Mode.BRepOffset_Skin,!1,!1,e.GeomAbs_JoinType.GeomAbs_Arc,!1,s),s.delete();let c=Mu(e,o,t,r,i);return o.delete(),c}function qu(e,t,n,r,i,a,o,s){if(!e.BRepOffsetAPI_DraftAngle)throw Error(`BRepOffsetAPI_DraftAngle not available in this WASM build. Rebuild brepjs-opencascade with the updated build config.`);let[c,l,u]=r,[d,f,p]=i,m=new e.gp_Dir_5(c,l,u),h=new e.gp_Pnt_3(d,f,p),g=new e.gp_Pln_3(h,m),_=new e.BRepOffsetAPI_DraftAngle_2(t);try{for(let t of n){let n=(typeof a==`function`?a(t):a)*Math.PI/180;_.Add(e.TopoDS_Cast.Face(t),m,n,g,!0)}let r=new e.Message_ProgressRange_1;return _.Build(r),r.delete(),Mu(e,_,t,o,s)}finally{_.delete(),g.delete(),h.delete(),m.delete()}}function Ju(e){return{translateWithHistory:(t,n,r,i,a,o)=>Nu(e,t,n,r,i,a,o),rotateWithHistory:(t,n,r,i,a,o)=>Pu(e,t,n,r,i,a,o),mirrorWithHistory:(t,n,r,i,a)=>Fu(e,t,n,r,i,a),scaleWithHistory:(t,n,r,i,a)=>Iu(e,t,n,r,i,a),generalTransformWithHistory:(t,n,r,i,a,o)=>Lu(e,t,n,r,i,a,o),fuseWithHistory:(t,n,r,i,a)=>zu(e,t,n,r,i,a),cutWithHistory:(t,n,r,i,a)=>Bu(e,t,n,r,i,a),intersectWithHistory:(t,n,r,i,a)=>Vu(e,t,n,r,i,a),filletWithHistory:(t,n,r,i,a)=>Hu(e,t,n,r,i,a),chamferWithHistory:(t,n,r,i,a)=>Uu(e,t,n,r,i,a),shellWithHistory:(t,n,r,i,a,o)=>Wu(e,t,n,r,i,a,o),thickenWithHistory:(t,n,r,i)=>Gu(e,t,n,r,i),offsetWithHistory:(t,n,r,i,a)=>Ku(e,t,n,r,i,a),draftWithHistory:(t,n,r,i,a,o,s)=>qu(e,t,n,r,i,a,o,s)}}function Yu(e,t,n,r){let i=new e.gp_GTrsf_1;for(let e=0;e<3;e++)for(let t=0;t<3;t++)i.SetValue(e+1,t+1,n[e*3+t]);let a=new e.gp_XYZ_2(r[0],r[1],r[2]);i.SetTranslationPart(a),a.delete();let o=new e.BRepBuilderAPI_GTransform_2(t,i,!0),s=o.Shape();return o.delete(),i.delete(),s}function Xu(e,t){let n=new e.gp_Trsf_1;for(let r of t){let t=new e.gp_Trsf_1;if(r.type===`translate`){let n=new e.gp_Vec_4(r.x,r.y,r.z);t.SetTranslation_1(n),n.delete()}else{let n=r.axis??[0,0,1],i=r.center??[0,0,0],a=new e.gp_Pnt_3(i[0],i[1],i[2]),o=new e.gp_Dir_5(n[0],n[1],n[2]),s=new e.gp_Ax1_2(a,o);t.SetRotation_1(s,r.angle*Math.PI/180),s.delete(),o.delete(),a.delete()}n.PreMultiply(t),t.delete()}return{handle:n,dispose:()=>n.delete()}}function Zu(e,t,n,r,i){return Au(e,t,n,r,i)}function Qu(e,t){if(!t)return;let n=e.BRepBuilderAPI_TransitionMode;switch(t){case`transformed`:return n.BRepBuilderAPI_Transformed;case`round`:return n.BRepBuilderAPI_RoundCorner;case`right`:return n.BRepBuilderAPI_RightCorner}}function $u(e,t,n,r={}){let i=new e.BRepOffsetAPI_MakePipeShell(n);typeof i.SetIsBuildHistory==`function`&&i.SetIsBuildHistory(!1),r.tolerance!==void 0&&i.SetTolerance(r.tolerance,r.boundTolerance??r.tolerance,r.angularTolerance??1e-7),r.maxDegree!==void 0&&i.SetMaxDegree(r.maxDegree),r.maxSegments!==void 0&&i.SetMaxSegments(r.maxSegments);let a=Qu(e,r.transitionMode);a!==void 0&&i.SetTransitionMode(a),r.support?i.SetMode_4(r.support):r.frenet&&i.SetMode_1(!0),r.auxiliary&&i.SetMode_5(r.auxiliary,!1,e.BRepFill_TypeOfContact.BRepFill_NoContact);let o=!!r.contact,s=!!r.correction;r.law?i.SetLaw_1(t,r.law,o,s):i.Add_1(t,o,s);let c=new e.Message_ProgressRange_1;if(i.Build(c),c.delete(),!i.IsDone())throw i.delete(),Error(`Sweep pipe shell build failed (IsDone=false)`);if(r.shellMode){let e=i.Shape(),t=i.FirstShape(),n=i.LastShape();return i.delete(),{shape:e,firstShape:t,lastShape:n}}i.MakeSolid();let l=i.Shape();return i.delete(),l}function ed(e,t,n={}){let r=n.solid??!0,i=n.ruled??!1,a=new e.BRepOffsetAPI_ThruSections(r,i,n.tolerance??1e-6);n.startVertex&&a.AddVertex(n.startVertex);for(let e of t)a.AddWire(e);n.endVertex&&a.AddVertex(n.endVertex);let o=new e.Message_ProgressRange_1;a.Build(o),o.delete();let s=a.Shape();return a.delete(),s}function td(e,t,n,r){if(t===`linear`){let t=new e.Law_Linear;return t.Set(0,1,n,r),t}let i=new e.Law_S;return i.Set_1(0,1,n,r),i}function nd(e,t,n,r,i){let a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Dir_5(r[0],r[1],r[2]),s=new e.gp_Ax1_2(a,o),c=new e.BRepPrimAPI_MakeRevol_1(t,s,i,!1),l=c.Shape();return c.delete(),s.delete(),o.delete(),a.delete(),l}function rd(e,t,n,r,i){let a=[],o=new e.gp_Trsf_1;for(let s=0;s<i;s++){let i=n[0]*r*s,c=n[1]*r*s,l=n[2]*r*s,u=new e.gp_Vec_4(i,c,l);o.SetTranslation_1(u),u.delete();let d=new e.BRepBuilderAPI_Transform_2(t,o,!0,!1);a.push(d.Shape()),d.delete()}return o.delete(),a}function id(e,t,n,r,i,a){let o=[],s=new e.gp_Pnt_3(n[0],n[1],n[2]),c=new e.gp_Dir_5(r[0],r[1],r[2]),l=new e.gp_Ax1_2(s,c),u=new e.gp_Trsf_1;for(let n=0;n<a;n++){let r=i*n*Math.PI/180;u.SetRotation_1(l,r);let a=new e.BRepBuilderAPI_Transform_2(t,u,!0,!1);o.push(a.Shape()),a.delete()}return u.delete(),l.delete(),c.delete(),s.delete(),o}function ad(e,t,n,r){let i=n.ShapeType()===e.TopAbs_ShapeEnum.TopAbs_WIRE?new e.BRepAdaptor_CompCurve_2(n,!1):new e.BRepAdaptor_Curve_2(n),a=new e.gp_Pnt_1,o=new e.gp_Vec_1;try{i.D1(r,a,o);let n=new e.gp_Dir_2(o),s=new(e.gp_Ax3_5??e.gp_Ax3_4)(a,n),c=new e.gp_Trsf_1;c.SetTransformation_2(s),c.Invert();let l=new e.BRepBuilderAPI_Transform_2(t,c,!0,!1),u=l.Shape();return l.delete(),c.delete(),s.delete(),n.delete(),u}finally{o.delete(),a.delete(),i.delete()}}function od(e,t){let n=new e.BRepOffsetAPI_MakeFilling(3,15,2,!1,1e-5,1e-4,.01,.1,8,9),r=new e.TopExp_Explorer_2(t,e.TopAbs_ShapeEnum.TopAbs_EDGE,e.TopAbs_ShapeEnum.TopAbs_SHAPE);for(;r.More();){let t=e.TopoDS_Cast.Edge(r.Current());n.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,!0),r.Next()}r.delete();let i=new e.Message_ProgressRange_1;n.Build(i),i.delete();let a=n.Shape();return n.delete(),a}function sd(e,t,n){let r=new e.BRepBuilderAPI_MakeFace_2(t);for(let e of n)r.Add(e);let i=r.Face();r.delete();let a=new e.ShapeFix_Face_2(i);a.FixOrientation_1(),a.Perform();let o=a.Face();return a.delete(),o}function cd(e,t){let n=e.BRepTools.OuterWire(t),r=e.BRep_Tool.Surface_2(t);try{let t=new e.BRepBuilderAPI_MakeFace_21(r,n,!0),i=t.Face();t.delete();let a=new e.ShapeFix_Face_2(i);a.FixOrientation_1(),a.Perform();let o=a.Face();return a.delete(),o}finally{r.delete(),n.delete()}}function ld(e,t,n){let r=t,i=!1;try{t.ShapeType!==void 0&&(r=e.BRep_Tool.Surface_2(t),i=!0)}catch{}let a=new e.BRepBuilderAPI_MakeFace_21(r,n,!0),o=a.Face();return a.delete(),i&&r.delete(),o}function ud(e,n,r,i){let a=new e.TColgp_Array2OfPnt_2(1,r,1,i);for(let o=0;o<r;o++)for(let r=0;r<i;r++){let s=t(n,o*i+r),c=new e.gp_Pnt_3(s[0],s[1],s[2]);a.SetValue_1(o+1,r+1,c),c.delete()}let o=new e.GeomAPI_PointsToBSplineSurface_2(a,3,8,e.GeomAbs_Shape.GeomAbs_C2,.001),s=o.Surface();a.delete();let c=new e.BRepBuilderAPI_MakeFace_8(s,1e-6),l=c.Face();return c.delete(),o.delete(),l}function dd(e,n,r,i){let a=new e.BRepBuilderAPI_Sewing(1e-6,!0,!0,!0,!1);for(let o=0;o<r-1;o++)for(let r=0;r<i-1;r++){let s=o*i+r,c=(o+1)*i+r,l=o*i+(r+1),u=(o+1)*i+(r+1),d=t(n,s),f=t(n,c),p=t(n,l),m=t(n,u),h=fd(e,d,f,p);a.Add(h);let g=fd(e,f,m,p);a.Add(g)}let o=new e.Message_ProgressRange_1;a.Perform(o),o.delete();let s=a.SewedShape();return a.delete(),s}function fd(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.BRepBuilderAPI_MakeEdge_3(i,a),c=new e.BRepBuilderAPI_MakeEdge_3(a,o),l=new e.BRepBuilderAPI_MakeEdge_3(o,i),u=new e.BRepBuilderAPI_MakeWire_4(s.Edge(),c.Edge(),l.Edge()),d=u.Wire(),f=new e.BRepBuilderAPI_MakeFace_15(d,!0),p=f.Face();return f.delete(),u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),a.delete(),i.delete(),p}function pd(e,t,n){let r=new e.BRepBuilderAPI_Sewing(n,!0,!0,!0,!1);for(let e of t)r.Add(e);let i=new e.Message_ProgressRange_1;r.Perform(i),i.delete();let a=r.SewedShape();r.delete();let o=new e.ShapeFix_Solid_1;try{let t=e.TopoDS_Cast.Shell(a);return o.SolidFromShell(t)}catch{return a}finally{o.delete()}}function md(e,t){let n=new e.ShapeFix_Shape_1(t),r=new e.Message_ProgressRange_1;n.Perform(r);let i=n.Shape();return r.delete(),n.delete(),i}function hd(e,t){let n=new e.ShapeFix_Wire_1;n.Load_1(t),n.FixSelfIntersection();let r=n.Wire();return n.delete(),r}function gd(){return{gaussian:0,mean:0,max:0,min:0,maxDirection:[1,0,0],minDirection:[0,1,0]}}function _d(e,t,n,r,i,a){let o=e*n-t*t;if(Math.abs(o)<1e-15)return null;let s=(e*a-2*t*i+n*r)/(2*o),c=(r*a-i*i)/o,l=Math.sqrt(Math.max(0,s*s-c)),u=s+l,d=s-l,f=(n*i-t*a)/o,p=(e*i-t*r)/o,m=(n*r-t*i)/o,h,g;return Math.abs(f)>1e-15?(h=f,g=u-m):Math.abs(p)>1e-15?(h=u-(e*a-t*i)/o,g=p):(h=1,g=0),{mean:s,gaussian:c,k1:u,k2:d,du1:h,dv1:g}}function vd(e,t,n,r){let i=new e.BRepAdaptor_Surface_2(t,!1),a=new e.gp_Pnt_1,o=new e.gp_Vec_1,s=new e.gp_Vec_1,c=new e.gp_Vec_1,l=new e.gp_Vec_1,u=new e.gp_Vec_1;i.D2(n,r,a,o,s,c,l,u);let d=o.Dot(o),f=o.Dot(s),p=s.Dot(s),m=o.Crossed(s),h=m.Magnitude(),g=gd();if(h>=1e-15){m.Divide(h);let e=_d(d,f,p,c.Dot(m),u.Dot(m),l.Dot(m));e&&(g={gaussian:e.gaussian,mean:e.mean,max:e.k1,min:e.k2,maxDirection:yd(o,s,e.du1,e.dv1),minDirection:yd(o,s,-e.dv1,e.du1)})}return a.delete(),o.delete(),s.delete(),c.delete(),l.delete(),u.delete(),m.delete(),i.delete(),g}function yd(e,t,n,r){let i=n*e.X()+r*t.X(),a=n*e.Y()+r*t.Y(),o=n*e.Z()+r*t.Z(),s=Math.sqrt(i*i+a*a+o*o);return s<1e-15?[1,0,0]:[i/s,a/s,o/s]}function bd(e,t){let n=new e.GProp_GProps_1;e.BRepGProp.SurfaceProperties_2(t,n,1e-7,!0);let r=n.CentreOfMass(),i=[r.X(),r.Y(),r.Z()];return r.delete(),n.delete(),i}function xd(e,t){let n=new e.BRepExtrema_DistShapeShape_1;return n.LoadS1(t),{distanceTo(t){n.LoadS2(t);let r=new e.Message_ProgressRange_1;if(n.Perform(r),r.delete(),!n.IsDone())throw Error(`BRepExtrema_DistShapeShape failed`);let i=n.Value(),a=n.PointOnShape1(1),o=n.PointOnShape2(1),s={value:i,point1:[a.X(),a.Y(),a.Z()],point2:[o.X(),o.Y(),o.Z()]};return a.delete(),o.delete(),s},dispose(){n.delete()}}}function Sd(e,t,n,r,i){let a=new e.HLRBRep_Algo_1;a.Add_2(t,0);let o=new e.gp_Pnt_3(n[0],n[1],n[2]),s=new e.gp_Dir_5(r[0],r[1],r[2]),c;if(i){let t=new e.gp_Dir_5(i[0],i[1],i[2]);c=new e.gp_Ax2_2(o,s,t),t.delete()}else c=new e.gp_Ax2_4(o,s);let l=new e.HLRAlgo_Projector_2(c);a.Projector_1(l),a.Update(),a.Hide_1();let u=new e.Handle_HLRBRep_Algo_2(a),d=new e.HLRBRep_HLRToShape(u),f={visible:{outline:d.OutLineVCompound_1(),smooth:d.Rg1LineVCompound_1(),sharp:d.VCompound_1()},hidden:{outline:d.OutLineHCompound_1(),smooth:d.Rg1LineHCompound_1(),sharp:d.HCompound_1()}};for(let t of[f.visible,f.hidden])for(let n of[t.outline,t.smooth,t.sharp])n.IsNull()||e.BRepLib.BuildCurves3d_2(n);return d.delete(),u.delete(),l.delete(),c.delete(),s.delete(),o.delete(),f}function Cd(e,t,n,r,i,a,o){let s=a*Math.PI/180,c=+!!o,l=new e.BRepFeat_MakeDPrism(t,n,r,s,c,!0);if(i!==null){let t=new e.Message_ProgressRange_1;l.Perform_1(i,t),t.delete()}else l.PerformThruAll();let u=l.Shape();return l.delete(),u}function wd(e,t){let n=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),r=new e.TDocStd_Document(n);n.delete(),e.XCAFDoc_ShapeTool.SetAutoNaming(!1);let i=r.Main(),a=e.XCAFDoc_DocumentTool.ShapeTool(i).get(),o=e.XCAFDoc_DocumentTool.ColorTool(i).get();for(let n of t){let t=a.NewShape();a.SetShape(t,n.shape);let r=new e.TCollection_ExtendedString_2(n.name,!0);if(e.TDataStd_Name.Set_1(t,r),r.delete(),n.color){let[r,i,a,s]=n.color,c=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,s/255);o.SetColor_3(t,c,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),c.delete()}}return a.UpdateAssemblies(),r}function Td(e,t,n={}){if(n.unit||n.modelUnit){new e.STEPCAFControl_Writer_1().delete();let t=(n.modelUnit??n.unit??`MM`).toUpperCase(),r=(n.unit??n.modelUnit??`MM`).toUpperCase();e.Interface_Static.SetCVal(`xstep.cascade.unit`,t),e.Interface_Static.SetCVal(`write.step.unit`,r)}let r=new e.XSControl_WorkSession,i=new e.Handle_XSControl_WorkSession_2(r),a=new e.STEPCAFControl_Writer_2(i,!1);a.SetColorMode(!0),a.SetLayerMode(!0),a.SetNameMode(!0),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,!0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,5);let o=new e.Handle_TDocStd_Document_2(t),s=new e.Message_ProgressRange_1;a.Transfer_1(o,e.STEPControl_StepModelType.STEPControl_AsIs,null,s),s.delete();let c=kl(`_xcaf_export`,`step`),l=a.Write(c),u=``;if(l===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+c);u=new TextDecoder().decode(t),e.FS.unlink(`/`+c)}return a.delete(),i.delete(),u}function Ed(e,t){new e.STEPCAFControl_Writer_1().delete();let n=new e.TCollection_ExtendedString_2(`XmlOcaf`,!0),r=new e.TDocStd_Document(n);n.delete();let i=r.Main(),a=e.XCAFDoc_DocumentTool.ShapeTool(i).get(),o=e.XCAFDoc_DocumentTool.ColorTool(i).get();e.XCAFDoc_ShapeTool.SetAutoNaming(!1);for(let n of t){let t=a.AddShape(n.shape,!1,!0);if(n.name){let r=new e.TCollection_ExtendedString_2(n.name,!0);e.TDataStd_Name.Set_1(t,r),r.delete()}if(n.color){let[r,i,a,s]=n.color,c=new e.Quantity_ColorRGBA_5(r/255,i/255,a/255,s/255);o.SetColor_3(t,c,e.XCAFDoc_ColorType.XCAFDoc_ColorSurf),c.delete()}}let s=new e.XSControl_WorkSession,c=new e.Handle_XSControl_WorkSession_2(s),l=new e.STEPCAFControl_Writer_2(c,!1),u=new e.Handle_TDocStd_Document_2(r),d=new e.Message_ProgressRange_1;l.Transfer_1(u,e.STEPControl_StepModelType.STEPControl_AsIs,null,d),d.delete();let f=kl(`_step_cfg_export`,`step`),p=l.Write(f),m=``;if(p===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+f);m=new TextDecoder().decode(t),e.FS.unlink(`/`+f)}return l.delete(),c.delete(),u.delete(),r.delete(),m}function Dd(e,t){let n=new e.STEPControl_Writer_1;n.Model(!0).delete();let r=new e.Message_ProgressRange_1;for(let i of t)n.Transfer(i.shape,e.STEPControl_StepModelType.STEPControl_AsIs,!0,r);let i=kl(`_step_cfg_export`,`step`),a=n.Write(i);if(n.delete(),r.delete(),a===e.IFSelect_ReturnStatus.IFSelect_RetDone){let t=e.FS.readFile(`/`+i);return e.FS.unlink(`/`+i),new TextDecoder().decode(t)}throw Error(`STEP configured export failed: writer did not complete successfully`)}function Od(e,t,n={}){let r=n.unit??`MM`,i=n.modelUnit??r,a=n.schema??5;return e.Interface_Static.SetCVal(`xstep.cascade.unit`,i),e.Interface_Static.SetCVal(`write.step.unit`,r),e.Interface_Static.SetIVal(`write.surfacecurve.mode`,!0),e.Interface_Static.SetIVal(`write.precision.mode`,0),e.Interface_Static.SetIVal(`write.step.assembly`,2),e.Interface_Static.SetIVal(`write.step.schema`,a),t.some(e=>e.name||e.color)?Ed(e,t):Dd(e,t)}function kd(e){return{composeTransform:t=>Xu(e,t),applyComposedTransformWithHistory:(t,n,r,i)=>Zu(e,t,n,r,i),sweepPipeShell:(t,n,r)=>$u(e,t,n,r??{}),loftAdvanced:(t,n)=>ed(e,t,n??{}),buildExtrusionLaw:(t,n,r)=>td(e,t,n,r),revolveVec:(t,n,r,i)=>nd(e,t,n,r,i),positionOnCurve:(t,n,r)=>ad(e,t,n,r),linearPattern:(t,n,r,i)=>rd(e,t,n,r,i),circularPattern:(t,n,r,i,a)=>id(e,t,n,r,i,a),makeNonPlanarFace:t=>od(e,t),addHolesInFace:(t,n)=>sd(e,t,n),removeHolesFromFace:t=>cd(e,t),makeFaceOnSurface:(t,n)=>ld(e,t,n),bsplineSurface:(t,n,r)=>ud(e,t,n,r),triangulatedSurface:(t,n,r)=>dd(e,t,n,r),sewAndSolidify:(t,n)=>pd(e,t,n),fixShape:t=>md(e,t),fixSelfIntersection:t=>hd(e,t),surfaceCurvature:(t,n,r)=>vd(e,t,n,r),surfaceCenterOfMass:t=>bd(e,t),createDistanceQuery:t=>xd(e,t),projectEdges:(t,n,r,i)=>Sd(e,t,n,r,i),draftPrism:(t,n,r,i,a,o)=>Cd(e,t,n,r,i,a,o),generalTransformNonOrthogonal:(t,n,r)=>Yu(e,t,n,r),createXCAFDocument:t=>wd(e,t),writeXCAFToSTEP:(t,n)=>Td(e,t,n??{}),exportSTEPConfigured:(t,n)=>Od(e,t,n??{})}}var Ad=()=>{};function jd(e){return e}function Md(e){let t=jd(e);for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function Nd(e){return e}function Pd(e,t){return{x:e,y:t}}function Fd(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`occt: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function Id(e,t){return{x:e,y:t}}function Ld(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete:Ad}}function Rd(e){return e}function zd(e){return e}function Bd(e,t,n,r){return te(e,t,n,r)}function Vd(e,t,n,r){return ne(e,t,n,r)}function Hd(e,t,n,r,i,a,o){return ae(e,t,n,r,i,a,o)}function Ud(e,t,n,r,i,a,o,s,c){return{__bk2d:`trimmed`,basis:ae(e,t,n,r,o,s,c),tStart:i,tEnd:a}}function Wd(e){return oe(e)}function Gd(e,t){let n=e.length,r=Math.min(3,n-1),i=[],a=[];i.push(0),a.push(r+1);let o=n-r-1;for(let e=1;e<=o;e++)i.push(e/(o+1)),a.push(1);return i.push(1),a.push(r+1),{__bk2d:`bspline`,poles:[...e],knots:i,multiplicities:a,degree:r,isPeriodic:!1}}function Kd(e,t){return S(jd(e),t)}function qd(e,t){return{point:S(jd(e),t),tangent:C(jd(e),t)}}function Jd(e){return w(jd(e))}function Yd(e){return ee(Md(e))}function Xd(e,t,n){return{__bk2d:`trimmed`,basis:jd(e),tStart:t,tEnd:n}}function Zd(e){return JSON.parse(JSON.stringify(e))}function Qd(e,t){let n=jd(e),r=w(n),i=[];for(let e=0;e<=30;e++){let a=r.first+(r.last-r.first)*e/30,[o,s]=S(n,a),[c,l]=C(n,a),u=Math.sqrt(c*c+l*l);u>1e-12?i.push([o-l/u*t,s+c/u*t]):i.push([o,s])}return Gd(i)}function $d(e,t,n){return se(jd(e),t,n)}function ef(e,t,n,r){return ce(jd(e),t,n,r)}function tf(e,t,n,r){return le(jd(e),t,n,r)}function nf(e,t,n){return ue(jd(e),t,n)}function rf(e,t,n,r,i){return de(jd(e),t,n,r,i)}function af(e,t,n,r,i,a){return hf(e,cf(t,n,r,i,a))}function of(e,t,n){return{m:e,tx:t,ty:n,delete:Ad}}function sf(){return of([1,0,0,0,1,0,0,0,1],0,0)}function cf(e,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return sf();let s=-i/o,c=r/o,l=a-1,u=[1+l*s*s,l*s*c,0,l*c*s,1+l*c*c,0,0,0,1];return of(u,e-t(u,0)*e-t(u,1)*n,n-t(u,3)*e-t(u,4)*n)}function lf(e,t){return of([1,0,0,0,1,0,0,0,1],e,t)}function uf(e,n,r,i,a,o,s){if(r===`axis`&&o!==void 0&&s!==void 0){let r=Math.sqrt(o*o+s*s),c=o/r,l=s/r,u=[2*c*c-1,2*c*l,0,2*c*l,2*l*l-1,0,0,0,1],d=i??e,f=a??n;return of(u,d-t(u,0)*d-t(u,1)*f,f-t(u,3)*d-t(u,4)*f)}return of([-1,0,0,0,-1,0,0,0,1],2*e,2*n)}function df(e,t,n){let r=Math.cos(e),i=Math.sin(e);return of([r,-i,0,i,r,0,0,0,1],t-r*t+i*n,n-i*t-r*n)}function ff(e,t,n){return of([e,0,0,0,e,0,0,0,1],t*(1-e),n*(1-e))}function pf(e,t,n){e.tx=t,e.ty=n}function mf(e,n){let r=e.m,i=n.m,a=e=>t(r,e),o=e=>t(i,e);e.m=[a(0)*o(0)+a(1)*o(3)+a(2)*o(6),a(0)*o(1)+a(1)*o(4)+a(2)*o(7),a(0)*o(2)+a(1)*o(5)+a(2)*o(8),a(3)*o(0)+a(4)*o(3)+a(5)*o(6),a(3)*o(1)+a(4)*o(4)+a(5)*o(7),a(3)*o(2)+a(4)*o(5)+a(5)*o(8),a(6)*o(0)+a(7)*o(3)+a(8)*o(6),a(6)*o(1)+a(7)*o(4)+a(8)*o(7),a(6)*o(2)+a(7)*o(5)+a(8)*o(8)];let s=e.tx,c=e.ty,l=Number(n.tx)||0,u=Number(n.ty)||0;e.tx=a(0)*l+a(1)*u+s,e.ty=a(3)*l+a(4)*u+c}function hf(e,n){let r=jd(e),i=n.m??[1,0,0,0,1,0,0,0,1],a=Number(n.tx)||0,o=Number(n.ty)||0,s=t(i,0),c=t(i,1),l=t(i,3),u=t(i,4);if(Math.abs(s-1)<1e-12&&Math.abs(u-1)<1e-12&&Math.abs(c)<1e-12&&Math.abs(l)<1e-12)return se(r,a,o);let d=w(r),f=[];for(let e=0;e<=20;e++){let[t,n]=S(r,d.first+(d.last-d.first)*e/20);f.push([s*t+c*n+a,l*t+u*n+o])}return oe(f)}function gf(e,t,n){let r=fe(jd(e),jd(t),n),i=r.segments.map(e=>Object.assign(e,{delete(){}}));return{points:r.points,segments:i}}function _f(e,t,n){let r=jd(e),i=w(r);if(r.__bk2d===`line`){let e=t-r.ox,a=n-r.oy,o=Math.max(i.first,Math.min(i.last,e*r.dx+a*r.dy)),[s,c]=S(r,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}if(r.__bk2d===`circle`){let e=Math.atan2(n-r.cy,t-r.cx),i=r.sense?e:-e;for(;i<0;)i+=2*Math.PI;for(;i>2*Math.PI;)i-=2*Math.PI;let[a,o]=S(r,i);return{param:i,distance:Math.sqrt((a-t)**2+(o-n)**2)}}if(!isFinite(i.first)||!isFinite(i.last))return null;let a=i.first,o=1/0,s=(i.last-i.first)/200;for(let e=0;e<=200;e++){let c=i.first+e*s,[l,u]=S(r,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}for(let e=0;e<10;e++){let[e,o]=S(r,a),[s,c]=C(r,a),l=(e-t)*s+(o-n)*c,u=s*s+c*c;if(u<1e-20)break;let d=l/u,f=Math.max(i.first,Math.min(i.last,a-d));if(Math.abs(f-a)<1e-14)break;a=f}let[c,l]=S(r,a);return{param:a,distance:Math.sqrt((c-t)**2+(l-n)**2)}}function vf(e,t,n,r,i,a){let o=jd(e),s=jd(t),c=n,l=i,u=1/0;for(let e=0;e<=50;e++){let t=n+(r-n)*e/50,[d,f]=S(o,t);for(let e=0;e<=50;e++){let n=i+(a-i)*e/50,[r,o]=S(s,n),p=(r-d)**2+(o-f)**2;p<u&&(u=p,c=t,l=n)}}let d=c,f=l;for(let c=0;c<20;c++){let[c,l]=S(s,f),u=_f(e,c,l);if(u){let e=Math.max(n,Math.min(r,u.param)),t=Math.abs(e-d)<1e-12;if(d=e,t)break}let[p,m]=S(o,d),h=_f(t,p,m);if(h){let e=Math.max(i,Math.min(a,h.param)),t=Math.abs(e-f)<1e-12;if(f=e,t)break}}let[p,m]=S(o,d),[h,g]=S(s,f);return Math.sqrt((h-p)**2+(g-m)**2)}function yf(e,n,r,i){let a=jd(e),o=w(a),s=Math.max(3,{C0:1,C1:2,C2:3,C3:4}[r]??4),c=Math.max(100,i*10),l=[],u=1/0;for(let e=0;e<3&&u>n;e++){l=[];for(let e=0;e<=c;e++){let t=o.first+(o.last-o.first)*e/c;l.push(S(a,t))}u=0;for(let e=0;e<c;e++){let[n,r]=S(a,o.first+(o.last-o.first)*(e+.5)/c),i=t(l,e),s=t(l,e+1),d=(i[0]+s[0])/2,f=(i[1]+s[1])/2,p=Math.sqrt((n-d)**2+(r-f)**2);p>u&&(u=p)}u>n&&(c=Math.min(c*2,500))}return Gd(l,{degMax:s})}function bf(e){let n=Md(e);if(n.__bk2d===`bezier`)return[e];if(n.__bk2d!==`bspline`)return bf(yf(e,1e-6,`C2`,10));let r=w(jd(e)),i=r.first,a=r.last,o=[];for(let e of n.knots)e>i+1e-12&&e<a-1e-12&&o.push(e);let s=[i,...o,a],c=[];for(let e=0;e<s.length-1;e++){let r=t(s,e),i=t(s,e+1),a=i-r;if(a<1e-15)continue;let o=S(n,r),l=S(n,i),u=C(n,r),d=C(n,i),f=a/3,p={__bk2d:`bezier`,poles:[o,[o[0]+u[0]*f,o[1]+u[1]*f],[l[0]-d[0]*f,l[1]-d[1]*f],l]};c.push(p)}return c.length>0?c:[e]}function xf(){return Ce()}function Sf(e,t,n){we(Nd(e),jd(t),n)}function Cf(e){let t=Nd(e);return{xMin:t.xMin,yMin:t.yMin,xMax:t.xMax,yMax:t.yMax}}function wf(e,t){let n=Nd(e),r=Nd(t);n.xMin=Math.min(n.xMin,r.xMin),n.yMin=Math.min(n.yMin,r.yMin),n.xMax=Math.max(n.xMax,r.xMax),n.yMax=Math.max(n.yMax,r.yMax)}function Tf(e,t){let n=Nd(e),r=Nd(t);return n.xMax<r.xMin||r.xMax<n.xMin||n.yMax<r.yMin||r.yMax<n.yMin}function Ef(e,t,n){let r=Nd(e);return t<r.xMin||t>r.xMax||n<r.yMin||n>r.yMax}function Df(e){let t=Md(e);return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function Of(e){let t=Md(e);return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function kf(e){let t=Md(e);return t.__bk2d===`bezier`?[...t.poles]:null}function Af(e){let t=Md(e);return t.__bk2d===`bezier`?t.poles.length-1:null}function jf(e){let t=Md(e);return t.__bk2d===`bspline`?{poles:[...t.poles],knots:[...t.knots],multiplicities:[...t.multiplicities],degree:t.degree,isPeriodic:t.isPeriodic}:null}function Mf(e){return xe(jd(e))}function Nf(e){return Se(e)}function Pf(e,t){let n=jd(e),r=w(n),i=[r.first,...[...t].sort((e,t)=>e-t),r.last],a=[];for(let e=0;e<i.length-1;e++)a.push({__bk2d:`trimmed`,basis:n,tStart:i[e],tEnd:i[e+1]});return a}function Ff(e,t,n){let r=new e.gp_Pnt_3(t[0],t[1],t[2]),i=new e.gp_Pnt_3(n[0],n[1],n[2]),a=new e.BRepBuilderAPI_MakeEdge_3(r,i),o=a.Edge();return a.delete(),r.delete(),i.delete(),o}function If(e,t,n,r){let i=new e.gp_Pnt_3(t[0],t[1],t[2]),a=new e.gp_Pnt_3(n[0],n[1],n[2]),o=new e.gp_Pnt_3(r[0],r[1],r[2]),s=new e.GC_MakeArcOfCircle_4(i,a,o).Value().get(),c=new e.Handle_Geom_Curve_2(s),l=new e.BRepBuilderAPI_MakeEdge_24(c),u=l.Edge();return l.delete(),c.delete(),i.delete(),a.delete(),o.delete(),u}function Lf(e,n){let r=new e.TColgp_Array1OfPnt_2(1,n.length),i=new e.gp_Pnt_1;for(let e=0;e<n.length;e++){let a=t(n,e);i.SetCoord_2(a[0],a[1],a[2]),r.SetValue_1(e+1,i)}i.delete();let a=new e.GeomAPI_PointsToBSpline_2(r,3,8,e.GeomAbs_Shape.GeomAbs_C2,1e-6);if(r.delete(),!a.IsDone())throw a.delete(),Error(`Interpolation failed — GeomAPI_PointsToBSpline did not converge`);let o=a.Curve(),s=new e.Handle_Geom_Curve_2(o.get()),c=new e.BRepBuilderAPI_MakeEdge_24(s),l=c.Edge();return c.delete(),a.delete(),l}function Rf(e,n,r,i,a){let o=jd(n),s=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],c=(e,t)=>[r[0]+e*a[0]+t*s[0],r[1]+e*a[1]+t*s[1],r[2]+e*a[2]+t*s[2]];if(o.__bk2d===`line`)return Ff(e,c(o.ox,o.oy),c(o.ox+o.dx*o.len,o.oy+o.dy*o.len));if(o.__bk2d===`circle`||o.__bk2d===`trimmed`){let t=o;for(;t.__bk2d===`trimmed`;)t=t.basis;if(t.__bk2d===`circle`){let n=t,r=c(n.cx,n.cy),a=n.sense?i:[-i[0],-i[1],-i[2]];if(o.__bk2d===`circle`){let t=new e.gp_Pnt_3(r[0],r[1],r[2]),i=new e.gp_Dir_5(a[0],a[1],a[2]),o=new e.gp_Ax2_4(t,i),s=new e.gp_Circ_2(o,n.radius),c=new e.BRepBuilderAPI_MakeEdge_8(s),l=c.Edge();return c.delete(),s.delete(),o.delete(),i.delete(),t.delete(),l}let s=w(o),[l,u]=S(o,s.first),[d,f]=S(o,(s.first+s.last)/2),[p,m]=S(o,s.last);return If(e,c(l,u),c(d,f),c(p,m))}}if(o.__bk2d===`bezier`||o.__bk2d===`bspline`){let n=o.poles.map(([e,t])=>c(e,t));return n.length===2?Ff(e,t(n,0),t(n,1)):Lf(e,n)}let l=w(o),u=[];for(let e=0;e<=60;e++){let[t,n]=S(o,l.first+(l.last-l.first)*e/60);u.push(c(t,n))}return Lf(e,u)}function zf(e,t,n){let r=jd(t),i=w(r),a=[];for(let e=0;e<=60;e++){let[t,o]=S(r,i.first+(i.last-i.first)*e/60),s=n.get().Value(t,o);a.push([s.X(),s.Y(),s.Z()]),s.delete()}return Lf(e,a)}function Bf(e,t){return e.BRep_Tool.Surface_2(t)}function Vf(e,t,n){let r=new e.BRepAdaptor_Curve2d_2(t,n),i=Number(r.FirstParameter()),a=Number(r.LastParameter()),o=[];for(let e=0;e<=30;e++){let t=i+(a-i)*e/30,n=r.Value(t);o.push([n.X(),n.Y()]),n.delete()}return r.delete(),Gd(o)}function Hf(e,t){e.BRepLib.BuildCurves3d_2(t)}function Uf(e,t,n,r){let i=new e.ShapeFix_Wire_2(t,n,r);i.FixEdgeCurves();let a=i.Wire();return i.delete(),a}function Wf(e,t,n={}){let{order:r=3,nbPtsOnCur:i=15,nbIter:a=2,tol3d:o=1e-5,tol2d:s=1e-4,maxDeg:c=8,maxSeg:l=9}=n,u=new e.BRepOffsetAPI_MakeFilling(r,i,a,!1,o,s,.01,.1,c,l);for(let n=0;n<t.length;n++){let r=ms(e,t[n],`edge`);for(let t of r)u.Add_1(t,e.GeomAbs_Shape.GeomAbs_C0,n===0)}let d=new e.Message_ProgressRange_1;u.Build(d);let f=u.Shape();return u.delete(),d.delete(),f}function Gf(e){return{wrapCurve2dHandle:e=>Rd(e),createCurve2dAdaptor:e=>zd(e),createPoint2d:(e,t)=>Pd(e,t),createDirection2d:(e,t)=>Fd(e,t),createVector2d:(e,t)=>Id(e,t),createAxis2d:(e,t,n,r)=>Ld(e,t,n,r),makeLine2d:(e,t,n,r)=>Bd(e,t,n,r),makeCircle2d:(e,t,n,r)=>Vd(e,t,n,r),makeArc2dThreePoints:(e,t,n,r,i,a)=>re(e,t,n,r,i,a),makeArc2dTangent:(e,t,n,r,i,a)=>ie(e,t,n,r,i,a),makeEllipse2d:(e,t,n,r,i,a,o)=>Hd(e,t,n,r,i,a,o),makeEllipseArc2d:(e,t,n,r,i,a,o,s,c)=>Ud(e,t,n,r,i,a,o,s,c),makeBezier2d:e=>Wd(e),makeBSpline2d:(e,t)=>Gd(e,t),evaluateCurve2d:(e,t)=>Kd(e,t),evaluateCurve2dD1:(e,t)=>qd(e,t),getCurve2dBounds:e=>Jd(e),getCurve2dType:e=>Yd(e),trimCurve2d:(e,t,n)=>Xd(e,t,n),reverseCurve2d:e=>{},copyCurve2d:e=>Zd(e),offsetCurve2d:(e,t)=>Qd(e,t),translateCurve2d:(e,t,n)=>$d(e,t,n),rotateCurve2d:(e,t,n,r)=>ef(e,t,n,r),scaleCurve2d:(e,t,n,r)=>tf(e,t,n,r),mirrorCurve2dAtPoint:(e,t,n)=>nf(e,t,n),mirrorCurve2dAcrossAxis:(e,t,n,r,i)=>rf(e,t,n,r,i),affinityTransform2d:(e,t,n,r,i,a)=>af(e,t,n,r,i,a),createIdentityGTrsf2d:()=>sf(),createAffinityGTrsf2d:(e,t,n,r,i)=>cf(e,t,n,r,i),createTranslationGTrsf2d:(e,t)=>lf(e,t),createMirrorGTrsf2d:(e,t,n,r,i,a,o)=>uf(e,t,n,r,i,a,o),createRotationGTrsf2d:(e,t,n)=>df(e,t,n),createScaleGTrsf2d:(e,t,n)=>ff(e,t,n),setGTrsf2dTranslationPart:(e,t,n)=>{pf(e,t,n)},multiplyGTrsf2d:(e,t)=>{mf(e,t)},transformCurve2dGeneral:(e,t)=>hf(e,t),intersectCurves2d:(e,t,n)=>gf(e,t,n),projectPointOnCurve2d:(e,t,n)=>_f(e,t,n),distanceBetweenCurves2d:(e,t,n,r,i,a)=>vf(e,t,n,r,i,a),approximateCurve2dAsBSpline:(e,t,n,r)=>yf(e,t,n,r),decomposeBSpline2dToBeziers:e=>bf(e),createBoundingBox2d:()=>xf(),addCurveToBBox2d:(e,t,n)=>{Sf(e,t,n)},getBBox2dBounds:e=>Cf(e),mergeBBox2d:(e,t)=>{wf(e,t)},isBBox2dOut:(e,t)=>Tf(e,t),isBBox2dOutPoint:(e,t,n)=>Ef(e,t,n),getCurve2dCircleData:e=>Df(e),getCurve2dEllipseData:e=>Of(e),getCurve2dBezierPoles:e=>kf(e),getCurve2dBezierDegree:e=>Af(e),getCurve2dBSplineData:e=>jf(e),serializeCurve2d:e=>Mf(e),deserializeCurve2d:e=>Nf(e),splitCurve2d:(e,t)=>Pf(e,t),liftCurve2dToPlane:(t,n,r,i)=>Rf(e,t,n,r,i),buildEdgeOnSurface:(t,n)=>zf(e,t,n),extractSurfaceFromFace:t=>Bf(e,t),extractCurve2dFromEdge:(t,n)=>Vf(e,t,n),buildCurves3d:t=>{Hf(e,t)},fixWireOnFace:(t,n,r)=>Uf(e,t,n,r),fillSurface:(t,n)=>Wf(e,t,n)}}function Kf(){let e=e=>()=>{throw new c(`${e} is only available with the brepkit kernel`)};return{export3MF:e(`export3MF`),exportGLB:e(`exportGLB`),exportOBJ:e(`exportOBJ`),exportPLY:e(`exportPLY`),import3MF:e(`import3MF`),importOBJ:e(`importOBJ`),importGLB:e(`importGLB`),filletVariable:e(`filletVariable`),helicalSweep:e(`helicalSweep`),sweepWithOptions:e(`sweepWithOptions`),defeature:e(`defeature`),detectSmallFeatures:e(`detectSmallFeatures`),recognizeFeatures:e(`recognizeFeatures`),meshBoolean:(()=>{throw new c(`meshBoolean is only available with the brepkit kernel`)}),edgeToFaceMap:e(`edgeToFaceMap`),sharedEdges:e(`sharedEdges`),adjacentFaces:e(`adjacentFaces`),curveDegreeElevate:e(`curveDegreeElevate`),curveKnotInsert:e(`curveKnotInsert`),curveKnotRemove:e(`curveKnotRemove`),curveSplit:e(`curveSplit`),approximateSurfaceLspia:e(`approximateSurfaceLspia`),untrimFace:e(`untrimFace`),mergeCoincidentVertices:e(`mergeCoincidentVertices`),removeDegenerateEdges:e(`removeDegenerateEdges`),fixFaceOrientations:e(`fixFaceOrientations`),classifyPointRobust:e(`classifyPointRobust`),classifyPointWinding:e(`classifyPointWinding`),executeBatch:e(`executeBatch`),checkpoint:e(`checkpoint`),checkpointCount:e(`checkpointCount`),restoreCheckpoint:e(`restoreCheckpoint`),discardCheckpoint:e(`discardCheckpoint`)}}function qf(e){return{draft:(t,n,r,i,a)=>qu(e,t,n,r,i,a,[],1).shape}}var Jf=class{oc;kernelId=`occt`;capabilities=a;constructor(e){this.oc=e,Object.assign(this,Bs(e),Us(e),cc(e),tc(e),Pc(e),Jc(e),ul(e),Cl(e),Dl(e),Il(e),ls(e),Cs(e),mu(e),_u(e),bu(e),wu(e),Ju(e),kd(e),Gf(e),qf(e),Kf())}},Yf=()=>{};function Xf(e){return typeof e==`object`&&!!e&&e.__brepkit}function Zf(e,t){return{__brepkit:!0,type:e,id:t,delete:Yf,HashCode(e){return t%e},IsNull(){return!1}}}function F(e){return Zf(`solid`,e)}function Qf(e){return Zf(`face`,e)}function $f(e){return Zf(`edge`,e)}function ep(e){return Zf(`wire`,e)}function tp(e){return Zf(`shell`,e)}function np(e){let t=Zf(`compound`,e);return vp.has(e)?{...t,delete:()=>vp.delete(e)}:t}function rp(e){return Zf(`vertex`,e)}function I(e,t){if(!Xf(e))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof e);if(t&&e.type!==t)throw Error(`brepkit: expected ${t} handle, got ${e.type}`);return e.id}function L(e){return Array.from(e)}function ip(e,t){if(!Xf(e))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof e);if(e.type!==`solid`)throw Error(`brepkit: ${t} requires a solid, got ${e.type}. Consider using makeCompound() to combine shapes first.`);return e.id}function ap(e,t,n){if(!Xf(t))throw Error(`brepkit: expected a BrepkitHandle, got `+typeof t);if(t.type===`solid`)return[t.id];if(t.type===`compound`){let r=L(e.getCompoundSolids(t.id));if(r.length>0)return r;throw Error(`brepkit: ${n} received a compound with no solids.`)}throw Error(`brepkit: ${n} requires a solid or compound of solids, got ${t.type}.`)}function op(e,t,n,r,i,a){let o=e-r,s=t-i,c=n-a;return Math.sqrt(o*o+s*s+c*c)}function sp(e){return e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength)}function cp(e,t,n){return[1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1]}function lp(e,t){if(!Array.isArray(e)||e.length<3)return t;let[n,r,i]=e;return typeof n==`number`&&typeof r==`number`&&typeof i==`number`&&Number.isFinite(n)&&Number.isFinite(r)&&Number.isFinite(i)?[n,r,i]:t}function up(e,t=[0,0,1],n=[0,0,0]){let r=lp(t,[0,0,1]),i=r[0]===0&&r[1]===0&&r[2]===0?[0,0,1]:r,a=lp(n,[0,0,0]),o=e*Math.PI/180,s=Math.cos(o),c=Math.sin(o),l=1-s,u=Math.sqrt(i[0]**2+i[1]**2+i[2]**2),[d,f,p]=[i[0]/u,i[1]/u,i[2]/u],m=l*d*d+s,h=l*d*f-c*p,g=l*d*p+c*f,_=l*f*d+c*p,v=l*f*f+s,y=l*f*p-c*d,b=l*p*d-c*f,x=l*p*f+c*d,S=l*p*p+s,[C,w,ee]=a;return[m,h,g,C-(m*C+h*w+g*ee),_,v,y,w-(_*C+v*w+y*ee),b,x,S,ee-(b*C+x*w+S*ee),0,0,0,1]}function dp(e,t){let[n,r,i]=lp(e,[0,0,0]);return[t,0,0,n*(1-t),0,t,0,r*(1-t),0,0,t,i*(1-t),0,0,0,1]}function fp(e,n){let r=n=>t(e,n);return[r(0),r(1),r(2),n[0],r(3),r(4),r(5),n[1],r(6),r(7),r(8),n[2],0,0,0,1]}function pp(e,t){let[n,r,i]=e,a=Math.sqrt(t[0]**2+t[1]**2+t[2]**2),o=t[0]/a,s=t[1]/a,c=t[2]/a,l=2*(n*o+r*s+i*c);return[1-2*o*o,-2*o*s,-2*o*c,l*o,-2*s*o,1-2*s*s,-2*s*c,l*s,-2*c*o,-2*c*s,1-2*c*c,l*c,0,0,0,1]}function mp(e,t){let n=Array(16).fill(0);for(let r=0;r<4;r++)for(let i=0;i<4;i++)for(let a=0;a<4;a++)n[r*4+i]=n[r*4+i]+e[r*4+a]*t[a*4+i];return n}var hp=.01,gp=9e5;function _p(){return gp++}var vp=new Map,yp=new Set;function bp(e,t){yp.has(e)||(yp.add(e),console.warn(`brepkit: ${t}`))}function xp(e){return e.optimisation!==void 0||e.simplify!==void 0||e.strategy!==void 0||e.fuzzyValue!==void 0}function Sp(e){return e}function Cp(e){let t=e;for(;t.__bk2d===`trimmed`;)t=t.basis;return t}function wp(e){return e}function Tp(e,t){if(typeof t!=`function`)return t;let n;for(let r of e){let e;try{e=t(r)}catch{throw Error(`brepkit does not support variable draft with multiple distinct angles. Use the OCCT kernel for per-face angle variation, or use a uniform angle.`)}if(n===void 0)n=e;else if(e!==n)throw Error(`brepkit does not support variable draft with multiple distinct angles. Use the OCCT kernel for per-face angle variation, or use a uniform angle.`)}if(n===void 0)throw Error(`draft: no faces provided`);return n}function Ep(e,t,n){let r=vp.get(t);return r?r.flatMap(t=>t.type===n?[t]:Pp(e,t,n)):n===`solid`?L(e.getCompoundSolids(t)).map(F):n===`face`||n===`edge`||n===`vertex`||n===`wire`?L(e.getCompoundSolids(t)).map(F).flatMap(t=>Pp(e,t,n)):[]}function Dp(e,t,n,r){switch(r){case`solid`:return[t];case`shell`:return L(e.getSolidShells(n)).map(tp);case`face`:return L(e.getSolidFaces(n)).map(Qf);case`edge`:return L(e.getSolidEdges(n)).map($f);case`vertex`:return L(e.getSolidVertices(n)).map(rp);case`wire`:return L(e.getSolidFaces(n)).flatMap(t=>L(e.getFaceWires(t)).map(ep));default:return[]}}function Op(e,t,n){let r=L(e.getShellFaces(t)).map(Qf),i=new Set,a=[];for(let t of r)for(let r of Pp(e,t,n)){let e=I(r);i.has(e)||(i.add(e),a.push(r))}return a}function kp(e,t,n,r){return r===`shell`?[t]:r===`face`?L(e.getShellFaces(n)).map(Qf):r===`edge`||r===`vertex`?Op(e,n,r):[]}function Ap(e,t,n,r){return r===`face`?[t]:r===`edge`?L(e.getFaceEdges(n)).map($f):r===`vertex`?L(e.getFaceVertices(n)).map(rp):r===`wire`?L(e.getFaceWires(n)).map(ep):[]}function jp(e,n){let r=L(e.getWireEdges(n)),i=new Set,a=[];for(let n of r){let r=e.getEdgeVertices(n),o=[[t(r,0),t(r,1),t(r,2)],[t(r,3),t(r,4),t(r,5)]];for(let[t,n,r]of o){let o=`${t},${n},${r}`;i.has(o)||(i.add(o),a.push(rp(e.makeVertex(t,n,r))))}}return a}function Mp(e,t,n,r){return r===`wire`?[t]:r===`edge`?L(e.getWireEdges(n)).map($f):r===`vertex`?jp(e,n):[]}function Np(e,n,r,i){if(i===`edge`)return[n];if(i===`vertex`){let n=e.getEdgeVertices(r),i=e.makeVertex(t(n,0),t(n,1),t(n,2)),a=e.makeVertex(t(n,3),t(n,4),t(n,5));return[rp(i),rp(a)]}return[]}function Pp(e,t,n){let r=I(t);switch(t.type){case`compound`:return Ep(e,r,n);case`solid`:return Dp(e,t,r,n);case`shell`:return kp(e,t,r,n);case`face`:return Ap(e,t,r,n);case`wire`:return Mp(e,t,r,n);case`edge`:return Np(e,t,r,n);default:return[]}}function Fp(e,t,n){if(Array.isArray(t))for(let e of t)n(e)}function Ip(e,t){if(Xf(t))return t.type;throw Error(`brepkit: cannot determine shape type of non-brepkit handle`)}function Lp(e,t,n){return Xf(t)&&Xf(n)&&t.id===n.id&&t.type===n.type}function Rp(e,t,n){return Lp(e,t,n)}function zp(e,t,n){return t}function Bp(e,t,n){return Xf(t)?t.id%n:0}function Vp(e,t){return!t||!Xf(t)}function Hp(e,t){let n=I(t);return e.getShapeOrientation(n)}function Up(e,t){let n=ip(t,`edgeToFaceMap`);return e.edgeToFaceMap(n)}function Wp(e,t,n){let r=I(t,`face`),i=I(n,`face`);return Array.from(e.sharedEdges(r,i)).map(e=>$f(e))}function Gp(e,t,n){let r=ip(t,`adjacentFaces`),i=I(n,`face`);return Array.from(e.adjacentFaces(r,i)).map(e=>Qf(e))}function Kp(e,t){let n=t;return n.type===`face`?[n.id]:n.type===`solid`?L(e.getSolidFaces(n.id)):n.type===`shell`?L(e.getShellFaces(n.id)):[]}function qp(e,t,n){let r=t.flatMap(t=>Kp(e,t)),i=n??1e-7;try{return tp(e.weldShellsAndFaces(r,i))}catch(e){console.warn(`brepkit: weldShellsAndFaces failed, falling back to sewFaces:`,e)}return tp(e.sewFaces(r,i))}function Jp(e){return{iterShapes:(t,n)=>Pp(e,t,n),iterShapeList:(t,n)=>{Fp(e,t,n)},shapeType:t=>Ip(e,t),isSame:(t,n)=>Lp(e,t,n),isEqual:(t,n)=>Rp(e,t,n),downcast:(t,n)=>zp(e,t,n),copyShape:t=>zp(e,t),hashCode:(t,n)=>Bp(e,t,n),isNull:t=>Vp(e,t),shapeOrientation:t=>Hp(e,t),edgeToFaceMap:t=>Up(e,t),sharedEdges:(t,n)=>Wp(e,t,n),adjacentFaces:(t,n)=>Gp(e,t,n),sew:(t,n)=>qp(e,t,n)}}function Yp(e,t){return n(e.getVertexPosition(I(t,`vertex`)))}function Xp(e,t){return e.getSurfaceType(I(t,`face`))}function Zp(e,n){let r=e.getSurfaceDomain(I(n,`face`));return{uMin:t(r,0),uMax:t(r,1),vMin:t(r,2),vMax:t(r,3)}}function Qp(e,t){return ep(e.getFaceOuterWire(I(t,`face`)))}function $p(e,t,r,i){return n(e.evaluateSurfaceNormal(I(t,`face`),r,i))}function em(e,t,r,i){return n(e.evaluateSurface(I(t,`face`),r,i))}function tm(e,n,r){try{let i=e.projectPointOnSurface(I(n,`face`),r[0],r[1],r[2]);return[t(i,0),t(i,1)]}catch(e){return console.warn(`brepkit: uvFromPoint failed:`,e),null}}function nm(e,t,r){return n(e.projectPointOnSurface(I(t,`face`),r[0],r[1],r[2]),2)}function rm(e,r,i){let a=r,o,s=i;if(a.type===`wire`){let n=L(e.getWireEdges(a.id));o=t(n,n.length-1);let r=0;for(let a of n){let n=e.getEdgeCurveParameters(a),c=t(n,1)-t(n,0);if(i<=r+c||a===o){o=a,s=Math.min(t(n,0)+(i-r),t(n,1));break}r+=c}}else o=I(r,`edge`);let c=e.evaluateEdgeCurveD1(o,s);return{point:n(c,0),tangent:n(c,3)}}function im(e,n){let r=n;if(r.type===`wire`){let n=L(e.getWireEdges(r.id));if(n.length===0)return[0,0];let i=0;for(let r of n){let n=e.getEdgeCurveParameters(r);i+=t(n,1)-t(n,0)}return[0,i]}let i=e.getEdgeCurveParameters(I(n,`edge`));return[t(i,0),t(i,1)]}function am(e,r,i){let a=r;if(a.type===`wire`){let r=L(e.getWireEdges(a.id)),o=0;for(let a of r){let s=e.getEdgeCurveParameters(a),c=t(s,1)-t(s,0);if(i<=o+c||a===r[r.length-1]){let r=t(s,0)+(i-o);return n(e.evaluateEdgeCurve(a,Math.min(r,t(s,1))))}o+=c}return n(e.evaluateEdgeCurve(t(r,0),i))}return n(e.evaluateEdgeCurve(I(r,`edge`),i))}function om(e,r){let i=r;if(i.type===`wire`){let r=L(e.getWireEdges(i.id));if(r.length===0)return!1;if(r.length===1)return sm(e.getEdgeVertices(t(r,0)));let a=[];for(let t of r){let r=e.getEdgeVertices(t);a.push(n(r,0)),a.push(n(r,3))}let o=[];for(let e of a){let t=o.findIndex(t=>op(t[0],t[1],t[2],e[0],e[1],e[2])<1e-7);t>=0?o.splice(t,1):o.push(e)}return o.length===0}return sm(e.getEdgeVertices(I(r,`edge`)))}function sm(e){return op(t(e,0),t(e,1),t(e,2),t(e,3),t(e,4),t(e,5))<1e-7}function cm(e,t){let n=t;try{if(n.type===`edge`||n.type===`wire`&&L(e.getWireEdges(n.id)).length===1)return om(e,t)}catch{}return!1}function lm(e,t){try{if(cm(e,t)){let n=im(e,t);return n[1]-n[0]}}catch{}return 0}function um(e,t){if(t.type===`wire`){let n=Pp(e,t,`edge`)[0];return n?e.getEdgeCurveType(I(n,`edge`)):`LINE`}return e.getEdgeCurveType(I(t,`edge`))}function dm(e,t,n){let r=I(t,`edge`);return $f(e.curveDegreeElevate(r,n))}function fm(e,t,n,r){let i=I(t,`edge`);return $f(e.curveKnotInsert(i,n,r))}function pm(e,t,n,r){let i=I(t,`edge`);return $f(e.curveKnotRemove(i,n,r))}function mm(e,n,r){let i=I(n,`edge`),a=e.curveSplit(i,r);return[$f(t(a,0)),$f(t(a,1))]}function hm(e,t,n,r,i,a,o,s,c,l){return Qf(e.approximateSurfaceLspia(t,n,r,i,a,o,s,c,l))}function gm(e,t,n,r){let i=I(t,`face`);return Qf(e.untrimFace(i,n,r))}function _m(e,t){return t}function vm(e,t){let r=Jm(e,t);return!r||r.controlPoints.length<6?null:n(r.controlPoints,r.controlPoints.length-6)}function ym(e,t){if(Xf(t)&&t.type===`face`){let n=t.id,r=JSON.parse(e.getAnalyticSurfaceParams(n));if(r.type===`cylinder`)return{radius:r.radius,isDirect:!0}}return null}function bm(e,t){let n=JSON.parse(e.getAnalyticSurfaceParams(I(t,`face`))),r=n.type===`cylinder`?n.origin:n.type===`cone`?n.apex:null;if(!r||!n.axis)return null;let[i,a,o]=r,[s,c,l]=n.axis,u=Math.hypot(s,c,l);return u<1e-12?null:{origin:[i,a,o],direction:[s/u,c/u,l/u]}}function xm(e,t){return t}function Sm(e,n,r,i,a){a!==void 0&&bp(`classify-tolerance`,`classifyPointOnFace() tolerance parameter is not supported; brepkit uses domain-based classification.`);let o=I(n,`face`),s=e.getSurfaceDomain(o);return r<t(s,0)||r>t(s,1)||i<t(s,2)||i>t(s,3)?`out`:`in`}function Cm(e,t,n,r){let i=ip(t,`classifyPointRobust`);return e.classifyPointRobust(i,n[0],n[1],n[2],r)}function wm(e,t,n,r){let i=ip(t,`classifyPointWinding`);return e.classifyPointWinding(i,n[0],n[1],n[2],r)}function Tm(e,t,n,r){let i=ip(t,`detectSmallFeatures`);return Array.from(e.detectSmallFeatures(i,n,r)).map(e=>Qf(e))}function Em(e,t,n){let r=ip(t,`recognizeFeatures`);return e.recognizeFeatures(r,n)}function Dm(e,t,r,i,a){let o=I(t),[s,c,l]=r,[u,d,f]=i,[p,m,h]=a??[1,0,0],g=.1;try{let t=e.boundingBox(o),[r,i,a]=n(t,0),[s,c,l]=n(t,3),u=op(r,i,a,s,c,l);u>0&&(g=Math.max(u*.001,1e-6))}catch{}let _=e.projectEdges(o,s,c,l,u,d,f,p,m,h,!0,g),v;try{v=JSON.parse(_)}catch{v={visible:[],hidden:[]}}let y=t=>{let n=[];for(let r of t)for(let t=0;t+3<r.length;t+=2){let i=r[t],a=r[t+1],o=r[t+2],s=r[t+3];i===void 0||a===void 0||o===void 0||s===void 0||i===o&&a===s||n.push($f(e.makeLineEdge(i,a,0,o,s,0)))}let r=_p();return vp.set(r,n),np(r)},b=()=>{let e=_p();return vp.set(e,[]),np(e)};return{visible:{outline:y(v.visible),smooth:b(),sharp:b()},hidden:{outline:y(v.hidden),smooth:b(),sharp:b()}}}function Om(e,t){let n=I(t,`edge`),r=e.getNurbsCurveData(n);if(!r)return null;let i=JSON.parse(r);return{degree:i.degree,poles:i.controlPoints,weights:i.weights,knots:i.distinctKnots,multiplicities:i.multiplicities,isPeriodic:i.periodic,isRational:i.rational}}function km(e,t){return JSON.parse(e.getNurbsSurfaceDataParity(I(t,`face`)))}function Am(e){return{vertexPosition:t=>Yp(e,t),surfaceType:t=>Xp(e,t),uvBounds:t=>Zp(e,t),outerWire:t=>Qp(e,t),surfaceNormal:(t,n,r)=>$p(e,t,n,r),pointOnSurface:(t,n,r)=>em(e,t,n,r),uvFromPoint:(t,n)=>tm(e,t,n),projectPointOnFace:(t,n)=>nm(e,t,n),curveTangent:(t,n)=>rm(e,t,n),curveParameters:t=>im(e,t),curvePointAtParam:(t,n)=>am(e,t,n),curveIsClosed:t=>om(e,t),curveIsPeriodic:t=>cm(e,t),curvePeriod:t=>lm(e,t),curveType:t=>um(e,t),curveDegreeElevate:(t,n)=>dm(e,t,n),curveKnotInsert:(t,n,r)=>fm(e,t,n,r),curveKnotRemove:(t,n,r)=>pm(e,t,n,r),curveSplit:(t,n)=>mm(e,t,n),approximateSurfaceLspia:(t,n,r,i,a,o,s,c,l)=>hm(e,t,n,r,i,a,o,s,c,l),untrimFace:(t,n,r)=>gm(e,t,n,r),createCurveAdaptor:t=>_m(e,t),getBezierPenultimatePole:t=>vm(e,t),getSurfaceCylinderData:t=>ym(e,t),getSurfaceAxis:t=>bm(e,t),reverseSurfaceU:t=>xm(e,t),classifyPointOnFace:(t,n,r,i)=>Sm(e,t,n,r,i),classifyPointRobust:(t,n,r)=>Cm(e,t,n,r),classifyPointWinding:(t,n,r)=>wm(e,t,n,r),detectSmallFeatures:(t,n,r)=>Tm(e,t,n,r),recognizeFeatures:(t,n)=>Em(e,t,n),projectEdges:(t,n,r,i)=>Dm(e,t,n,r,i),getNurbsCurveData:t=>Om(e,t),getNurbsSurfaceData:t=>km(e,t)}}function jm(e,t,n){if(Array.isArray(n)&&n.length===16)return Wm(e,t,n);throw Error(`brepkit: transform expects a 16-element matrix array`)}function Mm(e,t,n,r,i){return Wm(e,t,cp(n,r,i))}function Nm(e,t,n,r,i){return Wm(e,t,up(n,r,i))}function Pm(e,t,n,r){let i=t;return i.type===`solid`?F(e.mirror(i.id,n[0],n[1],n[2],r[0],r[1],r[2])):Wm(e,t,pp(n,r))}function Fm(e,t,n,r){return Wm(e,t,dp(n,r))}function Im(e,t,n,r,i){return Wm(e,t,fp(n,r))}function Lm(e,t,n,r){return Wm(e,t,fp(n,r))}function Rm(e,t,n,r){let{point:i,tangent:a}=rm(e,n,r),[o,s,c]=a,l=Math.sqrt(o*o+s*s+c*c);if(l<1e-12)return Mm(e,t,i[0],i[1],i[2]);let u=o/l,d=s/l,f=c/l,p=t;if(Math.abs(f+1)<1e-10)p=Nm(e,p,180,[1,0,0]);else if(Math.abs(f-1)>1e-10){let t=[-d,u,0],n=180/Math.PI*Math.acos(Math.max(-1,Math.min(1,f)));p=Nm(e,p,n,t)}return Mm(e,p,i[0],i[1],i[2])}function zm(e,t,n,r,i){let a=[t];for(let o=1;o<i;o++){let i=r*o;a.push(Mm(e,t,n[0]*i,n[1]*i,n[2]*i))}return a}function Bm(e,t,n,r,i,a){let o=[t];for(let s=1;s<a;s++)o.push(Nm(e,t,i*s,r,n));return o}function Vm(e,t,n,r,i,a,o,s){return np(e.gridPattern(ip(t,`gridPattern`),n[0],n[1],n[2],r[0],r[1],r[2],i,a,o,s))}function Hm(e,t){return t.map(t=>{switch(t.type){case`translate`:return Mm(e,t.shape,t.x,t.y,t.z);case`rotate`:return Nm(e,t.shape,t.angle,t.axis,t.center);case`scale`:return Fm(e,t.shape,t.center,t.factor);case`mirror`:return Pm(e,t.shape,t.origin,t.normal)}})}function Um(e){return{transform:(t,n)=>jm(e,t,n),locate:(t,n)=>jm(e,t,n),translate:(t,n,r,i)=>Mm(e,t,n,r,i),rotate:(t,n,r,i)=>Nm(e,t,n,r,i),mirror:(t,n,r)=>Pm(e,t,n,r),scale:(t,n,r)=>Fm(e,t,n,r),generalTransform:(t,n,r,i)=>Im(e,t,n,r,i),generalTransformNonOrthogonal:(t,n,r)=>Lm(e,t,n,r),positionOnCurve:(t,n,r)=>Rm(e,t,n,r),linearPattern:(t,n,r,i)=>zm(e,t,n,r,i),circularPattern:(t,n,r,i,a)=>Bm(e,t,n,r,i,a),gridPattern:(t,n,r,i,a,o,s)=>Vm(e,t,n,r,i,a,o,s),transformBatch:t=>Hm(e,t)}}function Wm(e,t,n){let r=t;if(!Xf(t))throw Error(`brepkit: applyMatrix requires a BrepkitHandle`);switch(r.type){case`solid`:{let t=e.copySolid(r.id);return e.transformSolid(t,n),F(t)}case`face`:{if(typeof e.copyFace!=`function`)throw Error(`brepkit: applyMatrix for faces requires copyFace/transformFace WASM exports`);let t=e.copyFace(r.id);return e.transformFace(t,n),Qf(t)}case`wire`:{if(typeof e.copyWire!=`function`||typeof e.transformWire!=`function`)throw Error(`brepkit: applyMatrix for wires requires copyWire/transformWire WASM exports`);let t=e.copyWire(r.id);return e.transformWire(t,n),ep(t)}case`edge`:{if(typeof e.copyEdge!=`function`||typeof e.transformEdge!=`function`)throw Error(`brepkit: applyMatrix for edges requires copyEdge/transformEdge WASM exports`);let t=e.copyEdge(r.id);return e.transformEdge(t,n),$f(t)}default:throw Error(`brepkit: applyMatrix does not support '${r.type}' shapes`)}}function Gm(e,t){return!!(e&&(e[0]!==0||e[1]!==0||e[2]!==0)||t&&(t[0]!==0||t[1]!==0||t[2]!==1))}function Km(e,t,n,r){let i=t;if(r&&(r[0]!==0||r[1]!==0||r[2]!==1)){let[t,n,a]=r,o=Math.sqrt(t*t+n*n+a*a),s=t/o,c=n/o,l=a/o;if(Math.abs(l+1)<1e-10)i=Nm(e,i,180,[1,0,0]);else if(Math.abs(l-1)>1e-10){let t=[-c,s,0],n=180/Math.PI*Math.acos(Math.max(-1,Math.min(1,l)));i=Nm(e,i,n,t)}}return n&&(n[0]!==0||n[1]!==0||n[2]!==0)&&(i=Mm(e,i,n[0],n[1],n[2])),i}function qm(e,t){let r,i=t;if(i.type===`solid`||i.type===`compound`){let n=Pp(e,t,`face`);if(n.length===0)throw Error(`brepkit: extractPlaneFromFace: no faces found`);let i=n[0];if(!i)throw Error(`brepkit: extractPlaneFromFace: no faces found`);let a=I(i,`face`),o=0;for(let t of n){let n=I(t,`face`);try{let t=e.faceArea(n,hp);t>o&&(o=t,a=n)}catch{}}r=a}else r=I(t,`face`);let a=n(e.getFaceNormal(r)),o=e.tessellateFace(r,1).positions;return o.length>=3?{point:n(o),normal:a}:{point:[0,0,0],normal:a}}function Jm(e,n){let r=n;if(r.type!==`edge`)return null;let i=e.getEdgeNurbsData(r.id);if(i){let e=JSON.parse(i);return{degree:e.degree,knots:e.knots,controlPoints:e.controlPoints,weights:e.weights}}let a=e.getEdgeVertices(r.id);return{degree:1,knots:[0,0,1,1],controlPoints:[t(a,0),t(a,1),t(a,2),t(a,3),t(a,4),t(a,5)],weights:[1,1]}}function Ym(e,t){if(!Xf(t))return!1;if(t.type!==`solid`)return!0;try{return e.validateSolidRelaxed(t.id)===0}catch(e){return console.warn(`brepkit: isValid check failed:`,e),!1}}function Xm(e,t){if(!Xf(t))return!1;if(t.type!==`solid`)return!0;try{return e.validateSolid(t.id)===0}catch(e){return console.warn(`brepkit: isValidStrict check failed:`,e),!1}}function Zm(e,t){let n=t;if(n.type!==`solid`)throw Error(`brepkit: healSolid requires a solid, got ${n.type}. Consider using makeCompound() to combine shapes first.`);try{let n=e.repairSolid(I(t));return n>0&&console.warn(`brepkit: repairSolid left ${n} error(s) on solid.`),t}catch(n){try{return e.healSolid(I(t)),t}catch(e){return console.warn(`brepkit: healSolid failed (repairSolid error:`,n,`, healSolid error:`,e,`)`),null}}}function Qm(e,t){return t}function $m(e,t,n){return t}function eh(e,t,n){let r=ip(t,`mergeCoincidentVertices`);return e.mergeCoincidentVertices(r,n)}function th(e,t,n){let r=ip(t,`removeDegenerateEdges`);return e.removeDegenerateEdges(r,n)}function nh(e,t){let n=ip(t,`fixFaceOrientations`);return e.fixFaceOrientations(n)}function rh(e,t){let n=t;return n.type===`solid`&&e.healSolid(n.id),t}function ih(e,t){return t}function ah(e,t){if(!Xf(t)||t.type!==`solid`)return null;try{return typeof e.validateSolidDetails==`function`?e.validateSolidDetails(t.id):null}catch{return null}}function oh(e){return{isValid:t=>Ym(e,t),isValidStrict:t=>Xm(e,t),healSolid:t=>Zm(e,t),healFace:t=>Qm(e,t),healWire:(t,n)=>$m(e,t,n),fixShape:t=>rh(e,t),fixSelfIntersection:t=>ih(e,t),mergeCoincidentVertices:(t,n)=>eh(e,t,n),removeDegenerateEdges:(t,n)=>th(e,t,n),fixFaceOrientations:t=>nh(e,t),validationDetails:t=>ah(e,t)}}function sh(e){if(!(e instanceof Error))return!1;let t=e.message;return t.startsWith(`empty result:`)||t.includes(`produced empty result`)||t.includes(`produces empty result`)}function ch(e,t){return t.type===`compound`?L(e.getCompoundSolids(t.id)).length===0:!1}function lh(e){return np(e.makeCompound([]))}function uh(e,t,n,r){if(r&&xp(r)&&bp(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),ch(e,t))return n;if(ch(e,n))return t;let i=ip(t,`fuse`),a=n;if(a.type===`compound`){let t=L(e.getCompoundSolids(a.id)),n=i;for(let r of t)n=e.fuse(n,r);return F(n)}return F(e.fuse(i,ip(n,`fuse`)))}function dh(e,t,n,r){if(r&&xp(r)&&bp(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),ch(e,t))return lh(e);if(ch(e,n))return t;let i=ip(t,`cut`),a=n;if(a.type===`compound`){let t=L(e.getCompoundSolids(a.id)),n=i;for(let r of t)try{n=e.cut(n,r)}catch(t){if(sh(t))return lh(e);throw t}return F(n)}try{return F(e.cut(i,ip(n,`cut`)))}catch(t){if(sh(t))return lh(e);throw t}}function fh(e,t,n,r){if(r&&xp(r)&&bp(`boolean-options`,`BooleanOptions (optimisation, simplify, strategy, fuzzyValue) not supported; ignored.`),ch(e,t)||ch(e,n))return lh(e);try{return F(e.intersect(ip(t,`intersect`),ip(n,`intersect`)))}catch(t){if(sh(t))return lh(e);throw t}}function ph(e,n,r,i){let{point:a,normal:o}=qm(e,r),s=Xf(n)&&n.type===`solid`?n.id:I(n,`solid`),c=L(e.section(s,a[0],a[1],a[2],o[0],o[1],o[2]));if(c.length===0)return np(e.makeCompound([]));let l=[];for(let n=0;n<c.length;n++){let r=L(e.getFaceWires(t(c,n)));for(let e=0;e<r.length;e++)l.push(ep(t(r,e)))}let[u]=l;if(l.length===1&&u!==void 0)return u;let d=_p();return vp.set(d,l),np(d)}function mh(e,n,r){if(n.length===0)throw Error(`brepkit: fuseAll requires at least one shape`);if(n.length===1)return t(n,0);if(e.compoundFuse){let t=[];for(let r of n){let n=r;n.type===`compound`?t.push(...L(e.getCompoundSolids(n.id))):t.push(ip(r,`fuseAll`))}if(t.length===0)throw Error(`brepkit: fuseAll resolved to zero solid IDs`);return F(e.compoundFuse(new Uint32Array(t)))}let i=[...n];for(;i.length>1;){let t=[];for(let n=0;n<i.length;n+=2)n+1<i.length?t.push(uh(e,i[n],i[n+1],r)):t.push(i[n]);i=t}return t(i,0)}function hh(e,t,n,r){if(n.length===0)return t;if(n.length===1)return dh(e,t,n[0],r);let i=ip(t,`cutAll`),a=[];for(let t of n){let n=t;n.type===`compound`?a.push(...L(e.getCompoundSolids(n.id))):a.push(ip(t,`cutAll`))}return a.length===0?t:F(e.compoundCut(i,new Uint32Array(a)))}function gh(e,t,n){if(n.length===0)throw Error(`brepkit: split requires at least one tool`);let{point:r,normal:i}=qm(e,n[0]),a=L(e.split(I(t,`solid`),r[0],r[1],r[2],i[0],i[1],i[2]));return np(e.makeCompound(a))}function _h(e,t,n,r,i,a,o){let s=e.meshBoolean(t,n,r,i,a,o);return{vertices:new Float32Array(s.positions),normals:new Float32Array(s.normals),triangles:new Uint32Array(s.indices),uvs:new Float32Array,faceGroups:[{start:0,count:s.indices.length,faceHash:0}]}}function vh(e,t,n,r,i){let a=[];return(!Xf(t)||t.IsNull())&&a.push({operand:`base`,issue:`null-shape`,message:`Base shape is null`}),(!Xf(n)||n.IsNull())&&a.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is null`}),a.length>0?{valid:!1,issues:a}:(i(t)||a.push({operand:`base`,issue:`not-valid`,message:`Base shape fails BRepCheck validation. Try autoHeal() first.`}),i(n)||a.push({operand:`tool`,issue:`not-valid`,message:`Tool shape fails BRepCheck validation. Try autoHeal() first.`}),{valid:a.length===0,issues:a})}function yh(e,n,r){let i=[];for(let r of n){let n=r;if(n.type===`solid`){let r=L(e.getSolidVertices(n.id));for(let n of r){let r=e.getVertexPosition(n);i.push(t(r,0),t(r,1),t(r,2))}}else if(n.type===`vertex`){let r=e.getVertexPosition(n.id);i.push(t(r,0),t(r,1),t(r,2))}}if(i.length<12)throw Error(`brepkit: hull requires enough points`);return F(e.convexHull(i))}function bh(e,t,n){if(t.length<4)throw Error(`brepkit: hull needs at least 4 points`);let r=[];for(let e of t)r.push(e.x,e.y,e.z);return F(e.convexHull(r))}function xh(e,n,r,i){let a=new Float64Array(n.length*3);for(let e=0;e<n.length;e++){let r=t(n,e);a[e*3]=r.x,a[e*3+1]=r.y,a[e*3+2]=r.z}let o=new Uint32Array(r.length*3);for(let e=0;e<r.length;e++){let n=t(r,e);o[e*3]=n[0],o[e*3+1]=n[1],o[e*3+2]=n[2]}return F(e.importIndexedMesh(a,o))}function Sh(e){return{fuse:(t,n,r)=>uh(e,t,n,r),cut:(t,n,r)=>dh(e,t,n,r),intersect:(t,n,r)=>fh(e,t,n,r),section:(t,n,r)=>ph(e,t,n,r),fuseAll:(t,n)=>mh(e,t,n),cutAll:(t,n,r)=>hh(e,t,n,r),split:(t,n)=>gh(e,t,n),meshBoolean:(t,n,r,i,a,o)=>_h(e,t,n,r,i,a,o),checkBoolean:(t,n,r)=>vh(e,t,n,r,t=>Ym(e,t)),hull:(t,n)=>yh(e,t,n),hullFromPoints:(t,n)=>bh(e,t,n),buildSolidFromFaces:(t,n,r)=>xh(e,t,n,r)}}function Ch(e,t,n,r){return rp(e.makeVertex(t,n,r))}function wh(e,t,n,r){if(t&&typeof t==`object`&&`origin`in t&&`direction`in t){let{origin:i,direction:a}=t,o=n??0,s=r??1;return Ph(e,[i[0]+a[0]*o,i[1]+a[1]*o,i[2]+a[2]*o],[i[0]+a[0]*s,i[1]+a[1]*s,i[2]+a[2]*s])}if(Xf(t)&&t.type===`edge`)return t;throw Error(`brepkit: makeEdge requires a curve with origin/direction, or an edge handle`)}function Th(e,t){let n=[];for(let r of t){let t=r;if(t.type===`wire`)for(let r of L(e.getWireEdges(t.id)))n.push(r);else n.push(I(r,`edge`))}return ep(e.makeWire(n,!0))}function Eh(e,t,n){let r=t,i=r.type===`edge`?e.makeWire([r.id],!0):I(t,`wire`);return Qf(n?e.makePlanarFaceFromWire(i):e.makeFaceFromWire(i))}function Dh(e,t,n,r){return F(e.makeBox(t,n,r))}function Oh(e,t,n){return Qf(e.makeRectangle(t,n))}function kh(e,t,n,r,i){let a=F(e.makeCylinder(t,n));return Gm(r,i)?Km(e,a,r,i):a}function Ah(e,t,n){let r=F(e.makeSphere(t,32));return n&&(n[0]!==0||n[1]!==0||n[2]!==0)?Mm(e,r,n[0],n[1],n[2]):r}function jh(e,t,n,r,i,a){let o=F(e.makeCone(t,n,r));return Gm(i,a)?Km(e,o,i,a):o}function Mh(e,t,n,r,i){let a=F(e.makeTorus(t,n,32));return Gm(r,i)?Km(e,a,r,i):a}function Nh(e,t,n,r){let i=Math.max(t,n,r);return Im(e,Ah(e,i),[t/i,0,0,0,n/i,0,0,0,r/i],[0,0,0],!1)}function Ph(e,t,n){return $f(e.makeLineEdge(t[0],t[1],t[2],n[0],n[1],n[2]))}function Fh(e,t,n,r){let i=Math.sqrt(n[0]**2+n[1]**2+n[2]**2);return $f(e.makeCircleEdge(t[0],t[1],t[2],n[0]/i,n[1]/i,n[2]/i,r))}function Ih(e,t,n,r,i,a){let o=a-i,s=1e-9;if(o>s&&o<2*Math.PI-s){let o=Math.hypot(n[0],n[1],n[2]),s=[n[0]/o,n[1]/o,n[2]/o],c=Math.abs(s[0])<.9?[1,0,0]:[0,1,0],l=[s[1]*c[2]-s[2]*c[1],s[2]*c[0]-s[0]*c[2],s[0]*c[1]-s[1]*c[0]],u=Math.hypot(l[0],l[1],l[2]),d=[l[0]/u,l[1]/u,l[2]/u],f=[s[1]*d[2]-s[2]*d[1],s[2]*d[0]-s[0]*d[2],s[0]*d[1]-s[1]*d[0]],p=e=>{let n=Math.cos(e),i=Math.sin(e);return[t[0]+r*(n*d[0]+i*f[0]),t[1]+r*(n*d[1]+i*f[1]),t[2]+r*(n*d[2]+i*f[2])]},m=p(i),h=p(a);return $f(e.makeCircleArc3d(m[0],m[1],m[2],h[0],h[1],h[2],t[0],t[1],t[2],s[0],s[1],s[2]))}return ug(e,t,n,r,i,a)}function Lh(e,t,n,r,i,a){let o=2*(e*(r-a)+n*(a-t)+i*(t-r));return Math.abs(o)<1e-12?null:[((e**2+t**2)*(r-a)+(n**2+r**2)*(a-t)+(i**2+a**2)*(t-r))/o,((e**2+t**2)*(i-n)+(n**2+r**2)*(e-i)+(i**2+a**2)*(n-e))/o]}function Rh(e,t,n,r){let i=[n[0]-t[0],n[1]-t[1],n[2]-t[2]],a=[r[0]-t[0],r[1]-t[1],r[2]-t[2]],o=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],s=Math.sqrt(o[0]**2+o[1]**2+o[2]**2);if(s<1e-12)return Ph(e,t,r);let c=[o[0]/s,o[1]/s,o[2]/s],l=Math.sqrt(i[0]**2+i[1]**2+i[2]**2),u=[i[0]/l,i[1]/l,i[2]/l],d=[c[1]*u[2]-c[2]*u[1],c[2]*u[0]-c[0]*u[2],c[0]*u[1]-c[1]*u[0]],f=e=>{let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return[n*u[0]+r*u[1]+i*u[2],n*d[0]+r*d[1]+i*d[2]]},[p,m]=f(t),[h,g]=f(n),[_,v]=f(r),y=Lh(p,m,h,g,_,v);if(!y)return Ph(e,t,r);let[b,x]=y,S=[t[0]+b*u[0]+x*d[0],t[1]+b*u[1]+x*d[1],t[2]+b*u[2]+x*d[2]];return $f(e.makeCircleArc3d(t[0],t[1],t[2],r[0],r[1],r[2],S[0],S[1],S[2],c[0],c[1],c[2]))}function zh(e,t,n,r,i,a){let o=Math.sqrt(n[0]**2+n[1]**2+n[2]**2);if(a!==void 0){let s=Math.sqrt(a[0]**2+a[1]**2+a[2]**2);return $f(e.makeEllipseEdgeWithRef(t[0],t[1],t[2],n[0]/o,n[1]/o,n[2]/o,r,i,a[0]/s,a[1]/s,a[2]/s))}return $f(e.makeEllipseEdge(t[0],t[1],t[2],n[0]/o,n[1]/o,n[2]/o,r,i))}function Bh(e,t,n,r,i,a,o,s){return dg(e,t,n,r,i,a,o,s)}function Vh(e,n){if(n.length<2)throw Error(`brepkit: bezier requires at least 2 points`);let r=n.length-1,i=n.length,a=[...Array(r+1).fill(0),...Array(r+1).fill(1)],o=Array(i).fill(1),s=n.flatMap(([e,t,n])=>[e,t,n]),c=t(n,0),l=t(n,i-1);return $f(e.makeNurbsEdge(c[0],c[1],c[2],l[0],l[1],l[2],r,a,s,o))}function Hh(e,t,n,r){return $f(e.makeTangentArc3d(t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]))}function Uh(e,t,n,r,i,a,o){let s=n/t,c=Math.max(4,Math.ceil(s*16)),l=i?.[0]??0,u=i?.[1]??0,d=i?.[2]??0,f=o?-1:1,p=[];for(let e=0;e<=c;e++){let t=e/c,i=f*2*Math.PI*s*t;p.push([l+r*Math.cos(i),u+r*Math.sin(i),d+n*t])}return Th(e,[ng(e,p)])}function Wh(e,t){let n=[];for(let r of t){let t=r;if(t.type===`edge`)n.push(t.id);else if(t.type===`wire`)for(let r of L(e.getWireEdges(t.id)))n.push(r)}if(n.length===0)throw Error(`brepkit: makeWireFromMixed requires at least one edge`);return ep(e.makeWire(n,!1))}function Gh(e,t){let n=t.filter(Xf);if(n.length===0)throw Error(`brepkit: makeCompound requires at least one shape`);if(n.every(e=>e.type===`solid`))return np(e.makeCompound(n.map(e=>e.id)));let r=_p();return vp.set(r,n),np(r)}function Kh(e,t,n){let r=Dh(e,Math.abs(n[0]-t[0]),Math.abs(n[1]-t[1]),Math.abs(n[2]-t[2])),i=Math.min(t[0],n[0]),a=Math.min(t[1],n[1]),o=Math.min(t[2],n[2]);return i!==0||a!==0||o!==0?Mm(e,r,i,a,o):r}function qh(e,t){let n=t;if(n.type===`solid`)return t;if(n.type===`shell`){try{return e.getSolidFaces(n.id),F(n.id)}catch{}return F(e.solidFromShell(n.id))}return F(e.solidFromShell(I(t,`shell`)))}function Jh(e,t){return Eh(e,t,!1)}function Yh(e,t,n){let r=n.map(e=>I(e,`wire`));return Qf(e.addHolesToFace(I(t,`face`),r))}function Xh(e,t){return Qf(e.removeHolesFromFace(I(t,`face`)))}function Zh(e,t,n){return Eh(e,n,!1)}function Qh(e,t,n,r){let i=[];for(let[e,n,r]of t)i.push(e,n,r);let a=Math.min(3,n-1),o=Math.min(3,r-1);try{return Qf(e.interpolateSurface(i,n,r,a,o))}catch{return $h(e,t,n,r)}}function $h(e,n,r,i){let a=[];for(let o=0;o<r-1;o++)for(let r=0;r<i-1;r++){let s=o*i+r,c=(o+1)*i+r,l=o*i+(r+1),u=(o+1)*i+(r+1),d=eg(e,t(n,s),t(n,c),t(n,l));d&&a.push(d);let f=eg(e,t(n,c),t(n,u),t(n,l));f&&a.push(f)}if(a.length===0)throw Error(`brepkit: no valid faces in surface grid`);return qp(e,a,1e-6)}function eg(e,t,n,r){let i=n[0]-t[0],a=n[1]-t[1],o=n[2]-t[2],s=r[0]-t[0],c=r[1]-t[1],l=r[2]-t[2],u=a*l-o*c,d=o*s-i*l,f=i*c-a*s;if(Math.sqrt(u*u+d*d+f*f)<1e-12)return null;try{return Eh(e,Th(e,[Ph(e,t,n),Ph(e,n,r),Ph(e,r,t)]))}catch(e){return console.warn(`brepkit: makeNonPlanarFace failed:`,e),null}}function tg(e,t,n){let r=t.map(e=>I(e,`face`));return F(e.sewFaces(r,n))}function ng(e,n,r){if(r?.tolerance!==void 0&&bp(`interpolate-tolerance`,`interpolatePoints() tolerance parameter is not supported; brepkit uses chord-length parameterisation.`),n.length<2)throw Error(`brepkit: need at least 2 points`);if(n.length===2)return Ph(e,t(n,0),t(n,1));let i=Math.min(3,n.length-1),a=n.flatMap(([e,t,n])=>[e,t,n]);return $f(e.interpolatePoints(a,i))}function rg(e,t,n){let r=n?.degMax??3,i=n?.tolerance??1e-6,a=[];for(let e of t)a.push(e[0],e[1],e[2]);let o=Math.max(r+1,Math.min(t.length,Math.ceil(t.length*.7)));return $f(e.approximateCurveLspia(a,r,o,i,100))}function ig(e,t,n,r){return{x:t,y:n,z:r}}function ag(e,t,n,r){let i=Math.sqrt(t*t+n*n+r*r);return{x:t/i,y:n/i,z:r/i}}function og(e,t,n,r){return{x:t,y:n,z:r}}function sg(e,t,n,r,i,a,o){return{origin:[t,n,r],direction:[i,a,o]}}function cg(e,t,n,r,i,a,o,s,c,l){return{origin:[t,n,r],z:[i,a,o],x:s===void 0?void 0:[s,c,l]}}function lg(e,t,n,r,i,a,o,s,c,l){return{origin:[t,n,r],z:[i,a,o],x:s===void 0?void 0:[s,c,l]}}function ug(e,n,r,i,a,o){let s=Math.sqrt(r[0]**2+r[1]**2+r[2]**2),c=[r[0]/s,r[1]/s,r[2]/s],l=Math.abs(c[0])<.9?[1,0,0]:[0,1,0],u=[c[1]*l[2]-c[2]*l[1],c[2]*l[0]-c[0]*l[2],c[0]*l[1]-c[1]*l[0]],d=Math.sqrt(u[0]**2+u[1]**2+u[2]**2),f=[u[0]/d,u[1]/d,u[2]/d],p=[c[1]*f[2]-c[2]*f[1],c[2]*f[0]-c[0]*f[2],c[0]*f[1]-c[1]*f[0]],m=Math.ceil(Math.abs(o-a)/(Math.PI/2)),h=(o-a)/m,g=[],_=[];for(let e=0;e<=m;e++){let t=a+e*h,r=Math.cos(t),o=Math.sin(t),s=n[0]+i*(r*f[0]+o*p[0]),c=n[1]+i*(r*f[1]+o*p[1]),l=n[2]+i*(r*f[2]+o*p[2]);if(e>0){let t=a+(e-.5)*h,r=Math.cos(t),o=Math.sin(t),s=i/Math.cos(h/2),c=n[0]+s*(r*f[0]+o*p[0]),l=n[1]+s*(r*f[1]+o*p[1]),u=n[2]+s*(r*f[2]+o*p[2]);g.push(c,l,u),_.push(Math.cos(h/2))}g.push(s,c,l),_.push(1)}let v=[,,,].fill(0);for(let e=1;e<m;e++)v.push(e,e);v.push(...[,,,].fill(m));let y=t(v,v.length-1);for(let e=0;e<v.length;e++)v[e]=t(v,e)/y;let b=t(g,0),x=t(g,1),S=t(g,2),C=t(g,g.length-3),w=t(g,g.length-2),ee=t(g,g.length-1);return $f(e.makeNurbsEdge(b,x,S,C,w,ee,2,v,g,_))}function dg(e,n,r,i,a,o,s,c){let l=Math.sqrt(r[0]**2+r[1]**2+r[2]**2),u=[r[0]/l,r[1]/l,r[2]/l],d;if(c){let e=Math.sqrt(c[0]**2+c[1]**2+c[2]**2);d=[c[0]/e,c[1]/e,c[2]/e]}else{let e=Math.abs(u[0])<.9?[1,0,0]:[0,1,0],t=[u[1]*e[2]-u[2]*e[1],u[2]*e[0]-u[0]*e[2],u[0]*e[1]-u[1]*e[0]],n=Math.sqrt(t[0]**2+t[1]**2+t[2]**2);d=[t[0]/n,t[1]/n,t[2]/n]}let f=[u[1]*d[2]-u[2]*d[1],u[2]*d[0]-u[0]*d[2],u[0]*d[1]-u[1]*d[0]],p=Math.ceil(Math.abs(s-o)/(Math.PI/2)),m=(s-o)/p,h=[],g=[];for(let e=0;e<=p;e++){let t=o+e*m,r=Math.cos(t),s=Math.sin(t),c=n[0]+i*r*d[0]+a*s*f[0],l=n[1]+i*r*d[1]+a*s*f[1],u=n[2]+i*r*d[2]+a*s*f[2];if(e>0){let t=o+(e-.5)*m,r=Math.cos(t),s=Math.sin(t),c=1/Math.cos(m/2),l=n[0]+i*c*r*d[0]+a*c*s*f[0],u=n[1]+i*c*r*d[1]+a*c*s*f[1],p=n[2]+i*c*r*d[2]+a*c*s*f[2];h.push(l,u,p),g.push(Math.cos(m/2))}h.push(c,l,u),g.push(1)}let _=[,,,].fill(0);for(let e=1;e<p;e++)_.push(e,e);_.push(...[,,,].fill(p));let v=t(_,_.length-1);for(let e=0;e<_.length;e++)_[e]=t(_,e)/v;let y=t(h,0),b=t(h,1),x=t(h,2),S=t(h,h.length-3),C=t(h,h.length-2),w=t(h,h.length-1);return $f(e.makeNurbsEdge(y,b,x,S,C,w,2,_,h,g))}function fg(e){return{makeVertex:(t,n,r)=>Ch(e,t,n,r),makeEdge:(t,n,r)=>wh(e,t,n,r),makeWire:t=>Th(e,t),makeWireFromMixed:t=>Wh(e,t),makeFace:(t,n)=>Eh(e,t,n),makeBox:(t,n,r)=>Dh(e,t,n,r),makeRectangle:(t,n)=>Oh(e,t,n),makeCylinder:(t,n,r,i)=>kh(e,t,n,r,i),makeSphere:(t,n)=>Ah(e,t,n),makeCone:(t,n,r,i,a)=>jh(e,t,n,r,i,a),makeTorus:(t,n,r,i)=>Mh(e,t,n,r,i),makeEllipsoid:(t,n,r)=>Nh(e,t,n,r),makeLineEdge:(t,n)=>Ph(e,t,n),makeCircleEdge:(t,n,r)=>Fh(e,t,n,r),makeCircleArc:(t,n,r,i,a)=>Ih(e,t,n,r,i,a),makeArcEdge:(t,n,r)=>Rh(e,t,n,r),makeEllipseEdge:(t,n,r,i,a)=>zh(e,t,n,r,i,a),makeEllipseArc:(t,n,r,i,a,o,s)=>Bh(e,t,n,r,i,a,o,s),makeBezierEdge:t=>Vh(e,t),makeTangentArc:(t,n,r)=>Hh(e,t,n,r),makeHelixWire:(t,n,r,i,a,o)=>Uh(e,t,n,r,i,a,o),makeCompound:t=>Gh(e,t),makeBoxFromCorners:(t,n)=>Kh(e,t,n),solidFromShell:t=>qh(e,t),makeNonPlanarFace:t=>Jh(e,t),addHolesInFace:(t,n)=>Yh(e,t,n),removeHolesFromFace:t=>Xh(e,t),makeFaceOnSurface:(t,n)=>Zh(e,t,n),bsplineSurface:(t,n,r)=>Qh(e,t,n,r),triangulatedSurface:(t,n,r)=>$h(e,t,n,r),buildTriFace:(t,n,r)=>eg(e,t,n,r),sewAndSolidify:(t,n)=>tg(e,t,n),interpolatePoints:(t,n)=>ng(e,t,n),approximatePoints:(t,n)=>rg(e,t,n),createPoint3d:(t,n,r)=>ig(e,t,n,r),createDirection3d:(t,n,r)=>ag(e,t,n,r),createVector3d:(t,n,r)=>og(e,t,n,r),createAxis1:(t,n,r,i,a,o)=>sg(e,t,n,r,i,a,o),createAxis2:(t,n,r,i,a,o,s,c,l)=>cg(e,t,n,r,i,a,o,s,c,l),createAxis3:(t,n,r,i,a,o,s,c,l)=>lg(e,t,n,r,i,a,o,s,c,l)}}function pg(e,t,n,r){let i=ip(t,`fillet`),a=n.map(e=>I(e,`edge`));if(typeof r==`number`)return F(e.fillet(i,a,r));let o=[];for(let[e,t]of n.entries()){let n=a[e]??0,i;i=typeof r==`function`?r(t):r;let[s,c]=Array.isArray(i)?i:[i,i];o.push({edge:n,startRadius:s,endRadius:c})}return F(e.filletVariable(i,JSON.stringify(o)))}function mg(e,t,n,r){let i=ip(t,`chamfer`),a=n.map(e=>I(e,`edge`));if(typeof r==`number`)return F(e.chamfer(i,a,r));if(Array.isArray(r)){let[t,n]=r;return typeof e.chamferAsymmetric==`function`?F(e.chamferAsymmetric(i,a,t,n)):(bp(`chamfer-asymmetric`,`chamferAsymmetric not available; using averaged distance.`),F(e.chamfer(i,a,(t+n)/2)))}let o=new Map;for(let[e,t]of n.entries()){let n=r(t),i=a[e];if(i===void 0)continue;let[s,c]=Array.isArray(n)?n:[n,n],l=`${s},${c}`,u=o.get(l);u?u.ids.push(i):o.set(l,{ids:[i],d1:s,d2:c})}let s=i;for(let t of o.values())t.d1===t.d2?s=e.chamfer(s,t.ids,t.d1):typeof e.chamferAsymmetric==`function`?s=e.chamferAsymmetric(s,t.ids,t.d1,t.d2):(bp(`chamfer-callback`,`chamferAsymmetric not available; asymmetric edges use averaged distance.`),s=e.chamfer(s,t.ids,(t.d1+t.d2)/2));return F(s)}function hg(e,t,n,r,i){let a=r*Math.tan(i*Math.PI/180),o=ip(t,`chamferDistAngle`),s=n.map(e=>I(e,`edge`));return typeof e.chamferAsymmetric==`function`?F(e.chamferAsymmetric(o,s,r,a)):(bp(`chamfer-dist-angle`,`chamferAsymmetric not available; using averaged distance.`),F(e.chamfer(o,s,(r+a)/2)))}function gg(e,n){let r=L(e.getFaceVertices(n));if(r.length<1)return null;let i=0,a=0,o=0;for(let n of r){let r=e.getVertexPosition(n);i+=t(r,0),a+=t(r,1),o+=t(r,2)}let s=r.length;return{x:i/s,y:a/s,z:o/s}}function _g(e,t,n){try{let r=e.getFaceNormal(t),i=-1,a=-2;for(let t of n)try{let n=e.getFaceNormal(t),o=(r[0]??0)*(n[0]??0)+(r[1]??0)*(n[1]??0)+(r[2]??0)*(n[2]??0);o>a&&(a=o,i=t)}catch{}if(i>=0&&a>.99)return i}catch{}return null}function vg(e,t,n){try{let r=gg(e,t);if(r===null)return null;let i=-1,a=1/0;for(let t of n)try{let n=gg(e,t);if(n===null)continue;let o=Math.sqrt((r.x-n.x)**2+(r.y-n.y)**2+(r.z-n.z)**2);o<a&&(a=o,i=t)}catch{}if(i>=0&&a<.001)return i}catch{}return null}function yg(e,t,n,r){if(r.has(t))return t;let i=_g(e,t,n);if(i!==null)return i;let a=vg(e,t,n);return a===null?t:a}function bg(e,t,n,r,i){i!==void 0&&bp(`shell-tolerance`,`shell() tolerance parameter is not supported; brepkit uses its own internal tolerance.`);let a=ip(t,`shell`),o=L(e.getSolidFaces(a)),s=new Set(o),c=n.map(t=>yg(e,I(t,`face`),o,s));return F(e.shell(a,r,c))}function xg(e,t,n){let r=t;if(r.type===`face`)return F(e.thicken(r.id,n));throw Error(`brepkit: thicken() requires a face`)}function Sg(e,t,n,r){r!==void 0&&bp(`offset-tolerance`,`offset() tolerance parameter is not supported; brepkit uses its own internal tolerance.`);let i=t;if(i.type===`face`)return F(e.thicken(i.id,n));let a=ip(t,`offset`);return F(e.offsetSolidV2(a,n))}function Cg(e,t,n){let r=ip(t,`filletVariable`);return F(e.filletVariable(r,n))}function wg(e,t,n,r,i,a){let o=ip(t,`draft`),s=n.map(e=>I(e,`face`));return F(e.draft(o,s,r[0],r[1],r[2],i[0],i[1],i[2],a))}function Tg(e,t,n){let r=ip(t,`defeature`),i=n.map(e=>I(e,`face`));return F(e.defeature(r,i))}function Eg(e){switch(e){case`arc`:case`tangent`:return`arc`;case`intersection`:return`intersection`;default:return`intersection`}}function Dg(e,n,r,i){if(typeof e.offsetWire2DWithJoin==`function`)return ep(e.offsetWire2DWithJoin(I(n,`wire`),r,Eg(i)));let a=Pp(e,n,`edge`);if(a.length===0)return n;let o=[];for(let n of a){let r=e.getEdgeVertices(I(n,`edge`));o.push(t(r,0),t(r,1))}if(o.length<6)return n;let s=e.offsetPolygon2d(o,r,1e-10),c=[];for(let e=0;e<s.length;e+=2)c.push(t(s,e),t(s,e+1),0);return ep(e.makePolygonWire(c))}function Og(e,t){if(t.type===`solid`)try{e.healSolid(I(t))}catch(e){console.warn(`brepkit: healing failed in simplify:`,e)}return t}function kg(e,t){let n=t,r=e.reverseShape(n.id);return Zf(n.type,r)}function Ag(e){return{fillet:(t,n,r)=>pg(e,t,n,r),chamfer:(t,n,r)=>mg(e,t,n,r),chamferDistAngle:(t,n,r,i)=>hg(e,t,n,r,i),shell:(t,n,r,i)=>bg(e,t,n,r,i),thicken:(t,n)=>xg(e,t,n),offset:(t,n,r)=>Sg(e,t,n,r),filletVariable:(t,n)=>Cg(e,t,n),draft:(t,n,r,i,a)=>wg(e,t,n,r,i,Tp(n,a)),defeature:(t,n)=>Tg(e,t,n),offsetWire2D:(t,n,r)=>Dg(e,t,n,r),simplify:t=>Og(e,t),reverseShape:t=>kg(e,t)}}function jg(e,t){let n=JSON.parse(e),r=n.evolution;if(!r||typeof r.modified!=`object`||typeof r.generated!=`object`)throw Error(`brepkit: invalid evolution JSON structure`);let i=F(n.solid),a=e=>{let n=new Map;for(let[r,i]of Object.entries(e)){let e=Number(r)%t,a=i.map(e=>e%t),o=n.get(e);o?o.push(...a):n.set(e,a)}return n},o=a(r.modified),s=a(r.generated),c=new Set;for(let e of r.deleted)c.add(e%t);return{shape:i,evolution:{modified:o,generated:s,deleted:c}}}function Mg(e,t){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return n*n+r*r+i*i}function Ng(e,n){try{let r=e.tessellateFace(n,1).positions;if(r.length<3)return[0,0,0];let i=0,a=0,o=0,s=r.length/3;for(let e=0;e<r.length;e+=3)i+=t(r,e),a+=t(r,e+1),o+=t(r,e+2);return[i/s,a/s,o/s]}catch{return[0,0,0]}}function Pg(e,t,n){try{return{hash:n,normal:e.getFaceNormal(t),centroid:Ng(e,t)}}catch{return{hash:n,normal:[0,0,0],centroid:Ng(e,t)}}}var Fg=.707,Ig=100,Lg=.05;function Rg(e,n){let r=-1/0,i=[];for(let a=0;a<n.length;a++){let o=t(n,a),s=(e.normal[0]??0)*(o.normal[0]??0)+(e.normal[1]??0)*(o.normal[1]??0)+(e.normal[2]??0)*(o.normal[2]??0);if(s<Fg)continue;let c=Mg(e.centroid,o.centroid);if(c>Ig)continue;let l=s-c/Ig;l>r&&(r=l),i.push({idx:a,score:l})}return{matches:i,bestScore:r}}function zg(e,t){let n=1/0,r;for(let i of t){let t=Mg(e.centroid,i.centroid);t<n&&(n=t,r=i)}return r}function Bg(e,n,r,i,a,o,s,c){let l=n;if(l.type!==`solid`)return;let u=L(e.getSolidFaces(l.id)),d=Math.min(u.length,r.length),f=[];for(let n=0;n<d;n++){let i=t(u,n);f.push(Pg(e,i,r[n]??i%a))}let p=i.map(t=>Pg(e,t,t%a)),m=new Set;for(let e of p){let{matches:n,bestScore:r}=Rg(e,f);if(n.length>0){for(let i of n)if(i.score>=r-Lg){let n=t(f,i.idx),r=o.get(n.hash)??[];r.push(e.hash),o.set(n.hash,r),m.add(i.idx)}}else{let t=zg(e,f);if(t){let n=s.get(t.hash)??[];n.push(e.hash),s.set(t.hash,n)}}}for(let e=0;e<f.length;e++)m.has(e)||c.add(t(f,e).hash)}function Vg(e,t,n,r,i,a,o,s){let c=new Set(s),l=new Map(a);Bg(e,t,n,r,i,a,o,s),s.clear();for(let e of c)s.add(e);for(let e of n){let t=!l.has(e)&&a.has(e)&&(a.get(e)?.length??0)>0,n=o.has(e)&&(o.get(e)?.length??0)>0;!t&&!n&&s.add(e)}}function Hg(e,n,r,i,a,o){let s=n.filter(e=>!r.has(e));s.length>0&&e.length>0&&a.set(t(e,0),s);for(let t of e)i.has(t)||o.add(t)}function Ug(e,n,r,i,a,o,s,c,l){let u=new Set(i);if(r.some(e=>u.has(e))){let t=new Set(r);for(let e of r)u.has(e)&&o.set(e,[e]);let d=i.filter(e=>!t.has(e)),f=n.filter(e=>!u.has(e%a));l&&d.length>0&&f.length>0?Vg(e,l,d,f,a,o,s,c):Hg(i,r,u,t,s,c)}else if(l)Bg(e,l,i,n,a,o,s,c);else{for(let e=0;e<i.length&&e<r.length;e++)o.set(t(i,e),[t(r,e)]);r.length>i.length&&i.length>0&&s.set(t(i,0),r.slice(i.length))}}function Wg(e,n,r,i,a,o){let s=n,c=new Map,l=new Map,u=new Set;if(s.type===`solid`){let n=L(e.getSolidFaces(s.id)),d=n.map(e=>e%i);if(a)for(let e=0;e<r.length&&e<d.length;e++)c.set(t(r,e),[t(d,e)]);else Ug(e,n,d,r,i,c,l,u,o)}return{shape:n,evolution:{modified:c,generated:l,deleted:u}}}function Gg(e,t,n,r,i){for(let[a,o]of e){let s=[];for(let e of o){r.add(e);let i=t.get(e);i?s.push(...i):n.has(e)||s.push(e)}s.length>0?e.set(a,s):(e.delete(a),i?.add(a))}}function Kg(e,t){let n=new Set;Gg(t.combinedModified,e.evolution.modified,e.evolution.deleted,n,t.combinedDeleted),Gg(t.combinedGenerated,e.evolution.modified,e.evolution.deleted,n);for(let[r,i]of e.evolution.modified)t.combinedModified.has(r)||n.has(r)||t.combinedModified.set(r,[...i]);for(let[r,i]of e.evolution.generated){if(n.has(r))continue;let e=t.combinedGenerated.get(r)??[];t.combinedGenerated.set(r,[...e,...i])}for(let n of e.evolution.deleted)t.inputFaceHashSet.has(n)&&t.combinedDeleted.add(n)}function qg(e,t,n,r,i,a){let o=L(e.getCompoundSolids(n)),s=t,c={combinedModified:new Map,combinedGenerated:new Map,combinedDeleted:new Set,inputFaceHashSet:new Set(r)};for(let e of o){let t=s;if(t.type!==`solid`)break;let n=jg(a(t.id,e),i);s=n.shape,Kg(n,c)}return{shape:s,accum:c}}function Jg(e,t,n,r,i,a,o,s,c){let l={hasErrors:!1,hasWarnings:!1,messages:[]},u=t,d=n;if(r.length>0&&u.type===`solid`){if(d.type===`solid`)try{return{...jg(o(u.id,d.id),i),diagnostics:l}}catch(e){if(!sh(e))throw e}if(d.type===`compound`){let{shape:n,accum:a}=qg(e,t,d.id,r,i,o);return{shape:n,evolution:{modified:a.combinedModified,generated:a.combinedGenerated,deleted:a.combinedDeleted},diagnostics:l}}}return{...Wg(e,s(t,n,a),r,i,!1,t),diagnostics:l}}function Yg(e,t,n,r,i,a,o){return Wg(e,Mm(e,t,n,r,i),a,o,!0)}function Xg(e,t,n,r,i,a,o){return Wg(e,Nm(e,t,n*180/Math.PI,a,o),r,i,!0)}function Zg(e,t,n,r,i,a){return Wg(e,Pm(e,t,n,r),i,a,!0)}function Qg(e,t,n,r,i,a){return Wg(e,Fm(e,t,n,r),i,a,!0)}function $g(e,t,n,r,i,a,o){return Wg(e,Im(e,t,n,r,i),a,o,!0)}function e_(e,t,n,r,i,a){return Jg(e,t,n,r,i,a,(t,n)=>e.fuseWithEvolution(t,n),(t,n,r)=>uh(e,t,n,r),`fuseWithHistory`)}function t_(e,t,n,r,i,a){return Jg(e,t,n,r,i,a,(t,n)=>e.cutWithEvolution(t,n),(t,n,r)=>dh(e,t,n,r),`cutWithHistory`)}function n_(e,t,n,r,i,a){return Jg(e,t,n,r,i,a,(t,n)=>e.intersectWithEvolution(t,n),(t,n,r)=>fh(e,t,n,r),`intersectWithHistory`)}function r_(e,t,n,r,i,a){return Wg(e,pg(e,t,n,r),i,a,!1,t)}function i_(e,t,n,r,i,a){return Wg(e,mg(e,t,n,r),i,a,!1,t)}function a_(e,t,n,r,i,a,o){return Wg(e,bg(e,t,n,r,o),i,a,!1,t)}function o_(e,t,n,r,i){return Wg(e,xg(e,t,n),r,i,!1,t)}function s_(e,t,n,r,i,a){return Wg(e,Sg(e,t,n,a),r,i,!1,t)}function c_(e,t,n,r,i,a,o,s){return Wg(e,wg(e,t,n,r,i,a),o,s,!1,t)}function l_(e,t,n,r,i){return Wg(e,Wm(e,t,n),r,i,!0)}function u_(e,t){let n=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];for(let e of t)n=mp(e.type===`translate`?cp(e.x,e.y,e.z):up(e.angle,e.axis,e.center),n);return{handle:n,dispose:()=>{}}}function d_(e){return{translateWithHistory:(t,n,r,i,a,o)=>Yg(e,t,n,r,i,a,o),rotateWithHistory:(t,n,r,i,a,o)=>Xg(e,t,n,r,i,a,o),mirrorWithHistory:(t,n,r,i,a)=>Zg(e,t,n,r,i,a),scaleWithHistory:(t,n,r,i,a)=>Qg(e,t,n,r,i,a),generalTransformWithHistory:(t,n,r,i,a,o)=>$g(e,t,n,r,i,a,o),fuseWithHistory:(t,n,r,i,a)=>e_(e,t,n,r,i,a),cutWithHistory:(t,n,r,i,a)=>t_(e,t,n,r,i,a),intersectWithHistory:(t,n,r,i,a)=>n_(e,t,n,r,i,a),filletWithHistory:(t,n,r,i,a)=>r_(e,t,n,r,i,a),chamferWithHistory:(t,n,r,i,a)=>i_(e,t,n,r,i,a),shellWithHistory:(t,n,r,i,a,o)=>a_(e,t,n,r,i,a,o),thickenWithHistory:(t,n,r,i)=>o_(e,t,n,r,i),offsetWithHistory:(t,n,r,i,a)=>s_(e,t,n,r,i,a),draftWithHistory:(t,n,r,i,a,o,s)=>c_(e,t,n,r,i,Tp(n,a),o,s),applyComposedTransformWithHistory:(t,n,r,i)=>l_(e,t,n,r,i),composeTransform:t=>u_(e,t)}}function f_(e,t,n){let r=I(t),i=t,a=n.tolerance||.01,o=n.angularTolerance>0?n.angularTolerance:void 0,s;if(i.type===`solid`)s=h_(e,r,a,!!n.includeUVs,o);else if(i.type===`face`)s=b_(e,r,a,0,o);else throw Error(`brepkit: cannot mesh shape of type '${i.type}'`);return n.skipNormals&&(s.normals=new Float32Array),n.includeUVs||(s.uvs=new Float32Array),s}function p_(e,n,r,i){let a=n;if(a.type!==`solid`)return{lines:new Float32Array,edgeGroups:[]};let o=i>0?i:void 0,s=e.meshEdgesAll(a.id,r,o),c=s.positions,l=s.offsets,u=s.edgeCount,d=[];for(let e=0;e<u;e++){let n=t(l,e),r=((e+1<u?t(l,e+1):c.length)-n)/3;d.push({start:n/3,count:r,edgeHash:e})}return{lines:new Float32Array(c),edgeGroups:d}}function m_(e,t){return!1}function h_(e,t,n,r,i){try{return g_(e,t,n,r,i)}catch(r){return console.warn(`brepkit: tessellateSolidGrouped failed (solidId=${t}), falling back to per-face:`,r),y_(e,t,n,i)}}function g_(e,t,n,r,i){return typeof e.tessellateSolidGroupedBinary==`function`?__(e,t,n,r,i,e.tessellateSolidGroupedBinary(t,n,i)):v_(e,t,n,r,i)}function __(e,n,r,i,a,o){let s=o.positions,c=o.normals,l=o.indices,u=o.faceOffsets,d=L(e.getSolidFaces(n)),f=u.length-1;if(f!==d.length)throw Error(`faceOffsets/faceIds length mismatch: ${f} groups vs ${d.length} faces`);let p=[];for(let e=0;e<u.length-1;e++){let n=t(u,e),r=t(u,e+1)-n;r!==0&&p.push({start:n,count:r,faceHash:d[e]??0})}let m=new Float32Array;if(i){let t=s.length/3*2;try{let i=e.tessellateSolidUV(n,r,a),o=JSON.parse(i);m=o.uvs.length===t?new Float32Array(o.uvs):new Float32Array(t)}catch{m=new Float32Array(t)}}return{vertices:s,normals:c,triangles:l,uvs:m,faceGroups:p}}function v_(e,n,r,i,a){let o=e.tessellateSolidGrouped(n,r,a),s=JSON.parse(o),c=L(e.getSolidFaces(n)),l=s.faceOffsets.length-1;if(l!==c.length)throw Error(`faceOffsets/faceIds length mismatch: ${l} groups vs ${c.length} faces`);let u=[];for(let e=0;e<s.faceOffsets.length-1;e++){let n=t(s.faceOffsets,e),r=t(s.faceOffsets,e+1)-n;r!==0&&u.push({start:n,count:r,faceHash:c[e]??0})}let d=new Float32Array;if(i){let t=s.positions.length/3*2;try{let i=e.tessellateSolidUV(n,r,a),o=JSON.parse(i);d=o.uvs.length===t?new Float32Array(o.uvs):new Float32Array(t)}catch{d=new Float32Array(t)}}return{vertices:new Float32Array(s.positions),normals:new Float32Array(s.normals),triangles:new Uint32Array(s.indices),uvs:d,faceGroups:u}}function y_(e,t,n,r){let i=L(e.getSolidFaces(t)),a=[],o=[],s=[],c=[],l=[],u=0;for(let t of i)try{let i=e.tessellateFace(t,n,r),d=i.positions,f=i.normals,p=i.indices,m=d.length/3;if(m===0)continue;let h=s.length;for(let e of d)a.push(e);for(let e of f)o.push(e);for(let e of p)s.push(e+u);for(let e=0;e<m;e++)c.push(0,0);l.push({start:h,count:p.length,faceHash:t}),u+=m}catch(e){console.warn(`brepkit: face tessellation failed (faceId=${t}):`,e)}return{vertices:new Float32Array(a),normals:new Float32Array(o),triangles:new Uint32Array(s),uvs:new Float32Array(c),faceGroups:l}}function b_(e,t,n,r,i){let a=e.tessellateFace(t,n,i),o=a.positions,s=a.normals,c=a.indices,l=o.length/3,u=[];for(let e=0;e<l;e++)u.push(0,0);return{vertices:new Float32Array(o),normals:new Float32Array(s),triangles:new Uint32Array(c),uvs:new Float32Array(u),faceGroups:[{start:0,count:c.length,faceHash:r}]}}function x_(e){return{mesh:(t,n)=>f_(e,t,n),meshEdges:(t,n,r)=>p_(e,t,n,r),hasTriangulation:t=>m_(e,t),meshShape:(e,t,n)=>{}}}function S_(e,t){if(t.length===0)return``;let n=[];for(let r of t){let t=ap(e,r,`exportSTEP`);for(let r of t){let t=e.exportStep(r);n.push(new TextDecoder().decode(t))}}return n.join(`
|
|
8
|
+
`)}function C_(e,n,r,i=De,a=Oe){let{vertices:o,triangles:s}=f_(e,F(t(ap(e,n,`exportSTL`),0)),{tolerance:i,angularTolerance:a,skipNormals:!0});return r?je(o,s):Me(o,s)}function w_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return L(e.importStep(n)).map(F)}function T_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return F(e.importStl(n))}function E_(e,t){if(t.length===0)return``;let n=[];for(let r of t){let t=ap(e,r,`exportIGES`);for(let r of t){let t=e.exportIges(r);n.push(new TextDecoder().decode(t))}}return n.join(`
|
|
9
|
+
`)}function D_(e,t){let n=typeof t==`string`?new TextEncoder().encode(t):new Uint8Array(t);return L(e.importIges(n)).map(F)}function O_(e,t,n){return t.length===0?``:S_(e,t.map(e=>e.shape))}function k_(e,t,n){let r=ip(t,`export3MF`);return sp(e.export3mf(r,n))}function A_(e,t,n){let r=ip(t,`exportGLB`);return sp(e.exportGlb(r,n))}function j_(e,t,n){let r=ip(t,`exportOBJ`);return sp(e.exportObj(r,n))}function M_(e,t,n){let r=ip(t,`exportPLY`);return sp(e.exportPly(r,n))}function N_(e,t){return L(e.import3mf(new Uint8Array(t))).map(e=>F(e))}function P_(e,t){return F(e.importObj(new Uint8Array(t)))}function F_(e,t){return F(e.importGlb(new Uint8Array(t)))}function I_(e,t){let n=t;return n.type===`solid`?e.toBREP(n.id):(bp(`brep-non-solid`,`toBREP for non-solid shapes uses STEP format.`),S_(e,[t]))}function L_(e,t){if(typeof e.fromBREP==`function`&&t.trimStart().startsWith(`{`))return F(e.fromBREP(t));let n=w_(e,t)[0];if(!n)throw Error(`brepkit: fromBREP produced no shapes`);return n}function R_(e,t){return{__brepkit_xcaf:!0,shapes:t,delete:Yf}}function z_(e,t,n){return t&&t.__brepkit_xcaf&&Array.isArray(t.shapes)?S_(e,t.shapes.map(e=>e.shape)):``}function B_(e,t,n){return S_(e,t.map(e=>e.shape))}function V_(e){return{exportSTEP:t=>S_(e,t),exportSTL:(t,n,r,i)=>C_(e,t,n,r,i),importSTEP:t=>w_(e,t),importSTL:t=>T_(e,t),exportIGES:t=>E_(e,t),importIGES:t=>D_(e,t),exportSTEPAssembly:(t,n)=>O_(e,t,n),export3MF:(t,n)=>k_(e,t,n),exportGLB:(t,n)=>A_(e,t,n),exportOBJ:(t,n)=>j_(e,t,n),exportPLY:(t,n)=>M_(e,t,n),import3MF:t=>N_(e,t),importOBJ:t=>P_(e,t),importGLB:t=>F_(e,t),toBREP:t=>I_(e,t),fromBREP:t=>L_(e,t),createXCAFDocument:t=>R_(e,t),writeXCAFToSTEP:(t,n)=>z_(e,t,n),exportSTEPConfigured:(t,n)=>B_(e,t,n)}}function H_(e,t){return{x:e,y:t}}function U_(e,t){let n=Math.sqrt(e*e+t*t);if(n<1e-15)throw Error(`brepkit: createDirection2d called with zero-length vector`);return{x:e/n,y:t/n}}function W_(e,t){return{x:e,y:t}}function G_(e,t,n,r){return{px:e,py:t,dx:n,dy:r,delete:Yf}}function K_(e){return e}function q_(e){return e}function J_(e,t,n,r){return te(e,t,n,r)}function Y_(e,t,n,r){return ne(e,t,n,r)}function X_(e,t,n,r,i,a,o){return ae(e,t,n,r,i,a,o)}function Z_(e,t,n,r,i,a,o,s,c){let l=ae(e,t,n,r,o,s,c),u=c!==!1,d=u?i:-i,f=u?a:-a;return f<d-1e-9&&(f+=2*Math.PI),{__bk2d:`trimmed`,basis:l,tStart:d,tEnd:f}}function Q_(e){return oe(e)}function $_(e,t){let n=e.length,r=Math.min(3,n-1),i=[],a=[];i.push(0),a.push(r+1);let o=n-r-1;for(let e=1;e<=o;e++)i.push(e/(o+1)),a.push(1);return i.push(1),a.push(r+1),{__bk2d:`bspline`,poles:[...e],knots:i,multiplicities:a,degree:r,isPeriodic:!1}}function ev(e,t){return S(Sp(e),t)}function tv(e,t){return{point:S(Sp(e),t),tangent:C(Sp(e),t)}}function nv(e){return w(Sp(e))}function rv(e){return ee(Cp(e))}function iv(e,t,n){return{__bk2d:`trimmed`,basis:Sp(e),tStart:t,tEnd:n}}function av(e){let t=e;switch(t.__bk2d){case`line`:{let e=t;e.ox+=e.dx*e.len,e.oy+=e.dy*e.len,e.dx=-e.dx,e.dy=-e.dy;break}case`circle`:case`ellipse`:{let e=t;e.sense=!e.sense;break}case`trimmed`:{let e=t;[e.tStart,e.tEnd]=[e.tEnd,e.tStart];break}case`bezier`:{let e=t;e.poles=[...e.poles].reverse();break}case`bspline`:{let e=t;e.poles=[...e.poles].reverse();let n=e.knots[0],r=e.knots[e.knots.length-1];n!==void 0&&r!==void 0&&(e.knots=e.knots.map(e=>n+r-e).reverse()),Array.isArray(e.weights)&&(e.weights=[...e.weights].reverse());break}default:break}}function ov(e){return JSON.parse(JSON.stringify(e))}function sv(e,t){let n=Sp(e),r=w(n),i=[];for(let e=0;e<=30;e++){let a=r.first+(r.last-r.first)*e/30,[o,s]=S(n,a),[c,l]=C(n,a),u=Math.sqrt(c*c+l*l);u>1e-12?i.push([o-l/u*t,s+c/u*t]):i.push([o,s])}return $_(i)}function cv(e,t,n){return se(Sp(e),t,n)}function lv(e,t,n,r){return ce(Sp(e),t,n,r)}function uv(e,t,n,r){return le(Sp(e),t,n,r)}function dv(e,t,n){return ue(Sp(e),t,n)}function fv(e,t,n,r,i){return de(Sp(e),t,n,r,i)}function pv(e,t,n,r,i,a){return Cv(e,gv(t,n,r,i,a))}function mv(e,t,n){return{m:e,tx:t,ty:n,delete:Yf}}function hv(){return mv([1,0,0,0,1,0,0,0,1],0,0)}function gv(e,n,r,i,a){let o=Math.sqrt(r*r+i*i);if(o<1e-15)return hv();let s=-i/o,c=r/o,l=a-1,u=[1+l*s*s,l*s*c,0,l*c*s,1+l*c*c,0,0,0,1];return mv(u,e-t(u,0)*e-t(u,1)*n,n-t(u,3)*e-t(u,4)*n)}function _v(e,t){return mv([1,0,0,0,1,0,0,0,1],e,t)}function vv(e,n,r,i,a,o,s){if(r===`axis`&&o!==void 0&&s!==void 0){let r=Math.sqrt(o*o+s*s),c=o/r,l=s/r,u=[2*c*c-1,2*c*l,0,2*c*l,2*l*l-1,0,0,0,1],d=i??e,f=a??n;return mv(u,d-t(u,0)*d-t(u,1)*f,f-t(u,3)*d-t(u,4)*f)}return mv([-1,0,0,0,-1,0,0,0,1],2*e,2*n)}function yv(e,t,n){let r=Math.cos(e),i=Math.sin(e);return mv([r,-i,0,i,r,0,0,0,1],t-r*t+i*n,n-i*t-r*n)}function bv(e,t,n){return mv([e,0,0,0,e,0,0,0,1],t*(1-e),n*(1-e))}function xv(e,t,n){e.tx=t,e.ty=n}function Sv(e,n){let r=e.m,i=n.m,a=e=>t(r,e),o=e=>t(i,e);e.m=[a(0)*o(0)+a(1)*o(3)+a(2)*o(6),a(0)*o(1)+a(1)*o(4)+a(2)*o(7),a(0)*o(2)+a(1)*o(5)+a(2)*o(8),a(3)*o(0)+a(4)*o(3)+a(5)*o(6),a(3)*o(1)+a(4)*o(4)+a(5)*o(7),a(3)*o(2)+a(4)*o(5)+a(5)*o(8),a(6)*o(0)+a(7)*o(3)+a(8)*o(6),a(6)*o(1)+a(7)*o(4)+a(8)*o(7),a(6)*o(2)+a(7)*o(5)+a(8)*o(8)];let s=e.tx,c=e.ty,l=Number(n.tx)||0,u=Number(n.ty)||0;e.tx=a(0)*l+a(1)*u+s,e.ty=a(3)*l+a(4)*u+c}function Cv(e,n){let r=Sp(e),i=n.m??[1,0,0,0,1,0,0,0,1],a=Number(n.tx)||0,o=Number(n.ty)||0,s=t(i,0),c=t(i,1),l=t(i,3),u=t(i,4);if(Math.abs(s-1)<1e-12&&Math.abs(u-1)<1e-12&&Math.abs(c)<1e-12&&Math.abs(l)<1e-12)return se(r,a,o);let d=w(r),f=[];for(let e=0;e<=20;e++){let[t,n]=S(r,d.first+(d.last-d.first)*e/20);f.push([s*t+c*n+a,l*t+u*n+o])}return oe(f)}function wv(e,t,n){let r=fe(Sp(e),Sp(t),n),i=r.segments.map(e=>Object.assign(e,{delete(){}}));return{points:r.points,segments:i}}function Tv(e,t,n){let r=Sp(e),i=w(r);if(r.__bk2d===`line`){let e=t-r.ox,a=n-r.oy,o=Math.max(i.first,Math.min(i.last,e*r.dx+a*r.dy)),[s,c]=S(r,o);return{param:o,distance:Math.sqrt((s-t)**2+(c-n)**2)}}if(r.__bk2d===`circle`){let e=Math.atan2(n-r.cy,t-r.cx),i=r.sense?e:-e;for(;i<0;)i+=2*Math.PI;for(;i>2*Math.PI;)i-=2*Math.PI;let[a,o]=S(r,i);return{param:i,distance:Math.sqrt((a-t)**2+(o-n)**2)}}if(!isFinite(i.first)||!isFinite(i.last))return null;let a=i.first,o=1/0,s=(i.last-i.first)/200;for(let e=0;e<=200;e++){let c=i.first+e*s,[l,u]=S(r,c),d=(l-t)**2+(u-n)**2;d<o&&(o=d,a=c)}for(let e=0;e<10;e++){let[e,o]=S(r,a),[s,c]=C(r,a),l=(e-t)*s+(o-n)*c,u=s*s+c*c;if(u<1e-20)break;let d=l/u,f=Math.max(i.first,Math.min(i.last,a-d));if(Math.abs(f-a)<1e-14)break;a=f}let[c,l]=S(r,a);return{param:a,distance:Math.sqrt((c-t)**2+(l-n)**2)}}function Ev(e,t,n,r,i,a){let o=Sp(e),s=Sp(t),c=n,l=i,u=1/0;for(let e=0;e<=50;e++){let t=n+(r-n)*e/50,[d,f]=S(o,t);for(let e=0;e<=50;e++){let n=i+(a-i)*e/50,[r,o]=S(s,n),p=(r-d)**2+(o-f)**2;p<u&&(u=p,c=t,l=n)}}let d=c,f=l;for(let c=0;c<20;c++){let[c,l]=S(s,f),u=Tv(e,c,l);if(u){let e=Math.max(n,Math.min(r,u.param)),t=Math.abs(e-d)<1e-12;if(d=e,t)break}let[p,m]=S(o,d),h=Tv(t,p,m);if(h){let e=Math.max(i,Math.min(a,h.param)),t=Math.abs(e-f)<1e-12;if(f=e,t)break}}let[p,m]=S(o,d),[h,g]=S(s,f);return Math.sqrt((h-p)**2+(g-m)**2)}function Dv(e,n,r,i){let a=Sp(e),o=w(a),s=Math.max(3,{C0:1,C1:2,C2:3,C3:4}[r]??4),c=Math.max(100,i*10),l=[],u=1/0;for(let e=0;e<3&&u>n;e++){l=[];for(let e=0;e<=c;e++){let t=o.first+(o.last-o.first)*e/c;l.push(S(a,t))}u=0;for(let e=0;e<c;e++){let[n,r]=S(a,o.first+(o.last-o.first)*(e+.5)/c),i=t(l,e),s=t(l,e+1),d=(i[0]+s[0])/2,f=(i[1]+s[1])/2,p=Math.sqrt((n-d)**2+(r-f)**2);p>u&&(u=p)}u>n&&(c=Math.min(c*2,500))}return $_(l,{degMax:s})}function Ov(e){let n=Cp(e);if(n.__bk2d===`bezier`)return[e];if(n.__bk2d!==`bspline`)return Ov(Dv(e,1e-6,`C2`,10));let r=w(Sp(e)),i=r.first,a=r.last,o=[];for(let e of n.knots)e>i+1e-12&&e<a-1e-12&&o.push(e);let s=[i,...o,a],c=[];for(let e=0;e<s.length-1;e++){let r=t(s,e),i=t(s,e+1),a=i-r;if(a<1e-15)continue;let o=S(n,r),l=S(n,i),u=C(n,r),d=C(n,i),f=a/3,p={__bk2d:`bezier`,poles:[o,[o[0]+u[0]*f,o[1]+u[1]*f],[l[0]-d[0]*f,l[1]-d[1]*f],l]};c.push(p)}return c.length>0?c:[e]}function kv(){return Ce()}function Av(e,t,n){we(wp(e),Sp(t),n)}function jv(e){let t=wp(e);return{xMin:t.xMin,yMin:t.yMin,xMax:t.xMax,yMax:t.yMax}}function Mv(e,t){let n=wp(e),r=wp(t);n.xMin=Math.min(n.xMin,r.xMin),n.yMin=Math.min(n.yMin,r.yMin),n.xMax=Math.max(n.xMax,r.xMax),n.yMax=Math.max(n.yMax,r.yMax)}function Nv(e,t){let n=wp(e),r=wp(t);return n.xMax<r.xMin||r.xMax<n.xMin||n.yMax<r.yMin||r.yMax<n.yMin}function Pv(e,t,n){let r=wp(e);return t<r.xMin||t>r.xMax||n<r.yMin||n>r.yMax}function Fv(e){let t=Cp(e);return t.__bk2d===`circle`?{cx:t.cx,cy:t.cy,radius:t.radius,isDirect:t.sense}:null}function Iv(e){let t=Cp(e);return t.__bk2d===`ellipse`?{majorRadius:t.majorRadius,minorRadius:t.minorRadius,xAxisAngle:t.xDirAngle,isDirect:t.sense}:null}function Lv(e){let t=Cp(e);return t.__bk2d===`bezier`?[...t.poles]:null}function Rv(e){let t=Cp(e);return t.__bk2d===`bezier`?t.poles.length-1:null}function zv(e){let t=Cp(e);return t.__bk2d===`bspline`?{poles:[...t.poles],knots:[...t.knots],multiplicities:[...t.multiplicities],degree:t.degree,isPeriodic:t.isPeriodic}:null}function Bv(e){return xe(Sp(e))}function Vv(e){return Se(e)}function Hv(e,t){let n=Sp(e),r=w(n),i=[r.first,...[...t].sort((e,t)=>e-t),r.last],a=[];for(let e=0;e<i.length-1;e++)a.push({__bk2d:`trimmed`,basis:n,tStart:i[e],tEnd:i[e+1]});return a}function Uv(e,n,r,i,a){let o=Sp(n),s=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],c=(e,t)=>[r[0]+e*a[0]+t*s[0],r[1]+e*a[1]+t*s[1],r[2]+e*a[2]+t*s[2]];if(o.__bk2d===`line`)return Ph(e,c(o.ox,o.oy),c(o.ox+o.dx*o.len,o.oy+o.dy*o.len));if(o.__bk2d===`circle`||o.__bk2d===`trimmed`){let n=o;for(;n.__bk2d===`trimmed`;)n=n.basis;if(n.__bk2d===`circle`){let r=n,a=c(r.cx,r.cy),s=r.sense?i:[-i[0],-i[1],-i[2]],l=w(o),u;u=o.__bk2d===`trimmed`?Math.abs(o.tEnd-o.tStart):2*Math.PI;let d=u>Math.PI?4:u>Math.PI/2?2:1,f=(l.last-l.first)/d,p=[];for(let t=0;t<d;t++){let[n,r]=S(o,l.first+t*f),[i,u]=S(o,l.first+(t+1)*f);p.push(e.makeCircleArc3d(...c(n,r),...c(i,u),...a,...s))}return p.length===1?$f(t(p,0)):ep(e.makeWire(p,!1))}if(n.__bk2d===`ellipse`){let r=n,l=c(r.cx,r.cy),u=Math.cos(r.xDirAngle),d=Math.sin(r.xDirAngle),f=[u*a[0]+d*s[0],u*a[1]+d*s[1],u*a[2]+d*s[2]],p=w(o),m=p.last-p.first,h=m*1e-4,[g,_]=S(o,p.first),[v,y]=S(o,p.first+h),b=(g-r.cx)*(y-r.cy)-(_-r.cy)*(v-r.cx)>=0?i:[-i[0],-i[1],-i[2]],x=o.__bk2d===`trimmed`?Math.abs(o.tEnd-o.tStart):2*Math.PI,C=x>Math.PI?4:x>Math.PI/2?2:1,ee=m/C,te=[];for(let t=0;t<C;t++){let[n,i]=S(o,p.first+t*ee),[a,s]=S(o,p.first+(t+1)*ee);te.push(e.makeEllipseArc3d(...c(n,i),...c(a,s),...l,...b,...f,r.majorRadius,r.minorRadius))}return te.length===1?$f(t(te,0)):ep(e.makeWire(te,!1))}}if(o.__bk2d===`bezier`||o.__bk2d===`bspline`){let n=o.poles.map(([e,t])=>c(e,t));if(n.length===2)return Ph(e,t(n,0),t(n,1));let r=Math.min(3,n.length-1),i=n.flatMap(([e,t,n])=>[e,t,n]);return $f(e.interpolatePoints(i,r))}let l=w(o),u=[];for(let e=0;e<=100;e++){let[t,n]=S(o,l.first+(l.last-l.first)*e/100);u.push(c(t,n))}return ng(e,u)}function Wv(e,t,r){if(!Xf(r))throw Error(`brepkit: buildEdgeOnSurface requires a face handle as surface`);let i=I(r,`face`),a=Sp(t),o=w(a),s=e.getSurfaceType(i)===`plane`?50:100,c=[];for(let t=0;t<=s;t++){let[r,l]=S(a,o.first+(o.last-o.first)*t/s);c.push(n(e.evaluateSurface(i,r,l)))}return ng(e,c)}function Gv(e){return e}function Kv(e,n,r,i){let a=0;for(;e.length<r;){let o=[];for(let r=0;r<e.length-1;r++){let a=t(e,r),s=t(e,r+1),c=(a.t+s.t)/2,l=n(c),u=(a.uv[0]+s.uv[0])/2,d=(a.uv[1]+s.uv[1])/2;Math.sqrt((l[0]-u)**2+(l[1]-d)**2)>i&&o.push({index:r+1,t:c,uv:l})}if(o.length===0)break;let s=r-e.length;for(let n=o.length-1;n>=0&&s>0;n--){let r=t(o,n);e.splice(r.index,0,{t:r.t,uv:r.uv}),s--}if(a++,a>3)break}}function qv(e,n,r){let i=I(n,`edge`),a=I(r,`face`),o=e.getEdgeCurveParameters(i),s=o[0]??0,c=o[1]??1,l=[];for(let e=0;e<=20;e++)l.push(s+(c-s)*e/20);let u=n=>{let r=e.evaluateEdgeCurve(i,n),o=e.projectPointOnSurface(a,t(r,0),t(r,1),t(r,2));return[t(o,0),t(o,1)]},d=l.map(e=>({t:e,uv:u(e)}));Kv(d,u,80,.05);let f=d.map(e=>e.uv);if(f.length>=2)return $_(f);let p=e.getEdgeVertices(i);if(p.length>=6){let n=e.projectPointOnSurface(a,t(p,0),t(p,1),t(p,2)),r=e.projectPointOnSurface(a,t(p,3),t(p,4),t(p,5));return te(t(n,0),t(n,1),t(r,0),t(r,1))}throw Error(`brepkit: extractCurve2dFromEdge: degenerate edge (${p.length} coords)`)}function Jv(e,t,n){return e}function Yv(e,n,r){if(n.length>=1){let r=Pp(e,n[0],`edge`);if(r.length===4){let n=[],i=[];for(let a of r){let r=I(a,`edge`),o=e.getEdgeCurveParameters(r),s=t(o,0),c=t(o,1),l=[];for(let n=0;n<=10;n++){let i=s+(c-s)*n/10,a=e.evaluateEdgeCurve(r,i);l.push(t(a,0),t(a,1),t(a,2))}n.push(...l),i.push(11)}try{return Qf(e.fillCoonsPatch(n,i))}catch(e){console.warn(`brepkit: Coons patch failed, falling back:`,e)}}}let i=n[0];if(!i)throw Error(`fillSurface: no wires provided`);return Jh(e,i)}function Xv(e){return{createPoint2d:(e,t)=>H_(e,t),createDirection2d:(e,t)=>U_(e,t),createVector2d:(e,t)=>W_(e,t),createAxis2d:(e,t,n,r)=>G_(e,t,n,r),wrapCurve2dHandle:e=>K_(e),createCurve2dAdaptor:e=>q_(e),makeLine2d:(e,t,n,r)=>J_(e,t,n,r),makeCircle2d:(e,t,n,r)=>Y_(e,t,n,r),makeArc2dThreePoints:(e,t,n,r,i,a)=>re(e,t,n,r,i,a),makeArc2dTangent:(e,t,n,r,i,a)=>ie(e,t,n,r,i,a),makeEllipse2d:(e,t,n,r,i,a,o)=>X_(e,t,n,r,i,a,o),makeEllipseArc2d:(e,t,n,r,i,a,o,s,c)=>Z_(e,t,n,r,i,a,o,s,c),makeBezier2d:e=>Q_(e),makeBSpline2d:(e,t)=>$_(e,t),evaluateCurve2d:(e,t)=>ev(e,t),evaluateCurve2dD1:(e,t)=>tv(e,t),getCurve2dBounds:e=>nv(e),getCurve2dType:e=>rv(e),trimCurve2d:(e,t,n)=>iv(e,t,n),reverseCurve2d:e=>{av(e)},copyCurve2d:e=>ov(e),offsetCurve2d:(e,t)=>sv(e,t),translateCurve2d:(e,t,n)=>cv(e,t,n),rotateCurve2d:(e,t,n,r)=>lv(e,t,n,r),scaleCurve2d:(e,t,n,r)=>uv(e,t,n,r),mirrorCurve2dAtPoint:(e,t,n)=>dv(e,t,n),mirrorCurve2dAcrossAxis:(e,t,n,r,i)=>fv(e,t,n,r,i),affinityTransform2d:(e,t,n,r,i,a)=>pv(e,t,n,r,i,a),createIdentityGTrsf2d:()=>hv(),createAffinityGTrsf2d:(e,t,n,r,i)=>gv(e,t,n,r,i),createTranslationGTrsf2d:(e,t)=>_v(e,t),createMirrorGTrsf2d:(e,t,n,r,i,a,o)=>vv(e,t,n,r,i,a,o),createRotationGTrsf2d:(e,t,n)=>yv(e,t,n),createScaleGTrsf2d:(e,t,n)=>bv(e,t,n),setGTrsf2dTranslationPart:(e,t,n)=>{xv(e,t,n)},multiplyGTrsf2d:(e,t)=>{Sv(e,t)},transformCurve2dGeneral:(e,t)=>Cv(e,t),intersectCurves2d:(e,t,n)=>wv(e,t,n),projectPointOnCurve2d:(e,t,n)=>Tv(e,t,n),distanceBetweenCurves2d:(e,t,n,r,i,a)=>Ev(e,t,n,r,i,a),approximateCurve2dAsBSpline:(e,t,n,r)=>Dv(e,t,n,r),decomposeBSpline2dToBeziers:e=>Ov(e),createBoundingBox2d:()=>kv(),addCurveToBBox2d:(e,t,n)=>{Av(e,t,n)},getBBox2dBounds:e=>jv(e),mergeBBox2d:(e,t)=>{Mv(e,t)},isBBox2dOut:(e,t)=>Nv(e,t),isBBox2dOutPoint:(e,t,n)=>Pv(e,t,n),getCurve2dCircleData:e=>Fv(e),getCurve2dEllipseData:e=>Iv(e),getCurve2dBezierPoles:e=>Lv(e),getCurve2dBezierDegree:e=>Rv(e),getCurve2dBSplineData:e=>zv(e),serializeCurve2d:e=>Bv(e),deserializeCurve2d:e=>Vv(e),splitCurve2d:(e,t)=>Hv(e,t),liftCurve2dToPlane:(t,n,r,i)=>Uv(e,t,n,r,i),buildEdgeOnSurface:(t,n)=>Wv(e,t,n),extractSurfaceFromFace:e=>Gv(e),extractCurve2dFromEdge:(t,n)=>qv(e,t,n),buildCurves3d:e=>{},fixWireOnFace:(e,t,n)=>Jv(e,t,n),fillSurface:(t,n)=>Yv(e,t,n)}}function Zv(e,t){let n=t;if(n.type===`solid`)return e.volume(I(t),hp);if(n.type===`compound`){let n=Pp(e,t,`solid`),r=0;for(let t of n)r+=e.volume(I(t),hp);return r}return 0}function Qv(e,t){let n=t;if(n.type===`face`)return e.faceArea(I(t),hp);if(n.type===`solid`)return e.surfaceArea(I(t),hp);if(n.type===`compound`){let n=Pp(e,t,`face`),r=0;for(let t of n)r+=e.faceArea(I(t),hp);return r}return 0}function $v(e,t){let n=t;if(n.type===`edge`)return e.edgeLength(I(t));if(n.type===`face`)return e.facePerimeter(I(t));if(n.type===`wire`)return e.wireLength(n.id);throw Error(`brepkit: length() requires an edge, wire, or face`)}function ey(e,n){let r=e.getEdgeVertices(n);return[(t(r,0)+t(r,3))/2,(t(r,1)+t(r,4))/2,(t(r,2)+t(r,5))/2]}function ty(e,t){let r=t;if(r.type===`solid`)return n(e.centerOfMass(I(t),hp));if(r.type===`face`){let n=Zp(e,t);return em(e,t,(n.uMin+n.uMax)/2,(n.vMin+n.vMax)/2)}if(r.type===`edge`)return ey(e,r.id);if(r.type===`vertex`)return Yp(e,t);let i=Pp(e,t,`vertex`);if(i.length>0){let t=0,n=0,r=0;for(let a of i){let i=Yp(e,a);t+=i[0],n+=i[1],r+=i[2]}return[t/i.length,n/i.length,r/i.length]}return[0,0,0]}function ny(e,t){let n=t;return n.type===`edge`?ey(e,n.id):ty(e,t)}function ry(e,t){let r=t;if(r.type===`solid`){let r=e.boundingBox(I(t));return{min:n(r,0),max:n(r,3)}}if(r.type===`vertex`){let n=Yp(e,t);return{min:[...n],max:[...n]}}let i=Pp(e,t,`vertex`);if(i.length===0)return{min:[0,0,0],max:[0,0,0]};let a=Yp(e,i[0]),o=a[0],s=a[1],c=a[2],l=a[0],u=a[1],d=a[2];for(let t=1;t<i.length;t++){let n=Yp(e,i[t]);n[0]<o&&(o=n[0]),n[0]>l&&(l=n[0]),n[1]<s&&(s=n[1]),n[1]>u&&(u=n[1]),n[2]<c&&(c=n[2]),n[2]>d&&(d=n[2])}return{min:[o,s,c],max:[l,u,d]}}function iy(e,r,i){let a=r,o=i;if(a.type===`solid`&&o.type===`solid`){let r=e.solidToSolidDistance(a.id,o.id);return{value:t(r,0),point1:n(r,1),point2:n(r,4)}}if(a.type===`vertex`&&(o.type===`solid`||o.type===`face`||o.type===`edge`)){let r=n(e.getVertexPosition(a.id)),i=o.type===`solid`?e.pointToSolidDistance(r[0],r[1],r[2],o.id):o.type===`face`?e.pointToFaceDistance(r[0],r[1],r[2],o.id):e.pointToEdgeDistance(r[0],r[1],r[2],o.id);return{value:t(i,0),point1:r,point2:n(i,1)}}let s=r=>{if(r.type===`vertex`)return n(e.getVertexPosition(r.id));if(r.type===`solid`){let n=e.boundingBox(r.id);return[(t(n,0)+t(n,3))/2,(t(n,1)+t(n,4))/2,(t(n,2)+t(n,5))/2]}return[0,0,0]},c=s(a),l=s(o),u=l[0]-c[0],d=l[1]-c[1],f=l[2]-c[2];return{value:Math.sqrt(u*u+d*d+f*f),point1:c,point2:l}}function ay(e,r,i,a){let o=I(r,`face`),s=e.measureCurvatureAtSurface(o,i,a);if(s.length<8)throw Error(`brepkit: measureCurvatureAtSurface returned ${s.length} values, expected 8`);let c=t(s,0),l=t(s,1);return{gaussian:c*l,mean:(c+l)/2,max:Math.max(c,l),min:Math.min(c,l),maxDirection:n(s,2),minDirection:n(s,5)}}function oy(e,n){let r=e.tessellateFace(I(n,`face`),.1),i=r.positions,a=r.indices,o=0,s=0,c=0,l=0;for(let e=0;e<a.length;e+=3){let n=t(a,e)*3,r=t(a,e+1)*3,u=t(a,e+2)*3,d=t(i,n),f=t(i,n+1),p=t(i,n+2),m=t(i,r),h=t(i,r+1),g=t(i,r+2),_=t(i,u),v=t(i,u+1),y=t(i,u+2),b=(d+m+_)/3,x=(f+h+v)/3,S=(p+g+y)/3,C=m-d,w=h-f,ee=g-p,te=_-d,ne=v-f,re=y-p,ie=.5*Math.sqrt((w*re-ee*ne)**2+(ee*te-C*re)**2+(C*ne-w*te)**2);o+=b*ie,s+=x*ie,c+=S*ie,l+=ie}return l<1e-30?[0,0,0]:[o/l,s/l,c/l]}function sy(e,t){let n=n=>iy(e,t,n);return{distanceTo(e){return n(e)},dispose(){}}}function cy(e,t,n=!1){let r=t,i=r.type===`edge`||r.type===`wire`||r.type===`face`;return{volume:Zv(e,t),area:Qv(e,t),length:n&&i?$v(e,t):0,centerOfMass:ty(e,t),boundingBox:ry(e,t)}}function ly(e){return{volume:t=>Zv(e,t),area:t=>Qv(e,t),length:t=>$v(e,t),centerOfMass:t=>ty(e,t),linearCenterOfMass:t=>ny(e,t),boundingBox:t=>ry(e,t),distance:(t,n)=>iy(e,t,n),surfaceCurvature:(t,n,r)=>ay(e,t,n,r),surfaceCenterOfMass:t=>oy(e,t),createDistanceQuery:t=>sy(e,t),measureBulk:(t,n)=>cy(e,t,n)}}function uy(e){return e.sketchNew()}function dy(e,t,n,r,i){return e.sketchAddPoint(t,n,r,i)}function fy(e,t,n){e.sketchAddConstraint(t,n)}function py(e,t,n,r){return e.sketchSolve(t,n,r)}function my(e,t,n,r,i){return e.sketchAddArc(t,n,r,i)}function hy(e,t){let n=e.sketchDof(t);return typeof n==`string`?n:String(n)}function gy(e){return{sketchNew:()=>uy(e),sketchAddPoint:(t,n,r,i)=>dy(e,t,n,r,i),sketchAddArc:(t,n,r,i)=>my(e,t,n,r,i),sketchAddConstraint:(t,n)=>{fy(e,t,n)},sketchSolve:(t,n,r)=>py(e,t,n,r),sketchDof:t=>hy(e,t)}}function _y(e,t,n,r){return F(e.extrude(I(t,`face`),n[0],n[1],n[2],r))}function vy(e,t,n,r){if(n&&typeof n==`object`&&`origin`in n&&`direction`in n){let{origin:i,direction:a}=n,o=180/Math.PI*r;return o>360&&(o=360),F(e.revolve(I(t,`face`),i[0],i[1],i[2],a[0],a[1],a[2],o))}throw Error(`brepkit: revolve requires axis with origin and direction`)}function yy(e,t,n,r,i){let a=180/Math.PI*i;return a>360&&(a=360),F(e.revolve(I(t,`face`),n[0],n[1],n[2],r[0],r[1],r[2],a))}function by(e,t,n,r,i){(n!==void 0||r!==void 0||i!==void 0)&&bp(`loft-options`,`Loft options (ruled, startShape, endShape) not supported; ignored.`);let a=t.map(t=>{let n=t;return n.type===`wire`?e.makeFaceFromWire(n.id):I(t,`face`)});return F(e.loft(a))}function xy(e){switch(e){case 0:return`rmf`;case 1:return`rightCorner`;case 2:return`roundCorner`;default:return}}function Sy(e,t,n,r){let i=r?.transitionMode===void 0?void 0:xy(r.transitionMode),a=t,o=a.type===`wire`?e.makeFaceFromWire(a.id):I(t,`face`);if(n.type===`wire`){let t=Pp(e,n,`edge`).map(e=>I(e,`edge`));if(i&&t.length===1){let n=t[0];if(n!==void 0)return F(e.sweepWithOptions(o,n,i,[],0,`transformed`))}return i&&t.length>1&&bp(`sweep-transition-multi-edge`,`Sweep transition mode not supported for multi-edge wires; ignored.`),F(e.sweepAlongEdges(o,t))}if(i){let t=I(n,`edge`);return F(e.sweepWithOptions(o,t,i,[],0,`transformed`))}let s=Jm(e,n);if(!s)throw Error(`brepkit: sweep spine must be an edge or wire`);return F(e.sweep(o,s.degree,s.knots,s.controlPoints,s.weights))}function Cy(e,t,n){let r=t,i=r.type===`wire`?e.makeFaceFromWire(r.id):I(t,`face`);if(n.type===`wire`){let t=Pp(e,n,`edge`).map(e=>I(e,`edge`));return F(e.sweepAlongEdges(i,t))}let a=Jm(e,n);if(!a)throw Error(`brepkit: pipe spine must be an edge or wire`);return F(e.pipe(i,a.degree,a.knots,a.controlPoints,a.weights))}function wy(e,t,n,r,i,a,o){let s=I(t,`face`);return F(e.helicalSweep(s,n[0],n[1],n[2],r[0],r[1],r[2],i,a,o))}function Ty(e,t,n,r,i,a){let o=I(t,`face`),s=I(n,`edge`);return F(e.sweepWithOptions(o,s,r,i,a,`transformed`))}function Ey(e){switch(e){case`right`:return`rightCorner`;case`round`:return`roundCorner`;case`transformed`:return`rmf`;default:return}}function Dy(e,t,n){return n?{shape:e,firstShape:t,lastShape:t}:e}function Oy(e,t,n,r){try{return F(e.sweepWithOptions(t,n,r,[],0,`transformed`))}catch(e){console.warn(`brepkit: sweepWithOptions failed, falling back to sweepSmooth/simplePipe:`,e);return}}function ky(e,t){try{if(t.type!==`wire`)return{edgeId:I(t,`edge`)};let n=Pp(e,t,`edge`);if(n.length===1){let e=n[0];return e?{edgeId:I(e,`edge`)}:void 0}bp(`sweepPipeShell-transition-multi-edge`,`sweepPipeShell transition mode not supported for multi-edge wires; ignored.`);return}catch(e){console.warn(`brepkit: resolveContactModeEdge failed for unexpected spine type, falling through:`,e);return}}function Ay(e,t,n,r){let i=ky(e,n);if(i)return Oy(e,t,i.edgeId,r)}function jy(e,t,n){let r=Jm(e,n);if(!(!r||r.degree<=1))try{return F(e.sweepSmooth(t,r.degree,r.knots,r.controlPoints,r.weights))}catch(e){console.warn(`brepkit: sweepSmooth failed, falling back to simplePipe:`,e);return}}function My(e,t,n,r){let i=t,a=i.type===`wire`?e.makeFaceFromWire(i.id):I(t,`face`),o=!!(r&&r.shellMode),s=r?.transitionMode,c=s?Ey(s):void 0;if(c){let r=Ay(e,a,n,c);if(r)return Dy(r,t,o)}return Dy(jy(e,a,n)||Cy(e,t,n),t,o)}function Ny(e,t,n){let r=t.map(t=>{let n=t;return n.type===`wire`?e.makeFaceFromWire(n.id):I(t,`face`)});try{let t={};if(n?.ruled!==void 0&&(t.ruled=n.ruled),n?.solid!==void 0&&(t.solid=n.solid),n?.tolerance!==void 0&&(t.tolerance=n.tolerance),n?.startVertex){let r=e.getVertexPosition(I(n.startVertex,`vertex`));t.startPoint=[r[0],r[1],r[2]]}if(n?.endVertex){let r=e.getVertexPosition(I(n.endVertex,`vertex`));t.endPoint=[r[0],r[1],r[2]]}return F(e.loftWithOptions(r,JSON.stringify(t)))}catch(e){console.warn(`brepkit: loftWithOptions failed, falling back to smooth/basic loft:`,e)}if(!n?.ruled)try{return F(e.loftSmooth(r))}catch(e){console.warn(`brepkit: loftSmooth failed, falling back to basic loft:`,e)}return by(e,t)}function Py(e,t,n,r){let i={type:`extrusionLaw`,profile:t,length:n,endFactor:r,Trim(e,t,n){return i},delete:Yf};return i}function Fy(e,t,n,r,i,a,o){if(i!==null){let r=_y(e,n,$p(e,n,0,0),i);return o?uh(e,t,r):r}return t}function Iy(e){return{extrude:(t,n,r)=>_y(e,t,n,r),revolve:(t,n,r)=>vy(e,t,n,r),revolveVec:(t,n,r,i)=>yy(e,t,n,r,i),loft:(t,n,r,i)=>by(e,t,n,r,i),sweep:(t,n,r)=>Sy(e,t,n,r),simplePipe:(t,n)=>Cy(e,t,n),helicalSweep:(t,n,r,i,a,o)=>wy(e,t,n,r,i,a,o),sweepWithOptions:(t,n,r,i,a)=>Ty(e,t,n,r,i,a),sweepPipeShell:(t,n,r)=>My(e,t,n,r),loftAdvanced:(t,n)=>Ny(e,t,n),buildExtrusionLaw:(t,n,r)=>Py(e,t,n,r),draftPrism:(t,n,r,i,a,o)=>Fy(e,t,n,r,i,a,o)}}function Ly(e){return{dispose:()=>{},executeBatch:t=>e.executeBatch(t),checkpoint:()=>e.checkpoint(),checkpointCount:()=>e.checkpointCount(),restoreCheckpoint:t=>{e.restore(t)},discardCheckpoint:t=>{e.discardCheckpoint(t)}}}var Ry=class{oc;kernelId=`brepkit`;capabilities=a;bk;constructor(e){this.bk=e,this.oc=e;let t=this.bk;Object.assign(this,Sh(t),fg(t),Iy(t),Ag(t),Um(t),x_(t),V_(t),ly(t),Jp(t),Am(t),oh(t),d_(t),gy(t),Xv(t),Ly(t))}};function zy(e){throw Error(`manifold: ${e} is not implemented`)}var By=new Set(`makeBox.makeBoxWithCorners.makeCylinder.makeSphere.makeCone.makeTorus.makeEllipsoid.makeFuse.makeCut.makeCommon.translateShape.rotateShape.scaleShape.mirrorShape.transformShape.generalTransform.generalTransformNonOrthogonal.gridPattern.extrude.revolve.revolveVec.loft.loftAdvanced.sweep.simplePipe.sweepWithOptions.sweepPipeShell.helicalSweep.draftPrism.fillet.chamfer.chamferDistAngle.shell.thicken.offset.filletVariable.draft.defeature.simplify.reverseShape.hull.hullFromPoints.sewAndSolidify.profileEdge.profileWire.profileFace`.split(`.`));function Vy(e){return By.has(e)}function R(e,t,n){return{op:e,params:t,inputs:n,replayable:Vy(e)&&n.every(e=>e.replayable)}}function z(e,t){return{manifold:e,node:t}}function B(e){return e.manifold}function Hy(e){return typeof e?.translate==`function`?e.translate([0,0,0]):e}function V(e){return e.node}function Uy(e){if(e&&typeof e==`object`&&`manifold`in e&&`node`in e)return e}var Wy=[`occt`,`occt-wasm`];function Gy(){for(let e of Wy)try{return H(e)}catch{}}function Ky(e){let t=Gy();if(!t)throw new c(`manifold: ${e} requires a registered occt kernel; none is available`);return t}var qy=new WeakMap,Jy=[0,0,0],Yy=[0,0,1];function Xy(e){return Math.hypot(e[0],e[1],e[2])}function Zy(e){let t=Xy(e);return t===0?[...Yy]:[e[0]/t,e[1]/t,e[2]/t]}function Qy(e){let[t,n,r]=Zy(e);return[0,180/Math.PI*Math.atan2(Math.hypot(t,n),r),180/Math.PI*Math.atan2(n,t)]}function $y(e){let t=e.Manifold;function n(e,t,n){let r=e;return n[0]===0&&n[1]===0&&n[2]>0||(r=r.rotate(Qy(n))),(t[0]!==0||t[1]!==0||t[2]!==0)&&(r=r.translate(t)),r}return{makeBox:(e,n,r)=>z(t.cube([e,n,r],!1),R(`makeBox`,{width:e,height:n,depth:r},[])),makeBoxFromCorners:(e,n)=>{let r=[Math.abs(n[0]-e[0]),Math.abs(n[1]-e[1]),Math.abs(n[2]-e[2])],i=[Math.min(e[0],n[0]),Math.min(e[1],n[1]),Math.min(e[2],n[2])];return z(t.cube(r,!1).translate(i),R(`makeBoxWithCorners`,{p1:e,p2:n},[]))},makeCylinder:(e,r,i=Jy,a=Yy)=>z(n(t.cylinder(r,e,e,0,!1),i,a),R(`makeCylinder`,{radius:e,height:r,center:i,direction:a},[])),makeSphere:(e,n=Jy)=>{let r=t.sphere(e,0);return(n[0]!==0||n[1]!==0||n[2]!==0)&&(r=r.translate(n)),z(r,R(`makeSphere`,{radius:e,center:n},[]))},makeCone:(e,r,i,a=Jy,o=Yy)=>z(n(t.cylinder(i,e,r,0,!1),a,o),R(`makeCone`,{radius1:e,radius2:r,height:i,center:a,direction:o},[])),makeTorus:(r,i,a=Jy,o=Yy)=>{let s=Math.max(3,e.getCircularSegments(i)),c=[];for(let e=0;e<s;e++){let t=e/s*Math.PI*2;c.push([r+i*Math.cos(t),i*Math.sin(t)])}return z(n(t.revolve([c],0),a,o),R(`makeTorus`,{majorRadius:r,minorRadius:i,center:a,direction:o},[]))},makeEllipsoid:(e,n,r)=>z(t.sphere(1,0).scale([e,n,r]),R(`makeEllipsoid`,{aLength:e,bLength:n,cLength:r},[])),makeRectangle:()=>zy(`makeRectangle`)}}function eb(e){return e}function tb(e,t,n){switch(n){case`cut`:case`subtract`:case`difference`:return e.subtract(t);case`intersect`:case`common`:case`intersection`:return e.intersect(t);default:return e.add(t)}}function nb(e){let t=V(eb(e)).params,n=t.normal,r=t.origin;if(!n||!r)throw Error(`manifold: section/split plane must carry normal+origin params`);return{normal:n,offset:n[0]*r[0]+n[1]*r[1]+n[2]*r[2]}}function rb(e){let t=new Uint32Array(e.triVerts),n=e.vertProperties.length/3,r=new Float32Array(n*3);for(let t=0;t<n;t++)r[t*3]=e.vertProperties[t*3]??0,r[t*3+1]=e.vertProperties[t*3+1]??0,r[t*3+2]=e.vertProperties[t*3+2]??0;return{vertices:r,normals:new Float32Array,triangles:t,uvs:new Float32Array,faceGroups:[{start:0,count:t.length,faceHash:0}]}}function ib(e){let t=e.Manifold;function n(e,t,n){let r=eb(e),i=eb(t);return z(B(r).add(B(i)),R(`makeFuse`,{},[V(r),V(i)]))}function r(e,t,n){let r=eb(e),i=eb(t);return z(B(r).subtract(B(i)),R(`makeCut`,{},[V(r),V(i)]))}function i(e,t,n){let r=eb(e),i=eb(t);return z(B(r).intersect(B(i)),R(`makeCommon`,{},[V(r),V(i)]))}function a(e,n){if(e.length===0)throw Error(`manifold: fuseAll requires at least one shape`);let r=e.map(eb),[i]=r;if(i===void 0)throw Error(`manifold: fuseAll requires at least one shape`);return r.length===1?i:z(t.union(r.map(B)),R(`makeFuse`,{},r.map(V)))}function o(e,n,r){let i=eb(e);if(n.length===0)return i;let a=n.map(eb);return z(t.difference([B(i),...a.map(B)]),R(`makeCut`,{},[V(i),...a.map(V)]))}function s(e,t,n){let r=eb(e),{normal:i,offset:a}=nb(t),[o]=B(r).splitByPlane(i,a);return z(o,R(`section`,{normal:i,offset:a},[V(r),V(eb(t))]))}function c(e,n){let r=eb(e),[i]=n;if(i===void 0)throw Error(`manifold: split requires at least one tool`);let a=eb(i),{normal:o,offset:s}=nb(i),[c,l]=B(r).splitByPlane(o,s);return z(t.union([c,l]),R(`split`,{normal:o,offset:s},[V(r),V(a)]))}function l(e,t,n){let r=[],i=eb(e),a=eb(t);return(B(i)===void 0||B(i).isEmpty())&&r.push({operand:`base`,issue:`null-shape`,message:`Base shape is empty`}),(B(a)===void 0||B(a).isEmpty())&&r.push({operand:`tool`,issue:`null-shape`,message:`Tool shape is empty`}),{valid:r.length===0,issues:r}}function u(n,r,i,a,o,s){let c=new e.Mesh({numProp:3,vertProperties:new Float32Array(n),triVerts:new Uint32Array(r)}),l=new e.Mesh({numProp:3,vertProperties:new Float32Array(i),triVerts:new Uint32Array(a)});return rb(tb(t.ofMesh(c),t.ofMesh(l),o).getMesh())}return{fuse:n,cut:r,intersect:i,section:s,fuseAll:a,cutAll:o,split:c,checkBoolean:l,meshBoolean:u}}function ab(e){return e}function ob(){return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}function sb(e){let t=Math.hypot(e[0],e[1],e[2]);return t<1e-12?[0,0,1]:[e[0]/t,e[1]/t,e[2]/t]}function cb(e,t,n){let r=ob();return r[12]=e,r[13]=t,r[14]=n,r}function lb(e,t,n){let r=e,[i,a,o]=sb(t),s=Math.cos(r),c=Math.sin(r),l=1-s,u=l*i*i+s,d=l*i*a+c*o,f=l*i*o-c*a,p=l*i*a-c*o,m=l*a*a+s,h=l*a*o+c*i,g=l*i*o+c*a,_=l*a*o-c*i,v=l*o*o+s,y=ob();return y[0]=u,y[1]=d,y[2]=f,y[4]=p,y[5]=m,y[6]=h,y[8]=g,y[9]=_,y[10]=v,y[12]=n[0]-(u*n[0]+p*n[1]+g*n[2]),y[13]=n[1]-(d*n[0]+m*n[1]+_*n[2]),y[14]=n[2]-(f*n[0]+h*n[1]+v*n[2]),y}function ub(e,t){let n=ob();return n[0]=t,n[5]=t,n[10]=t,n[12]=e[0]*(1-t),n[13]=e[1]*(1-t),n[14]=e[2]*(1-t),n}function db(e,t){let[n,r,i]=sb(t),a=1-2*n*n,o=1-2*r*r,s=1-2*i*i,c=-2*n*r,l=-2*n*i,u=-2*r*i,d=ob();d[0]=a,d[1]=c,d[2]=l,d[4]=c,d[5]=o,d[6]=u,d[8]=l,d[9]=u,d[10]=s;let f=e[0]*n+e[1]*r+e[2]*i;return d[12]=2*f*n,d[13]=2*f*r,d[14]=2*f*i,d}function fb(e,t){let n=ob();return n[0]=e[0],n[1]=e[3],n[2]=e[6],n[4]=e[1],n[5]=e[4],n[6]=e[7],n[8]=e[2],n[9]=e[5],n[10]=e[8],n[12]=t[0],n[13]=t[1],n[14]=t[2],n}function pb(e,t,n,r,i){return z(e.transform(t),R(n,r,[i]))}function mb(e,t,n,r){let i=ab(e);return pb(B(i),cb(t,n,r),`translateShape`,{x:t,y:n,z:r},V(i))}function hb(e,t,n=[0,0,1],r=[0,0,0]){let i=ab(e);return pb(B(i),lb(t,n,r),`rotateShape`,{angle:t,axis:n,center:r},V(i))}function gb(e,t,n){let r=ab(e);return pb(B(r),db(t,n),`mirrorShape`,{origin:t,normal:n},V(r))}function _b(e,t,n){let r=ab(e);return pb(B(r),ub(t,n),`scaleShape`,{center:t,factor:n},V(r))}function vb(e,t){if(!Array.isArray(t)||t.length!==16)throw Error(`manifold: transform expects a 16-element column-major matrix`);let n=ab(e);return pb(B(n),t,`transformShape`,{matrix:[...t]},V(n))}function yb(e,t,n,r){let i=ab(e);return pb(B(i),fb(t,n),`generalTransform`,{linear:t,translation:n,isOrthogonal:r},V(i))}function bb(e,t,n){let r=ab(e);return pb(B(r),fb(t,n),`generalTransformNonOrthogonal`,{linear:t,translation:n},V(r))}function xb(e){let t=ob();for(let n of e)t=Db(n.type===`translate`?cb(n.x,n.y,n.z):lb(n.angle*Math.PI/180,n.axis??[0,0,1],n.center??[0,0,0]),t);return{handle:t,dispose:()=>{}}}function Sb(e,t,n,r){let i=[e];for(let a=1;a<r;a++){let r=n*a;i.push(mb(e,t[0]*r,t[1]*r,t[2]*r))}return i}function Cb(e,t,n,r,i){let a=[e];for(let o=1;o<i;o++)a.push(hb(e,r*o*Math.PI/180,n,t));return a}function wb(e,t,n,r,i,a,o,s){let c=ab(t),l=[],u=[];for(let e=0;e<o;e++)for(let t=0;t<s;t++){let o=n[0]*i*e+r[0]*a*t,s=n[1]*i*e+r[1]*a*t,d=n[2]*i*e+r[2]*a*t;l.push(B(c).transform(cb(o,s,d))),u.push(V(c))}return z(l.length===1?l[0]:e.Manifold.union(l),R(`gridPattern`,{directionX:n,directionY:r,spacingX:i,spacingY:a,countX:o,countY:s},u))}function Tb(e){return e.map(e=>{switch(e.type){case`translate`:return mb(e.shape,e.x,e.y,e.z);case`rotate`:return hb(e.shape,e.angle*Math.PI/180,e.axis,e.center);case`scale`:return _b(e.shape,e.center,e.factor);case`mirror`:return gb(e.shape,e.origin,e.normal)}})}function Eb(e){return{composeTransform:xb,transform:vb,locate:vb,translate:mb,rotate:hb,mirror:gb,scale:_b,generalTransform:yb,generalTransformNonOrthogonal:bb,positionOnCurve:()=>zy(`positionOnCurve`),linearPattern:Sb,circularPattern:Cb,gridPattern:(t,n,r,i,a,o,s)=>wb(e,t,n,r,i,a,o,s),transformBatch:Tb}}function Db(e,t){let n=ob();for(let r=0;r<4;r++)for(let i=0;i<4;i++){let a=0;for(let n=0;n<4;n++){let o=e[n*4+i]??0,s=t[r*4+n]??0;a+=o*s}n[r*4+i]=a}return n}var Ob=2*Math.PI,kb=e=>Math.hypot(e[0],e[1],e[2]),Ab=(e,t)=>[e[0]-t[0],e[1]-t[1],e[2]-t[2]];function jb(e){return kb(Ab(e.p2,e.p1))}function Mb(e,t){let n=e.map(e=>[e[0],e[1],e[2]]);for(let e=1;e<n.length;e++)for(let r=0;r<n.length-e;r++){let e=n[r]??[0,0,0],i=n[r+1]??[0,0,0];n[r]=[e[0]*(1-t)+i[0]*t,e[1]*(1-t)+i[1]*t,e[2]*(1-t)+i[2]*t]}return n[0]??[0,0,0]}function Nb(e){return e.k===`line`?`LINE`:e.k===`bezier`?`BEZIER`:e.k===`helix`?`BSPLINE`:Math.abs(e.rx-e.ry)<1e-9*Math.max(1,e.rx)?`CIRCLE`:`ELLIPSE`}function Pb(e){return e.k===`line`?{first:0,last:jb(e)}:e.k===`conic`?{first:e.a0,last:e.a1}:e.k===`helix`?{first:0,last:Ob*e.turns}:{first:0,last:1}}function Fb(e,t){if(e.k===`line`){let n=t/(jb(e)||1);return[e.p1[0]+(e.p2[0]-e.p1[0])*n,e.p1[1]+(e.p2[1]-e.p1[1])*n,e.p1[2]+(e.p2[2]-e.p1[2])*n]}if(e.k===`bezier`)return Mb(e.points,t);if(e.k===`helix`){let n=Math.cos(t),r=Math.sin(t),i=e.pitch*t/Ob;return[e.center[0]+e.radius*(n*e.x[0]+r*e.y[0])+i*e.axis[0],e.center[1]+e.radius*(n*e.x[1]+r*e.y[1])+i*e.axis[1],e.center[2]+e.radius*(n*e.x[2]+r*e.y[2])+i*e.axis[2]]}let n=Math.cos(t),r=Math.sin(t);return[e.center[0]+e.rx*n*e.x[0]+e.ry*r*e.y[0],e.center[1]+e.rx*n*e.x[1]+e.ry*r*e.y[1],e.center[2]+e.rx*n*e.x[2]+e.ry*r*e.y[2]]}function Ib(e,t){let n;if(e.k===`line`)n=Ab(e.p2,e.p1);else if(e.k===`bezier`){let r=Mb(e.points,Math.max(0,t-1e-4));n=Ab(Mb(e.points,Math.min(1,t+1e-4)),r)}else if(e.k===`helix`){let r=Math.cos(t),i=Math.sin(t),a=e.pitch/Ob;n=[e.radius*(-i*e.x[0]+r*e.y[0])+a*e.axis[0],e.radius*(-i*e.x[1]+r*e.y[1])+a*e.axis[1],e.radius*(-i*e.x[2]+r*e.y[2])+a*e.axis[2]]}else{let r=Math.cos(t),i=Math.sin(t);n=[-e.rx*i*e.x[0]+e.ry*r*e.y[0],-e.rx*i*e.x[1]+e.ry*r*e.y[1],-e.rx*i*e.x[2]+e.ry*r*e.y[2]]}let r=kb(n)||1;return[n[0]/r,n[1]/r,n[2]/r]}function Lb(e){if(e.k===`line`)return jb(e);if(e.k===`helix`){let t=Ob*e.radius;return e.turns*Math.sqrt(t*t+e.pitch*e.pitch)}if(e.k===`conic`){let t=Math.abs(e.a1-e.a0);if(Math.abs(e.rx-e.ry)<1e-9*Math.max(1,e.rx))return e.rx*t;if(Math.abs(t-Ob)<1e-9){let t=e.rx,n=e.ry,r=(t-n)*(t-n)/((t+n)*(t+n));return Math.PI*(t+n)*(1+3*r/(10+Math.sqrt(4-3*r)))}return Vb(t=>Fb(e,t),e.a0,e.a1,256)}return Vb(t=>Fb(e,t),0,1,128)}function Rb(e){return e.k===`conic`?Math.abs(Math.abs(e.a1-e.a0)-Ob)<1e-9:!1}function zb(e){return Rb(e)}function Bb(e){return e.k===`conic`?Ob:0}function Vb(e,t,n,r){let i=0,a=e(t);for(let o=1;o<=r;o++){let s=e(t+(n-t)*o/r);i+=kb(Ab(s,a)),a=s}return i}function Hb(e){return e}function Ub(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Wb(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function Gb(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function Kb(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function qb(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function Jb(e){return Math.hypot(e[0],e[1],e[2])}function Yb(e){let t=Jb(e);return t<1e-12?[0,0,1]:[e[0]/t,e[1]/t,e[2]/t]}function Xb(e){return Yb(Wb(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function Zb(e){let t=Yb(e),n=Xb(t);return{xAxis:n,yAxis:Yb(Wb(t,n))}}function Qb(e){let t=0;for(let n=0;n<e.length;n++){let r=e[n]??[0,0],i=e[(n+1)%e.length]??[0,0];t+=r[0]*i[1]-i[0]*r[1]}return t/2}function $b(e){return Qb(e)<0?[...e].reverse():e}function ex(e){return Qb(e)>0?[...e].reverse():e}function tx(e){return e.node?.params}function nx(e){let t=Hb(e),n=tx(t),r=n?.outline??n?.polygon??n?.points;if(r&&r.length>=3){let e=n?.origin??[0,0,0],t=$b(r.map(e=>[e[0],e[1]])),i=(n?.holes)?.filter(e=>e.length>=3).map(e=>ex(e.map(e=>[e[0],e[1]])));if(n?.xAxis&&n.yAxis)return{outline:t,holes:i,origin:e,xAxis:n.xAxis,yAxis:n.yAxis};let{xAxis:a,yAxis:o}=Zb(n?.normal??[0,0,1]);return{outline:t,holes:i,origin:e,xAxis:a,yAxis:o}}return rx(t)}function rx(e){let t=B(e)?.getMesh?.();if(!t)throw Error(`manifold: profile carries no recorded outline and no mesh to derive one`);let n=t.numProp,r=Math.floor(t.vertProperties.length/n),i=[],a=0;for(let e=0;e<r;e++)i.push([t.vertProperties[e*n]??0,t.vertProperties[e*n+1]??0]),a+=t.vertProperties[e*n+2]??0;a/=Math.max(1,r);let o=ix(i);return{outline:$b(o.length>=3?o:[[-.5,-.5],[.5,-.5],[0,.5]]),origin:[0,0,a],xAxis:[1,0,0],yAxis:[0,1,0]}}function ix(e){let t=[...e].sort((e,t)=>e[0]===t[0]?e[1]-t[1]:e[0]-t[0]);if(t.length<3)return[...t];let n=(e,t,n)=>(t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0]),r=[];for(let e of t){for(;r.length>=2&&n(r[r.length-2]??e,r[r.length-1]??e,e)<=0;)r.pop();r.push(e)}let i=[];for(let e=t.length-1;e>=0;e--){let r=t[e]??[0,0];for(;i.length>=2&&n(i[i.length-2]??r,i[i.length-1]??r,r)<=0;)i.pop();i.push(r)}return r.pop(),i.pop(),[...r,...i]}function ax(e){let t=[];for(let n=1;n+1<e;n++)t.push(0,n,n+1);return t}function ox(e,t){let n=e.length;if(n<2||t<=n)return e.map(e=>[e[0],e[1]]);let r=[],i=0;for(let t=0;t<n;t++){let a=e[t]??[0,0],o=e[(t+1)%n]??[0,0],s=Math.hypot(o[0]-a[0],o[1]-a[1]);r.push(s),i+=s}if(i===0)return e.map(e=>[e[0],e[1]]);let a=t-n,o=r.map(e=>a*e/i),s=o.map(e=>Math.floor(e)),c=s.reduce((e,t)=>e+t,0),l=o.map((e,t)=>({i:t,f:e-Math.floor(e)})).sort((e,t)=>t.f-e.f);for(let e=0;c<a;e++,c++){let t=l[e%l.length]?.i??0;s[t]=(s[t]??0)+1}let u=[];for(let t=0;t<n;t++){let r=e[t]??[0,0],i=e[(t+1)%n]??[0,0];u.push([r[0],r[1]]);let a=s[t]??0;for(let e=1;e<=a;e++){let t=e/(a+1);u.push([r[0]+(i[0]-r[0])*t,r[1]+(i[1]-r[1])*t])}}return u}function sx(e,t,n=1){return e.outline.map(e=>{let r=e[0]*n,i=e[1]*n;return[t.origin[0]+t.xAxis[0]*r+t.yAxis[0]*i,t.origin[1]+t.xAxis[1]*r+t.yAxis[1]*i,t.origin[2]+t.xAxis[2]*r+t.yAxis[2]*i]})}function cx(e,t){if(t.length<2)throw Error(`manifold: skinning requires at least two rings`);let n=t[0]?.length??0;if(n<3)throw Error(`manifold: skinning requires rings of at least three points`);let r=[];for(let e of t){if(e.length!==n)throw Error(`manifold: skinning requires all rings to share a vertex count`);for(let t of e)r.push(t[0],t[1],t[2])}let i=ux(t.length,n),a=new e.Mesh({numProp:3,vertProperties:Float32Array.from(r),triVerts:Uint32Array.from(i)});return lx(e,new e.Manifold(a))}function lx(e,t){if(typeof t.volume!=`function`||t.volume()>=0)return t;let n=t.getMesh(),r=n.triVerts;for(let e=0;e+2<r.length;e+=3){let t=r[e+1]??0;r[e+1]=r[e+2]??0,r[e+2]=t}let i=new e.Mesh({numProp:n.numProp,vertProperties:n.vertProperties,triVerts:r}),a=new e.Manifold(i);return typeof t.delete==`function`&&t.delete(),a}function ux(e,t){let n=[];for(let r=0;r+1<e;r++){let e=r*t,i=(r+1)*t;for(let r=0;r<t;r++){let a=(r+1)%t;n.push(e+r,e+a,i+a),n.push(e+r,i+a,i+r)}}let r=ax(t);for(let e=0;e<r.length;e+=3)n.push(r[e]??0,r[e+2]??0,r[e+1]??0);let i=(e-1)*t,a=ax(t);for(let e=0;e<a.length;e+=3)n.push(i+(a[e]??0),i+(a[e+1]??0),i+(a[e+2]??0));return n}function dx(e,t){let n=[];if(e.length===0)return n;let r=t=>{let n=e[Math.max(0,t-1)]??e[t]??[0,0,0];return Yb(Gb(e[Math.min(e.length-1,t+1)]??e[t]??[0,0,0],n))},i=r(0),a=Yb(Gb(t,qb(i,Ub(t,i))));Jb(a)<1e-9&&(a=Xb(i)),n.push({origin:e[0]??[0,0,0],xAxis:a,yAxis:Yb(Wb(i,a)),tangent:i});for(let t=1;t<e.length;t++){let o=e[t-1]??[0,0,0],s=e[t]??[0,0,0],c=Gb(s,o),l=Ub(c,c),u=a;if(l>1e-18){let e=Gb(a,qb(c,2/l*Ub(c,a))),n=Gb(i,qb(c,2/l*Ub(c,i))),o=Gb(r(t),n),s=Ub(o,o);u=s>1e-18?Gb(e,qb(o,2/s*Ub(o,e))):e}let d=r(t),f=Yb(Gb(u,qb(d,Ub(u,d)))),p=Yb(Wb(d,f));n.push({origin:s,xAxis:f,yAxis:p,tangent:d}),i=d,a=f}return n}var fx=24,px=24,mx=null;function hx(e){let t=mx?mx(Math.max(Math.abs(e),1e-6)):fx;return Math.max(fx,t)}var gx=[0,0,0],_x=1e-6,vx={delete:()=>{},isEmpty:()=>!1};function yx(e,t){return e[t]??gx}function bx(e,t=1){return Math.max(2,Math.ceil(Math.abs(e)/(2*Math.PI)*hx(t)))}function xx(e){return Yb(Wb(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function Sx(e,t,n,r,i,a){let o=Yb(t),s=a?Yb(a):xx(o),c=Yb(Wb(o,s)),l=i-r,u=bx(l,n),d=[];for(let t=0;t<=u;t++){let i=r+l*t/u;d.push(Kb(e,Kb(qb(s,n*Math.cos(i)),qb(c,n*Math.sin(i)))))}return d}function Cx(e,t,n){let r=Gb(t,e),i=Gb(n,e),a=Wb(r,i);if(Jb(a)<1e-12)return[e,t,n];let o=Yb(a),s=Ub(r,r),c=Ub(i,i),l=Ub(r,i),u=2*(s*c-l*l);if(Math.abs(u)<1e-18)return[e,t,n];let d=c*(s-l)/u,f=s*(c-l)/u,p=Kb(e,Kb(qb(r,d),qb(i,f))),m=Jb(Gb(e,p)),h=Yb(Gb(e,p)),g=Yb(Wb(o,h)),_=(e=>Math.atan2(Ub(Gb(e,p),g),Ub(Gb(e,p),h)))(n);return _<0&&(_+=2*Math.PI),Sx(p,o,m,0,_,h)}function wx(e){let t=[];for(let n=0;n<=px;n++){let r=n/px,i=e.map(e=>[...e]);for(let e=1;e<i.length;e++)for(let t=0;t<i.length-e;t++){let e=yx(i,t),n=yx(i,t+1);i[t]=[e[0]*(1-r)+n[0]*r,e[1]*(1-r)+n[1]*r,e[2]*(1-r)+n[2]*r]}t.push(yx(i,0))}return t}function Tx(e){let t=0,n=0,r=0;for(let i=0;i<e.length;i++){let a=yx(e,i),o=yx(e,(i+1)%e.length);t+=(a[1]-o[1])*(a[2]+o[2]),n+=(a[2]-o[2])*(a[0]+o[0]),r+=(a[0]-o[0])*(a[1]+o[1])}let i=[t,n,r];return Jb(i)<1e-12?[0,0,1]:Yb(i)}function Ex(e,t){return Jb(Gb(e,t))<_x}function Dx(e){let t=e[0];if(!t)return[];let n=[...t];for(let t=1;t<e.length;t++){let r=e[t]??[];if(r.length===0)continue;let i=yx(n,n.length-1),a=Ex(yx(r,0),i),o=Ex(yx(r,r.length-1),i);!a&&o&&(r=[...r].reverse());let s=Ex(yx(r,0),i);for(let e=+!!s;e<r.length;e++)n.push(yx(r,e))}return n.length>1&&Ex(yx(n,0),yx(n,n.length-1))&&n.pop(),n}function Ox(e){let t=Tx(e),n=yx(e,0),r=e.length>1?Yb(Gb(yx(e,1),n)):xx(t);r=Yb(Gb(r,qb(t,Ub(r,t)))),Jb(r)<1e-9&&(r=xx(t));let i=Yb(Wb(t,r));return{outline:$b(e.map(e=>{let t=Gb(e,n);return[Ub(t,r),Ub(t,i)]})),origin:n,xAxis:r,yAxis:i}}var kx=12;function Ax(e,t){let[n,r]=e.curveParameters(t),i=kx;try{e.curveType(t)===`line`&&(i=1)}catch{}let a=[];for(let o=0;o<=i;o++)a.push(e.curvePointAtParam(t,n+(r-n)*o/i));return a}function jx(e,t){return Dx(e.iterShapes(t,`edge`).map(t=>Ax(e,t)))}function Mx(e){let t=e.getCircularSegments;typeof t==`function`&&(mx=e=>t(e));function n(e,t){return z(vx,R(`profileEdge`,t?{pts:e,curve:t}:{pts:e},[]))}function r(e,t){let n=Yb(e),r=t?Yb(t):xx(n);return{x:r,y:Yb(Wb(n,r))}}function i(e,t,n){let r=Gb(t,e),i=Gb(n,e),a=Wb(r,i);if(Jb(a)<1e-12)return;let o=Yb(a),s=Ub(r,r),c=Ub(i,i),l=Ub(r,i),u=2*(s*c-l*l);if(Math.abs(u)<1e-18)return;let d=c*(s-l)/u,f=s*(c-l)/u,p=Kb(e,Kb(qb(r,d),qb(i,f))),m=Jb(Gb(e,p)),h=Yb(Gb(e,p)),g=Yb(Wb(o,h)),_=Math.atan2(Ub(Gb(n,p),g),Ub(Gb(n,p),h));return _<0&&(_+=2*Math.PI),{k:`conic`,center:p,x:h,y:g,rx:m,ry:m,a0:0,a1:_}}function a(e){let t=Uy(e);if(t){let e=t.node.params;return e?.ring??e?.pts??[]}let n=Gy();return n?Ax(n,e):[]}function o(e){let t=[];for(let n of e){let e=Uy(n);e&&t.push(V(e))}return t}function s(e){let t=Dx(e.map(e=>a(e)));return z(vx,R(`profileWire`,{ring:t,...t.length>=3?Ox(t):void 0},o(e)))}function c(e,t){let{outline:n,origin:r,xAxis:i,yAxis:a}=Ox(e);return z(vx,R(`profileFace`,{outline:n,origin:r,xAxis:i,yAxis:a},t?[t]:[]))}function l(e){let t=Uy(e);if(t){let e=t.node.params?.ring??[];if(e.length>=3)return c(e,V(t))}let n=Gy();return c(n?jx(n,e):[],t?V(t):void 0)}function u(e,t){let n=Uy(e),r=n?.node?.params??{},i=r.origin??gx,a=r.xAxis??[1,0,0],s=r.yAxis??[0,1,0],c=e=>{let t=Gb(e,i);return[Ub(t,a),Ub(t,s)]},l=[];for(let e of t){let t=Uy(e),n;if(t)n=t.node.params?.ring??[];else{let t=Gy();n=t?jx(t,e):[]}n.length>=3&&l.push(n.map(c))}let u=[...r.holes??[],...l],d=n?[V(n),...o(t)]:o(t);return z(vx,R(`profileFace`,{outline:r.outline??[],holes:u,origin:i,xAxis:a,yAxis:s},d))}function d(e,t,n,r,i){let a=Yb(t),o=i?Yb(i):xx(a),s=Yb(Wb(a,o)),c=[],l=hx(Math.max(n,r));for(let t=0;t<=l;t++){let i=2*Math.PI*t/l;c.push(Kb(e,Kb(qb(o,n*Math.cos(i)),qb(s,r*Math.sin(i)))))}return c}return{makeVertex:(e,t,r)=>n([[e,t,r]]),makeLineEdge:(e,t)=>n([e,t],{k:`line`,p1:e,p2:t}),makeCircleEdge:(e,t,i)=>{let{x:a,y:o}=r(t);return n(Sx(e,t,i,0,2*Math.PI),{k:`conic`,center:e,x:a,y:o,rx:i,ry:i,a0:0,a1:2*Math.PI})},makeCircleArc:(e,t,i,a,o)=>{let{x:s,y:c}=r(t);return n(Sx(e,t,i,a,o),{k:`conic`,center:e,x:s,y:c,rx:i,ry:i,a0:a,a1:o})},makeArcEdge:(e,t,r)=>n(Cx(e,t,r),i(e,t,r)),makeEllipseEdge:(e,t,i,a,o)=>{let{x:s,y:c}=r(t,o);return n(d(e,t,i,a,o),{k:`conic`,center:e,x:s,y:c,rx:i,ry:a,a0:0,a1:2*Math.PI})},makeBezierEdge:e=>n(wx(e),{k:`bezier`,points:e.map(e=>[...e])}),makeTangentArc:(e,t,r)=>n([e,r],{k:`line`,p1:e,p2:r}),makeHelixWire:(e,t,r,i=[0,0,0],a=[0,0,1],o=!1)=>{let s=Yb(a),c=xx(s),l=Yb(Wb(s,c)),u=o?qb(l,-1):l,d=e===0?0:t/e,f={k:`helix`,center:i,axis:s,x:c,y:u,radius:r,pitch:e,turns:d},p=Math.max(8,Math.ceil(d*fx)),m=[];for(let e=0;e<=p;e++)m.push(Fb(f,2*Math.PI*d*e/p));return n(m,f)},makeWire:e=>s(e),makeWireFromMixed:e=>s(e),makeFace:l,addHolesInFace:u,makePolygonFace:e=>c(e)}}function Nx(e){let t=e.Manifold,n=Mx(e);function r(e,n){let r=e.map(e=>[e.x,e.y,e.z]);return z(t.hull(r),R(`hullFromPoints`,{points:r,tolerance:n},[]))}function i(e,n){let r=e.map(e=>B(e));return z(t.hull(r),R(`hull`,{tolerance:n},e.map(e=>V(e))))}function a(e){let n=e.map(e=>B(e)),r=n[0];if(!r)throw Error(`manifold: makeCompound requires at least one input shape`);return z(n.length===1?r:t.union(n),R(`makeCompound`,{},e.map(e=>V(e))))}function o(e,t){let n=e[0];return n||zy(`sewAndSolidify (no input faces on manifold kernel)`),z(B(n),R(`sewAndSolidify`,{tolerance:t},e.map(e=>V(e))))}return{makeVertex:(e,t,r)=>n.makeVertex(e,t,r),makeEdge:()=>zy(`makeEdge`),makeWire:e=>n.makeWire(e),makeFace:(e,t)=>n.makeFace(e,t),makeLineEdge:(e,t)=>n.makeLineEdge(e,t),makeCircleEdge:(e,t,r)=>n.makeCircleEdge(e,t,r),makeCircleArc:(e,t,r,i,a)=>n.makeCircleArc(e,t,r,i,a),makeArcEdge:(e,t,r)=>n.makeArcEdge(e,t,r),makeEllipseEdge:(e,t,r,i,a)=>n.makeEllipseEdge(e,t,r,i,a),makeEllipseArc:()=>zy(`makeEllipseArc`),makeBezierEdge:e=>n.makeBezierEdge(e),makeTangentArc:(e,t,r)=>n.makeTangentArc(e,t,r),makeHelixWire:(e,t,r,i,a,o)=>n.makeHelixWire(e,t,r,i,a,o),makeWireFromMixed:e=>n.makeWireFromMixed(e),makeCompound:a,solidFromShell:()=>zy(`solidFromShell`),hull:i,hullFromPoints:r,buildSolidFromFaces:()=>zy(`buildSolidFromFaces`),makeNonPlanarFace:()=>zy(`makeNonPlanarFace`),addHolesInFace:(e,t)=>n.addHolesInFace(e,t),removeHolesFromFace:()=>zy(`removeHolesFromFace`),makeFaceOnSurface:()=>zy(`makeFaceOnSurface`),bsplineSurface:(e,t,n)=>Ky(`bsplineSurface`).bsplineSurface(e,t,n),triangulatedSurface:(e,t,n)=>Ky(`triangulatedSurface`).triangulatedSurface(e,t,n),buildTriFace:()=>zy(`buildTriFace`),sewAndSolidify:o,createPoint3d:()=>zy(`createPoint3d`),createDirection3d:()=>zy(`createDirection3d`),createVector3d:()=>zy(`createVector3d`),createAxis1:()=>zy(`createAxis1`),createAxis2:()=>zy(`createAxis2`),createAxis3:()=>zy(`createAxis3`)}}var Px=Math.PI/180;function Fx(e){return e}function Ix(e){let t=180/Math.PI*e;return t>360?360:t}function Lx(e){let t=e;if(t&&typeof t.X==`function`&&typeof t.Y==`function`&&typeof t.Z==`function`)return[t.X(),t.Y(),t.Z()]}function Rx(e){if(e&&typeof e==`object`){let t=e;if(`origin`in t&&`direction`in t)return{origin:t.origin,direction:t.direction};let n=e;if(typeof n.Location==`function`&&typeof n.Direction==`function`){let e=Lx(n.Location()),t=Lx(n.Direction());if(e&&t)return{origin:e,direction:t}}}}function zx(e){return e.outline.map(e=>[e[0],e[1]])}function Bx(e){return{outline:e.outline,origin:e.origin,xAxis:e.xAxis,yAxis:e.yAxis}}function Vx(e){return{origin:e.origin,xAxis:e.xAxis,yAxis:e.yAxis,tangent:Yb(Wb(e.xAxis,e.yAxis))}}function Hx(e){let t=0;for(let n of e.outline)t=Math.max(t,Math.hypot(n[0],n[1]));return t||1}function Ux(e){let t=B(e)?.getMesh?.();if(!t)return[];let n=t.numProp,r=Math.floor(t.vertProperties.length/n),i=[];for(let e=0;e<r;e++)i.push([t.vertProperties[e*n]??0,t.vertProperties[e*n+1]??0,t.vertProperties[e*n+2]??0]);return i}function Wx(e,t){let n=Fx(e),r=n.node?.params,i=r?.path??r?.points;if(i&&i.length>=2)return i.map(e=>[e[0],e[1],e[2]]);let a=Ux(n);if(a.length>=2)return a;let o=[],s=Math.max(2,t);for(let e=0;e<s;e++)o.push([0,0,e/(s-1)]);return o}function Gx(e){return e?.node??R(`spine`,{},[])}function Kx(e,t,n){let r=t.xAxis,i=t.yAxis,a=t.origin,o=[r[0],r[1],r[2],0,i[0],i[1],i[2],0,n[0],n[1],n[2],0,a[0],a[1],a[2],1];return e.transform(o)}function qx(e,t,n){let r=Yb(n);return e.outline.map(n=>{let i=Gb(Kb(e.origin,Kb(qb(e.xAxis,n[0]),qb(e.yAxis,n[1]))),t),a=i[0]*r[0]+i[1]*r[1]+i[2]*r[2];return[Jb(Gb(i,qb(r,a))),a]})}function Jx(e,t,n){let r=e,i=Yb(n);if(!(Math.abs(i[0])<1e-9&&Math.abs(i[2])<1e-9&&i[1]>0)){let e=Math.acos(Math.max(-1,Math.min(1,i[1])))*(180/Math.PI),t=Wb([0,1,0],i);Jb(t)<1e-9&&(t=[1,0,0]),t=Yb(t),r=r.rotate([t[0]*e,t[1]*e,t[2]*e])}return(t[0]!==0||t[1]!==0||t[2]!==0)&&(r=r.translate([t[0],t[1],t[2]])),r}function Yx(e,t,n,r,i){let a=Yb(t),{xAxis:o,yAxis:s}=Zb(a),c=i*2*Math.PI,l=Math.max(8,Math.ceil(Math.abs(i)*24)),u=r*i,d=[];for(let t=0;t<=l;t++){let r=t/l,i=c*r,f=Kb(qb(o,n*Math.cos(i)),qb(s,n*Math.sin(i)));d.push(Kb(e,Kb(f,qb(a,u*r))))}return d}function Xx(e){if(e.length!==0)return t=>{let n=t*(e.length-1),r=Math.floor(n),i=Math.min(e.length-1,r+1),a=n-r;return(e[r]??1)*(1-a)+(e[i]??1)*a}}function Zx(e,t,n,r){let i=nx(t),a=Yb([n[0],n[1],n[2]]),o=Jb([n[0]*r,n[1]*r,n[2]*r]),s=[zx(i),...(i.holes??[]).map(e=>e.map(e=>[e[0],e[1]]))];return z(Kx(lx(e,e.Manifold.extrude(s,o)),i,a),R(`extrude`,{outline:i.outline,holes:i.holes,origin:i.origin,xAxis:i.xAxis,yAxis:i.yAxis,direction:[n[0],n[1],n[2]],length:r},[V(Fx(t))]))}function Qx(e,t,n,r,i,a,o){let s=nx(t),c=Ix(i),l=qx(s,n,r);return z(Jx(e.Manifold.revolve([l],0,c),n,r),R(a,o,[V(Fx(t))]))}function $x(e,t){let n=e.length;if(n===0||t.length!==n)return e;let r=0,i=1/0;for(let a=0;a<n;a++){let o=0;for(let r=0;r<n&&o<i;r++){let i=e[(r+a)%n]??[0,0,0],s=t[r]??[0,0,0],c=i[0]-s[0],l=i[1]-s[1],u=i[2]-s[2];o+=c*c+l*l+u*u}o<i&&(i=o,r=a)}if(r===0)return e;let a=[];for(let t=0;t<n;t++)a.push(e[(t+r)%n]??[0,0,0]);return a}function eS(e,t,n,r){if(t.length<2)throw Error(`manifold: loft requires at least two profiles`);let i=t.map(nx),a=i.reduce((e,t)=>Math.max(e,t.outline.length),0),o=i.map(e=>sx({...e,outline:ox(e.outline,a)},Vx(e)));for(let e=1;e<o.length;e++)o[e]=$x(o[e]??[],o[e-1]??[]);return z(cx(e,o),R(n,{sections:i.map(Bx),...r},t.map(e=>V(Fx(e)))))}function tS(e,t,n,r,i,a,o){let s=nx(t),c=dx(n,s.xAxis),l=c.length;return z(cx(e,c.map((e,t)=>{let n=o?o(l>1?t/(l-1):0):1;return sx(s,e,n)})),R(i,{section:Bx(s),path:n.map(e=>[e[0],e[1],e[2]]),...a},[V(Fx(t)),r]))}function nS(e,t,n,r,i,a){if(r===null)return t;let o=nx(n),s=Yb(Wb(o.xAxis,o.yAxis)),c=Math.tan(i*Px),l={origin:Kb(o.origin,qb(s,r)),xAxis:o.xAxis,yAxis:o.yAxis,tangent:s},u=1+c*r/Hx(o),d=cx(e,[sx(o,Vx(o),1),sx(o,l,u)]),f=R(`draftPrism`,{outline:o.outline,origin:o.origin,xAxis:o.xAxis,yAxis:o.yAxis,height:r,angleDeg:i,fuse:a},[V(Fx(n))]);if(a){let e=Fx(t);return z(B(e).add(d),R(`makeFuse`,{},[V(e),f]))}return z(d,f)}function rS(e){return{revolve:(t,n,r)=>{let i=Rx(n);if(!i)throw Error(`manifold: revolve could not read the axis; pass {origin,direction}, a gp_Ax1, or use revolveVec`);let{origin:a,direction:o}=i;return Qx(e,t,a,o,r,`revolve`,{...Bx(nx(t)),axisOrigin:[a[0],a[1],a[2]],axisDirection:[o[0],o[1],o[2]],angleDeg:Ix(r)})},revolveVec:(t,n,r,i)=>Qx(e,t,n,r,i,`revolveVec`,{...Bx(nx(t)),center:[n[0],n[1],n[2]],direction:[r[0],r[1],r[2]],angleDeg:Ix(i)})}}function iS(e){return{sweep:(t,n,r)=>{let i={};return r?.transitionMode!==void 0&&(i.transitionMode=r.transitionMode),tS(e,t,Wx(n,16),Gx(n),`sweep`,i)},simplePipe:(t,n)=>tS(e,t,Wx(n,16),Gx(n),`simplePipe`,{}),sweepWithOptions:(t,n,r,i,a)=>tS(e,t,Wx(n,Math.max(2,a||16)),Gx(n),`sweepWithOptions`,{contactMode:r,scaleValues:[...i],segments:a},Xx(i)),sweepPipeShell:(t,n,r)=>{let i={};r?.transitionMode!==void 0&&(i.transitionMode=r.transitionMode);let a=tS(e,t,Wx(n,16),Gx(n),`sweepPipeShell`,i);return r?.shellMode?{shape:a,firstShape:t,lastShape:t}:a},helicalSweep:(t,n,r,i,a,o)=>tS(e,t,Yx(n,r,i,a,o),Gx(t),`helicalSweep`,{axisOrigin:[n[0],n[1],n[2]],axisDirection:[r[0],r[1],r[2]],radius:i,pitch:a,turns:o})}}function aS(e){return{extrude:(t,n,r)=>Zx(e,t,n,r),...rS(e),loft:(t,n)=>eS(e,t,`loft`,{ruled:n??!1}),loftAdvanced:(t,n)=>eS(e,t,`loftAdvanced`,{solid:n?.solid??!0,ruled:n?.ruled??!1,tolerance:n?.tolerance}),...iS(e),draftPrism:(t,n,r,i,a,o)=>nS(e,t,n,i,a,o),buildExtrusionLaw:(e,t,n)=>({type:`extrusionLaw`,profile:e,length:t,endFactor:n}),loftBatch:()=>zy(`loftBatch`),extrudeBatch:t=>t.map(t=>Zx(e,t.face,t.direction,t.length))}}var oS=16;function sS(e,t,n){if(!(n>0))return Hy(t);let r=uS(e,n);return r===void 0||typeof t?.minkowskiDifference!=`function`||typeof t?.minkowskiSum!=`function`?Hy(t):t.minkowskiDifference(r).minkowskiSum(r)}function cS(e,t,n){if(n===0)return Hy(t);let r=uS(e,Math.abs(n));return r===void 0?Hy(t):n>0?typeof t?.minkowskiSum==`function`?t.minkowskiSum(r):Hy(t):typeof t?.minkowskiDifference==`function`?t.minkowskiDifference(r):Hy(t)}function lS(e,t,n,r){if(n===0)return Hy(t);if(r)return cS(e,t,Math.abs(n));let i=cS(e,t,-Math.abs(n));return typeof t?.subtract==`function`?t.subtract(i):Hy(t)}function uS(e,t){let n=e?.Manifold;if(typeof n?.sphere==`function`)return n.sphere(t,oS)}function dS(e){return e}function fS(e){let t=e;if(t!=null){if(typeof t.index==`number`)return t.index;if(typeof t.id==`number`)return t.id}}function pS(e){let{min:t,max:n}=e;if(!(t===void 0||n===void 0||t.length<3||n.length<3))return[((t[0]??0)+(n[0]??0))/2,((t[1]??0)+(n[1]??0))/2,((t[2]??0)+(n[2]??0))/2]}function mS(e){let t=e;if(t?.box!==void 0)return pS(t.box);let n=(e?.manifold)?.boundingBox?.();return n===void 0?void 0:pS(n)}function hS(e){let t=e.length;if(t===0)return{kind:`all`,count:t};let n=[];for(let t of e){let e=mS(t);if(e===void 0){n.length=0;break}n.push(e)}if(n.length===t)return{kind:`witness`,count:t,points:n};let r=[];for(let t of e){let e=fS(t);if(e===void 0){r.length=0;break}r.push(e)}return r.length===t?{kind:`index`,count:t,indices:r}:{kind:`all`,count:t}}function gS(e){return typeof e==`function`&&zy(`fillet (per-edge radius callback)`),e}function _S(e){return typeof e==`number`?e:e[0]}function vS(e){let t=e.match(/[-+]?\d*\.?\d+/);return t?Number(t[0]):0}function yS(e,t,n,r,i){let a=dS(n),o=gS(i),s=hS(r);return z(sS(e,B(a),_S(o)),R(t,{radius:o,selection:s},[V(a)]))}function bS(e,t,n,r,i){let a=dS(t),o=hS(n);return z(sS(e,B(a),r),R(`chamferDistAngle`,{distance:r,angleDeg:i,selection:o},[V(a)]))}function xS(e,t,n){let r=t.node;if(r?.op!==`extrude`)return;let i=r.params??{},a=i.outline,o=i.origin,s=i.direction,c=i.length;if(!a||a.length<3||!o||!s||typeof c!=`number`)return;let l=Math.abs(n);try{let n=new e.CrossSection([a.map(e=>[e[0],e[1]])]).offset(-l);if(typeof n.isEmpty==`function`&&n.isEmpty())return;let r=e.Manifold.extrude(n,c),i=Math.hypot(s[0],s[1],s[2])||1,u=Math.abs(s[0])<1e-9&&Math.abs(s[1])<1e-9&&s[2]>0,d=r;if(!u){let e=Math.atan2(Math.hypot(s[0],s[1]),s[2])*(180/Math.PI),t=Math.atan2(s[1],s[0])*(180/Math.PI);d=d.rotate([0,e,t])}return d=d.translate([o[0]+s[0]/i*l,o[1]+s[1]/i*l,o[2]+s[2]/i*l]),lx(e,B(t).subtract(d))}catch{return}}function SS(e,t,n,r,i){let a=dS(t),o=hS(n);return z(xS(e,a,r)??lS(e,B(a),r,!1),R(`shell`,i===void 0?{thickness:r,selection:o}:{thickness:r,selection:o,tolerance:i},[V(a)]))}function CS(e,t,n){let r=dS(t);return z(lS(e,B(r),n,!0),R(`thicken`,{thickness:n},[V(r)]))}function wS(e,t,n,r){let i=dS(t);return z(cS(e,B(i),n),R(`offset`,r===void 0?{distance:n}:{distance:n,tolerance:r},[V(i)]))}function TS(e,t,n){let r=dS(t);return z(sS(e,B(r),vS(n)),R(`filletVariable`,{spec:n},[V(r)]))}function ES(e,t,n,r,i){typeof i==`function`&&zy(`draft (per-face angle callback)`);let a=dS(e),o=hS(t);return z(Hy(B(a)),R(`draft`,{pullDirection:n,neutralPlane:r,angleDeg:i,selection:o},[V(a)]))}function DS(e,t){let n=dS(e),r=hS(t);return z(Hy(B(n)),R(`defeature`,{selection:r},[V(n)]))}function OS(e){let t=dS(e),n=B(t);return z(typeof n?.simplify==`function`?n.simplify():Hy(n),R(`simplify`,{},[V(t)]))}function kS(e){let t=dS(e),n=B(t);return z(typeof n?.mirror==`function`?n.mirror([1,0,0]):Hy(n),R(`reverseShape`,{},[V(t)]))}function AS(e,t){let n=dS(t.shape),r=hS(t.edges.map(e=>e.edge)),i=t.edges.map(e=>e.r2===void 0?e.radius:[e.radius,e.r2]),a=t.edges[0]?.radius??0;return z(sS(e,B(n),a),R(`fillet`,{radii:i,selection:r},[V(n)]))}function jS(e){return{fillet:(t,n,r)=>yS(e,`fillet`,t,n,r),chamfer:(t,n,r)=>yS(e,`chamfer`,t,n,r),chamferDistAngle:(t,n,r,i)=>bS(e,t,n,r,i),shell:(t,n,r,i)=>SS(e,t,n,r,i),thicken:(t,n)=>CS(e,t,n),offset:(t,n,r)=>wS(e,t,n,r),filletVariable:(t,n)=>TS(e,t,n),draft:(e,t,n,r,i)=>ES(e,t,n,r,i),defeature:(e,t)=>DS(e,t),offsetWire2D:()=>zy(`offsetWire2D`),simplify:e=>OS(e),reverseShape:e=>kS(e),shellBatch:t=>t.map(t=>SS(e,t.shape,t.faces,t.thickness,t.tolerance)),filletBatch:t=>t.map(t=>AS(e,t))}}function MS(e){return B(e).getMesh()}function NS(e){let t=e.numProp,n=e.vertProperties.length/t;if(t===3)return new Float32Array(e.vertProperties);let r=new Float32Array(n*3);for(let i=0;i<n;i++)r[i*3]=e.vertProperties[i*t]??0,r[i*3+1]=e.vertProperties[i*t+1]??0,r[i*3+2]=e.vertProperties[i*t+2]??0;return r}function PS(e,t){let n=new Float32Array(e.length);for(let r=0;r<t.length;r+=3){let i=(t[r]??0)*3,a=(t[r+1]??0)*3,o=(t[r+2]??0)*3,s=e[i]??0,c=e[i+1]??0,l=e[i+2]??0,u=(e[a]??0)-s,d=(e[a+1]??0)-c,f=(e[a+2]??0)-l,p=(e[o]??0)-s,m=(e[o+1]??0)-c,h=(e[o+2]??0)-l,g=d*h-f*m,_=f*p-u*h,v=u*m-d*p;for(let e of[i,a,o])n[e]=(n[e]??0)+g,n[e+1]=(n[e+1]??0)+_,n[e+2]=(n[e+2]??0)+v}for(let e=0;e<n.length;e+=3){let t=n[e]??0,r=n[e+1]??0,i=n[e+2]??0,a=Math.sqrt(t*t+r*r+i*i);a>1e-12&&(n[e]=t/a,n[e+1]=r/a,n[e+2]=i/a)}return n}function FS(e){let t=e.triVerts.length/3,{runIndex:n,runOriginalID:r}=e;if(!n||!r||n.length<2)return[{start:0,count:e.triVerts.length,faceHash:0}];let i=[];for(let e=0;e+1<n.length;e++){let a=n[e]??0,o=(n[e+1]??t*3)-a;o!==0&&i.push({start:a,count:o,faceHash:r[e]??0})}return i}function IS(e,t){let n=MS(e),r=NS(n),i=new Uint32Array(n.triVerts);return{vertices:r,normals:t.skipNormals?new Float32Array:PS(r,i),triangles:i,uvs:t.includeUVs?new Float32Array(r.length/3*2):new Float32Array,faceGroups:FS(n)}}function LS(e,t,n){let r=MS(e),i=NS(r),a=r.triVerts,o=[],s=[],c=new Set,l=i.length/3,u=e=>{o.push(i[e*3]??0,i[e*3+1]??0,i[e*3+2]??0)};for(let e=0;e<a.length;e+=3){let t=a[e]??0,n=a[e+1]??0,r=a[e+2]??0;for(let[e,i]of[[t,n],[n,r],[r,t]]){let t=Math.min(e,i),n=Math.max(e,i),r=t*l+n;if(c.has(r))continue;c.add(r);let a=o.length/3;u(t),u(n),s.push({start:a,count:2,edgeHash:r})}}return{lines:new Float32Array(o),edgeGroups:s}}function RS(e){return!0}function zS(e){return{mesh:(e,t)=>IS(e,t),meshEdges:(e,t,n)=>LS(e,t,n),hasTriangulation:e=>RS(e),meshShape:(e,t,n)=>{}}}function BS(e,t=[0,0,0]){return Array.isArray(e)&&e.length>=3?[Number(e[0]),Number(e[1]),Number(e[2])]:[...t]}function VS(e,t=0){return typeof e==`number`?e:t}function HS(e,t=``){return typeof e==`string`?e:t}function US(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function WS(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function GS(e,t,n,r){return US(t,US(WS(n,e[0]),WS(r,e[1])))}function KS(e,t){let n=t.outline??[];if(n.length<3)throw Error(`manifold replay: profile outline needs at least three points`);let r=BS(t.origin),i=BS(t.xAxis,[1,0,0]),a=BS(t.yAxis,[0,1,0]),o=n.map(e=>GS(e,r,i,a)),s=[];for(let t=0;t<o.length;t++){let n=o[t]??r,i=o[(t+1)%o.length]??r;s.push(e.makeLineEdge([n[0],n[1],n[2]],[i[0],i[1],i[2]]))}let c=e.makeWire(s),l=e.makeFace(c,!0);for(let t of s)e.dispose(t);return l}function qS(e,t){return KS(e,t)}function JS(e,t){let n=e.boundingBox(t);return[(n.min[0]+n.max[0])/2,(n.min[1]+n.max[1])/2,(n.min[2]+n.max[2])/2]}function YS(e,t){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return n*n+r*r+i*i}function XS(e,t,n,r){let i=e.iterShapes(t,r);if(!n||n.kind===`all`)return i;if(n.kind===`witness`){let t=n.points??[],r=i.map(t=>JS(e,t)),a=[],o=new Set;for(let e of t){let t=-1,n=1/0;for(let a=0;a<i.length;a++){if(o.has(a))continue;let i=YS(e,r[a]??[0,0,0]);i<n&&(n=i,t=a)}let s=i[t];t>=0&&s!==void 0&&(o.add(t),a.push(s))}return a}if(n.kind===`index`){let e=n.indices??[],t=[];for(let n of e){let e=i[n];e!==void 0&&t.push(e)}return t}let a=n.regions??[],o=e=>a.some(t=>e[0]>=t.min[0]&&e[0]<=t.max[0]&&e[1]>=t.min[1]&&e[1]<=t.max[1]&&e[2]>=t.min[2]&&e[2]<=t.max[2]);return i.filter(t=>o(JS(e,t)))}function ZS(e){let t=e.selection;return t===void 0?void 0:t}function QS(e){let t=e[0];if(t===void 0)throw Error(`manifold replay: op requires an input shape`);return t}function $S(e,t,n){return e.createAxis1(t[0],t[1],t[2],n[0],n[1],n[2])}function eC(e,t){return(n,r)=>{let i=KS(n,r),a=BS(r[e]),o=BS(r[t],[0,0,1]),s=VS(r.angleDeg,360);return n.revolve(i,$S(n,a,o),Math.PI/180*s)}}var tC={makeBox:(e,t)=>e.makeBox(VS(t.width),VS(t.height),VS(t.depth)),makeBoxWithCorners:(e,t)=>e.makeBoxFromCorners(BS(t.p1),BS(t.p2)),makeCylinder:(e,t)=>e.makeCylinder(VS(t.radius),VS(t.height),BS(t.center),BS(t.direction,[0,0,1])),makeSphere:(e,t)=>e.makeSphere(VS(t.radius),BS(t.center)),makeCone:(e,t)=>e.makeCone(VS(t.radius1),VS(t.radius2),VS(t.height),BS(t.center),BS(t.direction,[0,0,1])),makeTorus:(e,t)=>e.makeTorus(VS(t.majorRadius),VS(t.minorRadius),BS(t.center),BS(t.direction,[0,0,1])),makeEllipsoid:(e,t)=>e.makeEllipsoid(VS(t.aLength),VS(t.bLength),VS(t.cLength)),makeFuse:(e,t,n)=>{if(n.length<2)return QS(n);let r=QS(n);for(let t of n.slice(1))r=e.fuse(r,t);return r},makeCut:(e,t,n)=>{let r=QS(n);return e.cutAll(r,n.slice(1))},makeCommon:(e,t,n)=>{let r=QS(n);for(let t of n.slice(1))r=e.intersect(r,t);return r},translateShape:(e,t,n)=>e.translate(QS(n),VS(t.x),VS(t.y),VS(t.z)),rotateShape:(e,t,n)=>e.rotate(QS(n),VS(t.angle),BS(t.axis,[0,0,1]),BS(t.center)),scaleShape:(e,t,n)=>e.scale(QS(n),BS(t.center),VS(t.factor,1)),mirrorShape:(e,t,n)=>e.mirror(QS(n),BS(t.origin),BS(t.normal,[1,0,0])),transformShape:(e,t,n)=>e.transform(QS(n),t.matrix),generalTransform:(e,t,n)=>e.generalTransform(QS(n),t.linear,BS(t.translation),!!t.isOrthogonal),generalTransformNonOrthogonal:(e,t,n)=>e.generalTransformNonOrthogonal(QS(n),t.linear,BS(t.translation)),gridPattern:(e,t,n)=>{if(typeof e.gridPattern!=`function`)throw Error(`manifold replay: target kernel lacks gridPattern`);return e.gridPattern(QS(n),BS(t.directionX),BS(t.directionY),VS(t.spacingX),VS(t.spacingY),VS(t.countX,1),VS(t.countY,1))},profileEdge:(e,t)=>{let n=t.pts??[],r=n[0]??[0,0,0],i=n.length>1?n[n.length-1]??r:[r[0]+.001,r[1],r[2]];return e.makeLineEdge([r[0],r[1],r[2]],[i[0],i[1],i[2]])},profileWire:(e,t)=>{let n=t.ring??[],r=[];for(let t=0;t<n.length;t++){let i=n[t]??[0,0,0],a=n[(t+1)%n.length]??i;r.push(e.makeLineEdge([i[0],i[1],i[2]],[a[0],a[1],a[2]]))}let i=e.makeWire(r);for(let t of r)e.dispose(t);return i},profileFace:(e,t)=>KS(e,t),extrude:(e,t)=>{let n=KS(e,t);return e.extrude(n,BS(t.direction,[0,0,1]),VS(t.length,1))},revolve:eC(`axisOrigin`,`axisDirection`),revolveVec:eC(`center`,`direction`),loft:(e,t)=>{let n=(t.sections??[]).map(t=>nC(e,t));return e.loft(n,!!t.ruled)},loftAdvanced:(e,t)=>{let n=(t.sections??[]).map(t=>nC(e,t)),r={solid:t.solid!==!1,ruled:!!t.ruled};return typeof t.tolerance==`number`&&(r.tolerance=t.tolerance),e.loftAdvanced(n,r)},sweep:(e,t)=>e.sweep(rC(e,t),iC(e,t)),simplePipe:(e,t)=>e.simplePipe(rC(e,t),iC(e,t)),sweepWithOptions:(e,t)=>e.sweepWithOptions(rC(e,t),iC(e,t),HS(t.contactMode),t.scaleValues??[],VS(t.segments,0)),sweepPipeShell:(e,t)=>{let n=e.sweepPipeShell(rC(e,t),iC(e,t));return aC(n)?n.shape:n},helicalSweep:(e,t)=>e.helicalSweep(rC(e,t),BS(t.axisOrigin),BS(t.axisDirection,[0,0,1]),VS(t.radius),VS(t.pitch),VS(t.turns,1)),draftPrism:(e,t)=>{let n=KS(e,t);return e.draftPrism(n,n,n,VS(t.height),VS(t.angleDeg),!!t.fuse)},fillet:(e,t,n)=>{let r=QS(n),i=XS(e,r,ZS(t),`edge`),a=t.radii,o=t.radius;if(a&&a.length>1){let t=new Map;for(let e=0;e<i.length;e++){let n=i[e],r=a[e]??a[a.length-1];n!==void 0&&r!==void 0&&t.set(n,r)}return e.fillet(r,i,e=>t.get(e)??0)}let s=a?.[0]??o;return e.fillet(r,i,s??0)},chamfer:(e,t,n)=>{let r=QS(n),i=XS(e,r,ZS(t),`edge`);return e.chamfer(r,i,t.radius)},chamferDistAngle:(e,t,n)=>{let r=QS(n),i=XS(e,r,ZS(t),`edge`);return e.chamferDistAngle(r,i,VS(t.distance),VS(t.angleDeg))},shell:(e,t,n)=>{let r=QS(n),i=XS(e,r,ZS(t),`face`);return typeof t.tolerance==`number`?e.shell(r,i,VS(t.thickness),t.tolerance):e.shell(r,i,VS(t.thickness))},thicken:(e,t,n)=>e.thicken(QS(n),VS(t.thickness)),offset:(e,t,n)=>typeof t.tolerance==`number`?e.offset(QS(n),VS(t.distance),t.tolerance):e.offset(QS(n),VS(t.distance)),filletVariable:(e,t,n)=>e.filletVariable(QS(n),HS(t.spec)),draft:(e,t,n)=>{let r=QS(n),i=XS(e,r,ZS(t),`face`);return e.draft(r,i,BS(t.pullDirection,[0,0,1]),BS(t.neutralPlane),VS(t.angleDeg))},defeature:(e,t,n)=>{let r=QS(n),i=XS(e,r,ZS(t),`face`);return e.defeature(r,i)},simplify:(e,t,n)=>e.simplify(QS(n)),reverseShape:(e,t,n)=>e.reverseShape(QS(n)),hull:(e,t,n)=>e.hull([...n],VS(t.tolerance)),hullFromPoints:(e,t)=>{let n=t.points??[];return e.hullFromPoints(n.map(e=>({x:e[0],y:e[1],z:e[2]})),VS(t.tolerance))},sewAndSolidify:(e,t,n)=>e.sewAndSolidify([...n],VS(t.tolerance))};function nC(e,t){let n=qS(e,t);return e.iterShapes(n,`wire`)[0]??n}function rC(e,t){let n=t.section;return n?qS(e,n):KS(e,t)}function iC(e,t){let n=t.path??[];if(n.length<2)throw Error(`manifold replay: sweep spine needs at least two path points`);let r=[];for(let t=0;t+1<n.length;t++){let i=n[t]??[0,0,0],a=n[t+1]??[0,0,0];r.push(e.makeLineEdge([i[0],i[1],i[2]],[a[0],a[1],a[2]]))}let i=e.makeWire(r);for(let t of r)e.dispose(t);return i}function aC(e){return typeof e==`object`&&!!e&&`shape`in e&&`firstShape`in e&&`lastShape`in e}function oC(e,t,n,r){let i=n.get(e);if(i!==void 0)return i;if(!e.replayable)throw Error(`manifold replay: op '${e.op}' is not replayable (raw-mesh origin or unsupported)`);let a=tC[e.op];if(!a)throw Error(`manifold replay: no replay handler for op '${e.op}'`);let o=e.inputs.map(e=>oC(e,t,n,r)),s=a(t,e.params,o);return n.set(e,s),r.add(s),s}function sC(e,t,n=new Map){let r=new Set,i=oC(e,t,n,r);for(let e of r)e!==i&&t.dispose(e);return i}function cC(e){return B(e)}function lC(e){let t=e?.node?.params;if(!t)return;let n=t.pts??t.ring;if(n&&n.length)return n;let r=t.outline;if(r&&r.length){let e=t.origin??[0,0,0],n=t.xAxis??[1,0,0],i=t.yAxis??[0,1,0];return r.map(t=>[e[0]+n[0]*t[0]+i[0]*t[1],e[1]+n[1]*t[0]+i[1]*t[1],e[2]+n[2]*t[0]+i[2]*t[1]])}}function uC(e){let t=[1/0,1/0,1/0],n=[-1/0,-1/0,-1/0];for(let r of e)for(let e=0;e<3;e++){let i=r[e]??0;i<(t[e]??1/0)&&(t[e]=i),i>(n[e]??-1/0)&&(n[e]=i)}return{min:t,max:n}}function dC(e){let t=e;if(t&&t.__manifoldSub&&t.box)return t.box;let n=lC(e);return n?uC(n):cC(e).boundingBox()}function fC(e){return cC(e)?.getMesh?.()}function pC(e,t){let n=t*e.numProp;return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function mC(e,t){let n=t*3;return[e.triVerts[n]??0,e.triVerts[n+1]??0,e.triVerts[n+2]??0]}function hC(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function gC(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function _C(e){let t=dC(e);return[(t.min[0]+t.max[0])/2,(t.min[1]+t.max[1])/2,(t.min[2]+t.max[2])/2]}function vC(e){let t=Math.floor(e.vertProperties.length/e.numProp);if(t===0)return[0,0,0];let n=[0,0,0];for(let r=0;r<t;r++){let t=pC(e,r);n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}return[n[0]/t,n[1]/t,n[2]/t]}function yC(e){let t=fC(e);if(!t)return _C(e);let n=Math.floor(t.triVerts.length/3),r=0,i=[0,0,0];for(let e=0;e<n;e++){let[n,a,o]=mC(t,e),s=pC(t,n),c=pC(t,a),l=pC(t,o),u=gC(s,hC(c,l))/6;r+=u,i[0]+=(s[0]+c[0]+l[0])/4*u,i[1]+=(s[1]+c[1]+l[1])/4*u,i[2]+=(s[2]+c[2]+l[2])/4*u}return Math.abs(r)<1e-12?vC(t):[i[0]/r,i[1]/r,i[2]/r]}function bC(e){let t=fC(e);if(!t)return _C(e);let n=Math.floor(t.triVerts.length/3),r=0,i=[0,0,0];for(let e=0;e<n;e++){let[n,a,o]=mC(t,e),s=pC(t,n),c=pC(t,a),l=pC(t,o),u=hC([c[0]-s[0],c[1]-s[1],c[2]-s[2]],[l[0]-s[0],l[1]-s[1],l[2]-s[2]]),d=Math.hypot(u[0],u[1],u[2])/2;r+=d,i[0]+=(s[0]+c[0]+l[0])/3*d,i[1]+=(s[1]+c[1]+l[1])/3*d,i[2]+=(s[2]+c[2]+l[2])/3*d}return r<1e-12?vC(t):[i[0]/r,i[1]/r,i[2]/r]}function xC(e){return cC(e).volume()}function SC(e){let t=e;return t&&t.__nativeFace&&typeof t.area==`number`?t.area:cC(e).surfaceArea()}function CC(e){let t=e;if(t&&t.__manifoldSub&&t.box)return{min:[...t.box.min],max:[...t.box.max]};let n=dC(e);return{min:[...n.min],max:[...n.max]}}function wC(e){return yC(e)}function TC(e,t){let n=(e,t,n,r)=>{if(t<n)return[t,n];if(r<e)return[e,r];let i=(Math.max(e,n)+Math.min(t,r))/2;return[i,i]},[r,i]=n(e.min[0],e.max[0],t.min[0],t.max[0]),[a,o]=n(e.min[1],e.max[1],t.min[1],t.max[1]),[s,c]=n(e.min[2],e.max[2],t.min[2],t.max[2]),l=i-r,u=o-a,d=c-s;return{value:Math.sqrt(l*l+u*u+d*d),point1:[r,a,s],point2:[i,o,c]}}function EC(e,t){return TC(dC(e),dC(t))}function DC(e,t=!1){return{volume:xC(e),area:SC(e),length:0,centerOfMass:wC(e),boundingBox:CC(e)}}function OC(e,t,n){let r=Gy();if(!r)throw new c(`manifold: surfaceCurvature requires a registered occt kernel; none is available`);let i=Uy(e);if(!i)return r.surfaceCurvature(e,t,n);if(!i.node.replayable)throw Error(`manifold: surfaceCurvature unsupported; shape originates from a non-replayable op (raw mesh import or mesh boolean)`);let a=qy.get(i.node)??(()=>{let e=sC(i.node,r);return qy.set(i.node,e),e})();return r.surfaceCurvature(a,t,n)}function kC(e){return{volume:e=>xC(e),area:e=>SC(e),length:e=>{let t=e;if(t&&t.__nativeEdge&&typeof t.length==`number`)return t.length;let n=Uy(e)?.node;return n?.op===`profileEdge`&&n.params?.curve?Lb(n.params.curve):zy(`length`)},centerOfMass:e=>wC(e),linearCenterOfMass:e=>wC(e),boundingBox:e=>CC(e),distance:(e,t)=>EC(e,t),surfaceCurvature:(e,t,n)=>OC(e,t,n),surfaceCenterOfMass:e=>bC(e),measureBulk:(e,t)=>DC(e,t),createDistanceQuery:e=>({distanceTo:t=>EC(e,t),dispose:()=>{}})}}function AC(e,t){let{runIndex:n,runOriginalID:r}=e;if(!n||!r)return 0;let i=t*3;for(let e=0;e<r.length;e++){let t=n[e]??0,a=n[e+1]??2**53-1;if(i>=t&&i<a)return r[e]??0}return 0}function jC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID,o=n.length/3,s=e=>{let t=e*i;return[r[t]??0,r[t+1]??0,r[t+2]??0]},c=new Map;for(let e=0;e<o;e++){let t=a?a[e]??e:e,n=c.get(t);n||(n=[],c.set(t,n)),n.push(e)}let l=[];for(let[e,r]of c){let i=0,a=0,o=0,c=0,u=0,d=0,f=0,p=1/0,m=1/0,h=1/0,g=-1/0,_=-1/0,v=-1/0,y=new Float32Array(r.length*9),b=0;for(let e of r){let t=s(n[e*3]??0),r=s(n[e*3+1]??0),l=s(n[e*3+2]??0),x=r[0]-t[0],S=r[1]-t[1],C=r[2]-t[2],w=l[0]-t[0],ee=l[1]-t[1],te=l[2]-t[2],ne=S*te-C*ee,re=C*w-x*te,ie=x*ee-S*w;i+=ne,a+=re,o+=ie;let ae=.5*Math.hypot(ne,re,ie);f+=ae;let oe=(t[0]+r[0]+l[0])/3,se=(t[1]+r[1]+l[1])/3,ce=(t[2]+r[2]+l[2])/3;c+=ae*oe,u+=ae*se,d+=ae*ce;for(let e of[t,r,l])e[0]<p&&(p=e[0]),e[1]<m&&(m=e[1]),e[2]<h&&(h=e[2]),e[0]>g&&(g=e[0]),e[1]>_&&(_=e[1]),e[2]>v&&(v=e[2]),y[b++]=e[0],y[b++]=e[1],y[b++]=e[2]}let x=Math.hypot(i,a,o)||1,S=[i/x,a/x,o/x],C=f>0?[c/f,u/f,d/f]:[0,0,0];l.push({__nativeFace:!0,faceId:e,originId:AC(t,r[0]??0),normal:S,center:C,area:f,min:[p,m,h],max:[g,_,v],tris:y})}return l}function MC(e){return!!e&&typeof e==`object`&&e.__nativeFace===!0}var NC=Math.cos(45*Math.PI/180),PC=(e,t)=>e<t?e*1e9+t:t*1e9+e,FC=(e,t)=>e<t?`${e},${t}`:`${t},${e}`;function IC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID,o=n.length/3;if(!a)return[];let s=e=>{let t=e*i;return[r[t]??0,r[t+1]??0,r[t+2]??0]},c=e=>{let t=s(n[e*3]??0),r=s(n[e*3+1]??0),i=s(n[e*3+2]??0),a=r[0]-t[0],o=r[1]-t[1],c=r[2]-t[2],l=i[0]-t[0],u=i[1]-t[1],d=i[2]-t[2],f=o*d-c*u,p=c*l-a*d,m=a*u-o*l,h=Math.hypot(f,p,m)||1;return[f/h,p/h,m/h]},l=new Map;for(let e=0;e<o;e++){let t=n[e*3]??0,r=n[e*3+1]??0,i=n[e*3+2]??0,o=a[e]??e,s=c(e);for(let[e,n]of[[t,r],[r,i],[i,t]]){let t=PC(e,n),r=l.get(t);r||(r={v:[e,n],faces:[],nrm:[]},l.set(t,r)),r.faces.push(o),r.nrm.push(s)}}let u=new Map;for(let{v:e,faces:t,nrm:n}of l.values()){if(t.length!==2)continue;let[r,i]=t;if(r===i)continue;let[a,o]=n;if(a[0]*o[0]+a[1]*o[1]+a[2]*o[2]>NC)continue;let s=FC(r,i),c=u.get(s);c||(c={faces:r<i?[r,i]:[i,r],segs:[]},u.set(s,c)),c.segs.push(e)}let d=[];for(let{faces:e,segs:t}of u.values())for(let n of LC(t))d.push(RC(e,n,s));return d}function LC(e){let t=new Map,n=new Set,r=(e,n)=>{let r=t.get(e);r||(r=[],t.set(e,r)),r.push(n)};e.forEach(([e,t],n)=>{r(e,n),r(t,n)});let i=(t,n)=>{let r=e[t]??[n,n];return r[0]===n?r[1]:r[0]},a=[];for(let r=0;r<e.length;r++){if(n.has(r))continue;n.add(r);let o=e[r]??[0,0],s=[o[0],o[1]];for(let r=0;r<e.length;r++){let e=s[s.length-1]??0,r=(t.get(e)??[]).find(e=>!n.has(e));if(r===void 0)break;n.add(r),s.push(i(r,e))}for(let r=0;r<e.length;r++){let e=s[0]??0,r=(t.get(e)??[]).find(e=>!n.has(e));if(r===void 0)break;n.add(r),s.unshift(i(r,e))}a.push(s)}return a}function RC(e,t,n){let r=t.length,i=new Float32Array(r*3),a=new Float32Array(r),o=1/0,s=1/0,c=1/0,l=-1/0,u=-1/0,d=-1/0,f=0,p=null;for(let e=0;e<r;e++){let r=n(t[e]??0);i[e*3]=r[0],i[e*3+1]=r[1],i[e*3+2]=r[2],p&&(f+=Math.hypot(r[0]-p[0],r[1]-p[1],r[2]-p[2])),a[e]=f,p=r,r[0]<o&&(o=r[0]),r[1]<s&&(s=r[1]),r[2]<c&&(c=r[2]),r[0]>l&&(l=r[0]),r[1]>u&&(u=r[1]),r[2]>d&&(d=r[2])}return{__nativeEdge:!0,faces:e,pts:i,arc:a,length:f,min:[o,s,c],max:[l,u,d],curveType:zC(i)?`LINE`:`CIRCLE`}}function zC(e){let t=e.length/3;if(t<=2)return!0;let n=e[0]??0,r=e[1]??0,i=e[2]??0,a=e[(t-1)*3]??0,o=e[(t-1)*3+1]??0,s=e[(t-1)*3+2]??0,c=a-n,l=o-r,u=s-i,d=Math.hypot(c,l,u)||1;c/=d,l/=d,u/=d;for(let a=1;a<t-1;a++){let t=(e[a*3]??0)-n,o=(e[a*3+1]??0)-r,s=(e[a*3+2]??0)-i,f=t*c+o*l+s*u,p=t-f*c,m=o-f*l,h=s-f*u;if(Math.hypot(p,m,h)>1e-6*Math.max(1,d))return!1}return!0}function BC(e){let t=e,n=t.triVerts,r=t.vertProperties,i=t.numProp||3,a=t.faceID;if(!a)return[];let o=n.length/3,s=new Map;for(let e=0;e<o;e++){let t=a[e]??e;for(let r=0;r<3;r++){let i=n[e*3+r]??0,a=s.get(i);a||(a=new Set,s.set(i,a)),a.add(t)}}let c=[];for(let[e,t]of s){if(t.size<3)continue;let n=e*i;c.push({__nativeVertex:!0,point:[r[n]??0,r[n+1]??0,r[n+2]??0]})}return c}function VC(e){return!!e&&typeof e==`object`&&e.__nativeVertex===!0}function HC(e){return!!e&&typeof e==`object`&&e.__nativeEdge===!0}function UC(e,t){let{pts:n,arc:r}=e,i=r.length;if(i===0)return[0,0,0];if(t<=0)return[n[0]??0,n[1]??0,n[2]??0];if(t>=e.length)return[n[(i-1)*3]??0,n[(i-1)*3+1]??0,n[(i-1)*3+2]??0];let a=1;for(;a<i&&(r[a]??0)<t;)a++;let o=r[a-1]??0,s=r[a]??o,c=s>o?(t-o)/(s-o):0,l=(a-1)*3,u=a*3;return[(n[l]??0)+((n[u]??0)-(n[l]??0))*c,(n[l+1]??0)+((n[u+1]??0)-(n[l+1]??0))*c,(n[l+2]??0)+((n[u+2]??0)-(n[l+2]??0))*c]}function WC(e,t){let{pts:n,arc:r}=e,i=r.length;if(i<2)return[1,0,0];let a=1;for(;a<i-1&&(r[a]??0)<t;)a++;let o=(a-1)*3,s=a*3,c=(n[s]??0)-(n[o]??0),l=(n[s+1]??0)-(n[o+1]??0),u=(n[s+2]??0)-(n[o+2]??0),d=Math.hypot(c,l,u)||1;return[c/d,l/d,u/d]}function GC(e,t){let n=Uy(e);if(!n)throw Error(`manifold: ${t} requires a manifold shape handle`);if(!n.node.replayable)throw Error(`manifold: ${t} unsupported; shape originates from a non-replayable op (raw mesh import or mesh boolean)`);let r=Ky(t),i=qy.get(n.node);if(i!==void 0)return{occt:r,brep:i};let a=sC(n.node,r);return qy.set(n.node,a),{occt:r,brep:a}}function KC(e){if(Uy(e))return`solid`;let{occt:t,brep:n}=GC(e,`shapeType`);return t.shapeType(n)}function qC(e,t){let n=Uy(e),r=Uy(t);return!n||!r?!1:n.manifold===r.manifold}function JC(e,t){if(!Uy(e))return 0;let{occt:n,brep:r}=GC(e,`hashCode`);return n.hashCode(r,t)}function YC(e){let t=Uy(e);return t?!B(t):!0}function XC(e,t){let n=Uy(e);if(!n)return[];if(t===`solid`)return[e];if(t===`vertex`){let e=B(n);return e&&typeof e.getMesh==`function`?BC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.point,max:e.point},parent:n.node,subType:`vertex`})):[]}if(t!==`edge`&&t!==`face`)return[];if(t===`face`){let e=B(n);if(e&&typeof e.getMesh==`function`)return jC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.min,max:e.max},parent:n.node,subType:`face`}))}if(t===`edge`){let e=B(n);if(e&&typeof e.getMesh==`function`)return IC(e.getMesh()).map((e,t)=>({...e,__manifoldSub:!0,index:t,box:{min:e.min,max:e.max},parent:n.node,subType:`edge`}))}if(!n.node.replayable)return[];let r=Gy();if(!r)return[];let i=qy.get(n.node)??(()=>{let e=sC(n.node,r);return qy.set(n.node,e),e})();return r.iterShapes(i,t).map((e,i)=>({__manifoldSub:!0,index:i,box:r.boundingBox(e),occt:e,parent:n.node,subType:t}))}function ZC(e){let{occt:t,brep:n}=GC(e,`edgeToFaceMap`);return t.edgeToFaceMap(n)}function QC(e,t){let{occt:n,brep:r}=GC(e,`adjacentFaces`);return n.adjacentFaces(r,t)}function $C(e){return{iterShapes:XC,iterShapeList:(e,t)=>{Ky(`iterShapeList`).iterShapeList(e,t)},shapeType:KC,isSame:qC,isEqual:qC,downcast:e=>e,copyShape:e=>{let t=Uy(e);return t?z(Hy(B(t)),R(`translateShape`,{x:0,y:0,z:0},[t.node])):e},hashCode:JC,isNull:YC,shapeOrientation:e=>`forward`,edgeToFaceMap:ZC,sharedEdges:(e,t)=>Ky(`sharedEdges`).sharedEdges(e,t),adjacentFaces:QC,sew:()=>{throw Error(`manifold: sew is unsupported on the mesh kernel; use a B-rep kernel`)}}}function ew(e){return B(e).getMesh()}function tw(e){return e.numProp&&e.numProp>=3?e.numProp:3}function nw(e){return Math.floor(e.vertProperties.length/tw(e))}function rw(e,t){let n=t*tw(e);return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function iw(e,t){let n=t*3;return[e.triVerts[n]??0,e.triVerts[n+1]??0,e.triVerts[n+2]??0]}function aw(e,t,n){let r=t[0]-e[0],i=t[1]-e[1],a=t[2]-e[2],o=n[0]-e[0],s=n[1]-e[1],c=n[2]-e[2],l=i*c-a*s,u=a*o-r*c,d=r*s-i*o,f=Math.hypot(l,u,d)||1;return[l/f,u/f,d/f]}function ow(e,t){let n=ew(e),r=Math.floor(n.triVerts.length/3);if(t){let e=new ArrayBuffer(84+r*50),t=new DataView(e);t.setUint32(80,r,!0);let i=84;for(let e=0;e<r;e++){let[r,a,o]=iw(n,e),s=rw(n,r),c=rw(n,a),l=rw(n,o),u=aw(s,c,l);t.setFloat32(i,u[0],!0),t.setFloat32(i+4,u[1],!0),t.setFloat32(i+8,u[2],!0),i+=12;for(let e of[s,c,l])t.setFloat32(i,e[0],!0),t.setFloat32(i+4,e[1],!0),t.setFloat32(i+8,e[2],!0),i+=12;t.setUint16(i,0,!0),i+=2}return e}let i=[`solid manifold`];for(let e=0;e<r;e++){let[t,r,a]=iw(n,e),o=rw(n,t),s=rw(n,r),c=rw(n,a),l=aw(o,s,c);i.push(` facet normal ${l[0]} ${l[1]} ${l[2]}`),i.push(` outer loop`);for(let e of[o,s,c])i.push(` vertex ${e[0]} ${e[1]} ${e[2]}`);i.push(` endloop`),i.push(` endfacet`)}return i.push(`endsolid manifold`),i.join(`
|
|
10
|
+
`)}function sw(e){let t=ew(e),n=nw(t),r=Math.floor(t.triVerts.length/3),i=[`# exported by brepjs manifold kernel`];for(let e=0;e<n;e++){let n=rw(t,e);i.push(`v ${n[0]} ${n[1]} ${n[2]}`)}for(let e=0;e<r;e++){let[n,r,a]=iw(t,e);i.push(`f ${n+1} ${r+1} ${a+1}`)}return new TextEncoder().encode(i.join(`
|
|
11
|
+
`)).buffer}function cw(e){let t=ew(e),n=nw(t),r=Math.floor(t.triVerts.length/3),i=`ply\nformat binary_little_endian 1.0\nelement vertex ${n}\nproperty float x\nproperty float y\nproperty float z\nelement face ${r}\nproperty list uchar uint vertex_indices\nend_header\n`,a=new TextEncoder().encode(i),o=new ArrayBuffer(n*12+r*13),s=new DataView(o),c=0;for(let e=0;e<n;e++){let n=rw(t,e);s.setFloat32(c,n[0],!0),s.setFloat32(c+4,n[1],!0),s.setFloat32(c+8,n[2],!0),c+=12}for(let e=0;e<r;e++){let[n,r,i]=iw(t,e);s.setUint8(c,3),c+=1,s.setUint32(c,n,!0),s.setUint32(c+4,r,!0),s.setUint32(c+8,i,!0),c+=12}let l=new Uint8Array(a.length+o.byteLength);return l.set(a,0),l.set(new Uint8Array(o),a.length),l.buffer}function lw(e,t,n=`importMesh`){let r=new e.Mesh({numProp:3,vertProperties:t.vertProperties,triVerts:t.triVerts});return z(new e.Manifold(r),R(n,{},[]))}function uw(e,t){let n=new TextDecoder().decode(new Uint8Array(t)),r=[],i=[];for(let e of n.split(`
|
|
12
|
+
`)){let t=e.trim();if(t.startsWith(`v `)){let e=t.slice(2).trim().split(/\s+/);r.push(Number(e[0]),Number(e[1]),Number(e[2]))}else if(t.startsWith(`f `)){let e=t.slice(2).trim().split(/\s+/).map(e=>{let t=e.split(`/`)[0]??``,n=Number(t);return n>0?n-1:r.length/3+n});for(let t=1;t+1<e.length;t++)i.push(e[0]??0,e[t]??0,e[t+1]??0)}}return lw(e,{vertProperties:Float32Array.from(r),triVerts:Uint32Array.from(i)})}function dw(e,t){let n=new Uint8Array(t),r=new TextDecoder().decode(n.subarray(0,Math.min(n.length,80))).trimStart().toLowerCase().startsWith(`solid`)&&mw(n),i=[];if(r){let e=new TextDecoder().decode(n).match(/vertex\s+(\S+)\s+(\S+)\s+(\S+)/g)??[];for(let t of e){let e=t.trim().split(/\s+/);i.push(Number(e[1]),Number(e[2]),Number(e[3]))}}else{let e=new DataView(t),n=e.getUint32(80,!0),r=84;for(let t=0;t<n;t++){r+=12;for(let t=0;t<3;t++)i.push(e.getFloat32(r,!0),e.getFloat32(r+4,!0),e.getFloat32(r+8,!0)),r+=12;r+=2}}let a=pw(i);return lw(e,{vertProperties:Float32Array.from(a.vertices),triVerts:Uint32Array.from(a.indices)})}var fw=1e6;function pw(e){let t=[],n=[],r=new Map;for(let i=0;i+2<e.length;i+=3){let a=e[i]??0,o=e[i+1]??0,s=e[i+2]??0,c=`${Math.round(a*fw)},${Math.round(o*fw)},${Math.round(s*fw)}`,l=r.get(c);l===void 0&&(l=t.length/3,r.set(c,l),t.push(a,o,s)),n.push(l)}return{vertices:t,indices:n}}function mw(e){return e.length<84?!0:84+new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(80,!0)*50!==e.length}var hw=1e-6;function gw(e,t){let n=V(t);if(n.replayable)return sC(n,e)}function _w(e,t){let n=ew(t),r=Math.floor(n.triVerts.length/3),i=[];for(let t=0;t<r;t++){let[r,a,o]=iw(n,t),s=e.buildTriFace(rw(n,r),rw(n,a),rw(n,o));s&&i.push(s)}if(i.length===0)throw Error(`manifold: cannot export — shape has no triangles to facet`);return e.sewAndSolidify(i,hw)}function vw(e){let t=Ky(`B-rep export`),n=gw(t,e);return n===void 0?(console.warn(`manifold: exact B-rep unavailable (non-replayable op-graph); exporting faceted approximation`),{occt:t,brep:_w(t,e)}):{occt:t,brep:n}}function yw(e,t,n,r){let i=t.mesh(n,{tolerance:.01,angularTolerance:.5});return lw(e,{vertProperties:Float32Array.from(i.vertices),triVerts:Uint32Array.from(i.triangles)},r)}var bw=1179937895,xw=2,Sw=1313821514,Cw=5130562,ww=5126,Tw=5125,Ew=5123,Dw=5121,Ow=34962,kw=34963,Aw=4;function jw(e){return e+3&-4}function Mw(e){let t=ew(e),n=t.numProp&&t.numProp>=3?t.numProp:3,r=Math.floor(t.vertProperties.length/n),i=t.triVerts.length,a=new Float32Array(r*3),o=1/0,s=1/0,c=1/0,l=-1/0,u=-1/0,d=-1/0;for(let e=0;e<r;e++){let r=t.vertProperties[e*n]??0,i=t.vertProperties[e*n+1]??0,f=t.vertProperties[e*n+2]??0;a[e*3]=r,a[e*3+1]=i,a[e*3+2]=f,r<o&&(o=r),i<s&&(s=i),f<c&&(c=f),r>l&&(l=r),i>u&&(u=i),f>d&&(d=f)}r===0&&(o=s=c=l=u=d=0);let f=Uint32Array.from(t.triVerts),p=a.byteLength,m=jw(p),h=m+f.byteLength,g={asset:{version:`2.0`,generator:`brepjs manifold kernel`},scene:0,scenes:[{nodes:[0]}],nodes:[{mesh:0}],meshes:[{primitives:[{attributes:{POSITION:0},indices:1,mode:Aw}]}],accessors:[{bufferView:0,componentType:ww,count:r,type:`VEC3`,min:[o,s,c],max:[l,u,d]},{bufferView:1,componentType:Tw,count:i,type:`SCALAR`}],bufferViews:[{buffer:0,byteOffset:0,byteLength:p,target:Ow},{buffer:0,byteOffset:m,byteLength:f.byteLength,target:kw}],buffers:[{byteLength:h}]},_=new TextEncoder().encode(JSON.stringify(g)),v=jw(_.length),y=jw(h),b=20+v+8+y,x=new ArrayBuffer(b),S=new DataView(x),C=new Uint8Array(x);S.setUint32(0,bw,!0),S.setUint32(4,xw,!0),S.setUint32(8,b,!0);let w=12;S.setUint32(w,v,!0),S.setUint32(w+4,Sw,!0),w+=8,C.set(_,w);for(let e=_.length;e<v;e++)C[w+e]=32;return w+=v,S.setUint32(w,y,!0),S.setUint32(w+4,Cw,!0),w+=8,C.set(new Uint8Array(a.buffer,a.byteOffset,p),w),C.set(new Uint8Array(f.buffer,f.byteOffset,f.byteLength),w+m),x}function Nw(e,t){let n=new DataView(t);if(n.getUint32(0,!0)!==bw)throw Error(`manifold: importGLB — not a binary glTF (bad magic)`);let r=n.getUint32(8,!0),i,a,o=12;for(;o<r;){let e=n.getUint32(o,!0),r=n.getUint32(o+4,!0),s=new Uint8Array(t,o+8,e);r===Sw?i=JSON.parse(new TextDecoder().decode(s)):r===Cw&&(a=s),o+=8+e}if(!i||typeof i!=`object`||!a)throw Error(`manifold: importGLB — missing JSON or BIN chunk`);let s=i,c=s.meshes?.[0]?.primitives[0],l=s.accessors??[],u=s.bufferViews??[];if(!c||c.attributes.POSITION===void 0)throw Error(`manifold: importGLB — no POSITION attribute`);let d=l[c.attributes.POSITION];if(!d)throw Error(`manifold: importGLB — invalid POSITION accessor`);let f=u[d.bufferView];if(!f)throw Error(`manifold: importGLB — invalid POSITION bufferView`);let p=new Float32Array(a.buffer.slice(a.byteOffset+(f.byteOffset??0),a.byteOffset+(f.byteOffset??0)+d.count*3*4)),m;if(c.indices!==void 0){let e=l[c.indices];if(!e)throw Error(`manifold: importGLB — invalid indices accessor`);let t=u[e.bufferView];if(!t)throw Error(`manifold: importGLB — invalid indices bufferView`);let n=e.componentType===Tw?4:e.componentType===Ew?2:+(e.componentType===Dw);if(n===0)throw Error(`manifold: importGLB — unsupported index component type ${e.componentType}`);let r=a.byteOffset+(t.byteOffset??0),i=new DataView(a.buffer,r,e.count*n);m=new Uint32Array(e.count);for(let t=0;t<e.count;t++){let e=t*n;m[t]=n===4?i.getUint32(e,!0):n===2?i.getUint16(e,!0):i.getUint8(e)}}else m=Uint32Array.from({length:d.count},(e,t)=>t);return lw(e,{vertProperties:p,triVerts:m},`importGLB`)}function Pw(e){return{exportSTL:(e,t)=>ow(e,t),exportOBJ:e=>sw(e),exportPLY:e=>cw(e),importSTL:t=>dw(e,typeof t==`string`?new TextEncoder().encode(t).buffer:t),importOBJ:t=>uw(e,t),exportSTEP:e=>Ky(`exportSTEP`).exportSTEP(e.map(e=>vw(e).brep)),exportIGES:e=>Ky(`exportIGES`).exportIGES(e.map(e=>vw(e).brep)),toBREP:e=>{let{occt:t,brep:n}=vw(e);return t.toBREP(n)},exportSTEPAssembly:(e,t)=>{let n=Ky(`exportSTEPAssembly`),r=e.map(e=>{let t={shape:vw(e.shape).brep,name:e.name};return e.color===void 0?t:{...t,color:e.color}});return n.exportSTEPAssembly(r,t)},createXCAFDocument:e=>{let t=Ky(`createXCAFDocument`),n=e.map(e=>{let t={shape:vw(e.shape).brep,name:e.name};return e.color===void 0?t:{...t,color:e.color}});return t.createXCAFDocument(n)},writeXCAFToSTEP:(e,t)=>Ky(`writeXCAFToSTEP`).writeXCAFToSTEP(e,t),exportSTEPConfigured:(e,t)=>{let n=Ky(`exportSTEPConfigured`),r=e.map(e=>{let t={shape:vw(e.shape).brep},n=e.name===void 0?t:{...t,name:e.name};return e.color===void 0?n:{...n,color:e.color}});return n.exportSTEPConfigured(r,t)},importSTEP:t=>{let n=Ky(`importSTEP`);return n.importSTEP(t).map(t=>yw(e,n,t,`importSTEP`))},importIGES:t=>{let n=Ky(`importIGES`);return n.importIGES(t).map(t=>yw(e,n,t,`importIGES`))},fromBREP:t=>{let n=Ky(`fromBREP`);return yw(e,n,n.fromBREP(t),`fromBREP`)},exportGLB:e=>Mw(e),importGLB:t=>Nw(e,t),export3MF:()=>{throw Error(`manifold: 3MF IO is unsupported on the mesh kernel; export GLB/STL/OBJ or use a B-rep kernel`)},import3MF:()=>{throw Error(`manifold: 3MF IO is unsupported on the mesh kernel; export GLB/STL/OBJ or use a B-rep kernel`)}}}function Fw(e){return B(e).getMesh()}function Iw(e,t){let n=t*(e.numProp&&e.numProp>=3?e.numProp:3);return[e.vertProperties[n]??0,e.vertProperties[n+1]??0,e.vertProperties[n+2]??0]}function Lw(e,t){let n=e;if(n&&n.__manifoldSub&&n.occt){let e=Gy();if(!e)throw new c(`manifold: sub-shape geometry query requires a registered occt kernel`);return t(n.occt,e)}let r=Uy(e);if(!r)throw Error(`manifold: exact geometry query requires a manifold shape handle`);let i=Gy();if(!i)throw new c(`manifold: exact geometry query unsupported on manifold kernel; no B-rep kernel registered`);if(!r.node.replayable)throw Error(`manifold: exact geometry query unsupported; shape originates from a non-replayable op (raw mesh import or mesh boolean)`);let a=qy.get(r.node);return a===void 0&&(a=sC(r.node,i),qy.set(r.node,a)),t(a,i)}function Rw(e){let t=Uy(e);if(!t)return;let n=t.node;return n.op===`profileEdge`?n.params?.curve:void 0}function zw(e){return{curveType:e=>{let t=Rw(e);return t?Nb(t):HC(e)?e.curveType:Lw(e,(e,t)=>t.curveType(e))},curveParameters:e=>{let t=Rw(e);if(t){let e=Pb(t);return[e.first,e.last]}return HC(e)?[0,e.length]:Lw(e,(e,t)=>t.curveParameters(e))},curvePointAtParam:(e,t)=>{let n=Rw(e);return n?Fb(n,t):HC(e)?UC(e,t):Lw(e,(e,n)=>n.curvePointAtParam(e,t))},curveTangent:(e,t)=>{let n=Rw(e);return n?{point:Fb(n,t),tangent:Ib(n,t)}:HC(e)?{point:UC(e,t),tangent:WC(e,t)}:Lw(e,(e,n)=>n.curveTangent(e,t))},curveIsClosed:e=>{let t=Rw(e);return t?Rb(t):Lw(e,(e,t)=>t.curveIsClosed(e))},curveIsPeriodic:e=>{let t=Rw(e);return t?zb(t):Lw(e,(e,t)=>t.curveIsPeriodic(e))},curvePeriod:e=>{let t=Rw(e);return t?Bb(t):Lw(e,(e,t)=>t.curvePeriod(e))},interpolatePoints:(e,t)=>Ky(`interpolatePoints`).interpolatePoints(e,t),approximatePoints:(e,t)=>Ky(`approximatePoints`).approximatePoints(e,t),curveDegreeElevate:(e,t)=>Lw(e,(e,n)=>n.curveDegreeElevate(e,t)),curveKnotInsert:(e,t,n)=>Lw(e,(e,r)=>r.curveKnotInsert(e,t,n)),curveKnotRemove:(e,t,n)=>Lw(e,(e,r)=>r.curveKnotRemove(e,t,n)),curveSplit:(e,t)=>Lw(e,(e,n)=>n.curveSplit(e,t)),createCurveAdaptor:e=>Lw(e,(e,t)=>t.createCurveAdaptor(e)),getBezierPenultimatePole:e=>Lw(e,(e,t)=>t.getBezierPenultimatePole(e)),getNurbsCurveData:e=>Lw(e,(e,t)=>t.getNurbsCurveData?.(e)??null),vertexPosition:e=>VC(e)?e.point:Uy(e)?Iw(Fw(e),0):Lw(e,(e,t)=>t.vertexPosition(e)),surfaceType:e=>{if(MC(e))return`plane`;let t=Uy(e);return t&&t.node.op===`profileFace`?`plane`:Lw(e,(e,t)=>t.surfaceType(e))},uvBounds:e=>MC(e)?{uMin:0,uMax:1,vMin:0,vMax:1}:Lw(e,(e,t)=>t.uvBounds(e)),outerWire:e=>Lw(e,(e,t)=>t.outerWire(e)),surfaceNormal:(e,t,n)=>MC(e)?e.normal:Lw(e,(e,r)=>r.surfaceNormal(e,t,n)),pointOnSurface:(e,t,n)=>Lw(e,(e,r)=>r.pointOnSurface(e,t,n)),uvFromPoint:(e,t)=>Lw(e,(e,n)=>n.uvFromPoint(e,t)),projectPointOnFace:(e,t)=>Lw(e,(e,n)=>n.projectPointOnFace(e,t)),classifyPointOnFace:(e,t,n,r)=>Lw(e,(e,i)=>i.classifyPointOnFace(e,t,n,r)),classifyPointRobust:(e,t,n)=>Lw(e,(e,r)=>r.classifyPointRobust(e,t,n)),classifyPointWinding:(e,t,n)=>Lw(e,(e,r)=>r.classifyPointWinding(e,t,n)),approximateSurfaceLspia:(e,t,n,r,i,a,o,s,c)=>Ky(`approximateSurfaceLspia`).approximateSurfaceLspia(e,t,n,r,i,a,o,s,c),untrimFace:(e,t,n)=>Lw(e,(e,r)=>r.untrimFace(e,t,n)),getSurfaceCylinderData:e=>Lw(e,(e,t)=>t.getSurfaceCylinderData(e)),getSurfaceAxis:e=>Lw(e,(e,t)=>t.getSurfaceAxis(e)),reverseSurfaceU:e=>Ky(`reverseSurfaceU`).reverseSurfaceU(e),detectSmallFeatures:(e,t,n)=>Lw(e,(e,r)=>r.detectSmallFeatures(e,t,n)),recognizeFeatures:(e,t)=>Lw(e,(e,n)=>n.recognizeFeatures(e,t)),projectEdges:(e,t,n,r)=>Lw(e,(e,i)=>i.projectEdges(e,t,n,r)),getNurbsSurfaceData:e=>Lw(e,(e,t)=>t.getNurbsSurfaceData?.(e)??null)}}var Bw={hasErrors:!1,hasWarnings:!1,messages:[]};function Vw(){return{modified:new Map,generated:new Map,deleted:new Set}}function Hw(e){return{shape:e,evolution:Vw()}}function Uw(e){return{shape:e,evolution:Vw(),diagnostics:Bw}}function Ww(e){let t=Eb(e),n=ib(e),r=jS(e);return{translateWithHistory:(e,n,r,i)=>Hw(t.translate(e,n,r,i)),rotateWithHistory:(e,n,r,i,a,o)=>Hw(t.rotate(e,n,a,o)),mirrorWithHistory:(e,n,r)=>Hw(t.mirror(e,n,r)),scaleWithHistory:(e,n,r)=>Hw(t.scale(e,n,r)),generalTransformWithHistory:(e,n,r,i)=>Hw(t.generalTransform(e,n,r,i)),fuseWithHistory:(e,t,r,i,a)=>Uw(n.fuse(e,t,a)),cutWithHistory:(e,t,r,i,a)=>Uw(n.cut(e,t,a)),intersectWithHistory:(e,t,r,i,a)=>Uw(n.intersect(e,t,a)),filletWithHistory:(e,t,n)=>Hw(r.fillet(e,t,n)),chamferWithHistory:(e,t,n)=>Hw(r.chamfer(e,t,n)),shellWithHistory:(e,t,n,i,a,o)=>Hw(r.shell(e,t,n,o)),thickenWithHistory:(e,t)=>Hw(r.thicken(e,t)),offsetWithHistory:(e,t,n,i,a)=>Hw(r.offset(e,t,a)),draftWithHistory:(e,t,n,i,a)=>Hw(r.draft(e,t,n,i,a)),applyComposedTransformWithHistory:(e,n)=>Hw(t.transform(e,n))}}function Gw(e){let t=e?.manifold;if(!t||typeof t.isEmpty==`function`&&t.isEmpty())return!1;if(typeof t.status==`function`){let e=t.status(),n=typeof e==`number`?e:Number(e?.value??e);if(!Number.isNaN(n)&&n!==0)return!1}return!0}function Kw(e){return{isValid:e=>Gw(e),isValidStrict:e=>Gw(e),healSolid:e=>Gw(e)?e:null,healFace:e=>e,healWire:e=>e,mergeCoincidentVertices:()=>0,removeDegenerateEdges:()=>0,fixFaceOrientations:()=>0,fixShape:e=>e,fixSelfIntersection:e=>e}}var qw=.004;function Jw(e){return!!e&&typeof e==`object`&&e.__nativeC2d===!0}function Yw(e,t){return{__nativeC2d:!0,k:`line`,p1:e,p2:t}}function Xw(e,t,n,r,i){return{__nativeC2d:!0,k:`conic`,c:e,u:t,v:n,a0:r,a1:i}}function Zw(e,[t,n]){return[e.a*t+e.b*n+e.tx,e.c*t+e.d*n+e.ty]}function Qw(e,[t,n]){return[e.a*t+e.b*n,e.c*t+e.d*n]}function $w(e,t){return{a:e.a*t.a+e.b*t.c,b:e.a*t.b+e.b*t.d,c:e.c*t.a+e.d*t.c,d:e.c*t.b+e.d*t.d,tx:e.a*t.tx+e.b*t.ty+e.tx,ty:e.c*t.tx+e.d*t.ty+e.ty}}function eT(e,t){return e.k===`line`?Yw(Zw(t,e.p1),Zw(t,e.p2)):e.k===`bezier`?{__nativeC2d:!0,k:`bezier`,pts:e.pts.map(e=>Zw(t,e))}:Xw(Zw(t,e.c),Qw(t,e.u),Qw(t,e.v),e.a0,e.a1)}function tT(e,t){let n=e.map(e=>[e[0],e[1]]);for(let e=1;e<n.length;e++)for(let r=0;r<n.length-e;r++){let e=n[r]??[0,0],i=n[r+1]??[0,0];n[r]=[e[0]*(1-t)+i[0]*t,e[1]*(1-t)+i[1]*t]}return n[0]??[0,0]}function nT(e,t){let n=Math.cos(t),r=Math.sin(t);return[e.c[0]+e.u[0]*n+e.v[0]*r,e.c[1]+e.u[1]*n+e.v[1]*r]}function rT(e,t){let n=e.length-1;if(n<1)return[0,0];let r=[];for(let t=0;t<n;t++){let i=e[t]??[0,0],a=e[t+1]??[0,0];r.push([n*(a[0]-i[0]),n*(a[1]-i[1])])}return tT(r,t)}function iT(e){let t=Math.abs(e.a1-e.a0),n=Math.hypot(e.u[0],e.u[1]),r=Math.hypot(e.v[0],e.v[1]),i=Math.max(n,r);if(i<=qw)return Math.max(2,Math.ceil(t/(2*Math.PI)*8));let a=2*Math.acos(Math.max(-1,1-qw/i));return Math.max(2,Math.ceil(t/a))}function aT(e){if(e.k===`line`)return[e.p1,e.p2];if(e.k===`bezier`){let t=[];for(let n=0;n<=24;n++)t.push(tT(e.pts,n/24));return t}let t=e.a1-e.a0,n=iT(e),r=[];for(let i=0;i<=n;i++){let a=e.a0+t*i/n,o=Math.cos(a),s=Math.sin(a);r.push([e.c[0]+e.u[0]*o+e.v[0]*s,e.c[1]+e.u[1]*o+e.v[1]*s])}return r}function oT(e,t,n){let r=e[0],i=e[1],a=t[0],o=t[1],s=n[0],c=n[1],l=2*(r*(o-c)+a*(c-i)+s*(i-o));if(Math.abs(l)<1e-12)return Yw(e,n);let u=((r*r+i*i)*(o-c)+(a*a+o*o)*(c-i)+(s*s+c*c)*(i-o))/l,d=((r*r+i*i)*(s-a)+(a*a+o*o)*(r-s)+(s*s+c*c)*(a-r))/l,f=[u,d],p=Math.hypot(r-u,i-d),m=e=>Math.atan2(e[1]-d,e[0]-u),h=m(e),g=m(t),_=m(n),v=e=>(e%(2*Math.PI)+2*Math.PI)%(2*Math.PI),y=v(g-h),b=v(_-h);return _=y<=b?h+b:h-v(h-_),Xw(f,[p,0],[0,p],h,_)}function sT(e,t){let n={delete:()=>{},isEmpty:()=>!1};function r(e,...n){let r=t(),i=r?.[e];if(!i)throw Error(`manifold 2D: ${e} needs an OCCT kernel (none registered)`);return i.call(r,...n)}let i=e=>e;function a(e){let n=t();if(!n)throw Error(`manifold 2D: ${e} needs an OCCT kernel (none registered)`);return n}function o(e){if(!Jw(e))return e;let t=a(`toOcct`),n=i(e);if(n.k===`line`)return t.makeLine2d(n.p1[0],n.p1[1],n.p2[0],n.p2[1]);if(n.k===`bezier`)return t.makeBezier2d(n.pts);let r=Math.hypot(n.u[0],n.u[1]),o=Math.hypot(n.v[0],n.v[1]),s=Math.abs(Math.abs(n.a1-n.a0)-2*Math.PI)<1e-9,c=n.u[0]*n.v[1]-n.u[1]*n.v[0]>=0;if(Math.abs(r-o)<1e-9*Math.max(1,r)){if(s)return t.makeCircle2d(n.c[0],n.c[1],r,c);let e=nT(n,n.a0),i=nT(n,(n.a0+n.a1)/2),a=nT(n,n.a1);return t.makeArc2dThreePoints(e[0],e[1],i[0],i[1],a[0],a[1])}let l=n.u[0]*n.v[0]+n.u[1]*n.v[1];if(Math.abs(l)<1e-9*Math.max(1,r*o)){let e=n.u[0]/r,i=n.u[1]/r;return s?t.makeEllipse2d(n.c[0],n.c[1],r,o,e,i,c):t.makeEllipseArc2d(n.c[0],n.c[1],r,o,n.a0,n.a1,e,i,c)}return t.makeBSpline2d(aT(n).map(e=>[e[0],e[1]]))}let s={createPoint2d:(e,t)=>({x:e,y:t}),createDirection2d:(e,t)=>({x:e,y:t}),createVector2d:(e,t)=>({x:e,y:t}),createAxis2d:(e,t,n,r)=>({px:e,py:t,dx:n,dy:r}),wrapCurve2dHandle:e=>e,createCurve2dAdaptor:e=>e,makeLine2d:(e,t,n,r)=>Yw([e,t],[n,r]),makeCircle2d:(e,t,n,r=!0)=>Xw([e,t],[n,0],r?[0,n]:[0,-n],0,2*Math.PI),makeArc2dThreePoints:(e,t,n,r,i,a)=>oT([e,t],[n,r],[i,a]),makeArc2dTangent:(e,t,n,r,i,a)=>{let o=Math.hypot(n,r)||1,s=-r/o,c=n/o,l=[i-e,a-t],u=s*l[0]+c*l[1];if(Math.abs(u)<1e-12)return Yw([e,t],[i,a]);let d=(l[0]*l[0]+l[1]*l[1])/(2*u),f=e+s*d,p=t+c*d,m=Math.hypot(e-f,t-p),h=Math.atan2(t-p,e-f),g=Math.atan2(a-p,i-f);s*n+c*r;let _=e=>(e%(2*Math.PI)+2*Math.PI)%(2*Math.PI),v=[-(t-p),e-f];return g=v[0]*n+v[1]*r>=0?h+_(g-h):h-_(h-g),Xw([f,p],[m,0],[0,m],h,g)},makeEllipse2d:(e,t,n,r,i=1,a=0,o=!0)=>{let s=Math.hypot(i,a)||1,c=i/s*n,l=a/s*n,u=-a/s*r*(o?1:-1),d=i/s*r*(o?1:-1);return Xw([e,t],[c,l],[u,d],0,2*Math.PI)},makeEllipseArc2d:(e,t,n,r,i,a,o=1,s=0,c=!0)=>{let l=Math.hypot(o,s)||1,u=o/l*n,d=s/l*n,f=-s/l*r*(c?1:-1),p=o/l*r*(c?1:-1);return Xw([e,t],[u,d],[f,p],i,a)},makeBezier2d:e=>({__nativeC2d:!0,k:`bezier`,pts:e.map(e=>[e[0],e[1]])}),evaluateCurve2d:(e,t)=>{let n=i(e);if(n.k===`line`){let e=n.p2[0]-n.p1[0],r=n.p2[1]-n.p1[1],i=Math.hypot(e,r)||1;return[n.p1[0]+e*t/i,n.p1[1]+r*t/i]}return n.k===`bezier`?tT(n.pts,t):[n.c[0]+n.u[0]*Math.cos(t)+n.v[0]*Math.sin(t),n.c[1]+n.u[1]*Math.cos(t)+n.v[1]*Math.sin(t)]},evaluateCurve2dD1:(e,t)=>{let n=i(e);if(n.k===`line`){let e=n.p2[0]-n.p1[0],r=n.p2[1]-n.p1[1],i=Math.hypot(e,r)||1;return{point:[n.p1[0]+e*t/i,n.p1[1]+r*t/i],tangent:[e/i,r/i]}}if(n.k===`bezier`)return{point:tT(n.pts,t),tangent:rT(n.pts,t)};let r=Math.cos(t),a=Math.sin(t);return{point:[n.c[0]+n.u[0]*r+n.v[0]*a,n.c[1]+n.u[1]*r+n.v[1]*a],tangent:[-n.u[0]*a+n.v[0]*r,-n.u[1]*a+n.v[1]*r]}},getCurve2dBounds:e=>{let t=i(e);return t.k===`conic`?{first:t.a0,last:t.a1}:t.k===`line`?{first:0,last:Math.hypot(t.p2[0]-t.p1[0],t.p2[1]-t.p1[1])}:{first:0,last:1}},getCurve2dType:e=>{let t=i(e);return t.k===`line`?`LINE`:t.k===`bezier`?`BEZIER`:`CIRCLE`},reverseCurve2d:e=>{let t=i(e);if(t.k===`line`){let e=t.p1;t.p1=t.p2,t.p2=e}else if(t.k===`bezier`)t.pts.reverse();else{let e=t.a0;t.a0=t.a1,t.a1=e}},copyCurve2d:e=>structuredClone(i(e)),trimCurve2d:(e,t,n)=>{let r=i(e);if(r.k===`conic`)return Xw(r.c,r.u,r.v,t,n);if(r.k===`line`){let e=r.p2[0]-r.p1[0],i=r.p2[1]-r.p1[1],a=Math.hypot(e,i)||1;return Yw([r.p1[0]+e*t/a,r.p1[1]+i*t/a],[r.p1[0]+e*n/a,r.p1[1]+i*n/a])}return structuredClone(r)},createIdentityGTrsf2d:()=>({a:1,b:0,c:0,d:1,tx:0,ty:0}),createTranslationGTrsf2d:(e,t)=>({a:1,b:0,c:0,d:1,tx:e,ty:t}),createRotationGTrsf2d:(e,t,n)=>{let r=Math.cos(e),i=Math.sin(e);return{a:r,b:-i,c:i,d:r,tx:t-(r*t-i*n),ty:n-(i*t+r*n)}},createScaleGTrsf2d:(e,t,n)=>({a:e,b:0,c:0,d:e,tx:t-e*t,ty:n-e*n}),createMirrorGTrsf2d:(e,t,n,r=0,i=0,a=1,o=0)=>{if(n===`point`)return{a:-1,b:0,c:0,d:-1,tx:2*e,ty:2*t};let s=Math.hypot(a,o)||1,c=a/s,l=o/s,u=c*c-l*l,d=2*c*l;return{a:u,b:d,c:d,d:-u,tx:r-(u*r+d*i),ty:i-(d*r-u*i)}},createAffinityGTrsf2d:(e,t,n,r,i)=>{let a=Math.hypot(n,r)||1,o=n/a,s=r/a,c=-s,l=o,u=o*o+i*c*c,d=o*s+i*c*l,f=s*o+i*l*c,p=s*s+i*l*l;return{a:u,b:d,c:f,d:p,tx:e-(u*e+d*t),ty:t-(f*e+p*t)}},setGTrsf2dTranslationPart:(e,t,n)=>{let r=e;r.tx=t,r.ty=n},multiplyGTrsf2d:(e,t)=>{let n=$w(e,t);Object.assign(e,n)},transformCurve2dGeneral:(e,t)=>eT(i(e),t),translateCurve2d:(e,t,n)=>eT(i(e),{a:1,b:0,c:0,d:1,tx:t,ty:n}),rotateCurve2d:(e,t,n,r)=>{let a=Math.cos(t),o=Math.sin(t);return eT(i(e),{a,b:-o,c:o,d:a,tx:n-(a*n-o*r),ty:r-(o*n+a*r)})},scaleCurve2d:(e,t,n,r)=>eT(i(e),{a:t,b:0,c:0,d:t,tx:n-t*n,ty:r-t*r}),mirrorCurve2dAtPoint:(e,t,n)=>eT(i(e),{a:-1,b:0,c:0,d:-1,tx:2*t,ty:2*n}),mirrorCurve2dAcrossAxis:(e,t,n,r,a)=>{let o=Math.hypot(r,a)||1,s=r/o,c=a/o,l=s*s-c*c,u=2*s*c;return eT(i(e),{a:l,b:u,c:u,d:-l,tx:t-(l*t+u*n),ty:n-(u*t-l*n)})},affinityTransform2d:(e,t,n,r,a,o)=>{let s=Math.hypot(r,a)||1,c=r/s,l=a/s,u=-l,d=c,f=c*c+o*u*u,p=c*l+o*u*d,m=l*c+o*d*u,h=l*l+o*d*d;return eT(i(e),{a:f,b:p,c:m,d:h,tx:t-(f*t+p*n),ty:n-(m*t+h*n)})},createBoundingBox2d:()=>({min:[1/0,1/0],max:[-1/0,-1/0]}),addCurveToBBox2d:(e,t)=>{let n=e,r;if(Jw(t))r=aT(i(t));else{let e=a(`addCurveToBBox2d`),{first:n,last:i}=e.getCurve2dBounds(t);r=[];for(let a=0;a<=32;a++)r.push(e.evaluateCurve2d(t,n+(i-n)*a/32))}for(let[e,t]of r)e<n.min[0]&&(n.min[0]=e),t<n.min[1]&&(n.min[1]=t),e>n.max[0]&&(n.max[0]=e),t>n.max[1]&&(n.max[1]=t)},getBBox2dBounds:e=>{let t=e;return{xMin:t.min[0],yMin:t.min[1],xMax:t.max[0],yMax:t.max[1]}},mergeBBox2d:(e,t)=>{let n=e,r=t;n.min[0]=Math.min(n.min[0],r.min[0]),n.min[1]=Math.min(n.min[1],r.min[1]),n.max[0]=Math.max(n.max[0],r.max[0]),n.max[1]=Math.max(n.max[1],r.max[1])},isBBox2dOut:(e,t)=>{let n=e,r=t;return n.max[0]<r.min[0]||n.min[0]>r.max[0]||n.max[1]<r.min[1]||n.min[1]>r.max[1]},isBBox2dOutPoint:(e,t,n)=>{let r=e;return t<r.min[0]||t>r.max[0]||n<r.min[1]||n>r.max[1]},getCurve2dCircleData:e=>{let t=i(e);if(t.k!==`conic`)return null;let n=Math.hypot(t.u[0],t.u[1]),r=Math.hypot(t.v[0],t.v[1]);return Math.abs(n-r)>1e-6?null:{cx:t.c[0],cy:t.c[1],radius:n,isDirect:!0}},liftCurve2dToPlane:(e,t,r,a)=>{let o=r[0],s=r[1],c=r[2],l=a[0],u=a[1],d=a[2],f=s*d-c*u,p=c*l-o*d,m=o*u-s*l,h=aT(i(e)).map(([e,n])=>[t[0]+l*e+f*n,t[1]+u*e+p*n,t[2]+d*e+m*n]);return z(n,R(`profileEdge`,{pts:h},[]))},makeBSpline2d:(e,t)=>a(`makeBSpline2d`).makeBSpline2d(e,t),offsetCurve2d:(e,t)=>a(`offsetCurve2d`).offsetCurve2d(o(e),t),intersectCurves2d:(e,t,n)=>a(`intersectCurves2d`).intersectCurves2d(o(e),o(t),n),projectPointOnCurve2d:(e,t,n)=>a(`projectPointOnCurve2d`).projectPointOnCurve2d(o(e),t,n),distanceBetweenCurves2d:(e,t,n,r,i,s)=>a(`distanceBetweenCurves2d`).distanceBetweenCurves2d(o(e),o(t),n,r,i,s),approximateCurve2dAsBSpline:(e,t,n,r)=>a(`approximateCurve2dAsBSpline`).approximateCurve2dAsBSpline(o(e),t,n,r),decomposeBSpline2dToBeziers:e=>a(`decomposeBSpline2dToBeziers`).decomposeBSpline2dToBeziers(o(e)),serializeCurve2d:e=>a(`serializeCurve2d`).serializeCurve2d(o(e)),deserializeCurve2d:e=>a(`deserializeCurve2d`).deserializeCurve2d(e),splitCurve2d:(e,t)=>a(`splitCurve2d`).splitCurve2d(o(e),t),getCurve2dEllipseData:e=>a(`getCurve2dEllipseData`).getCurve2dEllipseData(o(e)),getCurve2dBezierPoles:e=>a(`getCurve2dBezierPoles`).getCurve2dBezierPoles(o(e)),getCurve2dBezierDegree:e=>a(`getCurve2dBezierDegree`).getCurve2dBezierDegree(o(e)),getCurve2dBSplineData:e=>a(`getCurve2dBSplineData`).getCurve2dBSplineData(o(e)),buildEdgeOnSurface:(e,t)=>a(`buildEdgeOnSurface`).buildEdgeOnSurface(o(e),t),extractSurfaceFromFace:e=>a(`extractSurfaceFromFace`).extractSurfaceFromFace(e),extractCurve2dFromEdge:(e,t)=>a(`extractCurve2dFromEdge`).extractCurve2dFromEdge(e,t),buildCurves3d:e=>{a(`buildCurves3d`).buildCurves3d(e)},fixWireOnFace:(e,t,n)=>a(`fixWireOnFace`).fixWireOnFace(e,t,n),fillSurface:(e,t)=>a(`fillSurface`).fillSurface(e,t)};for(let e of[`evaluateCurve2d`,`evaluateCurve2dD1`,`getCurve2dBounds`,`getCurve2dType`,`reverseCurve2d`,`copyCurve2d`,`trimCurve2d`,`transformCurve2dGeneral`,`translateCurve2d`,`rotateCurve2d`,`scaleCurve2d`,`mirrorCurve2dAtPoint`,`mirrorCurve2dAcrossAxis`,`affinityTransform2d`,`getCurve2dCircleData`,`liftCurve2dToPlane`]){let t=s[e];t&&(s[e]=((n,...i)=>Jw(n)?t(n,...i):r(e,n,...i)))}return s}var cT=`createPoint2d.createDirection2d.createVector2d.createAxis2d.wrapCurve2dHandle.createCurve2dAdaptor.makeLine2d.makeCircle2d.makeArc2dThreePoints.makeArc2dTangent.makeEllipse2d.makeEllipseArc2d.makeBezier2d.makeBSpline2d.evaluateCurve2d.evaluateCurve2dD1.getCurve2dBounds.getCurve2dType.trimCurve2d.reverseCurve2d.copyCurve2d.offsetCurve2d.translateCurve2d.rotateCurve2d.scaleCurve2d.mirrorCurve2dAtPoint.mirrorCurve2dAcrossAxis.affinityTransform2d.createIdentityGTrsf2d.createAffinityGTrsf2d.createTranslationGTrsf2d.createMirrorGTrsf2d.createRotationGTrsf2d.createScaleGTrsf2d.setGTrsf2dTranslationPart.multiplyGTrsf2d.transformCurve2dGeneral.intersectCurves2d.projectPointOnCurve2d.distanceBetweenCurves2d.approximateCurve2dAsBSpline.decomposeBSpline2dToBeziers.createBoundingBox2d.addCurveToBBox2d.getBBox2dBounds.mergeBBox2d.isBBox2dOut.isBBox2dOutPoint.getCurve2dCircleData.getCurve2dEllipseData.getCurve2dBezierPoles.getCurve2dBezierDegree.getCurve2dBSplineData.serializeCurve2d.deserializeCurve2d.splitCurve2d.liftCurve2dToPlane.buildEdgeOnSurface.extractSurfaceFromFace.extractCurve2dFromEdge.buildCurves3d.fixWireOnFace.fillSurface`.split(`.`);function lT(e){let t=Gy();if(!t)throw Error(`manifold: ${e} unsupported on manifold kernel; no B-rep kernel registered`);return t}function uT(e){let t={};for(let e of cT)t[e]=(...t)=>lT(e)[e](...t);let n=sT(e,()=>Gy());return Object.assign(t,n),t}function dT(e){return{sketchNew:()=>zy(`sketchNew`),sketchAddPoint:()=>zy(`sketchAddPoint`),sketchAddArc:()=>zy(`sketchAddArc`),sketchAddConstraint:()=>zy(`sketchAddConstraint`),sketchSolve:()=>zy(`sketchSolve`),sketchDof:()=>zy(`sketchDof`)}}function fT(e){return{projectEdges:()=>zy(`projectEdges`)}}function pT(e){return{dispose(e){let t=Uy(e);if(t){let e=qy.get(t.node);e!==void 0&&(Gy()?.dispose(e),qy.delete(t.node))}(e?.manifold)?.delete?.()},executeBatch:()=>zy(`executeBatch`),checkpoint:()=>zy(`checkpoint`),checkpointCount:()=>0,restoreCheckpoint:()=>zy(`restoreCheckpoint`),discardCheckpoint:()=>zy(`discardCheckpoint`)}}var mT={draft:30,standard:10,fine:3},hT=class{oc;kernelId=`manifold`;capabilities={exact:!1,brepExport:!1,exactMeasurement:!1,tessellationModel:`build-time`};setQuality(e){let t=this.oc;t.setCircularSegments?.(0),t.setMinCircularEdgeLength?.(0),t.setMinCircularAngle?.(mT[e])}constructor(e){this.oc=e,Object.assign(this,$y(e),ib(e),Eb(e),Nx(e),aS(e),jS(e),zS(e),kC(e),$C(e),Pw(e),zw(e),Ww(e),Kw(e),uT(e),dT(e),fT(e),pT(e))}};function gT(e){return import(e)}function _T(e){return`projectEdges`in e}function vT(e){return`sketchNew`in e&&`sketchDof`in e}var yT=new Map,bT=null,xT=null;function ST(e){CT(`manifold`,new hT(e))}function CT(e,t){yT.set(e,t),bT||=e,e===bT&&(xT=t)}function H(e){if(!e&&xT)return xT;let t=e??bT;if(!t)throw Error(`brepjs kernel not initialized. Call initFromOC() or registerKernel() before using the library.`);let n=yT.get(t);if(!n)throw Error(`brepjs: kernel '${t}' is not registered.`);return n}function wT(e){let t=H(e);if(!Io(t))throw Error(`brepjs: current kernel does not support 2D operations.`);return t}function TT(){return bT}function ET(e,t){let n=bT;bT=e,xT=yT.get(e)??null;try{let e=t();if(e instanceof Promise)throw Error(`withKernel() callback returned a Promise. Async code must use getKernel(id) directly — the kernel override is restored synchronously in finally.`);return e}finally{bT=n,xT=n?yT.get(n)??null:null}}function DT(e){return H(e).capabilities}function OT(e,t){let n=No();try{Fo(e),H().setQuality?.(e);let n=t();if(n instanceof Promise)throw Error(`withQuality() callback returned a Promise. Async code must read currentQuality()/getKernel() directly.`);return n}finally{Fo(n),H().setQuality?.(n)}}var kT=new Map;function AT(e,t){kT.set(e,t)}function jT(e){return kT.get(e)}function MT(e,t){let n=kT.get(e);if(!n)throw Error(`withTier: no tier registered for "${e}". Call registerKernelTier("${e}", { kernel, quality }) first.`);return ET(n.kernel,()=>OT(n.quality,t))}function NT(e){Qo(),fl(),Go(),Hc(),Uc(),il(),al();let t=new Jf(e);CT(`occt`,t),bT=`occt`,xT=t}function PT(){let e=H(),t=e.makeBox(1,1,1);try{e.dispose(t)}catch{}}async function FT(){if(bT)return bT;try{let{OcctKernel:e}=await gT(`occt-wasm`),t=await e.init();return CT(`occt-wasm`,Ka.fromKernel(t)),`occt-wasm`}catch{}try{return NT(await(await gT(`brepjs-opencascade`)).default()),`occt`}catch{}try{let e=await gT(`brepkit-wasm`);return typeof e.default==`function`&&await e.default(),CT(`brepkit`,new Ry(new e.BrepKernel)),`brepkit`}catch{}throw Error(`brepjs: no kernel package found. Install one of:
|
|
13
13
|
npm install occt-wasm (recommended, default)
|
|
14
14
|
npm install brepjs-opencascade
|
|
15
|
-
npm install brepkit-wasm`)}function PT(){var e=typeof SuppressedError==`function`?SuppressedError:function(e,t){var n=Error();return n.name=`SuppressedError`,n.error=e,n.suppressed=t,n},t={},n=[];function r(e,t){if(t!=null){if(Object(t)!==t)throw TypeError(`using declarations can only be used with objects, functions, null, or undefined.`);if(e)var r=t[Symbol.asyncDispose||Symbol.for(`Symbol.asyncDispose`)];if(r===void 0&&(r=t[Symbol.dispose||Symbol.for(`Symbol.dispose`)],e))var i=r;if(typeof r!=`function`)throw TypeError(`Object is not disposable.`);i&&(r=function(){try{i.call(t)}catch(e){return Promise.reject(e)}}),n.push({v:t,d:r,a:e})}else e&&n.push({d:t,a:e});return t}return{e:t,u:r.bind(null,!1),a:r.bind(null,!0),d:function(){var r,i=this.e,a=0;function o(){for(;r=n.pop();)try{if(!r.a&&a===1)return a=0,n.push(r),Promise.resolve().then(o);if(r.d){var e=r.d.call(r.v);if(r.a)return a|=2,Promise.resolve(e).then(o,s)}else a|=1}catch(e){return s(e)}if(a===1)return i===t?Promise.resolve():Promise.reject(i);if(i!==t)throw i}function s(n){return i=i===t?n:new e(n,i),o()}return o()}}}var FT=Symbol;FT.dispose??=Symbol.for(`Symbol.dispose`),FT.asyncDispose??=Symbol.for(`Symbol.asyncDispose`);var IT=globalThis;IT.FinalizationRegistry||=(console.warn(`brepjs: FinalizationRegistry unavailable — garbage collection will not work`),class{register(e,t,n){}unregister(e){return!1}});var LT={liveHandles:0,peakHandles:0,gcCollected:0,scopeEnters:0,scopeExits:0};function RT(){return{...LT}}function zT(){LT.liveHandles=0,LT.peakHandles=0,LT.gcCollected=0,LT.scopeEnters=0,LT.scopeExits=0}function BT(){LT.liveHandles++,LT.liveHandles>LT.peakHandles&&(LT.peakHandles=LT.liveHandles)}function VT(){LT.liveHandles--}function HT(){LT.gcCollected++,LT.liveHandles--}var UT=new FinalizationRegistry(e=>{HT();try{e.delete()}catch{}});function WT(e){let t=H(),n=!1,r,i=()=>{if(r){for(let e of r)try{e()}catch{}r=void 0}},a=()=>{if(!n){n=!0,VT(),UT.unregister(o),i();try{t.dispose(e)}catch{}}},o={get wrapped(){if(n)throw Error(`Shape handle has been disposed`);return e},get disposed(){return n},[Symbol.dispose](){a()},delete(){a()},onDispose(e){if(n){e();return}(r??=[]).push(e)}};return BT(),UT.register(o,{delete:()=>{t.dispose(e)}},o),o}function GT(e){let t=()=>{};return{get wrapped(){return e},get disposed(){return!1},[Symbol.dispose]:t,delete:t,onDispose:t}}function KT(e){let t=H(),n;try{n=t.checkpoint()}catch(t){if(!l(t))throw t;return e()}let r;try{r=e()}catch(e){try{t.restoreCheckpoint(n)}catch{}throw e}return t.restoreCheckpoint(n),r}function qT(e){let t=!1,n={get value(){if(t)throw Error(`kernel handle has been disposed`);return e},get disposed(){return t},[Symbol.dispose](){if(!t){t=!0,VT(),UT.unregister(n);try{e.delete()}catch{}}}};return BT(),UT.register(n,e,n),n}var JT=class{handles=[];constructor(){LT.scopeEnters++}register(e){return this.handles.push(()=>{try{let t=e[Symbol.dispose];typeof t==`function`?t.call(e):e.delete()}catch{}}),e}track(e){return this.handles.push(()=>{try{e[Symbol.dispose]()}catch{}}),e}[Symbol.dispose](){LT.scopeExits++;for(let e=this.handles.length-1;e>=0;e--)this.handles[e]?.();this.handles.length=0}};function YT(e){try{var t=PT();return e(t.u(new JT))}catch(e){t.e=e}finally{t.d()}}function XT(e,t){UT.register(e,t,t)}function ZT(e){UT.unregister(e)}function QT(e){try{var t=PT();return e(t.u(new JT))}catch(e){t.e=e}finally{t.d()}}async function $T(e){try{var t=PT();return await e(t.u(new JT))}catch(e){t.e=e}finally{t.d()}}function eE(e){return!e.disposed}function tE(e){return e.__is2D!==!0}function nE(e){return e.__is2D===!0}function rE(e){if(!tE(e))throw Error(`Expected 3D shape, got 2D`);return e}function iE(e){if(!nE(e))throw Error(`Expected 2D shape, got 3D`);return e}var aE=new WeakMap;function oE(e,t){aE.set(e,t)}function sE(e,t){let n=aE.get(t);if(n!==void 0)return n;let r=e.shapeType(t);return aE.set(t,r),r}function cE(e){return sE(H(),e.wrapped)}function lE(e){return H().curveIsClosed(e.wrapped)}function uE(e){return H().isValid(e.wrapped)}function dE(e){let t=H();if(!t.isValid(e.wrapped))return!1;let n=t.isValidStrict?.bind(t)??t.isValid.bind(t);try{let r=t.solidFromShell(e.wrapped),i=n(r);try{t.dispose(r)}catch{}return i}catch{return!1}}function fE(e){return H().isValid(e.wrapped)}function pE(e){return lE(e)?O(e):k(`Wire is not closed: start and end points do not coincide`)}function mE(e){return uE(e)?O(e):k(`Face orientation is inconsistent or face is invalid`)}function hE(e){return dE(e)?O(e):k(`Shell is not manifold: has free edges or is invalid`)}function gE(e){return fE(e)?O(e):k(`Solid failed BRepCheck validation`)}function _E(e){return H().surfaceType(e.wrapped)===`plane`}function vE(e){let t=H(),n=n=>{try{let r=t.makeFace(e.wrapped,n),i=t.surfaceType(r);try{t.dispose(r)}catch{}return i===`plane`}catch{return!1}};return n(!0)?!0:n(!1)}function yE(e){return _E(e)?O(e):k(`Face is not planar: underlying surface is not a geometric plane`)}function bE(e){return vE(e)?O(e):k(`Wire is not planar: edges do not lie in a common plane`)}function xE(e,t){return t===`2D`&&(e.__is2D=!0),e}function SE(e,t){return xE(WT(e),t)}function CE(e,t){return xE(WT(e),t)}function wE(e,t){return xE(WT(e),t)}function TE(e,t){return xE(WT(e),t)}function EE(e){return xE(WT(e))}function DE(e){return xE(WT(e))}function OE(e){return xE(WT(e))}function kE(e,t){return xE(WT(e),t)}function AE(e){return cE(e)===`vertex`}function jE(e){return cE(e)===`edge`}function ME(e){return cE(e)===`wire`}function NE(e){return cE(e)===`face`}function PE(e){return cE(e)===`shell`}function FE(e){return cE(e)===`solid`}function IE(e){return cE(e)===`compound`}function LE(e){let t=cE(e);return t===`shell`||t===`solid`||t===`compsolid`?!0:t===`compound`?tE(e):!1}function RE(e){let t=cE(e);return t===`edge`||t===`wire`}function zE(e,t){let n=H(),r=sE(n,e),i=n.downcast(e,r);return r===`vertex`?SE(i,t):r===`edge`?CE(i,t):r===`wire`?wE(i,t):r===`face`?TE(i,t):r===`shell`?EE(i):r===`solid`?DE(i):r===`compsolid`?OE(i):kE(i,t)}function BE(e){return zE(e)}function VE(e,t){let n=e.id,r=t.wrapped.id;(n!==void 0&&r!==void 0?n===r:t.wrapped===e)||H().dispose(e)}function U(e,t){let n=zE(e,t);return VE(e,n),n}function HE(e,t){let n=e.wrapped;if(e[Symbol.dispose](),n!==t){let e=H();e.dispose(n),e.dispose(t)}}function W(e){H().dispose(e.wrapped),e[Symbol.dispose]()}function UE(e,t,n){oE(e,t);let r=H().downcast(e,t);return t===`vertex`?SE(r,n):t===`edge`?CE(r,n):t===`wire`?wE(r,n):t===`face`?TE(r,n):t===`shell`?EE(r):t===`solid`?DE(r):t===`compsolid`?OE(r):kE(r,n)}function WE(e,t,n){let r=UE(e,t,n);return VE(e,r),r}function GE(e,t,n){return oE(e,t),xE(GT(e),n)}var G=2147483647,KE=Math.PI/180,qE=180/Math.PI;function JE(e,t,n,r,i){let a={kind:e,code:t,message:n,cause:r};return i?{...a,suggestion:i}:a}var YE={KERNEL_OPERATION:(e,t,n,r)=>JE(`KERNEL_OPERATION`,e,t,n,r),VALIDATION:(e,t,n,r)=>JE(`VALIDATION`,e,t,n,r),TYPE_CAST:(e,t,n,r)=>JE(`TYPE_CAST`,e,t,n,r),SKETCHER_STATE:(e,t,n,r)=>JE(`SKETCHER_STATE`,e,t,n,r),MODULE_INIT:(e,t,n,r)=>JE(`MODULE_INIT`,e,t,n,r),COMPUTATION:(e,t,n,r)=>JE(`COMPUTATION`,e,t,n,r),IO:(e,t,n,r)=>JE(`IO`,e,t,n,r),QUERY:(e,t,n,r)=>JE(`QUERY`,e,t,n,r),UNSUPPORTED:(e,t,n,r)=>JE(`UNSUPPORTED`,e,t,n,r)};function XE(e,t,n,r=`KERNEL_OPERATION`){try{return O(U(e()))}catch(e){let i=e instanceof Error?e.message:String(e),a=r===`KERNEL_OPERATION`?yo(i):i,o=vo(t);return k(YE[r](t,`${n}: ${a}`,e,o))}}function ZE(e,t,n,r=`KERNEL_OPERATION`){try{return O(e())}catch(e){let i=e instanceof Error?e.message:String(e),a=r===`KERNEL_OPERATION`?yo(i):i,o=vo(t);return k(YE[r](t,`${n}: ${a}`,e,o))}}function QE(e,t,n,r=`KERNEL_OPERATION`){try{var i=PT();let a=i.u(new JT);return XE(()=>e(a),t,n,r)}catch(e){i.e=e}finally{i.d()}}function $E(e,t){let n=H().iterShapes(e,t),r=Array(n.length);for(let e=0;e<n.length;e++)r[e]=WE(n[e],t);return r}function eD(e,t){let n=H();if(n.subShapeCount)return n.subShapeCount(e.wrapped,t);let r=n.iterShapes(e.wrapped,t);for(let e of r)n.dispose(e);return r.length}function tD(e,t){let n=H();if(n.subShapeHashes)return n.subShapeHashes(e.wrapped,t,G);let r=new Set;for(let i of n.iterShapes(e.wrapped,t))r.add(n.hashCode(i,G)),n.dispose(i);return[...r]}var nD=new WeakMap;function rD(e){let t=nD.get(e);if(!t)return;nD.delete(e);let n=[t.edges,t.faces,t.wires,t.vertices,t.shells,t.solids,t.compSolids];for(let e of n)if(e)for(let t of e)t[Symbol.dispose]()}var iD=new WeakSet;function aD(e){let t=e.wrapped,n=nD.get(t);return n||(n={},nD.set(t,n)),iD.has(e)||(iD.add(e),e.onDispose(()=>{rD(t)})),n}function oD(e){return nD.get(e.wrapped)}function sD(e){rD(e.wrapped)}function cD(e){let t=aD(e);if(t.edges)return t.edges;let n=$E(e.wrapped,`edge`);return t.edges=n,n}function lD(e){let t=aD(e);if(t.faces)return t.faces;let n=$E(e.wrapped,`face`);return t.faces=n,n}function uD(e){let t=aD(e);if(t.wires)return t.wires;let n=$E(e.wrapped,`wire`);return t.wires=n,n}function dD(e){let t=aD(e);if(t.vertices)return t.vertices;let n=$E(e.wrapped,`vertex`);return t.vertices=n,n}function fD(e){let t=aD(e);if(t.solids)return t.solids;let n=$E(e.wrapped,`solid`);return t.solids=n,n}function pD(e){let t=aD(e);if(t.shells)return t.shells;let n=$E(e.wrapped,`shell`);return t.shells=n,n}function mD(e){let t=aD(e);if(t.compSolids)return t.compSolids;let n=$E(e.wrapped,`compsolid`);return t.compSolids=n,n}function*hD(e){for(let t of H().iterShapes(e.wrapped,`edge`))yield WE(t,`edge`)}function*gD(e){for(let t of H().iterShapes(e.wrapped,`face`))yield WE(t,`face`)}function*_D(e){for(let t of H().iterShapes(e.wrapped,`wire`))yield WE(t,`wire`)}function*vD(e){for(let t of H().iterShapes(e.wrapped,`vertex`))yield WE(t,`vertex`)}function*yD(e){for(let t of H().iterShapes(e.wrapped,`solid`))yield WE(t,`solid`)}function*bD(e){for(let t of H().iterShapes(e.wrapped,`shell`))yield WE(t,`shell`)}function*xD(e){for(let t of H().iterShapes(e.wrapped,`compsolid`))yield WE(t,`compsolid`)}function SD(e){let t=aD(e);if(t.bounds)return t.bounds;let{min:n,max:r}=H().boundingBox(e.wrapped),i={xMin:n[0],xMax:r[0],yMin:n[1],yMax:r[1],zMin:n[2],zMax:r[2]};return t.bounds=i,i}function CD(e){return sE(H(),e.wrapped)}function wD(e){let t=aD(e);if(t.surfaceType!==void 0)return t.surfaceType;let n=H().surfaceType(e.wrapped);return t.surfaceType=n,n}function TD(e){let t=aD(e);if(t.isValid!==void 0)return t.isValid;let n=H().isValid(e.wrapped);return t.isValid=n,n}function ED(e){return{kind:CD(e),faceCount:eD(e,`face`),edgeCount:eD(e,`edge`),wireCount:eD(e,`wire`),vertexCount:eD(e,`vertex`),valid:TD(e),bounds:SD(e)}}function DD(e){return H().vertexPosition(e.wrapped)}function OD(e){return e.length===2?[e[0],e[1],0]:[e[0],e[1],e[2]]}function kD(e){return[e[0],e[1]]}var AD={X:[1,0,0],Y:[0,1,0],Z:[0,0,1]};function jD(e){if(typeof e==`string`){let t=AD[e];if(!t)throw Error(`Unknown direction: ${e}`);return t}return e}function MD(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function ND(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function PD(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function FD(e){return[-e[0],-e[1],-e[2]]}function ID(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function LD(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function RD(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2])}function zD(e){return e[0]*e[0]+e[1]*e[1]+e[2]*e[2]}function BD(e,t){return RD(ND(e,t))}function VD(e){let t=RD(e);return t<1e-10?[0,0,0]:[e[0]/t,e[1]/t,e[2]/t]}function HD(e,t,n=1e-5){return Math.abs(e[0]-t[0])<n&&Math.abs(e[1]-t[1])<n&&Math.abs(e[2]-t[2])<n}function UD(e,t=1e-10){return zD(e)<t*t}function WD(e,t){let n=ID(e,t),r=RD(e),i=RD(t);if(r<1e-10||i<1e-10)return 0;let a=Math.max(-1,Math.min(1,n/(r*i)));return Math.acos(a)}function GD(e,t,n){let r=ND(e,t),i=zD(n);return i<1e-20?e:ND(e,PD(n,ID(r,n)/i))}function KD(e,t,n){let r=VD(t),i=Math.cos(n),a=Math.sin(n),o=ID(e,r),s=LD(r,e);return[e[0]*i+s[0]*a+r[0]*o*(1-i),e[1]*i+s[1]*a+r[1]*o*(1-i),e[2]*i+s[2]*a+r[2]*o*(1-i)]}var qD=e=>Math.round(e*1e3)/1e3;function JD(e){return`x: ${qD(e[0])}, y: ${qD(e[1])}, z: ${qD(e[2])}`}function YD(e,t=null,n=[0,0,1]){let r=VD(n);if(UD(r))throw Error(`Plane normal must be non-zero`);let i;if(t)i=VD(t);else{let[e,t,n]=r,a=Math.abs(e),o=Math.abs(t),s=Math.abs(n),c;c=a<=o&&a<=s?[1,0,0]:o<=s?[0,1,0]:[0,0,1];let l=c[1]*n-c[2]*t,u=c[2]*e-c[0]*n,d=c[0]*t-c[1]*e;i=Math.sqrt(l*l+u*u+d*d)>1e-12?VD([l,u,d]):[1,0,0]}if(UD(i))throw Error(`Plane xDir must be non-zero`);let a=VD(LD(r,i));return{origin:e,xDir:i,yDir:a,zDir:r}}var XD={XY:{xDir:[1,0,0],normal:[0,0,1]},YZ:{xDir:[0,1,0],normal:[1,0,0]},ZX:{xDir:[0,0,1],normal:[0,1,0]},XZ:{xDir:[1,0,0],normal:[0,-1,0]},YX:{xDir:[0,1,0],normal:[0,0,-1]},ZY:{xDir:[0,0,1],normal:[-1,0,0]},front:{xDir:[1,0,0],normal:[0,0,1]},back:{xDir:[-1,0,0],normal:[0,0,-1]},left:{xDir:[0,0,1],normal:[-1,0,0]},right:{xDir:[0,0,-1],normal:[1,0,0]},top:{xDir:[1,0,0],normal:[0,1,0]},bottom:{xDir:[1,0,0],normal:[0,-1,0]}};function ZD(e,t=[0,0,0]){let n=XD[e];if(!n)return k(P(`UNKNOWN_PLANE`,`Could not find plane ${e}`));let r;return r=typeof t==`number`?PD(n.normal,t):OD(t),O(YD(r,n.xDir,n.normal))}function QD(e,t){return typeof e==`string`?ZD(e,t):O(e)}function $D(e,t){return e&&typeof e!=`string`?{...e}:j(QD(e??`XY`,t))}function eO(e,t){let[n,r]=t;return MD(MD(e.origin,PD(e.xDir,n)),PD(e.yDir,r))}function tO(e,t){return{...e,origin:MD(e.origin,t)}}function nO(e,t,n=[1,0,0]){let r=t*KE,i=KD(e.zDir,n,r),a=KD(e.xDir,n,r),o=VD(LD(i,a));return{origin:e.origin,xDir:a,yDir:o,zDir:i}}var rO={compound:0,solidCompound:1,solid:2,shell:3,face:4,wire:5,edge:6,vertex:7,shape:8},iO=e=>rO[e],aO={vertex:`vertex`,edge:`edge`,wire:`wire`,face:`face`,shell:`shell`,solid:`solid`,solidCompound:`compsolid`,compound:`compound`,shape:`compound`},oO=function*(e,t){let n=H().iterShapes(e,aO[t]);for(let e of n)yield e},sO=e=>H().isNull(e)?k(xo(`NULL_SHAPE`,`This shape has no type, it is null`)):O(e.ShapeType());function cO(e){if(H().isNull(e))return k(xo(`NULL_SHAPE`,`This shape has no type, it is null`));try{return O(H().downcast(e))}catch(e){return k(xo(`NO_WRAPPER`,`Could not find a wrapper for this shape type`,e))}}function lO(e){if(H().isNull(e))return k(xo(`NULL_SHAPE`,`Cannot copy a null shape`));try{return O(H().copyShape(e))}catch(e){return k(xo(`NO_WRAPPER`,`Could not copy this shape`,e))}}function uO(e){return H().isNull(e)?k(xo(`NULL_SHAPE`,`Cannot cast a null shape`)):O(zE(e))}function dO(e){return H().shapeType(e.wrapped)===`compsolid`}function fO(e){return uO(H().fromBREP(e))}var pO={plane:`PLANE`,cylinder:`CYLINDRE`,cone:`CONE`,sphere:`SPHERE`,torus:`TORUS`,bezier:`BEZIER_SURFACE`,bspline:`BSPLINE_SURFACE`,revolution:`REVOLUTION_SURFACE`,extrusion:`EXTRUSION_SURFACE`,offset:`OFFSET_SURFACE`,other:`OTHER_SURFACE`};function mO(e){return O(pO[wD(e)])}function hO(e){return j(mO(e))}function gO(e){return H().shapeOrientation(e.wrapped)===`forward`?`forward`:`backward`}function _O(e){return zE(H().reverseShape(e.wrapped))}function vO(e){return H().uvBounds(e.wrapped)}function yO(e,t,n){let r=vO(e),i=t*(r.uMax-r.uMin)+r.uMin,a=n*(r.vMax-r.vMin)+r.vMin;return H().pointOnSurface(e.wrapped,i,a)}function bO(e,t){let n=OD(t);return H().uvFromPoint(e.wrapped,n)||[0,0]}function xO(e,t){let n=OD(t);try{let t=n,r=H().uvFromPoint(e.wrapped,t);if(!r)return k(xo(`PROJECTION_FAILED`,`No projection found on the face`));let i=H().projectPointOnFace(e.wrapped,t),a=n[0]-i[0],o=n[1]-i[1],s=n[2]-i[2];return O({uv:r,point:i,distance:Math.sqrt(a*a+o*o+s*s)})}catch(e){return k(xo(`PROJECTION_FAILED`,`Point projection failed: ${e instanceof Error?e.message:String(e)}`))}}function SO(e,t){let n,r;if(t)[n,r]=bO(e,t);else{let t=vO(e);n=.5*(t.uMin+t.uMax),r=.5*(t.vMin+t.vMax)}return H().surfaceNormal(e.wrapped,n,r)}function CO(e){return H().surfaceCenterOfMass(e.wrapped)}function wO(e){return H().getSurfaceAxis(e.wrapped)}function TO(e,t,n=1e-6){let[r,i]=bO(e,t);return H().classifyPointOnFace(e.wrapped,r,i,n)}function EO(e){return zE(H().outerWire(e.wrapped))}function DO(e){return zE(H().removeHolesFromFace(e.wrapped))}function OO(e){let t=EO(e);return Array.from(oO(e.wrapped,`wire`)).map(e=>zE(j(cO(e)))).filter(e=>!H().isSame(e.wrapped,t.wrapped))}function kO(e,t){let n=aD(e),r=new Map;for(let n of tD(e,`face`))r.set(n,t);n.faceOrigins=r}function AO(e){return oD(e)?.faceOrigins}function jO(e,t,n){let r=new Map;for(let e of t){let t=AO(e);if(t)for(let[e,n]of t)r.set(e,n)}if(r.size===0)return;let i=new Map;for(let[t,n]of r){if(e.deleted.has(t))continue;let r=e.modified.get(t);if(r&&r.length>0)for(let e of r)i.set(e,n);else i.set(t,n);let a=e.generated.get(t);if(a)for(let e of a)i.has(e)||i.set(e,n)}if(i.size>0){let e=aD(n);e.faceOrigins=i}}var MO=100,NO=.985,PO=.1;function FO(e,t,n,r){let i=-1/0,a;for(let n of r){let r=e[0]*n.normal[0]+e[1]*n.normal[1]+e[2]*n.normal[2];if(r<.707)continue;let o=t[0]-n.centroid[0],s=t[1]-n.centroid[1],c=t[2]-n.centroid[2],l=o*o+s*s+c*c;if(l>MO)continue;let u=r-l/MO;u>i&&(i=u,a=n.origin)}if(a!==void 0)return a;if(!n)return;let o=1/0,s;for(let n of r){if(!n.planar)continue;let r=e[0]*n.normal[0]+e[1]*n.normal[1]+e[2]*n.normal[2];if(Math.abs(r)<NO)continue;let i=t[0]-n.centroid[0],a=t[1]-n.centroid[1],c=t[2]-n.centroid[2],l=i*n.normal[0]+a*n.normal[1]+c*n.normal[2];if(l*l>PO)continue;let u=Math.max(0,i*i+a*a+c*c-l*l);u<o&&(o=u,s=n.origin)}return s}function IO(e,t){let n=new Map;for(let t of e){let e=AO(t);if(e)for(let[t,r]of e)n.set(t,r)}if(n.size===0)return;let r=H(),i=new Map,a=lD(t),o=[];for(let e of a){let t=r.hashCode(e.wrapped,G),a=n.get(t);a===void 0?o.push(e):i.set(t,a)}if(o.length>0){let t=[];for(let n of e){let e=AO(n);if(e)for(let i of lD(n)){let n=r.hashCode(i.wrapped,G),a=e.get(n);if(a!==void 0)try{let e=r.uvBounds(i.wrapped),n=r.surfaceNormal(i.wrapped,.5*(e.uMin+e.uMax),.5*(e.vMin+e.vMax)),o=r.surfaceCenterOfMass(i.wrapped),s=r.surfaceType(i.wrapped)===`plane`;t.push({origin:a,normal:n,centroid:o,planar:s})}catch{}}}if(t.length>0)for(let e of o){let n=r.hashCode(e.wrapped,G);try{let a=r.uvBounds(e.wrapped),o=FO(r.surfaceNormal(e.wrapped,.5*(a.uMin+a.uMax),.5*(a.vMin+a.vMax)),r.surfaceCenterOfMass(e.wrapped),r.surfaceType(e.wrapped)===`plane`,t);o!==void 0&&i.set(n,o)}catch{}}}if(i.size>0){let e=aD(t);e.faceOrigins=i}}var LO=new WeakMap,RO=new WeakMap;function zO(e){return LO.has(e.wrapped)}function BO(e){let t=LO.get(e.wrapped);return t||(t=new Map,LO.set(e.wrapped,t)),t}function VO(e){let t=RO.get(e.wrapped);return t||(t=new Map,RO.set(e.wrapped,t)),t}function HO(e,t,n){let r=Array.isArray(t)?t:lD(e).filter(t),i=BO(e),a=i.get(n)??new Set;for(let e of r)a.add(H().hashCode(e.wrapped,G));return i.set(n,a),e}function UO(e,t){let n=LO.get(e.wrapped);if(!n)return[];let r=n.get(t);if(!r||r.size===0)return[];let i=[];for(let t of lD(e)){let e=H().hashCode(t.wrapped,G);r.has(e)&&i.push(t)}return i}function WO(e){let t=new Map,n=LO.get(e.wrapped);if(!n)return t;let r=lD(e),i=new Map;for(let e of r)i.set(H().hashCode(e.wrapped,G),e);for(let[e,r]of n){let n=[];for(let e of r){let t=i.get(e);t&&n.push(t)}n.length>0&&t.set(e,n)}return t}function GO(e,t,n){return VO(e).set(t,n),e}function KO(e,t){return RO.get(e.wrapped)?.get(t)}function qO(e,t,n){let r=e.get(t)??new Set;r.add(n),e.set(t,r)}function JO(e,t,n){let r=BO(n);for(let i of t){let t=LO.get(i.wrapped);if(!t)continue;let a=new Map;for(let[e,n]of t)for(let t of n){let n=a.get(t)??[];n.push(e),a.set(t,n)}for(let[t,n]of a){if(e.deleted.has(t))continue;let i=e.modified.get(t),a=i&&i.length>0?i:[t];for(let e of a)for(let t of n)qO(r,t,e)}let o=RO.get(i.wrapped);if(o){let e=VO(n);for(let[t,n]of o)e.has(t)||e.set(t,n)}}}var YO=new WeakMap,XO=new WeakMap;function ZO(e){return YO.has(e.wrapped)||XO.has(e.wrapped)}function QO(e){let t=XO.get(e.wrapped);return t||(t=new Map,XO.set(e.wrapped,t)),t}function $O(e){if(typeof e==`string`){let t=e.startsWith(`#`)?e.slice(1):e;return t.length===3&&(t=t.charAt(0)+t.charAt(0)+t.charAt(1)+t.charAt(1)+t.charAt(2)+t.charAt(2)),[parseInt(t.slice(0,2),16)/255,parseInt(t.slice(2,4),16)/255,parseInt(t.slice(4,6),16)/255,1]}return e.length===3?[e[0],e[1],e[2],1]:[e[0],e[1],e[2],e[3]]}function ek(e,t){return YO.set(e.wrapped,$O(t)),e}function tk(e,t,n){let r=$O(n),i=QO(e);for(let e of t)i.set(H().hashCode(e.wrapped,G),r);return e}function nk(e){return YO.get(e.wrapped)}function rk(e,t){let n=XO.get(e.wrapped);if(n)return n.get(H().hashCode(t.wrapped,G))}function ik(e,t,n){for(let e of t){let t=YO.get(e.wrapped);if(t){YO.set(n.wrapped,t);break}}let r=QO(n);for(let n of t){let t=XO.get(n.wrapped);if(!(!t||t.size===0))for(let[n,i]of t){if(e.deleted.has(n))continue;let t=e.modified.get(n);if(t&&t.length>0)for(let e of t)r.set(e,i);else r.set(n,i)}}}function ak(e){return AO(e)!==void 0||zO(e)||ZO(e)}function ok(e){if(!e.some(ak))return[];let t=[];for(let n of e)t.push(...tD(n,`face`));return t}function sk(e,t,n){jO(e,t,n),JO(e,t,n),ik(e,t,n)}function ck(e,t){IO(e,t)}function lk(e,t){let n=H(),r=[...n.iterShapes(e.wrapped,`face`)],i=[...n.iterShapes(t.wrapped,`face`)];if(r.length!==i.length)return;let a=new Map;for(let e=0;e<r.length;e++){let t=r[e],o=i[e];t===void 0||o===void 0||a.set(n.hashCode(t,G),[n.hashCode(o,G)])}for(let e of r)n.dispose(e);for(let e of i)n.dispose(e);sk({modified:a,generated:new Map,deleted:new Set},[e],t)}function uk(e,t){let n=ok([e]),{shape:r,evolution:i}=H().translateWithHistory(e.wrapped,t[0],t[1],t[2],n,G),a=U(r);return sk(i,[e],a),a}function dk(e,t,n=[0,0,0],r=[0,0,1]){let i=ok([e]),{shape:a,evolution:o}=H().rotateWithHistory(e.wrapped,t*KE,i,G,r,n),s=U(a);return sk(o,[e],s),s}function fk(e,t=[0,1,0],n=[0,0,0]){let r=ok([e]),{shape:i,evolution:a}=H().mirrorWithHistory(e.wrapped,n,t,r,G),o=U(i);return sk(a,[e],o),o}function pk(e,t,n=[0,0,0]){let r=ok([e]),{shape:i,evolution:a}=H().scaleWithHistory(e.wrapped,n,t,r,G),o=U(i);return sk(a,[e],o),o}function mk(e,t,n){let r=H().boundingBox(e.wrapped),i=[r.max[0]-r.min[0],r.max[1]-r.min[1],r.max[2]-r.min[2]],a=n?.auto===!0;function o(e,t,n){return e!==void 0&&t>1e-12?e/t:e===void 0&&a?n:1}let s=1;a&&(t[0]!==void 0&&i[0]>1e-12?s=t[0]/i[0]:t[1]!==void 0&&i[1]>1e-12?s=t[1]/i[1]:t[2]!==void 0&&i[2]>1e-12&&(s=t[2]/i[2]));let c=[o(t[0],i[0],s),o(t[1],i[1],s),o(t[2],i[2],s)];return Math.abs(c[0]-c[1])<1e-6&&Math.abs(c[1]-c[2])<1e-6?O(pk(e,c[0])):k(P(M.VALIDATION_FAILED,`resize: non-uniform scaling is not supported (WASM build lacks BRepBuilderAPI_GTransform).`,void 0,void 0,`Use auto: true to scale proportionally, or set all three dimensions to achieve uniform scaling.`))}function hk(e){if(`linear`in e)return O({linear:e.linear,translation:e.translation});let[t,n,r,i]=e,a=1e-10;return Math.abs(i[0])>a||Math.abs(i[1])>a||Math.abs(i[2])>a||Math.abs(i[3]-1)>a?k(P(M.VALIDATION_FAILED,`applyMatrix: invalid bottom row [${String(i[0])}, ${String(i[1])}, ${String(i[2])}, ${String(i[3])}]. Must be [0, 0, 0, 1] for an affine transform.`)):O({linear:[t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]],translation:[t[3],n[3],r[3]]})}function gk(e){return e[0]*(e[4]*e[8]-e[5]*e[7])-e[1]*(e[3]*e[8]-e[5]*e[6])+e[2]*(e[3]*e[7]-e[4]*e[6])}function _k(e){let t=1e-8,n=e[0]*e[0]+e[3]*e[3]+e[6]*e[6],r=e[1]*e[1]+e[4]*e[4]+e[7]*e[7],i=e[2]*e[2]+e[5]*e[5]+e[8]*e[8],a=e[0]*e[1]+e[3]*e[4]+e[6]*e[7],o=e[0]*e[2]+e[3]*e[5]+e[6]*e[8],s=e[1]*e[2]+e[4]*e[5]+e[7]*e[8];return!(Math.abs(a)>t||Math.abs(o)>t||Math.abs(s)>t||Math.abs(n-r)>t||Math.abs(n-i)>t)}function vk(e,t){let n=hk(t);if(!n.ok)return n;let{linear:r,translation:i}=n.value,a=gk(r);if(Math.abs(a)<1e-12)return k(P(M.VALIDATION_FAILED,`applyMatrix: singular matrix (determinant ≈ 0). Cannot apply a non-invertible transform.`));if(_k(r)){let t=ok([e]),{shape:n,evolution:a}=H().generalTransformWithHistory(e.wrapped,r,i,!0,t,G),o=U(n);return sk(a,[e],o),O(o)}let o=U(H().generalTransformNonOrthogonal(e.wrapped,r,i));return ck([e],o),O(o)}function yk(e){let t=e.map(e=>e.type===`translate`?{type:`translate`,x:e.v[0],y:e.v[1],z:e.v[2]}:{type:`rotate`,angle:e.angle,axis:e.axis,center:e.center}),{handle:n,dispose:r}=H().composeTransform(t);return{trsf:n,cleanup:r}}function bk(e,t){let{trsf:n,cleanup:r}=yk(`type`in t?[t]:t),i;try{i=U(H().locate(e.wrapped,n))}finally{r()}return ak(e)&&lk(e,i),i}function xk(e,t){let n=ok([e]),{shape:r,evolution:i}=H().applyComposedTransformWithHistory(e.wrapped,t.trsf,n,G),a=U(r);return sk(i,[e],a),a}function Sk(e){return XE(()=>H().copyShape(e.wrapped),M.CLONE_FAILED,`Failed to clone shape`)}function Ck(e){return ZE(()=>H().toBREP(e.wrapped),M.TO_BREP_FAILED,`Failed to serialize shape to BREP`)}function wk(e){return H().hashCode(e.wrapped,G)}function Tk(e){return H().isNull(e.wrapped)}function Ek(e,t){return H().isSame(e.wrapped,t.wrapped)}function Dk(e,t){return H().isEqual(e.wrapped,t.wrapped)}function Ok(e){return XE(()=>H().simplify(e.wrapped),M.SIMPLIFY_FAILED,`Failed to simplify shape`)}function kk(e){return H().curveType(e.wrapped)}function Ak(e){let[t]=H().curveParameters(e.wrapped);return H().curvePointAtParam(e.wrapped,t)}function jk(e){let[,t]=H().curveParameters(e.wrapped);return H().curvePointAtParam(e.wrapped,t)}function Mk(e,t=.5){let[n,r]=H().curveParameters(e.wrapped),i=n+(r-n)*t;return H().curvePointAtParam(e.wrapped,i)}function Nk(e,t=.5){let[n,r]=H().curveParameters(e.wrapped),i=n+(r-n)*t;return H().curveTangent(e.wrapped,i).tangent}function Pk(e){return H().length(e.wrapped)}function Fk(e){if(kk(e)!==`CIRCLE`)return null;let t=Mk(e,0),n=Mk(e,1/3),r=Mk(e,2/3),i=[n[0]-t[0],n[1]-t[1],n[2]-t[2]],a=[r[0]-t[0],r[1]-t[1],r[2]-t[2]],o=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],s=o[0]*o[0]+o[1]*o[1]+o[2]*o[2];if(s<1e-18)return null;let c=i[0]*i[0]+i[1]*i[1]+i[2]*i[2],l=a[0]*a[0]+a[1]*a[1]+a[2]*a[2],u=[c*a[0]-l*i[0],c*a[1]-l*i[1],c*a[2]-l*i[2]],d=[u[1]*o[2]-u[2]*o[1],u[2]*o[0]-u[0]*o[2],u[0]*o[1]-u[1]*o[0]],f=1/(2*s),p=[t[0]+d[0]*f,t[1]+d[1]*f,t[2]+d[2]*f],m=Math.sqrt(s);return{origin:p,direction:[o[0]/m,o[1]/m,o[2]/m]}}function Ik(e){return H().curveIsClosed(e.wrapped)}function Lk(e){return H().curveIsPeriodic(e.wrapped)}function Rk(e){return H().curvePeriod(e.wrapped)}function zk(e){return H().shapeOrientation(e.wrapped)===`forward`?`forward`:`backward`}function Bk(e){return U(H().reverseShape(e.wrapped))}function Vk(e,t={}){if(e.length<2)return k(xo(`INTERPOLATE_MIN_POINTS`,`Interpolation requires at least 2 points`));try{let n=U(H().interpolatePoints(e,t));return jE(n)?O(n):(W(n),k(xo(`INTERPOLATE_NOT_EDGE`,`Interpolation did not produce an edge`)))}catch(e){return k(xo(`INTERPOLATE_FAILED`,`Interpolation failed: ${e instanceof Error?e.message:String(e)}`))}}function Hk(e,t={}){if(e.length<2)return k(xo(`APPROXIMATE_MIN_POINTS`,`Approximation requires at least 2 points`));try{let n=U(H().approximatePoints(e,t));return jE(n)?O(n):(W(n),k(xo(`APPROXIMATE_NOT_EDGE`,`Approximation did not produce an edge`)))}catch(e){return k(xo(`APPROXIMATE_FAILED`,`Approximation failed: ${e instanceof Error?e.message:String(e)}`))}}function Uk(e,t,n=`arc`){let r=U(H().offsetWire2D(e.wrapped,t,{arc:`arc`,intersection:`intersection`,tangent:`tangent`,chamfer:`intersection`}[n]));return ME(r)?O(r):(W(r),k(xo(`OFFSET_NOT_WIRE`,`Offset did not produce a Wire`)))}function Wk(e,t,n,r=!1){return`${e}:${t}:${n}:${r}`}function Gk(e,t){return`edge:${e}:${t}`}var Kk=new WeakMap,qk=new WeakMap;function Jk(e,t){let n=Kk.get(e);if(n)return n.get(t)}function Yk(e,t,n){let r=Kk.get(e);r||(r=new Map,Kk.set(e,r)),r.set(t,n)}function Xk(e,t){let n=qk.get(e);if(n)return n.get(t)}function Zk(e,t,n){let r=qk.get(e);r||(r=new Map,qk.set(e,r)),r.set(t,n)}function Qk(){Kk=new WeakMap,qk=new WeakMap}function $k(){let e=new WeakMap,t=new WeakMap;return{getMesh(t,n){return e.get(t)?.get(n)},setMesh(t,n,r){let i=e.get(t);i||(i=new Map,e.set(t,i)),i.set(n,r)},getEdgeMesh(e,n){return t.get(e)?.get(n)},setEdgeMesh(e,n,r){let i=t.get(e);i||(i=new Map,t.set(e,i)),i.set(n,r)},clear(){e=new WeakMap,t=new WeakMap}}}function eA(e,t={}){let n=Mo(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,skipNormals:a=!1,includeUVs:o=!1,cache:s=!0,signal:c}=t;c?.throwIfAborted();let l=Wk(r,i,a,o);if(s){let t=Jk(e.wrapped,l);if(t)return t}let u=H().mesh(e.wrapped,{tolerance:r,angularTolerance:i,skipNormals:a,includeUVs:o,...c?{signal:c}:{}}),d=AO(e),f={vertices:u.vertices,normals:u.normals,triangles:u.triangles,uvs:u.uvs,faceGroups:u.faceGroups.map(e=>({start:e.start,count:e.count,faceId:e.faceHash,origin:d?.get(e.faceHash)??0}))};return s&&Yk(e.wrapped,l,f),f}function tA(e,t={}){let n=Mo(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,cache:a=!0}=t,o=Gk(r,i);if(a){let t=Xk(e.wrapped,o);if(t)return t}let s=H().meshEdges(e.wrapped,r,i),c={lines:s.lines,edgeGroups:s.edgeGroups.map(e=>({start:e.start,count:e.count,edgeId:e.edgeHash}))};return a&&Zk(e.wrapped,o,c),c}function nA(e,t){return e instanceof Error&&e.message.startsWith(`${t} export failed`)?To(`${t}_EXPORT_FAILED`,`Failed to write ${t} file`,e):e instanceof WebAssembly.RuntimeError?To(`${t}_EXPORT_CRASHED`,`${t} export crashed the kernel (${e.message}); the shape likely contains geometry the ${t} writer cannot serialize`,e):To(`${t}_FILE_READ_ERROR`,`Failed to read exported ${t} file`,e)}function rA(e){let t;try{t=fD(e)}catch{return``}if(t.length<=1)return``;let n=[];return t.forEach((e,t)=>{try{SD(e)}catch(e){if(e instanceof TypeError)throw e;n.push(t)}}),n.length===0?`; could not localize the offending sub-solid among ${t.length} solids`:`; offending sub-solid${n.length>1?`s`:``} (of ${t.length}): index ${n.join(`, `)}`}function iA(e,t){try{return SD(e),null}catch(n){if(n instanceof TypeError)throw n;return To(`${t}_EXPORT_UNSERIALIZABLE`,`${t} export aborted: the shape contains degenerate geometry the ${t} writer cannot serialize (bounding-box evaluation failed); export was skipped to avoid crashing the kernel${rA(e)}`,n)}}function aA(e){let t=iA(e,`STEP`);if(t)return k(t);try{let t=H().exportSTEP([e.wrapped]);return O(new Blob([t],{type:`application/STEP`}))}catch(e){return k(nA(e,`STEP`))}}function oA(e,t={}){let n=Mo(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,binary:a=!1}=t,o=iA(e,`STL`);if(o)return k(o);try{H().hasTriangulation(e.wrapped)||H().meshShape(e.wrapped,r,i);let t=H().exportSTL(e.wrapped,a,r,i);return O(new Blob([t],{type:`application/sla`}))}catch(e){return k(nA(e,`STL`))}}function sA(e){try{let t=H().exportIGES([e.wrapped]);return O(new Blob([t],{type:`application/iges`}))}catch(e){return k(To(`IGES_EXPORT_FAILED`,`Failed to write IGES file`,e))}}function cA(e,t){let n=t?.coarseTolerance??.5,r=t?.fineTolerance??.05,i=t?.angularTolerance??.5;return{coarse:eA(e,{tolerance:n,angularTolerance:i}),fine:eA(e,{tolerance:r,angularTolerance:i*.2})}}function lA(e){let t=SD(e),n=t.xMax-t.xMin,r=t.yMax-t.yMin,i=t.zMax-t.zMin;return Math.sqrt(n*n+r*r+i*i)||1}function uA(e,t){let n;if(t.tolerances&&t.tolerances.length>0)n=[...t.tolerances];else{let r=Math.max(1,Math.floor(t.levels??3)),i=t.spacing??4,a=(t.relativeTolerance??5e-4)*lA(e)||2**-52;n=[];for(let e=r-1;e>=0;e--)n.push(a*i**e)}return n.sort((e,t)=>t-e),n}function dA(e,t,n){return Math.min(e/t*n,1)}function fA(e,t={}){let n=t.angularTolerance??Mo().angularTolerance,r=t.cache??!0,i=uA(e,t),a=Math.min(...i);return i.map(i=>{let o=dA(i,a,n);return{tolerance:i,angularTolerance:o,mesh:eA(e,{tolerance:i,angularTolerance:o,cache:r,...t.signal?{signal:t.signal}:{}})}})}function pA(){return new Promise(e=>{setTimeout(e,0)})}async function mA(e,t={}){let n=t.angularTolerance??Mo().angularTolerance,r=t.cache??!0,i=t.meshLevel??((e,n,i)=>eA(e,{tolerance:n,angularTolerance:i,cache:r,...t.signal?{signal:t.signal}:{}})),a=uA(e,t),o=Math.min(...a),s=[];for(let[r,c]of a.entries()){if(t.signal?.aborted)break;let l=dA(c,o,n),u;try{u=await i(e,c,l)}catch(e){if(t.signal?.aborted)break;throw e}let d={tolerance:c,angularTolerance:l,mesh:u};if(s.push(d),t.onLevel?.(d,r),t.signal?.aborted||r===a.length-1)break;await pA()}return s}function hA(e,t,n){if(t<0||t>=e.length)throw Error(n??`Index ${t} out of bounds (length ${e.length})`);return e[t]}function gA(e,t){if(e.length===0)throw Error(t??`Expected non-empty array`);return e[0]}function _A(e,t){if(e.length===0)throw Error(t??`Expected non-empty array`);return e[e.length-1]}function vA(e){return Array.from(Array(e).keys())}function yA(e){return vA(Math.min(...e.map(e=>e.length))).map(t=>e.map(e=>e[t]))}function bA(e,t){return CE(H().makeLineEdge([...e],[...t]))}function xA(e,t=[0,0,0],n=[0,0,1]){return CE(H().makeCircleEdge([...t],[...n],e))}function SA(e,t,n=[0,0,0],r=[0,0,1],i){return t>e?k(P(`ELLIPSE_RADII`,`The minor radius must be smaller than the major one`)):O(CE(H().makeEllipseEdge([...n],[...r],e,t,i?[...i]:void 0)))}function CA(e,t,n,r=[0,0,0],i=[0,0,1],a=!1){return wE(H().makeHelixWire(e,t,n,[...r],[...i],a))}function wA(e,t,n){return CE(H().makeArcEdge([...e],[...t],[...n]))}function TA(e,t,n,r,i=[0,0,0],a=[0,0,1],o){return t>e?k(P(`ELLIPSE_RADII`,`The minor radius must be smaller than the major one`)):O(CE(H().makeEllipseArc([...i],[...a],e,t,n,r,o?[...o]:void 0)))}function EA(e,{tolerance:t=.001,smoothing:n=null,degMax:r=6,degMin:i=1}={}){try{let a=e.map(e=>[...e]);return O(CE(H().approximatePoints(a,{tolerance:t,degMin:i,degMax:r,smoothing:n})))}catch(e){return k(N(`BSPLINE_FAILED`,`B-spline approximation failed`,e))}}function DA(e,{periodic:t=!1,tolerance:n=1e-7}={}){try{let r=e.map(e=>[...e]);return O(CE(H().interpolatePoints(r,{periodic:t,tolerance:n})))}catch(e){return k(N(`BSPLINE_INTERP_FAILED`,`B-spline interpolation failed`,e))}}function OA(e){if(e.length<2)return k(P(`BEZIER_MIN_POINTS`,`Need at least 2 points for a Bezier curve, got ${e.length}`,void 0,{pointCount:e.length}));let t=e.map(e=>[...e]);return O(CE(H().makeBezierEdge(t)))}function kA(e,t,n){return CE(H().makeTangentArc([...e],[...t],[...n]))}function AA(e){try{return O(wE(H().makeWireFromMixed(e.map(e=>e.wrapped))))}catch(e){return k(N(`WIRE_BUILD_FAILED`,`Failed to build the wire: ${e instanceof Error?e.message:`unknown error`}`))}}function jA(e,t){try{let n=H().makeFace(e.wrapped,!0);if(t&&t.length>0){let e=FA(TE(n),t);return _E(e)?O(e):k(P(`FACE_NOT_PLANAR`,`makeFace produced a non-planar face — wire may not be truly planar`))}let r=TE(n);return _E(r)?O(r):k(P(`FACE_NOT_PLANAR`,`makeFace produced a non-planar face — wire may not be truly planar`))}catch(e){return k(N(`FACE_BUILD_FAILED`,`Failed to build the face. Your wire might be non planar.`,e))}}function MA(e){return jA(EO(e))}function NA(e,t){return TE(H().makeFaceOnSurface(e.wrapped,t.wrapped))}function PA(e){try{return Ya(uO(H().makeNonPlanarFace(e.wrapped)),e=>NE(e)?O(e):k(N(`FACE_BUILD_FAILED`,`Failed to create a non-planar face`)))}catch(e){return k(N(`FACE_BUILD_FAILED`,`Failed to create a non-planar face`,e))}}function FA(e,t){return TE(H().addHolesInFace(e.wrapped,t.map(e=>e.wrapped)))}function IA(e){try{var t=PT();if(e.length<3)return k(P(`POLYGON_MIN_POINTS`,`You need at least 3 points to make a polygon`));let n=[...e.slice(1),e[0]],r=t.u(new JT);return Ya(AA(yA([e,n]).map(([e,t])=>r.register(bA(e,t)))),e=>jA(r.register(e)))}catch(e){t.e=e}finally{t.d()}}function LA(e,t){return H().isNull(e.wrapped)?k(P(M.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function RA(e,t,n,r,i){let a=zE(e);if(!LE(a)){let o=cE(a).toUpperCase();return VE(e,a),W(a),k(xo(t,`${n}. Got ${o} instead.`,void 0,i?{diagnostics:i}:void 0,r))}return VE(e,a),O(a)}function zA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;let c=LA(e,`fuse: first operand`);if(A(c))return c;let l=LA(t,`fuse: second operand`);if(A(l))return l;if(!s)return RA(H().fuse(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`);let u=ok([e,t]),{shape:d,evolution:f,diagnostics:p}=H().fuseWithHistory(e.wrapped,t.wrapped,u,G,{optimisation:n,simplify:r,fuzzyValue:a});if(p.hasErrors){if(H().isNull(d))return H().dispose(d),console.warn(`brepjs: fuse history path produced null result; retrying without evolution tracking.`,p),RA(H().fuse(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`);console.warn(`brepjs: fuse reported OCCT warnings/errors but produced a shape. Continuing with result.`,p)}let m=RA(d,`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`,`Common causes: overlapping coplanar faces, zero-thickness geometry, or non-manifold input. Try autoHeal() on inputs first.`,p);return m.ok&&sk(f,[e,t],m.value),m}function BA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;let c=LA(e,`cut: base`);if(A(c))return c;let l=LA(t,`cut: tool`);if(A(l))return l;if(!s)return RA(H().cut(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_NOT_3D`,`Cut did not produce a 3D shape`);let u=ok([e,t]),{shape:d,evolution:f,diagnostics:p}=H().cutWithHistory(e.wrapped,t.wrapped,u,G,{optimisation:n,simplify:r,fuzzyValue:a});if(p.hasErrors){if(H().isNull(d))return H().dispose(d),console.warn(`brepjs: cut history path produced null result; retrying without evolution tracking.`,p),RA(H().cut(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_NOT_3D`,`Cut did not produce a 3D shape`);console.warn(`brepjs: cut reported OCCT warnings/errors but produced a shape. Continuing with result.`,p)}let m=RA(d,`CUT_NOT_3D`,`Cut did not produce a 3D shape`,`Common causes: tool does not fully intersect the base, or produces a zero-thickness sliver. Ensure the tool extends through the shape.`,p);return m.ok&&sk(f,[e,t],m.value),m}function VA(e,t,{simplify:n=!1,signal:r,fuzzyValue:i,unsafe:a,trackEvolution:o=!0}={}){if(r?.aborted)throw r.reason;let s=LA(e,`intersect: first operand`);if(A(s))return s;let c=LA(t,`intersect: second operand`);if(A(c))return c;if(!o)return RA(H().intersect(e.wrapped,t.wrapped,{simplify:n,fuzzyValue:i}),`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`);let l=ok([e,t]),{shape:u,evolution:d,diagnostics:f}=H().intersectWithHistory(e.wrapped,t.wrapped,l,G,{simplify:n,fuzzyValue:i});if(f.hasErrors){if(H().isNull(u))return H().dispose(u),console.warn(`brepjs: intersect history path produced null result; retrying without evolution tracking.`,f),RA(H().intersect(e.wrapped,t.wrapped,{simplify:n,fuzzyValue:i}),`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`);console.warn(`brepjs: intersect reported OCCT warnings/errors but produced a shape. Continuing with result.`,f)}let p=RA(u,`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`,`Shapes may not overlap. Verify they share a common volume before intersecting.`,f);return p.ok&&sk(d,[e,t],p.value),p}function HA(e,t,n,r,i,a,o,s,c){if(s?.aborted)throw s.reason;let l=n-t;if(l===1)return O({shape:hA(e,t),owned:!1});if(l===2){let n=zA(hA(e,t),hA(e,t+1),{optimisation:r,simplify:a?i:!1,trackEvolution:o,fuzzyValue:c,unsafe:!0,...s?{signal:s}:{}});return A(n)?n:O({shape:n.value,owned:!0})}let u=t+Math.ceil(l/2),d=HA(e,t,u,r,i,!1,o,s,c);if(A(d))return d;let f=HA(e,u,n,r,i,!1,o,s,c);if(A(f))return d.value.owned&&W(d.value.shape),f;let p=zA(d.value.shape,f.value.shape,{optimisation:r,simplify:i,trackEvolution:o,fuzzyValue:c,unsafe:!0,...s?{signal:s}:{}});return d.value.owned&&W(d.value.shape),f.value.owned&&W(f.value.shape),A(p)?p:O({shape:p.value,owned:!0})}function UA(e,{optimisation:t=`none`,simplify:n=!1,strategy:r=`native`,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;if(e.length===0)return k(P(`FUSE_ALL_EMPTY`,`fuseAll requires at least one shape`));if(e.length===1)return O(gA(e));for(let t=0;t<e.length;t++){let n=LA(hA(e,t),`fuseAll: shape at index ${t}`);if(A(n))return n}if(r===`native`){let o=RA(H().fuseAll(e.map(e=>e.wrapped),{optimisation:t,simplify:n,strategy:r,fuzzyValue:a,...i?{signal:i}:{}}),`FUSE_ALL_NOT_3D`,`fuseAll did not produce a 3D shape`);return o.ok&&s&&ck(e,o.value),o}let c=HA(e,0,e.length,t,n,!0,s,i,a);return A(c)?c:O(c.value.shape)}function WA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;if(t.length===0)return O(e);let c=LA(e,`cutAll: base`);if(A(c))return c;for(let e=0;e<t.length;e++){let n=LA(hA(t,e),`cutAll: tool at index ${e}`);if(A(n))return n}let l=[e,...t],u=RA(H().cutAll(e.wrapped,t.map(e=>e.wrapped),{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_ALL_NOT_3D`,`cutAll did not produce a 3D shape`);return u.ok&&s&&ck(l,u.value),u}function GA(e,t){let n=H(),r=PD(e.xDir,t),i=PD(e.yDir,t),a=PD(e.xDir,-t),o=PD(e.yDir,-t),s=e.origin,c=[...MD(MD(s,a),o)],l=[...MD(MD(s,r),o)],u=[...MD(MD(s,r),i)],d=[...MD(MD(s,a),i)],f=[n.makeLineEdge(c,l),n.makeLineEdge(l,u),n.makeLineEdge(u,d),n.makeLineEdge(d,c)],p=n.makeWire(f),m=n.makeFace(p,!0);for(let e of f)n.dispose(e);return n.dispose(p),m}function KA(e,t,{approximation:n=!0,planeSize:r=1e4}={}){if(H().isNull(e.wrapped))return k(P(M.NULL_SHAPE_INPUT,`section: shape is a null shape`));let i=GA(typeof t==`string`?j(QD(t)):t,r);try{return O(U(H().section(e.wrapped,i,n)))}catch(e){let n=e instanceof Error?e.message:String(e),r=typeof t==`string`?t:`custom`;return k(N(`SECTION_FAILED`,`Section with ${r} plane failed: ${n}`,e,{operation:`section`,plane:r},`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`))}finally{H().dispose(i)}}function qA(e){let t=H(),n=new Map,r=new Map;for(let i of e){let e=dD(i),a=e[0]?t.hashCode(e[0].wrapped,G):-1,o=e.length>1&&e[1]?t.hashCode(e[1].wrapped,G):a;r.set(i,[a,o]);for(let e of[a,o]){let t=n.get(e)??[];t.push(i),n.set(e,t)}}return{vertexToEdges:n,edgeVertexHashes:r}}function JA(e,t,n){let r=t.vertexToEdges.get(e);if(r)for(let i of r){if(n.has(i))continue;let r=t.edgeVertexHashes.get(i);if(r)return n.add(i),{edge:i,nextTip:r[0]===e?r[1]:r[0]}}}function YA(e,t,n){n.add(e);let r=[e],i=t.edgeVertexHashes.get(e);if(!i)return r;let a=[i[1],i[0]];for(let e=0;e<2;e++){let i=a[e];if(i===void 0)continue;let o=JA(i,t,n);for(;o;)e===0?r.push(o.edge):r.unshift(o.edge),i=o.nextTip,o=JA(i,t,n)}return r}function XA(e){let t=H(),n=qA(e),r=new Set,i=[];for(let a of e){if(r.has(a))continue;let e=YA(a,n,r);try{let n=t.makeWire(e.map(e=>e.wrapped));i.push(U(n))}catch{}}return i}function ZA(e){let t=H(),n=0,r=-1;for(let i=0;i<e.length;i++){let a=e[i];if(!a)continue;let o=t.boundingBox(a.wrapped),s=o.max[0]-o.min[0],c=o.max[1]-o.min[1],l=o.max[2]-o.min[2],u=s*s+c*c+l*l;u>r&&(r=u,n=i)}return n}function QA(e,t,n={}){let r=KA(e,t,n);if(!r.ok)return r;let i=uD(r.value);if(i.length===0){let e=cD(r.value);if(e.length===0)return k(N(`SECTION_FAILED`,`sectionToFace: section produced no geometry`,void 0,void 0,`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`));i.push(...XA(e))}if(i.length===0)return k(N(`SECTION_FAILED`,`sectionToFace: section produced no usable geometry`,void 0,void 0,`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`));let a=ZA(i),o=hA(i,a),s=i.filter((e,t)=>t!==a);return jA(o,s.length>0?s:void 0)}function $A(e,t){if(t.length===0)return O(e);if(H().isNull(e.wrapped))return k(P(M.NULL_SHAPE_INPUT,`split: shape is a null shape`));for(let e=0;e<t.length;e++)if(H().isNull(hA(t,e).wrapped))return k(P(M.NULL_SHAPE_INPUT,`splitShape: tool at index ${e} is a null shape`));try{return O(U(H().split(e.wrapped,t.map(e=>e.wrapped))))}catch(e){let n=e instanceof Error?e.message:String(e);return k(N(`SPLIT_FAILED`,`Split operation failed on ${t.length} tool(s): ${n}`,e,{operation:`split`,toolCount:t.length},`The splitting tools may not intersect the shape. Ensure tools cross through the shape's interior.`))}}function ej(e,t,n={}){let r=[];for(let i of t){let t=KA(e,i,n);if(A(t))return t;r.push(t.value)}return O(r)}function tj(e,t,n){if(t.length===0)return O(e);let r=n?.optimisation===`commonFace`?1:n?.optimisation===`sameFace`?2:0,i=H(),a=t.map(e=>({op:e.op,tool:e.tool.wrapped}));try{let o=i.booleanPipeline?.(e.wrapped,a,{glueMode:r});if(o===void 0)return nj(e,t,n);if(o===null)return k(N(`BOOLEAN_PIPELINE_FAILED`,`Boolean pipeline returned null shape`));let s=U(o);return LE(s)?O(s):(W(s),k(xo(`BOOLEAN_PIPELINE_NOT_3D`,`Pipeline result is not a 3D shape`)))}catch(e){return k(N(`BOOLEAN_PIPELINE_FAILED`,e instanceof Error?e.message:String(e)))}}function nj(e,t,n){let r=e,i={...n?.optimisation?{optimisation:n.optimisation}:{},unsafe:!0};for(let e of t){let t=e.op===`fuse`?zA(r,e.tool,i):e.op===`cut`?BA(r,e.tool,i):VA(r,e.tool,i);if(A(t))return t;r=j(t)}return O(r)}function rj(e){return U(H().sew(e.map(e=>e.wrapped)))}function ij(e,t=!1){let n=rj(e);return!t&&!PE(n)?k(xo(`WELD_NOT_SHELL`,`Could not make a shell from faces and shells`)):O(n)}function aj(e,t,n=[0,0,0],r=[0,0,1]){return DE(H().makeCylinder(e,t,[...n],[...r]))}function oj(e){return DE(H().makeSphere(e))}function sj(e,t,n,r=[0,0,0],i=[0,0,1]){return DE(H().makeCone(e,t,n,[...r],[...i]))}function cj(e,t,n=[0,0,0],r=[0,0,1]){return DE(H().makeTorus(e,t,[...n],[...r]))}function lj(e,t,n){return DE(H().makeEllipsoid(e,t,n))}function uj(e){return SE(H().makeVertex(e[0],e[1],e[2]))}function dj(e,t,n=1e-6){return Ya(cO(H().offset(e.wrapped,t,n)),e=>Ya(uO(e),e=>LE(e)?O(e):k(xo(`OFFSET_NOT_3D`,`Could not offset to a 3d shape`))))}function fj(e){return kE(H().makeCompound(e.map(e=>e.wrapped)))}function pj(e){try{var t=PT();let n=t.u(rj(e)),r=U(H().solidFromShell(n.wrapped));return FE(r)?O(r):(W(r),k(xo(`SOLID_BUILD_FAILED`,`Could not make a solid of faces and shells`)))}catch(e){t.e=e}finally{t.d()}}function mj(e){return{position:e.vertices,normal:e.normals,index:e.triangles}}function hj(e){return{position:e.vertices,normal:e.normals,index:e.triangles,groups:e.faceGroups.map((e,t)=>({start:e.start,count:e.count,materialIndex:t,faceId:e.faceId}))}}function gj(e){return{position:e.lines}}function _j(e,t){return{coarse:mj(e.coarse),fine:mj(e.fine),coarseDistance:t?.coarse??50,fineDistance:t?.fine??0}}function vj(e,t){let n=t?.step??50,r=t?.distances;if(r&&r.length!==e.length)throw Error(`toLODGeometryLevels: distances must have one entry per level (got ${r.length} for ${e.length} levels)`);let i=e.length-1;return e.map((e,t)=>({geometry:mj(e.mesh),distance:r?.[t]??(i-t)*n}))}function yj(e,t,n,r){if(t.length===0)return k(P(`CHAMFER_ANGLE_NO_EDGES`,`chamferDistAngle requires at least one edge`,void 0,{edgeCount:0}));if(n<=0)return k(P(`CHAMFER_ANGLE_BAD_DISTANCE`,`distance must be positive, got ${n}`,void 0,{distance:n}));if(r<=0||r>=90)return k(P(`CHAMFER_ANGLE_BAD_ANGLE`,`angleDeg must be in range (0, 90), got ${r}`,void 0,{angleDeg:r}));let i;try{let a=H(),o=t.map(e=>e.wrapped);i=a.chamferDistAngle(e.wrapped,o,n,r)}catch(e){return k(N(`CHAMFER_ANGLE_FAILED`,`chamferDistAngle kernel call failed: ${e instanceof Error?e.message:String(e)}`,e,{distance:n,angleDeg:r,edgeCount:t.length}))}let a=cO(i);if(A(a))return H().dispose(i),a;let o=U(a.value);return VE(i,o),LE(o)?O(o):(W(o),k(xo(`CHAMFER_ANGLE_NOT_3D`,`chamferDistAngle did not produce a 3D shape`)))}function bj(e){let t=H();return t.getNurbsCurveData?t.getNurbsCurveData(e.wrapped):null}function xj(e){let t=H();return t.getNurbsSurfaceData?t.getNurbsSurfaceData(e.wrapped):null}var Sj={cut:BA,cutAll:WA,fuse:zA,fuseAll:UA};function Cj(e){return{totalInputs:e.totalInputs,batchAttempts:e.batchAttempts,batchSucceeded:e.batchSucceeded,singletonFallbacks:e.singletonFallbacks,failedInputs:[...e.failedInputs].sort((e,t)=>e-t)}}function wj(e,t,n={}){return Tj(Sj,e,t,n)}function Tj(e,t,n,r={}){if(r.signal?.aborted)throw r.signal.reason;let i={totalInputs:n.length,batchAttempts:0,batchSucceeded:0,singletonFallbacks:0,failedInputs:new Set},a=Ej(e,t,n,0,r,i);return A(a)?a:O({shape:a.value,telemetry:Cj(i)})}function Ej(e,t,n,r,i,a){if(n.length===0)return O(t);if(n.length===1)return Dj(e,t,n,r,i,a);a.batchAttempts++;let o=Mj(()=>e.cutAll(t,n,i));if(o&&o.ok)return a.batchSucceeded++,o;if(i.signal?.aborted)throw i.signal.reason;let s=Math.floor(n.length/2),c=Ej(e,t,n.slice(0,s),r,i,a);return c.ok?Ej(e,c.value,n.slice(s),r+s,i,a):c}function Dj(e,t,n,r,i,a){a.singletonFallbacks++;let o=gA(n),s=Mj(()=>e.cut(t,o,i));if(s&&s.ok)return s;if(i.signal?.aborted)throw i.signal.reason;return a.failedInputs.add(r),O(t)}function Oj(e,t={}){return kj(Sj,e,t)}function kj(e,t,n={}){if(n.signal?.aborted)throw n.signal.reason;if(t.length===0)return k(P(M.FUSE_ALL_EMPTY,`fuseAllBisect requires at least one shape`));let r={totalInputs:t.length,batchAttempts:0,batchSucceeded:0,singletonFallbacks:0,failedInputs:new Set},i=Aj(e,t,0,n,r);return A(i)?i:O({shape:i.value,telemetry:Cj(r)})}function Aj(e,t,n,r,i){if(t.length===1)return O(gA(t));i.batchAttempts++;let a=Mj(()=>e.fuseAll(t,r));if(a&&a.ok)return i.batchSucceeded++,a;if(r.signal?.aborted)throw r.signal.reason;let o=Math.floor(t.length/2);return jj(e,Aj(e,t.slice(0,o),n,r,i),Aj(e,t.slice(o),n+o,r,i),t,n,o,r,i)}function jj(e,t,n,r,i,a,o,s){if(t.ok&&n.ok){s.singletonFallbacks++;let c=Mj(()=>e.fuse(t.value,n.value,o));if(c&&c.ok)return c;for(let e=a;e<r.length;e++)s.failedInputs.add(i+e);return t}if(t.ok){for(let e=a;e<r.length;e++)s.failedInputs.add(i+e);return t}if(n.ok){for(let e=0;e<a;e++)s.failedInputs.add(i+e);return n}return t}function Mj(e){try{return e()}catch{return null}}function Nj(e,t,n){return H().checkBoolean(e.wrapped,t.wrapped,n)}function Pj(e,t){return H().isNull(e.wrapped)?k(P(M.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function Fj(e,t){return H().isNull(e.wrapped)?k(P(M.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function Ij(e,t,n,r){let i=zE(e);if(!LE(i)){let a=cE(i).toUpperCase();return VE(e,i),W(i),k(xo(t,`${n}. Got ${a} instead.`,void 0,void 0,r))}return VE(e,i),O(i)}function Lj(e,t){let n=[],r=new Map;for(let i of e){let e=t(i)??0;typeof e==`number`&&e<=0||Array.isArray(e)&&(e[0]<=0||e[1]<=0)||(n.push(i),r.set(H().hashCode(i.wrapped,G),e))}return n.length===0?null:{edges:n,kernelParam:e=>r.get(H().hashCode(e,2147483647))??1}}function Rj(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a}={}){if(i?.aborted)throw i.reason;let o=Pj(e,`fuseWithEvolution: first operand`);if(A(o))return o;let s=Pj(t,`fuseWithEvolution: second operand`);if(A(s))return s;let c=ok([e,t]),{shape:l,evolution:u}=H().fuseWithHistory(e.wrapped,t.wrapped,c,G,{optimisation:n,simplify:r,fuzzyValue:a}),d=Ij(l,`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`,`Common causes: overlapping coplanar faces, zero-thickness geometry, or non-manifold input. Try autoHeal() on inputs first.`);return d.ok?(sk(u,[e,t],d.value),O({shape:d.value,evolution:u})):d}function zj(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a}={}){if(i?.aborted)throw i.reason;let o=Pj(e,`cutWithEvolution: base`);if(A(o))return o;let s=Pj(t,`cutWithEvolution: tool`);if(A(s))return s;let c=ok([e,t]),{shape:l,evolution:u}=H().cutWithHistory(e.wrapped,t.wrapped,c,G,{optimisation:n,simplify:r,fuzzyValue:a}),d=Ij(l,`CUT_NOT_3D`,`Cut did not produce a 3D shape`,`Common causes: tool does not fully intersect the base, or produces a zero-thickness sliver. Ensure the tool extends through the shape.`);return d.ok?(sk(u,[e,t],d.value),O({shape:d.value,evolution:u})):d}function Bj(e,t,{simplify:n=!1,signal:r,fuzzyValue:i}={}){if(r?.aborted)throw r.reason;let a=Pj(e,`intersectWithEvolution: first operand`);if(A(a))return a;let o=Pj(t,`intersectWithEvolution: second operand`);if(A(o))return o;let s=ok([e,t]),{shape:c,evolution:l}=H().intersectWithHistory(e.wrapped,t.wrapped,s,G,{simplify:n,fuzzyValue:i}),u=Ij(c,`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`,`Shapes may not overlap. Verify they share a common volume before intersecting.`);return u.ok?(sk(l,[e,t],u.value),O({shape:u.value,evolution:l})):u}function Vj(e,t,n){let r=Fj(e,`filletWithEvolution: shape`);if(A(r))return r;if(typeof n==`number`&&n<=0)return k(P(`INVALID_FILLET_RADIUS`,`Fillet radius must be positive`,void 0,void 0,`Provide a positive radius value greater than 0`));if(Array.isArray(n)&&(n[0]<=0||n[1]<=0))return k(P(`INVALID_FILLET_RADIUS`,`Fillet radii must both be positive`,void 0,void 0,`Both radius values must be greater than 0`));let i=t??cD(e);if(i.length===0)return k(P(M.FILLET_NO_EDGES,`No edges found for fillet`,void 0,void 0,`Check that the shape has edges, or adjust your edge finder criteria`));try{let t,r;if(typeof n==`function`){let e=Lj(i,n);if(!e)return k(P(M.FILLET_NO_EDGES,`No edges with positive radius for fillet`,void 0,void 0,`Check that the radius callback returns positive values`));t=e.edges,r=e.kernelParam}else t=[...i],r=n;let a=ok([e]),{shape:o,evolution:s}=H().filletWithHistory(e.wrapped,t.map(e=>e.wrapped),r,a,G),c=U(o);return LE(c)?(sk(s,[e],c),O({shape:c,evolution:s})):(W(c),k(N(M.FILLET_NOT_3D,`Fillet result is not a 3D shape`)))}catch(e){return k(N(`FILLET_FAILED`,`Fillet operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`fillet`,edgeCount:i.length,radius:n}))}}function Hj(e,t,n){let r=Fj(e,`chamferWithEvolution: shape`);if(A(r))return r;if(typeof n==`number`&&n<=0)return k(P(`INVALID_CHAMFER_DISTANCE`,`Chamfer distance must be positive`,void 0,void 0,`Provide a positive distance value greater than 0`));if(Array.isArray(n)&&(n[0]<=0||n[1]<=0))return k(P(`INVALID_CHAMFER_DISTANCE`,`Chamfer distances must both be positive`,void 0,void 0,`Both distance values must be greater than 0`));let i=t??cD(e);if(i.length===0)return k(P(M.CHAMFER_NO_EDGES,`No edges found for chamfer`));try{let t,r;if(typeof n==`function`){let e=Lj(i,n);if(!e)return k(P(M.CHAMFER_NO_EDGES,`No edges with positive distance for chamfer`));t=e.edges,r=e.kernelParam}else t=[...i],r=n;let a=ok([e]),{shape:o,evolution:s}=H().chamferWithHistory(e.wrapped,t.map(e=>e.wrapped),r,a,G),c=U(o);return LE(c)?(sk(s,[e],c),O({shape:c,evolution:s})):(W(c),k(N(M.CHAMFER_NOT_3D,`Chamfer result is not a 3D shape`)))}catch(e){return k(N(`CHAMFER_FAILED`,`Chamfer operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`chamfer`,edgeCount:i.length,distance:n}))}}function Uj(e,t,n,r=.001){let i=Fj(e,`shellWithEvolution: shape`);if(A(i))return i;if(n<=0)return k(P(`INVALID_THICKNESS`,`Shell thickness must be positive`));if(t.length===0)return k(P(`NO_FACES`,`At least one face must be specified for shell`));try{let i=ok([e]),{shape:a,evolution:o}=H().shellWithHistory(e.wrapped,t.map(e=>e.wrapped),n,i,G,r),s=U(a);return LE(s)?(sk(o,[e],s),O({shape:s,evolution:o})):(W(s),k(N(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`)))}catch(e){return k(N(`SHELL_FAILED`,`Shell operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`shell`,faceCount:t.length,thickness:n}))}}function Wj(e,t,n){try{let r=U(H().positionOnCurve(e.wrapped,t.wrapped,n));return LE(r)?O(r):(W(r),k(N(M.POSITION_ON_CURVE_FAILED,`positionOnCurve did not produce a 3D shape`)))}catch(e){return k(N(M.POSITION_ON_CURVE_FAILED,`Failed to position shape on curve at param ${n}`,e))}}function Gj(e,t){return H().isNull(e.wrapped)?k(P(M.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function Kj(e,t){if(typeof e==`number`&&e<=0)return k(P(t.code,t.scalar,void 0,void 0,t.scalarHint));if(Array.isArray(e)&&(e[0]<=0||e[1]<=0))return k(P(t.code,t.pair,void 0,void 0,t.pairHint))}function qj(e,t){let n=[],r=new Map;for(let i of e){let e=t(i)??0;typeof e==`number`&&e<=0||Array.isArray(e)&&(e[0]<=0||e[1]<=0)||(n.push(i),r.set(H().hashCode(i.wrapped,G),e))}return n.length===0?null:{edges:n,kernelParam:e=>{let t=r.get(H().hashCode(e,G));if(t===void 0)throw Error(`fillet/chamfer: edge hash not found — possible hash collision`);return t}}}function Jj(e,t,n,r,i){let a=U(t);return LE(a)?(sk(e,n,a),O(a)):(W(a),k(N(r,i)))}function Yj(e,t){if(typeof t!=`function`)return{filteredFaces:[...e],kernelAngle:t};let n=[],r=new Map;for(let i of e){let e=t(i);e===null||e===0||Math.abs(e)>=90||(n.push(i),r.set(H().hashCode(i.wrapped,G),e))}return{filteredFaces:n,kernelAngle:e=>{let t=r.get(H().hashCode(e,G));if(t===void 0)throw Error(`draft: face hash not found — possible hash collision`);return t}}}function Xj(e,t){let n=Gj(e,`thicken: shape`);if(A(n))return n;try{let n=ok([e]),{shape:r,evolution:i}=H().thickenWithHistory(e.wrapped,t,n,G),a=U(r);return sk(i,[e],a),O(a)}catch(e){return k(N(`THICKEN_FAILED`,`Thicken operation failed: ${e instanceof Error?e.message:String(e)}`,e))}}function Zj(e,t,n){let r=Gj(e,`fillet: shape`);if(A(r))return r;let i=Kj(n,{code:`INVALID_FILLET_RADIUS`,scalar:`Fillet radius must be positive`,pair:`Fillet radii must both be positive`,scalarHint:`Provide a positive radius value greater than 0`,pairHint:`Both radius values must be greater than 0`});if(i)return i;let a=t??cD(e);if(a.length===0)return k(P(M.FILLET_NO_EDGES,`No edges found for fillet`,void 0,void 0,`Check that the shape has edges, or adjust your edge finder criteria`));if(typeof n==`function`){let e=qj(a,n);return e?O({filteredEdges:e.edges,kernelRadius:e.kernelParam,selectedCount:a.length}):k(P(M.FILLET_NO_EDGES,`No edges with positive radius for fillet`,void 0,void 0,`Check that the radius callback returns positive values`))}return O({filteredEdges:[...a],kernelRadius:n,selectedCount:a.length})}function Qj(e,t,n,{trackEvolution:r=!0}={}){let i=Zj(e,t,n);if(A(i))return i;let{filteredEdges:a,kernelRadius:o,selectedCount:s}=i.value;try{let t=a.map(e=>e.wrapped);if(!r){let n=U(H().fillet(e.wrapped,t,o));return LE(n)?O(n):(W(n),k(N(M.FILLET_NOT_3D,`Fillet result is not a 3D shape`)))}let n=ok([e]),{shape:i,evolution:s}=H().filletWithHistory(e.wrapped,t,o,n,G);return Jj(s,i,[e],M.FILLET_NOT_3D,`Fillet result is not a 3D shape`)}catch(e){return k(N(`FILLET_FAILED`,`Fillet operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`fillet`,edgeCount:s,radius:n}))}}function $j(e,t,n){let r=Gj(e,`chamfer: shape`);if(A(r))return r;let i=Kj(n,{code:`INVALID_CHAMFER_DISTANCE`,scalar:`Chamfer distance must be positive`,pair:`Chamfer distances must both be positive`,scalarHint:`Provide a positive distance value greater than 0`,pairHint:`Both distance values must be greater than 0`});if(i)return i;let a=t??cD(e);if(a.length===0)return k(P(M.CHAMFER_NO_EDGES,`No edges found for chamfer`));try{let t,r;if(typeof n==`function`){let e=qj(a,n);if(!e)return k(P(M.CHAMFER_NO_EDGES,`No edges with positive distance for chamfer`));t=e.edges,r=e.kernelParam}else t=[...a],r=n;let i=ok([e]),{shape:o,evolution:s}=H().chamferWithHistory(e.wrapped,t.map(e=>e.wrapped),r,i,G);return Jj(s,o,[e],M.CHAMFER_NOT_3D,`Chamfer result is not a 3D shape`)}catch(e){return k(N(`CHAMFER_FAILED`,`Chamfer operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`chamfer`,edgeCount:a.length,distance:n}))}}function eM(e,t,n,r=.001,{trackEvolution:i=!0}={}){let a=Gj(e,`shell: shape`);if(A(a))return a;if(n<=0)return k(P(`INVALID_THICKNESS`,`Shell thickness must be positive`));if(t.length===0)return k(P(`NO_FACES`,`At least one face must be specified for shell`));try{if(!i){let i=U(H().shell(e.wrapped,t.map(e=>e.wrapped),n,r));return LE(i)?O(i):(W(i),k(N(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`)))}let a=ok([e]),{shape:o,evolution:s}=H().shellWithHistory(e.wrapped,t.map(e=>e.wrapped),n,a,G,r),c=U(o);return LE(c)?(sk(s,[e],c),O(c)):(W(c),k(N(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`)))}catch(e){return k(N(`SHELL_FAILED`,`Shell operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`shell`,faceCount:t.length,thickness:n}))}}function tM(e,t,n=1e-6){let r=Gj(e,`offset: shape`);if(A(r))return r;if(Math.abs(t)<1e-10)return k(P(`ZERO_OFFSET`,`Offset distance cannot be zero`));try{let r=ok([e]),{shape:i,evolution:a}=H().offsetWithHistory(e.wrapped,t,r,G,n),o=U(i);return LE(o)?(sk(a,[e],o),O(o)):(W(o),k(N(`OFFSET_RESULT_NOT_3D`,`Offset result is not a 3D shape`)))}catch(e){return k(N(`OFFSET_FAILED`,`Offset operation failed: ${e instanceof Error?e.message:String(e)}`,e))}}function nM(e,t,n){let r=Gj(e,`draft: shape`);if(A(r))return r;if(typeof n==`number`){if(Math.abs(n)<1e-10)return k(P(M.DRAFT_INVALID_ANGLE,`Draft angle cannot be zero`,void 0,void 0,`Provide a non-zero angle in degrees`));if(Math.abs(n)>=90)return k(P(M.DRAFT_INVALID_ANGLE,`Draft angle must be between -90 and 90 degrees (exclusive)`,void 0,void 0,`Typical draft angles are 1-5 degrees for injection molding`))}if(t.length===0)return k(P(M.DRAFT_NO_FACES,`No faces specified for draft`,void 0,void 0,`Select at least one face to apply the draft angle to`))}function rM(e,t,n,r,i){let a=nM(e,t,i);if(a)return a;try{let{filteredFaces:a,kernelAngle:o}=Yj(t,i);if(a.length===0)return k(P(M.DRAFT_NO_FACES,`No faces with valid draft angle`,void 0,void 0,`Check that the angle callback returns non-zero values between -90 and 90 degrees`));let s=ok([e]),{shape:c,evolution:l}=H().draftWithHistory(e.wrapped,a.map(e=>e.wrapped),[n[0],n[1],n[2]],[r[0],r[1],r[2]],o,s,G);return Jj(l,c,[e],M.DRAFT_NOT_3D,`Draft result is not a 3D shape`)}catch(e){let n=e instanceof Error?e.message:String(e);return k(N(M.DRAFT_FAILED,`Draft operation failed: ${n}`,e,{operation:`draft`,faceCount:t.length,angle:i}))}}function iM(e,t,n){if(n.length===0)return k(P(M.VARIABLE_FILLET_FAILED,`radii must contain at least one radius spec`));for(let e of n)if(e.radius<=0)return k(P(M.VARIABLE_FILLET_FAILED,`All radius values must be positive`));let r=H();try{let i=JSON.stringify({edge:r.hashCode(t.wrapped,G),radii:n.map(e=>({param:e.param,radius:e.radius}))}),a=U(r.filletVariable(e.wrapped,i));return LE(a)?FE(a)?O(a):(W(a),k(N(M.VARIABLE_FILLET_FAILED,`Variable-radius fillet did not produce a solid`))):(W(a),k(N(M.VARIABLE_FILLET_FAILED,`Variable-radius fillet did not produce a 3D shape`)))}catch(e){return k(N(M.VARIABLE_FILLET_FAILED,`Variable-radius fillet failed`,e))}}function aM(e){return TD(e)}function oM(e){if(!FE(e))return k(P(`NOT_A_SOLID`,`Input shape is not a solid`));let t=aM(e);try{let n=H().healSolid(e.wrapped);if(!n)return t?O(e):k(N(M.HEAL_NO_EFFECT,`Solid healing had no effect — shape is still invalid`));let r=U(n);return FE(r)?(sD(r),aM(r)?O(r):(W(r),k(N(`HEAL_SOLID_INCOMPLETE`,`Healed result is still invalid after ShapeFix_Solid`)))):(W(r),k(N(`HEAL_RESULT_NOT_SOLID`,`Healed result is not a solid`)))}catch(e){return k(N(`HEAL_SOLID_FAILED`,`Solid healing failed`,e))}}function sM(e){if(!NE(e))return k(P(`NOT_A_FACE`,`Input shape is not a face`));try{let t=U(H().healFace(e.wrapped));return NE(t)?O(t):(W(t),k(N(`HEAL_RESULT_NOT_FACE`,`Healed result is not a face`)))}catch(e){return k(N(`HEAL_FACE_FAILED`,`Face healing failed`,e))}}function cM(e,t){if(!ME(e))return k(P(`NOT_A_WIRE`,`Input shape is not a wire`));try{let n=U(H().healWire(e.wrapped,t?.wrapped));return ME(n)?O(n):(W(n),k(N(`HEAL_RESULT_NOT_WIRE`,`Healed result is not a wire`)))}catch(e){return k(N(`HEAL_WIRE_FAILED`,`Wire healing failed`,e))}}function lM(e){return FE(e)?oM(e):NE(e)?sM(e):ME(e)?cM(e):O(e)}function uM(e,t){let n=t?.fixWires!==!1,r=t?.fixFaces!==!1,i=t?.fixSolids!==!1,a=t?.fixSelfIntersection===!0,o=t?.sewTolerance,s=[],c=[];if(aM(e))return O({shape:e,report:{isValid:!0,alreadyValid:!0,wiresHealed:0,facesHealed:0,solidHealed:!1,steps:[`Shape already valid`],diagnostics:[{name:`validation`,attempted:!0,succeeded:!0}]}});s.push(`Shape invalid — applying shape-level healing`);let l=uD(e).length,u=lD(e).length,d=e,f=!1,p=t=>{let n=d;d=t,n!==e&&n.wrapped!==t.wrapped&&W(n)};if(o!==void 0)try{p(U(H().sew([d.wrapped],o))),s.push(`Applied sewing with tolerance ${o}`),c.push({name:`sew`,attempted:!0,succeeded:!0,detail:`tolerance=${o}`})}catch(e){let t=e instanceof Error?e.message:String(e);s.push(`Sewing failed: ${t}`),c.push({name:`sew`,attempted:!0,succeeded:!1,detail:t})}if(a&&n){let e=uD(d),t=0;for(let n of e)try{H().fixSelfIntersection(n.wrapped),t++}catch{}s.push(`Self-intersection fix: ${t}/${e.length} wires`),c.push({name:`fixSelfIntersection`,attempted:!0,succeeded:t>0,detail:`${t}/${e.length} wires fixed`})}if(FE(d)&&i||NE(d)&&r||ME(d)&&n){let t=lM(d);Ka(t)?(p(t.value),FE(e)?(f=!0,s.push(`Applied ShapeFix_Solid`),c.push({name:`healSolid`,attempted:!0,succeeded:!0})):NE(e)?(s.push(`Applied ShapeFix_Face`),c.push({name:`healFace`,attempted:!0,succeeded:!0})):(s.push(`Applied ShapeFix_Wire`),c.push({name:`healWire`,attempted:!0,succeeded:!0}))):(s.push(`Shape-level healing failed`),c.push({name:`healShape`,attempted:!0,succeeded:!1}))}else c.push({name:`healShape`,attempted:!1,succeeded:!1,detail:`skipped by options`});let m=uD(d).length,h=lD(d).length,g=Math.abs(m-l),_=Math.abs(h-u);g>0&&s.push(`Wire count changed by ${g}`),_>0&&s.push(`Face count changed by ${_}`);let v=aM(d);return s.push(v?`Final validation: valid`:`Final validation: still invalid`),c.push({name:`finalValidation`,attempted:!0,succeeded:v}),O({shape:d,report:{isValid:v,alreadyValid:!1,wiresHealed:g,facesHealed:_,solidHealed:f,steps:s,diagnostics:c}})}function dM(e){try{return O(U(H().fixShape(e.wrapped)))}catch(e){return k(N(M.FIX_SHAPE_FAILED,`ShapeFix_Shape failed`,e))}}function fM(e){try{let t=U(H().solidFromShell(e.wrapped));return FE(t)?aM(t)?O(t):(W(t),k(N(M.SOLID_FROM_SHELL_FAILED,`solidFromShell produced an invalid solid`))):(W(t),k(N(M.SOLID_FROM_SHELL_FAILED,`solidFromShell did not produce a solid`)))}catch(e){return k(N(M.SOLID_FROM_SHELL_FAILED,`Failed to create solid from shell`,e))}}function pM(e){try{let t=U(H().fixSelfIntersection(e.wrapped));return ME(t)?O(t):(W(t),k(N(M.FIX_SELF_INTERSECTION_FAILED,`Result is not a wire`)))}catch(e){return k(N(M.FIX_SELF_INTERSECTION_FAILED,`Failed to fix wire self-intersection`,e))}}function mM(e,{profile:t,endFactor:n=1}){return e<1e-10?k(P(`INVALID_EXTRUSION_LENGTH`,`Extrusion length too small (< 1e-10)`)):t!==`s-curve`&&t!==`linear`?k(P(`UNSUPPORTED_PROFILE`,`Unsupported extrusion profile: ${String(t)}`)):O(H().buildExtrusionLaw(t,e,n).Trim(0,e,1e-6))}function hM(e,t){let n=H(),r=n.makeLineEdge([...e],[...t]),i=n.makeWire([r]);return n.dispose(r),U(i)}function gM(e,t,n,r,i,a=!1){return U(H().makeHelixWire(e,t,n,[...r],[...i],a))}function _M(e){let t=U(e.shape),n=U(e.firstShape),r=U(e.lastShape),i=()=>{W(t),W(n),W(r)};return LE(t)?ME(n)?ME(r)?O([t,n,r]):(i(),k(xo(`SWEEP_END_NOT_WIRE`,`Sweep did not produce an end Wire`))):(i(),k(xo(`SWEEP_START_NOT_WIRE`,`Sweep did not produce a start Wire`))):(i(),k(xo(`SWEEP_NOT_3D`,`Sweep did not produce a 3D shape`)))}function vM(e,t,n={},r=!1){if(n.mode===`simple`&&!r){let n=U(H().simplePipe(e.wrapped,t.wrapped));return LE(n)?O(n):(W(n),k(xo(`SWEEP_NOT_3D`,`Simple pipe did not produce a 3D shape`)))}let{frenet:i=!1,auxiliarySpine:a,law:o=null,transitionMode:s=`right`,withContact:c,support:l,forceProfileSpineOthogonality:u,tolerance:d,boundTolerance:f,angularTolerance:p,maxDegree:m,maxSegments:h}=n,g=H(),_=s===`round`?!0:!!u,v=g.sweepPipeShell(e.wrapped,t.wrapped,{transitionMode:s,contact:!!c,correction:_,frenet:i,shellMode:r,...a?.wrapped?{auxiliary:a.wrapped}:{},...o===null?{}:{law:o},...l===null?{}:{support:l},tolerance:d,boundTolerance:f,angularTolerance:p,maxDegree:m,maxSegments:h});if(r&&typeof v==`object`&&`firstShape`in v)return _M(v);let y=U(v);return LE(y)?O(y):(W(y),k(xo(`SWEEP_NOT_3D`,`Sweep did not produce a 3D shape`)))}function yM(e,t,n,r){return vM(e,hM(t,MD(t,n)),{support:r})}function bM(e,t,n,r,i=!1){try{var a=PT();let o=RD(n);if(o<1e-10)return k(P(`ZERO_LENGTH_EXTRUSION`,`Extrusion vector cannot have zero length`));let s=MD(t,n),c=a.u(hM(t,s)),l=null;if(r){let e=mM(o,r);if(A(e))return e;l=e.value}return vM(e,c,{law:l},i)}catch(e){a.e=e}finally{a.d()}}function xM(e,t,n,r,i,a=!1){try{var o=PT();if(Math.abs(t)<1e-10)return k(P(`ZERO_TWIST_ANGLE`,`Twist angle cannot be zero`));let s=RD(r);if(s<1e-10)return k(P(`ZERO_LENGTH_EXTRUSION`,`Extrusion vector cannot have zero length`));let c=MD(n,r),l=o.u(hM(n,c)),u=t<0,d=360/Math.abs(t)*s,f=o.u(gM(d,s,1,n,r,u)),p=null;if(i){let e=mM(s,i);if(A(e))return e;p=e.value}return vM(e,l,{auxiliarySpine:f,law:p},a)}catch(e){o.e=e}finally{o.d()}}function SM(e){let t=e.map(e=>e.location);for(let e=0;e<t.length;e++){let n=t[e];if(n!==void 0&&(n<0||n>1))return P(M.MULTI_SWEEP_FAILED,`Section ${e} location ${n} is out of range [0, 1]`)}let n=t.filter(e=>e!==void 0);for(let e=1;e<n.length;e++)if((n[e]??0)<=(n[e-1]??0))return P(M.MULTI_SWEEP_FAILED,`Section locations must be strictly increasing`)}function CM(e,t,n){let[r,i]=n.curveParameters(t.wrapped),a=i-r,o=Array(e.length);for(let t=0;t<e.length;t++){let n=e[t]?.location;o[t]=n===void 0?NaN:r+n*a}let s=-1,c=r;for(let t=0;t<=e.length;t++){let n=t===e.length;if(!n&&!Number.isNaN(o[t]??NaN)||n){let e=n?i:o[t]??i,a=t-s-1;for(let t=1;t<=a;t++)o[s+t]=c+t/(a+1)*(e-c);n||(s=t,c=o[t]??r)}}for(let e=1;e<o.length;e++)if((o[e]??0)<=(o[e-1]??0))return k(P(M.MULTI_SWEEP_FAILED,`Computed section parameters are not strictly increasing at index ${e} (${o[e-1]?.toFixed(4)} >= ${o[e]?.toFixed(4)})`));return O(o)}function wM(e,t,n){if(e.length<2)return k(P(M.MULTI_SWEEP_INSUFFICIENT_SECTIONS,`Multi-section sweep requires at least 2 sections, got ${e.length}`));let{solid:r=!0,ruled:i=!1,tolerance:a=1e-6}=n??{},o=SM(e);if(o)return k(o);try{let n=H(),o=CM(e,t,n);if(A(o))return o;let s=o.value,c=[],l=[];try{for(let r=0;r<e.length;r++){let i=s[r],a=e[r];if(i===void 0||a===void 0)continue;let o=n.positionOnCurve(a.wire.wrapped,t.wrapped,i);c.push(o),l.push(n.downcast(o,`wire`))}let o=U(n.loftAdvanced(l,{solid:r,ruled:i,tolerance:a}));return LE(o)?O(o):(W(o),k(xo(`MULTI_SWEEP_NOT_3D`,`Multi-section sweep did not produce a 3D shape`)))}finally{for(let e of l)n.dispose(e);for(let e of c)n.dispose(e)}}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.MULTI_SWEEP_FAILED,`Multi-section sweep failed: ${t}`,e,void 0,`Common causes: profile too large for path curvature, self-intersecting result, or discontinuous path. Try simplifying the profile or path.`))}}function TM(e,t,n,r={}){let{transition:i=`transformed`,solid:a=!0,tolerance:o}=r;try{let r=H(),s=!a,c=n.length>0?n[0]?.wrapped:void 0,l=r.sweepPipeShell(e.wrapped,t.wrapped,{transitionMode:i,...c?{auxiliary:c}:{},shellMode:s,...o===void 0?{}:{tolerance:o,boundTolerance:o}}),u=U(typeof l==`object`&&`shape`in l?l.shape:l);return LE(u)?O(u):(W(u),k(xo(`GUIDED_SWEEP_NOT_3D`,`Guided sweep did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.GUIDED_SWEEP_FAILED,`Guided sweep failed: ${t}`,e,void 0,`Common causes: profile too large for path curvature, self-intersecting result, or discontinuous path. Try simplifying the profile or path.`))}}function EM(e,t){if(H().isNull(e.wrapped))return k(P(M.NULL_SHAPE_INPUT,`extrude: face is a null shape`));if(RD(t)<1e-10)return k(P(`EXTRUDE_ZERO_VECTOR`,`extrude: extrusion vector has zero length`));try{let n=H(),r=RD(t),i=VD(t),a=n.extrude(e.wrapped,[...i],r),o=DE(n.downcast(a,`solid`));return VE(a,o),O(o)}catch(e){return k(N(`EXTRUDE_FAILED`,`Extrusion operation failed`,e,{operation:`extrude`,vectorLength:RD(t)}))}}function DM(e,t=[0,0,0],n=[0,0,1],r=2*Math.PI){if(H().isNull(e.wrapped))return k(P(M.NULL_SHAPE_INPUT,`revolve: face is a null shape`));try{let i=U(H().revolveVec(e.wrapped,[...t],[...n],r));return LE(i)?O(i):(W(i),k(xo(`REVOLUTION_NOT_3D`,`Revolution did not produce a 3D shape`)))}catch(e){return k(N(`REVOLVE_FAILED`,`Revolution operation failed`,e,{operation:`revolve`,angle:r}))}}function OM(e){if(e.length===0)return O([]);let t=H(),n=[];for(let t=0;t<e.length;t++){let r=e[t];if(!r)continue;let i=typeof r.height==`number`?[0,0,r.height]:r.height,a=RD(i);if(a<1e-10)return k(P(`EXTRUDE_ALL_ZERO_VECTOR`,`extrudeAll: entry ${t} has zero-length extrusion vector`));let o=[...VD(i)];n.push({face:r.face.wrapped,direction:o,length:a})}try{return O((t.extrudeBatch?.(n)??n.map(e=>t.extrude(e.face,e.direction,e.length))).map(e=>{let n=DE(t.downcast(e,`solid`));return VE(e,n),n}))}catch(e){return k(N(`EXTRUDE_ALL_FAILED`,`Batch extrusion operation failed`,e))}}function kM(e,{ruled:t=!0,startPoint:n,endPoint:r,tolerance:i=1e-6}={},a=!1){if(e.length===0&&!n&&!r)return k(P(`LOFT_EMPTY`,`Loft requires at least one wire or start/end point`));let o=H(),s=n?o.makeVertex(...OD(n)):void 0,c=r?o.makeVertex(...OD(r)):void 0;try{let n=U(o.loftAdvanced(e.map(e=>e.wrapped),{solid:!a,ruled:t,tolerance:i,...s?{startVertex:s}:{},...c?{endVertex:c}:{}}));return LE(n)?O(n):(W(n),k(xo(`LOFT_NOT_3D`,`Loft did not produce a 3D shape`)))}catch(e){return k(N(`LOFT_FAILED`,`Loft operation failed`,e,void 0,`Common causes: wire profiles with different edge counts, self-intersecting result, or profiles too far apart. Ensure profiles are compatible and ordered.`))}}function AM(e){if(e.length===0)return O([]);let t=H(),n=[],r=e.map(e=>{let r=e.startPoint?t.makeVertex(...OD(e.startPoint)):void 0,i=e.endPoint?t.makeVertex(...OD(e.endPoint)):void 0;return r&&n.push(r),i&&n.push(i),{wires:e.wires.map(e=>e.wrapped),solid:!0,ruled:e.ruled??!0,tolerance:e.tolerance??1e-6,startVertex:r,endVertex:i}});try{let e=t.loftBatch?.(r)??r.map(e=>t.loftAdvanced(e.wires,{solid:e.solid,ruled:e.ruled,tolerance:e.tolerance,startVertex:e.startVertex,endVertex:e.endVertex})),n=[];for(let t of e){let e=U(t);if(!LE(e))return W(e),k(xo(`LOFT_ALL_NOT_3D`,`Batch loft entry did not produce a 3D shape`));n.push(e)}return O(n)}catch(e){return k(N(`LOFT_ALL_FAILED`,`Batch loft operation failed`,e))}finally{for(let e of n)t.dispose(e)}}var jM=new WeakMap;function MM(e,t){return jM.get(e)?.get(t)}function NM(e,t,n){let r=jM.get(e);r||(r=new Map,jM.set(e,r)),r.set(t,n)}function PM(e){return H().isNull(e.wrapped)}function FM(e){return k(P(M.NULL_SHAPE_INPUT,`${e}: shape is a null shape`))}function IM(e){let t=MM(e.wrapped,`volume`);if(t)return O(t);if(PM(e))return FM(`measureVolumeProps`);let n=H(),r=n.shapeType(e.wrapped);if(r!==`solid`&&r!==`compsolid`&&r!==`compound`){let t={mass:0,volume:0,centerOfMass:[0,0,0]};return NM(e.wrapped,`volume`,t),O(t)}let i=n.volume(e.wrapped),a=ZE(()=>n.centerOfMass(e.wrapped),M.CENTER_OF_MASS_FAILED,`Failed to compute center of mass`);if(!a.ok)return a;let o={mass:i,volume:i,centerOfMass:a.value};return NM(e.wrapped,`volume`,o),O(o)}function LM(e){let t=MM(e.wrapped,`surface`);if(t)return O(t);if(PM(e))return FM(`measureSurfaceProps`);let n=H(),r=n.area(e.wrapped),i=ZE(()=>n.centerOfMass(e.wrapped),M.CENTER_OF_MASS_FAILED,`Failed to compute center of mass`);if(!i.ok)return i;let a={mass:r,area:r,centerOfMass:i.value};return NM(e.wrapped,`surface`,a),O(a)}function RM(e){let t=MM(e.wrapped,`linear`);if(t)return O(t);if(PM(e))return FM(`measureLinearProps`);let n=H(),r=n.length(e.wrapped),i={mass:r,length:r,centerOfMass:n.linearCenterOfMass(e.wrapped)};return NM(e.wrapped,`linear`,i),O(i)}function zM(e){let t=IM(e);return t.ok?O(t.value.mass):t}function BM(e){let t=LM(e);return t.ok?O(t.value.mass):t}function VM(e){let t=RM(e);return t.ok?O(t.value.mass):t}function HM(e,t){return PM(e)||PM(t)?FM(`measureDistance`):O(H().distance(e.wrapped,t.wrapped).value)}function UM(e,t){if(PM(e)||PM(t))return FM(`measureDistanceProps`);let n=H().distance(e.wrapped,t.wrapped);return O({distance:n.value,point1:n.point1,point2:n.point2})}function WM(e){if(PM(e))return FM(`createDistanceQuery`);let t=H().createDistanceQuery(e.wrapped);return O({distanceTo(e){return PM(e)?FM(`createDistanceQuery.distanceTo`):O(t.distanceTo(e.wrapped).value)},dispose(){t.dispose()}})}function GM(e,t,n){if(PM(e))return FM(`measureCurvatureAt`);let r=H().surfaceCurvature(e.wrapped,t,n);return O({mean:r.mean,gaussian:r.gaussian,maxCurvature:r.max,minCurvature:r.min,maxDirection:r.maxDirection,minDirection:r.minDirection})}function KM(e){if(PM(e))return FM(`measureCurvatureAtMid`);let t=vO(e),n=(t.uMin+t.uMax)/2,r=(t.vMin+t.vMax)/2,i=H().surfaceCurvature(e.wrapped,n,r);return O({mean:i.mean,gaussian:i.gaussian,maxCurvature:i.max,minCurvature:i.min,maxDirection:i.maxDirection,minDirection:i.minDirection})}function qM(e,t){return e.map(e=>GE(e,t))}function JM(e,t){let n=H(),r=n.iterShapes(e,t),i=[],a=new Map;for(let e of r){let r=n.hashCode(e,G),o=a.get(r);if(o?.some(t=>n.isSame(t,e))){n.dispose(e);continue}let s=WE(e,t);i.push(s),o?o.push(s.wrapped):a.set(r,[s.wrapped])}return i}function YM(e){let t=H(),n=new Map;for(let r of e){let e=t.hashCode(r.wrapped,G),i=n.get(e);i?i.push(r):n.set(e,[r])}return n}function XM(e,t,n){let r=H();return e.get(n)?.find(e=>r.isSame(e.wrapped,t))}function ZM(e){let t=aD(e);if(t.edgeToFaces)return t.edgeToFaces;let n=H(),r=lD(e),i=YM(cD(e)),a=new Map;for(let e of r)for(let t of n.iterShapes(e.wrapped,`edge`)){let r=n.hashCode(t,G),o=XM(i,t,r);if(n.dispose(t),!o)continue;let s=a.get(r);s||(s=[],a.set(r,s)),s.some(t=>n.isSame(t.edge,o.wrapped)&&n.isSame(t.face,e.wrapped))||s.push({edge:o.wrapped,face:e.wrapped})}return t.edgeToFaces=a,a}function QM(e){let t=aD(e);if(t.vertexToFaces)return t.vertexToFaces;let n=H(),r=lD(e),i=YM(dD(e)),a=new Map;for(let e of r)for(let t of n.iterShapes(e.wrapped,`vertex`)){let r=n.hashCode(t,G),o=XM(i,t,r);if(n.dispose(t),!o)continue;let s=a.get(r);s||(s=[],a.set(r,s)),s.some(t=>n.isSame(t.vertex,o.wrapped)&&n.isSame(t.face,e.wrapped))||s.push({vertex:o.wrapped,face:e.wrapped})}return t.vertexToFaces=a,a}function $M(e,t){let n=H(),r=ZM(e),i=n.hashCode(t.wrapped,G),a=r.get(i)??[],o=[],s=new Map;for(let e of a){if(!n.isSame(e.edge,t.wrapped))continue;let r=n.hashCode(e.face,G),i=s.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),o.push(e.face)):(s.set(r,[e.face]),o.push(e.face))}return qM(o,`face`)}function eN(e,t){let n=H(),r=QM(e),i=n.hashCode(t.wrapped,G),a=r.get(i)??[],o=[],s=new Map;for(let e of a){if(!n.isSame(e.vertex,t.wrapped))continue;let r=n.hashCode(e.face,G),i=s.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),o.push(e.face)):(s.set(r,[e.face]),o.push(e.face))}return qM(o,`face`)}function tN(e){return JM(e.wrapped,`edge`)}function nN(e){return JM(e.wrapped,`vertex`)}function rN(e){return JM(e.wrapped,`wire`)}function iN(e){return JM(e.wrapped,`vertex`)}function aN(e,t){let n=H(),r=ZM(e),i=JM(t.wrapped,`edge`),a=[],o=new Map;for(let e of i){let i=n.hashCode(e.wrapped,G),s=r.get(i)??[];for(let e of s){if(n.isSame(e.face,t.wrapped))continue;let r=n.hashCode(e.face,G),i=o.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),a.push(e.face)):(o.set(r,[e.face]),a.push(e.face))}}for(let e of i)e[Symbol.dispose]();return qM(a,`face`)}var oN=new Map;function sN(e,t){let n=H(),r=CT()??``;if(oN.get(r)!==!1){let i;try{i=n.sharedEdges(e.wrapped,t.wrapped);let a=i.map(e=>WE(e,`edge`));return oN.set(r,!0),a}catch(e){if(i)for(let e of i)n.dispose(e);if(!l(e))throw e;oN.set(r,!1)}}return cN(e,t)}function cN(e,t){let n=H(),r=n.iterShapes(e.wrapped,`edge`),i=n.iterShapes(t.wrapped,`edge`),a=new Map;for(let e of i){let t=n.hashCode(e,G),r=a.get(t);r||(r=[],a.set(t,r)),r.push(e)}let o=[];for(let e of r)a.get(n.hashCode(e,2147483647))?.some(t=>n.isSame(e,t))?o.push(WE(e,`edge`)):n.dispose(e);for(let e of i)n.dispose(e);return o}var lN=new Map;function uN(e,t){let n=H(),r=CT()??``;if(lN.get(r)!==!1)try{let i=n.adjacentFaces(e.wrapped,t.wrapped);lN.set(r,!0);try{return i.map(e=>n.hashCode(e,G))}finally{for(let e of i)n.dispose(e)}}catch(e){if(!l(e))throw e;lN.set(r,!1)}return aN(e,t).map(e=>n.hashCode(e.wrapped,G))}function dN(e,t){let n=0,r=hO(t);if(e.surfaceType!==void 0)if(r===e.surfaceType)n+=1;else return-1/0;if(e.normal!==void 0){let r=SO(t),i=e.normal[0]*r[0]+e.normal[1]*r[1]+e.normal[2]*r[2];if(i<.707)return-1/0;n+=i}if(e.centroid!==void 0){let r=CO(t),i=e.centroid[0]-r[0],a=e.centroid[1]-r[1],o=e.centroid[2]-r[2],s=i*i+a*a+o*o;if(s>100)return-1/0;n-=s/100}if(e.area!==void 0&&e.area>0){let r=BM(t);if(r.ok&&r.value>0){let t=Math.abs(Math.log(e.area/r.value));t>1&&(n-=t)}}return n}function fN(e){let t=hO(e),n=SO(e),r=CO(e),i=BM(e);return{entityType:`face`,surfaceType:t,normal:n,centroid:r,area:i.ok?i.value:void 0}}var pN=.9;function mN(e){if(e[2]>pN)return`box:top`;if(e[2]<-.9)return`box:bottom`;if(e[1]>pN)return`box:back`;if(e[1]<-.9)return`box:front`;if(e[0]>pN)return`box:right`;if(e[0]<-.9)return`box:left`}function hN(e,t){if(hO(t)!==`PLANE`)return;let n=SO(t)[2];if(n>pN)return`${e}:top`;if(n<-.9)return`${e}:bottom`}function gN(e){return hO(e)===`CYLINDRE`?`cylinder:lateral`:hN(`cylinder`,e)}function _N(e){return hO(e)===`CONE`?`cone:lateral`:hN(`cone`,e)}function vN(e){return hO(e)===`SPHERE`?`sphere:surface`:void 0}var yN={box:e=>mN(SO(e)),cylinder:gN,cone:_N,sphere:vN};function bN(e,t){let n=new Map,r=yN[t],i=H(),a=0;for(let o of i.iterShapes(e.wrapped,`face`)){let e=UE(o,`face`);try{let i=r?.(e),o=i!==void 0&&!n.has(i)?i:`${t}:face_${a}`;n.set(o,[wk(e)]),a++}finally{HE(e,o)}}return n}function xN(e,t,n){return{origin:e,role:t,hint:fN(n)}}function SN(e,t){let n=[];for(let r of e){if(t.deleted.has(r))continue;let e=t.modified.get(r),i=e&&e.length>0?e:[r];for(let e of i)n.includes(e)||n.push(e)}return n}function CN(e,t,n){let r=e.get(t);if(!r)return e;let i=new Map;for(let[e,t]of r){let r=SN(t,n);r.length>0&&i.set(e,r)}let a=new Map;for(let[n,r]of e)a.set(n,n===t?i:r);return a}var wN=.1,TN=.5;function EN(e,t,n){let r=-1/0,i,a=-1/0,o=[];for(let s of t){let t=n(e,s);t>TN&&o.push([s,t]),t>r?(a=r,r=t,i=s):t>a&&(a=t)}return i!==void 0&&r>TN?r-a<wN&&o.length>1?{kind:`ambiguous`,candidates:o.filter(([,e])=>e>=r-wN).map(([e])=>e)}:{kind:`match`,face:i}:{kind:`none`}}function DN(e,t,n,r){let i=lD(n),a=r??dN,o=t.get(e.origin)?.get(e.role);if(o!==void 0&&o.length>0){let t=i.filter(e=>o.includes(wk(e)));if(t.length===1){let[e]=t;if(e!==void 0)return{face:e,confidence:`exact`}}else if(t.length===0)return{ref:e,reason:`deleted`};else{let n=EN(e.hint,t,a);if(n.kind===`match`)return{face:n.face,confidence:`geometric-fallback`};if(n.kind===`ambiguous`)return{ref:e,reason:`ambiguous`,candidates:n.candidates}}}let s=EN(e.hint,i,a);return s.kind===`match`?{face:s.face,confidence:`geometric-fallback`}:s.kind===`ambiguous`?{ref:e,reason:`ambiguous`,candidates:s.candidates}:{ref:e,reason:`not-found`}}function ON(e,t){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(n*n+r*r+i*i)}function kN(e){if(e.length===0)return;let t=0,n=0,r=0;for(let i of e){let e=DD(i);t+=e[0],n+=e[1],r+=e[2]}let i=e.length;return[t/i,n/i,r/i]}function AN(e,t,n){let r=n.get(t);if(!r)return;let i=wk(e);for(let[e,t]of r)if(t.includes(i))return e}function jN(e,t,n,r){let i=r.get(t)?.get(n);return i===void 0||i.length===0?[]:lD(e).filter(e=>i.includes(wk(e)))}function MN(e){let t=VM(e);return{entityType:`edge`,length:t.ok?t.value:void 0,midpoint:kN(iN(e))}}function NN(e){let t=new Set,n=[];for(let r of e){let e=wk(r);t.has(e)||(t.add(e),n.push(r))}return n}var PN=1e-6;function FN(e,t){if(t.length===void 0&&t.midpoint===void 0)return;let n,r=1/0,i=1/0;for(let a of e){let e=0;if(t.length!==void 0){let n=VM(a);n.ok&&(e+=Math.abs(n.value-t.length))}if(t.midpoint!==void 0){let n=kN(iN(a));n!==void 0&&(e+=ON(t.midpoint,n))}e<r?(i=r,r=e,n=a):e<i&&(i=e)}if(!(n===void 0||i-r<PN))return n}function IN(e,t,n,r){let[i,a]=$M(n,t);if(i===void 0||a===void 0)return;let o=AN(i,e,r),s=AN(a,e,r);if(!(o===void 0||s===void 0))return{origin:e,faceRoles:[o,s],hint:MN(t)}}function LN(e,t,n){let[r,i]=e.faceRoles,a=jN(n,e.origin,r,t),o=jN(n,e.origin,i,t);if(a.length===0||o.length===0)return{ref:e,reason:`not-found`};let s=[];for(let e of a)for(let t of o)s.push(...sN(e,t));let c=NN(s);if(c.length===1){let[e]=c;if(e!==void 0)return{edge:e,confidence:`exact`}}if(c.length>1){let t=FN(c,e.hint);return t===void 0?{ref:e,reason:`ambiguous`,candidates:c}:{edge:t,confidence:`geometric-fallback`}}return{ref:e,reason:`not-found`}}var RN=3,zN=1e-6;function BN(e,t){let n=new Set;for(let r of e)for(let e of nN(r)){let r=wk(e);n.add(r),t.has(r)||t.set(r,e)}return n}function VN(e,t){let n=new Set;for(let r of e)t.has(r)&&n.add(r);return n}function HN(e){let t=new Map,n;for(let r of e){let e=BN(r,t);n=n===void 0?e:VN(n,e)}if(n===void 0)return[];let r=[];for(let e of n){let n=t.get(e);n!==void 0&&r.push(n)}return r}function UN(e,t){if(t.position===void 0)return;let n,r=1/0,i=1/0;for(let a of e){let e=ON(DD(a),t.position);e<r?(i=r,r=e,n=a):e<i&&(i=e)}if(!(n===void 0||i-r<zN))return n}function WN(e,t,n,r){let i=eN(n,t);if(i.length<RN)return;let a=new Set;for(let t of i){let n=AN(t,e,r);n!==void 0&&a.add(n)}if(!(a.size<RN))return{origin:e,faceRoles:[...a].sort(),hint:{entityType:`vertex`,position:DD(t)}}}function GN(e,t,n){let r=[];for(let i of e.faceRoles){let a=jN(n,e.origin,i,t);if(a.length===0)return{ref:e,reason:`not-found`};r.push(a)}let i=HN(r);if(i.length===1){let[e]=i;if(e!==void 0)return{vertex:e,confidence:`exact`}}if(i.length>1){let t=UN(i,e.hint);return t===void 0?{ref:e,reason:`ambiguous`,candidates:i}:{vertex:t,confidence:`geometric-fallback`}}return{ref:e,reason:`not-found`}}var KN=.99,qN=.1,JN=1e-6;function YN(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function XN(e,t){return lD(e).filter(e=>YN(SO(e),t)>KN)}function ZN(e,t,n){let r=new Set([...t,...n].map(wk)),i=new Set;for(let n of t)for(let t of uN(e,n))i.add(t);let a=[],o=new Set;for(let t of n)for(let n of uN(e,t))r.has(n)||o.has(n)||!i.has(n)||(o.add(n),a.push(n));if(a.length===0)return[];let s=new Map(lD(e).map(e=>[wk(e),e]));return a.map(e=>s.get(e)).filter(e=>e!==void 0)}function QN(e,t){let n,r=1/0,i=1/0;for(let a of e){let e=ON(CO(a),t);e<r?(i=r,r=e,n=a):e<i&&(i=e)}if(!(n===void 0||i-r<JN))return n}function $N(e,t,n,r,i){let[a,o]=$M(r,n);if(a===void 0||o===void 0)return;let s=AN(a,e,i),c=AN(o,e,i);if(!(s===void 0||c===void 0))return{origin:e,op:t,betweenRoles:[s,c],hint:{entityType:`derived-face`,normalA:SO(a),normalB:SO(o),edgeMidpoint:kN(iN(n))}}}function eP(e,t,n){let r=jN(n,e.origin,e.betweenRoles[0],t);r.length===0&&(r=XN(n,e.hint.normalA));let i=jN(n,e.origin,e.betweenRoles[1],t);if(i.length===0&&(i=XN(n,e.hint.normalB)),r.length===0||i.length===0)return{ref:e,reason:`not-found`};let a=ZN(n,r,i).filter(t=>YN(SO(t),e.hint.normalA)>qN&&YN(SO(t),e.hint.normalB)>qN);if(a.length===1){let[e]=a;if(e!==void 0)return{face:e,confidence:`geometric-fallback`}}if(a.length>1){let t=e.hint.edgeMidpoint&&QN(a,e.hint.edgeMidpoint);return t?{face:t,confidence:`geometric-fallback`}:{ref:e,reason:`ambiguous`,candidates:a}}return{ref:e,reason:`not-found`}}function tP(e){return typeof e==`object`&&!!e&&`origin`in e}function nP(e){return tP(e)&&`betweenRoles`in e&&`op`in e}function rP(e){return tP(e)&&Array.isArray(e.faceRoles)&&e.faceRoles.length===2}function iP(e){return tP(e)&&Array.isArray(e.faceRoles)&&e.faceRoles.length>=3}function aP(e){return tP(e)&&typeof e.role==`string`}function oP(e){return aP(e)||rP(e)||iP(e)||nP(e)}function sP(e,t){return t===void 0?{ok:!1,reason:e}:{ok:!1,reason:e,candidates:t}}function cP(e,t,n){if(nP(e)){let r=eP(e,t,n);return`face`in r?{ok:!0,entity:r.face}:sP(r.reason,r.candidates)}if(rP(e)){let r=LN(e,t,n);return`edge`in r?{ok:!0,entity:r.edge}:sP(r.reason,r.candidates)}if(iP(e)){let r=GN(e,t,n);return`vertex`in r?{ok:!0,entity:r.vertex}:sP(r.reason,r.candidates)}let r=DN(e,t,n);return`face`in r?{ok:!0,entity:r.face}:sP(r.reason,r.candidates)}function lP(e,t,n){let r=n.get(e.origin);if(r!==void 0)return r;let i=new Map([[e.origin,bN(t,e.origin)]]);return n.set(e.origin,i),i}function uP(e,t){return cP(e,lP(e,t,new Map),t)}function dP(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t!==Object.prototype&&t!==null?!1:!(`wrapped`in e)}function fP(e,t){let n=new Map,r=e=>{if(oP(e)){let r=cP(e,lP(e,t,n),t);return r.ok?r.entity:e}if(Array.isArray(e))return e.map(r);if(dP(e)){let t={};for(let[n,i]of Object.entries(e))t[n]=r(i);return t}return e},i={...e};for(let[t,n]of Object.entries(e))i[t]=r(n);return i}function pP(e,t,n,r){let i=DE(H().makeBox(e,t,n)),a=r?.at??(r?.centered?[0,0,0]:void 0);if(a)try{var o=PT();return uk(o.u(i),[a[0]-e/2,a[1]-t/2,a[2]-n/2])}catch(e){o.e=e}finally{o.d()}return i}function mP(e,t,n){let r=n?.at??[0,0,0],i=n?.axis??[0,0,1],a=aj(e,t,r,i);if(n?.centered)try{var o=PT();let e=[-i[0]*t*.5,-i[1]*t*.5,-i[2]*t*.5];return uk(o.u(a),e)}catch(e){o.e=e}finally{o.d()}return a}function hP(e,t){let n=oj(e);if(t?.at)try{var r=PT();return uk(r.u(n),t.at)}catch(e){r.e=e}finally{r.d()}return n}function gP(e,t,n,r){let i=r?.at??[0,0,0],a=r?.axis??[0,0,1],o=sj(e,t,n,i,a);if(r?.centered)try{var s=PT();let e=[-a[0]*n*.5,-a[1]*n*.5,-a[2]*n*.5];return uk(s.u(o),e)}catch(e){s.e=e}finally{s.d()}return o}function _P(e,t,n){return cj(e,t,n?.at??[0,0,0],n?.axis??[0,0,1])}function vP(e,t,n,r){let i=lj(e,t,n);if(r?.at)try{var a=PT();return uk(a.u(i),r.at)}catch(e){a.e=e}finally{a.d()}return i}function yP(e,t){return bA(e,t)}function bP(e,t){let n=t?.axis??[0,0,1];return xA(e,t?.at??[0,0,0],n)}function xP(e,t,n){let r=n?.axis??[0,0,1];return SA(e,t,n?.at??[0,0,0],r,n?.xDir)}function SP(e,t,n,r){return CA(e,t,n,r?.at??[0,0,0],r?.axis??[0,0,1],r?.lefthand??!1)}function CP(e,t,n){return wA(e,t,n)}function wP(e,t,n,r,i){let a=i?.axis??[0,0,1];return TA(e,t,n*KE,r*KE,i?.at??[0,0,0],a,i?.xDir)}function TP(e,t){return EA(e,t)}function EP(e){return OA(e)}function DP(e,t,n){return kA(e,t,n)}function OP(e){return AA(e)}function kP(e){return Ya(AA(e),e=>lE(e)?O(e):k(P(`WIRE_NOT_CLOSED`,`Assembled wire is not closed: start and end points do not coincide`)))}function AP(e,t){return jA(e,t)}function jP(e){return PA(e)}function MP(e,t){return NA(e,t)}function NP(e){return IA(e)}function PP(e){return uj(e)}function FP(e){return fj(e)}function IP(e){return pj(e)}function LP(e,t,n){return dj(e,t,n)}function RP(e,t){return ij(e,t)}function zP(e,t){return FA(e,t)}function BP(){return`10000000-1000-4000-8000-100000000000`.replace(/[018]/g,e=>(Number(e)^crypto.getRandomValues(new Uint8Array(1))[0]&15>>Number(e)/4).toString(16))}function VP(e=[]){let t=e.map(({shape:e,name:t,color:n,alpha:r})=>{let i=n??`#f00`;i.indexOf(`#`)===0&&(i=i.slice(1)),i.length===3&&(i=i.replace(/([0-9a-f])/gi,`$1$1`));let a=parseInt(i.substring(0,2),16),o=parseInt(i.substring(2,4),16),s=parseInt(i.substring(4,6),16),c=Math.round((r??1)*255);return{shape:e.wrapped,name:t??BP(),color:[a,o,s,c]}});return qT(H().createXCAFDocument(t))}function HP(e=[],{unit:t,modelUnit:n}={}){let r=e=>{let t=e;return t.indexOf(`#`)===0&&(t=t.slice(1)),t.length===3&&(t=t.replace(/([0-9a-f])/gi,`$1$1`)),[parseInt(t.substring(0,2),16),parseInt(t.substring(2,4),16),parseInt(t.substring(4,6),16)]},i=H(),a=e.map(({shape:e,name:t,color:n,alpha:i})=>{let[a,o,s]=r(n??`#f00`);return{shape:e.wrapped,name:t??BP(),color:[a,o,s,Math.round((i??1)*255)]}}),o=i.createXCAFDocument(a);try{let e=i.writeXCAFToSTEP(o,{unit:t,modelUnit:n});return e?O(new Blob([e],{type:`application/STEP`})):k(To(`STEP_EXPORT_FAILED`,`Failed to write STEP file`))}finally{o.delete()}}function UP(e,t,n,r,i){if(n<1)return k(P(`PATTERN_INVALID_COUNT`,`Pattern count must be at least 1`));if(n===1)return O(e);if(UD(t))return k(P(`PATTERN_ZERO_DIRECTION`,`Pattern direction cannot be zero`));let a=VD(t),o=H().linearPattern(e.wrapped,[...a],r,n).map(e=>U(e));try{return UA(o,{optimisation:`sameFace`,...i,unsafe:!0})}finally{for(let e of o)e[Symbol.dispose]()}}function WP(e,t,n,r=360,i=[0,0,0],a){if(n<1)return k(P(`PATTERN_INVALID_COUNT`,`Pattern count must be at least 1`));if(n===1)return O(e);if(UD(t))return k(P(`PATTERN_ZERO_AXIS`,`Pattern axis cannot be zero`));let o=r/n,s=H().circularPattern(e.wrapped,[...i],[...t],o,n).map(e=>U(e));try{return UA(s,{optimisation:`sameFace`,...a,unsafe:!0})}finally{for(let e of s)e[Symbol.dispose]()}}function GP(e,t,n,r,i,a,o,s){if(r<1||i<1)return k(P(`PATTERN_INVALID_COUNT`,`Grid pattern counts must be at least 1`));if(r===1&&i===1)return O(e);if(UD(t))return k(P(`PATTERN_ZERO_DIRECTION`,`Grid directionX cannot be zero`));if(UD(n))return k(P(`PATTERN_ZERO_DIRECTION`,`Grid directionY cannot be zero`));let c=H(),l=VD(t),u=VD(n);if(typeof c.gridPattern==`function`)return O(U(c.gridPattern(e.wrapped,[...l],[...u],a,o,r,i)));let d=UP(e,t,r,a,s);if(!d.ok)return d;let f=d.value,p=UP(f,n,i,o,s),m=p.ok&&p.value===f;return f!==e&&!m&&f[Symbol.dispose](),p}function KP(e,t={}){return{name:e,children:[],...t.shape===void 0?{}:{shape:t.shape},...t.translate===void 0?{}:{translate:t.translate},...t.rotate===void 0?{}:{rotate:t.rotate},...t.metadata===void 0?{}:{metadata:t.metadata}}}function qP(e,t){return{...e,children:[...e.children,t]}}function JP(e,t){let n=e.children.findIndex(e=>e.name===t);if(n===-1)return e;let r=[...e.children];return r.splice(n,1),{...e,children:r}}function YP(e,t){return{...e,...t.shape===void 0?{}:{shape:t.shape},...t.translate===void 0?{}:{translate:t.translate},...t.rotate===void 0?{}:{rotate:t.rotate},...t.metadata===void 0?{}:{metadata:t.metadata}}}function XP(e,t){if(e.name===t)return e;for(let n of e.children){let e=XP(n,t);if(e)return e}}function ZP(e,t,n=0){t(e,n);for(let r of e.children)ZP(r,t,n+1)}function QP(e){let t=1;for(let n of e.children)t+=QP(n);return t}function $P(e){let t=[];return ZP(e,e=>{e.shape&&t.push(e.shape)}),t}function eF(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function tF(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function nF(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function rF(e){return nF(tF(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function iF(e,t){let[n,r,i,a]=e,o=2*(i*t[2]-a*t[1]),s=2*(a*t[0]-r*t[2]),c=2*(r*t[1]-i*t[0]);return[t[0]+n*o+(i*c-a*s),t[1]+n*s+(a*o-r*c),t[2]+n*c+(r*s-i*o)]}function aF(e,t){let n=t/2,r=Math.sin(n),i=nF(e);return[Math.cos(n),i[0]*r,i[1]*r,i[2]*r]}function oF(e,t){let n=nF(e),r=nF(t),i=eF(n,r);if(i>=.999999999)return[1,0,0,0];if(i<=-.999999999)return aF(rF(n),Math.PI);let a=tF(n,r),o=Math.hypot(1+i,a[0],a[1],a[2])||1;return[(1+i)/o,a[0]/o,a[1]/o,a[2]/o]}function sF(e,t){let[n,r,i,a]=e,[o,s,c,l]=t;return[n*o-r*s-i*c-a*l,n*s+r*o+i*l-a*c,n*c-r*l+i*o+a*s,n*l+r*c-i*s+a*o]}var cF=Math.PI/180;function lF(e,t,n){return Math.min(n,Math.max(t,e))}function uF(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function dF(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function fF(e){return uF(dF(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function pF(e,t,n,r,i){let a=n.min??r,o=n.max??i,s=Math.min(a,o),c=Math.max(a,o);return{kind:e,axis:uF(t),min:s,max:c,value:lF(n.value??0,s,c)}}function mF(e,t,n,r,i){let a=i[0]??{kind:`rotation`,axis:[0,0,1],min:0,max:0,value:0};return{type:e,parent:t,child:n,axis:{origin:r.origin,direction:uF(r.direction)},min:a.min,max:a.max,value:a.value,dofs:i}}function hF(e,t,n,r={}){return mF(`revolute`,e,t,n,[pF(`rotation`,n.direction,r,-180,180)])}function gF(e,t,n,r={}){return mF(`prismatic`,e,t,n,[pF(`translation`,n.direction,r,0,100)])}function _F(e,t,n,r={}){return mF(`cylindrical`,e,t,n,[pF(`rotation`,n.direction,r.rotation??{},-180,180),pF(`translation`,n.direction,r.translation??{},0,100)])}function vF(e,t,n,r={}){let i=uF(n.direction),a;if(r.uDirection){let e=r.uDirection,t=e[0]*i[0]+e[1]*i[1]+e[2]*i[2],n=[e[0]-t*i[0],e[1]-t*i[1],e[2]-t*i[2]];a=Math.hypot(n[0],n[1],n[2])<1e-9?fF(i):uF(n)}else a=fF(i);let o=uF(dF(i,a));return mF(`planar`,e,t,{origin:n.origin,direction:i},[pF(`translation`,a,r.u??{},-100,100),pF(`translation`,o,r.v??{},-100,100),pF(`rotation`,i,r.rotation??{},-180,180)])}function yF(e,t,n,r={}){return mF(`spherical`,e,t,{origin:n,direction:[0,0,1]},[pF(`rotation`,[1,0,0],r.x??{},-180,180),pF(`rotation`,[0,1,0],r.y??{},-180,180),pF(`rotation`,[0,0,1],r.z??{},-180,180)])}function bF(e,t){let n=e.dofs.map((e,n)=>{let r=t[n];return r===void 0?e:{...e,value:lF(r,e.min,e.max)}}),r=n[0];return r?{...e,dofs:n,value:r.value}:{...e,dofs:n}}function xF(e,t){return bF(e,[t])}function SF(e,t,n){if(t.kind===`translation`)return{position:[t.axis[0]*n,t.axis[1]*n,t.axis[2]*n],rotation:[1,0,0,0]};let r=aF(t.axis,n*cF),i=iF(r,e);return{position:[e[0]-i[0],e[1]-i[1],e[2]-i[2]],rotation:r}}function CF(e,t=e.value){let n=Array.isArray(t)?t:void 0,r=n?void 0:t,i=e.axis.origin,a=TF;for(let t=0;t<e.dofs.length;t++){let o=e.dofs[t];if(!o)continue;let s=n?n[t]??o.value:t===0?r??o.value:o.value;a=EF(a,SF(i,o,lF(s,o.min,o.max)))}return a}function wF(e,t){let n=e.joints??[];return{...e,joints:[...n,t]}}var TF={position:[0,0,0],rotation:[1,0,0,0]};function EF(e,t){let n=iF(e.rotation,t.position);return{position:[e.position[0]+n[0],e.position[1]+n[1],e.position[2]+n[2]],rotation:sF(e.rotation,t.rotation)}}function DF(e){let t=[];return ZP(e,e=>{e.joints&&t.push(...e.joints)}),t}function OF(e,t={}){let n=[],r=new Set;ZP(e,e=>{r.add(e.name),e.joints&&n.push(...e.joints)});let i=new Map;for(let e of n)i.set(e.child,e),r.add(e.parent),r.add(e.child);let a=new Map;for(let e of r)i.has(e)||a.set(e,TF);let o=[...n],s=!0;for(;s&&o.length>0;){s=!1;for(let e=o.length-1;e>=0;e--){let n=o[e];if(!n)continue;let r=a.get(n.parent);if(!r||(o.splice(e,1),s=!0,a.has(n.child)))continue;let i=t[n.child]??n.value,c=n.offset?EF(CF(n,i),n.offset):CF(n,i);a.set(n.child,EF(r,c))}}for(let e of o)a.has(e.child)||a.set(e.child,TF);return a}function kF(e){return DF(e).reduce((e,t)=>e+t.dofs.length,0)}var AF={position:[0,0,0],rotation:[1,0,0,0]};function jF(e,t){let n=iF(e.rotation,t);return[n[0]+e.position[0],n[1]+e.position[1],n[2]+e.position[2]]}function MF(e){return[e[0],-e[1],-e[2],-e[3]]}function NF(e,t){let[n,r,i,a]=sF(t,MF(e)),o=Math.hypot(n,r,i,a)||1;n/=o,r/=o,i/=o,a/=o,n<0&&(n=-n,r=-r,i=-i,a=-a);let s=Math.hypot(r,i,a);if(s<1e-12)return[0,0,0];let c=2*Math.atan2(s,n)/s;return[r*c,i*c,a*c]}function PF(e,t){let n=[];ZP(e,e=>{e.joints&&n.push(...e.joints)});let r=new Map;for(let e of n)r.set(e.child,e);let i=[],a=new Set,o=t;for(;o&&r.has(o)&&!a.has(o);){a.add(o);let e=r.get(o);if(!e)break;i.push(e),o=e.parent}return i.reverse()}function FF(e,t){return e[t]??0}function IF(e,t,n){let r=n+1,i=new Float64Array(n*r);for(let a=0;a<n;a++){for(let t=0;t<n;t++)i[a*r+t]=FF(e,a*n+t);i[a*r+n]=FF(t,a)}for(let e=0;e<n;e++){let t=e;for(let a=e+1;a<n;a++)Math.abs(FF(i,a*r+e))>Math.abs(FF(i,t*r+e))&&(t=a);if(Math.abs(FF(i,t*r+e))<1e-12)return null;if(t!==e)for(let n=e;n<r;n++){let a=FF(i,e*r+n);i[e*r+n]=FF(i,t*r+n),i[t*r+n]=a}let a=FF(i,e*r+e);for(let t=e;t<r;t++)i[e*r+t]=FF(i,e*r+t)/a;for(let t=0;t<n;t++){if(t===e)continue;let n=FF(i,t*r+e);if(n!==0)for(let a=e;a<r;a++)i[t*r+a]=FF(i,t*r+a)-n*FF(i,e*r+a)}}let a=new Float64Array(n);for(let e=0;e<n;e++)a[e]=FF(i,e*r+n);return a}function LF(e,t){let n=[],r=[],i=[],a=[];for(let o of e){let e=t?.[o.child];n.push({child:o.child,count:o.dofs.length}),o.dofs.forEach((t,n)=>{let o=(Array.isArray(e)?e[n]:n===0?e:void 0)??t.value;r.push(Math.min(t.max,Math.max(t.min,o))),i.push(t.min),a.push(t.max)})}return{segments:n,q:Float64Array.from(r),lo:Float64Array.from(i),hi:Float64Array.from(a)}}function RF(e,t){let n={},r=0;for(let i of e){let e=[];for(let n=0;n<i.count;n++)e.push(FF(t,r++));n[i.child]=e}return n}function zF(e,t,n,r,i){let a=jF(t,r);if(e[0]=n.position[0]-a[0],e[1]=n.position[1]-a[1],e[2]=n.position[2]-a[2],i===6&&n.rotation){let r=NF(t.rotation,n.rotation);e[3]=r[0],e[4]=r[1],e[5]=r[2]}let o=0;for(let t=0;t<i;t++)o+=FF(e,t)**2;return Math.sqrt(o)}function BF(e,t,n,r,i,a,o,s,c,l){let u=jF(o,s);for(let d=0;d<n;d++){let f=FF(t,d),p=f+c>FF(a,d)&&f-c>=FF(i,d)?-c:c;t[d]=f+p;let m=l(t);t[d]=f;let h=jF(m,s);if(e[d]=(h[0]-u[0])/p,e[n+d]=(h[1]-u[1])/p,e[2*n+d]=(h[2]-u[2])/p,r===6){let t=NF(o.rotation,m.rotation);e[3*n+d]=t[0]/p,e[4*n+d]=t[1]/p,e[5*n+d]=t[2]/p}}}function VF(e,t,n,r,i){let a=new Float64Array(r*r),o=i*i;for(let t=0;t<r;t++)for(let i=0;i<r;i++){let s=0;for(let r=0;r<n;r++)s+=FF(e,t*n+r)*FF(e,i*n+r);a[t*r+i]=s+(t===i?o:0)}let s=IF(a,t,r);if(!s)return null;let c=new Float64Array(n);for(let t=0;t<n;t++){let i=0;for(let a=0;a<r;a++)i+=FF(e,a*n+t)*FF(s,a);c[t]=i}return c}function HF(e,t,n,r={}){let i=r.maxIterations??200,a=r.tolerance??1e-5,o=r.damping??.05,s=r.tip??[0,0,0],c=n.rotation===void 0?3:6,{segments:l,q:u,lo:d,hi:f}=LF(PF(e,t),r.seed),p=u.length,m=n=>OF(e,RF(l,n)).get(t)??AF,h=new Float64Array(c),g=new Float64Array(c*p),_=m(u),v=zF(h,_,n,s,c),y=0;for(;y<i&&p>0&&v>a;y++){BF(g,u,p,c,d,f,_,s,1e-6,m);let e=VF(g,h,p,c,o);if(!e)break;for(let t=0;t<p;t++){let n=FF(u,t)+FF(e,t);u[t]=Math.min(FF(f,t),Math.max(FF(d,t),n))}_=m(u),v=zF(h,_,n,s,c)}return{values:RF(l,u),converged:v<=a,iterations:y,error:v}}function UF(e,t){return e.dofs.map((e,n)=>{let r=(Array.isArray(t)?t[n]:n===0?t:void 0)??e.value;return Math.min(e.max,Math.max(e.min,r))})}function WF(e,t,n,r){let i=[];ZP(e,e=>{e.joints&&i.push(...e.joints)});let a=i.map(e=>({child:e.child,a:UF(e,t[e.child]),b:UF(e,n[e.child])})),o=Math.max(1,Math.floor(r)),s=[];for(let t=0;t<=o;t++){let n=t/o,r={};for(let e of a)r[e.child]=e.a.map((t,r)=>t+((e.b[r]??t)-t)*n);s.push({t:n,values:r,poses:OF(e,r)})}return s}var GF=Math.PI/180;function KF(e,t,n,r){let i=e*GF,a=r*GF,o=sF(aF([0,0,1],i),aF([1,0,0],a));return{position:[n*Math.cos(i),n*Math.sin(i),t],rotation:o}}function qF(e,t={}){let n=t.base??`base`,r=e.map((e,t)=>e.name??`link${t+1}`);return e.map((e,t)=>{let i=t===0?n:r[t-1]??`link${t}`,a=r[t]??`link${t+1}`,o=KF(e.theta,e.d,e.a,e.alpha),s={origin:[0,0,0],direction:[0,0,1]},c={...e.min===void 0?{}:{min:e.min},...e.max===void 0?{}:{max:e.max},...e.value===void 0?{}:{value:e.value}};return{...e.type===`prismatic`?gF(i,a,s,c):hF(i,a,s,c),offset:o}})}var JF=Math.PI/180,YF=180/Math.PI;function XF(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}function ZF(e){return String(e===0?0:e)}function QF(e){return`${ZF(e[0])} ${ZF(e[1])} ${ZF(e[2])}`}function $F(e,t={}){let n=t.name??`robot`,r=t.effort??0,i=t.velocity??0,a=t.meshes??{},o=[],s=[];ZP(e,e=>{o.push(e.name),e.joints&&s.push(...e.joints)});for(let e of s){if(e.type!==`revolute`&&e.type!==`prismatic`)return k(P(M.VALIDATION_FAILED,`exportURDF: joint '${e.parent}->${e.child}' is '${e.type}'; URDF supports only revolute and prismatic joints`));if(e.offset)return k(P(M.VALIDATION_FAILED,`exportURDF: joint '${e.parent}->${e.child}' carries a fixed offset (e.g. a DH link) that URDF cannot represent as a single joint`))}let c=[`<?xml version="1.0"?>`,`<robot name="${XF(n)}">`];for(let e of o){let t=a[e];t?c.push(` <link name="${XF(e)}">`,` <visual><geometry><mesh filename="${XF(t)}"/></geometry></visual>`,` </link>`):c.push(` <link name="${XF(e)}"/>`)}for(let e of s){let t=e.type===`revolute`,n=t?e.min*JF:e.min,a=t?e.max*JF:e.max,o=e.type===`prismatic`?[0,0,0]:e.axis.origin;c.push(` <joint name="${XF(`${e.parent}_to_${e.child}`)}" type="${e.type}">`,` <parent link="${XF(e.parent)}"/>`,` <child link="${XF(e.child)}"/>`,` <origin xyz="${QF(o)}" rpy="0 0 0"/>`,` <axis xyz="${QF(e.axis.direction)}"/>`,` <limit lower="${ZF(n)}" upper="${ZF(a)}" effort="${ZF(r)}" velocity="${ZF(i)}"/>`,` </joint>`)}return c.push(`</robot>`,``),O(c.join(`
|
|
16
|
-
`))}function eI(e,t){return RegExp(`\\b${t}\\s*=\\s*"([^"]*)"`).exec(e)?.[1]}function tI(e,t){if(!e)return t;let n=e.trim().split(/\s+/).map(Number);return[n[0]??0,n[1]??0,n[2]??0]}function nI(e,t){return iF(sF(sF(aF([0,0,1],t[2]),aF([0,1,0],t[1])),aF([1,0,0],t[0])),e)}function rI(e){let t=/<robot\b([^>]*)>/.exec(e);if(!t)return k(P(M.VALIDATION_FAILED,`importURDF: no <robot> element found`));let n=eI(t[1]??``,`name`)??`robot`,r=[],i=/<link\b([^>]*?)(?:\/>|>)/g;for(let t=i.exec(e);t;t=i.exec(e)){let e=eI(t[1]??``,`name`);e&&r.push(e)}let a=[],o=/<joint\b([^>]*)>([\s\S]*?)<\/joint>/g;for(let t=o.exec(e);t;t=o.exec(e)){let e=t[1]??``,n=t[2]??``,r=eI(e,`type`)??`fixed`;if(r===`fixed`||r===`floating`||r===`planar`)continue;let i=/<parent\b([^>]*?)\/?>/.exec(n),o=/<child\b([^>]*?)\/?>/.exec(n),s=eI(i?.[1]??``,`link`),c=eI(o?.[1]??``,`link`);if(!s||!c)return k(P(M.VALIDATION_FAILED,`importURDF: joint missing parent/child link (${eI(e,`name`)??`unnamed`})`));let l=/<origin\b([^>]*?)\/?>/.exec(n),u=/<axis\b([^>]*?)\/?>/.exec(n),d=/<limit\b([^>]*?)\/?>/.exec(n),f=tI(eI(l?.[1]??``,`xyz`),[0,0,0]),p=tI(eI(l?.[1]??``,`rpy`),[0,0,0]),m=nI(tI(eI(u?.[1]??``,`xyz`),[1,0,0]),p),h=Number(eI(d?.[1]??``,`lower`)??NaN),g=Number(eI(d?.[1]??``,`upper`)??NaN);if(r===`prismatic`){let e=Number.isFinite(h)&&Number.isFinite(g)?{min:h,max:g}:{};a.push(gF(s,c,{origin:f,direction:m},e))}else if(r===`revolute`||r===`continuous`){let e=r===`continuous`||!Number.isFinite(h)||!Number.isFinite(g)?{min:-180,max:180}:{min:h*YF,max:g*YF};a.push(hF(s,c,{origin:f,direction:m},e))}else return k(P(M.VALIDATION_FAILED,`importURDF: joint '${eI(e,`name`)??`unnamed`}' has unrecognized type '${r}'`))}return O({name:n,links:r,joints:a})}function iI(){return{steps:[],shapes:new Map}}function aI(e,t,n){let r={...t,timestamp:Date.now()},i=new Map(e.shapes);return i.set(t.outputId,n),{steps:[...e.steps,r],shapes:i}}function oI(e){if(e.steps.length===0)return e;let t=e.steps.slice(0,-1),n=new Set;for(let e of t){n.add(e.outputId);for(let t of e.inputIds)n.add(t)}let r=new Map;for(let[t,i]of e.shapes)n.has(t)&&r.set(t,i);return{steps:t,shapes:r}}function sI(e,t){return e.steps.find(e=>e.id===t)}function cI(e,t){return e.shapes.get(t)}function lI(e){return e.steps.length}function uI(e,t){let n=e.steps.findIndex(e=>e.id===t);return n===-1?[]:e.steps.slice(n)}function dI(e,t,n){let r=new Map(e.shapes);return r.set(t,n),{...e,shapes:r}}function fI(){return{operations:new Map}}function pI(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function mI(e,t){let[n,r]=t;return n!==void 0&&r===void 0&&LE(n)?fP(e,n):{...e}}function hI(e,t){let n=new Set(e.steps.map(e=>e.outputId)),r={steps:[],shapes:new Map};for(let[t,i]of e.shapes)n.has(t)||(r=dI(r,t,i));for(let n of e.steps){let e=t.operations.get(n.type);if(!e)return k(wo(`REPLAY_UNKNOWN_OP`,`Unknown operation type: ${n.type}`));let i=[];for(let e of n.inputIds){let t=r.shapes.get(e);if(!t)return k(wo(`REPLAY_MISSING_INPUT`,`Missing input shape: ${e} for step ${n.id}`));i.push(t)}try{let t=e(i,mI(n.parameters,i));r=aI(r,{id:n.id,type:n.type,parameters:n.parameters,inputIds:n.inputIds,outputId:n.outputId},t)}catch(e){return k(wo(`REPLAY_STEP_FAILED`,`Step ${n.id} (${n.type}) failed: ${e instanceof Error?e.message:String(e)}`))}}return O(r)}function gI(e,t,n){let r=e.steps.findIndex(e=>e.id===t);if(r===-1)return k(wo(`REPLAY_STEP_NOT_FOUND`,`Step not found: ${t}`));let i=new Map(e.shapes);for(let t=r;t<e.steps.length;t++){let n=e.steps[t];n&&i.delete(n.outputId)}let a={steps:e.steps.slice(0,r),shapes:i};for(let t=r;t<e.steps.length;t++){let r=e.steps[t];if(!r)continue;let i=n.operations.get(r.type);if(!i)return k(wo(`REPLAY_UNKNOWN_OP`,`Unknown operation type: ${r.type}`));let o=[];for(let e of r.inputIds){let t=a.shapes.get(e);if(!t)return k(wo(`REPLAY_MISSING_INPUT`,`Missing input shape: ${e} for step ${r.id}`));o.push(t)}try{let e=i(o,mI(r.parameters,o));a=aI(a,{id:r.id,type:r.type,parameters:r.parameters,inputIds:r.inputIds,outputId:r.outputId},e)}catch(e){return k(wo(`REPLAY_STEP_FAILED`,`Step ${r.id} (${r.type}) failed: ${e instanceof Error?e.message:String(e)}`))}}return O(a)}function _I(e,t,n,r){return e.steps.findIndex(e=>e.id===t)===-1?k(wo(`MODIFY_STEP_NOT_FOUND`,`Step not found: ${t}`)):gI({steps:e.steps.map(e=>e.id===t?{...e,parameters:n}:e),shapes:e.shapes},t,r)}function vI(e){let t={};for(let[n,r]of e.shapes){let e=Ck(r);if(!e.ok)return k(wo(`SERIALIZE_SHAPE_FAILED`,`Failed to serialize shape "${n}": ${e.error.message}`));t[n]=e.value}return O({steps:e.steps,shapes:t})}function yI(e){let t=new Map;for(let[n,r]of Object.entries(e.shapes))try{let e=fO(r);if(!e.ok)return k(wo(`DESERIALIZE_SHAPE_FAILED`,`Failed to deserialize shape "${n}": ${e.error.message}`));t.set(n,e.value)}catch(e){return k(wo(`DESERIALIZE_SHAPE_FAILED`,`Failed to deserialize shape "${n}": ${e instanceof Error?e.message:String(e)}`))}return O({steps:e.steps,shapes:t})}function bI(e){try{var t=PT();let{radius:n,pitch:r,height:i,depth:a=.6*r,toothHalfWidth:o=.42*r,crest:s=0,sectionsPerTurn:c=20,lefthand:l=!1,inward:u=!1}=e;if(!(n>0))return k(P(`THREAD_INVALID_RADIUS`,`radius must be > 0`));if(!(r>0))return k(P(`THREAD_INVALID_PITCH`,`pitch must be > 0`));if(!(i>0))return k(P(`THREAD_INVALID_HEIGHT`,`height must be > 0`));if(!(a>0))return k(P(`THREAD_INVALID_DEPTH`,`depth must be > 0`));if(s<0||s>=o)return k(P(`THREAD_INVALID_CREST`,`crest must be >= 0 and < toothHalfWidth`));if(c<3)return k(P(`THREAD_TOO_FEW_SECTIONS`,`sectionsPerTurn must be >= 3`));let d=i/r,f=Math.max(2,Math.round(d*c)),p=l?-1:1,m=u?-a:a,h=u?.3:-.3,g=o,_=t.u(new JT),v=[];for(let e=0;e<=f;e++){let t=p*e*2*Math.PI/c,i=r*Math.abs(t)/(2*Math.PI),a=n*Math.cos(t),o=n*Math.sin(t),l=Math.cos(t),u=Math.sin(t),d=(e,t)=>[a+e*l,o+e*u,i+t],f=s>0?[d(h,-g),d(m,-s),d(m,s),d(h,g)]:[d(h,-g),d(m,0),d(h,g)],y=OP(f.map((e,t)=>_.register(yP(e,f[(t+1)%f.length]))));if(!Ka(y))return y;v.push(_.register(y.value))}return kM(v,{ruled:!0})}catch(e){t.e=e}finally{t.d()}}var xI=1e-9,SI=1e-8,CI=1e-6,wI=([e,t],[n,r],i=CI)=>Math.abs(e-n)<=i&&Math.abs(t-r)<=i,TI=([e,t],[n,r])=>[e+n,t+r],EI=([e,t],[n,r])=>[e-n,t-r],DI=([e,t],n)=>[e*n,t*n],OI=([e,t],[n,r]=[0,0])=>Math.sqrt((e-n)**2+(t-r)**2),kI=([e,t],[n,r]=[0,0])=>(e-n)**2+(t-r)**2;function AI([e,t],[n,r]){return e*r-t*n}var jI=([e,t],[n,r]=[0,0])=>Math.atan2(r*e-t*n,e*n+t*r),MI=([e,t],[n,r]=[0,0])=>Math.atan2(r-t,n-e),NI=(e,t,n=[0,0])=>{let[r,i]=e,[a,o]=n,s=r-a,c=i-o,l=Math.sin(t),u=Math.cos(t),d=s*u-c*l,f=s*l+c*u;return[d+a,f+o]};function PI([e,t]){let n=Math.sqrt(e*e+t*t);return n<1e-12?[0,0]:[e/n,t/n]}var FI=(e,t)=>[Math.cos(t)*e,Math.sin(t)*e],II=([e,t])=>[Math.sqrt(e*e+t*t),Math.atan2(t,e)],LI=([e,t])=>{let n=PI([e,t]);return n[0]===0&&n[1]===0&&i(`normalize2d`,`Cannot normalize zero-length vector`),n};function RI(e,t){let n,r=0;for(let i=0;i<e.length;i++){let a=e[i];if(t(a))if(r++,r===1)n=a;else break}return r===1?O(n):k(Eo(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found ${r===0?0:`2+`} element(s)`))}function zI(e,t,n,r){let i=e=>n([...t,e]),a=e=>t.every(t=>t(e));function o(t){switch(e){case`edge`:return cD(t);case`face`:return lD(t);case`wire`:return uD(t);case`vertex`:return dD(t)}}let s=e=>{let n=o(e);return t.length===0?n.slice():n.filter(a)},c=()=>zI(e,[],n,r),l={_filters:t,_topoKind:e,when:e=>i(e),inList:e=>{let t=new Map;for(let n of e){let e=wk(n),r=t.get(e);r?r.push(n):t.set(e,[n])}return i(e=>{let n=t.get(wk(e));return!!n&&n.some(t=>Ek(t,e))})},not:e=>{let t=e(c());return i(e=>!t.shouldKeep(e))},either:e=>{let t=e.map(e=>e(c()));return i(e=>t.some(t=>t.shouldKeep(e)))},findAll:e=>s(e),findUnique:e=>RI(o(e),a),shouldKeep:a,and:e=>i(t=>e.shouldKeep(t)),or:e=>{let t=a;return n([n=>t(n)||e.shouldKeep(n)])},negate:()=>{let e=a;return n([t=>!e(t)])}},u=r(l,i);return{...l,...u}}var BI={X:[1,0,0],Y:[0,1,0],Z:[0,0,1]};function VI(e){return typeof e==`string`?BI[e]??[0,0,1]:e}function HI(e,t,n){let r=H(),i=r.makeVertex(t[0],t[1],t[2]);return t=>{let a=r.distance(i,t.wrapped).value;return Math.abs(a-e)<n}}function UI(e,t){let n=VD(VI(e));return e=>{let r=H(),[i,a]=r.curveParameters(e.wrapped),o=(i+a)/2,{tangent:s}=r.curveTangent(e.wrapped,o),c=VD(s),l=Math.acos(Math.min(1,Math.abs(ID(c,n))));return Math.abs(l-KE*t)<1e-6}}function WI(e){return zI(`edge`,e,WI,(t,n)=>({inDirection:(e=`Z`,t=0)=>n(UI(e,t)),ofLength:(e,t=.001)=>n(n=>Math.abs(Pk(n)-e)<t),ofCurveType:e=>n(t=>kk(t)===e),parallelTo:(t=`Z`)=>WI(e).inDirection(t,0),atDistance:(e,t=[0,0,0])=>n(HI(e,t,1e-6))}))}function GI(){return WI([])}function KI(e,t){let n=VD(VI(e));return e=>{let r=SO(e),i=Math.acos(Math.min(1,Math.abs(ID(VD(r),n))));return Math.abs(i-KE*t)<1e-6}}function qI(e){return zI(`face`,e,qI,(t,n)=>({inDirection:(e=`Z`,t=0)=>n(KI(e,t)),parallelTo:(t=`Z`)=>qI(e).inDirection(t,0),ofSurfaceType:e=>n(t=>{let n=mO(t);return Ka(n)&&n.value===e}),ofArea:(e,t=.001)=>n(n=>{let r=BM(n);return Ka(r)&&Math.abs(r.value-e)<t}),atDistance:(e,t=[0,0,0])=>n(HI(e,t,1e-6))}))}function JI(){return qI([])}function YI(e){return zI(`wire`,e,YI,(e,t)=>({isClosed:()=>t(e=>Ik(e)),isOpen:()=>t(e=>!Ik(e)),ofEdgeCount:e=>t(t=>cD(t).length===e)}))}function XI(){return YI([])}function ZI(e,t){return typeof e==`object`&&`_topoKind`in e?e.findUnique(t):typeof e!=`function`&&NE(e)?O(e):e(JI()).findUnique(t)}function QI(e){return Array.isArray(e)&&e.length===2&&typeof e[0]==`number`&&typeof e[1]==`number`}function $I(e,t){let n=10**t,r=t<0?e:.01/n+e;return Math.round(r*n)/n}function eL(e){return Math.round(e*100)/100}function tL(e){return Math.round(e*1e5)/1e5}var nL=([e,t])=>`(${eL(e)},${eL(t)})`,rL=(e,t=1e-9)=>{let n=e;return Math.abs(e)<t&&(n=0),n.toFixed(-Math.log10(t))},iL=(e,t=1e-9)=>Array.from(new Map(e.map(([e,n])=>[`[${rL(e,t)},${rL(n,t)}]`,[e,n]])).values()),aL=class{_wrapped;_deleted=!1;constructor(e){this._wrapped=e??ST().createBoundingBox2d(),XT(this,this._wrapped)}get wrapped(){if(this._deleted)throw Error(`This object has been deleted`);return this._wrapped}delete(){this._deleted||(this._deleted=!0,ZT(this._wrapped),typeof this._wrapped.delete==`function`&&this._wrapped.delete())}[Symbol.dispose](){this.delete()}get repr(){let[e,t]=this.bounds;return`${nL(e)} - ${nL(t)}`}get bounds(){let{xMin:e,yMin:t,xMax:n,yMax:r}=ST().getBBox2dBounds(this.wrapped);return[[e,t],[n,r]]}get center(){let[[e,t],[n,r]]=this.bounds;return[e+(n-e)/2,t+(r-t)/2]}get width(){let[[e],[t]]=this.bounds;return Math.abs(t-e)}get height(){let[[,e],[,t]]=this.bounds;return Math.abs(t-e)}outsidePoint(e=1){let[t,n]=this.bounds,r=n[0]-t[0],i=n[1]-t[1];return[n[0]+r/100*e,n[1]+i/100*e*.9]}add(e){ST().mergeBBox2d(this.wrapped,e.wrapped)}isOut(e){return ST().isBBox2dOut(this.wrapped,e.wrapped)}containsPoint(e){return!ST().isBBox2dOutPoint(this.wrapped,e[0],e[1])}};function oL(e){return new sL(H().deserializeCurve2d(e))}var sL=class e{_wrapped;_deleted=!1;_boundingBox;_firstPoint=null;_lastPoint=null;_firstParameter=null;_lastParameter=null;constructor(e){this._wrapped=H().wrapCurve2dHandle(e),this._boundingBox=null,typeof this._wrapped.delete==`function`&&XT(this,this._wrapped)}get wrapped(){if(this._deleted)throw Error(`This object has been deleted`);return this._wrapped}delete(){this._deleted||(this._deleted=!0,typeof this._wrapped.delete==`function`&&(ZT(this._wrapped),this._wrapped.delete()))}[Symbol.dispose](){this.delete()}get boundingBox(){if(this._boundingBox)return this._boundingBox;let e=H(),t=e.createBoundingBox2d();return e.addCurveToBBox2d(t,this.wrapped,1e-6),this._boundingBox=new aL(t),this._boundingBox}get repr(){return`${this.geomType} ${nL(this.firstPoint)} - ${nL(this.lastPoint)}`}serialize(){return H().serializeCurve2d(this.wrapped)}value(e){return H().evaluateCurve2d(this.wrapped,e)}get firstPoint(){return this._firstPoint===null&&(this._firstPoint=this.value(this.firstParameter)),this._firstPoint}get lastPoint(){return this._lastPoint===null&&(this._lastPoint=this.value(this.lastParameter)),this._lastPoint}get firstParameter(){return this._firstParameter===null&&(this._firstParameter=H().getCurve2dBounds(this.wrapped).first),this._firstParameter}get lastParameter(){return this._lastParameter===null&&(this._lastParameter=H().getCurve2dBounds(this.wrapped).last),this._lastParameter}get geomType(){return H().getCurve2dType(this.wrapped)}clone(){let t=new e(H().copyCurve2d(this.wrapped));return t._firstPoint=this._firstPoint,t._lastPoint=this._lastPoint,t._firstParameter=this._firstParameter,t._lastParameter=this._lastParameter,t}reverse(){H().reverseCurve2d(this.wrapped);let e=this._firstPoint;this._firstPoint=this._lastPoint,this._lastPoint=e;let t=this._firstParameter;this._firstParameter=this._lastParameter,this._lastParameter=t}distanceFromPoint(e){let t=H().projectPointOnCurve2d(this.wrapped,e[0],e[1]),n=t?t.distance:1/0;return Math.min(n,OI(e,this.firstPoint),OI(e,this.lastPoint))}distanceFromCurve(e){let t;try{t=H().distanceBetweenCurves2d(this.wrapped,e.wrapped,this.firstParameter,this.lastParameter,e.firstParameter,e.lastParameter)}catch{t=1/0}return Math.min(t,this.distanceFromPoint(e.firstPoint),this.distanceFromPoint(e.lastPoint),e.distanceFromPoint(this.firstPoint),e.distanceFromPoint(this.lastPoint))}distanceFrom(e){return QI(e)?this.distanceFromPoint(e):this.distanceFromCurve(e)}isOnCurve(e){return this.distanceFromPoint(e)<1e-9}parameter(e,t=1e-9){let n,r,i=!1;try{let t=H().projectPointOnCurve2d(this.wrapped,e[0],e[1]);t?(n=t.distance,r=t.param):i=!0}catch{i=!0}return i?wI(e,this.firstPoint,t)?O(this.firstParameter):wI(e,this.lastPoint,t)?O(this.lastParameter):k(wo(`PARAMETER_NOT_FOUND`,`Failed to find parameter`)):n===void 0||r===void 0?k(wo(`PARAMETER_NOT_FOUND`,`Failed to find parameter`)):n>t?k(wo(`POINT_NOT_ON_CURVE`,`Point ${nL(e)} not on curve ${this.repr}, ${n.toFixed(9)}`)):O(r)}tangentAt(e){let t;if(Array.isArray(e))t=j(this.parameter(e));else{let n=H().getCurve2dBounds(this.wrapped);t=(n.last-n.first)*e+n.first}return H().evaluateCurve2dD1(this.wrapped,t).tangent}splitAt(n,r=1e-9){let i=n.map(e=>QI(e)?j(this.parameter(e,r)):e);i=Array.from(new Map(i.map(e=>[$I(e,-Math.log10(r)),e])).values()).sort((e,t)=>e-t);let a=this.firstParameter,o=this.lastParameter;return a>o&&i.reverse(),Math.abs(t(i,0)-a)<r*100&&(i=i.slice(1)),!i.length||(Math.abs(t(i,i.length-1)-o)<r*100&&(i=i.slice(0,-1)),!i.length)?[this]:H().splitCurve2d(this.wrapped,i).map(t=>new e(t))}},cL=(e,t=1e-4,n=`C0`,r=200)=>new sL(ST().approximateCurve2dAsBSpline(e.wrapped,t,n,r)),lL=e=>(e.geomType!==`BSPLINE_CURVE`&&i(`BSplineToBezier`,`You can only convert a Bspline`),ST().decomposeBSpline2dToBeziers(e.wrapped).map(e=>new sL(e)));function uL(e,t={tolerance:1e-4,continuity:`C0`,maxSegments:300}){let n=ST();return e.flatMap(e=>{let r=e.geomType;if(r===`ELLIPSE`||r===`CIRCLE`&&wI(e.firstPoint,e.lastPoint))return e.splitAt([.5]);if([`LINE`,`ELLIPSE`,`CIRCLE`].includes(r))return e;if(r===`BEZIER_CURVE`){let t=n.getCurve2dBezierDegree(e.wrapped);if(t!==null&&[1,2,3].includes(t))return e}return uL(lL(r===`BSPLINE_CURVE`?e:cL(e,t.tolerance,t.continuity,t.maxSegments)),t)})}var dL=(e,t)=>{let n=new sL(H().makeLine2d(e[0],e[1],t[0],t[1]));return wI(n.firstPoint,e)||n.reverse(),n},fL=(e,t,n)=>{let r=new sL(H().makeArc2dThreePoints(e[0],e[1],t[0],t[1],n[0],n[1]));if(!wI(r.firstPoint,e)){let e=H().trimCurve2d(r.wrapped,r.lastParameter,r.firstParameter);r.delete(),r=new sL(e)}return r},pL=(e,t,n)=>{let r=new sL(H().makeArc2dTangent(e[0],e[1],t[0],t[1],n[0],n[1]));if(!wI(r.firstPoint,e)){let e=H().trimCurve2d(r.wrapped,r.lastParameter,r.firstParameter);r.delete(),r=new sL(e)}return r},mL=(e,t=[0,0])=>new sL(H().makeCircle2d(t[0],t[1],e,!0)),hL=(e,t,n=[1,0],r=[0,0],i=!0)=>new sL(H().makeEllipse2d(r[0],r[1],e,t,n[0],n[1],i)),gL=(e,t,n,r,i=[0,0],a,o=!0)=>new sL(H().makeEllipseArc2d(i[0],i[1],e,t,n,r,a[0],a[1],o)),_L=(e,t,n)=>{let r=[[e[0],e[1]],...t.map(e=>[e[0],e[1]]),[n[0],n[1]]];return new sL(H().makeBezier2d(r))};function vL(e,{tolerance:t=.001,smoothing:n=null,degMax:r=3,degMin:i=1}={}){try{let a=e.map(e=>[e[0],e[1]]);return O(new sL(H().makeBSpline2d(a,{tolerance:t,smoothing:n,degMax:r,degMin:i,continuity:`C2`})))}catch(e){return k(wo(`BSPLINE_2D_FAILED`,`B-spline approximation failed`,e))}}var yL=(e,t,n,r=!1)=>{let i=DI(TI(e,t),.5),a=OI(n,e)*(r?-1:1);return fL(e,TI(DI(LI(EI(i,n)),a),n),t)},bL=(e,n)=>{let r=ST(),a=e.geomType,[o,s]=n,c=`${tL(o)} ${tL(s)}`;if(a===`LINE`)return`L ${c}`;if(a===`BEZIER_CURVE`){let n=r.getCurve2dBezierPoles(e.wrapped);n||i(`adaptedCurveToPathElem`,`Expected Bezier poles`);let a=n.length-1;if(a===1)return`L ${c}`;if(a===2){let[e,r]=t(n,1);return`Q ${eL(e)} ${eL(r)} ${c}`}if(a===3){let[e,r]=t(n,1),[i,a]=t(n,2);return`C ${eL(e)} ${eL(r)} ${eL(i)} ${eL(a)} ${c}`}}if(a===`CIRCLE`){let t=r.getCurve2dCircleData(e.wrapped);t||i(`adaptedCurveToPathElem`,`Expected circle data`);let{radius:n,isDirect:a}=t,l=r.getCurve2dBounds(e.wrapped),u=(l.last-l.first)*qE,d=u===360?`${tL(o)} ${tL(s+1e-4)}`:c;return`A ${n} ${n} 0 ${Math.abs(u)>180?`1`:`0`} ${a?`1`:`0`} ${d}`}if(a===`ELLIPSE`){let t=r.getCurve2dEllipseData(e.wrapped);t||i(`adaptedCurveToPathElem`,`Expected ellipse data`);let{majorRadius:n,minorRadius:a,xAxisAngle:l,isDirect:u}=t,d=r.getCurve2dBounds(e.wrapped),f=(d.last-d.first)*qE,p=f===360?`${tL(o)} ${tL(s+1e-4)}`:c,m=180-l*qE;return`A ${tL(n)} ${tL(a)} ${tL(m)} ${Math.abs(f)>180?`1`:`0`} ${u?`1`:`0`} ${p}`}i(`adaptedCurveToPathElem`,`Unsupported curve type: ${a}`)},xL=e=>{let t=H(),n=t.createBoundingBox2d();return e.forEach(e=>{t.addCurveToBBox2d(n,e.wrapped,1e-6)}),new aL(n)};function SL(e,t){let n=H();return e.map(e=>CE(n.liftCurve2dToPlane(e.wrapped,[...t.origin],[...t.zDir],[...t.xDir])))}var CL=(e,t)=>{let n=H();return e.map(e=>CE(n.buildEdgeOnSurface(e.wrapped,t)))},wL=(e,t)=>{let n=H();return e.map(e=>t?new sL(n.transformCurve2dGeneral(e.wrapped,t)):e.clone())},TL=(e,t,n=[0,0])=>H().createAffinityGTrsf2d(n[0],n[1],-t[1],t[0],e),EL=e=>H().createTranslationGTrsf2d(e[0],e[1]),DL=(e,t=[0,0],n=`center`)=>n===`center`?H().createMirrorGTrsf2d(e[0],e[1],`point`):H().createMirrorGTrsf2d(0,0,`axis`,t[0],t[1],e[0],e[1]),OL=(e,t=[0,0])=>H().createRotationGTrsf2d(e,t[0],t[1]),kL=(e,t=[0,0])=>H().createScaleGTrsf2d(e,t[0],t[1]);function AL(e,t,n=`original`){let r=H(),i=r.extractSurfaceFromFace(t.wrapped),a=vO(t),o=null;if(n===`original`&&hO(t)!==`PLANE`){if(hO(t)!==`CYLINDRE`)return k(P(`UNSUPPORTED_FACE_TYPE`,`Only planar and cylindrical faces can be unwrapped for sketching`));let e=r.getSurfaceCylinderData(i);if(!e)return k(P(`UNSUPPORTED_FACE_TYPE`,`Could not extract cylinder data from face surface`));e.isDirect||(i=r.reverseSurfaceU(i)),o=TL(1/e.radius,[1,0])}if(n===`bounds`){o=r.createIdentityGTrsf2d();try{r.setGTrsf2dTranslationPart(o,0,0);let e=r.createAffinityGTrsf2d(0,0,0,1,a.uMax-a.uMin);if(r.multiplyGTrsf2d(o,e),e.delete(),a.uMin!==0){let e=r.createIdentityGTrsf2d();r.setGTrsf2dTranslationPart(e,-a.uMin,0),r.multiplyGTrsf2d(o,e),e.delete()}let t=r.createAffinityGTrsf2d(0,0,1,0,a.vMax-a.vMin);if(r.multiplyGTrsf2d(o,t),t.delete(),a.vMin!==0){let e=r.createIdentityGTrsf2d();r.setGTrsf2dTranslationPart(e,0,-a.vMin),r.multiplyGTrsf2d(o,e),e.delete()}}catch(e){throw o.delete(),e}}let s=CL(wL(e,o),i);return o&&o.delete(),O(s)}function jL(e,t){let n=H(),r=new sL(n.extractCurve2dFromEdge(e.wrapped,t.wrapped));return zk(e)===`backward`&&n.reverseCurve2d(r.wrapped),r}var ML=(e,t=1)=>`${e.bounds[0][0]-t} ${-e.bounds[1][1]-t} ${e.width+2*t} ${e.height+2*t}`,NL=(e,t,n=1)=>`<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="${ML(t,n)}" fill="none" stroke="black" stroke-width="0.6%" vector-effect="non-scaling-stroke">
|
|
15
|
+
npm install brepkit-wasm`)}function IT(){var e=typeof SuppressedError==`function`?SuppressedError:function(e,t){var n=Error();return n.name=`SuppressedError`,n.error=e,n.suppressed=t,n},t={},n=[];function r(e,t){if(t!=null){if(Object(t)!==t)throw TypeError(`using declarations can only be used with objects, functions, null, or undefined.`);if(e)var r=t[Symbol.asyncDispose||Symbol.for(`Symbol.asyncDispose`)];if(r===void 0&&(r=t[Symbol.dispose||Symbol.for(`Symbol.dispose`)],e))var i=r;if(typeof r!=`function`)throw TypeError(`Object is not disposable.`);i&&(r=function(){try{i.call(t)}catch(e){return Promise.reject(e)}}),n.push({v:t,d:r,a:e})}else e&&n.push({d:t,a:e});return t}return{e:t,u:r.bind(null,!1),a:r.bind(null,!0),d:function(){var r,i=this.e,a=0;function o(){for(;r=n.pop();)try{if(!r.a&&a===1)return a=0,n.push(r),Promise.resolve().then(o);if(r.d){var e=r.d.call(r.v);if(r.a)return a|=2,Promise.resolve(e).then(o,s)}else a|=1}catch(e){return s(e)}if(a===1)return i===t?Promise.resolve():Promise.reject(i);if(i!==t)throw i}function s(n){return i=i===t?n:new e(n,i),o()}return o()}}}var LT=Symbol;LT.dispose??=Symbol.for(`Symbol.dispose`),LT.asyncDispose??=Symbol.for(`Symbol.asyncDispose`);var RT=globalThis;RT.FinalizationRegistry||=(console.warn(`brepjs: FinalizationRegistry unavailable — garbage collection will not work`),class{register(e,t,n){}unregister(e){return!1}});var zT={liveHandles:0,peakHandles:0,gcCollected:0,scopeEnters:0,scopeExits:0};function BT(){return{...zT}}function VT(){zT.liveHandles=0,zT.peakHandles=0,zT.gcCollected=0,zT.scopeEnters=0,zT.scopeExits=0}function HT(){zT.liveHandles++,zT.liveHandles>zT.peakHandles&&(zT.peakHandles=zT.liveHandles)}function UT(){zT.liveHandles--}function WT(){zT.gcCollected++,zT.liveHandles--}var GT=new FinalizationRegistry(e=>{WT();try{e.delete()}catch{}});function KT(e){let t=H(),n=!1,r,i=()=>{if(r){for(let e of r)try{e()}catch{}r=void 0}},a=()=>{if(!n){n=!0,UT(),GT.unregister(o),i();try{t.dispose(e)}catch{}}},o={get wrapped(){if(n)throw Error(`Shape handle has been disposed`);return e},get disposed(){return n},[Symbol.dispose](){a()},delete(){a()},onDispose(e){if(n){e();return}(r??=[]).push(e)}};return HT(),GT.register(o,{delete:()=>{t.dispose(e)}},o),o}function qT(e){let t=()=>{};return{get wrapped(){return e},get disposed(){return!1},[Symbol.dispose]:t,delete:t,onDispose:t}}function JT(e){let t=H(),n;try{n=t.checkpoint()}catch(t){if(!l(t))throw t;return e()}let r;try{r=e()}catch(e){try{t.restoreCheckpoint(n)}catch{}throw e}return t.restoreCheckpoint(n),r}function YT(e){let t=!1,n={get value(){if(t)throw Error(`kernel handle has been disposed`);return e},get disposed(){return t},[Symbol.dispose](){if(!t){t=!0,UT(),GT.unregister(n);try{e.delete()}catch{}}}};return HT(),GT.register(n,e,n),n}var XT=class{handles=[];constructor(){zT.scopeEnters++}register(e){return this.handles.push(()=>{try{let t=e[Symbol.dispose];typeof t==`function`?t.call(e):e.delete()}catch{}}),e}track(e){return this.handles.push(()=>{try{e[Symbol.dispose]()}catch{}}),e}[Symbol.dispose](){zT.scopeExits++;for(let e=this.handles.length-1;e>=0;e--)this.handles[e]?.();this.handles.length=0}};function ZT(e){try{var t=IT();return e(t.u(new XT))}catch(e){t.e=e}finally{t.d()}}function QT(e,t){GT.register(e,t,t)}function $T(e){GT.unregister(e)}function eE(e){try{var t=IT();return e(t.u(new XT))}catch(e){t.e=e}finally{t.d()}}async function tE(e){try{var t=IT();return await e(t.u(new XT))}catch(e){t.e=e}finally{t.d()}}function nE(e){return!e.disposed}function rE(e){return e.__is2D!==!0}function iE(e){return e.__is2D===!0}function aE(e){if(!rE(e))throw Error(`Expected 3D shape, got 2D`);return e}function oE(e){if(!iE(e))throw Error(`Expected 2D shape, got 3D`);return e}var sE=new WeakMap;function cE(e,t){sE.set(e,t)}function lE(e,t){let n=sE.get(t);if(n!==void 0)return n;let r=e.shapeType(t);return sE.set(t,r),r}function uE(e){return lE(H(),e.wrapped)}function dE(e){return H().curveIsClosed(e.wrapped)}function fE(e){return H().isValid(e.wrapped)}function pE(e){let t=H();if(!t.isValid(e.wrapped))return!1;let n=t.isValidStrict?.bind(t)??t.isValid.bind(t);try{let r=t.solidFromShell(e.wrapped),i=n(r);try{t.dispose(r)}catch{}return i}catch{return!1}}function mE(e){return H().isValid(e.wrapped)}function hE(e){return dE(e)?O(e):k(`Wire is not closed: start and end points do not coincide`)}function gE(e){return fE(e)?O(e):k(`Face orientation is inconsistent or face is invalid`)}function _E(e){return pE(e)?O(e):k(`Shell is not manifold: has free edges or is invalid`)}function vE(e){return mE(e)?O(e):k(`Solid failed BRepCheck validation`)}function yE(e){return H().surfaceType(e.wrapped)===`plane`}function bE(e){let t=H(),n=n=>{try{let r=t.makeFace(e.wrapped,n),i=t.surfaceType(r);try{t.dispose(r)}catch{}return i===`plane`}catch{return!1}};return n(!0)?!0:n(!1)}function xE(e){return yE(e)?O(e):k(`Face is not planar: underlying surface is not a geometric plane`)}function SE(e){return bE(e)?O(e):k(`Wire is not planar: edges do not lie in a common plane`)}function CE(e,t){return t===`2D`&&(e.__is2D=!0),e}function wE(e,t){return CE(KT(e),t)}function TE(e,t){return CE(KT(e),t)}function EE(e,t){return CE(KT(e),t)}function DE(e,t){return CE(KT(e),t)}function OE(e){return CE(KT(e))}function kE(e){return CE(KT(e))}function AE(e){return CE(KT(e))}function jE(e,t){return CE(KT(e),t)}function ME(e){return uE(e)===`vertex`}function NE(e){return uE(e)===`edge`}function PE(e){return uE(e)===`wire`}function FE(e){return uE(e)===`face`}function IE(e){return uE(e)===`shell`}function LE(e){return uE(e)===`solid`}function RE(e){return uE(e)===`compound`}function zE(e){let t=uE(e);return t===`shell`||t===`solid`||t===`compsolid`?!0:t===`compound`?rE(e):!1}function BE(e){let t=uE(e);return t===`edge`||t===`wire`}function VE(e,t){let n=H(),r=lE(n,e),i=n.downcast(e,r);return r===`vertex`?wE(i,t):r===`edge`?TE(i,t):r===`wire`?EE(i,t):r===`face`?DE(i,t):r===`shell`?OE(i):r===`solid`?kE(i):r===`compsolid`?AE(i):jE(i,t)}function HE(e){return VE(e)}function UE(e,t){let n=e.id,r=t.wrapped.id;(n!==void 0&&r!==void 0?n===r:t.wrapped===e)||H().dispose(e)}function U(e,t){let n=VE(e,t);return UE(e,n),n}function WE(e,t){let n=e.wrapped;if(e[Symbol.dispose](),n!==t){let e=H();e.dispose(n),e.dispose(t)}}function W(e){H().dispose(e.wrapped),e[Symbol.dispose]()}function GE(e,t,n){cE(e,t);let r=H().downcast(e,t);return t===`vertex`?wE(r,n):t===`edge`?TE(r,n):t===`wire`?EE(r,n):t===`face`?DE(r,n):t===`shell`?OE(r):t===`solid`?kE(r):t===`compsolid`?AE(r):jE(r,n)}function KE(e,t,n){let r=GE(e,t,n);return UE(e,r),r}function qE(e,t,n){return cE(e,t),CE(qT(e),n)}var G=2147483647,JE=Math.PI/180,YE=180/Math.PI;function XE(e,t,n,r,i){let a={kind:e,code:t,message:n,cause:r};return i?{...a,suggestion:i}:a}var ZE={KERNEL_OPERATION:(e,t,n,r)=>XE(`KERNEL_OPERATION`,e,t,n,r),VALIDATION:(e,t,n,r)=>XE(`VALIDATION`,e,t,n,r),TYPE_CAST:(e,t,n,r)=>XE(`TYPE_CAST`,e,t,n,r),SKETCHER_STATE:(e,t,n,r)=>XE(`SKETCHER_STATE`,e,t,n,r),MODULE_INIT:(e,t,n,r)=>XE(`MODULE_INIT`,e,t,n,r),COMPUTATION:(e,t,n,r)=>XE(`COMPUTATION`,e,t,n,r),IO:(e,t,n,r)=>XE(`IO`,e,t,n,r),QUERY:(e,t,n,r)=>XE(`QUERY`,e,t,n,r),UNSUPPORTED:(e,t,n,r)=>XE(`UNSUPPORTED`,e,t,n,r)};function QE(e,t,n,r=`KERNEL_OPERATION`){try{return O(U(e()))}catch(e){let i=e instanceof Error?e.message:String(e),a=r===`KERNEL_OPERATION`?xo(i):i,o=bo(t);return k(ZE[r](t,`${n}: ${a}`,e,o))}}function $E(e,t,n,r=`KERNEL_OPERATION`){try{return O(e())}catch(e){let i=e instanceof Error?e.message:String(e),a=r===`KERNEL_OPERATION`?xo(i):i,o=bo(t);return k(ZE[r](t,`${n}: ${a}`,e,o))}}function eD(e,t,n,r=`KERNEL_OPERATION`){try{var i=IT();let a=i.u(new XT);return QE(()=>e(a),t,n,r)}catch(e){i.e=e}finally{i.d()}}function tD(e,t){let n=H().iterShapes(e,t),r=Array(n.length);for(let e=0;e<n.length;e++)r[e]=KE(n[e],t);return r}function nD(e,t){let n=H();if(n.subShapeCount)return n.subShapeCount(e.wrapped,t);let r=n.iterShapes(e.wrapped,t);for(let e of r)n.dispose(e);return r.length}function rD(e,t){let n=H();if(n.subShapeHashes)return n.subShapeHashes(e.wrapped,t,G);let r=new Set;for(let i of n.iterShapes(e.wrapped,t))r.add(n.hashCode(i,G)),n.dispose(i);return[...r]}var iD=new WeakMap;function aD(e){let t=iD.get(e);if(!t)return;iD.delete(e);let n=[t.edges,t.faces,t.wires,t.vertices,t.shells,t.solids,t.compSolids];for(let e of n)if(e)for(let t of e)t[Symbol.dispose]()}var oD=new WeakSet;function sD(e){let t=e.wrapped,n=iD.get(t);return n||(n={},iD.set(t,n)),oD.has(e)||(oD.add(e),e.onDispose(()=>{aD(t)})),n}function cD(e){return iD.get(e.wrapped)}function lD(e){aD(e.wrapped)}function uD(e){let t=sD(e);if(t.edges)return t.edges;let n=tD(e.wrapped,`edge`);return t.edges=n,n}function dD(e){let t=sD(e);if(t.faces)return t.faces;let n=tD(e.wrapped,`face`);return t.faces=n,n}function fD(e){let t=sD(e);if(t.wires)return t.wires;let n=tD(e.wrapped,`wire`);return t.wires=n,n}function pD(e){let t=sD(e);if(t.vertices)return t.vertices;let n=tD(e.wrapped,`vertex`);return t.vertices=n,n}function mD(e){let t=sD(e);if(t.solids)return t.solids;let n=tD(e.wrapped,`solid`);return t.solids=n,n}function hD(e){let t=sD(e);if(t.shells)return t.shells;let n=tD(e.wrapped,`shell`);return t.shells=n,n}function gD(e){let t=sD(e);if(t.compSolids)return t.compSolids;let n=tD(e.wrapped,`compsolid`);return t.compSolids=n,n}function*_D(e){for(let t of H().iterShapes(e.wrapped,`edge`))yield KE(t,`edge`)}function*vD(e){for(let t of H().iterShapes(e.wrapped,`face`))yield KE(t,`face`)}function*yD(e){for(let t of H().iterShapes(e.wrapped,`wire`))yield KE(t,`wire`)}function*bD(e){for(let t of H().iterShapes(e.wrapped,`vertex`))yield KE(t,`vertex`)}function*xD(e){for(let t of H().iterShapes(e.wrapped,`solid`))yield KE(t,`solid`)}function*SD(e){for(let t of H().iterShapes(e.wrapped,`shell`))yield KE(t,`shell`)}function*CD(e){for(let t of H().iterShapes(e.wrapped,`compsolid`))yield KE(t,`compsolid`)}function wD(e){let t=sD(e);if(t.bounds)return t.bounds;let{min:n,max:r}=H().boundingBox(e.wrapped),i={xMin:n[0],xMax:r[0],yMin:n[1],yMax:r[1],zMin:n[2],zMax:r[2]};return t.bounds=i,i}function TD(e){return lE(H(),e.wrapped)}function ED(e){let t=sD(e);if(t.surfaceType!==void 0)return t.surfaceType;let n=H().surfaceType(e.wrapped);return t.surfaceType=n,n}function DD(e){let t=sD(e);if(t.isValid!==void 0)return t.isValid;let n=H().isValid(e.wrapped);return t.isValid=n,n}function OD(e){return{kind:TD(e),faceCount:nD(e,`face`),edgeCount:nD(e,`edge`),wireCount:nD(e,`wire`),vertexCount:nD(e,`vertex`),valid:DD(e),bounds:wD(e)}}function kD(e){return H().vertexPosition(e.wrapped)}function AD(e){return e.length===2?[e[0],e[1],0]:[e[0],e[1],e[2]]}function jD(e){return[e[0],e[1]]}var MD={X:[1,0,0],Y:[0,1,0],Z:[0,0,1]};function ND(e){if(typeof e==`string`){let t=MD[e];if(!t)throw Error(`Unknown direction: ${e}`);return t}return e}function PD(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function FD(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function ID(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function LD(e){return[-e[0],-e[1],-e[2]]}function RD(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function zD(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function BD(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2])}function VD(e){return e[0]*e[0]+e[1]*e[1]+e[2]*e[2]}function HD(e,t){return BD(FD(e,t))}function UD(e){let t=BD(e);return t<1e-10?[0,0,0]:[e[0]/t,e[1]/t,e[2]/t]}function WD(e,t,n=1e-5){return Math.abs(e[0]-t[0])<n&&Math.abs(e[1]-t[1])<n&&Math.abs(e[2]-t[2])<n}function GD(e,t=1e-10){return VD(e)<t*t}function KD(e,t){let n=RD(e,t),r=BD(e),i=BD(t);if(r<1e-10||i<1e-10)return 0;let a=Math.max(-1,Math.min(1,n/(r*i)));return Math.acos(a)}function qD(e,t,n){let r=FD(e,t),i=VD(n);return i<1e-20?e:FD(e,ID(n,RD(r,n)/i))}function JD(e,t,n){let r=UD(t),i=Math.cos(n),a=Math.sin(n),o=RD(e,r),s=zD(r,e);return[e[0]*i+s[0]*a+r[0]*o*(1-i),e[1]*i+s[1]*a+r[1]*o*(1-i),e[2]*i+s[2]*a+r[2]*o*(1-i)]}var YD=e=>Math.round(e*1e3)/1e3;function XD(e){return`x: ${YD(e[0])}, y: ${YD(e[1])}, z: ${YD(e[2])}`}function ZD(e,t=null,n=[0,0,1]){let r=UD(n);if(GD(r))throw Error(`Plane normal must be non-zero`);let i;if(t)i=UD(t);else{let[e,t,n]=r,a=Math.abs(e),o=Math.abs(t),s=Math.abs(n),c;c=a<=o&&a<=s?[1,0,0]:o<=s?[0,1,0]:[0,0,1];let l=c[1]*n-c[2]*t,u=c[2]*e-c[0]*n,d=c[0]*t-c[1]*e;i=Math.sqrt(l*l+u*u+d*d)>1e-12?UD([l,u,d]):[1,0,0]}if(GD(i))throw Error(`Plane xDir must be non-zero`);let a=UD(zD(r,i));return{origin:e,xDir:i,yDir:a,zDir:r}}var QD={XY:{xDir:[1,0,0],normal:[0,0,1]},YZ:{xDir:[0,1,0],normal:[1,0,0]},ZX:{xDir:[0,0,1],normal:[0,1,0]},XZ:{xDir:[1,0,0],normal:[0,-1,0]},YX:{xDir:[0,1,0],normal:[0,0,-1]},ZY:{xDir:[0,0,1],normal:[-1,0,0]},front:{xDir:[1,0,0],normal:[0,0,1]},back:{xDir:[-1,0,0],normal:[0,0,-1]},left:{xDir:[0,0,1],normal:[-1,0,0]},right:{xDir:[0,0,-1],normal:[1,0,0]},top:{xDir:[1,0,0],normal:[0,1,0]},bottom:{xDir:[1,0,0],normal:[0,-1,0]}};function $D(e,t=[0,0,0]){let n=QD[e];if(!n)return k(P(`UNKNOWN_PLANE`,`Could not find plane ${e}`));let r;return r=typeof t==`number`?ID(n.normal,t):AD(t),O(ZD(r,n.xDir,n.normal))}function eO(e,t){return typeof e==`string`?$D(e,t):O(e)}function tO(e,t){return e&&typeof e!=`string`?{...e}:j(eO(e??`XY`,t))}function nO(e,t){let[n,r]=t;return PD(PD(e.origin,ID(e.xDir,n)),ID(e.yDir,r))}function rO(e,t){return{...e,origin:PD(e.origin,t)}}function iO(e,t,n=[1,0,0]){let r=t*JE,i=JD(e.zDir,n,r),a=JD(e.xDir,n,r),o=UD(zD(i,a));return{origin:e.origin,xDir:a,yDir:o,zDir:i}}var aO={compound:0,solidCompound:1,solid:2,shell:3,face:4,wire:5,edge:6,vertex:7,shape:8},oO=e=>aO[e],sO={vertex:`vertex`,edge:`edge`,wire:`wire`,face:`face`,shell:`shell`,solid:`solid`,solidCompound:`compsolid`,compound:`compound`,shape:`compound`},cO=function*(e,t){let n=H().iterShapes(e,sO[t]);for(let e of n)yield e},lO=e=>H().isNull(e)?k(Co(`NULL_SHAPE`,`This shape has no type, it is null`)):O(e.ShapeType());function uO(e){if(H().isNull(e))return k(Co(`NULL_SHAPE`,`This shape has no type, it is null`));try{return O(H().downcast(e))}catch(e){return k(Co(`NO_WRAPPER`,`Could not find a wrapper for this shape type`,e))}}function dO(e){if(H().isNull(e))return k(Co(`NULL_SHAPE`,`Cannot copy a null shape`));try{return O(H().copyShape(e))}catch(e){return k(Co(`NO_WRAPPER`,`Could not copy this shape`,e))}}function fO(e){return H().isNull(e)?k(Co(`NULL_SHAPE`,`Cannot cast a null shape`)):O(VE(e))}function pO(e){return H().shapeType(e.wrapped)===`compsolid`}function mO(e){return fO(H().fromBREP(e))}var hO={plane:`PLANE`,cylinder:`CYLINDRE`,cone:`CONE`,sphere:`SPHERE`,torus:`TORUS`,bezier:`BEZIER_SURFACE`,bspline:`BSPLINE_SURFACE`,revolution:`REVOLUTION_SURFACE`,extrusion:`EXTRUSION_SURFACE`,offset:`OFFSET_SURFACE`,other:`OTHER_SURFACE`};function gO(e){return O(hO[ED(e)])}function _O(e){return j(gO(e))}function vO(e){return H().shapeOrientation(e.wrapped)===`forward`?`forward`:`backward`}function yO(e){return VE(H().reverseShape(e.wrapped))}function bO(e){return H().uvBounds(e.wrapped)}function xO(e,t,n){let r=bO(e),i=t*(r.uMax-r.uMin)+r.uMin,a=n*(r.vMax-r.vMin)+r.vMin;return H().pointOnSurface(e.wrapped,i,a)}function SO(e,t){let n=AD(t);return H().uvFromPoint(e.wrapped,n)||[0,0]}function CO(e,t){let n=AD(t);try{let t=n,r=H().uvFromPoint(e.wrapped,t);if(!r)return k(Co(`PROJECTION_FAILED`,`No projection found on the face`));let i=H().projectPointOnFace(e.wrapped,t),a=n[0]-i[0],o=n[1]-i[1],s=n[2]-i[2];return O({uv:r,point:i,distance:Math.sqrt(a*a+o*o+s*s)})}catch(e){return k(Co(`PROJECTION_FAILED`,`Point projection failed: ${e instanceof Error?e.message:String(e)}`))}}function wO(e,t){let n,r;if(t)[n,r]=SO(e,t);else{let t=bO(e);n=.5*(t.uMin+t.uMax),r=.5*(t.vMin+t.vMax)}return H().surfaceNormal(e.wrapped,n,r)}function TO(e){return H().surfaceCenterOfMass(e.wrapped)}function EO(e){return H().getSurfaceAxis(e.wrapped)}function DO(e,t,n=1e-6){let[r,i]=SO(e,t);return H().classifyPointOnFace(e.wrapped,r,i,n)}function OO(e){return VE(H().outerWire(e.wrapped))}function kO(e){return VE(H().removeHolesFromFace(e.wrapped))}function AO(e){let t=OO(e);return Array.from(cO(e.wrapped,`wire`)).map(e=>VE(j(uO(e)))).filter(e=>!H().isSame(e.wrapped,t.wrapped))}function jO(e,t){let n=sD(e),r=new Map;for(let n of rD(e,`face`))r.set(n,t);n.faceOrigins=r}function MO(e){return cD(e)?.faceOrigins}function NO(e,t,n){let r=new Map;for(let e of t){let t=MO(e);if(t)for(let[e,n]of t)r.set(e,n)}if(r.size===0)return;let i=new Map;for(let[t,n]of r){if(e.deleted.has(t))continue;let r=e.modified.get(t);if(r&&r.length>0)for(let e of r)i.set(e,n);else i.set(t,n);let a=e.generated.get(t);if(a)for(let e of a)i.has(e)||i.set(e,n)}if(i.size>0){let e=sD(n);e.faceOrigins=i}}var PO=100,FO=.985,IO=.1;function LO(e,t,n,r){let i=-1/0,a;for(let n of r){let r=e[0]*n.normal[0]+e[1]*n.normal[1]+e[2]*n.normal[2];if(r<.707)continue;let o=t[0]-n.centroid[0],s=t[1]-n.centroid[1],c=t[2]-n.centroid[2],l=o*o+s*s+c*c;if(l>PO)continue;let u=r-l/PO;u>i&&(i=u,a=n.origin)}if(a!==void 0)return a;if(!n)return;let o=1/0,s;for(let n of r){if(!n.planar)continue;let r=e[0]*n.normal[0]+e[1]*n.normal[1]+e[2]*n.normal[2];if(Math.abs(r)<FO)continue;let i=t[0]-n.centroid[0],a=t[1]-n.centroid[1],c=t[2]-n.centroid[2],l=i*n.normal[0]+a*n.normal[1]+c*n.normal[2];if(l*l>IO)continue;let u=Math.max(0,i*i+a*a+c*c-l*l);u<o&&(o=u,s=n.origin)}return s}function RO(e,t){let n=new Map;for(let t of e){let e=MO(t);if(e)for(let[t,r]of e)n.set(t,r)}if(n.size===0)return;let r=H(),i=new Map,a=dD(t),o=[];for(let e of a){let t=r.hashCode(e.wrapped,G),a=n.get(t);a===void 0?o.push(e):i.set(t,a)}if(o.length>0){let t=[];for(let n of e){let e=MO(n);if(e)for(let i of dD(n)){let n=r.hashCode(i.wrapped,G),a=e.get(n);if(a!==void 0)try{let e=r.uvBounds(i.wrapped),n=r.surfaceNormal(i.wrapped,.5*(e.uMin+e.uMax),.5*(e.vMin+e.vMax)),o=r.surfaceCenterOfMass(i.wrapped),s=r.surfaceType(i.wrapped)===`plane`;t.push({origin:a,normal:n,centroid:o,planar:s})}catch{}}}if(t.length>0)for(let e of o){let n=r.hashCode(e.wrapped,G);try{let a=r.uvBounds(e.wrapped),o=LO(r.surfaceNormal(e.wrapped,.5*(a.uMin+a.uMax),.5*(a.vMin+a.vMax)),r.surfaceCenterOfMass(e.wrapped),r.surfaceType(e.wrapped)===`plane`,t);o!==void 0&&i.set(n,o)}catch{}}}if(i.size>0){let e=sD(t);e.faceOrigins=i}}var zO=new WeakMap,BO=new WeakMap;function VO(e){return zO.has(e.wrapped)}function HO(e){let t=zO.get(e.wrapped);return t||(t=new Map,zO.set(e.wrapped,t)),t}function UO(e){let t=BO.get(e.wrapped);return t||(t=new Map,BO.set(e.wrapped,t)),t}function WO(e,t,n){let r=Array.isArray(t)?t:dD(e).filter(t),i=HO(e),a=i.get(n)??new Set;for(let e of r)a.add(H().hashCode(e.wrapped,G));return i.set(n,a),e}function GO(e,t){let n=zO.get(e.wrapped);if(!n)return[];let r=n.get(t);if(!r||r.size===0)return[];let i=[];for(let t of dD(e)){let e=H().hashCode(t.wrapped,G);r.has(e)&&i.push(t)}return i}function KO(e){let t=new Map,n=zO.get(e.wrapped);if(!n)return t;let r=dD(e),i=new Map;for(let e of r)i.set(H().hashCode(e.wrapped,G),e);for(let[e,r]of n){let n=[];for(let e of r){let t=i.get(e);t&&n.push(t)}n.length>0&&t.set(e,n)}return t}function qO(e,t,n){return UO(e).set(t,n),e}function JO(e,t){return BO.get(e.wrapped)?.get(t)}function YO(e,t,n){let r=e.get(t)??new Set;r.add(n),e.set(t,r)}function XO(e,t,n){let r=HO(n);for(let i of t){let t=zO.get(i.wrapped);if(!t)continue;let a=new Map;for(let[e,n]of t)for(let t of n){let n=a.get(t)??[];n.push(e),a.set(t,n)}for(let[t,n]of a){if(e.deleted.has(t))continue;let i=e.modified.get(t),a=i&&i.length>0?i:[t];for(let e of a)for(let t of n)YO(r,t,e)}let o=BO.get(i.wrapped);if(o){let e=UO(n);for(let[t,n]of o)e.has(t)||e.set(t,n)}}}var ZO=new WeakMap,QO=new WeakMap;function $O(e){return ZO.has(e.wrapped)||QO.has(e.wrapped)}function ek(e){let t=QO.get(e.wrapped);return t||(t=new Map,QO.set(e.wrapped,t)),t}function tk(e){if(typeof e==`string`){let t=e.startsWith(`#`)?e.slice(1):e;return t.length===3&&(t=t.charAt(0)+t.charAt(0)+t.charAt(1)+t.charAt(1)+t.charAt(2)+t.charAt(2)),[parseInt(t.slice(0,2),16)/255,parseInt(t.slice(2,4),16)/255,parseInt(t.slice(4,6),16)/255,1]}return e.length===3?[e[0],e[1],e[2],1]:[e[0],e[1],e[2],e[3]]}function nk(e,t){return ZO.set(e.wrapped,tk(t)),e}function rk(e,t,n){let r=tk(n),i=ek(e);for(let e of t)i.set(H().hashCode(e.wrapped,G),r);return e}function ik(e){return ZO.get(e.wrapped)}function ak(e,t){let n=QO.get(e.wrapped);if(n)return n.get(H().hashCode(t.wrapped,G))}function ok(e,t,n){for(let e of t){let t=ZO.get(e.wrapped);if(t){ZO.set(n.wrapped,t);break}}let r=ek(n);for(let n of t){let t=QO.get(n.wrapped);if(!(!t||t.size===0))for(let[n,i]of t){if(e.deleted.has(n))continue;let t=e.modified.get(n);if(t&&t.length>0)for(let e of t)r.set(e,i);else r.set(n,i)}}}function sk(e){return MO(e)!==void 0||VO(e)||$O(e)}function ck(e){if(!e.some(sk))return[];let t=[];for(let n of e)t.push(...rD(n,`face`));return t}function lk(e,t,n){NO(e,t,n),XO(e,t,n),ok(e,t,n)}function uk(e,t){RO(e,t)}function dk(e,t){let n=H(),r=[...n.iterShapes(e.wrapped,`face`)],i=[...n.iterShapes(t.wrapped,`face`)];if(r.length!==i.length)return;let a=new Map;for(let e=0;e<r.length;e++){let t=r[e],o=i[e];t===void 0||o===void 0||a.set(n.hashCode(t,G),[n.hashCode(o,G)])}for(let e of r)n.dispose(e);for(let e of i)n.dispose(e);lk({modified:a,generated:new Map,deleted:new Set},[e],t)}function fk(e,t){let n=ck([e]),{shape:r,evolution:i}=H().translateWithHistory(e.wrapped,t[0],t[1],t[2],n,G),a=U(r);return lk(i,[e],a),a}function pk(e,t,n=[0,0,0],r=[0,0,1]){let i=ck([e]),{shape:a,evolution:o}=H().rotateWithHistory(e.wrapped,t*JE,i,G,r,n),s=U(a);return lk(o,[e],s),s}function mk(e,t=[0,1,0],n=[0,0,0]){let r=ck([e]),{shape:i,evolution:a}=H().mirrorWithHistory(e.wrapped,n,t,r,G),o=U(i);return lk(a,[e],o),o}function hk(e,t,n=[0,0,0]){let r=ck([e]),{shape:i,evolution:a}=H().scaleWithHistory(e.wrapped,n,t,r,G),o=U(i);return lk(a,[e],o),o}function gk(e,t,n){let r=H().boundingBox(e.wrapped),i=[r.max[0]-r.min[0],r.max[1]-r.min[1],r.max[2]-r.min[2]],a=n?.auto===!0;function o(e,t,n){return e!==void 0&&t>1e-12?e/t:e===void 0&&a?n:1}let s=1;a&&(t[0]!==void 0&&i[0]>1e-12?s=t[0]/i[0]:t[1]!==void 0&&i[1]>1e-12?s=t[1]/i[1]:t[2]!==void 0&&i[2]>1e-12&&(s=t[2]/i[2]));let c=[o(t[0],i[0],s),o(t[1],i[1],s),o(t[2],i[2],s)];return Math.abs(c[0]-c[1])<1e-6&&Math.abs(c[1]-c[2])<1e-6?O(hk(e,c[0])):k(P(M.VALIDATION_FAILED,`resize: non-uniform scaling is not supported (WASM build lacks BRepBuilderAPI_GTransform).`,void 0,void 0,`Use auto: true to scale proportionally, or set all three dimensions to achieve uniform scaling.`))}function _k(e){if(`linear`in e)return O({linear:e.linear,translation:e.translation});let[t,n,r,i]=e,a=1e-10;return Math.abs(i[0])>a||Math.abs(i[1])>a||Math.abs(i[2])>a||Math.abs(i[3]-1)>a?k(P(M.VALIDATION_FAILED,`applyMatrix: invalid bottom row [${String(i[0])}, ${String(i[1])}, ${String(i[2])}, ${String(i[3])}]. Must be [0, 0, 0, 1] for an affine transform.`)):O({linear:[t[0],t[1],t[2],n[0],n[1],n[2],r[0],r[1],r[2]],translation:[t[3],n[3],r[3]]})}function vk(e){return e[0]*(e[4]*e[8]-e[5]*e[7])-e[1]*(e[3]*e[8]-e[5]*e[6])+e[2]*(e[3]*e[7]-e[4]*e[6])}function yk(e){let t=1e-8,n=e[0]*e[0]+e[3]*e[3]+e[6]*e[6],r=e[1]*e[1]+e[4]*e[4]+e[7]*e[7],i=e[2]*e[2]+e[5]*e[5]+e[8]*e[8],a=e[0]*e[1]+e[3]*e[4]+e[6]*e[7],o=e[0]*e[2]+e[3]*e[5]+e[6]*e[8],s=e[1]*e[2]+e[4]*e[5]+e[7]*e[8];return!(Math.abs(a)>t||Math.abs(o)>t||Math.abs(s)>t||Math.abs(n-r)>t||Math.abs(n-i)>t)}function bk(e,t){let n=_k(t);if(!n.ok)return n;let{linear:r,translation:i}=n.value,a=vk(r);if(Math.abs(a)<1e-12)return k(P(M.VALIDATION_FAILED,`applyMatrix: singular matrix (determinant ≈ 0). Cannot apply a non-invertible transform.`));if(yk(r)){let t=ck([e]),{shape:n,evolution:a}=H().generalTransformWithHistory(e.wrapped,r,i,!0,t,G),o=U(n);return lk(a,[e],o),O(o)}let o=U(H().generalTransformNonOrthogonal(e.wrapped,r,i));return uk([e],o),O(o)}function xk(e){let t=e.map(e=>e.type===`translate`?{type:`translate`,x:e.v[0],y:e.v[1],z:e.v[2]}:{type:`rotate`,angle:e.angle,axis:e.axis,center:e.center}),{handle:n,dispose:r}=H().composeTransform(t);return{trsf:n,cleanup:r}}function Sk(e,t){let{trsf:n,cleanup:r}=xk(`type`in t?[t]:t),i;try{i=U(H().locate(e.wrapped,n))}finally{r()}return sk(e)&&dk(e,i),i}function Ck(e,t){let n=ck([e]),{shape:r,evolution:i}=H().applyComposedTransformWithHistory(e.wrapped,t.trsf,n,G),a=U(r);return lk(i,[e],a),a}function wk(e){return QE(()=>H().copyShape(e.wrapped),M.CLONE_FAILED,`Failed to clone shape`)}function Tk(e){return $E(()=>H().toBREP(e.wrapped),M.TO_BREP_FAILED,`Failed to serialize shape to BREP`)}function Ek(e){return H().hashCode(e.wrapped,G)}function Dk(e){return H().isNull(e.wrapped)}function Ok(e,t){return H().isSame(e.wrapped,t.wrapped)}function kk(e,t){return H().isEqual(e.wrapped,t.wrapped)}function Ak(e){return QE(()=>H().simplify(e.wrapped),M.SIMPLIFY_FAILED,`Failed to simplify shape`)}function jk(e){return H().curveType(e.wrapped)}function Mk(e){let[t]=H().curveParameters(e.wrapped);return H().curvePointAtParam(e.wrapped,t)}function Nk(e){let[,t]=H().curveParameters(e.wrapped);return H().curvePointAtParam(e.wrapped,t)}function Pk(e,t=.5){let[n,r]=H().curveParameters(e.wrapped),i=n+(r-n)*t;return H().curvePointAtParam(e.wrapped,i)}function Fk(e,t=.5){let[n,r]=H().curveParameters(e.wrapped),i=n+(r-n)*t;return H().curveTangent(e.wrapped,i).tangent}function Ik(e){return H().length(e.wrapped)}function Lk(e){if(jk(e)!==`CIRCLE`)return null;let t=Pk(e,0),n=Pk(e,1/3),r=Pk(e,2/3),i=[n[0]-t[0],n[1]-t[1],n[2]-t[2]],a=[r[0]-t[0],r[1]-t[1],r[2]-t[2]],o=[i[1]*a[2]-i[2]*a[1],i[2]*a[0]-i[0]*a[2],i[0]*a[1]-i[1]*a[0]],s=o[0]*o[0]+o[1]*o[1]+o[2]*o[2];if(s<1e-18)return null;let c=i[0]*i[0]+i[1]*i[1]+i[2]*i[2],l=a[0]*a[0]+a[1]*a[1]+a[2]*a[2],u=[c*a[0]-l*i[0],c*a[1]-l*i[1],c*a[2]-l*i[2]],d=[u[1]*o[2]-u[2]*o[1],u[2]*o[0]-u[0]*o[2],u[0]*o[1]-u[1]*o[0]],f=1/(2*s),p=[t[0]+d[0]*f,t[1]+d[1]*f,t[2]+d[2]*f],m=Math.sqrt(s);return{origin:p,direction:[o[0]/m,o[1]/m,o[2]/m]}}function Rk(e){return H().curveIsClosed(e.wrapped)}function zk(e){return H().curveIsPeriodic(e.wrapped)}function Bk(e){return H().curvePeriod(e.wrapped)}function Vk(e){return H().shapeOrientation(e.wrapped)===`forward`?`forward`:`backward`}function Hk(e){return U(H().reverseShape(e.wrapped))}function Uk(e,t={}){if(e.length<2)return k(Co(`INTERPOLATE_MIN_POINTS`,`Interpolation requires at least 2 points`));try{let n=U(H().interpolatePoints(e,t));return NE(n)?O(n):(W(n),k(Co(`INTERPOLATE_NOT_EDGE`,`Interpolation did not produce an edge`)))}catch(e){return k(Co(`INTERPOLATE_FAILED`,`Interpolation failed: ${e instanceof Error?e.message:String(e)}`))}}function Wk(e,t={}){if(e.length<2)return k(Co(`APPROXIMATE_MIN_POINTS`,`Approximation requires at least 2 points`));try{let n=U(H().approximatePoints(e,t));return NE(n)?O(n):(W(n),k(Co(`APPROXIMATE_NOT_EDGE`,`Approximation did not produce an edge`)))}catch(e){return k(Co(`APPROXIMATE_FAILED`,`Approximation failed: ${e instanceof Error?e.message:String(e)}`))}}function Gk(e,t,n=`arc`){let r=U(H().offsetWire2D(e.wrapped,t,{arc:`arc`,intersection:`intersection`,tangent:`tangent`,chamfer:`intersection`}[n]));return PE(r)?O(r):(W(r),k(Co(`OFFSET_NOT_WIRE`,`Offset did not produce a Wire`)))}function Kk(e,t,n,r=!1){return`${e}:${t}:${n}:${r}`}function qk(e,t){return`edge:${e}:${t}`}var Jk=new WeakMap,Yk=new WeakMap;function Xk(e,t){let n=Jk.get(e);if(n)return n.get(t)}function Zk(e,t,n){let r=Jk.get(e);r||(r=new Map,Jk.set(e,r)),r.set(t,n)}function Qk(e,t){let n=Yk.get(e);if(n)return n.get(t)}function $k(e,t,n){let r=Yk.get(e);r||(r=new Map,Yk.set(e,r)),r.set(t,n)}function eA(){Jk=new WeakMap,Yk=new WeakMap}function tA(){let e=new WeakMap,t=new WeakMap;return{getMesh(t,n){return e.get(t)?.get(n)},setMesh(t,n,r){let i=e.get(t);i||(i=new Map,e.set(t,i)),i.set(n,r)},getEdgeMesh(e,n){return t.get(e)?.get(n)},setEdgeMesh(e,n,r){let i=t.get(e);i||(i=new Map,t.set(e,i)),i.set(n,r)},clear(){e=new WeakMap,t=new WeakMap}}}function nA(e,t={}){let n=Po(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,skipNormals:a=!1,includeUVs:o=!1,cache:s=!0,signal:c}=t;c?.throwIfAborted();let l=Kk(r,i,a,o);if(s){let t=Xk(e.wrapped,l);if(t)return t}let u=H().mesh(e.wrapped,{tolerance:r,angularTolerance:i,skipNormals:a,includeUVs:o,...c?{signal:c}:{}}),d=MO(e),f={vertices:u.vertices,normals:u.normals,triangles:u.triangles,uvs:u.uvs,faceGroups:u.faceGroups.map(e=>({start:e.start,count:e.count,faceId:e.faceHash,origin:d?.get(e.faceHash)??0}))};return s&&Zk(e.wrapped,l,f),f}function rA(e,t={}){let n=Po(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,cache:a=!0}=t,o=qk(r,i);if(a){let t=Qk(e.wrapped,o);if(t)return t}let s=H().meshEdges(e.wrapped,r,i),c={lines:s.lines,edgeGroups:s.edgeGroups.map(e=>({start:e.start,count:e.count,edgeId:e.edgeHash}))};return a&&$k(e.wrapped,o,c),c}function iA(e,t){return e instanceof Error&&e.message.startsWith(`${t} export failed`)?Do(`${t}_EXPORT_FAILED`,`Failed to write ${t} file`,e):e instanceof WebAssembly.RuntimeError?Do(`${t}_EXPORT_CRASHED`,`${t} export crashed the kernel (${e.message}); the shape likely contains geometry the ${t} writer cannot serialize`,e):Do(`${t}_FILE_READ_ERROR`,`Failed to read exported ${t} file`,e)}function aA(e){let t;try{t=mD(e)}catch{return``}if(t.length<=1)return``;let n=[];return t.forEach((e,t)=>{try{wD(e)}catch(e){if(e instanceof TypeError)throw e;n.push(t)}}),n.length===0?`; could not localize the offending sub-solid among ${t.length} solids`:`; offending sub-solid${n.length>1?`s`:``} (of ${t.length}): index ${n.join(`, `)}`}function oA(e,t){try{return wD(e),null}catch(n){if(n instanceof TypeError)throw n;return Do(`${t}_EXPORT_UNSERIALIZABLE`,`${t} export aborted: the shape contains degenerate geometry the ${t} writer cannot serialize (bounding-box evaluation failed); export was skipped to avoid crashing the kernel${aA(e)}`,n)}}function sA(e){let t=oA(e,`STEP`);if(t)return k(t);try{let t=H().exportSTEP([e.wrapped]);return O(new Blob([t],{type:`application/STEP`}))}catch(e){return k(iA(e,`STEP`))}}function cA(e,t={}){let n=Po(),{tolerance:r=n.tolerance,angularTolerance:i=n.angularTolerance,binary:a=!1}=t,o=oA(e,`STL`);if(o)return k(o);try{H().hasTriangulation(e.wrapped)||H().meshShape(e.wrapped,r,i);let t=H().exportSTL(e.wrapped,a,r,i);return O(new Blob([t],{type:`application/sla`}))}catch(e){return k(iA(e,`STL`))}}function lA(e){try{let t=H().exportIGES([e.wrapped]);return O(new Blob([t],{type:`application/iges`}))}catch(e){return k(Do(`IGES_EXPORT_FAILED`,`Failed to write IGES file`,e))}}function uA(e,t){let n=t?.coarseTolerance??.5,r=t?.fineTolerance??.05,i=t?.angularTolerance??.5;return{coarse:nA(e,{tolerance:n,angularTolerance:i}),fine:nA(e,{tolerance:r,angularTolerance:i*.2})}}function dA(e){let t=wD(e),n=t.xMax-t.xMin,r=t.yMax-t.yMin,i=t.zMax-t.zMin;return Math.sqrt(n*n+r*r+i*i)||1}function fA(e,t){let n;if(t.tolerances&&t.tolerances.length>0)n=[...t.tolerances];else{let r=Math.max(1,Math.floor(t.levels??3)),i=t.spacing??4,a=(t.relativeTolerance??5e-4)*dA(e)||2**-52;n=[];for(let e=r-1;e>=0;e--)n.push(a*i**e)}return n.sort((e,t)=>t-e),n}function pA(e,t,n){return Math.min(e/t*n,1)}function mA(e,t={}){let n=t.angularTolerance??Po().angularTolerance,r=t.cache??!0,i=fA(e,t),a=Math.min(...i);return i.map(i=>{let o=pA(i,a,n);return{tolerance:i,angularTolerance:o,mesh:nA(e,{tolerance:i,angularTolerance:o,cache:r,...t.signal?{signal:t.signal}:{}})}})}function hA(){return new Promise(e=>{setTimeout(e,0)})}async function gA(e,t={}){let n=t.angularTolerance??Po().angularTolerance,r=t.cache??!0,i=t.meshLevel??((e,n,i)=>nA(e,{tolerance:n,angularTolerance:i,cache:r,...t.signal?{signal:t.signal}:{}})),a=fA(e,t),o=Math.min(...a),s=[];for(let[r,c]of a.entries()){if(t.signal?.aborted)break;let l=pA(c,o,n),u;try{u=await i(e,c,l)}catch(e){if(t.signal?.aborted)break;throw e}let d={tolerance:c,angularTolerance:l,mesh:u};if(s.push(d),t.onLevel?.(d,r),t.signal?.aborted||r===a.length-1)break;await hA()}return s}function _A(e,t,n){if(t<0||t>=e.length)throw Error(n??`Index ${t} out of bounds (length ${e.length})`);return e[t]}function vA(e,t){if(e.length===0)throw Error(t??`Expected non-empty array`);return e[0]}function yA(e,t){if(e.length===0)throw Error(t??`Expected non-empty array`);return e[e.length-1]}function bA(e){return Array.from(Array(e).keys())}function xA(e){return bA(Math.min(...e.map(e=>e.length))).map(t=>e.map(e=>e[t]))}function SA(e,t){return TE(H().makeLineEdge([...e],[...t]))}function CA(e,t=[0,0,0],n=[0,0,1]){return TE(H().makeCircleEdge([...t],[...n],e))}function wA(e,t,n=[0,0,0],r=[0,0,1],i){return t>e?k(P(`ELLIPSE_RADII`,`The minor radius must be smaller than the major one`)):O(TE(H().makeEllipseEdge([...n],[...r],e,t,i?[...i]:void 0)))}function TA(e,t,n,r=[0,0,0],i=[0,0,1],a=!1){return EE(H().makeHelixWire(e,t,n,[...r],[...i],a))}function EA(e,t,n){return TE(H().makeArcEdge([...e],[...t],[...n]))}function DA(e,t,n,r,i=[0,0,0],a=[0,0,1],o){return t>e?k(P(`ELLIPSE_RADII`,`The minor radius must be smaller than the major one`)):O(TE(H().makeEllipseArc([...i],[...a],e,t,n,r,o?[...o]:void 0)))}function OA(e,{tolerance:t=.001,smoothing:n=null,degMax:r=6,degMin:i=1}={}){try{let a=e.map(e=>[...e]);return O(TE(H().approximatePoints(a,{tolerance:t,degMin:i,degMax:r,smoothing:n})))}catch(e){return k(N(`BSPLINE_FAILED`,`B-spline approximation failed`,e))}}function kA(e,{periodic:t=!1,tolerance:n=1e-7}={}){try{let r=e.map(e=>[...e]);return O(TE(H().interpolatePoints(r,{periodic:t,tolerance:n})))}catch(e){return k(N(`BSPLINE_INTERP_FAILED`,`B-spline interpolation failed`,e))}}function AA(e){if(e.length<2)return k(P(`BEZIER_MIN_POINTS`,`Need at least 2 points for a Bezier curve, got ${e.length}`,void 0,{pointCount:e.length}));let t=e.map(e=>[...e]);return O(TE(H().makeBezierEdge(t)))}function jA(e,t,n){return TE(H().makeTangentArc([...e],[...t],[...n]))}function MA(e){try{return O(EE(H().makeWireFromMixed(e.map(e=>e.wrapped))))}catch(e){return k(N(`WIRE_BUILD_FAILED`,`Failed to build the wire: ${e instanceof Error?e.message:`unknown error`}`))}}function NA(e,t){try{let n=H().makeFace(e.wrapped,!0);if(t&&t.length>0){let e=LA(DE(n),t);return yE(e)?O(e):k(P(`FACE_NOT_PLANAR`,`makeFace produced a non-planar face — wire may not be truly planar`))}let r=DE(n);return yE(r)?O(r):k(P(`FACE_NOT_PLANAR`,`makeFace produced a non-planar face — wire may not be truly planar`))}catch(e){return k(N(`FACE_BUILD_FAILED`,`Failed to build the face. Your wire might be non planar.`,e))}}function PA(e){return NA(OO(e))}function FA(e,t){return DE(H().makeFaceOnSurface(e.wrapped,t.wrapped))}function IA(e){try{return Za(fO(H().makeNonPlanarFace(e.wrapped)),e=>FE(e)?O(e):k(N(`FACE_BUILD_FAILED`,`Failed to create a non-planar face`)))}catch(e){return k(N(`FACE_BUILD_FAILED`,`Failed to create a non-planar face`,e))}}function LA(e,t){return DE(H().addHolesInFace(e.wrapped,t.map(e=>e.wrapped)))}function RA(e){try{var t=IT();if(e.length<3)return k(P(`POLYGON_MIN_POINTS`,`You need at least 3 points to make a polygon`));let n=[...e.slice(1),e[0]],r=t.u(new XT);return Za(MA(xA([e,n]).map(([e,t])=>r.register(SA(e,t)))),e=>NA(r.register(e)))}catch(e){t.e=e}finally{t.d()}}function zA(e,t){return H().isNull(e.wrapped)?k(P(M.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function BA(e,t,n,r,i){let a=VE(e);if(!zE(a)){let o=uE(a).toUpperCase();return UE(e,a),W(a),k(Co(t,`${n}. Got ${o} instead.`,void 0,i?{diagnostics:i}:void 0,r))}return UE(e,a),O(a)}function VA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;let c=zA(e,`fuse: first operand`);if(A(c))return c;let l=zA(t,`fuse: second operand`);if(A(l))return l;if(!s)return BA(H().fuse(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`);let u=ck([e,t]),{shape:d,evolution:f,diagnostics:p}=H().fuseWithHistory(e.wrapped,t.wrapped,u,G,{optimisation:n,simplify:r,fuzzyValue:a});if(p.hasErrors){if(H().isNull(d))return H().dispose(d),console.warn(`brepjs: fuse history path produced null result; retrying without evolution tracking.`,p),BA(H().fuse(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`);console.warn(`brepjs: fuse reported OCCT warnings/errors but produced a shape. Continuing with result.`,p)}let m=BA(d,`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`,`Common causes: overlapping coplanar faces, zero-thickness geometry, or non-manifold input. Try autoHeal() on inputs first.`,p);return m.ok&&lk(f,[e,t],m.value),m}function HA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;let c=zA(e,`cut: base`);if(A(c))return c;let l=zA(t,`cut: tool`);if(A(l))return l;if(!s)return BA(H().cut(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_NOT_3D`,`Cut did not produce a 3D shape`);let u=ck([e,t]),{shape:d,evolution:f,diagnostics:p}=H().cutWithHistory(e.wrapped,t.wrapped,u,G,{optimisation:n,simplify:r,fuzzyValue:a});if(p.hasErrors){if(H().isNull(d))return H().dispose(d),console.warn(`brepjs: cut history path produced null result; retrying without evolution tracking.`,p),BA(H().cut(e.wrapped,t.wrapped,{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_NOT_3D`,`Cut did not produce a 3D shape`);console.warn(`brepjs: cut reported OCCT warnings/errors but produced a shape. Continuing with result.`,p)}let m=BA(d,`CUT_NOT_3D`,`Cut did not produce a 3D shape`,`Common causes: tool does not fully intersect the base, or produces a zero-thickness sliver. Ensure the tool extends through the shape.`,p);return m.ok&&lk(f,[e,t],m.value),m}function UA(e,t,{simplify:n=!1,signal:r,fuzzyValue:i,unsafe:a,trackEvolution:o=!0}={}){if(r?.aborted)throw r.reason;let s=zA(e,`intersect: first operand`);if(A(s))return s;let c=zA(t,`intersect: second operand`);if(A(c))return c;if(!o)return BA(H().intersect(e.wrapped,t.wrapped,{simplify:n,fuzzyValue:i}),`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`);let l=ck([e,t]),{shape:u,evolution:d,diagnostics:f}=H().intersectWithHistory(e.wrapped,t.wrapped,l,G,{simplify:n,fuzzyValue:i});if(f.hasErrors){if(H().isNull(u))return H().dispose(u),console.warn(`brepjs: intersect history path produced null result; retrying without evolution tracking.`,f),BA(H().intersect(e.wrapped,t.wrapped,{simplify:n,fuzzyValue:i}),`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`);console.warn(`brepjs: intersect reported OCCT warnings/errors but produced a shape. Continuing with result.`,f)}let p=BA(u,`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`,`Shapes may not overlap. Verify they share a common volume before intersecting.`,f);return p.ok&&lk(d,[e,t],p.value),p}function WA(e,t,n,r,i,a,o,s,c){if(s?.aborted)throw s.reason;let l=n-t;if(l===1)return O({shape:_A(e,t),owned:!1});if(l===2){let n=VA(_A(e,t),_A(e,t+1),{optimisation:r,simplify:a?i:!1,trackEvolution:o,fuzzyValue:c,unsafe:!0,...s?{signal:s}:{}});return A(n)?n:O({shape:n.value,owned:!0})}let u=t+Math.ceil(l/2),d=WA(e,t,u,r,i,!1,o,s,c);if(A(d))return d;let f=WA(e,u,n,r,i,!1,o,s,c);if(A(f))return d.value.owned&&W(d.value.shape),f;let p=VA(d.value.shape,f.value.shape,{optimisation:r,simplify:i,trackEvolution:o,fuzzyValue:c,unsafe:!0,...s?{signal:s}:{}});return d.value.owned&&W(d.value.shape),f.value.owned&&W(f.value.shape),A(p)?p:O({shape:p.value,owned:!0})}function GA(e,{optimisation:t=`none`,simplify:n=!1,strategy:r=`native`,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;if(e.length===0)return k(P(`FUSE_ALL_EMPTY`,`fuseAll requires at least one shape`));if(e.length===1)return O(vA(e));for(let t=0;t<e.length;t++){let n=zA(_A(e,t),`fuseAll: shape at index ${t}`);if(A(n))return n}if(r===`native`){let o=BA(H().fuseAll(e.map(e=>e.wrapped),{optimisation:t,simplify:n,strategy:r,fuzzyValue:a,...i?{signal:i}:{}}),`FUSE_ALL_NOT_3D`,`fuseAll did not produce a 3D shape`);return o.ok&&s&&uk(e,o.value),o}let c=WA(e,0,e.length,t,n,!0,s,i,a);return A(c)?c:O(c.value.shape)}function KA(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a,unsafe:o,trackEvolution:s=!0}={}){if(i?.aborted)throw i.reason;if(t.length===0)return O(e);let c=zA(e,`cutAll: base`);if(A(c))return c;for(let e=0;e<t.length;e++){let n=zA(_A(t,e),`cutAll: tool at index ${e}`);if(A(n))return n}let l=[e,...t],u=BA(H().cutAll(e.wrapped,t.map(e=>e.wrapped),{optimisation:n,simplify:r,fuzzyValue:a}),`CUT_ALL_NOT_3D`,`cutAll did not produce a 3D shape`);return u.ok&&s&&uk(l,u.value),u}function qA(e,t){let n=H(),r=ID(e.xDir,t),i=ID(e.yDir,t),a=ID(e.xDir,-t),o=ID(e.yDir,-t),s=e.origin,c=[...PD(PD(s,a),o)],l=[...PD(PD(s,r),o)],u=[...PD(PD(s,r),i)],d=[...PD(PD(s,a),i)],f=[n.makeLineEdge(c,l),n.makeLineEdge(l,u),n.makeLineEdge(u,d),n.makeLineEdge(d,c)],p=n.makeWire(f),m=n.makeFace(p,!0);for(let e of f)n.dispose(e);return n.dispose(p),m}function JA(e,t,{approximation:n=!0,planeSize:r=1e4}={}){if(H().isNull(e.wrapped))return k(P(M.NULL_SHAPE_INPUT,`section: shape is a null shape`));let i=qA(typeof t==`string`?j(eO(t)):t,r);try{return O(U(H().section(e.wrapped,i,n)))}catch(e){let n=e instanceof Error?e.message:String(e),r=typeof t==`string`?t:`custom`;return k(N(`SECTION_FAILED`,`Section with ${r} plane failed: ${n}`,e,{operation:`section`,plane:r},`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`))}finally{H().dispose(i)}}function YA(e){let t=H(),n=new Map,r=new Map;for(let i of e){let e=pD(i),a=e[0]?t.hashCode(e[0].wrapped,G):-1,o=e.length>1&&e[1]?t.hashCode(e[1].wrapped,G):a;r.set(i,[a,o]);for(let e of[a,o]){let t=n.get(e)??[];t.push(i),n.set(e,t)}}return{vertexToEdges:n,edgeVertexHashes:r}}function XA(e,t,n){let r=t.vertexToEdges.get(e);if(r)for(let i of r){if(n.has(i))continue;let r=t.edgeVertexHashes.get(i);if(r)return n.add(i),{edge:i,nextTip:r[0]===e?r[1]:r[0]}}}function ZA(e,t,n){n.add(e);let r=[e],i=t.edgeVertexHashes.get(e);if(!i)return r;let a=[i[1],i[0]];for(let e=0;e<2;e++){let i=a[e];if(i===void 0)continue;let o=XA(i,t,n);for(;o;)e===0?r.push(o.edge):r.unshift(o.edge),i=o.nextTip,o=XA(i,t,n)}return r}function QA(e){let t=H(),n=YA(e),r=new Set,i=[];for(let a of e){if(r.has(a))continue;let e=ZA(a,n,r);try{let n=t.makeWire(e.map(e=>e.wrapped));i.push(U(n))}catch{}}return i}function $A(e){let t=H(),n=0,r=-1;for(let i=0;i<e.length;i++){let a=e[i];if(!a)continue;let o=t.boundingBox(a.wrapped),s=o.max[0]-o.min[0],c=o.max[1]-o.min[1],l=o.max[2]-o.min[2],u=s*s+c*c+l*l;u>r&&(r=u,n=i)}return n}function ej(e,t,n={}){let r=JA(e,t,n);if(!r.ok)return r;let i=fD(r.value);if(i.length===0){let e=uD(r.value);if(e.length===0)return k(N(`SECTION_FAILED`,`sectionToFace: section produced no geometry`,void 0,void 0,`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`));i.push(...QA(e))}if(i.length===0)return k(N(`SECTION_FAILED`,`sectionToFace: section produced no usable geometry`,void 0,void 0,`The cutting plane may not intersect the shape. Verify plane position relative to shape bounds.`));let a=$A(i),o=_A(i,a),s=i.filter((e,t)=>t!==a);return NA(o,s.length>0?s:void 0)}function tj(e,t){if(t.length===0)return O(e);if(H().isNull(e.wrapped))return k(P(M.NULL_SHAPE_INPUT,`split: shape is a null shape`));for(let e=0;e<t.length;e++)if(H().isNull(_A(t,e).wrapped))return k(P(M.NULL_SHAPE_INPUT,`splitShape: tool at index ${e} is a null shape`));try{return O(U(H().split(e.wrapped,t.map(e=>e.wrapped))))}catch(e){let n=e instanceof Error?e.message:String(e);return k(N(`SPLIT_FAILED`,`Split operation failed on ${t.length} tool(s): ${n}`,e,{operation:`split`,toolCount:t.length},`The splitting tools may not intersect the shape. Ensure tools cross through the shape's interior.`))}}function nj(e,t,n={}){let r=[];for(let i of t){let t=JA(e,i,n);if(A(t))return t;r.push(t.value)}return O(r)}function rj(e,t,n){if(t.length===0)return O(e);let r=n?.optimisation===`commonFace`?1:n?.optimisation===`sameFace`?2:0,i=H(),a=t.map(e=>({op:e.op,tool:e.tool.wrapped}));try{let o=i.booleanPipeline?.(e.wrapped,a,{glueMode:r});if(o===void 0)return ij(e,t,n);if(o===null)return k(N(`BOOLEAN_PIPELINE_FAILED`,`Boolean pipeline returned null shape`));let s=U(o);return zE(s)?O(s):(W(s),k(Co(`BOOLEAN_PIPELINE_NOT_3D`,`Pipeline result is not a 3D shape`)))}catch(e){return k(N(`BOOLEAN_PIPELINE_FAILED`,e instanceof Error?e.message:String(e)))}}function ij(e,t,n){let r=e,i={...n?.optimisation?{optimisation:n.optimisation}:{},unsafe:!0};for(let e of t){let t=e.op===`fuse`?VA(r,e.tool,i):e.op===`cut`?HA(r,e.tool,i):UA(r,e.tool,i);if(A(t))return t;r=j(t)}return O(r)}function aj(e){return U(H().sew(e.map(e=>e.wrapped)))}function oj(e,t=!1){let n=aj(e);return!t&&!IE(n)?k(Co(`WELD_NOT_SHELL`,`Could not make a shell from faces and shells`)):O(n)}function sj(e,t,n=[0,0,0],r=[0,0,1]){return kE(H().makeCylinder(e,t,[...n],[...r]))}function cj(e){return kE(H().makeSphere(e))}function lj(e,t,n,r=[0,0,0],i=[0,0,1]){return kE(H().makeCone(e,t,n,[...r],[...i]))}function uj(e,t,n=[0,0,0],r=[0,0,1]){return kE(H().makeTorus(e,t,[...n],[...r]))}function dj(e,t,n){return kE(H().makeEllipsoid(e,t,n))}function fj(e){return wE(H().makeVertex(e[0],e[1],e[2]))}function pj(e,t,n=1e-6){return Za(uO(H().offset(e.wrapped,t,n)),e=>Za(fO(e),e=>zE(e)?O(e):k(Co(`OFFSET_NOT_3D`,`Could not offset to a 3d shape`))))}function mj(e){return jE(H().makeCompound(e.map(e=>e.wrapped)))}function hj(e){try{var t=IT();let n=t.u(aj(e)),r=U(H().solidFromShell(n.wrapped));return LE(r)?O(r):(W(r),k(Co(`SOLID_BUILD_FAILED`,`Could not make a solid of faces and shells`)))}catch(e){t.e=e}finally{t.d()}}function gj(e){return{position:e.vertices,normal:e.normals,index:e.triangles}}function _j(e){return{position:e.vertices,normal:e.normals,index:e.triangles,groups:e.faceGroups.map((e,t)=>({start:e.start,count:e.count,materialIndex:t,faceId:e.faceId}))}}function vj(e){return{position:e.lines}}function yj(e,t){return{coarse:gj(e.coarse),fine:gj(e.fine),coarseDistance:t?.coarse??50,fineDistance:t?.fine??0}}function bj(e,t){let n=t?.step??50,r=t?.distances;if(r&&r.length!==e.length)throw Error(`toLODGeometryLevels: distances must have one entry per level (got ${r.length} for ${e.length} levels)`);let i=e.length-1;return e.map((e,t)=>({geometry:gj(e.mesh),distance:r?.[t]??(i-t)*n}))}function xj(e,t,n,r){if(t.length===0)return k(P(`CHAMFER_ANGLE_NO_EDGES`,`chamferDistAngle requires at least one edge`,void 0,{edgeCount:0}));if(n<=0)return k(P(`CHAMFER_ANGLE_BAD_DISTANCE`,`distance must be positive, got ${n}`,void 0,{distance:n}));if(r<=0||r>=90)return k(P(`CHAMFER_ANGLE_BAD_ANGLE`,`angleDeg must be in range (0, 90), got ${r}`,void 0,{angleDeg:r}));let i;try{let a=H(),o=t.map(e=>e.wrapped);i=a.chamferDistAngle(e.wrapped,o,n,r)}catch(e){return k(N(`CHAMFER_ANGLE_FAILED`,`chamferDistAngle kernel call failed: ${e instanceof Error?e.message:String(e)}`,e,{distance:n,angleDeg:r,edgeCount:t.length}))}let a=uO(i);if(A(a))return H().dispose(i),a;let o=U(a.value);return UE(i,o),zE(o)?O(o):(W(o),k(Co(`CHAMFER_ANGLE_NOT_3D`,`chamferDistAngle did not produce a 3D shape`)))}function Sj(e){let t=H();return t.getNurbsCurveData?t.getNurbsCurveData(e.wrapped):null}function Cj(e){let t=H();return t.getNurbsSurfaceData?t.getNurbsSurfaceData(e.wrapped):null}var wj={cut:HA,cutAll:KA,fuse:VA,fuseAll:GA};function Tj(e){return{totalInputs:e.totalInputs,batchAttempts:e.batchAttempts,batchSucceeded:e.batchSucceeded,singletonFallbacks:e.singletonFallbacks,failedInputs:[...e.failedInputs].sort((e,t)=>e-t)}}function Ej(e,t,n={}){return Dj(wj,e,t,n)}function Dj(e,t,n,r={}){if(r.signal?.aborted)throw r.signal.reason;let i={totalInputs:n.length,batchAttempts:0,batchSucceeded:0,singletonFallbacks:0,failedInputs:new Set},a=Oj(e,t,n,0,r,i);return A(a)?a:O({shape:a.value,telemetry:Tj(i)})}function Oj(e,t,n,r,i,a){if(n.length===0)return O(t);if(n.length===1)return kj(e,t,n,r,i,a);a.batchAttempts++;let o=Pj(()=>e.cutAll(t,n,i));if(o&&o.ok)return a.batchSucceeded++,o;if(i.signal?.aborted)throw i.signal.reason;let s=Math.floor(n.length/2),c=Oj(e,t,n.slice(0,s),r,i,a);return c.ok?Oj(e,c.value,n.slice(s),r+s,i,a):c}function kj(e,t,n,r,i,a){a.singletonFallbacks++;let o=vA(n),s=Pj(()=>e.cut(t,o,i));if(s&&s.ok)return s;if(i.signal?.aborted)throw i.signal.reason;return a.failedInputs.add(r),O(t)}function Aj(e,t={}){return jj(wj,e,t)}function jj(e,t,n={}){if(n.signal?.aborted)throw n.signal.reason;if(t.length===0)return k(P(M.FUSE_ALL_EMPTY,`fuseAllBisect requires at least one shape`));let r={totalInputs:t.length,batchAttempts:0,batchSucceeded:0,singletonFallbacks:0,failedInputs:new Set},i=Mj(e,t,0,n,r);return A(i)?i:O({shape:i.value,telemetry:Tj(r)})}function Mj(e,t,n,r,i){if(t.length===1)return O(vA(t));i.batchAttempts++;let a=Pj(()=>e.fuseAll(t,r));if(a&&a.ok)return i.batchSucceeded++,a;if(r.signal?.aborted)throw r.signal.reason;let o=Math.floor(t.length/2);return Nj(e,Mj(e,t.slice(0,o),n,r,i),Mj(e,t.slice(o),n+o,r,i),t,n,o,r,i)}function Nj(e,t,n,r,i,a,o,s){if(t.ok&&n.ok){s.singletonFallbacks++;let c=Pj(()=>e.fuse(t.value,n.value,o));if(c&&c.ok)return c;for(let e=a;e<r.length;e++)s.failedInputs.add(i+e);return t}if(t.ok){for(let e=a;e<r.length;e++)s.failedInputs.add(i+e);return t}if(n.ok){for(let e=0;e<a;e++)s.failedInputs.add(i+e);return n}return t}function Pj(e){try{return e()}catch{return null}}function Fj(e,t,n){return H().checkBoolean(e.wrapped,t.wrapped,n)}function Ij(e,t){return H().isNull(e.wrapped)?k(P(M.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function Lj(e,t){return H().isNull(e.wrapped)?k(P(M.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function Rj(e,t,n,r){let i=VE(e);if(!zE(i)){let a=uE(i).toUpperCase();return UE(e,i),W(i),k(Co(t,`${n}. Got ${a} instead.`,void 0,void 0,r))}return UE(e,i),O(i)}function zj(e,t){let n=[],r=new Map;for(let i of e){let e=t(i)??0;typeof e==`number`&&e<=0||Array.isArray(e)&&(e[0]<=0||e[1]<=0)||(n.push(i),r.set(H().hashCode(i.wrapped,G),e))}return n.length===0?null:{edges:n,kernelParam:e=>r.get(H().hashCode(e,2147483647))??1}}function Bj(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a}={}){if(i?.aborted)throw i.reason;let o=Ij(e,`fuseWithEvolution: first operand`);if(A(o))return o;let s=Ij(t,`fuseWithEvolution: second operand`);if(A(s))return s;let c=ck([e,t]),{shape:l,evolution:u}=H().fuseWithHistory(e.wrapped,t.wrapped,c,G,{optimisation:n,simplify:r,fuzzyValue:a}),d=Rj(l,`FUSE_NOT_3D`,`Fuse did not produce a 3D shape`,`Common causes: overlapping coplanar faces, zero-thickness geometry, or non-manifold input. Try autoHeal() on inputs first.`);return d.ok?(lk(u,[e,t],d.value),O({shape:d.value,evolution:u})):d}function Vj(e,t,{optimisation:n=`none`,simplify:r=!1,signal:i,fuzzyValue:a}={}){if(i?.aborted)throw i.reason;let o=Ij(e,`cutWithEvolution: base`);if(A(o))return o;let s=Ij(t,`cutWithEvolution: tool`);if(A(s))return s;let c=ck([e,t]),{shape:l,evolution:u}=H().cutWithHistory(e.wrapped,t.wrapped,c,G,{optimisation:n,simplify:r,fuzzyValue:a}),d=Rj(l,`CUT_NOT_3D`,`Cut did not produce a 3D shape`,`Common causes: tool does not fully intersect the base, or produces a zero-thickness sliver. Ensure the tool extends through the shape.`);return d.ok?(lk(u,[e,t],d.value),O({shape:d.value,evolution:u})):d}function Hj(e,t,{simplify:n=!1,signal:r,fuzzyValue:i}={}){if(r?.aborted)throw r.reason;let a=Ij(e,`intersectWithEvolution: first operand`);if(A(a))return a;let o=Ij(t,`intersectWithEvolution: second operand`);if(A(o))return o;let s=ck([e,t]),{shape:c,evolution:l}=H().intersectWithHistory(e.wrapped,t.wrapped,s,G,{simplify:n,fuzzyValue:i}),u=Rj(c,`INTERSECT_NOT_3D`,`Intersect did not produce a 3D shape`,`Shapes may not overlap. Verify they share a common volume before intersecting.`);return u.ok?(lk(l,[e,t],u.value),O({shape:u.value,evolution:l})):u}function Uj(e,t,n){let r=Lj(e,`filletWithEvolution: shape`);if(A(r))return r;if(typeof n==`number`&&n<=0)return k(P(`INVALID_FILLET_RADIUS`,`Fillet radius must be positive`,void 0,void 0,`Provide a positive radius value greater than 0`));if(Array.isArray(n)&&(n[0]<=0||n[1]<=0))return k(P(`INVALID_FILLET_RADIUS`,`Fillet radii must both be positive`,void 0,void 0,`Both radius values must be greater than 0`));let i=t??uD(e);if(i.length===0)return k(P(M.FILLET_NO_EDGES,`No edges found for fillet`,void 0,void 0,`Check that the shape has edges, or adjust your edge finder criteria`));try{let t,r;if(typeof n==`function`){let e=zj(i,n);if(!e)return k(P(M.FILLET_NO_EDGES,`No edges with positive radius for fillet`,void 0,void 0,`Check that the radius callback returns positive values`));t=e.edges,r=e.kernelParam}else t=[...i],r=n;let a=ck([e]),{shape:o,evolution:s}=H().filletWithHistory(e.wrapped,t.map(e=>e.wrapped),r,a,G),c=U(o);return zE(c)?(lk(s,[e],c),O({shape:c,evolution:s})):(W(c),k(N(M.FILLET_NOT_3D,`Fillet result is not a 3D shape`)))}catch(e){return k(N(`FILLET_FAILED`,`Fillet operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`fillet`,edgeCount:i.length,radius:n}))}}function Wj(e,t,n){let r=Lj(e,`chamferWithEvolution: shape`);if(A(r))return r;if(typeof n==`number`&&n<=0)return k(P(`INVALID_CHAMFER_DISTANCE`,`Chamfer distance must be positive`,void 0,void 0,`Provide a positive distance value greater than 0`));if(Array.isArray(n)&&(n[0]<=0||n[1]<=0))return k(P(`INVALID_CHAMFER_DISTANCE`,`Chamfer distances must both be positive`,void 0,void 0,`Both distance values must be greater than 0`));let i=t??uD(e);if(i.length===0)return k(P(M.CHAMFER_NO_EDGES,`No edges found for chamfer`));try{let t,r;if(typeof n==`function`){let e=zj(i,n);if(!e)return k(P(M.CHAMFER_NO_EDGES,`No edges with positive distance for chamfer`));t=e.edges,r=e.kernelParam}else t=[...i],r=n;let a=ck([e]),{shape:o,evolution:s}=H().chamferWithHistory(e.wrapped,t.map(e=>e.wrapped),r,a,G),c=U(o);return zE(c)?(lk(s,[e],c),O({shape:c,evolution:s})):(W(c),k(N(M.CHAMFER_NOT_3D,`Chamfer result is not a 3D shape`)))}catch(e){return k(N(`CHAMFER_FAILED`,`Chamfer operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`chamfer`,edgeCount:i.length,distance:n}))}}function Gj(e,t,n,r=.001){let i=Lj(e,`shellWithEvolution: shape`);if(A(i))return i;if(n<=0)return k(P(`INVALID_THICKNESS`,`Shell thickness must be positive`));if(t.length===0)return k(P(`NO_FACES`,`At least one face must be specified for shell`));try{let i=ck([e]),{shape:a,evolution:o}=H().shellWithHistory(e.wrapped,t.map(e=>e.wrapped),n,i,G,r),s=U(a);return zE(s)?(lk(o,[e],s),O({shape:s,evolution:o})):(W(s),k(N(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`)))}catch(e){return k(N(`SHELL_FAILED`,`Shell operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`shell`,faceCount:t.length,thickness:n}))}}function Kj(e,t,n){try{let r=U(H().positionOnCurve(e.wrapped,t.wrapped,n));return zE(r)?O(r):(W(r),k(N(M.POSITION_ON_CURVE_FAILED,`positionOnCurve did not produce a 3D shape`)))}catch(e){return k(N(M.POSITION_ON_CURVE_FAILED,`Failed to position shape on curve at param ${n}`,e))}}function qj(e,t){return H().isNull(e.wrapped)?k(P(M.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function Jj(e,t){if(typeof e==`number`&&e<=0)return k(P(t.code,t.scalar,void 0,void 0,t.scalarHint));if(Array.isArray(e)&&(e[0]<=0||e[1]<=0))return k(P(t.code,t.pair,void 0,void 0,t.pairHint))}function Yj(e,t){let n=[],r=new Map;for(let i of e){let e=t(i)??0;typeof e==`number`&&e<=0||Array.isArray(e)&&(e[0]<=0||e[1]<=0)||(n.push(i),r.set(H().hashCode(i.wrapped,G),e))}return n.length===0?null:{edges:n,kernelParam:e=>{let t=r.get(H().hashCode(e,G));if(t===void 0)throw Error(`fillet/chamfer: edge hash not found — possible hash collision`);return t}}}function Xj(e,t,n,r,i){let a=U(t);return zE(a)?(lk(e,n,a),O(a)):(W(a),k(N(r,i)))}function Zj(e,t){if(typeof t!=`function`)return{filteredFaces:[...e],kernelAngle:t};let n=[],r=new Map;for(let i of e){let e=t(i);e===null||e===0||Math.abs(e)>=90||(n.push(i),r.set(H().hashCode(i.wrapped,G),e))}return{filteredFaces:n,kernelAngle:e=>{let t=r.get(H().hashCode(e,G));if(t===void 0)throw Error(`draft: face hash not found — possible hash collision`);return t}}}function Qj(e,t){let n=qj(e,`thicken: shape`);if(A(n))return n;try{let n=ck([e]),{shape:r,evolution:i}=H().thickenWithHistory(e.wrapped,t,n,G),a=U(r);return lk(i,[e],a),O(a)}catch(e){return k(N(`THICKEN_FAILED`,`Thicken operation failed: ${e instanceof Error?e.message:String(e)}`,e))}}function $j(e,t,n){let r=qj(e,`fillet: shape`);if(A(r))return r;let i=Jj(n,{code:`INVALID_FILLET_RADIUS`,scalar:`Fillet radius must be positive`,pair:`Fillet radii must both be positive`,scalarHint:`Provide a positive radius value greater than 0`,pairHint:`Both radius values must be greater than 0`});if(i)return i;let a=t??uD(e);if(a.length===0)return k(P(M.FILLET_NO_EDGES,`No edges found for fillet`,void 0,void 0,`Check that the shape has edges, or adjust your edge finder criteria`));if(typeof n==`function`){let e=Yj(a,n);return e?O({filteredEdges:e.edges,kernelRadius:e.kernelParam,selectedCount:a.length}):k(P(M.FILLET_NO_EDGES,`No edges with positive radius for fillet`,void 0,void 0,`Check that the radius callback returns positive values`))}return O({filteredEdges:[...a],kernelRadius:n,selectedCount:a.length})}function eM(e,t,n,{trackEvolution:r=!0}={}){let i=$j(e,t,n);if(A(i))return i;let{filteredEdges:a,kernelRadius:o,selectedCount:s}=i.value;try{let t=a.map(e=>e.wrapped);if(!r){let n=U(H().fillet(e.wrapped,t,o));return zE(n)?O(n):(W(n),k(N(M.FILLET_NOT_3D,`Fillet result is not a 3D shape`)))}let n=ck([e]),{shape:i,evolution:s}=H().filletWithHistory(e.wrapped,t,o,n,G);return Xj(s,i,[e],M.FILLET_NOT_3D,`Fillet result is not a 3D shape`)}catch(e){return k(N(`FILLET_FAILED`,`Fillet operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`fillet`,edgeCount:s,radius:n}))}}function tM(e,t,n){let r=qj(e,`chamfer: shape`);if(A(r))return r;let i=Jj(n,{code:`INVALID_CHAMFER_DISTANCE`,scalar:`Chamfer distance must be positive`,pair:`Chamfer distances must both be positive`,scalarHint:`Provide a positive distance value greater than 0`,pairHint:`Both distance values must be greater than 0`});if(i)return i;let a=t??uD(e);if(a.length===0)return k(P(M.CHAMFER_NO_EDGES,`No edges found for chamfer`));try{let t,r;if(typeof n==`function`){let e=Yj(a,n);if(!e)return k(P(M.CHAMFER_NO_EDGES,`No edges with positive distance for chamfer`));t=e.edges,r=e.kernelParam}else t=[...a],r=n;let i=ck([e]),{shape:o,evolution:s}=H().chamferWithHistory(e.wrapped,t.map(e=>e.wrapped),r,i,G);return Xj(s,o,[e],M.CHAMFER_NOT_3D,`Chamfer result is not a 3D shape`)}catch(e){return k(N(`CHAMFER_FAILED`,`Chamfer operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`chamfer`,edgeCount:a.length,distance:n}))}}function nM(e,t,n,r=.001,{trackEvolution:i=!0}={}){let a=qj(e,`shell: shape`);if(A(a))return a;if(n<=0)return k(P(`INVALID_THICKNESS`,`Shell thickness must be positive`));if(t.length===0)return k(P(`NO_FACES`,`At least one face must be specified for shell`));try{if(!i){let i=U(H().shell(e.wrapped,t.map(e=>e.wrapped),n,r));return zE(i)?O(i):(W(i),k(N(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`)))}let a=ck([e]),{shape:o,evolution:s}=H().shellWithHistory(e.wrapped,t.map(e=>e.wrapped),n,a,G,r),c=U(o);return zE(c)?(lk(s,[e],c),O(c)):(W(c),k(N(`SHELL_RESULT_NOT_3D`,`Shell result is not a 3D shape`)))}catch(e){return k(N(`SHELL_FAILED`,`Shell operation failed: ${e instanceof Error?e.message:String(e)}`,e,{operation:`shell`,faceCount:t.length,thickness:n}))}}function rM(e,t,n=1e-6){let r=qj(e,`offset: shape`);if(A(r))return r;if(Math.abs(t)<1e-10)return k(P(`ZERO_OFFSET`,`Offset distance cannot be zero`));try{let r=ck([e]),{shape:i,evolution:a}=H().offsetWithHistory(e.wrapped,t,r,G,n),o=U(i);return zE(o)?(lk(a,[e],o),O(o)):(W(o),k(N(`OFFSET_RESULT_NOT_3D`,`Offset result is not a 3D shape`)))}catch(e){return k(N(`OFFSET_FAILED`,`Offset operation failed: ${e instanceof Error?e.message:String(e)}`,e))}}function iM(e,t,n){let r=qj(e,`draft: shape`);if(A(r))return r;if(typeof n==`number`){if(Math.abs(n)<1e-10)return k(P(M.DRAFT_INVALID_ANGLE,`Draft angle cannot be zero`,void 0,void 0,`Provide a non-zero angle in degrees`));if(Math.abs(n)>=90)return k(P(M.DRAFT_INVALID_ANGLE,`Draft angle must be between -90 and 90 degrees (exclusive)`,void 0,void 0,`Typical draft angles are 1-5 degrees for injection molding`))}if(t.length===0)return k(P(M.DRAFT_NO_FACES,`No faces specified for draft`,void 0,void 0,`Select at least one face to apply the draft angle to`))}function aM(e,t,n,r,i){let a=iM(e,t,i);if(a)return a;try{let{filteredFaces:a,kernelAngle:o}=Zj(t,i);if(a.length===0)return k(P(M.DRAFT_NO_FACES,`No faces with valid draft angle`,void 0,void 0,`Check that the angle callback returns non-zero values between -90 and 90 degrees`));let s=ck([e]),{shape:c,evolution:l}=H().draftWithHistory(e.wrapped,a.map(e=>e.wrapped),[n[0],n[1],n[2]],[r[0],r[1],r[2]],o,s,G);return Xj(l,c,[e],M.DRAFT_NOT_3D,`Draft result is not a 3D shape`)}catch(e){let n=e instanceof Error?e.message:String(e);return k(N(M.DRAFT_FAILED,`Draft operation failed: ${n}`,e,{operation:`draft`,faceCount:t.length,angle:i}))}}function oM(e,t,n){if(n.length===0)return k(P(M.VARIABLE_FILLET_FAILED,`radii must contain at least one radius spec`));for(let e of n)if(e.radius<=0)return k(P(M.VARIABLE_FILLET_FAILED,`All radius values must be positive`));let r=H();try{let i=JSON.stringify({edge:r.hashCode(t.wrapped,G),radii:n.map(e=>({param:e.param,radius:e.radius}))}),a=U(r.filletVariable(e.wrapped,i));return zE(a)?LE(a)?O(a):(W(a),k(N(M.VARIABLE_FILLET_FAILED,`Variable-radius fillet did not produce a solid`))):(W(a),k(N(M.VARIABLE_FILLET_FAILED,`Variable-radius fillet did not produce a 3D shape`)))}catch(e){return k(N(M.VARIABLE_FILLET_FAILED,`Variable-radius fillet failed`,e))}}function sM(e){return DD(e)}function cM(e){if(!LE(e))return k(P(`NOT_A_SOLID`,`Input shape is not a solid`));let t=sM(e);try{let n=H().healSolid(e.wrapped);if(!n)return t?O(e):k(N(M.HEAL_NO_EFFECT,`Solid healing had no effect — shape is still invalid`));let r=U(n);return LE(r)?(lD(r),sM(r)?O(r):(W(r),k(N(`HEAL_SOLID_INCOMPLETE`,`Healed result is still invalid after ShapeFix_Solid`)))):(W(r),k(N(`HEAL_RESULT_NOT_SOLID`,`Healed result is not a solid`)))}catch(e){return k(N(`HEAL_SOLID_FAILED`,`Solid healing failed`,e))}}function lM(e){if(!FE(e))return k(P(`NOT_A_FACE`,`Input shape is not a face`));try{let t=U(H().healFace(e.wrapped));return FE(t)?O(t):(W(t),k(N(`HEAL_RESULT_NOT_FACE`,`Healed result is not a face`)))}catch(e){return k(N(`HEAL_FACE_FAILED`,`Face healing failed`,e))}}function uM(e,t){if(!PE(e))return k(P(`NOT_A_WIRE`,`Input shape is not a wire`));try{let n=U(H().healWire(e.wrapped,t?.wrapped));return PE(n)?O(n):(W(n),k(N(`HEAL_RESULT_NOT_WIRE`,`Healed result is not a wire`)))}catch(e){return k(N(`HEAL_WIRE_FAILED`,`Wire healing failed`,e))}}function dM(e){return LE(e)?cM(e):FE(e)?lM(e):PE(e)?uM(e):O(e)}function fM(e,t){let n=t?.fixWires!==!1,r=t?.fixFaces!==!1,i=t?.fixSolids!==!1,a=t?.fixSelfIntersection===!0,o=t?.sewTolerance,s=[],c=[];if(sM(e))return O({shape:e,report:{isValid:!0,alreadyValid:!0,wiresHealed:0,facesHealed:0,solidHealed:!1,steps:[`Shape already valid`],diagnostics:[{name:`validation`,attempted:!0,succeeded:!0}]}});s.push(`Shape invalid — applying shape-level healing`);let l=fD(e).length,u=dD(e).length,d=e,f=!1,p=t=>{let n=d;d=t,n!==e&&n.wrapped!==t.wrapped&&W(n)};if(o!==void 0)try{p(U(H().sew([d.wrapped],o))),s.push(`Applied sewing with tolerance ${o}`),c.push({name:`sew`,attempted:!0,succeeded:!0,detail:`tolerance=${o}`})}catch(e){let t=e instanceof Error?e.message:String(e);s.push(`Sewing failed: ${t}`),c.push({name:`sew`,attempted:!0,succeeded:!1,detail:t})}if(a&&n){let e=fD(d),t=0;for(let n of e)try{H().fixSelfIntersection(n.wrapped),t++}catch{}s.push(`Self-intersection fix: ${t}/${e.length} wires`),c.push({name:`fixSelfIntersection`,attempted:!0,succeeded:t>0,detail:`${t}/${e.length} wires fixed`})}if(LE(d)&&i||FE(d)&&r||PE(d)&&n){let t=dM(d);Ja(t)?(p(t.value),LE(e)?(f=!0,s.push(`Applied ShapeFix_Solid`),c.push({name:`healSolid`,attempted:!0,succeeded:!0})):FE(e)?(s.push(`Applied ShapeFix_Face`),c.push({name:`healFace`,attempted:!0,succeeded:!0})):(s.push(`Applied ShapeFix_Wire`),c.push({name:`healWire`,attempted:!0,succeeded:!0}))):(s.push(`Shape-level healing failed`),c.push({name:`healShape`,attempted:!0,succeeded:!1}))}else c.push({name:`healShape`,attempted:!1,succeeded:!1,detail:`skipped by options`});let m=fD(d).length,h=dD(d).length,g=Math.abs(m-l),_=Math.abs(h-u);g>0&&s.push(`Wire count changed by ${g}`),_>0&&s.push(`Face count changed by ${_}`);let v=sM(d);return s.push(v?`Final validation: valid`:`Final validation: still invalid`),c.push({name:`finalValidation`,attempted:!0,succeeded:v}),O({shape:d,report:{isValid:v,alreadyValid:!1,wiresHealed:g,facesHealed:_,solidHealed:f,steps:s,diagnostics:c}})}function pM(e){try{return O(U(H().fixShape(e.wrapped)))}catch(e){return k(N(M.FIX_SHAPE_FAILED,`ShapeFix_Shape failed`,e))}}function mM(e){try{let t=U(H().solidFromShell(e.wrapped));return LE(t)?sM(t)?O(t):(W(t),k(N(M.SOLID_FROM_SHELL_FAILED,`solidFromShell produced an invalid solid`))):(W(t),k(N(M.SOLID_FROM_SHELL_FAILED,`solidFromShell did not produce a solid`)))}catch(e){return k(N(M.SOLID_FROM_SHELL_FAILED,`Failed to create solid from shell`,e))}}function hM(e){try{let t=U(H().fixSelfIntersection(e.wrapped));return PE(t)?O(t):(W(t),k(N(M.FIX_SELF_INTERSECTION_FAILED,`Result is not a wire`)))}catch(e){return k(N(M.FIX_SELF_INTERSECTION_FAILED,`Failed to fix wire self-intersection`,e))}}function gM(e,{profile:t,endFactor:n=1}){return e<1e-10?k(P(`INVALID_EXTRUSION_LENGTH`,`Extrusion length too small (< 1e-10)`)):t!==`s-curve`&&t!==`linear`?k(P(`UNSUPPORTED_PROFILE`,`Unsupported extrusion profile: ${String(t)}`)):O(H().buildExtrusionLaw(t,e,n).Trim(0,e,1e-6))}function _M(e,t){let n=H(),r=n.makeLineEdge([...e],[...t]),i=n.makeWire([r]);return n.dispose(r),U(i)}function vM(e,t,n,r,i,a=!1){return U(H().makeHelixWire(e,t,n,[...r],[...i],a))}function yM(e){let t=U(e.shape),n=U(e.firstShape),r=U(e.lastShape),i=()=>{W(t),W(n),W(r)};return zE(t)?PE(n)?PE(r)?O([t,n,r]):(i(),k(Co(`SWEEP_END_NOT_WIRE`,`Sweep did not produce an end Wire`))):(i(),k(Co(`SWEEP_START_NOT_WIRE`,`Sweep did not produce a start Wire`))):(i(),k(Co(`SWEEP_NOT_3D`,`Sweep did not produce a 3D shape`)))}function bM(e,t,n={},r=!1){if(n.mode===`simple`&&!r){let n=U(H().simplePipe(e.wrapped,t.wrapped));return zE(n)?O(n):(W(n),k(Co(`SWEEP_NOT_3D`,`Simple pipe did not produce a 3D shape`)))}let{frenet:i=!1,auxiliarySpine:a,law:o=null,transitionMode:s=`right`,withContact:c,support:l,forceProfileSpineOthogonality:u,tolerance:d,boundTolerance:f,angularTolerance:p,maxDegree:m,maxSegments:h}=n,g=H(),_=s===`round`?!0:!!u,v=g.sweepPipeShell(e.wrapped,t.wrapped,{transitionMode:s,contact:!!c,correction:_,frenet:i,shellMode:r,...a?.wrapped?{auxiliary:a.wrapped}:{},...o===null?{}:{law:o},...l===null?{}:{support:l},tolerance:d,boundTolerance:f,angularTolerance:p,maxDegree:m,maxSegments:h});if(r&&typeof v==`object`&&`firstShape`in v)return yM(v);let y=U(v);return zE(y)?O(y):(W(y),k(Co(`SWEEP_NOT_3D`,`Sweep did not produce a 3D shape`)))}function xM(e,t,n,r){return bM(e,_M(t,PD(t,n)),{support:r})}function SM(e,t,n,r,i=!1){try{var a=IT();let o=BD(n);if(o<1e-10)return k(P(`ZERO_LENGTH_EXTRUSION`,`Extrusion vector cannot have zero length`));let s=PD(t,n),c=a.u(_M(t,s)),l=null;if(r){let e=gM(o,r);if(A(e))return e;l=e.value}return bM(e,c,{law:l},i)}catch(e){a.e=e}finally{a.d()}}function CM(e,t,n,r,i,a=!1){try{var o=IT();if(Math.abs(t)<1e-10)return k(P(`ZERO_TWIST_ANGLE`,`Twist angle cannot be zero`));let s=BD(r);if(s<1e-10)return k(P(`ZERO_LENGTH_EXTRUSION`,`Extrusion vector cannot have zero length`));let c=PD(n,r),l=o.u(_M(n,c)),u=t<0,d=360/Math.abs(t)*s,f=o.u(vM(d,s,1,n,r,u)),p=null;if(i){let e=gM(s,i);if(A(e))return e;p=e.value}return bM(e,l,{auxiliarySpine:f,law:p},a)}catch(e){o.e=e}finally{o.d()}}function wM(e){let t=e.map(e=>e.location);for(let e=0;e<t.length;e++){let n=t[e];if(n!==void 0&&(n<0||n>1))return P(M.MULTI_SWEEP_FAILED,`Section ${e} location ${n} is out of range [0, 1]`)}let n=t.filter(e=>e!==void 0);for(let e=1;e<n.length;e++)if((n[e]??0)<=(n[e-1]??0))return P(M.MULTI_SWEEP_FAILED,`Section locations must be strictly increasing`)}function TM(e,t,n){let[r,i]=n.curveParameters(t.wrapped),a=i-r,o=Array(e.length);for(let t=0;t<e.length;t++){let n=e[t]?.location;o[t]=n===void 0?NaN:r+n*a}let s=-1,c=r;for(let t=0;t<=e.length;t++){let n=t===e.length;if(!n&&!Number.isNaN(o[t]??NaN)||n){let e=n?i:o[t]??i,a=t-s-1;for(let t=1;t<=a;t++)o[s+t]=c+t/(a+1)*(e-c);n||(s=t,c=o[t]??r)}}for(let e=1;e<o.length;e++)if((o[e]??0)<=(o[e-1]??0))return k(P(M.MULTI_SWEEP_FAILED,`Computed section parameters are not strictly increasing at index ${e} (${o[e-1]?.toFixed(4)} >= ${o[e]?.toFixed(4)})`));return O(o)}function EM(e,t,n){if(e.length<2)return k(P(M.MULTI_SWEEP_INSUFFICIENT_SECTIONS,`Multi-section sweep requires at least 2 sections, got ${e.length}`));let{solid:r=!0,ruled:i=!1,tolerance:a=1e-6}=n??{},o=wM(e);if(o)return k(o);try{let n=H(),o=TM(e,t,n);if(A(o))return o;let s=o.value,c=[],l=[];try{for(let r=0;r<e.length;r++){let i=s[r],a=e[r];if(i===void 0||a===void 0)continue;let o=n.positionOnCurve(a.wire.wrapped,t.wrapped,i);c.push(o),l.push(n.downcast(o,`wire`))}let o=U(n.loftAdvanced(l,{solid:r,ruled:i,tolerance:a}));return zE(o)?O(o):(W(o),k(Co(`MULTI_SWEEP_NOT_3D`,`Multi-section sweep did not produce a 3D shape`)))}finally{for(let e of l)n.dispose(e);for(let e of c)n.dispose(e)}}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.MULTI_SWEEP_FAILED,`Multi-section sweep failed: ${t}`,e,void 0,`Common causes: profile too large for path curvature, self-intersecting result, or discontinuous path. Try simplifying the profile or path.`))}}function DM(e,t,n,r={}){let{transition:i=`transformed`,solid:a=!0,tolerance:o}=r;try{let r=H(),s=!a,c=n.length>0?n[0]?.wrapped:void 0,l=r.sweepPipeShell(e.wrapped,t.wrapped,{transitionMode:i,...c?{auxiliary:c}:{},shellMode:s,...o===void 0?{}:{tolerance:o,boundTolerance:o}}),u=U(typeof l==`object`&&`shape`in l?l.shape:l);return zE(u)?O(u):(W(u),k(Co(`GUIDED_SWEEP_NOT_3D`,`Guided sweep did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.GUIDED_SWEEP_FAILED,`Guided sweep failed: ${t}`,e,void 0,`Common causes: profile too large for path curvature, self-intersecting result, or discontinuous path. Try simplifying the profile or path.`))}}function OM(e,t){if(H().isNull(e.wrapped))return k(P(M.NULL_SHAPE_INPUT,`extrude: face is a null shape`));if(BD(t)<1e-10)return k(P(`EXTRUDE_ZERO_VECTOR`,`extrude: extrusion vector has zero length`));try{let n=H(),r=BD(t),i=UD(t),a=n.extrude(e.wrapped,[...i],r),o=kE(n.downcast(a,`solid`));return UE(a,o),O(o)}catch(e){return k(N(`EXTRUDE_FAILED`,`Extrusion operation failed`,e,{operation:`extrude`,vectorLength:BD(t)}))}}function kM(e,t=[0,0,0],n=[0,0,1],r=2*Math.PI){if(H().isNull(e.wrapped))return k(P(M.NULL_SHAPE_INPUT,`revolve: face is a null shape`));try{let i=U(H().revolveVec(e.wrapped,[...t],[...n],r));return zE(i)?O(i):(W(i),k(Co(`REVOLUTION_NOT_3D`,`Revolution did not produce a 3D shape`)))}catch(e){return k(N(`REVOLVE_FAILED`,`Revolution operation failed`,e,{operation:`revolve`,angle:r}))}}function AM(e){if(e.length===0)return O([]);let t=H(),n=[];for(let t=0;t<e.length;t++){let r=e[t];if(!r)continue;let i=typeof r.height==`number`?[0,0,r.height]:r.height,a=BD(i);if(a<1e-10)return k(P(`EXTRUDE_ALL_ZERO_VECTOR`,`extrudeAll: entry ${t} has zero-length extrusion vector`));let o=[...UD(i)];n.push({face:r.face.wrapped,direction:o,length:a})}try{return O((t.extrudeBatch?.(n)??n.map(e=>t.extrude(e.face,e.direction,e.length))).map(e=>{let n=kE(t.downcast(e,`solid`));return UE(e,n),n}))}catch(e){return k(N(`EXTRUDE_ALL_FAILED`,`Batch extrusion operation failed`,e))}}function jM(e,{ruled:t=!0,startPoint:n,endPoint:r,tolerance:i=1e-6}={},a=!1){if(e.length===0&&!n&&!r)return k(P(`LOFT_EMPTY`,`Loft requires at least one wire or start/end point`));let o=H(),s=n?o.makeVertex(...AD(n)):void 0,c=r?o.makeVertex(...AD(r)):void 0;try{let n=U(o.loftAdvanced(e.map(e=>e.wrapped),{solid:!a,ruled:t,tolerance:i,...s?{startVertex:s}:{},...c?{endVertex:c}:{}}));return zE(n)?O(n):(W(n),k(Co(`LOFT_NOT_3D`,`Loft did not produce a 3D shape`)))}catch(e){return k(N(`LOFT_FAILED`,`Loft operation failed`,e,void 0,`Common causes: wire profiles with different edge counts, self-intersecting result, or profiles too far apart. Ensure profiles are compatible and ordered.`))}}function MM(e){if(e.length===0)return O([]);let t=H(),n=[],r=e.map(e=>{let r=e.startPoint?t.makeVertex(...AD(e.startPoint)):void 0,i=e.endPoint?t.makeVertex(...AD(e.endPoint)):void 0;return r&&n.push(r),i&&n.push(i),{wires:e.wires.map(e=>e.wrapped),solid:!0,ruled:e.ruled??!0,tolerance:e.tolerance??1e-6,startVertex:r,endVertex:i}});try{let e=t.loftBatch?.(r)??r.map(e=>t.loftAdvanced(e.wires,{solid:e.solid,ruled:e.ruled,tolerance:e.tolerance,startVertex:e.startVertex,endVertex:e.endVertex})),n=[];for(let t of e){let e=U(t);if(!zE(e))return W(e),k(Co(`LOFT_ALL_NOT_3D`,`Batch loft entry did not produce a 3D shape`));n.push(e)}return O(n)}catch(e){return k(N(`LOFT_ALL_FAILED`,`Batch loft operation failed`,e))}finally{for(let e of n)t.dispose(e)}}var NM=new WeakMap;function PM(e,t){return NM.get(e)?.get(t)}function FM(e,t,n){let r=NM.get(e);r||(r=new Map,NM.set(e,r)),r.set(t,n)}function IM(e){return H().isNull(e.wrapped)}function LM(e){return k(P(M.NULL_SHAPE_INPUT,`${e}: shape is a null shape`))}function RM(e){let t=PM(e.wrapped,`volume`);if(t)return O(t);if(IM(e))return LM(`measureVolumeProps`);let n=H(),r=n.shapeType(e.wrapped);if(r!==`solid`&&r!==`compsolid`&&r!==`compound`){let t={mass:0,volume:0,centerOfMass:[0,0,0]};return FM(e.wrapped,`volume`,t),O(t)}let i=n.volume(e.wrapped),a=$E(()=>n.centerOfMass(e.wrapped),M.CENTER_OF_MASS_FAILED,`Failed to compute center of mass`);if(!a.ok)return a;let o={mass:i,volume:i,centerOfMass:a.value};return FM(e.wrapped,`volume`,o),O(o)}function zM(e){let t=PM(e.wrapped,`surface`);if(t)return O(t);if(IM(e))return LM(`measureSurfaceProps`);let n=H(),r=n.area(e.wrapped),i=$E(()=>n.centerOfMass(e.wrapped),M.CENTER_OF_MASS_FAILED,`Failed to compute center of mass`);if(!i.ok)return i;let a={mass:r,area:r,centerOfMass:i.value};return FM(e.wrapped,`surface`,a),O(a)}function BM(e){let t=PM(e.wrapped,`linear`);if(t)return O(t);if(IM(e))return LM(`measureLinearProps`);let n=H(),r=n.length(e.wrapped),i={mass:r,length:r,centerOfMass:n.linearCenterOfMass(e.wrapped)};return FM(e.wrapped,`linear`,i),O(i)}function VM(e){let t=RM(e);return t.ok?O(t.value.mass):t}function HM(e){let t=zM(e);return t.ok?O(t.value.mass):t}function UM(e){let t=BM(e);return t.ok?O(t.value.mass):t}function WM(e,t){return IM(e)||IM(t)?LM(`measureDistance`):O(H().distance(e.wrapped,t.wrapped).value)}function GM(e,t){if(IM(e)||IM(t))return LM(`measureDistanceProps`);let n=H().distance(e.wrapped,t.wrapped);return O({distance:n.value,point1:n.point1,point2:n.point2})}function KM(e){if(IM(e))return LM(`createDistanceQuery`);let t=H().createDistanceQuery(e.wrapped);return O({distanceTo(e){return IM(e)?LM(`createDistanceQuery.distanceTo`):O(t.distanceTo(e.wrapped).value)},dispose(){t.dispose()}})}function qM(e,t,n){if(IM(e))return LM(`measureCurvatureAt`);let r=H().surfaceCurvature(e.wrapped,t,n);return O({mean:r.mean,gaussian:r.gaussian,maxCurvature:r.max,minCurvature:r.min,maxDirection:r.maxDirection,minDirection:r.minDirection})}function JM(e){if(IM(e))return LM(`measureCurvatureAtMid`);let t=bO(e),n=(t.uMin+t.uMax)/2,r=(t.vMin+t.vMax)/2,i=H().surfaceCurvature(e.wrapped,n,r);return O({mean:i.mean,gaussian:i.gaussian,maxCurvature:i.max,minCurvature:i.min,maxDirection:i.maxDirection,minDirection:i.minDirection})}function YM(e,t){return e.map(e=>qE(e,t))}function XM(e,t){let n=H(),r=n.iterShapes(e,t),i=[],a=new Map;for(let e of r){let r=n.hashCode(e,G),o=a.get(r);if(o?.some(t=>n.isSame(t,e))){n.dispose(e);continue}let s=KE(e,t);i.push(s),o?o.push(s.wrapped):a.set(r,[s.wrapped])}return i}function ZM(e){let t=H(),n=new Map;for(let r of e){let e=t.hashCode(r.wrapped,G),i=n.get(e);i?i.push(r):n.set(e,[r])}return n}function QM(e,t,n){let r=H();return e.get(n)?.find(e=>r.isSame(e.wrapped,t))}function $M(e){let t=sD(e);if(t.edgeToFaces)return t.edgeToFaces;let n=H(),r=dD(e),i=ZM(uD(e)),a=new Map;for(let e of r)for(let t of n.iterShapes(e.wrapped,`edge`)){let r=n.hashCode(t,G),o=QM(i,t,r);if(n.dispose(t),!o)continue;let s=a.get(r);s||(s=[],a.set(r,s)),s.some(t=>n.isSame(t.edge,o.wrapped)&&n.isSame(t.face,e.wrapped))||s.push({edge:o.wrapped,face:e.wrapped})}return t.edgeToFaces=a,a}function eN(e){let t=sD(e);if(t.vertexToFaces)return t.vertexToFaces;let n=H(),r=dD(e),i=ZM(pD(e)),a=new Map;for(let e of r)for(let t of n.iterShapes(e.wrapped,`vertex`)){let r=n.hashCode(t,G),o=QM(i,t,r);if(n.dispose(t),!o)continue;let s=a.get(r);s||(s=[],a.set(r,s)),s.some(t=>n.isSame(t.vertex,o.wrapped)&&n.isSame(t.face,e.wrapped))||s.push({vertex:o.wrapped,face:e.wrapped})}return t.vertexToFaces=a,a}function tN(e,t){let n=H(),r=$M(e),i=n.hashCode(t.wrapped,G),a=r.get(i)??[],o=[],s=new Map;for(let e of a){if(!n.isSame(e.edge,t.wrapped))continue;let r=n.hashCode(e.face,G),i=s.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),o.push(e.face)):(s.set(r,[e.face]),o.push(e.face))}return YM(o,`face`)}function nN(e,t){let n=H(),r=eN(e),i=n.hashCode(t.wrapped,G),a=r.get(i)??[],o=[],s=new Map;for(let e of a){if(!n.isSame(e.vertex,t.wrapped))continue;let r=n.hashCode(e.face,G),i=s.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),o.push(e.face)):(s.set(r,[e.face]),o.push(e.face))}return YM(o,`face`)}function rN(e){return XM(e.wrapped,`edge`)}function iN(e){return XM(e.wrapped,`vertex`)}function aN(e){return XM(e.wrapped,`wire`)}function oN(e){return XM(e.wrapped,`vertex`)}function sN(e,t){let n=H(),r=$M(e),i=XM(t.wrapped,`edge`),a=[],o=new Map;for(let e of i){let i=n.hashCode(e.wrapped,G),s=r.get(i)??[];for(let e of s){if(n.isSame(e.face,t.wrapped))continue;let r=n.hashCode(e.face,G),i=o.get(r);i?i.some(t=>n.isSame(t,e.face))||(i.push(e.face),a.push(e.face)):(o.set(r,[e.face]),a.push(e.face))}}for(let e of i)e[Symbol.dispose]();return YM(a,`face`)}var cN=new Map;function lN(e,t){let n=H(),r=TT()??``;if(cN.get(r)!==!1){let i;try{i=n.sharedEdges(e.wrapped,t.wrapped);let a=i.map(e=>KE(e,`edge`));return cN.set(r,!0),a}catch(e){if(i)for(let e of i)n.dispose(e);if(!l(e))throw e;cN.set(r,!1)}}return uN(e,t)}function uN(e,t){let n=H(),r=n.iterShapes(e.wrapped,`edge`),i=n.iterShapes(t.wrapped,`edge`),a=new Map;for(let e of i){let t=n.hashCode(e,G),r=a.get(t);r||(r=[],a.set(t,r)),r.push(e)}let o=[];for(let e of r)a.get(n.hashCode(e,2147483647))?.some(t=>n.isSame(e,t))?o.push(KE(e,`edge`)):n.dispose(e);for(let e of i)n.dispose(e);return o}var dN=new Map;function fN(e,t){let n=H(),r=TT()??``;if(dN.get(r)!==!1)try{let i=n.adjacentFaces(e.wrapped,t.wrapped);dN.set(r,!0);try{return i.map(e=>n.hashCode(e,G))}finally{for(let e of i)n.dispose(e)}}catch(e){if(!l(e))throw e;dN.set(r,!1)}return sN(e,t).map(e=>n.hashCode(e.wrapped,G))}function pN(e,t){let n=0,r=_O(t);if(e.surfaceType!==void 0)if(r===e.surfaceType)n+=1;else return-1/0;if(e.normal!==void 0){let r=wO(t),i=e.normal[0]*r[0]+e.normal[1]*r[1]+e.normal[2]*r[2];if(i<.707)return-1/0;n+=i}if(e.centroid!==void 0){let r=TO(t),i=e.centroid[0]-r[0],a=e.centroid[1]-r[1],o=e.centroid[2]-r[2],s=i*i+a*a+o*o;if(s>100)return-1/0;n-=s/100}if(e.area!==void 0&&e.area>0){let r=HM(t);if(r.ok&&r.value>0){let t=Math.abs(Math.log(e.area/r.value));t>1&&(n-=t)}}return n}function mN(e){let t=_O(e),n=wO(e),r=TO(e),i=HM(e);return{entityType:`face`,surfaceType:t,normal:n,centroid:r,area:i.ok?i.value:void 0}}var hN=.9;function gN(e){if(e[2]>hN)return`box:top`;if(e[2]<-.9)return`box:bottom`;if(e[1]>hN)return`box:back`;if(e[1]<-.9)return`box:front`;if(e[0]>hN)return`box:right`;if(e[0]<-.9)return`box:left`}function _N(e,t){if(_O(t)!==`PLANE`)return;let n=wO(t)[2];if(n>hN)return`${e}:top`;if(n<-.9)return`${e}:bottom`}function vN(e){return _O(e)===`CYLINDRE`?`cylinder:lateral`:_N(`cylinder`,e)}function yN(e){return _O(e)===`CONE`?`cone:lateral`:_N(`cone`,e)}function bN(e){return _O(e)===`SPHERE`?`sphere:surface`:void 0}var xN={box:e=>gN(wO(e)),cylinder:vN,cone:yN,sphere:bN};function SN(e,t){let n=new Map,r=xN[t],i=H(),a=0;for(let o of i.iterShapes(e.wrapped,`face`)){let e=GE(o,`face`);try{let i=r?.(e),o=i!==void 0&&!n.has(i)?i:`${t}:face_${a}`;n.set(o,[Ek(e)]),a++}finally{WE(e,o)}}return n}function CN(e,t,n){return{origin:e,role:t,hint:mN(n)}}function wN(e,t){let n=[];for(let r of e){if(t.deleted.has(r))continue;let e=t.modified.get(r),i=e&&e.length>0?e:[r];for(let e of i)n.includes(e)||n.push(e)}return n}function TN(e,t,n){let r=e.get(t);if(!r)return e;let i=new Map;for(let[e,t]of r){let r=wN(t,n);r.length>0&&i.set(e,r)}let a=new Map;for(let[n,r]of e)a.set(n,n===t?i:r);return a}var EN=.1,DN=.5;function ON(e,t,n){let r=-1/0,i,a=-1/0,o=[];for(let s of t){let t=n(e,s);t>DN&&o.push([s,t]),t>r?(a=r,r=t,i=s):t>a&&(a=t)}return i!==void 0&&r>DN?r-a<EN&&o.length>1?{kind:`ambiguous`,candidates:o.filter(([,e])=>e>=r-EN).map(([e])=>e)}:{kind:`match`,face:i}:{kind:`none`}}function kN(e,t,n,r){let i=dD(n),a=r??pN,o=t.get(e.origin)?.get(e.role);if(o!==void 0&&o.length>0){let t=i.filter(e=>o.includes(Ek(e)));if(t.length===1){let[e]=t;if(e!==void 0)return{face:e,confidence:`exact`}}else if(t.length===0)return{ref:e,reason:`deleted`};else{let n=ON(e.hint,t,a);if(n.kind===`match`)return{face:n.face,confidence:`geometric-fallback`};if(n.kind===`ambiguous`)return{ref:e,reason:`ambiguous`,candidates:n.candidates}}}let s=ON(e.hint,i,a);return s.kind===`match`?{face:s.face,confidence:`geometric-fallback`}:s.kind===`ambiguous`?{ref:e,reason:`ambiguous`,candidates:s.candidates}:{ref:e,reason:`not-found`}}function AN(e,t){let n=e[0]-t[0],r=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(n*n+r*r+i*i)}function jN(e){if(e.length===0)return;let t=0,n=0,r=0;for(let i of e){let e=kD(i);t+=e[0],n+=e[1],r+=e[2]}let i=e.length;return[t/i,n/i,r/i]}function MN(e,t,n){let r=n.get(t);if(!r)return;let i=Ek(e);for(let[e,t]of r)if(t.includes(i))return e}function NN(e,t,n,r){let i=r.get(t)?.get(n);return i===void 0||i.length===0?[]:dD(e).filter(e=>i.includes(Ek(e)))}function PN(e){let t=UM(e);return{entityType:`edge`,length:t.ok?t.value:void 0,midpoint:jN(oN(e))}}function FN(e){let t=new Set,n=[];for(let r of e){let e=Ek(r);t.has(e)||(t.add(e),n.push(r))}return n}var IN=1e-6;function LN(e,t){if(t.length===void 0&&t.midpoint===void 0)return;let n,r=1/0,i=1/0;for(let a of e){let e=0;if(t.length!==void 0){let n=UM(a);n.ok&&(e+=Math.abs(n.value-t.length))}if(t.midpoint!==void 0){let n=jN(oN(a));n!==void 0&&(e+=AN(t.midpoint,n))}e<r?(i=r,r=e,n=a):e<i&&(i=e)}if(!(n===void 0||i-r<IN))return n}function RN(e,t,n,r){let[i,a]=tN(n,t);if(i===void 0||a===void 0)return;let o=MN(i,e,r),s=MN(a,e,r);if(!(o===void 0||s===void 0))return{origin:e,faceRoles:[o,s],hint:PN(t)}}function zN(e,t,n){let[r,i]=e.faceRoles,a=NN(n,e.origin,r,t),o=NN(n,e.origin,i,t);if(a.length===0||o.length===0)return{ref:e,reason:`not-found`};let s=[];for(let e of a)for(let t of o)s.push(...lN(e,t));let c=FN(s);if(c.length===1){let[e]=c;if(e!==void 0)return{edge:e,confidence:`exact`}}if(c.length>1){let t=LN(c,e.hint);return t===void 0?{ref:e,reason:`ambiguous`,candidates:c}:{edge:t,confidence:`geometric-fallback`}}return{ref:e,reason:`not-found`}}var BN=3,VN=1e-6;function HN(e,t){let n=new Set;for(let r of e)for(let e of iN(r)){let r=Ek(e);n.add(r),t.has(r)||t.set(r,e)}return n}function UN(e,t){let n=new Set;for(let r of e)t.has(r)&&n.add(r);return n}function WN(e){let t=new Map,n;for(let r of e){let e=HN(r,t);n=n===void 0?e:UN(n,e)}if(n===void 0)return[];let r=[];for(let e of n){let n=t.get(e);n!==void 0&&r.push(n)}return r}function GN(e,t){if(t.position===void 0)return;let n,r=1/0,i=1/0;for(let a of e){let e=AN(kD(a),t.position);e<r?(i=r,r=e,n=a):e<i&&(i=e)}if(!(n===void 0||i-r<VN))return n}function KN(e,t,n,r){let i=nN(n,t);if(i.length<BN)return;let a=new Set;for(let t of i){let n=MN(t,e,r);n!==void 0&&a.add(n)}if(!(a.size<BN))return{origin:e,faceRoles:[...a].sort(),hint:{entityType:`vertex`,position:kD(t)}}}function qN(e,t,n){let r=[];for(let i of e.faceRoles){let a=NN(n,e.origin,i,t);if(a.length===0)return{ref:e,reason:`not-found`};r.push(a)}let i=WN(r);if(i.length===1){let[e]=i;if(e!==void 0)return{vertex:e,confidence:`exact`}}if(i.length>1){let t=GN(i,e.hint);return t===void 0?{ref:e,reason:`ambiguous`,candidates:i}:{vertex:t,confidence:`geometric-fallback`}}return{ref:e,reason:`not-found`}}var JN=.99,YN=.1,XN=1e-6;function ZN(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function QN(e,t){return dD(e).filter(e=>ZN(wO(e),t)>JN)}function $N(e,t,n){let r=new Set([...t,...n].map(Ek)),i=new Set;for(let n of t)for(let t of fN(e,n))i.add(t);let a=[],o=new Set;for(let t of n)for(let n of fN(e,t))r.has(n)||o.has(n)||!i.has(n)||(o.add(n),a.push(n));if(a.length===0)return[];let s=new Map(dD(e).map(e=>[Ek(e),e]));return a.map(e=>s.get(e)).filter(e=>e!==void 0)}function eP(e,t){let n,r=1/0,i=1/0;for(let a of e){let e=AN(TO(a),t);e<r?(i=r,r=e,n=a):e<i&&(i=e)}if(!(n===void 0||i-r<XN))return n}function tP(e,t,n,r,i){let[a,o]=tN(r,n);if(a===void 0||o===void 0)return;let s=MN(a,e,i),c=MN(o,e,i);if(!(s===void 0||c===void 0))return{origin:e,op:t,betweenRoles:[s,c],hint:{entityType:`derived-face`,normalA:wO(a),normalB:wO(o),edgeMidpoint:jN(oN(n))}}}function nP(e,t,n){let r=NN(n,e.origin,e.betweenRoles[0],t);r.length===0&&(r=QN(n,e.hint.normalA));let i=NN(n,e.origin,e.betweenRoles[1],t);if(i.length===0&&(i=QN(n,e.hint.normalB)),r.length===0||i.length===0)return{ref:e,reason:`not-found`};let a=$N(n,r,i).filter(t=>ZN(wO(t),e.hint.normalA)>YN&&ZN(wO(t),e.hint.normalB)>YN);if(a.length===1){let[e]=a;if(e!==void 0)return{face:e,confidence:`geometric-fallback`}}if(a.length>1){let t=e.hint.edgeMidpoint&&eP(a,e.hint.edgeMidpoint);return t?{face:t,confidence:`geometric-fallback`}:{ref:e,reason:`ambiguous`,candidates:a}}return{ref:e,reason:`not-found`}}function rP(e){return typeof e==`object`&&!!e&&`origin`in e}function iP(e){return rP(e)&&`betweenRoles`in e&&`op`in e}function aP(e){return rP(e)&&Array.isArray(e.faceRoles)&&e.faceRoles.length===2}function oP(e){return rP(e)&&Array.isArray(e.faceRoles)&&e.faceRoles.length>=3}function sP(e){return rP(e)&&typeof e.role==`string`}function cP(e){return sP(e)||aP(e)||oP(e)||iP(e)}function lP(e,t){return t===void 0?{ok:!1,reason:e}:{ok:!1,reason:e,candidates:t}}function uP(e,t,n){if(iP(e)){let r=nP(e,t,n);return`face`in r?{ok:!0,entity:r.face}:lP(r.reason,r.candidates)}if(aP(e)){let r=zN(e,t,n);return`edge`in r?{ok:!0,entity:r.edge}:lP(r.reason,r.candidates)}if(oP(e)){let r=qN(e,t,n);return`vertex`in r?{ok:!0,entity:r.vertex}:lP(r.reason,r.candidates)}let r=kN(e,t,n);return`face`in r?{ok:!0,entity:r.face}:lP(r.reason,r.candidates)}function dP(e,t,n){let r=n.get(e.origin);if(r!==void 0)return r;let i=new Map([[e.origin,SN(t,e.origin)]]);return n.set(e.origin,i),i}function fP(e,t){return uP(e,dP(e,t,new Map),t)}function pP(e){if(typeof e!=`object`||!e||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t!==Object.prototype&&t!==null?!1:!(`wrapped`in e)}function mP(e,t){let n=new Map,r=e=>{if(cP(e)){let r=uP(e,dP(e,t,n),t);return r.ok?r.entity:e}if(Array.isArray(e))return e.map(r);if(pP(e)){let t={};for(let[n,i]of Object.entries(e))t[n]=r(i);return t}return e},i={...e};for(let[t,n]of Object.entries(e))i[t]=r(n);return i}function hP(e,t,n,r){let i=kE(H().makeBox(e,t,n)),a=r?.at??(r?.centered?[0,0,0]:void 0);if(a)try{var o=IT();return fk(o.u(i),[a[0]-e/2,a[1]-t/2,a[2]-n/2])}catch(e){o.e=e}finally{o.d()}return i}function gP(e,t,n){let r=n?.at??[0,0,0],i=n?.axis??[0,0,1],a=sj(e,t,r,i);if(n?.centered)try{var o=IT();let e=[-i[0]*t*.5,-i[1]*t*.5,-i[2]*t*.5];return fk(o.u(a),e)}catch(e){o.e=e}finally{o.d()}return a}function _P(e,t){let n=cj(e);if(t?.at)try{var r=IT();return fk(r.u(n),t.at)}catch(e){r.e=e}finally{r.d()}return n}function vP(e,t,n,r){let i=r?.at??[0,0,0],a=r?.axis??[0,0,1],o=lj(e,t,n,i,a);if(r?.centered)try{var s=IT();let e=[-a[0]*n*.5,-a[1]*n*.5,-a[2]*n*.5];return fk(s.u(o),e)}catch(e){s.e=e}finally{s.d()}return o}function yP(e,t,n){return uj(e,t,n?.at??[0,0,0],n?.axis??[0,0,1])}function bP(e,t,n,r){let i=dj(e,t,n);if(r?.at)try{var a=IT();return fk(a.u(i),r.at)}catch(e){a.e=e}finally{a.d()}return i}function xP(e,t){return SA(e,t)}function SP(e,t){let n=t?.axis??[0,0,1];return CA(e,t?.at??[0,0,0],n)}function CP(e,t,n){let r=n?.axis??[0,0,1];return wA(e,t,n?.at??[0,0,0],r,n?.xDir)}function wP(e,t,n,r){return TA(e,t,n,r?.at??[0,0,0],r?.axis??[0,0,1],r?.lefthand??!1)}function TP(e,t,n){return EA(e,t,n)}function EP(e,t,n,r,i){let a=i?.axis??[0,0,1];return DA(e,t,n*JE,r*JE,i?.at??[0,0,0],a,i?.xDir)}function DP(e,t){return OA(e,t)}function OP(e){return AA(e)}function kP(e,t,n){return jA(e,t,n)}function AP(e){return MA(e)}function jP(e){return Za(MA(e),e=>dE(e)?O(e):k(P(`WIRE_NOT_CLOSED`,`Assembled wire is not closed: start and end points do not coincide`)))}function MP(e,t){return NA(e,t)}function NP(e){return IA(e)}function PP(e,t){return FA(e,t)}function FP(e){return RA(e)}function IP(e){return fj(e)}function LP(e){return mj(e)}function RP(e){return hj(e)}function zP(e,t,n){return pj(e,t,n)}function BP(e,t){return oj(e,t)}function VP(e,t){return LA(e,t)}function HP(){return`10000000-1000-4000-8000-100000000000`.replace(/[018]/g,e=>(Number(e)^crypto.getRandomValues(new Uint8Array(1))[0]&15>>Number(e)/4).toString(16))}function UP(e=[]){let t=e.map(({shape:e,name:t,color:n,alpha:r})=>{let i=n??`#f00`;i.indexOf(`#`)===0&&(i=i.slice(1)),i.length===3&&(i=i.replace(/([0-9a-f])/gi,`$1$1`));let a=parseInt(i.substring(0,2),16),o=parseInt(i.substring(2,4),16),s=parseInt(i.substring(4,6),16),c=Math.round((r??1)*255);return{shape:e.wrapped,name:t??HP(),color:[a,o,s,c]}});return YT(H().createXCAFDocument(t))}function WP(e=[],{unit:t,modelUnit:n}={}){let r=e=>{let t=e;return t.indexOf(`#`)===0&&(t=t.slice(1)),t.length===3&&(t=t.replace(/([0-9a-f])/gi,`$1$1`)),[parseInt(t.substring(0,2),16),parseInt(t.substring(2,4),16),parseInt(t.substring(4,6),16)]},i=H(),a=e.map(({shape:e,name:t,color:n,alpha:i})=>{let[a,o,s]=r(n??`#f00`);return{shape:e.wrapped,name:t??HP(),color:[a,o,s,Math.round((i??1)*255)]}}),o=i.createXCAFDocument(a);try{let e=i.writeXCAFToSTEP(o,{unit:t,modelUnit:n});return e?O(new Blob([e],{type:`application/STEP`})):k(Do(`STEP_EXPORT_FAILED`,`Failed to write STEP file`))}finally{o.delete()}}function GP(e,t,n,r,i){if(n<1)return k(P(`PATTERN_INVALID_COUNT`,`Pattern count must be at least 1`));if(n===1)return O(e);if(GD(t))return k(P(`PATTERN_ZERO_DIRECTION`,`Pattern direction cannot be zero`));let a=UD(t),o=H().linearPattern(e.wrapped,[...a],r,n).map(e=>U(e));try{return GA(o,{optimisation:`sameFace`,...i,unsafe:!0})}finally{for(let e of o)e[Symbol.dispose]()}}function KP(e,t,n,r=360,i=[0,0,0],a){if(n<1)return k(P(`PATTERN_INVALID_COUNT`,`Pattern count must be at least 1`));if(n===1)return O(e);if(GD(t))return k(P(`PATTERN_ZERO_AXIS`,`Pattern axis cannot be zero`));let o=r/n,s=H().circularPattern(e.wrapped,[...i],[...t],o,n).map(e=>U(e));try{return GA(s,{optimisation:`sameFace`,...a,unsafe:!0})}finally{for(let e of s)e[Symbol.dispose]()}}function qP(e,t,n,r,i,a,o,s){if(r<1||i<1)return k(P(`PATTERN_INVALID_COUNT`,`Grid pattern counts must be at least 1`));if(r===1&&i===1)return O(e);if(GD(t))return k(P(`PATTERN_ZERO_DIRECTION`,`Grid directionX cannot be zero`));if(GD(n))return k(P(`PATTERN_ZERO_DIRECTION`,`Grid directionY cannot be zero`));let c=H(),l=UD(t),u=UD(n);if(typeof c.gridPattern==`function`)return O(U(c.gridPattern(e.wrapped,[...l],[...u],a,o,r,i)));let d=GP(e,t,r,a,s);if(!d.ok)return d;let f=d.value,p=GP(f,n,i,o,s),m=p.ok&&p.value===f;return f!==e&&!m&&f[Symbol.dispose](),p}function JP(e,t={}){return{name:e,children:[],...t.shape===void 0?{}:{shape:t.shape},...t.translate===void 0?{}:{translate:t.translate},...t.rotate===void 0?{}:{rotate:t.rotate},...t.metadata===void 0?{}:{metadata:t.metadata}}}function YP(e,t){return{...e,children:[...e.children,t]}}function XP(e,t){let n=e.children.findIndex(e=>e.name===t);if(n===-1)return e;let r=[...e.children];return r.splice(n,1),{...e,children:r}}function ZP(e,t){return{...e,...t.shape===void 0?{}:{shape:t.shape},...t.translate===void 0?{}:{translate:t.translate},...t.rotate===void 0?{}:{rotate:t.rotate},...t.metadata===void 0?{}:{metadata:t.metadata}}}function QP(e,t){if(e.name===t)return e;for(let n of e.children){let e=QP(n,t);if(e)return e}}function $P(e,t,n=0){t(e,n);for(let r of e.children)$P(r,t,n+1)}function eF(e){let t=1;for(let n of e.children)t+=eF(n);return t}function tF(e){let t=[];return $P(e,e=>{e.shape&&t.push(e.shape)}),t}function nF(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function rF(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function iF(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function aF(e){return iF(rF(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function oF(e,t){let[n,r,i,a]=e,o=2*(i*t[2]-a*t[1]),s=2*(a*t[0]-r*t[2]),c=2*(r*t[1]-i*t[0]);return[t[0]+n*o+(i*c-a*s),t[1]+n*s+(a*o-r*c),t[2]+n*c+(r*s-i*o)]}function sF(e,t){let n=t/2,r=Math.sin(n),i=iF(e);return[Math.cos(n),i[0]*r,i[1]*r,i[2]*r]}function cF(e,t){let n=iF(e),r=iF(t),i=nF(n,r);if(i>=.999999999)return[1,0,0,0];if(i<=-.999999999)return sF(aF(n),Math.PI);let a=rF(n,r),o=Math.hypot(1+i,a[0],a[1],a[2])||1;return[(1+i)/o,a[0]/o,a[1]/o,a[2]/o]}function lF(e,t){let[n,r,i,a]=e,[o,s,c,l]=t;return[n*o-r*s-i*c-a*l,n*s+r*o+i*l-a*c,n*c-r*l+i*o+a*s,n*l+r*c-i*s+a*o]}var uF=Math.PI/180;function dF(e,t,n){return Math.min(n,Math.max(t,e))}function fF(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function pF(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function mF(e){return fF(pF(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function hF(e,t,n,r,i){let a=n.min??r,o=n.max??i,s=Math.min(a,o),c=Math.max(a,o);return{kind:e,axis:fF(t),min:s,max:c,value:dF(n.value??0,s,c)}}function gF(e,t,n,r,i){let a=i[0]??{kind:`rotation`,axis:[0,0,1],min:0,max:0,value:0};return{type:e,parent:t,child:n,axis:{origin:r.origin,direction:fF(r.direction)},min:a.min,max:a.max,value:a.value,dofs:i}}function _F(e,t,n,r={}){return gF(`revolute`,e,t,n,[hF(`rotation`,n.direction,r,-180,180)])}function vF(e,t,n,r={}){return gF(`prismatic`,e,t,n,[hF(`translation`,n.direction,r,0,100)])}function yF(e,t,n,r={}){return gF(`cylindrical`,e,t,n,[hF(`rotation`,n.direction,r.rotation??{},-180,180),hF(`translation`,n.direction,r.translation??{},0,100)])}function bF(e,t,n,r={}){let i=fF(n.direction),a;if(r.uDirection){let e=r.uDirection,t=e[0]*i[0]+e[1]*i[1]+e[2]*i[2],n=[e[0]-t*i[0],e[1]-t*i[1],e[2]-t*i[2]];a=Math.hypot(n[0],n[1],n[2])<1e-9?mF(i):fF(n)}else a=mF(i);let o=fF(pF(i,a));return gF(`planar`,e,t,{origin:n.origin,direction:i},[hF(`translation`,a,r.u??{},-100,100),hF(`translation`,o,r.v??{},-100,100),hF(`rotation`,i,r.rotation??{},-180,180)])}function xF(e,t,n,r={}){return gF(`spherical`,e,t,{origin:n,direction:[0,0,1]},[hF(`rotation`,[1,0,0],r.x??{},-180,180),hF(`rotation`,[0,1,0],r.y??{},-180,180),hF(`rotation`,[0,0,1],r.z??{},-180,180)])}function SF(e,t){let n=e.dofs.map((e,n)=>{let r=t[n];return r===void 0?e:{...e,value:dF(r,e.min,e.max)}}),r=n[0];return r?{...e,dofs:n,value:r.value}:{...e,dofs:n}}function CF(e,t){return SF(e,[t])}function wF(e,t,n){if(t.kind===`translation`)return{position:[t.axis[0]*n,t.axis[1]*n,t.axis[2]*n],rotation:[1,0,0,0]};let r=sF(t.axis,n*uF),i=oF(r,e);return{position:[e[0]-i[0],e[1]-i[1],e[2]-i[2]],rotation:r}}function TF(e,t=e.value){let n=Array.isArray(t)?t:void 0,r=n?void 0:t,i=e.axis.origin,a=DF;for(let t=0;t<e.dofs.length;t++){let o=e.dofs[t];if(!o)continue;let s=n?n[t]??o.value:t===0?r??o.value:o.value;a=OF(a,wF(i,o,dF(s,o.min,o.max)))}return a}function EF(e,t){let n=e.joints??[];return{...e,joints:[...n,t]}}var DF={position:[0,0,0],rotation:[1,0,0,0]};function OF(e,t){let n=oF(e.rotation,t.position);return{position:[e.position[0]+n[0],e.position[1]+n[1],e.position[2]+n[2]],rotation:lF(e.rotation,t.rotation)}}function kF(e){let t=[];return $P(e,e=>{e.joints&&t.push(...e.joints)}),t}function AF(e,t={}){let n=[],r=new Set;$P(e,e=>{r.add(e.name),e.joints&&n.push(...e.joints)});let i=new Map;for(let e of n)i.set(e.child,e),r.add(e.parent),r.add(e.child);let a=new Map;for(let e of r)i.has(e)||a.set(e,DF);let o=[...n],s=!0;for(;s&&o.length>0;){s=!1;for(let e=o.length-1;e>=0;e--){let n=o[e];if(!n)continue;let r=a.get(n.parent);if(!r||(o.splice(e,1),s=!0,a.has(n.child)))continue;let i=t[n.child]??n.value,c=n.offset?OF(TF(n,i),n.offset):TF(n,i);a.set(n.child,OF(r,c))}}for(let e of o)a.has(e.child)||a.set(e.child,DF);return a}function jF(e){return kF(e).reduce((e,t)=>e+t.dofs.length,0)}var MF={position:[0,0,0],rotation:[1,0,0,0]};function NF(e,t){let n=oF(e.rotation,t);return[n[0]+e.position[0],n[1]+e.position[1],n[2]+e.position[2]]}function PF(e){return[e[0],-e[1],-e[2],-e[3]]}function FF(e,t){let[n,r,i,a]=lF(t,PF(e)),o=Math.hypot(n,r,i,a)||1;n/=o,r/=o,i/=o,a/=o,n<0&&(n=-n,r=-r,i=-i,a=-a);let s=Math.hypot(r,i,a);if(s<1e-12)return[0,0,0];let c=2*Math.atan2(s,n)/s;return[r*c,i*c,a*c]}function IF(e,t){let n=[];$P(e,e=>{e.joints&&n.push(...e.joints)});let r=new Map;for(let e of n)r.set(e.child,e);let i=[],a=new Set,o=t;for(;o&&r.has(o)&&!a.has(o);){a.add(o);let e=r.get(o);if(!e)break;i.push(e),o=e.parent}return i.reverse()}function LF(e,t){return e[t]??0}function RF(e,t,n){let r=n+1,i=new Float64Array(n*r);for(let a=0;a<n;a++){for(let t=0;t<n;t++)i[a*r+t]=LF(e,a*n+t);i[a*r+n]=LF(t,a)}for(let e=0;e<n;e++){let t=e;for(let a=e+1;a<n;a++)Math.abs(LF(i,a*r+e))>Math.abs(LF(i,t*r+e))&&(t=a);if(Math.abs(LF(i,t*r+e))<1e-12)return null;if(t!==e)for(let n=e;n<r;n++){let a=LF(i,e*r+n);i[e*r+n]=LF(i,t*r+n),i[t*r+n]=a}let a=LF(i,e*r+e);for(let t=e;t<r;t++)i[e*r+t]=LF(i,e*r+t)/a;for(let t=0;t<n;t++){if(t===e)continue;let n=LF(i,t*r+e);if(n!==0)for(let a=e;a<r;a++)i[t*r+a]=LF(i,t*r+a)-n*LF(i,e*r+a)}}let a=new Float64Array(n);for(let e=0;e<n;e++)a[e]=LF(i,e*r+n);return a}function zF(e,t){let n=[],r=[],i=[],a=[];for(let o of e){let e=t?.[o.child];n.push({child:o.child,count:o.dofs.length}),o.dofs.forEach((t,n)=>{let o=(Array.isArray(e)?e[n]:n===0?e:void 0)??t.value;r.push(Math.min(t.max,Math.max(t.min,o))),i.push(t.min),a.push(t.max)})}return{segments:n,q:Float64Array.from(r),lo:Float64Array.from(i),hi:Float64Array.from(a)}}function BF(e,t){let n={},r=0;for(let i of e){let e=[];for(let n=0;n<i.count;n++)e.push(LF(t,r++));n[i.child]=e}return n}function VF(e,t,n,r,i){let a=NF(t,r);if(e[0]=n.position[0]-a[0],e[1]=n.position[1]-a[1],e[2]=n.position[2]-a[2],i===6&&n.rotation){let r=FF(t.rotation,n.rotation);e[3]=r[0],e[4]=r[1],e[5]=r[2]}let o=0;for(let t=0;t<i;t++)o+=LF(e,t)**2;return Math.sqrt(o)}function HF(e,t,n,r,i,a,o,s,c,l){let u=NF(o,s);for(let d=0;d<n;d++){let f=LF(t,d),p=f+c>LF(a,d)&&f-c>=LF(i,d)?-c:c;t[d]=f+p;let m=l(t);t[d]=f;let h=NF(m,s);if(e[d]=(h[0]-u[0])/p,e[n+d]=(h[1]-u[1])/p,e[2*n+d]=(h[2]-u[2])/p,r===6){let t=FF(o.rotation,m.rotation);e[3*n+d]=t[0]/p,e[4*n+d]=t[1]/p,e[5*n+d]=t[2]/p}}}function UF(e,t,n,r,i){let a=new Float64Array(r*r),o=i*i;for(let t=0;t<r;t++)for(let i=0;i<r;i++){let s=0;for(let r=0;r<n;r++)s+=LF(e,t*n+r)*LF(e,i*n+r);a[t*r+i]=s+(t===i?o:0)}let s=RF(a,t,r);if(!s)return null;let c=new Float64Array(n);for(let t=0;t<n;t++){let i=0;for(let a=0;a<r;a++)i+=LF(e,a*n+t)*LF(s,a);c[t]=i}return c}function WF(e,t,n,r={}){let i=r.maxIterations??200,a=r.tolerance??1e-5,o=r.damping??.05,s=r.tip??[0,0,0],c=n.rotation===void 0?3:6,{segments:l,q:u,lo:d,hi:f}=zF(IF(e,t),r.seed),p=u.length,m=n=>AF(e,BF(l,n)).get(t)??MF,h=new Float64Array(c),g=new Float64Array(c*p),_=m(u),v=VF(h,_,n,s,c),y=0;for(;y<i&&p>0&&v>a;y++){HF(g,u,p,c,d,f,_,s,1e-6,m);let e=UF(g,h,p,c,o);if(!e)break;for(let t=0;t<p;t++){let n=LF(u,t)+LF(e,t);u[t]=Math.min(LF(f,t),Math.max(LF(d,t),n))}_=m(u),v=VF(h,_,n,s,c)}return{values:BF(l,u),converged:v<=a,iterations:y,error:v}}function GF(e,t){return e.dofs.map((e,n)=>{let r=(Array.isArray(t)?t[n]:n===0?t:void 0)??e.value;return Math.min(e.max,Math.max(e.min,r))})}function KF(e,t,n,r){let i=[];$P(e,e=>{e.joints&&i.push(...e.joints)});let a=i.map(e=>({child:e.child,a:GF(e,t[e.child]),b:GF(e,n[e.child])})),o=Math.max(1,Math.floor(r)),s=[];for(let t=0;t<=o;t++){let n=t/o,r={};for(let e of a)r[e.child]=e.a.map((t,r)=>t+((e.b[r]??t)-t)*n);s.push({t:n,values:r,poses:AF(e,r)})}return s}var qF=Math.PI/180;function JF(e,t,n,r){let i=e*qF,a=r*qF,o=lF(sF([0,0,1],i),sF([1,0,0],a));return{position:[n*Math.cos(i),n*Math.sin(i),t],rotation:o}}function YF(e,t={}){let n=t.base??`base`,r=e.map((e,t)=>e.name??`link${t+1}`);return e.map((e,t)=>{let i=t===0?n:r[t-1]??`link${t}`,a=r[t]??`link${t+1}`,o=JF(e.theta,e.d,e.a,e.alpha),s={origin:[0,0,0],direction:[0,0,1]},c={...e.min===void 0?{}:{min:e.min},...e.max===void 0?{}:{max:e.max},...e.value===void 0?{}:{value:e.value}};return{...e.type===`prismatic`?vF(i,a,s,c):_F(i,a,s,c),offset:o}})}var XF=Math.PI/180,ZF=180/Math.PI;function QF(e){return e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`)}function $F(e){return String(e===0?0:e)}function eI(e){return`${$F(e[0])} ${$F(e[1])} ${$F(e[2])}`}function tI(e,t={}){let n=t.name??`robot`,r=t.effort??0,i=t.velocity??0,a=t.meshes??{},o=[],s=[];$P(e,e=>{o.push(e.name),e.joints&&s.push(...e.joints)});for(let e of s){if(e.type!==`revolute`&&e.type!==`prismatic`)return k(P(M.VALIDATION_FAILED,`exportURDF: joint '${e.parent}->${e.child}' is '${e.type}'; URDF supports only revolute and prismatic joints`));if(e.offset)return k(P(M.VALIDATION_FAILED,`exportURDF: joint '${e.parent}->${e.child}' carries a fixed offset (e.g. a DH link) that URDF cannot represent as a single joint`))}let c=[`<?xml version="1.0"?>`,`<robot name="${QF(n)}">`];for(let e of o){let t=a[e];t?c.push(` <link name="${QF(e)}">`,` <visual><geometry><mesh filename="${QF(t)}"/></geometry></visual>`,` </link>`):c.push(` <link name="${QF(e)}"/>`)}for(let e of s){let t=e.type===`revolute`,n=t?e.min*XF:e.min,a=t?e.max*XF:e.max,o=e.type===`prismatic`?[0,0,0]:e.axis.origin;c.push(` <joint name="${QF(`${e.parent}_to_${e.child}`)}" type="${e.type}">`,` <parent link="${QF(e.parent)}"/>`,` <child link="${QF(e.child)}"/>`,` <origin xyz="${eI(o)}" rpy="0 0 0"/>`,` <axis xyz="${eI(e.axis.direction)}"/>`,` <limit lower="${$F(n)}" upper="${$F(a)}" effort="${$F(r)}" velocity="${$F(i)}"/>`,` </joint>`)}return c.push(`</robot>`,``),O(c.join(`
|
|
16
|
+
`))}function nI(e,t){return RegExp(`\\b${t}\\s*=\\s*"([^"]*)"`).exec(e)?.[1]}function rI(e,t){if(!e)return t;let n=e.trim().split(/\s+/).map(Number);return[n[0]??0,n[1]??0,n[2]??0]}function iI(e,t){return oF(lF(lF(sF([0,0,1],t[2]),sF([0,1,0],t[1])),sF([1,0,0],t[0])),e)}function aI(e){let t=/<robot\b([^>]*)>/.exec(e);if(!t)return k(P(M.VALIDATION_FAILED,`importURDF: no <robot> element found`));let n=nI(t[1]??``,`name`)??`robot`,r=[],i=/<link\b([^>]*?)(?:\/>|>)/g;for(let t=i.exec(e);t;t=i.exec(e)){let e=nI(t[1]??``,`name`);e&&r.push(e)}let a=[],o=/<joint\b([^>]*)>([\s\S]*?)<\/joint>/g;for(let t=o.exec(e);t;t=o.exec(e)){let e=t[1]??``,n=t[2]??``,r=nI(e,`type`)??`fixed`;if(r===`fixed`||r===`floating`||r===`planar`)continue;let i=/<parent\b([^>]*?)\/?>/.exec(n),o=/<child\b([^>]*?)\/?>/.exec(n),s=nI(i?.[1]??``,`link`),c=nI(o?.[1]??``,`link`);if(!s||!c)return k(P(M.VALIDATION_FAILED,`importURDF: joint missing parent/child link (${nI(e,`name`)??`unnamed`})`));let l=/<origin\b([^>]*?)\/?>/.exec(n),u=/<axis\b([^>]*?)\/?>/.exec(n),d=/<limit\b([^>]*?)\/?>/.exec(n),f=rI(nI(l?.[1]??``,`xyz`),[0,0,0]),p=rI(nI(l?.[1]??``,`rpy`),[0,0,0]),m=iI(rI(nI(u?.[1]??``,`xyz`),[1,0,0]),p),h=Number(nI(d?.[1]??``,`lower`)??NaN),g=Number(nI(d?.[1]??``,`upper`)??NaN);if(r===`prismatic`){let e=Number.isFinite(h)&&Number.isFinite(g)?{min:h,max:g}:{};a.push(vF(s,c,{origin:f,direction:m},e))}else if(r===`revolute`||r===`continuous`){let e=r===`continuous`||!Number.isFinite(h)||!Number.isFinite(g)?{min:-180,max:180}:{min:h*ZF,max:g*ZF};a.push(_F(s,c,{origin:f,direction:m},e))}else return k(P(M.VALIDATION_FAILED,`importURDF: joint '${nI(e,`name`)??`unnamed`}' has unrecognized type '${r}'`))}return O({name:n,links:r,joints:a})}function oI(){return{steps:[],shapes:new Map}}function sI(e,t,n){let r={...t,timestamp:Date.now()},i=new Map(e.shapes);return i.set(t.outputId,n),{steps:[...e.steps,r],shapes:i}}function cI(e){if(e.steps.length===0)return e;let t=e.steps.slice(0,-1),n=new Set;for(let e of t){n.add(e.outputId);for(let t of e.inputIds)n.add(t)}let r=new Map;for(let[t,i]of e.shapes)n.has(t)&&r.set(t,i);return{steps:t,shapes:r}}function lI(e,t){return e.steps.find(e=>e.id===t)}function uI(e,t){return e.shapes.get(t)}function dI(e){return e.steps.length}function fI(e,t){let n=e.steps.findIndex(e=>e.id===t);return n===-1?[]:e.steps.slice(n)}function pI(e,t,n){let r=new Map(e.shapes);return r.set(t,n),{...e,shapes:r}}function mI(){return{operations:new Map}}function hI(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function gI(e,t){let[n,r]=t;return n!==void 0&&r===void 0&&zE(n)?mP(e,n):{...e}}function _I(e,t){let n=new Set(e.steps.map(e=>e.outputId)),r={steps:[],shapes:new Map};for(let[t,i]of e.shapes)n.has(t)||(r=pI(r,t,i));for(let n of e.steps){let e=t.operations.get(n.type);if(!e)return k(Eo(`REPLAY_UNKNOWN_OP`,`Unknown operation type: ${n.type}`));let i=[];for(let e of n.inputIds){let t=r.shapes.get(e);if(!t)return k(Eo(`REPLAY_MISSING_INPUT`,`Missing input shape: ${e} for step ${n.id}`));i.push(t)}try{let t=e(i,gI(n.parameters,i));r=sI(r,{id:n.id,type:n.type,parameters:n.parameters,inputIds:n.inputIds,outputId:n.outputId},t)}catch(e){return k(Eo(`REPLAY_STEP_FAILED`,`Step ${n.id} (${n.type}) failed: ${e instanceof Error?e.message:String(e)}`))}}return O(r)}function vI(e,t,n){let r=e.steps.findIndex(e=>e.id===t);if(r===-1)return k(Eo(`REPLAY_STEP_NOT_FOUND`,`Step not found: ${t}`));let i=new Map(e.shapes);for(let t=r;t<e.steps.length;t++){let n=e.steps[t];n&&i.delete(n.outputId)}let a={steps:e.steps.slice(0,r),shapes:i};for(let t=r;t<e.steps.length;t++){let r=e.steps[t];if(!r)continue;let i=n.operations.get(r.type);if(!i)return k(Eo(`REPLAY_UNKNOWN_OP`,`Unknown operation type: ${r.type}`));let o=[];for(let e of r.inputIds){let t=a.shapes.get(e);if(!t)return k(Eo(`REPLAY_MISSING_INPUT`,`Missing input shape: ${e} for step ${r.id}`));o.push(t)}try{let e=i(o,gI(r.parameters,o));a=sI(a,{id:r.id,type:r.type,parameters:r.parameters,inputIds:r.inputIds,outputId:r.outputId},e)}catch(e){return k(Eo(`REPLAY_STEP_FAILED`,`Step ${r.id} (${r.type}) failed: ${e instanceof Error?e.message:String(e)}`))}}return O(a)}function yI(e,t,n,r){return e.steps.findIndex(e=>e.id===t)===-1?k(Eo(`MODIFY_STEP_NOT_FOUND`,`Step not found: ${t}`)):vI({steps:e.steps.map(e=>e.id===t?{...e,parameters:n}:e),shapes:e.shapes},t,r)}function bI(e){let t={};for(let[n,r]of e.shapes){let e=Tk(r);if(!e.ok)return k(Eo(`SERIALIZE_SHAPE_FAILED`,`Failed to serialize shape "${n}": ${e.error.message}`));t[n]=e.value}return O({steps:e.steps,shapes:t})}function xI(e){let t=new Map;for(let[n,r]of Object.entries(e.shapes))try{let e=mO(r);if(!e.ok)return k(Eo(`DESERIALIZE_SHAPE_FAILED`,`Failed to deserialize shape "${n}": ${e.error.message}`));t.set(n,e.value)}catch(e){return k(Eo(`DESERIALIZE_SHAPE_FAILED`,`Failed to deserialize shape "${n}": ${e instanceof Error?e.message:String(e)}`))}return O({steps:e.steps,shapes:t})}function SI(e){try{var t=IT();let{radius:n,pitch:r,height:i,depth:a=.6*r,toothHalfWidth:o=.42*r,crest:s=0,sectionsPerTurn:c=20,lefthand:l=!1,inward:u=!1}=e;if(!(n>0))return k(P(`THREAD_INVALID_RADIUS`,`radius must be > 0`));if(!(r>0))return k(P(`THREAD_INVALID_PITCH`,`pitch must be > 0`));if(!(i>0))return k(P(`THREAD_INVALID_HEIGHT`,`height must be > 0`));if(!(a>0))return k(P(`THREAD_INVALID_DEPTH`,`depth must be > 0`));if(s<0||s>=o)return k(P(`THREAD_INVALID_CREST`,`crest must be >= 0 and < toothHalfWidth`));if(c<3)return k(P(`THREAD_TOO_FEW_SECTIONS`,`sectionsPerTurn must be >= 3`));let d=i/r,f=Math.max(2,Math.round(d*c)),p=l?-1:1,m=u?-a:a,h=u?.3:-.3,g=o,_=t.u(new XT),v=[];for(let e=0;e<=f;e++){let t=p*e*2*Math.PI/c,i=r*Math.abs(t)/(2*Math.PI),a=n*Math.cos(t),o=n*Math.sin(t),l=Math.cos(t),u=Math.sin(t),d=(e,t)=>[a+e*l,o+e*u,i+t],f=s>0?[d(h,-g),d(m,-s),d(m,s),d(h,g)]:[d(h,-g),d(m,0),d(h,g)],y=AP(f.map((e,t)=>_.register(xP(e,f[(t+1)%f.length]))));if(!Ja(y))return y;v.push(_.register(y.value))}return jM(v,{ruled:!0})}catch(e){t.e=e}finally{t.d()}}var CI=1e-9,wI=1e-8,TI=1e-6,EI=([e,t],[n,r],i=TI)=>Math.abs(e-n)<=i&&Math.abs(t-r)<=i,DI=([e,t],[n,r])=>[e+n,t+r],OI=([e,t],[n,r])=>[e-n,t-r],kI=([e,t],n)=>[e*n,t*n],AI=([e,t],[n,r]=[0,0])=>Math.sqrt((e-n)**2+(t-r)**2),jI=([e,t],[n,r]=[0,0])=>(e-n)**2+(t-r)**2;function MI([e,t],[n,r]){return e*r-t*n}var NI=([e,t],[n,r]=[0,0])=>Math.atan2(r*e-t*n,e*n+t*r),PI=([e,t],[n,r]=[0,0])=>Math.atan2(r-t,n-e),FI=(e,t,n=[0,0])=>{let[r,i]=e,[a,o]=n,s=r-a,c=i-o,l=Math.sin(t),u=Math.cos(t),d=s*u-c*l,f=s*l+c*u;return[d+a,f+o]};function II([e,t]){let n=Math.sqrt(e*e+t*t);return n<1e-12?[0,0]:[e/n,t/n]}var LI=(e,t)=>[Math.cos(t)*e,Math.sin(t)*e],RI=([e,t])=>[Math.sqrt(e*e+t*t),Math.atan2(t,e)],zI=([e,t])=>{let n=II([e,t]);return n[0]===0&&n[1]===0&&i(`normalize2d`,`Cannot normalize zero-length vector`),n};function BI(e,t){let n,r=0;for(let i=0;i<e.length;i++){let a=e[i];if(t(a))if(r++,r===1)n=a;else break}return r===1?O(n):k(Oo(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found ${r===0?0:`2+`} element(s)`))}function VI(e,t,n,r){let i=e=>n([...t,e]),a=e=>t.every(t=>t(e));function o(t){switch(e){case`edge`:return uD(t);case`face`:return dD(t);case`wire`:return fD(t);case`vertex`:return pD(t)}}let s=e=>{let n=o(e);return t.length===0?n.slice():n.filter(a)},c=()=>VI(e,[],n,r),l={_filters:t,_topoKind:e,when:e=>i(e),inList:e=>{let t=new Map;for(let n of e){let e=Ek(n),r=t.get(e);r?r.push(n):t.set(e,[n])}return i(e=>{let n=t.get(Ek(e));return!!n&&n.some(t=>Ok(t,e))})},not:e=>{let t=e(c());return i(e=>!t.shouldKeep(e))},either:e=>{let t=e.map(e=>e(c()));return i(e=>t.some(t=>t.shouldKeep(e)))},findAll:e=>s(e),findUnique:e=>BI(o(e),a),shouldKeep:a,and:e=>i(t=>e.shouldKeep(t)),or:e=>{let t=a;return n([n=>t(n)||e.shouldKeep(n)])},negate:()=>{let e=a;return n([t=>!e(t)])}},u=r(l,i);return{...l,...u}}var HI={X:[1,0,0],Y:[0,1,0],Z:[0,0,1]};function UI(e){return typeof e==`string`?HI[e]??[0,0,1]:e}function WI(e,t,n){let r=H(),i=r.makeVertex(t[0],t[1],t[2]);return t=>{let a=r.distance(i,t.wrapped).value;return Math.abs(a-e)<n}}function GI(e,t){let n=UD(UI(e));return e=>{let r=H(),[i,a]=r.curveParameters(e.wrapped),o=(i+a)/2,{tangent:s}=r.curveTangent(e.wrapped,o),c=UD(s),l=Math.acos(Math.min(1,Math.abs(RD(c,n))));return Math.abs(l-JE*t)<1e-6}}function KI(e){return VI(`edge`,e,KI,(t,n)=>({inDirection:(e=`Z`,t=0)=>n(GI(e,t)),ofLength:(e,t=.001)=>n(n=>Math.abs(Ik(n)-e)<t),ofCurveType:e=>n(t=>jk(t)===e),parallelTo:(t=`Z`)=>KI(e).inDirection(t,0),atDistance:(e,t=[0,0,0])=>n(WI(e,t,1e-6))}))}function qI(){return KI([])}function JI(e,t){let n=UD(UI(e));return e=>{let r=wO(e),i=Math.acos(Math.min(1,Math.abs(RD(UD(r),n))));return Math.abs(i-JE*t)<1e-6}}function YI(e){return VI(`face`,e,YI,(t,n)=>({inDirection:(e=`Z`,t=0)=>n(JI(e,t)),parallelTo:(t=`Z`)=>YI(e).inDirection(t,0),ofSurfaceType:e=>n(t=>{let n=gO(t);return Ja(n)&&n.value===e}),ofArea:(e,t=.001)=>n(n=>{let r=HM(n);return Ja(r)&&Math.abs(r.value-e)<t}),atDistance:(e,t=[0,0,0])=>n(WI(e,t,1e-6))}))}function XI(){return YI([])}function ZI(e){return VI(`wire`,e,ZI,(e,t)=>({isClosed:()=>t(e=>Rk(e)),isOpen:()=>t(e=>!Rk(e)),ofEdgeCount:e=>t(t=>uD(t).length===e)}))}function QI(){return ZI([])}function $I(e,t){return typeof e==`object`&&`_topoKind`in e?e.findUnique(t):typeof e!=`function`&&FE(e)?O(e):e(XI()).findUnique(t)}function eL(e){return Array.isArray(e)&&e.length===2&&typeof e[0]==`number`&&typeof e[1]==`number`}function tL(e,t){let n=10**t,r=t<0?e:.01/n+e;return Math.round(r*n)/n}function nL(e){return Math.round(e*100)/100}function rL(e){return Math.round(e*1e5)/1e5}var iL=([e,t])=>`(${nL(e)},${nL(t)})`,aL=(e,t=1e-9)=>{let n=e;return Math.abs(e)<t&&(n=0),n.toFixed(-Math.log10(t))},oL=(e,t=1e-9)=>Array.from(new Map(e.map(([e,n])=>[`[${aL(e,t)},${aL(n,t)}]`,[e,n]])).values()),sL=class{_wrapped;_deleted=!1;constructor(e){this._wrapped=e??wT().createBoundingBox2d(),QT(this,this._wrapped)}get wrapped(){if(this._deleted)throw Error(`This object has been deleted`);return this._wrapped}delete(){this._deleted||(this._deleted=!0,$T(this._wrapped),typeof this._wrapped.delete==`function`&&this._wrapped.delete())}[Symbol.dispose](){this.delete()}get repr(){let[e,t]=this.bounds;return`${iL(e)} - ${iL(t)}`}get bounds(){let{xMin:e,yMin:t,xMax:n,yMax:r}=wT().getBBox2dBounds(this.wrapped);return[[e,t],[n,r]]}get center(){let[[e,t],[n,r]]=this.bounds;return[e+(n-e)/2,t+(r-t)/2]}get width(){let[[e],[t]]=this.bounds;return Math.abs(t-e)}get height(){let[[,e],[,t]]=this.bounds;return Math.abs(t-e)}outsidePoint(e=1){let[t,n]=this.bounds,r=n[0]-t[0],i=n[1]-t[1];return[n[0]+r/100*e,n[1]+i/100*e*.9]}add(e){wT().mergeBBox2d(this.wrapped,e.wrapped)}isOut(e){return wT().isBBox2dOut(this.wrapped,e.wrapped)}containsPoint(e){return!wT().isBBox2dOutPoint(this.wrapped,e[0],e[1])}};function cL(e){return new lL(H().deserializeCurve2d(e))}var lL=class e{_wrapped;_deleted=!1;_boundingBox;_firstPoint=null;_lastPoint=null;_firstParameter=null;_lastParameter=null;constructor(e){this._wrapped=H().wrapCurve2dHandle(e),this._boundingBox=null,typeof this._wrapped.delete==`function`&&QT(this,this._wrapped)}get wrapped(){if(this._deleted)throw Error(`This object has been deleted`);return this._wrapped}delete(){this._deleted||(this._deleted=!0,typeof this._wrapped.delete==`function`&&($T(this._wrapped),this._wrapped.delete()))}[Symbol.dispose](){this.delete()}get boundingBox(){if(this._boundingBox)return this._boundingBox;let e=H(),t=e.createBoundingBox2d();return e.addCurveToBBox2d(t,this.wrapped,1e-6),this._boundingBox=new sL(t),this._boundingBox}get repr(){return`${this.geomType} ${iL(this.firstPoint)} - ${iL(this.lastPoint)}`}serialize(){return H().serializeCurve2d(this.wrapped)}value(e){return H().evaluateCurve2d(this.wrapped,e)}get firstPoint(){return this._firstPoint===null&&(this._firstPoint=this.value(this.firstParameter)),this._firstPoint}get lastPoint(){return this._lastPoint===null&&(this._lastPoint=this.value(this.lastParameter)),this._lastPoint}get firstParameter(){return this._firstParameter===null&&(this._firstParameter=H().getCurve2dBounds(this.wrapped).first),this._firstParameter}get lastParameter(){return this._lastParameter===null&&(this._lastParameter=H().getCurve2dBounds(this.wrapped).last),this._lastParameter}get geomType(){return H().getCurve2dType(this.wrapped)}clone(){let t=new e(H().copyCurve2d(this.wrapped));return t._firstPoint=this._firstPoint,t._lastPoint=this._lastPoint,t._firstParameter=this._firstParameter,t._lastParameter=this._lastParameter,t}reverse(){H().reverseCurve2d(this.wrapped);let e=this._firstPoint;this._firstPoint=this._lastPoint,this._lastPoint=e;let t=this._firstParameter;this._firstParameter=this._lastParameter,this._lastParameter=t}distanceFromPoint(e){let t=H().projectPointOnCurve2d(this.wrapped,e[0],e[1]),n=t?t.distance:1/0;return Math.min(n,AI(e,this.firstPoint),AI(e,this.lastPoint))}distanceFromCurve(e){let t;try{t=H().distanceBetweenCurves2d(this.wrapped,e.wrapped,this.firstParameter,this.lastParameter,e.firstParameter,e.lastParameter)}catch{t=1/0}return Math.min(t,this.distanceFromPoint(e.firstPoint),this.distanceFromPoint(e.lastPoint),e.distanceFromPoint(this.firstPoint),e.distanceFromPoint(this.lastPoint))}distanceFrom(e){return eL(e)?this.distanceFromPoint(e):this.distanceFromCurve(e)}isOnCurve(e){return this.distanceFromPoint(e)<1e-9}parameter(e,t=1e-9){let n,r,i=!1;try{let t=H().projectPointOnCurve2d(this.wrapped,e[0],e[1]);t?(n=t.distance,r=t.param):i=!0}catch{i=!0}return i?EI(e,this.firstPoint,t)?O(this.firstParameter):EI(e,this.lastPoint,t)?O(this.lastParameter):k(Eo(`PARAMETER_NOT_FOUND`,`Failed to find parameter`)):n===void 0||r===void 0?k(Eo(`PARAMETER_NOT_FOUND`,`Failed to find parameter`)):n>t?k(Eo(`POINT_NOT_ON_CURVE`,`Point ${iL(e)} not on curve ${this.repr}, ${n.toFixed(9)}`)):O(r)}tangentAt(e){let t;if(Array.isArray(e))t=j(this.parameter(e));else{let n=H().getCurve2dBounds(this.wrapped);t=(n.last-n.first)*e+n.first}return H().evaluateCurve2dD1(this.wrapped,t).tangent}splitAt(n,r=1e-9){let i=n.map(e=>eL(e)?j(this.parameter(e,r)):e);i=Array.from(new Map(i.map(e=>[tL(e,-Math.log10(r)),e])).values()).sort((e,t)=>e-t);let a=this.firstParameter,o=this.lastParameter;return a>o&&i.reverse(),Math.abs(t(i,0)-a)<r*100&&(i=i.slice(1)),!i.length||(Math.abs(t(i,i.length-1)-o)<r*100&&(i=i.slice(0,-1)),!i.length)?[this]:H().splitCurve2d(this.wrapped,i).map(t=>new e(t))}},uL=(e,t=1e-4,n=`C0`,r=200)=>new lL(wT().approximateCurve2dAsBSpline(e.wrapped,t,n,r)),dL=e=>(e.geomType!==`BSPLINE_CURVE`&&i(`BSplineToBezier`,`You can only convert a Bspline`),wT().decomposeBSpline2dToBeziers(e.wrapped).map(e=>new lL(e)));function fL(e,t={tolerance:1e-4,continuity:`C0`,maxSegments:300}){let n=wT();return e.flatMap(e=>{let r=e.geomType;if(r===`ELLIPSE`||r===`CIRCLE`&&EI(e.firstPoint,e.lastPoint))return e.splitAt([.5]);if([`LINE`,`ELLIPSE`,`CIRCLE`].includes(r))return e;if(r===`BEZIER_CURVE`){let t=n.getCurve2dBezierDegree(e.wrapped);if(t!==null&&[1,2,3].includes(t))return e}return fL(dL(r===`BSPLINE_CURVE`?e:uL(e,t.tolerance,t.continuity,t.maxSegments)),t)})}var pL=(e,t)=>{let n=new lL(H().makeLine2d(e[0],e[1],t[0],t[1]));return EI(n.firstPoint,e)||n.reverse(),n},mL=(e,t,n)=>{let r=new lL(H().makeArc2dThreePoints(e[0],e[1],t[0],t[1],n[0],n[1]));if(!EI(r.firstPoint,e)){let e=H().trimCurve2d(r.wrapped,r.lastParameter,r.firstParameter);r.delete(),r=new lL(e)}return r},hL=(e,t,n)=>{let r=new lL(H().makeArc2dTangent(e[0],e[1],t[0],t[1],n[0],n[1]));if(!EI(r.firstPoint,e)){let e=H().trimCurve2d(r.wrapped,r.lastParameter,r.firstParameter);r.delete(),r=new lL(e)}return r},gL=(e,t=[0,0])=>new lL(H().makeCircle2d(t[0],t[1],e,!0)),_L=(e,t,n=[1,0],r=[0,0],i=!0)=>new lL(H().makeEllipse2d(r[0],r[1],e,t,n[0],n[1],i)),vL=(e,t,n,r,i=[0,0],a,o=!0)=>new lL(H().makeEllipseArc2d(i[0],i[1],e,t,n,r,a[0],a[1],o)),yL=(e,t,n)=>{let r=[[e[0],e[1]],...t.map(e=>[e[0],e[1]]),[n[0],n[1]]];return new lL(H().makeBezier2d(r))};function bL(e,{tolerance:t=.001,smoothing:n=null,degMax:r=3,degMin:i=1}={}){try{let a=e.map(e=>[e[0],e[1]]);return O(new lL(H().makeBSpline2d(a,{tolerance:t,smoothing:n,degMax:r,degMin:i,continuity:`C2`})))}catch(e){return k(Eo(`BSPLINE_2D_FAILED`,`B-spline approximation failed`,e))}}var xL=(e,t,n,r=!1)=>{let i=kI(DI(e,t),.5),a=AI(n,e)*(r?-1:1);return mL(e,DI(kI(zI(OI(i,n)),a),n),t)},SL=(e,n)=>{let r=wT(),a=e.geomType,[o,s]=n,c=`${rL(o)} ${rL(s)}`;if(a===`LINE`)return`L ${c}`;if(a===`BEZIER_CURVE`){let n=r.getCurve2dBezierPoles(e.wrapped);n||i(`adaptedCurveToPathElem`,`Expected Bezier poles`);let a=n.length-1;if(a===1)return`L ${c}`;if(a===2){let[e,r]=t(n,1);return`Q ${nL(e)} ${nL(r)} ${c}`}if(a===3){let[e,r]=t(n,1),[i,a]=t(n,2);return`C ${nL(e)} ${nL(r)} ${nL(i)} ${nL(a)} ${c}`}}if(a===`CIRCLE`){let t=r.getCurve2dCircleData(e.wrapped);t||i(`adaptedCurveToPathElem`,`Expected circle data`);let{radius:n,isDirect:a}=t,l=r.getCurve2dBounds(e.wrapped),u=(l.last-l.first)*YE,d=u===360?`${rL(o)} ${rL(s+1e-4)}`:c;return`A ${n} ${n} 0 ${Math.abs(u)>180?`1`:`0`} ${a?`1`:`0`} ${d}`}if(a===`ELLIPSE`){let t=r.getCurve2dEllipseData(e.wrapped);t||i(`adaptedCurveToPathElem`,`Expected ellipse data`);let{majorRadius:n,minorRadius:a,xAxisAngle:l,isDirect:u}=t,d=r.getCurve2dBounds(e.wrapped),f=(d.last-d.first)*YE,p=f===360?`${rL(o)} ${rL(s+1e-4)}`:c,m=180-l*YE;return`A ${rL(n)} ${rL(a)} ${rL(m)} ${Math.abs(f)>180?`1`:`0`} ${u?`1`:`0`} ${p}`}i(`adaptedCurveToPathElem`,`Unsupported curve type: ${a}`)},CL=e=>{let t=H(),n=t.createBoundingBox2d();return e.forEach(e=>{t.addCurveToBBox2d(n,e.wrapped,1e-6)}),new sL(n)};function wL(e,t){let n=H();return e.map(e=>TE(n.liftCurve2dToPlane(e.wrapped,[...t.origin],[...t.zDir],[...t.xDir])))}var TL=(e,t)=>{let n=H();return e.map(e=>TE(n.buildEdgeOnSurface(e.wrapped,t)))},EL=(e,t)=>{let n=H();return e.map(e=>t?new lL(n.transformCurve2dGeneral(e.wrapped,t)):e.clone())},DL=(e,t,n=[0,0])=>H().createAffinityGTrsf2d(n[0],n[1],-t[1],t[0],e),OL=e=>H().createTranslationGTrsf2d(e[0],e[1]),kL=(e,t=[0,0],n=`center`)=>n===`center`?H().createMirrorGTrsf2d(e[0],e[1],`point`):H().createMirrorGTrsf2d(0,0,`axis`,t[0],t[1],e[0],e[1]),AL=(e,t=[0,0])=>H().createRotationGTrsf2d(e,t[0],t[1]),jL=(e,t=[0,0])=>H().createScaleGTrsf2d(e,t[0],t[1]);function ML(e,t,n=`original`){let r=H(),i=r.extractSurfaceFromFace(t.wrapped),a=bO(t),o=null;if(n===`original`&&_O(t)!==`PLANE`){if(_O(t)!==`CYLINDRE`)return k(P(`UNSUPPORTED_FACE_TYPE`,`Only planar and cylindrical faces can be unwrapped for sketching`));let e=r.getSurfaceCylinderData(i);if(!e)return k(P(`UNSUPPORTED_FACE_TYPE`,`Could not extract cylinder data from face surface`));e.isDirect||(i=r.reverseSurfaceU(i)),o=DL(1/e.radius,[1,0])}if(n===`bounds`){o=r.createIdentityGTrsf2d();try{r.setGTrsf2dTranslationPart(o,0,0);let e=r.createAffinityGTrsf2d(0,0,0,1,a.uMax-a.uMin);if(r.multiplyGTrsf2d(o,e),e.delete(),a.uMin!==0){let e=r.createIdentityGTrsf2d();r.setGTrsf2dTranslationPart(e,-a.uMin,0),r.multiplyGTrsf2d(o,e),e.delete()}let t=r.createAffinityGTrsf2d(0,0,1,0,a.vMax-a.vMin);if(r.multiplyGTrsf2d(o,t),t.delete(),a.vMin!==0){let e=r.createIdentityGTrsf2d();r.setGTrsf2dTranslationPart(e,0,-a.vMin),r.multiplyGTrsf2d(o,e),e.delete()}}catch(e){throw o.delete(),e}}let s=TL(EL(e,o),i);return o&&o.delete(),O(s)}function NL(e,t){let n=H(),r=new lL(n.extractCurve2dFromEdge(e.wrapped,t.wrapped));return Vk(e)===`backward`&&n.reverseCurve2d(r.wrapped),r}var PL=(e,t=1)=>`${e.bounds[0][0]-t} ${-e.bounds[1][1]-t} ${e.width+2*t} ${e.height+2*t}`,FL=(e,t,n=1)=>`<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="${PL(t,n)}" fill="none" stroke="black" stroke-width="0.6%" vector-effect="non-scaling-stroke">
|
|
17
17
|
${e}
|
|
18
|
-
</svg>`;function
|
|
19
|
-
`)}get boundingBox(){return this._boundingBox||=xL(this.curves),this._boundingBox}get orientation(){if(this._orientation)return this._orientation;if(this._guessedOrientation)return this._guessedOrientation;let e=this.curves.flatMap(e=>e.geomType===`LINE`?[e.firstPoint]:[e.firstPoint,e.value(.5)]),t=e.map((t,n)=>{let r=hA(e,(n+1)%e.length);return(r[0]-t[0])*(r[1]+t[1])}).reduce((e,t)=>e+t,0);return this._guessedOrientation=t>0?`clockwise`:`counterClockwise`,this._guessedOrientation}stretch(t,n,r=[0,0]){let i=wL(this.curves,TL(t,n,r));return new e(i)}scale(t,n){let r=n||this.boundingBox.center,i=wL(this.curves,kL(t,r));return new e(i)}rotate(t,n){let r=wL(this.curves,OL(t*KE,n));return new e(r)}translate(t,n=0){let r=QI(t)?t:[t,n],i=wL(this.curves,EL(r));return new e(i)}mirror(t,n=[0,0],r=`center`){let i=wL(this.curves,DL(t,n,r));return new e(i)}sketchOnPlane(e,t){let n=e&&typeof e!=`string`?{...e}:$D(e,t),r=SL(this.curves,n),i=PL(r);for(let e of r)e[Symbol.dispose]();return{wire:i,defaultOrigin:n.origin,defaultDirection:n.zDir}}sketchOnFace(e,t){let n=H(),r=j(AL(this.curves,e,t)),i=PL(r);for(let e of r)e[Symbol.dispose]();n.buildCurves3d(i.wrapped);let a=n.fixWireOnFace(i.wrapped,e.wrapped,1e-9);return i[Symbol.dispose](),{wire:wE(a),baseFace:e}}subFace(e,t){let n=OD(t||[...CO(e)]);return j(jA(this.translate(bO(e,n)).sketchOnFace(e,`original`).wire))}punchHole(e,t,{height:n=null,origin:r=null,draftAngle:i=0}={}){let a=j(ZI(t,e)),o=this.subFace(a,r);return j(uO(H().draftPrism(e.wrapped,o.wrapped,a.wrapped,n,i,!1)))}toSVGPathD(){let e=this.clone().mirror([1,0],[0,0],`plane`),t=uL(e.curves).flatMap(e=>bL(e,e.lastPoint)),[n,r]=gA(e.curves).firstPoint;return`M ${tL(n)} ${tL(r)} ${t.join(` `)}${e.isClosed()?` Z`:``}`}toSVGPath(){return`<path d="${this.toSVGPathD()}" />`}toSVGViewBox(e=1){return ML(this.boundingBox,e)}toSVGPaths(){return[this.toSVGPathD()]}toSVG(e=1){return NL(this.toSVGPath(),this.boundingBox,e)}get firstPoint(){return gA(this.curves).firstPoint}get lastPoint(){return _A(this.curves).lastPoint}isInside(e){if(!this.boundingBox.containsPoint(e))return!1;let t=H(),n=dL(e,this.boundingBox.outsidePoint());try{if(this.curves.find(t=>t.isOnCurve(e)))return!1;let r=[],i=0;return this.curves.forEach(e=>{if(e.boundingBox.isOut(n.boundingBox))return;let a=t.intersectCurves2d(n.wrapped,e.wrapped,1e-9);for(let e of a.points)r.some(t=>wI(t,e,1e-9))||(r.push(e),i++);for(let e of a.segments)e.delete()}),!!(i%2)}finally{n.delete()}}isClosed(){return wI(this.firstPoint,this.lastPoint)}intersects(e){if(this.boundingBox.isOut(e.boundingBox))return!1;let t=H();for(let n of this.curves)for(let r of e.curves){if(n.boundingBox.isOut(r.boundingBox))continue;let e=t.intersectCurves2d(n.wrapped,r.wrapped,1e-9);if(e.points.length||e.segments.length)return!0}return!1}},IL=class{constructor(e=1/0,t=Float64Array,n=Uint32Array){let r=e!==1/0;this.ids=r?new n(e):[],this.values=r?new t(e):[],this.capacity=e,this.length=0}clear(){this.length=0}push(e,t){if(this.length===this.capacity)throw RangeError(`Queue is at capacity.`);let n=this.length++;for(;n>0;){let e=n-1>>1,r=this.values[e];if(t>=r)break;this.ids[n]=this.ids[e],this.values[n]=r,n=e}this.ids[n]=e,this.values[n]=t}pop(){if(this.length===0)return;let e=this.ids,t=this.values,n=e[0],r=--this.length;if(r>0){let n=e[r],i=t[r],a=0,o=r>>1;for(;a<o;){let n=(a<<1)+1,o=n+1,s=n+(o<r&+(t[o]<t[n]));if(t[s]>=i)break;e[a]=e[s],t[a]=t[s],a=s}e[a]=n,t[a]=i}return n}peek(){return this.length>0?this.ids[0]:void 0}peekValue(){return this.length>0?this.values[0]:void 0}shrink(){Array.isArray(this.ids)&&(this.ids.length=this.length),Array.isArray(this.values)&&(this.values.length=this.length)}},LL=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],RL=3,zL=class e{static from(t,n=0){if(n%8!=0)throw Error(`byteOffset must be 8-byte aligned.`);if(!t||t.byteLength===void 0||`buffer`in t)throw Error(`Data must be an instance of ArrayBuffer or SharedArrayBuffer.`);let[r,i]=new Uint8Array(t,n+0,2);if(r!==251)throw Error(`Data does not appear to be in a Flatbush format.`);let a=i>>4;if(a!==RL)throw Error(`Got v${a} data when expected v${RL}.`);let o=LL[i&15];if(!o)throw Error(`Unrecognized array type.`);let[s]=new Uint16Array(t,n+2,1),[c]=new Uint32Array(t,n+4,1);return new e(c,s,o,void 0,t,n)}constructor(e,t=16,n=Float64Array,r=ArrayBuffer,i,a=0){if(e===void 0)throw Error(`Missing required argument: numItems.`);if(isNaN(e)||e<=0)throw Error(`Unexpected numItems value: ${e}.`);this.numItems=+e,this.nodeSize=Math.min(Math.max(+t,2),65535),this.byteOffset=a;let o=e,s=o;this._levelBounds=[o*4];do o=Math.ceil(o/this.nodeSize),s+=o,this._levelBounds.push(s*4);while(o!==1);this.ArrayType=n,this.IndexArrayType=s<16384?Uint16Array:Uint32Array;let c=LL.indexOf(n),l=s*4*n.BYTES_PER_ELEMENT;if(c<0)throw Error(`Unexpected typed array class: ${n}.`);let u=n,d=this.IndexArrayType;if(i)this.data=i,this._boxes=new u(i,a+8,s*4),this._indices=new d(i,a+8+l,s),this._pos=s*4,this.minX=this._boxes[this._pos-4],this.minY=this._boxes[this._pos-3],this.maxX=this._boxes[this._pos-2],this.maxY=this._boxes[this._pos-1];else{let n=this.data=new r(8+l+s*this.IndexArrayType.BYTES_PER_ELEMENT);this._boxes=new u(n,8,s*4),this._indices=new d(n,8+l,s),this._pos=0,this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,new Uint8Array(n,0,2).set([251,(RL<<4)+c]),new Uint16Array(n,2,1)[0]=t,new Uint32Array(n,4,1)[0]=e}this._queue=new IL}add(e,t,n=e,r=t){let i=this._pos,a=i>>2,o=this._boxes;return this._indices[a]=a,o[i]=e,o[i+1]=t,o[i+2]=n,o[i+3]=r,this._pos=i+4,e<this.minX&&(this.minX=e),t<this.minY&&(this.minY=t),n>this.maxX&&(this.maxX=n),r>this.maxY&&(this.maxY=r),a}finish(){if(this._pos>>2!==this.numItems)throw Error(`Added ${this._pos>>2} items when expected ${this.numItems}.`);let e=this._boxes;if(this.numItems<=this.nodeSize){e[this._pos++]=this.minX,e[this._pos++]=this.minY,e[this._pos++]=this.maxX,e[this._pos++]=this.maxY;return}let{numItems:t,minX:n,minY:r,nodeSize:i,_indices:a,_levelBounds:o}=this,s=this.maxX-n||1,c=this.maxY-r||1,l=new Int32Array(t),u=65535,d=u/s,f=u/c;for(let i=0,a=0;i<t;i++){let t=e[a++],o=e[a++],s=e[a++],c=e[a++];l[i]=UL(d*((t+s)/2-n)|0,f*((o+c)/2-r)|0)}VL(l,e,a,0,t-1,i);let p=t*4;for(let t=0,n=0;t<o.length-1;t++){let r=o[t];for(;n<r;){let t=n,o=e[n++],s=e[n++],c=e[n++],l=e[n++];for(let t=1;t<i&&n<r;t++)o=Math.min(o,e[n++]),s=Math.min(s,e[n++]),c=Math.max(c,e[n++]),l=Math.max(l,e[n++]);a[p>>2]=t,e[p++]=o,e[p++]=s,e[p++]=c,e[p++]=l}}this._pos=p}search(e,t,n,r,i){if(this._pos!==this._boxes.length)throw Error(`Data not yet indexed - call index.finish().`);let{_boxes:a,_levelBounds:o,_indices:s,nodeSize:c}=this,l=this.numItems*4,u=a.length-4,d=o.length-1,f=[],p=[],m=!1;for(;u!==void 0;){let h=Math.min(u+c*4,o[d]),g=u>=l;if(m)this._collectContained(u,h,d,l,p,i);else for(let o=u;o<h;o+=4){let c=a[o];if(n<c)continue;let l=a[o+1];if(r<l)continue;let u=a[o+2];if(e>u)continue;let m=a[o+3];if(t>m)continue;let h=s[o>>2]|0;if(g){let i=+(e<=c&&t<=l&&n>=u&&r>=m);f.push(h|i,d-1)}else(i===void 0||i(h,c,l,u,m))&&p.push(h)}d=f.pop(),u=f.pop(),u!==void 0&&(m=(u&1)==1,u&=-2)}return p}_collectContained(e,t,n,r,i,a){let o=this._boxes,s=this._indices,c=e;for(let e=n;e>0;e--)c=s[c>>2];let l=Math.min(c+(t-e)*this.nodeSize**n,r);if(a===void 0)for(;c<l;c+=4)i.push(s[c>>2]|0);else for(;c<l;c+=4){let e=s[c>>2]|0;a(e,o[c],o[c+1],o[c+2],o[c+3])&&i.push(e)}}neighbors(e,t,n=1/0,r=1/0,i){if(this._pos!==this._boxes.length)throw Error(`Data not yet indexed - call index.finish().`);let{_boxes:a,_levelBounds:o,_indices:s,_queue:c,nodeSize:l}=this,u=this.numItems*4,d=l*4,f=[],p=r*r,m=n===1,h=p;for(c.push(a.length-4<<1,0);c.length;){let r=c.ids[0];if(r&1){if(c.pop(),f.push(r>>1),f.length===n)break;continue}c.pop();let l=r>>1,p=l<u,g=Math.min(l+d,BL(l,o));for(let n=l;n<g;n+=4){let r=a[n],o=a[n+1],l=a[n+2],u=a[n+3],d=Math.max(Math.max(r-e,e-l),0),f=Math.max(Math.max(o-t,t-u),0),g=d*d+f*f;if(g>h)continue;let _=s[n>>2]|0;p?(i===void 0||i(_))&&(c.push(_<<1|1,g),m&&g<h&&(h=g)):c.push(_<<1,g)}}return c.clear(),f}};function BL(e,t){let n=0,r=t.length-1;for(;n<r;){let i=n+r>>1;t[i]>e?r=i:n=i+1}return t[n]}function VL(e,t,n,r,i,a){let o=[r,i];for(;o.length;){let r=o.pop()||0,i=o.pop()||0;if(r-i<=a&&Math.floor(i/a)>=Math.floor(r/a))continue;let s=e[i],c=e[i+r>>1],l=e[r],u=s>c==s>l?c<s==c<l?l:c:s,d=i-1,f=r+1;for(;;){do d++;while(e[d]<u);do f--;while(e[f]>u);if(d>=f)break;HL(e,t,n,d,f)}o.push(i,f,f+1,r)}}function HL(e,t,n,r,i){let a=e[r];e[r]=e[i],e[i]=a;let o=4*r,s=4*i,c=t[o],l=t[o+1],u=t[o+2],d=t[o+3];t[o]=t[s],t[o+1]=t[s+1],t[o+2]=t[s+2],t[o+3]=t[s+3],t[s]=c,t[s+1]=l,t[s+2]=u,t[s+3]=d;let f=n[r];n[r]=n[i],n[i]=f}function UL(e,t){let n=e^t,r=65535^n,i=65535^(e|t),a=e&(t^65535),o=n|r>>1,s=n>>1^n,c=i^(i>>1^r&a>>1),l=a^(n&i>>1^a>>1);return n=o&o>>2^s&s>>2,r=o&s>>2^s&(o^s)>>2,i=c^(o&c>>2^s&l>>2),a=l^(s&c>>2^(o^s)&l>>2),o=n&n>>4^r&r>>4,s=n&r>>4^r&(n^r)>>4,c=i^(n&i>>4^r&a>>4),l=a^(r&i>>4^(n^r)&a>>4),i=c^(o&c>>8^s&l>>8),a=l^(s&c>>8^(o^s)&l>>8),i^=i>>1,a^=a>>1,n=e^t,r=a|65535^(n|i),n=(n|n<<8)&16711935,n=(n|n<<4)&252645135,n=(n|n<<2)&858993459,n=(n|n<<1)&1431655765,r=(r|r<<8)&16711935,r=(r|r<<4)&252645135,r=(r|r<<2)&858993459,r=(r|r<<1)&1431655765,((r<<1|n)>>>0)-2147483648}var WL=(e,t,n=1e-9)=>{if(e.boundingBox.isOut(t.boundingBox))return O({intersections:[],commonSegments:[],commonSegmentsPoints:[]});let r=ST(),i,a;try{let o=r.intersectCurves2d(e.wrapped,t.wrapped,n);i=o.points,a=o.segments.map(e=>new sL(e))}catch(e){return k(wo(`INTERSECTION_FAILED`,`Intersections failed between curves`,e))}let o=a.filter(e=>wI(e.firstPoint,e.lastPoint,n)).map(e=>e.firstPoint);o.length&&(i.push(...o),a=a.filter(e=>!wI(e.firstPoint,e.lastPoint,n)));let s=a.flatMap(e=>[e.firstPoint,e.lastPoint]);return O({intersections:i,commonSegments:a,commonSegmentsPoints:s})},GL=(e,t=1e-9)=>{let n=ST(),r;try{let i=n.intersectCurves2d(e.wrapped,e.wrapped,t);r=i.points;for(let e of i.segments)e.delete()}catch(e){return k(wo(`SELF_INTERSECTION_FAILED`,`Self intersection failed`,e))}return O(r)},KL=(e,n,r)=>{let i=LI(EI(n,e)),a=[i[1],-i[0]],o=[t(a,0)*r,t(a,1)*r];return{firstPoint:TI(e,o),lastPoint:TI(n,o)}},qL=(e,t)=>{let n=e.geomType,r=ST();if(n===`CIRCLE`){let n=r.getCurve2dCircleData(e.wrapped);if(!n)return dL(e.firstPoint,e.lastPoint);let{cx:i,cy:a,radius:o,isDirect:s}=n,c=t*(s?1:-1),l=o+c;if(l<1e-10){let t=[i,a],n=e=>{let[n,r]=LI(EI(e,t));return TI(e,[c*n,c*r])};return{collapsed:!0,firstPoint:n(e.firstPoint),lastPoint:n(e.lastPoint)}}let u=new sL(r.makeCircle2d(i,a,l,s)),d;try{d=r.trimCurve2d(u.wrapped,e.firstParameter,e.lastParameter)}finally{u.delete()}return new sL(d)}if(n===`LINE`){let{firstPoint:n,lastPoint:r}=KL(e.firstPoint,e.lastPoint,t);return dL(n,r)}let i=new sL(r.offsetCurve2d(e.wrapped,t)),a=cL(i);if(i.delete(),j(GL(a)).length){let e=a.firstPoint,t=a.lastPoint;return a.delete(),{collapsed:!0,firstPoint:e,lastPoint:t}}return a};function JL(e,n,r){let i=AI(e.tangentAt(1),n.tangentAt(0));if(Math.abs(i)<1e-10)return null;let a=Math.abs(r)*(i>0?-1:1),o=qL(e,a),s=qL(n,a);if(!(o instanceof sL)||!(s instanceof sL))return null;let c=WL(o,s,1e-9);if(!Ka(c))return null;let l=c.value.intersections.at(-1);if(!QI(l))return null;let u=l,d=(e,t)=>{let[n,r]=t.tangentAt(u),i=LI([-r,n]),o=TI(u,DI(i,a)),s=j(e.parameter(o,1e-6));return e.splitAt([s])},f=d(e,o),p=d(n,s);return{first:t(f,0),second:t(p,1),center:u}}function YL(e,t,n){let r=JL(e,t,n);if(!r)return[e,t];let{first:i,second:a,center:o}=r;return[i,yL(i.lastPoint,a.firstPoint,o),a]}function XL(e,t,n){let r=JL(e,t,n);if(!r)return[e,t];let{first:i,second:a}=r;return[i,dL(i.lastPoint,a.firstPoint),a]}function ZL(e,n,r){let i=AI(LI(e.tangentAt(1)),LI(n.tangentAt(0))),a=Math.asin(i);if(Math.abs(i)<1e-10)return[e,n];let o=i>0?-1:1,s=Math.abs(r)*Math.sin(a/2)*o,c=qL(e,s),l=qL(n,s);if(!(c instanceof sL)||!(l instanceof sL))return[e,n];let u=WL(c,l,1e-9);if(!Ka(u))return[e,n];let d=u.value.intersections.at(-1);if(!QI(d))return[e,n];let f=mL(r,d),p=j(WL(e,f)).intersections[0],m=j(WL(n,f)).intersections.at(-1);if(!p||!m)return[e,n];let h=e.splitAt([p]),g=n.splitAt([m]),_=t(h,0),v=t(g,g.length-1);try{return[_,fL(_.lastPoint,e.lastPoint,v.firstPoint),v]}catch{return[e,n]}}var QL=class e{blueprints;_boundingBox;constructor(e){this.blueprints=e,this._boundingBox=null}get repr(){return[`Blueprints`,...this.blueprints.map(e=>e.repr)].join(`
|
|
20
|
-
`)}clone(){return new e(this.blueprints.map(e=>e.clone()))}get boundingBox(){if(!this._boundingBox){let e=new
|
|
21
|
-
`),this.boundingBox,e)}}
|
|
22
|
-
`)}stretch(t,n,r){return new e(this.blueprints.map(e=>e.stretch(t,n,r)))}rotate(t,n){return new e(this.blueprints.map(e=>e.rotate(t,n)))}scale(t,n){let r=n||this.boundingBox.center;return new e(this.blueprints.map(e=>e.scale(t,r)))}translate(t,n=0){return new e(this.blueprints.map(e=>typeof t==`number`?e.translate(t,n):e.translate(t)))}mirror(t,n,r){return new e(this.blueprints.map(e=>e.mirror(t,n,r)))}sketchOnPlane(e,t){return this.blueprints.map(n=>n.sketchOnPlane(e,t))}sketchOnFace(e,t){return this.blueprints.map(n=>n.sketchOnFace(e,t))}punchHole(e,t,n={}){return gA(this.blueprints).punchHole(e,t,n)}toSVGViewBox(e=1){return ML(this.boundingBox,e)}toSVGPaths(){return this.blueprints.flatMap(e=>e.toSVGPaths())}toSVGGroup(){return`<g>${this.blueprints.map(e=>e.toSVGPath()).join(``)}</g>`}toSVG(e=1){return NL(this.toSVGGroup(),this.boundingBox,e)}},eR=e=>{if(e.length===0)return[];if(e.length===1)return[[Oo(e,0,`groupByBoundingBoxOverlap`)]];let t=new zL(e.length);for(let n of e){let[[e,r],[i,a]]=n.boundingBox.bounds;t.add(e,r,i,a)}t.finish();let n=e.map((n,r)=>{let[[i,a],[o,s]]=n.boundingBox.bounds;return t.search(i,a,o,s).filter(t=>t>r&&!n.boundingBox.isOut(Oo(e,t,`groupByBoundingBoxOverlap`).boundingBox))}),r=[],i=Array(n.length);return n.forEach((t,n)=>{let a=i[n];a||(a=[],r.push(a)),a.push(Oo(e,n,`groupByBoundingBoxOverlap`)),t.length&&t.forEach(e=>{i[e]=a})}),r},tR=e=>e.map((t,n)=>{let r=Oo(t.curves,0,`addContainmentInfo`),i=r.value((r.lastParameter+r.firstParameter)/2);return{blueprint:t,isIn:e.filter((e,t)=>n===t?!1:e.isInside(i))}}),nR=(e,t)=>e.flatMap(({blueprint:e})=>iR(t.filter(({blueprint:t,isIn:n})=>t===e||n.indexOf(e)!==-1))),rR=(e,t)=>[t.filter(({isIn:e})=>e.length<=1),...iR(tR(e.map(({blueprint:e})=>e)))],iR=e=>{if(!e.length)return[];let t=e.filter(({isIn:e})=>!e.length),n=e.filter(({isIn:e})=>e.length>1);return t.length===1&&n.length===0?[e]:t.length>1?nR(t,e):rR(n,e)},aR=e=>new QL(eR(e).map(tR).flatMap(iR).map(e=>e.length===1?Oo(e,0,`organiseBlueprints`).blueprint:(e.sort((e,t)=>e.isIn.length-t.isIn.length),new $L(e.map(({blueprint:e})=>e))))),oR=e=>e===`symmetric`||typeof e==`number`||Array.isArray(e)&&e.length===2,sR=e=>{let t;t=e?oR(e)?{endTangent:e}:{endTangent:0,...e}:{endTangent:[1,0]};let{endTangent:n,startFactor:r=1,endFactor:i=1,startTangent:a}=t,o;o=typeof n==`number`?FI(1,n*KE):n;let s;return s=typeof a==`number`?FI(1,a*KE):a,{endTangent:o,startFactor:r,endFactor:i,startTangent:s}};function cR(e,t,n){return e<t?{majorRadius:t,minorRadius:e,rotationAngle:n+90}:{majorRadius:e,minorRadius:t,rotationAngle:n}}function lR(e,t,n,r,i,a,o,s){let c=i*KE,l=e=>OI(s(e)),u=l(FI(n,c)),d=l(FI(r,c+Math.PI/2)),f=LI(s(NI([1,0],c))),[,p]=II(f),{cx:m,cy:h,startAngle:g,endAngle:_,clockwise:v,rx:y,ry:b}=fR(e,t,u,d,p,a,o),x=gL(y,b,v?g:_,v?_:g,[m,h],f);return v||x.reverse(),x}function uR(e,t,n,r,i){let a=Math.PI*2,o=dR(1,0,e,t),s=dR(e,t,-n,-r);for(;s>a;)s-=a;for(;s<0;)s+=a;i||(s-=a);let c=o+s;for(;c>a;)c-=a;for(;c<0;)c+=a;return{startAngle:o,deltaAngle:s,endAngle:c}}function dR(e,t,n,r){let a=e*n+t*r,o=Math.sqrt((e*e+t*t)*(n*n+r*r));o<1e-12&&i(`radianAngle`,`Cannot compute angle between zero-length vectors`);let s=Math.acos(Math.max(-1,Math.min(1,a/o)));return e*r-t*n<0&&(s=-s),s}function fR([e,t],[n,r],a,o,s,c,l){a<0&&(a=-a),o<0&&(o=-o),(a<1e-10||o<1e-10)&&i(`convertSvgEllipseParams`,`rx and ry cannot be 0`);let u=Math.sin(s),d=Math.cos(s),f=(e-n)/2,p=(t-r)/2,m=(e+n)/2,h=(t+r)/2,g=d*f+u*p,_=d*p-u*f,v=g*g/(a*a)+_*_/(o*o);v>1&&(a*=Math.sqrt(v),o*=Math.sqrt(v));let y=a*o,b=a*_,x=o*g,S=b*b+x*x;S||i(`convertSvgEllipseParams`,`Start point cannot be same as end point`);let C=Math.sqrt(Math.abs((y*y-S)/S));c===l&&(C=-C);let w=C*b/o,ee=-C*x/a,te=d*w-u*ee+m,ne=u*w+d*ee+h,re=(g-w)/a,ie=(g+w)/a,{startAngle:ae,deltaAngle:oe,endAngle:se}=uR(re,(_-ee)/o,ie,(_+ee)/o,l);return{cx:te,cy:ne,startAngle:ae,deltaAngle:oe,endAngle:se,clockwise:l,rx:a,ry:o}}var pR={chamfer:XL,dogbone:ZL,fillet:YL};function mR(e,t){if(typeof e==`function`)return e;let n=pR[t];return(t,r)=>n(t,r,e)}var hR=class{pointer;firstPoint;pendingCurves;_nextCorner;constructor(e=[0,0]){this.pointer=e,this.firstPoint=e,this._nextCorner=null,this.pendingCurves=[]}_convertToUV([e,t]){return[e,t]}_convertFromUV([e,t]){return[e,t]}_lastCurve(){let e=this.pendingCurves.length;return e===0?null:this.pendingCurves[e-1]}_requireLastCurve(e,t){let n=this._lastCurve();return n||i(e,`You need a previous curve to ${t}`),n}_resolveRelative(e,t){return[this.pointer[0]+e,this.pointer[1]+t]}_saveCurveAndAdvance(e,t){return this.saveCurve(e),this.pointer=t,this}get penPosition(){return this.pointer}get penAngle(){let e=this._lastCurve();if(!e)return 0;let[t,n]=e.tangentAt(1);return Math.atan2(n,t)*qE}movePointerTo(e){return this.pendingCurves.length&&i(`Sketcher2d.movePointerTo`,`You can only move the pointer if there is no curve defined`),this.pointer=e,this.firstPoint=e,this}saveCurve(e){if(!this._nextCorner){this.pendingCurves.push(e);return}let t=this.pendingCurves.pop();t||i(`Sketcher2d.saveCurve`,`No previous curve available for custom corner`),this.pendingCurves.push(...this._nextCorner(t,e)),this._nextCorner=null}lineTo(e){let t=dL(this._convertToUV(this.pointer),this._convertToUV(e));return this._saveCurveAndAdvance(t,e)}line(e,t){return this.lineTo(this._resolveRelative(e,t))}vLine(e){return this.line(0,e)}hLine(e){return this.line(e,0)}vLineTo(e){return this.lineTo([this.pointer[0],e])}hLineTo(e){return this.lineTo([e,this.pointer[1]])}polarLineTo([e,t]){return this.lineTo(FI(e,t*KE))}polarLine(e,t){let[n,r]=FI(e,t*KE);return this.line(n,r)}tangentLine(e){let t=this._requireLastCurve(`Sketcher2d.tangentLine`,`sketch a tangent line`),n=LI(this._convertFromUV(t.tangentAt(1)));return this.line(n[0]*e,n[1]*e)}threePointsArcTo(e,t){let n=fL(this._convertToUV(this.pointer),this._convertToUV(t),this._convertToUV(e));return this._saveCurveAndAdvance(n,e)}threePointsArc(e,t,n,r){let[i,a]=this.pointer;return this.threePointsArcTo([i+e,a+t],[i+n,a+r])}sagittaArcTo(e,t){let[n,r]=this.pointer,[a,o]=e,s=(n+a)/2,c=(r+o)/2,l=-(o-r),u=a-n,d=Math.sqrt(l**2+u**2);d<1e-12&&i(`sagittaArcTo`,`Start and end points cannot be identical`);let f=[s+l/d*t,c+u/d*t],p=fL(this._convertToUV(this.pointer),this._convertToUV(f),this._convertToUV(e));return this._saveCurveAndAdvance(p,e)}sagittaArc(e,t,n){return this.sagittaArcTo(this._resolveRelative(e,t),n)}vSagittaArc(e,t){return this.sagittaArc(0,e,t)}hSagittaArc(e,t){return this.sagittaArc(e,0,t)}bulgeArcTo(e,t){if(!t)return this.lineTo(e);let n=OI(this.pointer,e)/2;return this.sagittaArcTo(e,-t*n)}bulgeArc(e,t,n){return this.bulgeArcTo(this._resolveRelative(e,t),n)}vBulgeArc(e,t){return this.bulgeArc(0,e,t)}hBulgeArc(e,t){return this.bulgeArc(e,0,t)}tangentArcTo(e){let t=this._requireLastCurve(`Sketcher2d.tangentArc`,`sketch a tangent arc`),n=pL(this._convertToUV(this.pointer),t.tangentAt(1),this._convertToUV(e));return this._saveCurveAndAdvance(n,e)}tangentArc(e,t){return this.tangentArcTo(this._resolveRelative(e,t))}ellipseTo(e,t,n,r=0,i=!1,a=!1){let{majorRadius:o,minorRadius:s,rotationAngle:c}=cR(t,n,r),l=lR(this._convertToUV(this.pointer),this._convertToUV(e),o,s,c,i,a,e=>this._convertToUV(e));return this._saveCurveAndAdvance(l,e)}ellipse(e,t,n,r,i=0,a=!1,o=!1){return this.ellipseTo(this._resolveRelative(e,t),n,r,i,a,o)}halfEllipseTo(e,t,n=!1){let r=MI(e,this.pointer),i=OI(e,this.pointer);return this.ellipseTo(e,i/2,t,r*qE,!0,n)}halfEllipse(e,t,n,r=!1){return this.halfEllipseTo(this._resolveRelative(e,t),n,r)}bezierCurveTo(e,t){let n=t.length===2&&!Array.isArray(t[0])?[t]:t,r=_L(this._convertToUV(this.pointer),n.map(e=>this._convertToUV(e)),this._convertToUV(e));return this._saveCurveAndAdvance(r,e)}quadraticBezierCurveTo(e,t){return this.bezierCurveTo(e,[t])}cubicBezierCurveTo(e,t,n){return this.bezierCurveTo(e,[t,n])}smoothSplineTo(e,t){let{endTangent:n,startTangent:r,startFactor:i,endFactor:a}=sR(t),o=this._lastCurve(),s=OI(this.pointer,e)*.25,c;c=r||(o?this._convertFromUV(o.tangentAt(1)):[1,0]),c=LI(c);let l=[this.pointer[0]+c[0]*i*s,this.pointer[1]+c[1]*i*s],u;u=n===`symmetric`?[-c[0],-c[1]]:n,u=LI(u);let d=[e[0]-u[0]*a*s,e[1]-u[1]*a*s];return this.cubicBezierCurveTo(e,l,d)}smoothSpline(e,t,n){return this.smoothSplineTo(this._resolveRelative(e,t),n)}customCorner(e,t=`fillet`){return this.pendingCurves.length||i(`Sketcher2d.customCorner`,`You need a curve defined to fillet the angle`),this._nextCorner=mR(e,t),this}_customCornerLastWithFirst(e,t=`fillet`){if(!e)return;let n=this.pendingCurves.pop(),r=this.pendingCurves.shift();(!n||!r)&&i(`Sketcher2d._customCornerLastWithFirst`,`Not enough curves to close and fillet`),this.pendingCurves.push(...mR(e,t)(n,r))}_closeSketch(){wI(this.pointer,this.firstPoint)||this.lineTo(this.firstPoint)}_closeWithMirror(){wI(this.pointer,this.firstPoint)&&i(`Sketcher2d._closeWithMirror`,`Cannot close with a mirror when the sketch is already closed`);let e=[this.pointer[0]-this.firstPoint[0],this.pointer[1]-this.firstPoint[1]],t=this._convertToUV(this.pointer),n=this._convertToUV(e),r=this.pendingCurves.map(e=>new sL(H().mirrorCurve2dAcrossAxis(e.wrapped,t[0],t[1],n[0],n[1])));r.reverse();for(let e of r)e.reverse();this.pendingCurves.push(...r),this.pointer=this.firstPoint}},gR=class extends hR{constructor(e=[0,0]){super(),this.pointer=e,this.firstPoint=e,this.pendingCurves=[]}done(){return new FL(this.pendingCurves)}close(){return this._closeSketch(),this.done()}closeWithMirror(){return this._closeWithMirror(),this.close()}closeWithCustomCorner(e,t=`fillet`){return this._closeSketch(),this._customCornerLastWithFirst(e,t),this.done()}},_R=2*Math.PI;function vR(e){let t=e%_R,n=t<0?t+_R:t;return n<Math.PI?n:n===Math.PI?0:Math.abs(n-_R)}function yR(e){return e.curves.map((t,n)=>({firstCurve:t,secondCurve:hA(e.curves,(n+1)%e.curves.length),point:t.lastPoint}))}function bR(e){let t=t=>bR([...e,t]),n=t=>e.every(e=>e(t));return{shouldKeep:n,when:e=>t(e),inList:e=>t(t=>e.some(e=>wI(e,t.point))),atDistance:(e,n=[0,0])=>t(t=>Math.abs(OI(n,t.point)-e)<1e-9),atPoint:e=>t(t=>wI(e,t.point)),inBox:(e,n)=>{let r=Math.min(e[0],n[0]),i=Math.max(e[0],n[0]),a=Math.min(e[1],n[1]),o=Math.max(e[1],n[1]);return t(e=>{let[t,n]=e.point;return t>=r&&t<=i&&n>=a&&n<=o})},ofAngle:e=>t(t=>{let n=t.firstCurve.tangentAt(1),r=t.secondCurve.tangentAt(0);return Math.abs(vR(jI(n,r))-vR(KE*e))<1e-9}),not:e=>{let n=e(bR([]));return t(e=>!n.shouldKeep(e))},either:e=>{let n=e.map(e=>e(bR([])));return t(e=>n.some(t=>t.shouldKeep(e)))},find:e=>yR(e).filter(n)}}function xR(){return bR([])}var SR=(e,t,n=0)=>{let r=[...Array(t).keys()].map(n=>{let r=-(Math.PI*2/t)*n;return[e*Math.sin(r),e*Math.cos(r)]}),i=_A(r),a=new gR().movePointerTo([i[0],i[1]]);return n?r.forEach(([e,t])=>a.sagittaArcTo([e,t],n)):r.forEach(([e,t])=>a.lineTo([e,t])),a.done()},CR=(e,t,n=0)=>{let{rx:r=0,ry:i=0}=typeof n==`number`?{ry:n,rx:n}:n,a=Math.min(r,e/2),o=Math.min(i,t/2),s=a&&o;s||(a=0,o=0);let c=a===o,l=new gR([Math.min(0,-(e/2-a)),-t/2]),u=(e,t)=>{s&&(c?l.tangentArc(e,t):l.ellipse(e,t,a,o,0,!1,!0))};return a<e/2&&l.hLine(e-2*a),u(a,o),o<t/2&&l.vLine(t-2*o),u(-a,o),a<e/2&&l.hLine(-(e-2*a)),u(-a,-o),o<t/2&&l.vLine(-(t-2*o)),u(a,-o),l.close()},wR=(e,t)=>wI(e,t,xI);function TR(e){return`${e[0].toFixed(9)},${e[1].toFixed(9)}`}function ER(e,t){let n=TR(e),r=TR(t);return n<r?`${n}|${r}`:`${r}|${n}`}function DR(e){let t=e[0];return t===void 0&&i(`startOfSegment`,`empty segment`),t.firstPoint}function OR(e){let t=e[e.length-1];return t===void 0&&i(`endOfSegment`,`empty segment`),t.lastPoint}function kR(e){return[...e].reverse().map(e=>{let t=e.clone();return t.reverse(),t})}function AR(e){return[...e].reverse().map(kR)}function jR(e){let t=(e.lastParameter+e.firstParameter)/2;return e.value(t)}function MR(e,t){let n=TR(t);for(let r=0;r<e.length;r++){let i=e[r];if(i!==void 0&&TR(i.firstPoint)===n&&wR(t,i.firstPoint))return r}for(let n=0;n<e.length;n++){let r=e[n];if(r!==void 0&&wR(t,r.firstPoint))return n}return-1}function NR(e,t,n,r){for(let i=0;i<e.length;i++){let a=e[i];if(a!==void 0&&TR(a.firstPoint)===t&&TR(a.lastPoint)===n&&r(a))return i}for(let t=0;t<e.length;t++){let n=e[t];if(n!==void 0&&r(n))return t}return-1}function PR(e,t){return t<=0?e:e.slice(t).concat(e.slice(0,t))}function FR(e,t){return PR(e,MR(e,t))}function IR(e,t){let n=TR(t.firstPoint),r=TR(t.lastPoint),a=e=>wR(t.firstPoint,e.firstPoint)&&wR(t.lastPoint,e.lastPoint),o=e=>wR(t.lastPoint,e.firstPoint)&&wR(t.firstPoint,e.lastPoint);function s(e,t,n,r){let i=NR(e,t,n,r);return i===-1?null:PR(e,i)}let c=s(e,n,r,a);if(c!==null)return c;let l=s(e,r,n,o);if(l!==null)return l;let u=kR(e),d=s(u,n,r,a);if(d!==null)return d;let f=s(u,r,n,o);if(f!==null)return f;i(`rotateToStartAtSegment`,`failed to rotate to segment start`)}function*LR(e,t,n){let r=new Set(t.map(TR)),i=new Set(n.map(e=>ER(e.firstPoint,e.lastPoint))),a=e=>r.has(TR(e))?!0:t.some(t=>wR(t,e)),o=(e,t)=>i.has(ER(e,t))?!0:n.some(n=>wR(n.firstPoint,e)&&wR(n.lastPoint,t)||wR(n.firstPoint,t)&&wR(n.lastPoint,e)),s=[];for(let t of e){if(wR(t.firstPoint,t.lastPoint)){s.push(t);continue}let e=a(t.lastPoint),n=o(t.firstPoint,t.lastPoint);e?(s.push(t),yield s,s=[]):n?(s.length&&(yield s,s=[]),yield[t]):s.push(t)}s.length&&(yield s)}function RR(e,t,n){return e.filter(e=>{let r=t.filter(t=>wR(t.firstPoint,e)||wR(t.lastPoint,e)),i=r.length%2?r.filter(t=>!(wR(t.firstPoint,e)&&wR(t.lastPoint,e))):r;if(i.length===0||i.length%2)return!1;let a=i.map(e=>n.isInside(jR(e)));return!(a.every(Boolean)||a.every(e=>!e))})}function zR(e,n){let r=[],i=[],a=e.curves.map(()=>[]),o=n.curves.map(()=>[]),s=new zL(n.curves.length);for(let e of n.curves){let[[t,n],[r,i]]=e.boundingBox.bounds;s.add(t,n,r,i)}return s.finish(),e.curves.forEach((e,c)=>{let[[l,u],[d,f]]=e.boundingBox.bounds,p=s.search(l,u,d,f);for(let s of p){let{intersections:l,commonSegments:u,commonSegmentsPoints:d}=j(WL(e,t(n.curves,s),xI/100));r.push(...l),a[c]?.push(...l),o[s]?.push(...l),i.push(...u),r.push(...d),a[c]?.push(...d),o[s]?.push(...d)}}),{allIntersections:iL(r,xI),allCommonSegments:i,firstCurvePoints:a,secondCurvePoints:o}}function BR(e,t){return yA([e,t]).flatMap(([e,t])=>t.length===0?[e]:e.splitAt(t,xI/100))}function VR(e,t,n){return e.some(([e,r])=>e===void 0||r===void 0?!1:wR(e,t)&&wR(r,n)||wR(e,n)&&wR(r,t))}function HR(e,t){let{allIntersections:n,allCommonSegments:r,firstCurvePoints:i,secondCurvePoints:a}=zR(e,t);if(n.length<=1)return null;let o=BR(e.curves,i),s=BR(t.curves,a),c=r.map(e=>[e.firstPoint,e.lastPoint]),l=RR(RR(n,o,t),s,e);if(l.length===0&&r.length===0)return null;if(r.length===0){let e=l[0];if(e===void 0)return null;o=FR(o,e),s=FR(s,e)}else{let e=r[0];if(e===void 0)return null;o=IR(o,e),s=IR(s,e)}let u=Array.from(LR(o,l,r)),d=Array.from(LR(s,l,r)),f=u[0],p=d[0];if(f!==void 0&&p!==void 0){let e=!wR(OR(p),OR(f)),t=r.length>0&&p.length!==1;(e||t)&&(d=AR(d))}let m=Math.max(u.length,d.length),h=[];for(let e=0;e<m;e++){let t=u[e],n=d[e];if(t===void 0||n===void 0){let e=t??n;if(e===void 0)continue;h.push([e,e]);continue}VR(c,DR(t),OR(t))?h.push([t,`same`]):h.push([t,n])}return h}function UR(e){if(e.length<2)return e;let n=[],r=0;for(;r<e.length;){let i=t(e,r);if(i.geomType!==`LINE`){n.push(i),r++;continue}let a=i.lastPoint,o=r+1;for(;o<e.length;){let n=t(e,o);if(n.geomType!==`LINE`||!wR(a,n.firstPoint))break;let r=EI(a,i.firstPoint),s=EI(n.lastPoint,n.firstPoint);if(Math.abs(AI(r,s))>1e-9)break;a=n.lastPoint,o++}o>r+1?n.push(dL(i.firstPoint,a)):n.push(i),r=o}return n}function WR(e){let t=e.map(e=>e.firstPoint),n=e.map(e=>e.lastPoint),r=yA([t,n.slice(-1).concat(n.slice(0,-1))]).map(([e,t],n)=>e===void 0||t===void 0||wR(e,t)?null:n).filter(e=>e!==null);if(r.length===0)return[e];let i=yA([r.slice(0,-1),r.slice(1)]).map(([t,n])=>e.slice(t,n)),a=e.slice(r[r.length-1]),o=r[0];return o!==void 0&&o!==0&&(a=a.concat(e.slice(0,o))),i.push(a),i}function GR(e,t,n){return t===1?{curves:[...e],segmentsIn:1,lastWasSame:null}:t===2||t===0?{curves:[],segmentsIn:null,lastWasSame:null}:t===null?{curves:[],segmentsIn:null,lastWasSame:n?[...n,...e]:e}:{curves:[],segmentsIn:t,lastWasSame:n}}function KR(e,t,n,r,i,a,o){let s=[],c=0,l=e[0];if(l!==void 0){let t=jR(l),n=r.isInside(t);(i.firstInside===`keep`&&n||i.firstInside===`remove`&&!n)&&(c+=1,s.push(...e))}let u=t[0];if(u!==void 0){let e=jR(u),r=n.isInside(e);if(i.secondInside===`keep`&&r||i.secondInside===`remove`&&!r){let e=t;c===1&&(e=kR(t)),c+=1,s.push(...e)}}return a===null&&c===1&&o!==null&&(s=[...o,...s]),{curves:s,segmentsIn:c===1?c:a,lastWasSame:c===1?null:o}}function qR(e,t,n){let r=HR(e,t);if(r===null)return JR(e,t);if(r.every(([,e])=>e===`same`))return{identical:!0};let i=null,a=null,o=r.flatMap(([r,o])=>{if(o===`same`){let e=GR(r,i,a);return i=e.segmentsIn,a=e.lastWasSame,e.curves}let s=KR(r,o,e,t,n,i,a);return i=s.segmentsIn,a=s.lastWasSame,s.curves}),s=a;s!==null&&i===1&&(o=[...s,...o]);let c=WR(UR(o)).filter(e=>e.length>0).map(e=>new FL(e));if(c.length===0)return null;if(c.length===1){let e=c[0];return e===void 0?null:e}return aR(c)}function JR(e,t){let n=e.curves[0],r=t.curves[0];return{identical:!1,firstCurveInSecond:n!==void 0&&t.isInside(jR(n)),secondCurveInFirst:r!==void 0&&e.isInside(jR(r))}}function YR(e,t){let n=qR(e,t,{firstInside:`remove`,secondInside:`remove`});return n===null||n instanceof FL||n instanceof QL?n:n.identical?e.clone():n.firstCurveInSecond?t.clone():n.secondCurveInFirst?e.clone():new QL([e,t])}function XR(e,t){let n=qR(e,t,{firstInside:`remove`,secondInside:`keep`});return n===null||n instanceof FL||n instanceof QL?n:n.identical||n.firstCurveInSecond?null:n.secondCurveInFirst?new QL([new $L([e,t])]):e.clone()}function ZR(e,t){let n=qR(e,t,{firstInside:`keep`,secondInside:`keep`});return n===null||n instanceof FL||n instanceof QL?n:n.identical||n.firstCurveInSecond?e.clone():n.secondCurveInFirst?t.clone():null}var QR=(e,t)=>{if(e instanceof FL&&t instanceof FL){let n=[];return e.curves.forEach(e=>{t.curves.forEach(t=>{let{intersections:r,commonSegmentsPoints:i}=j(WL(e,t));n.push(...r),n.push(...i)})}),n=iL(n),n.length>1}if(e instanceof $L||e instanceof QL)return e.blueprints.some(e=>QR(e,t));if(t instanceof $L||t instanceof QL)return t.blueprints.some(t=>QR(e,t));i(`genericIntersects`,`Unhandled shape combination in genericIntersects`)},$R=(e,t)=>{if(e instanceof $L){if(t instanceof FL)return nz(t,e);if(t instanceof $L)return iz(e,t)}if(t instanceof $L){if(e instanceof FL)return nz(e,t);if(e instanceof $L)return iz(e,t)}if(e instanceof FL&&t instanceof FL)return YR(e,t);i(`genericFuse`,`Unhandled shape combination in genericFuse`)},ez=e=>{let t=new Map,n=[];return e.forEach((r,a)=>{let o;t.has(a)?o=t.get(a):(o={current:r,fusedWith:new Set([a])},n.push(o)),e.slice(a+1).forEach((e,n)=>{let r=o.current,s=a+n+1;if(o.fusedWith.has(s))return;let c=e,l=!1;if(t.has(s)&&(c=t.get(s).current,l=!0),r.boundingBox.isOut(c.boundingBox)||!QR(r,c))return;let u;if(r instanceof QL||c instanceof QL){let e=az(r,c);e===null&&i(`fuseIntersectingBlueprints`,`fuse2D returned null for non-null inputs`),u=e}else u=$R(r,c);if(!(u instanceof FL||u instanceof $L)){if(u instanceof QL&&u.blueprints.length===2)return;u instanceof QL&&u.blueprints.length===1?u=Oo(u.blueprints,0,`fuseIntersectingBlueprints`):u instanceof QL||i(`fuseIntersectingBlueprints`,`Fuse produced unexpected non-blueprint result`)}o.fusedWith.add(s),o.current=u,l||t.set(s,o)})}),aR(n.map(({current:e})=>e).flatMap(e=>tz(e)))},tz=e=>e instanceof FL?[e]:e instanceof $L?e.blueprints:e instanceof QL?e.blueprints.flatMap(e=>tz(e)):[],nz=(e,t)=>{let n=YR(e,Oo(t.blueprints,0,`fuseBlueprintWithCompound`)),r=t.blueprints.slice(1).map(t=>XR(t,e));return aR([...tz(n),...r.flatMap(e=>tz(e))])};function rz(e,t){let n=[];for(let r of e)for(let e of t)n.push([r,e]);return n}var iz=(e,t)=>{let n=Oo(e.blueprints,0,`fuseCompoundWithCompound`),r=Oo(t.blueprints,0,`fuseCompoundWithCompound`),i=YR(n,r),a=t.blueprints.slice(1).map(e=>XR(e,n)),o=e.blueprints.slice(1).map(e=>XR(e,r)),s=rz(e.blueprints.slice(1),t.blueprints.slice(1)).flatMap(([e,t])=>tz(ZR(e,t)));return aR([...tz(i),...a.flatMap(e=>tz(e)),...o.flatMap(e=>tz(e)),...s])},az=(e,t)=>{if(e===null)return t?.clone()??null;if(t===null)return e.clone();if(!(e instanceof QL)&&t instanceof QL)return ez([e,...t.blueprints]);if(!(t instanceof QL)&&e instanceof QL)return ez([t,...e.blueprints]);if(e instanceof QL&&t instanceof QL){let n=az(Oo(e.blueprints,0,`fuse2D`),t);return e.blueprints.slice(1).forEach(e=>{n=az(e,n)}),n}if(e instanceof $L){if(t instanceof QL)return az(t,e);if(t instanceof FL)return nz(t,e);if(t instanceof $L)return iz(e,t)}if(t instanceof $L){if(e instanceof QL)return az(e,t);if(e instanceof FL)return nz(e,t);if(e instanceof $L)return iz(e,t)}return e instanceof FL&&t instanceof FL?YR(e,t):null},oz=e=>{let t=e.flatMap(e=>e===null?[]:e instanceof QL?e.blueprints:e);return t.length===1?Oo(t,0,`mergeNonIntersecting`):new QL(t)},sz=(e,t)=>{if(e===null)return null;if(t===null)return e.clone();if(e instanceof QL)return oz(e.blueprints.map(e=>sz(e,t)));if(e instanceof $L){let n=Oo(e.blueprints,0,`cut2D`);if(t instanceof FL&&!t.intersects(n))return n.isInside(t.firstPoint)?aR([n,...tz(az(t,new QL(e.blueprints.slice(1))))]):e.clone();{let r=sz(n,t);return e.blueprints.slice(1).forEach(e=>{r=sz(r,e)}),r}}if(t instanceof QL){let n=e;for(let e of t.blueprints)n=sz(n,e);return n}if(t instanceof $L){let n=XR(e,Oo(t.blueprints,0,`cut2D`));return t.blueprints.slice(1).forEach(t=>{n=az(n,ZR(t,e))}),n}return XR(e,t)};function cz(e,t){if(e===null||t===null)return null;if(e instanceof FL&&t instanceof FL)return ZR(e,t);if(e instanceof QL)return oz(e.blueprints.map(e=>cz(e,t)));if(e instanceof $L){let n=Oo(e.blueprints,0,`intersect2D`),r=e.blueprints.slice(1);if(r.length===0)return cz(n,t);let i=cz(n,t);for(let e of r)i=sz(i,e);return i}if(t instanceof QL)return oz(t.blueprints.map(t=>cz(e,t)));if(t instanceof $L){let n=Oo(t.blueprints,0,`intersect2D`),r=t.blueprints.slice(1);if(r.length===0)return cz(n,e);let i=cz(n,e);for(let e of r)i=sz(i,e);return i}i(`intersect2D`,`Unhandled Shape2D combination`)}var lz=e(((e,t)=>{t.exports={}}));
|
|
18
|
+
</svg>`;function IL(e){let t=e.map(e=>e.wrapped);return EE(H().makeWire(t))}var LL=class e{curves;_boundingBox;_orientation;_guessedOrientation;constructor(e){e.length===0&&i(`Blueprint`,`requires at least one curve — use createBlueprint() for Result-based validation`),this.curves=e,this._boundingBox=null,this._orientation=null,this._guessedOrientation=null}delete(){this.curves.forEach(e=>{e.delete()}),this._boundingBox&&this._boundingBox.delete()}[Symbol.dispose](){this.delete()}clone(){return new e(this.curves.map(e=>e.clone()))}get repr(){return[`Blueprint`,...this.curves.map(e=>e.repr)].join(`
|
|
19
|
+
`)}get boundingBox(){return this._boundingBox||=CL(this.curves),this._boundingBox}get orientation(){if(this._orientation)return this._orientation;if(this._guessedOrientation)return this._guessedOrientation;let e=this.curves.flatMap(e=>e.geomType===`LINE`?[e.firstPoint]:[e.firstPoint,e.value(.5)]),t=e.map((t,n)=>{let r=_A(e,(n+1)%e.length);return(r[0]-t[0])*(r[1]+t[1])}).reduce((e,t)=>e+t,0);return this._guessedOrientation=t>0?`clockwise`:`counterClockwise`,this._guessedOrientation}stretch(t,n,r=[0,0]){let i=EL(this.curves,DL(t,n,r));return new e(i)}scale(t,n){let r=n||this.boundingBox.center,i=EL(this.curves,jL(t,r));return new e(i)}rotate(t,n){let r=EL(this.curves,AL(t*JE,n));return new e(r)}translate(t,n=0){let r=eL(t)?t:[t,n],i=EL(this.curves,OL(r));return new e(i)}mirror(t,n=[0,0],r=`center`){let i=EL(this.curves,kL(t,n,r));return new e(i)}sketchOnPlane(e,t){let n=e&&typeof e!=`string`?{...e}:tO(e,t),r=wL(this.curves,n),i=IL(r);for(let e of r)e[Symbol.dispose]();return{wire:i,defaultOrigin:n.origin,defaultDirection:n.zDir}}sketchOnFace(e,t){let n=H(),r=j(ML(this.curves,e,t)),i=IL(r);for(let e of r)e[Symbol.dispose]();n.buildCurves3d(i.wrapped);let a=n.fixWireOnFace(i.wrapped,e.wrapped,1e-9);return i[Symbol.dispose](),{wire:EE(a),baseFace:e}}subFace(e,t){let n=AD(t||[...TO(e)]);return j(NA(this.translate(SO(e,n)).sketchOnFace(e,`original`).wire))}punchHole(e,t,{height:n=null,origin:r=null,draftAngle:i=0}={}){let a=j($I(t,e)),o=this.subFace(a,r);return j(fO(H().draftPrism(e.wrapped,o.wrapped,a.wrapped,n,i,!1)))}toSVGPathD(){let e=this.clone().mirror([1,0],[0,0],`plane`),t=fL(e.curves).flatMap(e=>SL(e,e.lastPoint)),[n,r]=vA(e.curves).firstPoint;return`M ${rL(n)} ${rL(r)} ${t.join(` `)}${e.isClosed()?` Z`:``}`}toSVGPath(){return`<path d="${this.toSVGPathD()}" />`}toSVGViewBox(e=1){return PL(this.boundingBox,e)}toSVGPaths(){return[this.toSVGPathD()]}toSVG(e=1){return FL(this.toSVGPath(),this.boundingBox,e)}get firstPoint(){return vA(this.curves).firstPoint}get lastPoint(){return yA(this.curves).lastPoint}isInside(e){if(!this.boundingBox.containsPoint(e))return!1;let t=H(),n=pL(e,this.boundingBox.outsidePoint());try{if(this.curves.find(t=>t.isOnCurve(e)))return!1;let r=[],i=0;return this.curves.forEach(e=>{if(e.boundingBox.isOut(n.boundingBox))return;let a=t.intersectCurves2d(n.wrapped,e.wrapped,1e-9);for(let e of a.points)r.some(t=>EI(t,e,1e-9))||(r.push(e),i++);for(let e of a.segments)e.delete()}),!!(i%2)}finally{n.delete()}}isClosed(){return EI(this.firstPoint,this.lastPoint)}intersects(e){if(this.boundingBox.isOut(e.boundingBox))return!1;let t=H();for(let n of this.curves)for(let r of e.curves){if(n.boundingBox.isOut(r.boundingBox))continue;let e=t.intersectCurves2d(n.wrapped,r.wrapped,1e-9);if(e.points.length||e.segments.length)return!0}return!1}},RL=class{constructor(e=1/0,t=Float64Array,n=Uint32Array){let r=e!==1/0;this.ids=r?new n(e):[],this.values=r?new t(e):[],this.capacity=e,this.length=0}clear(){this.length=0}push(e,t){if(this.length===this.capacity)throw RangeError(`Queue is at capacity.`);let n=this.length++;for(;n>0;){let e=n-1>>1,r=this.values[e];if(t>=r)break;this.ids[n]=this.ids[e],this.values[n]=r,n=e}this.ids[n]=e,this.values[n]=t}pop(){if(this.length===0)return;let e=this.ids,t=this.values,n=e[0],r=--this.length;if(r>0){let n=e[r],i=t[r],a=0,o=r>>1;for(;a<o;){let n=(a<<1)+1,o=n+1,s=n+(o<r&+(t[o]<t[n]));if(t[s]>=i)break;e[a]=e[s],t[a]=t[s],a=s}e[a]=n,t[a]=i}return n}peek(){return this.length>0?this.ids[0]:void 0}peekValue(){return this.length>0?this.values[0]:void 0}shrink(){Array.isArray(this.ids)&&(this.ids.length=this.length),Array.isArray(this.values)&&(this.values.length=this.length)}},zL=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],BL=3,VL=class e{static from(t,n=0){if(n%8!=0)throw Error(`byteOffset must be 8-byte aligned.`);if(!t||t.byteLength===void 0||`buffer`in t)throw Error(`Data must be an instance of ArrayBuffer or SharedArrayBuffer.`);let[r,i]=new Uint8Array(t,n+0,2);if(r!==251)throw Error(`Data does not appear to be in a Flatbush format.`);let a=i>>4;if(a!==BL)throw Error(`Got v${a} data when expected v${BL}.`);let o=zL[i&15];if(!o)throw Error(`Unrecognized array type.`);let[s]=new Uint16Array(t,n+2,1),[c]=new Uint32Array(t,n+4,1);return new e(c,s,o,void 0,t,n)}constructor(e,t=16,n=Float64Array,r=ArrayBuffer,i,a=0){if(e===void 0)throw Error(`Missing required argument: numItems.`);if(isNaN(e)||e<=0)throw Error(`Unexpected numItems value: ${e}.`);this.numItems=+e,this.nodeSize=Math.min(Math.max(+t,2),65535),this.byteOffset=a;let o=e,s=o;this._levelBounds=[o*4];do o=Math.ceil(o/this.nodeSize),s+=o,this._levelBounds.push(s*4);while(o!==1);this.ArrayType=n,this.IndexArrayType=s<16384?Uint16Array:Uint32Array;let c=zL.indexOf(n),l=s*4*n.BYTES_PER_ELEMENT;if(c<0)throw Error(`Unexpected typed array class: ${n}.`);let u=n,d=this.IndexArrayType;if(i)this.data=i,this._boxes=new u(i,a+8,s*4),this._indices=new d(i,a+8+l,s),this._pos=s*4,this.minX=this._boxes[this._pos-4],this.minY=this._boxes[this._pos-3],this.maxX=this._boxes[this._pos-2],this.maxY=this._boxes[this._pos-1];else{let n=this.data=new r(8+l+s*this.IndexArrayType.BYTES_PER_ELEMENT);this._boxes=new u(n,8,s*4),this._indices=new d(n,8+l,s),this._pos=0,this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,new Uint8Array(n,0,2).set([251,(BL<<4)+c]),new Uint16Array(n,2,1)[0]=t,new Uint32Array(n,4,1)[0]=e}this._queue=new RL}add(e,t,n=e,r=t){let i=this._pos,a=i>>2,o=this._boxes;return this._indices[a]=a,o[i]=e,o[i+1]=t,o[i+2]=n,o[i+3]=r,this._pos=i+4,e<this.minX&&(this.minX=e),t<this.minY&&(this.minY=t),n>this.maxX&&(this.maxX=n),r>this.maxY&&(this.maxY=r),a}finish(){if(this._pos>>2!==this.numItems)throw Error(`Added ${this._pos>>2} items when expected ${this.numItems}.`);let e=this._boxes;if(this.numItems<=this.nodeSize){e[this._pos++]=this.minX,e[this._pos++]=this.minY,e[this._pos++]=this.maxX,e[this._pos++]=this.maxY;return}let{numItems:t,minX:n,minY:r,nodeSize:i,_indices:a,_levelBounds:o}=this,s=this.maxX-n||1,c=this.maxY-r||1,l=new Int32Array(t),u=65535,d=u/s,f=u/c;for(let i=0,a=0;i<t;i++){let t=e[a++],o=e[a++],s=e[a++],c=e[a++];l[i]=GL(d*((t+s)/2-n)|0,f*((o+c)/2-r)|0)}UL(l,e,a,0,t-1,i);let p=t*4;for(let t=0,n=0;t<o.length-1;t++){let r=o[t];for(;n<r;){let t=n,o=e[n++],s=e[n++],c=e[n++],l=e[n++];for(let t=1;t<i&&n<r;t++)o=Math.min(o,e[n++]),s=Math.min(s,e[n++]),c=Math.max(c,e[n++]),l=Math.max(l,e[n++]);a[p>>2]=t,e[p++]=o,e[p++]=s,e[p++]=c,e[p++]=l}}this._pos=p}search(e,t,n,r,i){if(this._pos!==this._boxes.length)throw Error(`Data not yet indexed - call index.finish().`);let{_boxes:a,_levelBounds:o,_indices:s,nodeSize:c}=this,l=this.numItems*4,u=a.length-4,d=o.length-1,f=[],p=[],m=!1;for(;u!==void 0;){let h=Math.min(u+c*4,o[d]),g=u>=l;if(m)this._collectContained(u,h,d,l,p,i);else for(let o=u;o<h;o+=4){let c=a[o];if(n<c)continue;let l=a[o+1];if(r<l)continue;let u=a[o+2];if(e>u)continue;let m=a[o+3];if(t>m)continue;let h=s[o>>2]|0;if(g){let i=+(e<=c&&t<=l&&n>=u&&r>=m);f.push(h|i,d-1)}else(i===void 0||i(h,c,l,u,m))&&p.push(h)}d=f.pop(),u=f.pop(),u!==void 0&&(m=(u&1)==1,u&=-2)}return p}_collectContained(e,t,n,r,i,a){let o=this._boxes,s=this._indices,c=e;for(let e=n;e>0;e--)c=s[c>>2];let l=Math.min(c+(t-e)*this.nodeSize**n,r);if(a===void 0)for(;c<l;c+=4)i.push(s[c>>2]|0);else for(;c<l;c+=4){let e=s[c>>2]|0;a(e,o[c],o[c+1],o[c+2],o[c+3])&&i.push(e)}}neighbors(e,t,n=1/0,r=1/0,i){if(this._pos!==this._boxes.length)throw Error(`Data not yet indexed - call index.finish().`);let{_boxes:a,_levelBounds:o,_indices:s,_queue:c,nodeSize:l}=this,u=this.numItems*4,d=l*4,f=[],p=r*r,m=n===1,h=p;for(c.push(a.length-4<<1,0);c.length;){let r=c.ids[0];if(r&1){if(c.pop(),f.push(r>>1),f.length===n)break;continue}c.pop();let l=r>>1,p=l<u,g=Math.min(l+d,HL(l,o));for(let n=l;n<g;n+=4){let r=a[n],o=a[n+1],l=a[n+2],u=a[n+3],d=Math.max(Math.max(r-e,e-l),0),f=Math.max(Math.max(o-t,t-u),0),g=d*d+f*f;if(g>h)continue;let _=s[n>>2]|0;p?(i===void 0||i(_))&&(c.push(_<<1|1,g),m&&g<h&&(h=g)):c.push(_<<1,g)}}return c.clear(),f}};function HL(e,t){let n=0,r=t.length-1;for(;n<r;){let i=n+r>>1;t[i]>e?r=i:n=i+1}return t[n]}function UL(e,t,n,r,i,a){let o=[r,i];for(;o.length;){let r=o.pop()||0,i=o.pop()||0;if(r-i<=a&&Math.floor(i/a)>=Math.floor(r/a))continue;let s=e[i],c=e[i+r>>1],l=e[r],u=s>c==s>l?c<s==c<l?l:c:s,d=i-1,f=r+1;for(;;){do d++;while(e[d]<u);do f--;while(e[f]>u);if(d>=f)break;WL(e,t,n,d,f)}o.push(i,f,f+1,r)}}function WL(e,t,n,r,i){let a=e[r];e[r]=e[i],e[i]=a;let o=4*r,s=4*i,c=t[o],l=t[o+1],u=t[o+2],d=t[o+3];t[o]=t[s],t[o+1]=t[s+1],t[o+2]=t[s+2],t[o+3]=t[s+3],t[s]=c,t[s+1]=l,t[s+2]=u,t[s+3]=d;let f=n[r];n[r]=n[i],n[i]=f}function GL(e,t){let n=e^t,r=65535^n,i=65535^(e|t),a=e&(t^65535),o=n|r>>1,s=n>>1^n,c=i^(i>>1^r&a>>1),l=a^(n&i>>1^a>>1);return n=o&o>>2^s&s>>2,r=o&s>>2^s&(o^s)>>2,i=c^(o&c>>2^s&l>>2),a=l^(s&c>>2^(o^s)&l>>2),o=n&n>>4^r&r>>4,s=n&r>>4^r&(n^r)>>4,c=i^(n&i>>4^r&a>>4),l=a^(r&i>>4^(n^r)&a>>4),i=c^(o&c>>8^s&l>>8),a=l^(s&c>>8^(o^s)&l>>8),i^=i>>1,a^=a>>1,n=e^t,r=a|65535^(n|i),n=(n|n<<8)&16711935,n=(n|n<<4)&252645135,n=(n|n<<2)&858993459,n=(n|n<<1)&1431655765,r=(r|r<<8)&16711935,r=(r|r<<4)&252645135,r=(r|r<<2)&858993459,r=(r|r<<1)&1431655765,((r<<1|n)>>>0)-2147483648}var KL=(e,t,n=1e-9)=>{if(e.boundingBox.isOut(t.boundingBox))return O({intersections:[],commonSegments:[],commonSegmentsPoints:[]});let r=wT(),i,a;try{let o=r.intersectCurves2d(e.wrapped,t.wrapped,n);i=o.points,a=o.segments.map(e=>new lL(e))}catch(e){return k(Eo(`INTERSECTION_FAILED`,`Intersections failed between curves`,e))}let o=a.filter(e=>EI(e.firstPoint,e.lastPoint,n)).map(e=>e.firstPoint);o.length&&(i.push(...o),a=a.filter(e=>!EI(e.firstPoint,e.lastPoint,n)));let s=a.flatMap(e=>[e.firstPoint,e.lastPoint]);return O({intersections:i,commonSegments:a,commonSegmentsPoints:s})},qL=(e,t=1e-9)=>{let n=wT(),r;try{let i=n.intersectCurves2d(e.wrapped,e.wrapped,t);r=i.points;for(let e of i.segments)e.delete()}catch(e){return k(Eo(`SELF_INTERSECTION_FAILED`,`Self intersection failed`,e))}return O(r)},JL=(e,n,r)=>{let i=zI(OI(n,e)),a=[i[1],-i[0]],o=[t(a,0)*r,t(a,1)*r];return{firstPoint:DI(e,o),lastPoint:DI(n,o)}},YL=(e,t)=>{let n=e.geomType,r=wT();if(n===`CIRCLE`){let n=r.getCurve2dCircleData(e.wrapped);if(!n)return pL(e.firstPoint,e.lastPoint);let{cx:i,cy:a,radius:o,isDirect:s}=n,c=t*(s?1:-1),l=o+c;if(l<1e-10){let t=[i,a],n=e=>{let[n,r]=zI(OI(e,t));return DI(e,[c*n,c*r])};return{collapsed:!0,firstPoint:n(e.firstPoint),lastPoint:n(e.lastPoint)}}let u=new lL(r.makeCircle2d(i,a,l,s)),d;try{d=r.trimCurve2d(u.wrapped,e.firstParameter,e.lastParameter)}finally{u.delete()}return new lL(d)}if(n===`LINE`){let{firstPoint:n,lastPoint:r}=JL(e.firstPoint,e.lastPoint,t);return pL(n,r)}let i=new lL(r.offsetCurve2d(e.wrapped,t)),a=uL(i);if(i.delete(),j(qL(a)).length){let e=a.firstPoint,t=a.lastPoint;return a.delete(),{collapsed:!0,firstPoint:e,lastPoint:t}}return a};function XL(e,n,r){let i=MI(e.tangentAt(1),n.tangentAt(0));if(Math.abs(i)<1e-10)return null;let a=Math.abs(r)*(i>0?-1:1),o=YL(e,a),s=YL(n,a);if(!(o instanceof lL)||!(s instanceof lL))return null;let c=KL(o,s,1e-9);if(!Ja(c))return null;let l=c.value.intersections.at(-1);if(!eL(l))return null;let u=l,d=(e,t)=>{let[n,r]=t.tangentAt(u),i=zI([-r,n]),o=DI(u,kI(i,a)),s=j(e.parameter(o,1e-6));return e.splitAt([s])},f=d(e,o),p=d(n,s);return{first:t(f,0),second:t(p,1),center:u}}function ZL(e,t,n){let r=XL(e,t,n);if(!r)return[e,t];let{first:i,second:a,center:o}=r;return[i,xL(i.lastPoint,a.firstPoint,o),a]}function QL(e,t,n){let r=XL(e,t,n);if(!r)return[e,t];let{first:i,second:a}=r;return[i,pL(i.lastPoint,a.firstPoint),a]}function $L(e,n,r){let i=MI(zI(e.tangentAt(1)),zI(n.tangentAt(0))),a=Math.asin(i);if(Math.abs(i)<1e-10)return[e,n];let o=i>0?-1:1,s=Math.abs(r)*Math.sin(a/2)*o,c=YL(e,s),l=YL(n,s);if(!(c instanceof lL)||!(l instanceof lL))return[e,n];let u=KL(c,l,1e-9);if(!Ja(u))return[e,n];let d=u.value.intersections.at(-1);if(!eL(d))return[e,n];let f=gL(r,d),p=j(KL(e,f)).intersections[0],m=j(KL(n,f)).intersections.at(-1);if(!p||!m)return[e,n];let h=e.splitAt([p]),g=n.splitAt([m]),_=t(h,0),v=t(g,g.length-1);try{return[_,mL(_.lastPoint,e.lastPoint,v.firstPoint),v]}catch{return[e,n]}}var eR=class e{blueprints;_boundingBox;constructor(e){this.blueprints=e,this._boundingBox=null}get repr(){return[`Blueprints`,...this.blueprints.map(e=>e.repr)].join(`
|
|
20
|
+
`)}clone(){return new e(this.blueprints.map(e=>e.clone()))}get boundingBox(){if(!this._boundingBox){let e=new sL;this.blueprints.forEach(t=>{e.add(t.boundingBox)}),this._boundingBox=e}return this._boundingBox}stretch(t,n,r){return new e(this.blueprints.map(e=>e.stretch(t,n,r)))}rotate(t,n){return new e(this.blueprints.map(e=>e.rotate(t,n)))}scale(t,n){let r=n||this.boundingBox.center;return new e(this.blueprints.map(e=>e.scale(t,r)))}translate(t,n=0){return new e(this.blueprints.map(e=>typeof t==`number`?e.translate(t,n):e.translate(t)))}mirror(t,n,r){return new e(this.blueprints.map(e=>e.mirror(t,n,r)))}sketchOnPlane(e,t){return this.blueprints.map(n=>n.sketchOnPlane(e,t))}sketchOnFace(e,t){return this.blueprints.map(n=>n.sketchOnFace(e,t))}punchHole(e,t,n={}){let r=e;return this.blueprints.forEach(e=>{r=e.punchHole(r,t,n)}),r}toSVGViewBox(e=1){return PL(this.boundingBox,e)}toSVGPaths(){return this.blueprints.map(e=>e.toSVGPaths())}toSVG(e=1){return FL(this.blueprints.map(e=>e instanceof LL?e.toSVGPath():e.toSVGGroup()).join(`
|
|
21
|
+
`),this.boundingBox,e)}},tR=class e{blueprints;_boundingBox;constructor(e){e.length===0&&i(`CompoundBlueprint`,`requires at least one blueprint (the outer boundary) — use createCompoundBlueprint() for Result-based validation`),this.blueprints=e,this._boundingBox=null}clone(){return new e(this.blueprints.map(e=>e.clone()))}get boundingBox(){if(!this._boundingBox){let e=new sL;this.blueprints.forEach(t=>{e.add(t.boundingBox)}),this._boundingBox=e}return this._boundingBox}get repr(){return[`Compound Blueprints`,`-- Outline`,vA(this.blueprints).repr,`-- Holes`,...this.blueprints.slice(1).map(e=>e.repr)].join(`
|
|
22
|
+
`)}stretch(t,n,r){return new e(this.blueprints.map(e=>e.stretch(t,n,r)))}rotate(t,n){return new e(this.blueprints.map(e=>e.rotate(t,n)))}scale(t,n){let r=n||this.boundingBox.center;return new e(this.blueprints.map(e=>e.scale(t,r)))}translate(t,n=0){return new e(this.blueprints.map(e=>typeof t==`number`?e.translate(t,n):e.translate(t)))}mirror(t,n,r){return new e(this.blueprints.map(e=>e.mirror(t,n,r)))}sketchOnPlane(e,t){return this.blueprints.map(n=>n.sketchOnPlane(e,t))}sketchOnFace(e,t){return this.blueprints.map(n=>n.sketchOnFace(e,t))}punchHole(e,t,n={}){return vA(this.blueprints).punchHole(e,t,n)}toSVGViewBox(e=1){return PL(this.boundingBox,e)}toSVGPaths(){return this.blueprints.flatMap(e=>e.toSVGPaths())}toSVGGroup(){return`<g>${this.blueprints.map(e=>e.toSVGPath()).join(``)}</g>`}toSVG(e=1){return FL(this.toSVGGroup(),this.boundingBox,e)}},nR=e=>{if(e.length===0)return[];if(e.length===1)return[[Ao(e,0,`groupByBoundingBoxOverlap`)]];let t=new VL(e.length);for(let n of e){let[[e,r],[i,a]]=n.boundingBox.bounds;t.add(e,r,i,a)}t.finish();let n=e.map((n,r)=>{let[[i,a],[o,s]]=n.boundingBox.bounds;return t.search(i,a,o,s).filter(t=>t>r&&!n.boundingBox.isOut(Ao(e,t,`groupByBoundingBoxOverlap`).boundingBox))}),r=[],i=Array(n.length);return n.forEach((t,n)=>{let a=i[n];a||(a=[],r.push(a)),a.push(Ao(e,n,`groupByBoundingBoxOverlap`)),t.length&&t.forEach(e=>{i[e]=a})}),r},rR=e=>e.map((t,n)=>{let r=Ao(t.curves,0,`addContainmentInfo`),i=r.value((r.lastParameter+r.firstParameter)/2);return{blueprint:t,isIn:e.filter((e,t)=>n===t?!1:e.isInside(i))}}),iR=(e,t)=>e.flatMap(({blueprint:e})=>oR(t.filter(({blueprint:t,isIn:n})=>t===e||n.indexOf(e)!==-1))),aR=(e,t)=>[t.filter(({isIn:e})=>e.length<=1),...oR(rR(e.map(({blueprint:e})=>e)))],oR=e=>{if(!e.length)return[];let t=e.filter(({isIn:e})=>!e.length),n=e.filter(({isIn:e})=>e.length>1);return t.length===1&&n.length===0?[e]:t.length>1?iR(t,e):aR(n,e)},sR=e=>new eR(nR(e).map(rR).flatMap(oR).map(e=>e.length===1?Ao(e,0,`organiseBlueprints`).blueprint:(e.sort((e,t)=>e.isIn.length-t.isIn.length),new tR(e.map(({blueprint:e})=>e))))),cR=e=>e===`symmetric`||typeof e==`number`||Array.isArray(e)&&e.length===2,lR=e=>{let t;t=e?cR(e)?{endTangent:e}:{endTangent:0,...e}:{endTangent:[1,0]};let{endTangent:n,startFactor:r=1,endFactor:i=1,startTangent:a}=t,o;o=typeof n==`number`?LI(1,n*JE):n;let s;return s=typeof a==`number`?LI(1,a*JE):a,{endTangent:o,startFactor:r,endFactor:i,startTangent:s}};function uR(e,t,n){return e<t?{majorRadius:t,minorRadius:e,rotationAngle:n+90}:{majorRadius:e,minorRadius:t,rotationAngle:n}}function dR(e,t,n,r,i,a,o,s){let c=i*JE,l=e=>AI(s(e)),u=l(LI(n,c)),d=l(LI(r,c+Math.PI/2)),f=zI(s(FI([1,0],c))),[,p]=RI(f),{cx:m,cy:h,startAngle:g,endAngle:_,clockwise:v,rx:y,ry:b}=mR(e,t,u,d,p,a,o),x=vL(y,b,v?g:_,v?_:g,[m,h],f);return v||x.reverse(),x}function fR(e,t,n,r,i){let a=Math.PI*2,o=pR(1,0,e,t),s=pR(e,t,-n,-r);for(;s>a;)s-=a;for(;s<0;)s+=a;i||(s-=a);let c=o+s;for(;c>a;)c-=a;for(;c<0;)c+=a;return{startAngle:o,deltaAngle:s,endAngle:c}}function pR(e,t,n,r){let a=e*n+t*r,o=Math.sqrt((e*e+t*t)*(n*n+r*r));o<1e-12&&i(`radianAngle`,`Cannot compute angle between zero-length vectors`);let s=Math.acos(Math.max(-1,Math.min(1,a/o)));return e*r-t*n<0&&(s=-s),s}function mR([e,t],[n,r],a,o,s,c,l){a<0&&(a=-a),o<0&&(o=-o),(a<1e-10||o<1e-10)&&i(`convertSvgEllipseParams`,`rx and ry cannot be 0`);let u=Math.sin(s),d=Math.cos(s),f=(e-n)/2,p=(t-r)/2,m=(e+n)/2,h=(t+r)/2,g=d*f+u*p,_=d*p-u*f,v=g*g/(a*a)+_*_/(o*o);v>1&&(a*=Math.sqrt(v),o*=Math.sqrt(v));let y=a*o,b=a*_,x=o*g,S=b*b+x*x;S||i(`convertSvgEllipseParams`,`Start point cannot be same as end point`);let C=Math.sqrt(Math.abs((y*y-S)/S));c===l&&(C=-C);let w=C*b/o,ee=-C*x/a,te=d*w-u*ee+m,ne=u*w+d*ee+h,re=(g-w)/a,ie=(g+w)/a,{startAngle:ae,deltaAngle:oe,endAngle:se}=fR(re,(_-ee)/o,ie,(_+ee)/o,l);return{cx:te,cy:ne,startAngle:ae,deltaAngle:oe,endAngle:se,clockwise:l,rx:a,ry:o}}var hR={chamfer:QL,dogbone:$L,fillet:ZL};function gR(e,t){if(typeof e==`function`)return e;let n=hR[t];return(t,r)=>n(t,r,e)}var _R=class{pointer;firstPoint;pendingCurves;_nextCorner;constructor(e=[0,0]){this.pointer=e,this.firstPoint=e,this._nextCorner=null,this.pendingCurves=[]}_convertToUV([e,t]){return[e,t]}_convertFromUV([e,t]){return[e,t]}_lastCurve(){let e=this.pendingCurves.length;return e===0?null:this.pendingCurves[e-1]}_requireLastCurve(e,t){let n=this._lastCurve();return n||i(e,`You need a previous curve to ${t}`),n}_resolveRelative(e,t){return[this.pointer[0]+e,this.pointer[1]+t]}_saveCurveAndAdvance(e,t){return this.saveCurve(e),this.pointer=t,this}get penPosition(){return this.pointer}get penAngle(){let e=this._lastCurve();if(!e)return 0;let[t,n]=e.tangentAt(1);return Math.atan2(n,t)*YE}movePointerTo(e){return this.pendingCurves.length&&i(`Sketcher2d.movePointerTo`,`You can only move the pointer if there is no curve defined`),this.pointer=e,this.firstPoint=e,this}saveCurve(e){if(!this._nextCorner){this.pendingCurves.push(e);return}let t=this.pendingCurves.pop();t||i(`Sketcher2d.saveCurve`,`No previous curve available for custom corner`),this.pendingCurves.push(...this._nextCorner(t,e)),this._nextCorner=null}lineTo(e){let t=pL(this._convertToUV(this.pointer),this._convertToUV(e));return this._saveCurveAndAdvance(t,e)}line(e,t){return this.lineTo(this._resolveRelative(e,t))}vLine(e){return this.line(0,e)}hLine(e){return this.line(e,0)}vLineTo(e){return this.lineTo([this.pointer[0],e])}hLineTo(e){return this.lineTo([e,this.pointer[1]])}polarLineTo([e,t]){return this.lineTo(LI(e,t*JE))}polarLine(e,t){let[n,r]=LI(e,t*JE);return this.line(n,r)}tangentLine(e){let t=this._requireLastCurve(`Sketcher2d.tangentLine`,`sketch a tangent line`),n=zI(this._convertFromUV(t.tangentAt(1)));return this.line(n[0]*e,n[1]*e)}threePointsArcTo(e,t){let n=mL(this._convertToUV(this.pointer),this._convertToUV(t),this._convertToUV(e));return this._saveCurveAndAdvance(n,e)}threePointsArc(e,t,n,r){let[i,a]=this.pointer;return this.threePointsArcTo([i+e,a+t],[i+n,a+r])}sagittaArcTo(e,t){let[n,r]=this.pointer,[a,o]=e,s=(n+a)/2,c=(r+o)/2,l=-(o-r),u=a-n,d=Math.sqrt(l**2+u**2);d<1e-12&&i(`sagittaArcTo`,`Start and end points cannot be identical`);let f=[s+l/d*t,c+u/d*t],p=mL(this._convertToUV(this.pointer),this._convertToUV(f),this._convertToUV(e));return this._saveCurveAndAdvance(p,e)}sagittaArc(e,t,n){return this.sagittaArcTo(this._resolveRelative(e,t),n)}vSagittaArc(e,t){return this.sagittaArc(0,e,t)}hSagittaArc(e,t){return this.sagittaArc(e,0,t)}bulgeArcTo(e,t){if(!t)return this.lineTo(e);let n=AI(this.pointer,e)/2;return this.sagittaArcTo(e,-t*n)}bulgeArc(e,t,n){return this.bulgeArcTo(this._resolveRelative(e,t),n)}vBulgeArc(e,t){return this.bulgeArc(0,e,t)}hBulgeArc(e,t){return this.bulgeArc(e,0,t)}tangentArcTo(e){let t=this._requireLastCurve(`Sketcher2d.tangentArc`,`sketch a tangent arc`),n=hL(this._convertToUV(this.pointer),t.tangentAt(1),this._convertToUV(e));return this._saveCurveAndAdvance(n,e)}tangentArc(e,t){return this.tangentArcTo(this._resolveRelative(e,t))}ellipseTo(e,t,n,r=0,i=!1,a=!1){let{majorRadius:o,minorRadius:s,rotationAngle:c}=uR(t,n,r),l=dR(this._convertToUV(this.pointer),this._convertToUV(e),o,s,c,i,a,e=>this._convertToUV(e));return this._saveCurveAndAdvance(l,e)}ellipse(e,t,n,r,i=0,a=!1,o=!1){return this.ellipseTo(this._resolveRelative(e,t),n,r,i,a,o)}halfEllipseTo(e,t,n=!1){let r=PI(e,this.pointer),i=AI(e,this.pointer);return this.ellipseTo(e,i/2,t,r*YE,!0,n)}halfEllipse(e,t,n,r=!1){return this.halfEllipseTo(this._resolveRelative(e,t),n,r)}bezierCurveTo(e,t){let n=t.length===2&&!Array.isArray(t[0])?[t]:t,r=yL(this._convertToUV(this.pointer),n.map(e=>this._convertToUV(e)),this._convertToUV(e));return this._saveCurveAndAdvance(r,e)}quadraticBezierCurveTo(e,t){return this.bezierCurveTo(e,[t])}cubicBezierCurveTo(e,t,n){return this.bezierCurveTo(e,[t,n])}smoothSplineTo(e,t){let{endTangent:n,startTangent:r,startFactor:i,endFactor:a}=lR(t),o=this._lastCurve(),s=AI(this.pointer,e)*.25,c;c=r||(o?this._convertFromUV(o.tangentAt(1)):[1,0]),c=zI(c);let l=[this.pointer[0]+c[0]*i*s,this.pointer[1]+c[1]*i*s],u;u=n===`symmetric`?[-c[0],-c[1]]:n,u=zI(u);let d=[e[0]-u[0]*a*s,e[1]-u[1]*a*s];return this.cubicBezierCurveTo(e,l,d)}smoothSpline(e,t,n){return this.smoothSplineTo(this._resolveRelative(e,t),n)}customCorner(e,t=`fillet`){return this.pendingCurves.length||i(`Sketcher2d.customCorner`,`You need a curve defined to fillet the angle`),this._nextCorner=gR(e,t),this}_customCornerLastWithFirst(e,t=`fillet`){if(!e)return;let n=this.pendingCurves.pop(),r=this.pendingCurves.shift();(!n||!r)&&i(`Sketcher2d._customCornerLastWithFirst`,`Not enough curves to close and fillet`),this.pendingCurves.push(...gR(e,t)(n,r))}_closeSketch(){EI(this.pointer,this.firstPoint)||this.lineTo(this.firstPoint)}_closeWithMirror(){EI(this.pointer,this.firstPoint)&&i(`Sketcher2d._closeWithMirror`,`Cannot close with a mirror when the sketch is already closed`);let e=[this.pointer[0]-this.firstPoint[0],this.pointer[1]-this.firstPoint[1]],t=this._convertToUV(this.pointer),n=this._convertToUV(e),r=this.pendingCurves.map(e=>new lL(H().mirrorCurve2dAcrossAxis(e.wrapped,t[0],t[1],n[0],n[1])));r.reverse();for(let e of r)e.reverse();this.pendingCurves.push(...r),this.pointer=this.firstPoint}},vR=class extends _R{constructor(e=[0,0]){super(),this.pointer=e,this.firstPoint=e,this.pendingCurves=[]}done(){return new LL(this.pendingCurves)}close(){return this._closeSketch(),this.done()}closeWithMirror(){return this._closeWithMirror(),this.close()}closeWithCustomCorner(e,t=`fillet`){return this._closeSketch(),this._customCornerLastWithFirst(e,t),this.done()}},yR=2*Math.PI;function bR(e){let t=e%yR,n=t<0?t+yR:t;return n<Math.PI?n:n===Math.PI?0:Math.abs(n-yR)}function xR(e){return e.curves.map((t,n)=>({firstCurve:t,secondCurve:_A(e.curves,(n+1)%e.curves.length),point:t.lastPoint}))}function SR(e){let t=t=>SR([...e,t]),n=t=>e.every(e=>e(t));return{shouldKeep:n,when:e=>t(e),inList:e=>t(t=>e.some(e=>EI(e,t.point))),atDistance:(e,n=[0,0])=>t(t=>Math.abs(AI(n,t.point)-e)<1e-9),atPoint:e=>t(t=>EI(e,t.point)),inBox:(e,n)=>{let r=Math.min(e[0],n[0]),i=Math.max(e[0],n[0]),a=Math.min(e[1],n[1]),o=Math.max(e[1],n[1]);return t(e=>{let[t,n]=e.point;return t>=r&&t<=i&&n>=a&&n<=o})},ofAngle:e=>t(t=>{let n=t.firstCurve.tangentAt(1),r=t.secondCurve.tangentAt(0);return Math.abs(bR(NI(n,r))-bR(JE*e))<1e-9}),not:e=>{let n=e(SR([]));return t(e=>!n.shouldKeep(e))},either:e=>{let n=e.map(e=>e(SR([])));return t(e=>n.some(t=>t.shouldKeep(e)))},find:e=>xR(e).filter(n)}}function CR(){return SR([])}var wR=(e,t,n=0)=>{let r=[...Array(t).keys()].map(n=>{let r=-(Math.PI*2/t)*n;return[e*Math.sin(r),e*Math.cos(r)]}),i=yA(r),a=new vR().movePointerTo([i[0],i[1]]);return n?r.forEach(([e,t])=>a.sagittaArcTo([e,t],n)):r.forEach(([e,t])=>a.lineTo([e,t])),a.done()},TR=(e,t,n=0)=>{let{rx:r=0,ry:i=0}=typeof n==`number`?{ry:n,rx:n}:n,a=Math.min(r,e/2),o=Math.min(i,t/2),s=a&&o;s||(a=0,o=0);let c=a===o,l=new vR([Math.min(0,-(e/2-a)),-t/2]),u=(e,t)=>{s&&(c?l.tangentArc(e,t):l.ellipse(e,t,a,o,0,!1,!0))};return a<e/2&&l.hLine(e-2*a),u(a,o),o<t/2&&l.vLine(t-2*o),u(-a,o),a<e/2&&l.hLine(-(e-2*a)),u(-a,-o),o<t/2&&l.vLine(-(t-2*o)),u(a,-o),l.close()},ER=(e,t)=>EI(e,t,CI);function DR(e){return`${e[0].toFixed(9)},${e[1].toFixed(9)}`}function OR(e,t){let n=DR(e),r=DR(t);return n<r?`${n}|${r}`:`${r}|${n}`}function kR(e){let t=e[0];return t===void 0&&i(`startOfSegment`,`empty segment`),t.firstPoint}function AR(e){let t=e[e.length-1];return t===void 0&&i(`endOfSegment`,`empty segment`),t.lastPoint}function jR(e){return[...e].reverse().map(e=>{let t=e.clone();return t.reverse(),t})}function MR(e){return[...e].reverse().map(jR)}function NR(e){let t=(e.lastParameter+e.firstParameter)/2;return e.value(t)}function PR(e,t){let n=DR(t);for(let r=0;r<e.length;r++){let i=e[r];if(i!==void 0&&DR(i.firstPoint)===n&&ER(t,i.firstPoint))return r}for(let n=0;n<e.length;n++){let r=e[n];if(r!==void 0&&ER(t,r.firstPoint))return n}return-1}function FR(e,t,n,r){for(let i=0;i<e.length;i++){let a=e[i];if(a!==void 0&&DR(a.firstPoint)===t&&DR(a.lastPoint)===n&&r(a))return i}for(let t=0;t<e.length;t++){let n=e[t];if(n!==void 0&&r(n))return t}return-1}function IR(e,t){return t<=0?e:e.slice(t).concat(e.slice(0,t))}function LR(e,t){return IR(e,PR(e,t))}function RR(e,t){let n=DR(t.firstPoint),r=DR(t.lastPoint),a=e=>ER(t.firstPoint,e.firstPoint)&&ER(t.lastPoint,e.lastPoint),o=e=>ER(t.lastPoint,e.firstPoint)&&ER(t.firstPoint,e.lastPoint);function s(e,t,n,r){let i=FR(e,t,n,r);return i===-1?null:IR(e,i)}let c=s(e,n,r,a);if(c!==null)return c;let l=s(e,r,n,o);if(l!==null)return l;let u=jR(e),d=s(u,n,r,a);if(d!==null)return d;let f=s(u,r,n,o);if(f!==null)return f;i(`rotateToStartAtSegment`,`failed to rotate to segment start`)}function*zR(e,t,n){let r=new Set(t.map(DR)),i=new Set(n.map(e=>OR(e.firstPoint,e.lastPoint))),a=e=>r.has(DR(e))?!0:t.some(t=>ER(t,e)),o=(e,t)=>i.has(OR(e,t))?!0:n.some(n=>ER(n.firstPoint,e)&&ER(n.lastPoint,t)||ER(n.firstPoint,t)&&ER(n.lastPoint,e)),s=[];for(let t of e){if(ER(t.firstPoint,t.lastPoint)){s.push(t);continue}let e=a(t.lastPoint),n=o(t.firstPoint,t.lastPoint);e?(s.push(t),yield s,s=[]):n?(s.length&&(yield s,s=[]),yield[t]):s.push(t)}s.length&&(yield s)}function BR(e,t,n){return e.filter(e=>{let r=t.filter(t=>ER(t.firstPoint,e)||ER(t.lastPoint,e)),i=r.length%2?r.filter(t=>!(ER(t.firstPoint,e)&&ER(t.lastPoint,e))):r;if(i.length===0||i.length%2)return!1;let a=i.map(e=>n.isInside(NR(e)));return!(a.every(Boolean)||a.every(e=>!e))})}function VR(e,n){let r=[],i=[],a=e.curves.map(()=>[]),o=n.curves.map(()=>[]),s=new VL(n.curves.length);for(let e of n.curves){let[[t,n],[r,i]]=e.boundingBox.bounds;s.add(t,n,r,i)}return s.finish(),e.curves.forEach((e,c)=>{let[[l,u],[d,f]]=e.boundingBox.bounds,p=s.search(l,u,d,f);for(let s of p){let{intersections:l,commonSegments:u,commonSegmentsPoints:d}=j(KL(e,t(n.curves,s),CI/100));r.push(...l),a[c]?.push(...l),o[s]?.push(...l),i.push(...u),r.push(...d),a[c]?.push(...d),o[s]?.push(...d)}}),{allIntersections:oL(r,CI),allCommonSegments:i,firstCurvePoints:a,secondCurvePoints:o}}function HR(e,t){return xA([e,t]).flatMap(([e,t])=>t.length===0?[e]:e.splitAt(t,CI/100))}function UR(e,t,n){return e.some(([e,r])=>e===void 0||r===void 0?!1:ER(e,t)&&ER(r,n)||ER(e,n)&&ER(r,t))}function WR(e,t){let{allIntersections:n,allCommonSegments:r,firstCurvePoints:i,secondCurvePoints:a}=VR(e,t);if(n.length<=1)return null;let o=HR(e.curves,i),s=HR(t.curves,a),c=r.map(e=>[e.firstPoint,e.lastPoint]),l=BR(BR(n,o,t),s,e);if(l.length===0&&r.length===0)return null;if(r.length===0){let e=l[0];if(e===void 0)return null;o=LR(o,e),s=LR(s,e)}else{let e=r[0];if(e===void 0)return null;o=RR(o,e),s=RR(s,e)}let u=Array.from(zR(o,l,r)),d=Array.from(zR(s,l,r)),f=u[0],p=d[0];if(f!==void 0&&p!==void 0){let e=!ER(AR(p),AR(f)),t=r.length>0&&p.length!==1;(e||t)&&(d=MR(d))}let m=Math.max(u.length,d.length),h=[];for(let e=0;e<m;e++){let t=u[e],n=d[e];if(t===void 0||n===void 0){let e=t??n;if(e===void 0)continue;h.push([e,e]);continue}UR(c,kR(t),AR(t))?h.push([t,`same`]):h.push([t,n])}return h}function GR(e){if(e.length<2)return e;let n=[],r=0;for(;r<e.length;){let i=t(e,r);if(i.geomType!==`LINE`){n.push(i),r++;continue}let a=i.lastPoint,o=r+1;for(;o<e.length;){let n=t(e,o);if(n.geomType!==`LINE`||!ER(a,n.firstPoint))break;let r=OI(a,i.firstPoint),s=OI(n.lastPoint,n.firstPoint);if(Math.abs(MI(r,s))>1e-9)break;a=n.lastPoint,o++}o>r+1?n.push(pL(i.firstPoint,a)):n.push(i),r=o}return n}function KR(e){let t=e.map(e=>e.firstPoint),n=e.map(e=>e.lastPoint),r=xA([t,n.slice(-1).concat(n.slice(0,-1))]).map(([e,t],n)=>e===void 0||t===void 0||ER(e,t)?null:n).filter(e=>e!==null);if(r.length===0)return[e];let i=xA([r.slice(0,-1),r.slice(1)]).map(([t,n])=>e.slice(t,n)),a=e.slice(r[r.length-1]),o=r[0];return o!==void 0&&o!==0&&(a=a.concat(e.slice(0,o))),i.push(a),i}function qR(e,t,n){return t===1?{curves:[...e],segmentsIn:1,lastWasSame:null}:t===2||t===0?{curves:[],segmentsIn:null,lastWasSame:null}:t===null?{curves:[],segmentsIn:null,lastWasSame:n?[...n,...e]:e}:{curves:[],segmentsIn:t,lastWasSame:n}}function JR(e,t,n,r,i,a,o){let s=[],c=0,l=e[0];if(l!==void 0){let t=NR(l),n=r.isInside(t);(i.firstInside===`keep`&&n||i.firstInside===`remove`&&!n)&&(c+=1,s.push(...e))}let u=t[0];if(u!==void 0){let e=NR(u),r=n.isInside(e);if(i.secondInside===`keep`&&r||i.secondInside===`remove`&&!r){let e=t;c===1&&(e=jR(t)),c+=1,s.push(...e)}}return a===null&&c===1&&o!==null&&(s=[...o,...s]),{curves:s,segmentsIn:c===1?c:a,lastWasSame:c===1?null:o}}function YR(e,t,n){let r=WR(e,t);if(r===null)return XR(e,t);if(r.every(([,e])=>e===`same`))return{identical:!0};let i=null,a=null,o=r.flatMap(([r,o])=>{if(o===`same`){let e=qR(r,i,a);return i=e.segmentsIn,a=e.lastWasSame,e.curves}let s=JR(r,o,e,t,n,i,a);return i=s.segmentsIn,a=s.lastWasSame,s.curves}),s=a;s!==null&&i===1&&(o=[...s,...o]);let c=KR(GR(o)).filter(e=>e.length>0).map(e=>new LL(e));if(c.length===0)return null;if(c.length===1){let e=c[0];return e===void 0?null:e}return sR(c)}function XR(e,t){let n=e.curves[0],r=t.curves[0];return{identical:!1,firstCurveInSecond:n!==void 0&&t.isInside(NR(n)),secondCurveInFirst:r!==void 0&&e.isInside(NR(r))}}function ZR(e,t){let n=YR(e,t,{firstInside:`remove`,secondInside:`remove`});return n===null||n instanceof LL||n instanceof eR?n:n.identical?e.clone():n.firstCurveInSecond?t.clone():n.secondCurveInFirst?e.clone():new eR([e,t])}function QR(e,t){let n=YR(e,t,{firstInside:`remove`,secondInside:`keep`});return n===null||n instanceof LL||n instanceof eR?n:n.identical||n.firstCurveInSecond?null:n.secondCurveInFirst?new eR([new tR([e,t])]):e.clone()}function $R(e,t){let n=YR(e,t,{firstInside:`keep`,secondInside:`keep`});return n===null||n instanceof LL||n instanceof eR?n:n.identical||n.firstCurveInSecond?e.clone():n.secondCurveInFirst?t.clone():null}var ez=(e,t)=>{if(e instanceof LL&&t instanceof LL){let n=[];return e.curves.forEach(e=>{t.curves.forEach(t=>{let{intersections:r,commonSegmentsPoints:i}=j(KL(e,t));n.push(...r),n.push(...i)})}),n=oL(n),n.length>1}if(e instanceof tR||e instanceof eR)return e.blueprints.some(e=>ez(e,t));if(t instanceof tR||t instanceof eR)return t.blueprints.some(t=>ez(e,t));i(`genericIntersects`,`Unhandled shape combination in genericIntersects`)},tz=(e,t)=>{if(e instanceof tR){if(t instanceof LL)return iz(t,e);if(t instanceof tR)return oz(e,t)}if(t instanceof tR){if(e instanceof LL)return iz(e,t);if(e instanceof tR)return oz(e,t)}if(e instanceof LL&&t instanceof LL)return ZR(e,t);i(`genericFuse`,`Unhandled shape combination in genericFuse`)},nz=e=>{let t=new Map,n=[];return e.forEach((r,a)=>{let o;t.has(a)?o=t.get(a):(o={current:r,fusedWith:new Set([a])},n.push(o)),e.slice(a+1).forEach((e,n)=>{let r=o.current,s=a+n+1;if(o.fusedWith.has(s))return;let c=e,l=!1;if(t.has(s)&&(c=t.get(s).current,l=!0),r.boundingBox.isOut(c.boundingBox)||!ez(r,c))return;let u;if(r instanceof eR||c instanceof eR){let e=sz(r,c);e===null&&i(`fuseIntersectingBlueprints`,`fuse2D returned null for non-null inputs`),u=e}else u=tz(r,c);if(!(u instanceof LL||u instanceof tR)){if(u instanceof eR&&u.blueprints.length===2)return;u instanceof eR&&u.blueprints.length===1?u=Ao(u.blueprints,0,`fuseIntersectingBlueprints`):u instanceof eR||i(`fuseIntersectingBlueprints`,`Fuse produced unexpected non-blueprint result`)}o.fusedWith.add(s),o.current=u,l||t.set(s,o)})}),sR(n.map(({current:e})=>e).flatMap(e=>rz(e)))},rz=e=>e instanceof LL?[e]:e instanceof tR?e.blueprints:e instanceof eR?e.blueprints.flatMap(e=>rz(e)):[],iz=(e,t)=>{let n=ZR(e,Ao(t.blueprints,0,`fuseBlueprintWithCompound`)),r=t.blueprints.slice(1).map(t=>QR(t,e));return sR([...rz(n),...r.flatMap(e=>rz(e))])};function az(e,t){let n=[];for(let r of e)for(let e of t)n.push([r,e]);return n}var oz=(e,t)=>{let n=Ao(e.blueprints,0,`fuseCompoundWithCompound`),r=Ao(t.blueprints,0,`fuseCompoundWithCompound`),i=ZR(n,r),a=t.blueprints.slice(1).map(e=>QR(e,n)),o=e.blueprints.slice(1).map(e=>QR(e,r)),s=az(e.blueprints.slice(1),t.blueprints.slice(1)).flatMap(([e,t])=>rz($R(e,t)));return sR([...rz(i),...a.flatMap(e=>rz(e)),...o.flatMap(e=>rz(e)),...s])},sz=(e,t)=>{if(e===null)return t?.clone()??null;if(t===null)return e.clone();if(!(e instanceof eR)&&t instanceof eR)return nz([e,...t.blueprints]);if(!(t instanceof eR)&&e instanceof eR)return nz([t,...e.blueprints]);if(e instanceof eR&&t instanceof eR){let n=sz(Ao(e.blueprints,0,`fuse2D`),t);return e.blueprints.slice(1).forEach(e=>{n=sz(e,n)}),n}if(e instanceof tR){if(t instanceof eR)return sz(t,e);if(t instanceof LL)return iz(t,e);if(t instanceof tR)return oz(e,t)}if(t instanceof tR){if(e instanceof eR)return sz(e,t);if(e instanceof LL)return iz(e,t);if(e instanceof tR)return oz(e,t)}return e instanceof LL&&t instanceof LL?ZR(e,t):null},cz=e=>{let t=e.flatMap(e=>e===null?[]:e instanceof eR?e.blueprints:e);return t.length===1?Ao(t,0,`mergeNonIntersecting`):new eR(t)},lz=(e,t)=>{if(e===null)return null;if(t===null)return e.clone();if(e instanceof eR)return cz(e.blueprints.map(e=>lz(e,t)));if(e instanceof tR){let n=Ao(e.blueprints,0,`cut2D`);if(t instanceof LL&&!t.intersects(n))return n.isInside(t.firstPoint)?sR([n,...rz(sz(t,new eR(e.blueprints.slice(1))))]):e.clone();{let r=lz(n,t);return e.blueprints.slice(1).forEach(e=>{r=lz(r,e)}),r}}if(t instanceof eR){let n=e;for(let e of t.blueprints)n=lz(n,e);return n}if(t instanceof tR){let n=QR(e,Ao(t.blueprints,0,`cut2D`));return t.blueprints.slice(1).forEach(t=>{n=sz(n,$R(t,e))}),n}return QR(e,t)};function uz(e,t){if(e===null||t===null)return null;if(e instanceof LL&&t instanceof LL)return $R(e,t);if(e instanceof eR)return cz(e.blueprints.map(e=>uz(e,t)));if(e instanceof tR){let n=Ao(e.blueprints,0,`intersect2D`),r=e.blueprints.slice(1);if(r.length===0)return uz(n,t);let i=uz(n,t);for(let e of r)i=lz(i,e);return i}if(t instanceof eR)return cz(t.blueprints.map(t=>uz(e,t)));if(t instanceof tR){let n=Ao(t.blueprints,0,`intersect2D`),r=t.blueprints.slice(1);if(r.length===0)return uz(n,e);let i=uz(n,e);for(let e of r)i=lz(i,e);return i}i(`intersect2D`,`Unhandled Shape2D combination`)}var dz=e(((e,t)=>{t.exports={}}));
|
|
23
23
|
/*! https://mths.be/codepointat v0.2.0 by @mathias */
|
|
24
|
-
String.prototype.codePointAt||(function(){var e=function(){try{var e={},t=Object.defineProperty,n=t(e,e,e)&&t}catch{}return n}(),t=function(e){if(this==null)throw TypeError();var t=String(this),n=t.length,r=e?Number(e):0;if(r!=r&&(r=0),!(r<0||r>=n)){var i=t.charCodeAt(r),a;return i>=55296&&i<=56319&&n>r+1&&(a=t.charCodeAt(r+1),a>=56320&&a<=57343)?(i-55296)*1024+a-56320+65536:i}};e?e(String.prototype,`codePointAt`,{value:t,configurable:!0,writable:!0}):String.prototype.codePointAt=t})();var uz=0,dz=-3;function fz(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function pz(e,t){this.source=e,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=t,this.destLen=0,this.ltree=new fz,this.dtree=new fz}var mz=new fz,hz=new fz,gz=new Uint8Array(30),_z=new Uint16Array(30),vz=new Uint8Array(30),yz=new Uint16Array(30),bz=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),xz=new fz,Sz=new Uint8Array(320);function Cz(e,t,n,r){var i,a;for(i=0;i<n;++i)e[i]=0;for(i=0;i<30-n;++i)e[i+n]=i/n|0;for(a=r,i=0;i<30;++i)t[i]=a,a+=1<<e[i]}function wz(e,t){var n;for(n=0;n<7;++n)e.table[n]=0;for(e.table[7]=24,e.table[8]=152,e.table[9]=112,n=0;n<24;++n)e.trans[n]=256+n;for(n=0;n<144;++n)e.trans[24+n]=n;for(n=0;n<8;++n)e.trans[168+n]=280+n;for(n=0;n<112;++n)e.trans[176+n]=144+n;for(n=0;n<5;++n)t.table[n]=0;for(t.table[5]=32,n=0;n<32;++n)t.trans[n]=n}var Tz=new Uint16Array(16);function Ez(e,t,n,r){var i,a;for(i=0;i<16;++i)e.table[i]=0;for(i=0;i<r;++i)e.table[t[n+i]]++;for(e.table[0]=0,a=0,i=0;i<16;++i)Tz[i]=a,a+=e.table[i];for(i=0;i<r;++i)t[n+i]&&(e.trans[Tz[t[n+i]]++]=i)}function Dz(e){e.bitcount--||(e.tag=e.source[e.sourceIndex++],e.bitcount=7);var t=e.tag&1;return e.tag>>>=1,t}function Oz(e,t,n){if(!t)return n;for(;e.bitcount<24;)e.tag|=e.source[e.sourceIndex++]<<e.bitcount,e.bitcount+=8;var r=e.tag&65535>>>16-t;return e.tag>>>=t,e.bitcount-=t,r+n}function kz(e,t){for(;e.bitcount<24;)e.tag|=e.source[e.sourceIndex++]<<e.bitcount,e.bitcount+=8;var n=0,r=0,i=0,a=e.tag;do r=2*r+(a&1),a>>>=1,++i,n+=t.table[i],r-=t.table[i];while(r>=0);return e.tag=a,e.bitcount-=i,t.trans[n+r]}function Az(e,t,n){var r=Oz(e,5,257),i=Oz(e,5,1),a=Oz(e,4,4),o,s,c;for(o=0;o<19;++o)Sz[o]=0;for(o=0;o<a;++o){var l=Oz(e,3,0);Sz[bz[o]]=l}for(Ez(xz,Sz,0,19),s=0;s<r+i;){var u=kz(e,xz);switch(u){case 16:var d=Sz[s-1];for(c=Oz(e,2,3);c;--c)Sz[s++]=d;break;case 17:for(c=Oz(e,3,3);c;--c)Sz[s++]=0;break;case 18:for(c=Oz(e,7,11);c;--c)Sz[s++]=0;break;default:Sz[s++]=u;break}}Ez(t,Sz,0,r),Ez(n,Sz,r,i)}function jz(e,t,n){for(;;){var r=kz(e,t);if(r===256)return uz;if(r<256)e.dest[e.destLen++]=r;else{var i,a,o,s;for(r-=257,i=Oz(e,gz[r],_z[r]),a=kz(e,n),o=e.destLen-Oz(e,vz[a],yz[a]),s=o;s<o+i;++s)e.dest[e.destLen++]=e.dest[s]}}}function Mz(e){for(var t,n,r;e.bitcount>8;)e.sourceIndex--,e.bitcount-=8;if(t=e.source[e.sourceIndex+1],t=256*t+e.source[e.sourceIndex],n=e.source[e.sourceIndex+3],n=256*n+e.source[e.sourceIndex+2],t!==(~n&65535))return dz;for(e.sourceIndex+=4,r=t;r;--r)e.dest[e.destLen++]=e.source[e.sourceIndex++];return e.bitcount=0,uz}function Nz(e,t){var n=new pz(e,t),r,i,a;do{switch(r=Dz(n),i=Oz(n,2,0),i){case 0:a=Mz(n);break;case 1:a=jz(n,mz,hz);break;case 2:Az(n,n.ltree,n.dtree),a=jz(n,n.ltree,n.dtree);break;default:a=dz}if(a!==uz)throw Error(`Data error`)}while(!r);return n.destLen<n.dest.length?typeof n.dest.slice==`function`?n.dest.slice(0,n.destLen):n.dest.subarray(0,n.destLen):n.dest}wz(mz,hz),Cz(gz,_z,4,3),Cz(vz,yz,2,1),gz[28]=0,_z[28]=258;var Pz=Nz;function Fz(e,t,n,r,i){return(1-i)**3*e+3*(1-i)**2*i*t+3*(1-i)*i**2*n+i**3*r}function Iz(){this.x1=NaN,this.y1=NaN,this.x2=NaN,this.y2=NaN}Iz.prototype.isEmpty=function(){return isNaN(this.x1)||isNaN(this.y1)||isNaN(this.x2)||isNaN(this.y2)},Iz.prototype.addPoint=function(e,t){typeof e==`number`&&((isNaN(this.x1)||isNaN(this.x2))&&(this.x1=e,this.x2=e),e<this.x1&&(this.x1=e),e>this.x2&&(this.x2=e)),typeof t==`number`&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=t,this.y2=t),t<this.y1&&(this.y1=t),t>this.y2&&(this.y2=t))},Iz.prototype.addX=function(e){this.addPoint(e,null)},Iz.prototype.addY=function(e){this.addPoint(null,e)},Iz.prototype.addBezier=function(e,t,n,r,i,a,o,s){var c=[e,t],l=[n,r],u=[i,a],d=[o,s];this.addPoint(e,t),this.addPoint(o,s);for(var f=0;f<=1;f++){var p=6*c[f]-12*l[f]+6*u[f],m=-3*c[f]+9*l[f]-9*u[f]+3*d[f],h=3*l[f]-3*c[f];if(m===0){if(p===0)continue;var g=-h/p;0<g&&g<1&&(f===0&&this.addX(Fz(c[f],l[f],u[f],d[f],g)),f===1&&this.addY(Fz(c[f],l[f],u[f],d[f],g)));continue}var _=p**2-4*h*m;if(!(_<0)){var v=(-p+Math.sqrt(_))/(2*m);0<v&&v<1&&(f===0&&this.addX(Fz(c[f],l[f],u[f],d[f],v)),f===1&&this.addY(Fz(c[f],l[f],u[f],d[f],v)));var y=(-p-Math.sqrt(_))/(2*m);0<y&&y<1&&(f===0&&this.addX(Fz(c[f],l[f],u[f],d[f],y)),f===1&&this.addY(Fz(c[f],l[f],u[f],d[f],y)))}}},Iz.prototype.addQuad=function(e,t,n,r,i,a){var o=e+2/3*(n-e),s=t+2/3*(r-t),c=o+1/3*(i-e),l=s+1/3*(a-t);this.addBezier(e,t,o,s,c,l,i,a)};function Lz(){this.commands=[],this.fill=`black`,this.stroke=null,this.strokeWidth=1}Lz.prototype.moveTo=function(e,t){this.commands.push({type:`M`,x:e,y:t})},Lz.prototype.lineTo=function(e,t){this.commands.push({type:`L`,x:e,y:t})},Lz.prototype.curveTo=Lz.prototype.bezierCurveTo=function(e,t,n,r,i,a){this.commands.push({type:`C`,x1:e,y1:t,x2:n,y2:r,x:i,y:a})},Lz.prototype.quadTo=Lz.prototype.quadraticCurveTo=function(e,t,n,r){this.commands.push({type:`Q`,x1:e,y1:t,x:n,y:r})},Lz.prototype.close=Lz.prototype.closePath=function(){this.commands.push({type:`Z`})},Lz.prototype.extend=function(e){if(e.commands)e=e.commands;else if(e instanceof Iz){var t=e;this.moveTo(t.x1,t.y1),this.lineTo(t.x2,t.y1),this.lineTo(t.x2,t.y2),this.lineTo(t.x1,t.y2),this.close();return}Array.prototype.push.apply(this.commands,e)},Lz.prototype.getBoundingBox=function(){for(var e=new Iz,t=0,n=0,r=0,i=0,a=0;a<this.commands.length;a++){var o=this.commands[a];switch(o.type){case`M`:e.addPoint(o.x,o.y),t=r=o.x,n=i=o.y;break;case`L`:e.addPoint(o.x,o.y),r=o.x,i=o.y;break;case`Q`:e.addQuad(r,i,o.x1,o.y1,o.x,o.y),r=o.x,i=o.y;break;case`C`:e.addBezier(r,i,o.x1,o.y1,o.x2,o.y2,o.x,o.y),r=o.x,i=o.y;break;case`Z`:r=t,i=n;break;default:throw Error(`Unexpected path command `+o.type)}}return e.isEmpty()&&e.addPoint(0,0),e},Lz.prototype.draw=function(e){e.beginPath();for(var t=0;t<this.commands.length;t+=1){var n=this.commands[t];n.type===`M`?e.moveTo(n.x,n.y):n.type===`L`?e.lineTo(n.x,n.y):n.type===`C`?e.bezierCurveTo(n.x1,n.y1,n.x2,n.y2,n.x,n.y):n.type===`Q`?e.quadraticCurveTo(n.x1,n.y1,n.x,n.y):n.type===`Z`&&e.closePath()}this.fill&&(e.fillStyle=this.fill,e.fill()),this.stroke&&(e.strokeStyle=this.stroke,e.lineWidth=this.strokeWidth,e.stroke())},Lz.prototype.toPathData=function(e){e=e===void 0?2:e;function t(t){return Math.round(t)===t?``+Math.round(t):t.toFixed(e)}function n(){for(var e=arguments,n=``,r=0;r<arguments.length;r+=1){var i=e[r];i>=0&&r>0&&(n+=` `),n+=t(i)}return n}for(var r=``,i=0;i<this.commands.length;i+=1){var a=this.commands[i];a.type===`M`?r+=`M`+n(a.x,a.y):a.type===`L`?r+=`L`+n(a.x,a.y):a.type===`C`?r+=`C`+n(a.x1,a.y1,a.x2,a.y2,a.x,a.y):a.type===`Q`?r+=`Q`+n(a.x1,a.y1,a.x,a.y):a.type===`Z`&&(r+=`Z`)}return r},Lz.prototype.toSVG=function(e){var t=`<path d="`;return t+=this.toPathData(e),t+=`"`,this.fill&&this.fill!==`black`&&(this.fill===null?t+=` fill="none"`:t+=` fill="`+this.fill+`"`),this.stroke&&(t+=` stroke="`+this.stroke+`" stroke-width="`+this.strokeWidth+`"`),t+=`/>`,t},Lz.prototype.toDOMElement=function(e){var t=this.toPathData(e),n=document.createElementNS(`http://www.w3.org/2000/svg`,`path`);return n.setAttribute(`d`,t),n};function Rz(e){throw Error(e)}function zz(e,t){e||Rz(t)}var K={fail:Rz,argument:zz,assert:zz},Bz=32768,Vz=2147483648,Hz={},q={},J={};function Uz(e){return function(){return e}}q.BYTE=function(e){return K.argument(e>=0&&e<=255,`Byte value should be between 0 and 255.`),[e]},J.BYTE=Uz(1),q.CHAR=function(e){return[e.charCodeAt(0)]},J.CHAR=Uz(1),q.CHARARRAY=function(e){e===void 0&&(e=``,console.warn(`Undefined CHARARRAY encountered and treated as an empty string. This is probably caused by a missing glyph name.`));for(var t=[],n=0;n<e.length;n+=1)t[n]=e.charCodeAt(n);return t},J.CHARARRAY=function(e){return e===void 0?0:e.length},q.USHORT=function(e){return[e>>8&255,e&255]},J.USHORT=Uz(2),q.SHORT=function(e){return e>=Bz&&(e=-(2*Bz-e)),[e>>8&255,e&255]},J.SHORT=Uz(2),q.UINT24=function(e){return[e>>16&255,e>>8&255,e&255]},J.UINT24=Uz(3),q.ULONG=function(e){return[e>>24&255,e>>16&255,e>>8&255,e&255]},J.ULONG=Uz(4),q.LONG=function(e){return e>=Vz&&(e=-(2*Vz-e)),[e>>24&255,e>>16&255,e>>8&255,e&255]},J.LONG=Uz(4),q.FIXED=q.ULONG,J.FIXED=J.ULONG,q.FWORD=q.SHORT,J.FWORD=J.SHORT,q.UFWORD=q.USHORT,J.UFWORD=J.USHORT,q.LONGDATETIME=function(e){return[0,0,0,0,e>>24&255,e>>16&255,e>>8&255,e&255]},J.LONGDATETIME=Uz(8),q.TAG=function(e){return K.argument(e.length===4,`Tag should be exactly 4 ASCII characters.`),[e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2),e.charCodeAt(3)]},J.TAG=Uz(4),q.Card8=q.BYTE,J.Card8=J.BYTE,q.Card16=q.USHORT,J.Card16=J.USHORT,q.OffSize=q.BYTE,J.OffSize=J.BYTE,q.SID=q.USHORT,J.SID=J.USHORT,q.NUMBER=function(e){return e>=-107&&e<=107?[e+139]:e>=108&&e<=1131?(e-=108,[(e>>8)+247,e&255]):e>=-1131&&e<=-108?(e=-e-108,[(e>>8)+251,e&255]):e>=-32768&&e<=32767?q.NUMBER16(e):q.NUMBER32(e)},J.NUMBER=function(e){return q.NUMBER(e).length},q.NUMBER16=function(e){return[28,e>>8&255,e&255]},J.NUMBER16=Uz(3),q.NUMBER32=function(e){return[29,e>>24&255,e>>16&255,e>>8&255,e&255]},J.NUMBER32=Uz(5),q.REAL=function(e){var t=e.toString(),n=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(t);if(n){var r=parseFloat(`1e`+((n[2]?+n[2]:0)+n[1].length));t=(Math.round(e*r)/r).toString()}for(var i=``,a=0,o=t.length;a<o;a+=1){var s=t[a];s===`e`?i+=t[++a]===`-`?`c`:`b`:s===`.`?i+=`a`:s===`-`?i+=`e`:i+=s}i+=i.length&1?`f`:`ff`;for(var c=[30],l=0,u=i.length;l<u;l+=2)c.push(parseInt(i.substr(l,2),16));return c},J.REAL=function(e){return q.REAL(e).length},q.NAME=q.CHARARRAY,J.NAME=J.CHARARRAY,q.STRING=q.CHARARRAY,J.STRING=J.CHARARRAY,Hz.UTF8=function(e,t,n){for(var r=[],i=n,a=0;a<i;a++,t+=1)r[a]=e.getUint8(t);return String.fromCharCode.apply(null,r)},Hz.UTF16=function(e,t,n){for(var r=[],i=n/2,a=0;a<i;a++,t+=2)r[a]=e.getUint16(t);return String.fromCharCode.apply(null,r)},q.UTF16=function(e){for(var t=[],n=0;n<e.length;n+=1){var r=e.charCodeAt(n);t[t.length]=r>>8&255,t[t.length]=r&255}return t},J.UTF16=function(e){return e.length*2};var Wz={"x-mac-croatian":`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ\xA0ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ`,"x-mac-cyrillic":`АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»…\xA0ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю`,"x-mac-gaelic":`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»…\xA0ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ`,"x-mac-greek":`Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»…\xA0ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ`,"x-mac-icelandic":`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ`,"x-mac-inuit":`ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ…\xA0ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł`,"x-mac-ce":`ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»…\xA0ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ`,macintosh:`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ`,"x-mac-romanian":`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ`,"x-mac-turkish":`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ`};Hz.MACSTRING=function(e,t,n,r){var i=Wz[r];if(i!==void 0){for(var a=``,o=0;o<n;o++){var s=e.getUint8(t+o);s<=127?a+=String.fromCharCode(s):a+=i[s&127]}return a}};var Gz=typeof WeakMap==`function`&&new WeakMap,Kz,qz=function(e){if(!Kz)for(var t in Kz={},Wz)Kz[t]=new String(t);var n=Kz[e];if(n!==void 0){if(Gz){var r=Gz.get(n);if(r!==void 0)return r}var i=Wz[e];if(i!==void 0){for(var a={},o=0;o<i.length;o++)a[i.charCodeAt(o)]=o+128;return Gz&&Gz.set(n,a),a}}};q.MACSTRING=function(e,t){var n=qz(t);if(n!==void 0){for(var r=[],i=0;i<e.length;i++){var a=e.charCodeAt(i);if(a>=128&&(a=n[a],a===void 0))return;r[i]=a}return r}},J.MACSTRING=function(e,t){var n=q.MACSTRING(e,t);return n===void 0?0:n.length};function Jz(e){return e>=-128&&e<=127}function Yz(e,t,n){for(var r=0,i=e.length;t<i&&r<64&&e[t]===0;)++t,++r;return n.push(128|r-1),t}function Xz(e,t,n){for(var r=0,i=e.length,a=t;a<i&&r<64;){var o=e[a];if(!Jz(o)||o===0&&a+1<i&&e[a+1]===0)break;++a,++r}n.push(r-1);for(var s=t;s<a;++s)n.push(e[s]+256&255);return a}function Zz(e,t,n){for(var r=0,i=e.length,a=t;a<i&&r<64;){var o=e[a];if(o===0||Jz(o)&&a+1<i&&Jz(e[a+1]))break;++a,++r}n.push(64|r-1);for(var s=t;s<a;++s){var c=e[s];n.push(c+65536>>8&255,c+256&255)}return a}q.VARDELTAS=function(e){for(var t=0,n=[];t<e.length;){var r=e[t];t=r===0?Yz(e,t,n):r>=-128&&r<=127?Xz(e,t,n):Zz(e,t,n)}return n},q.INDEX=function(e){for(var t=1,n=[t],r=[],i=0;i<e.length;i+=1){var a=q.OBJECT(e[i]);Array.prototype.push.apply(r,a),t+=a.length,n.push(t)}if(r.length===0)return[0,0];for(var o=[],s=1+Math.floor(Math.log(t)/Math.log(2))/8|0,c=[void 0,q.BYTE,q.USHORT,q.UINT24,q.ULONG][s],l=0;l<n.length;l+=1){var u=c(n[l]);Array.prototype.push.apply(o,u)}return Array.prototype.concat(q.Card16(e.length),q.OffSize(s),o,r)},J.INDEX=function(e){return q.INDEX(e).length},q.DICT=function(e){for(var t=[],n=Object.keys(e),r=n.length,i=0;i<r;i+=1){var a=parseInt(n[i],0),o=e[a];t=t.concat(q.OPERAND(o.value,o.type)),t=t.concat(q.OPERATOR(a))}return t},J.DICT=function(e){return q.DICT(e).length},q.OPERATOR=function(e){return e<1200?[e]:[12,e-1200]},q.OPERAND=function(e,t){var n=[];if(Array.isArray(t))for(var r=0;r<t.length;r+=1)K.argument(e.length===t.length,`Not enough arguments given for type`+t),n=n.concat(q.OPERAND(e[r],t[r]));else if(t===`SID`)n=n.concat(q.NUMBER(e));else if(t===`offset`)n=n.concat(q.NUMBER32(e));else if(t===`number`)n=n.concat(q.NUMBER(e));else if(t===`real`)n=n.concat(q.REAL(e));else throw Error(`Unknown operand type `+t);return n},q.OP=q.BYTE,J.OP=J.BYTE;var Qz=typeof WeakMap==`function`&&new WeakMap;q.CHARSTRING=function(e){if(Qz){var t=Qz.get(e);if(t!==void 0)return t}for(var n=[],r=e.length,i=0;i<r;i+=1){var a=e[i];n=n.concat(q[a.type](a.value))}return Qz&&Qz.set(e,n),n},J.CHARSTRING=function(e){return q.CHARSTRING(e).length},q.OBJECT=function(e){var t=q[e.type];return K.argument(t!==void 0,`No encoding function for type `+e.type),t(e.value)},J.OBJECT=function(e){var t=J[e.type];return K.argument(t!==void 0,`No sizeOf function for type `+e.type),t(e.value)},q.TABLE=function(e){for(var t=[],n=e.fields.length,r=[],i=[],a=0;a<n;a+=1){var o=e.fields[a],s=q[o.type];K.argument(s!==void 0,`No encoding function for field type `+o.type+` (`+o.name+`)`);var c=e[o.name];c===void 0&&(c=o.value);var l=s(c);o.type===`TABLE`?(i.push(t.length),t=t.concat([0,0]),r.push(l)):t=t.concat(l)}for(var u=0;u<r.length;u+=1){var d=i[u],f=t.length;K.argument(f<65536,`Table `+e.tableName+` too big.`),t[d]=f>>8,t[d+1]=f&255,t=t.concat(r[u])}return t},J.TABLE=function(e){for(var t=0,n=e.fields.length,r=0;r<n;r+=1){var i=e.fields[r],a=J[i.type];K.argument(a!==void 0,`No sizeOf function for field type `+i.type+` (`+i.name+`)`);var o=e[i.name];o===void 0&&(o=i.value),t+=a(o),i.type===`TABLE`&&(t+=2)}return t},q.RECORD=q.TABLE,J.RECORD=J.TABLE,q.LITERAL=function(e){return e},J.LITERAL=function(e){return e.length};function $z(e,t,n){if(t.length&&(t[0].name!==`coverageFormat`||t[0].value===1))for(var r=0;r<t.length;r+=1){var i=t[r];this[i.name]=i.value}if(this.tableName=e,this.fields=t,n)for(var a=Object.keys(n),o=0;o<a.length;o+=1){var s=a[o],c=n[s];this[s]!==void 0&&(this[s]=c)}}$z.prototype.encode=function(){return q.TABLE(this)},$z.prototype.sizeOf=function(){return J.TABLE(this)};function eB(e,t,n){n===void 0&&(n=t.length);var r=Array(t.length+1);r[0]={name:e+`Count`,type:`USHORT`,value:n};for(var i=0;i<t.length;i++)r[i+1]={name:e+i,type:`USHORT`,value:t[i]};return r}function tB(e,t,n){var r=t.length,i=Array(r+1);i[0]={name:e+`Count`,type:`USHORT`,value:r};for(var a=0;a<r;a++)i[a+1]={name:e+a,type:`TABLE`,value:n(t[a],a)};return i}function nB(e,t,n){var r=t.length,i=[];i[0]={name:e+`Count`,type:`USHORT`,value:r};for(var a=0;a<r;a++)i=i.concat(n(t[a],a));return i}function rB(e){e.format===1?$z.call(this,`coverageTable`,[{name:`coverageFormat`,type:`USHORT`,value:1}].concat(eB(`glyph`,e.glyphs))):e.format===2?$z.call(this,`coverageTable`,[{name:`coverageFormat`,type:`USHORT`,value:2}].concat(nB(`rangeRecord`,e.ranges,function(e){return[{name:`startGlyphID`,type:`USHORT`,value:e.start},{name:`endGlyphID`,type:`USHORT`,value:e.end},{name:`startCoverageIndex`,type:`USHORT`,value:e.index}]}))):K.assert(!1,`Coverage format must be 1 or 2.`)}rB.prototype=Object.create($z.prototype),rB.prototype.constructor=rB;function iB(e){$z.call(this,`scriptListTable`,nB(`scriptRecord`,e,function(e,t){var n=e.script,r=n.defaultLangSys;return K.assert(!!r,`Unable to write GSUB: script `+e.tag+` has no default language system.`),[{name:`scriptTag`+t,type:`TAG`,value:e.tag},{name:`script`+t,type:`TABLE`,value:new $z(`scriptTable`,[{name:`defaultLangSys`,type:`TABLE`,value:new $z(`defaultLangSys`,[{name:`lookupOrder`,type:`USHORT`,value:0},{name:`reqFeatureIndex`,type:`USHORT`,value:r.reqFeatureIndex}].concat(eB(`featureIndex`,r.featureIndexes)))}].concat(nB(`langSys`,n.langSysRecords,function(e,t){var n=e.langSys;return[{name:`langSysTag`+t,type:`TAG`,value:e.tag},{name:`langSys`+t,type:`TABLE`,value:new $z(`langSys`,[{name:`lookupOrder`,type:`USHORT`,value:0},{name:`reqFeatureIndex`,type:`USHORT`,value:n.reqFeatureIndex}].concat(eB(`featureIndex`,n.featureIndexes)))}]})))}]}))}iB.prototype=Object.create($z.prototype),iB.prototype.constructor=iB;function aB(e){$z.call(this,`featureListTable`,nB(`featureRecord`,e,function(e,t){var n=e.feature;return[{name:`featureTag`+t,type:`TAG`,value:e.tag},{name:`feature`+t,type:`TABLE`,value:new $z(`featureTable`,[{name:`featureParams`,type:`USHORT`,value:n.featureParams}].concat(eB(`lookupListIndex`,n.lookupListIndexes)))}]}))}aB.prototype=Object.create($z.prototype),aB.prototype.constructor=aB;function oB(e,t){$z.call(this,`lookupListTable`,tB(`lookup`,e,function(e){var n=t[e.lookupType];return K.assert(!!n,`Unable to write GSUB lookup type `+e.lookupType+` tables.`),new $z(`lookupTable`,[{name:`lookupType`,type:`USHORT`,value:e.lookupType},{name:`lookupFlag`,type:`USHORT`,value:e.lookupFlag}].concat(tB(`subtable`,e.subtables,n)))}))}oB.prototype=Object.create($z.prototype),oB.prototype.constructor=oB;var Y={Table:$z,Record:$z,Coverage:rB,ScriptList:iB,FeatureList:aB,LookupList:oB,ushortList:eB,tableList:tB,recordList:nB};function sB(e,t){return e.getUint8(t)}function cB(e,t){return e.getUint16(t,!1)}function lB(e,t){return e.getInt16(t,!1)}function uB(e,t){return e.getUint32(t,!1)}function dB(e,t){return e.getInt16(t,!1)+e.getUint16(t+2,!1)/65535}function fB(e,t){for(var n=``,r=t;r<t+4;r+=1)n+=String.fromCharCode(e.getInt8(r));return n}function pB(e,t,n){for(var r=0,i=0;i<n;i+=1)r<<=8,r+=e.getUint8(t+i);return r}function mB(e,t,n){for(var r=[],i=t;i<n;i+=1)r.push(e.getUint8(i));return r}function hB(e){for(var t=``,n=0;n<e.length;n+=1)t+=String.fromCharCode(e[n]);return t}var gB={byte:1,uShort:2,short:2,uLong:4,fixed:4,longDateTime:8,tag:4};function X(e,t){this.data=e,this.offset=t,this.relativeOffset=0}X.prototype.parseByte=function(){var e=this.data.getUint8(this.offset+this.relativeOffset);return this.relativeOffset+=1,e},X.prototype.parseChar=function(){var e=this.data.getInt8(this.offset+this.relativeOffset);return this.relativeOffset+=1,e},X.prototype.parseCard8=X.prototype.parseByte,X.prototype.parseUShort=function(){var e=this.data.getUint16(this.offset+this.relativeOffset);return this.relativeOffset+=2,e},X.prototype.parseCard16=X.prototype.parseUShort,X.prototype.parseSID=X.prototype.parseUShort,X.prototype.parseOffset16=X.prototype.parseUShort,X.prototype.parseShort=function(){var e=this.data.getInt16(this.offset+this.relativeOffset);return this.relativeOffset+=2,e},X.prototype.parseF2Dot14=function(){var e=this.data.getInt16(this.offset+this.relativeOffset)/16384;return this.relativeOffset+=2,e},X.prototype.parseULong=function(){var e=uB(this.data,this.offset+this.relativeOffset);return this.relativeOffset+=4,e},X.prototype.parseOffset32=X.prototype.parseULong,X.prototype.parseFixed=function(){var e=dB(this.data,this.offset+this.relativeOffset);return this.relativeOffset+=4,e},X.prototype.parseString=function(e){var t=this.data,n=this.offset+this.relativeOffset,r=``;this.relativeOffset+=e;for(var i=0;i<e;i++)r+=String.fromCharCode(t.getUint8(n+i));return r},X.prototype.parseTag=function(){return this.parseString(4)},X.prototype.parseLongDateTime=function(){var e=uB(this.data,this.offset+this.relativeOffset+4);return e-=2082844800,this.relativeOffset+=8,e},X.prototype.parseVersion=function(e){var t=cB(this.data,this.offset+this.relativeOffset),n=cB(this.data,this.offset+this.relativeOffset+2);return this.relativeOffset+=4,e===void 0&&(e=4096),t+n/e/10},X.prototype.skip=function(e,t){t===void 0&&(t=1),this.relativeOffset+=gB[e]*t},X.prototype.parseULongList=function(e){e===void 0&&(e=this.parseULong());for(var t=Array(e),n=this.data,r=this.offset+this.relativeOffset,i=0;i<e;i++)t[i]=n.getUint32(r),r+=4;return this.relativeOffset+=e*4,t},X.prototype.parseOffset16List=X.prototype.parseUShortList=function(e){e===void 0&&(e=this.parseUShort());for(var t=Array(e),n=this.data,r=this.offset+this.relativeOffset,i=0;i<e;i++)t[i]=n.getUint16(r),r+=2;return this.relativeOffset+=e*2,t},X.prototype.parseShortList=function(e){for(var t=Array(e),n=this.data,r=this.offset+this.relativeOffset,i=0;i<e;i++)t[i]=n.getInt16(r),r+=2;return this.relativeOffset+=e*2,t},X.prototype.parseByteList=function(e){for(var t=Array(e),n=this.data,r=this.offset+this.relativeOffset,i=0;i<e;i++)t[i]=n.getUint8(r++);return this.relativeOffset+=e,t},X.prototype.parseList=function(e,t){t||(t=e,e=this.parseUShort());for(var n=Array(e),r=0;r<e;r++)n[r]=t.call(this);return n},X.prototype.parseList32=function(e,t){t||(t=e,e=this.parseULong());for(var n=Array(e),r=0;r<e;r++)n[r]=t.call(this);return n},X.prototype.parseRecordList=function(e,t){t||(t=e,e=this.parseUShort());for(var n=Array(e),r=Object.keys(t),i=0;i<e;i++){for(var a={},o=0;o<r.length;o++){var s=r[o];a[s]=t[s].call(this)}n[i]=a}return n},X.prototype.parseRecordList32=function(e,t){t||(t=e,e=this.parseULong());for(var n=Array(e),r=Object.keys(t),i=0;i<e;i++){for(var a={},o=0;o<r.length;o++){var s=r[o];a[s]=t[s].call(this)}n[i]=a}return n},X.prototype.parseStruct=function(e){if(typeof e==`function`)return e.call(this);for(var t=Object.keys(e),n={},r=0;r<t.length;r++){var i=t[r];n[i]=e[i].call(this)}return n},X.prototype.parseValueRecord=function(e){if(e===void 0&&(e=this.parseUShort()),e!==0){var t={};return e&1&&(t.xPlacement=this.parseShort()),e&2&&(t.yPlacement=this.parseShort()),e&4&&(t.xAdvance=this.parseShort()),e&8&&(t.yAdvance=this.parseShort()),e&16&&(t.xPlaDevice=void 0,this.parseShort()),e&32&&(t.yPlaDevice=void 0,this.parseShort()),e&64&&(t.xAdvDevice=void 0,this.parseShort()),e&128&&(t.yAdvDevice=void 0,this.parseShort()),t}},X.prototype.parseValueRecordList=function(){for(var e=this.parseUShort(),t=this.parseUShort(),n=Array(t),r=0;r<t;r++)n[r]=this.parseValueRecord(e);return n},X.prototype.parsePointer=function(e){var t=this.parseOffset16();if(t>0)return new X(this.data,this.offset+t).parseStruct(e)},X.prototype.parsePointer32=function(e){var t=this.parseOffset32();if(t>0)return new X(this.data,this.offset+t).parseStruct(e)},X.prototype.parseListOfLists=function(e){for(var t=this.parseOffset16List(),n=t.length,r=this.relativeOffset,i=Array(n),a=0;a<n;a++){var o=t[a];if(o===0){i[a]=void 0;continue}if(this.relativeOffset=o,e){for(var s=this.parseOffset16List(),c=Array(s.length),l=0;l<s.length;l++)this.relativeOffset=o+s[l],c[l]=e.call(this);i[a]=c}else i[a]=this.parseUShortList()}return this.relativeOffset=r,i},X.prototype.parseCoverage=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort(),n=this.parseUShort();if(t===1)return{format:1,glyphs:this.parseUShortList(n)};if(t===2){for(var r=Array(n),i=0;i<n;i++)r[i]={start:this.parseUShort(),end:this.parseUShort(),index:this.parseUShort()};return{format:2,ranges:r}}throw Error(`0x`+e.toString(16)+`: Coverage format must be 1 or 2.`)},X.prototype.parseClassDef=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{format:1,startGlyph:this.parseUShort(),classes:this.parseUShortList()};if(t===2)return{format:2,ranges:this.parseRecordList({start:X.uShort,end:X.uShort,classId:X.uShort})};throw Error(`0x`+e.toString(16)+`: ClassDef format must be 1 or 2.`)},X.list=function(e,t){return function(){return this.parseList(e,t)}},X.list32=function(e,t){return function(){return this.parseList32(e,t)}},X.recordList=function(e,t){return function(){return this.parseRecordList(e,t)}},X.recordList32=function(e,t){return function(){return this.parseRecordList32(e,t)}},X.pointer=function(e){return function(){return this.parsePointer(e)}},X.pointer32=function(e){return function(){return this.parsePointer32(e)}},X.tag=X.prototype.parseTag,X.byte=X.prototype.parseByte,X.uShort=X.offset16=X.prototype.parseUShort,X.uShortList=X.prototype.parseUShortList,X.uLong=X.offset32=X.prototype.parseULong,X.uLongList=X.prototype.parseULongList,X.struct=X.prototype.parseStruct,X.coverage=X.prototype.parseCoverage,X.classDef=X.prototype.parseClassDef;var _B={reserved:X.uShort,reqFeatureIndex:X.uShort,featureIndexes:X.uShortList};X.prototype.parseScriptList=function(){return this.parsePointer(X.recordList({tag:X.tag,script:X.pointer({defaultLangSys:X.pointer(_B),langSysRecords:X.recordList({tag:X.tag,langSys:X.pointer(_B)})})}))||[]},X.prototype.parseFeatureList=function(){return this.parsePointer(X.recordList({tag:X.tag,feature:X.pointer({featureParams:X.offset16,lookupListIndexes:X.uShortList})}))||[]},X.prototype.parseLookupList=function(e){return this.parsePointer(X.list(X.pointer(function(){var t=this.parseUShort();K.argument(1<=t&&t<=9,`GPOS/GSUB lookup type `+t+` unknown.`);var n=this.parseUShort(),r=n&16;return{lookupType:t,lookupFlag:n,subtables:this.parseList(X.pointer(e[t])),markFilteringSet:r?this.parseUShort():void 0}})))||[]},X.prototype.parseFeatureVariationsList=function(){return this.parsePointer32(function(){var e=this.parseUShort(),t=this.parseUShort();return K.argument(e===1&&t<1,`GPOS/GSUB feature variations table unknown.`),this.parseRecordList32({conditionSetOffset:X.offset32,featureTableSubstitutionOffset:X.offset32})})||[]};var Z={getByte:sB,getCard8:sB,getUShort:cB,getCard16:cB,getShort:lB,getULong:uB,getFixed:dB,getTag:fB,getOffset:pB,getBytes:mB,bytesToString:hB,Parser:X};function vB(e,t){t.parseUShort(),e.length=t.parseULong(),e.language=t.parseULong();var n;e.groupCount=n=t.parseULong(),e.glyphIndexMap={};for(var r=0;r<n;r+=1)for(var i=t.parseULong(),a=t.parseULong(),o=t.parseULong(),s=i;s<=a;s+=1)e.glyphIndexMap[s]=o,o++}function yB(e,t,n,r,i){e.length=t.parseUShort(),e.language=t.parseUShort();var a;e.segCount=a=t.parseUShort()>>1,t.skip(`uShort`,3),e.glyphIndexMap={};for(var o=new Z.Parser(n,r+i+14),s=new Z.Parser(n,r+i+16+a*2),c=new Z.Parser(n,r+i+16+a*4),l=new Z.Parser(n,r+i+16+a*6),u=r+i+16+a*8,d=0;d<a-1;d+=1)for(var f=void 0,p=o.parseUShort(),m=s.parseUShort(),h=c.parseShort(),g=l.parseUShort(),_=m;_<=p;_+=1)g===0?f=_+h&65535:(u=l.offset+l.relativeOffset-2,u+=g,u+=(_-m)*2,f=Z.getUShort(n,u),f!==0&&(f=f+h&65535)),e.glyphIndexMap[_]=f}function bB(e,t){var n={};n.version=Z.getUShort(e,t),K.argument(n.version===0,`cmap table version should be 0.`),n.numTables=Z.getUShort(e,t+2);for(var r=-1,i=n.numTables-1;i>=0;--i){var a=Z.getUShort(e,t+4+i*8),o=Z.getUShort(e,t+4+i*8+2);if(a===3&&(o===0||o===1||o===10)||a===0&&(o===0||o===1||o===2||o===3||o===4)){r=Z.getULong(e,t+4+i*8+4);break}}if(r===-1)throw Error(`No valid cmap sub-tables found.`);var s=new Z.Parser(e,t+r);if(n.format=s.parseUShort(),n.format===12)vB(n,s);else if(n.format===4)yB(n,s,e,t,r);else throw Error(`Only format 4 and 12 cmap tables are supported (found format `+n.format+`).`);return n}function xB(e,t,n){e.segments.push({end:t,start:t,delta:-(t-n),offset:0,glyphIndex:n})}function SB(e){e.segments.push({end:65535,start:65535,delta:1,offset:0})}function CB(e){var t=!0,n;for(n=e.length-1;n>0;--n)if(e.get(n).unicode>65535){console.log(`Adding CMAP format 12 (needed!)`),t=!1;break}var r=[{name:`version`,type:`USHORT`,value:0},{name:`numTables`,type:`USHORT`,value:t?1:2},{name:`platformID`,type:`USHORT`,value:3},{name:`encodingID`,type:`USHORT`,value:1},{name:`offset`,type:`ULONG`,value:t?12:20}];t||(r=r.concat([{name:`cmap12PlatformID`,type:`USHORT`,value:3},{name:`cmap12EncodingID`,type:`USHORT`,value:10},{name:`cmap12Offset`,type:`ULONG`,value:0}])),r=r.concat([{name:`format`,type:`USHORT`,value:4},{name:`cmap4Length`,type:`USHORT`,value:0},{name:`language`,type:`USHORT`,value:0},{name:`segCountX2`,type:`USHORT`,value:0},{name:`searchRange`,type:`USHORT`,value:0},{name:`entrySelector`,type:`USHORT`,value:0},{name:`rangeShift`,type:`USHORT`,value:0}]);var i=new Y.Table(`cmap`,r);for(i.segments=[],n=0;n<e.length;n+=1){for(var a=e.get(n),o=0;o<a.unicodes.length;o+=1)xB(i,a.unicodes[o],n);i.segments=i.segments.sort(function(e,t){return e.start-t.start})}SB(i);var s=i.segments.length,c=0,l=[],u=[],d=[],f=[],p=[],m=[];for(n=0;n<s;n+=1){var h=i.segments[n];h.end<=65535&&h.start<=65535?(l=l.concat({name:`end_`+n,type:`USHORT`,value:h.end}),u=u.concat({name:`start_`+n,type:`USHORT`,value:h.start}),d=d.concat({name:`idDelta_`+n,type:`SHORT`,value:h.delta}),f=f.concat({name:`idRangeOffset_`+n,type:`USHORT`,value:h.offset}),h.glyphId!==void 0&&(p=p.concat({name:`glyph_`+n,type:`USHORT`,value:h.glyphId}))):c+=1,!t&&h.glyphIndex!==void 0&&(m=m.concat({name:`cmap12Start_`+n,type:`ULONG`,value:h.start}),m=m.concat({name:`cmap12End_`+n,type:`ULONG`,value:h.end}),m=m.concat({name:`cmap12Glyph_`+n,type:`ULONG`,value:h.glyphIndex}))}if(i.segCountX2=(s-c)*2,i.searchRange=2**Math.floor(Math.log(s-c)/Math.log(2))*2,i.entrySelector=Math.log(i.searchRange/2)/Math.log(2),i.rangeShift=i.segCountX2-i.searchRange,i.fields=i.fields.concat(l),i.fields.push({name:`reservedPad`,type:`USHORT`,value:0}),i.fields=i.fields.concat(u),i.fields=i.fields.concat(d),i.fields=i.fields.concat(f),i.fields=i.fields.concat(p),i.cmap4Length=14+l.length*2+2+u.length*2+d.length*2+f.length*2+p.length*2,!t){var g=16+m.length*4;i.cmap12Offset=20+i.cmap4Length,i.fields=i.fields.concat([{name:`cmap12Format`,type:`USHORT`,value:12},{name:`cmap12Reserved`,type:`USHORT`,value:0},{name:`cmap12Length`,type:`ULONG`,value:g},{name:`cmap12Language`,type:`ULONG`,value:0},{name:`cmap12nGroups`,type:`ULONG`,value:m.length/3}]),i.fields=i.fields.concat(m)}return i}var wB={parse:bB,make:CB},TB=`.notdef,space,exclam,quotedbl,numbersign,dollar,percent,ampersand,quoteright,parenleft,parenright,asterisk,plus,comma,hyphen,period,slash,zero,one,two,three,four,five,six,seven,eight,nine,colon,semicolon,less,equal,greater,question,at,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,bracketleft,backslash,bracketright,asciicircum,underscore,quoteleft,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,braceleft,bar,braceright,asciitilde,exclamdown,cent,sterling,fraction,yen,florin,section,currency,quotesingle,quotedblleft,guillemotleft,guilsinglleft,guilsinglright,fi,fl,endash,dagger,daggerdbl,periodcentered,paragraph,bullet,quotesinglbase,quotedblbase,quotedblright,guillemotright,ellipsis,perthousand,questiondown,grave,acute,circumflex,tilde,macron,breve,dotaccent,dieresis,ring,cedilla,hungarumlaut,ogonek,caron,emdash,AE,ordfeminine,Lslash,Oslash,OE,ordmasculine,ae,dotlessi,lslash,oslash,oe,germandbls,onesuperior,logicalnot,mu,trademark,Eth,onehalf,plusminus,Thorn,onequarter,divide,brokenbar,degree,thorn,threequarters,twosuperior,registered,minus,eth,multiply,threesuperior,copyright,Aacute,Acircumflex,Adieresis,Agrave,Aring,Atilde,Ccedilla,Eacute,Ecircumflex,Edieresis,Egrave,Iacute,Icircumflex,Idieresis,Igrave,Ntilde,Oacute,Ocircumflex,Odieresis,Ograve,Otilde,Scaron,Uacute,Ucircumflex,Udieresis,Ugrave,Yacute,Ydieresis,Zcaron,aacute,acircumflex,adieresis,agrave,aring,atilde,ccedilla,eacute,ecircumflex,edieresis,egrave,iacute,icircumflex,idieresis,igrave,ntilde,oacute,ocircumflex,odieresis,ograve,otilde,scaron,uacute,ucircumflex,udieresis,ugrave,yacute,ydieresis,zcaron,exclamsmall,Hungarumlautsmall,dollaroldstyle,dollarsuperior,ampersandsmall,Acutesmall,parenleftsuperior,parenrightsuperior,266 ff,onedotenleader,zerooldstyle,oneoldstyle,twooldstyle,threeoldstyle,fouroldstyle,fiveoldstyle,sixoldstyle,sevenoldstyle,eightoldstyle,nineoldstyle,commasuperior,threequartersemdash,periodsuperior,questionsmall,asuperior,bsuperior,centsuperior,dsuperior,esuperior,isuperior,lsuperior,msuperior,nsuperior,osuperior,rsuperior,ssuperior,tsuperior,ff,ffi,ffl,parenleftinferior,parenrightinferior,Circumflexsmall,hyphensuperior,Gravesmall,Asmall,Bsmall,Csmall,Dsmall,Esmall,Fsmall,Gsmall,Hsmall,Ismall,Jsmall,Ksmall,Lsmall,Msmall,Nsmall,Osmall,Psmall,Qsmall,Rsmall,Ssmall,Tsmall,Usmall,Vsmall,Wsmall,Xsmall,Ysmall,Zsmall,colonmonetary,onefitted,rupiah,Tildesmall,exclamdownsmall,centoldstyle,Lslashsmall,Scaronsmall,Zcaronsmall,Dieresissmall,Brevesmall,Caronsmall,Dotaccentsmall,Macronsmall,figuredash,hypheninferior,Ogoneksmall,Ringsmall,Cedillasmall,questiondownsmall,oneeighth,threeeighths,fiveeighths,seveneighths,onethird,twothirds,zerosuperior,foursuperior,fivesuperior,sixsuperior,sevensuperior,eightsuperior,ninesuperior,zeroinferior,oneinferior,twoinferior,threeinferior,fourinferior,fiveinferior,sixinferior,seveninferior,eightinferior,nineinferior,centinferior,dollarinferior,periodinferior,commainferior,Agravesmall,Aacutesmall,Acircumflexsmall,Atildesmall,Adieresissmall,Aringsmall,AEsmall,Ccedillasmall,Egravesmall,Eacutesmall,Ecircumflexsmall,Edieresissmall,Igravesmall,Iacutesmall,Icircumflexsmall,Idieresissmall,Ethsmall,Ntildesmall,Ogravesmall,Oacutesmall,Ocircumflexsmall,Otildesmall,Odieresissmall,OEsmall,Oslashsmall,Ugravesmall,Uacutesmall,Ucircumflexsmall,Udieresissmall,Yacutesmall,Thornsmall,Ydieresissmall,001.000,001.001,001.002,001.003,Black,Bold,Book,Light,Medium,Regular,Roman,Semibold`.split(`,`),EB=`................................space.exclam.quotedbl.numbersign.dollar.percent.ampersand.quoteright.parenleft.parenright.asterisk.plus.comma.hyphen.period.slash.zero.one.two.three.four.five.six.seven.eight.nine.colon.semicolon.less.equal.greater.question.at.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.bracketleft.backslash.bracketright.asciicircum.underscore.quoteleft.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.braceleft.bar.braceright.asciitilde...................................exclamdown.cent.sterling.fraction.yen.florin.section.currency.quotesingle.quotedblleft.guillemotleft.guilsinglleft.guilsinglright.fi.fl..endash.dagger.daggerdbl.periodcentered..paragraph.bullet.quotesinglbase.quotedblbase.quotedblright.guillemotright.ellipsis.perthousand..questiondown..grave.acute.circumflex.tilde.macron.breve.dotaccent.dieresis..ring.cedilla..hungarumlaut.ogonek.caron.emdash.................AE..ordfeminine.....Lslash.Oslash.OE.ordmasculine......ae....dotlessi...lslash.oslash.oe.germandbls`.split(`.`),DB=`................................space.exclamsmall.Hungarumlautsmall..dollaroldstyle.dollarsuperior.ampersandsmall.Acutesmall.parenleftsuperior.parenrightsuperior.twodotenleader.onedotenleader.comma.hyphen.period.fraction.zerooldstyle.oneoldstyle.twooldstyle.threeoldstyle.fouroldstyle.fiveoldstyle.sixoldstyle.sevenoldstyle.eightoldstyle.nineoldstyle.colon.semicolon.commasuperior.threequartersemdash.periodsuperior.questionsmall..asuperior.bsuperior.centsuperior.dsuperior.esuperior...isuperior...lsuperior.msuperior.nsuperior.osuperior...rsuperior.ssuperior.tsuperior..ff.fi.fl.ffi.ffl.parenleftinferior..parenrightinferior.Circumflexsmall.hyphensuperior.Gravesmall.Asmall.Bsmall.Csmall.Dsmall.Esmall.Fsmall.Gsmall.Hsmall.Ismall.Jsmall.Ksmall.Lsmall.Msmall.Nsmall.Osmall.Psmall.Qsmall.Rsmall.Ssmall.Tsmall.Usmall.Vsmall.Wsmall.Xsmall.Ysmall.Zsmall.colonmonetary.onefitted.rupiah.Tildesmall...................................exclamdownsmall.centoldstyle.Lslashsmall...Scaronsmall.Zcaronsmall.Dieresissmall.Brevesmall.Caronsmall..Dotaccentsmall...Macronsmall...figuredash.hypheninferior...Ogoneksmall.Ringsmall.Cedillasmall....onequarter.onehalf.threequarters.questiondownsmall.oneeighth.threeeighths.fiveeighths.seveneighths.onethird.twothirds...zerosuperior.onesuperior.twosuperior.threesuperior.foursuperior.fivesuperior.sixsuperior.sevensuperior.eightsuperior.ninesuperior.zeroinferior.oneinferior.twoinferior.threeinferior.fourinferior.fiveinferior.sixinferior.seveninferior.eightinferior.nineinferior.centinferior.dollarinferior.periodinferior.commainferior.Agravesmall.Aacutesmall.Acircumflexsmall.Atildesmall.Adieresissmall.Aringsmall.AEsmall.Ccedillasmall.Egravesmall.Eacutesmall.Ecircumflexsmall.Edieresissmall.Igravesmall.Iacutesmall.Icircumflexsmall.Idieresissmall.Ethsmall.Ntildesmall.Ogravesmall.Oacutesmall.Ocircumflexsmall.Otildesmall.Odieresissmall.OEsmall.Oslashsmall.Ugravesmall.Uacutesmall.Ucircumflexsmall.Udieresissmall.Yacutesmall.Thornsmall.Ydieresissmall`.split(`.`),OB=`.notdef,.null,nonmarkingreturn,space,exclam,quotedbl,numbersign,dollar,percent,ampersand,quotesingle,parenleft,parenright,asterisk,plus,comma,hyphen,period,slash,zero,one,two,three,four,five,six,seven,eight,nine,colon,semicolon,less,equal,greater,question,at,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,bracketleft,backslash,bracketright,asciicircum,underscore,grave,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,braceleft,bar,braceright,asciitilde,Adieresis,Aring,Ccedilla,Eacute,Ntilde,Odieresis,Udieresis,aacute,agrave,acircumflex,adieresis,atilde,aring,ccedilla,eacute,egrave,ecircumflex,edieresis,iacute,igrave,icircumflex,idieresis,ntilde,oacute,ograve,ocircumflex,odieresis,otilde,uacute,ugrave,ucircumflex,udieresis,dagger,degree,cent,sterling,section,bullet,paragraph,germandbls,registered,copyright,trademark,acute,dieresis,notequal,AE,Oslash,infinity,plusminus,lessequal,greaterequal,yen,mu,partialdiff,summation,product,pi,integral,ordfeminine,ordmasculine,Omega,ae,oslash,questiondown,exclamdown,logicalnot,radical,florin,approxequal,Delta,guillemotleft,guillemotright,ellipsis,nonbreakingspace,Agrave,Atilde,Otilde,OE,oe,endash,emdash,quotedblleft,quotedblright,quoteleft,quoteright,divide,lozenge,ydieresis,Ydieresis,fraction,currency,guilsinglleft,guilsinglright,fi,fl,daggerdbl,periodcentered,quotesinglbase,quotedblbase,perthousand,Acircumflex,Ecircumflex,Aacute,Edieresis,Egrave,Iacute,Icircumflex,Idieresis,Igrave,Oacute,Ocircumflex,apple,Ograve,Uacute,Ucircumflex,Ugrave,dotlessi,circumflex,tilde,macron,breve,dotaccent,ring,cedilla,hungarumlaut,ogonek,caron,Lslash,lslash,Scaron,scaron,Zcaron,zcaron,brokenbar,Eth,eth,Yacute,yacute,Thorn,thorn,minus,multiply,onesuperior,twosuperior,threesuperior,onehalf,onequarter,threequarters,franc,Gbreve,gbreve,Idotaccent,Scedilla,scedilla,Cacute,cacute,Ccaron,ccaron,dcroat`.split(`,`);function kB(e){this.font=e}kB.prototype.charToGlyphIndex=function(e){var t=e.codePointAt(0),n=this.font.glyphs;if(n){for(var r=0;r<n.length;r+=1)for(var i=n.get(r),a=0;a<i.unicodes.length;a+=1)if(i.unicodes[a]===t)return r}return null};function AB(e){this.cmap=e}AB.prototype.charToGlyphIndex=function(e){return this.cmap.glyphIndexMap[e.codePointAt(0)]||0};function jB(e,t){this.encoding=e,this.charset=t}jB.prototype.charToGlyphIndex=function(e){var t=e.codePointAt(0),n=this.encoding[t];return this.charset.indexOf(n)};function MB(e){switch(e.version){case 1:this.names=OB.slice();break;case 2:this.names=Array(e.numberOfGlyphs);for(var t=0;t<e.numberOfGlyphs;t++)e.glyphNameIndex[t]<OB.length?this.names[t]=OB[e.glyphNameIndex[t]]:this.names[t]=e.names[e.glyphNameIndex[t]-OB.length];break;case 2.5:this.names=Array(e.numberOfGlyphs);for(var n=0;n<e.numberOfGlyphs;n++)this.names[n]=OB[n+e.glyphNameIndex[n]];break;case 3:this.names=[];break;default:this.names=[];break}}MB.prototype.nameToGlyphIndex=function(e){return this.names.indexOf(e)},MB.prototype.glyphIndexToName=function(e){return this.names[e]};function NB(e){for(var t,n=e.tables.cmap.glyphIndexMap,r=Object.keys(n),i=0;i<r.length;i+=1){var a=r[i],o=n[a];t=e.glyphs.get(o),t.addUnicode(parseInt(a))}for(var s=0;s<e.glyphs.length;s+=1)t=e.glyphs.get(s),e.cffEncoding?e.isCIDFont?t.name=`gid`+s:t.name=e.cffEncoding.charset[s]:e.glyphNames.names&&(t.name=e.glyphNames.glyphIndexToName(s))}function PB(e){e._IndexToUnicodeMap={};for(var t=e.tables.cmap.glyphIndexMap,n=Object.keys(t),r=0;r<n.length;r+=1){var i=n[r],a=t[i];e._IndexToUnicodeMap[a]===void 0?e._IndexToUnicodeMap[a]={unicodes:[parseInt(i)]}:e._IndexToUnicodeMap[a].unicodes.push(parseInt(i))}}function FB(e,t){t.lowMemory?PB(e):NB(e)}function IB(e,t,n,r,i){e.beginPath(),e.moveTo(t,n),e.lineTo(r,i),e.stroke()}var LB={line:IB};function RB(e,t){var n=t||new Lz;return{configurable:!0,get:function(){return typeof n==`function`&&(n=n()),n},set:function(e){n=e}}}function zB(e){this.bindConstructorValues(e)}zB.prototype.bindConstructorValues=function(e){this.index=e.index||0,this.name=e.name||null,this.unicode=e.unicode||void 0,this.unicodes=e.unicodes||e.unicode!==void 0?[e.unicode]:[],`xMin`in e&&(this.xMin=e.xMin),`yMin`in e&&(this.yMin=e.yMin),`xMax`in e&&(this.xMax=e.xMax),`yMax`in e&&(this.yMax=e.yMax),`advanceWidth`in e&&(this.advanceWidth=e.advanceWidth),Object.defineProperty(this,"path",RB(this,e.path))},zB.prototype.addUnicode=function(e){this.unicodes.length===0&&(this.unicode=e),this.unicodes.push(e)},zB.prototype.getBoundingBox=function(){return this.path.getBoundingBox()},zB.prototype.getPath=function(e,t,n,r,i){e=e===void 0?0:e,t=t===void 0?0:t,n=n===void 0?72:n;var a,o;r||={};var s=r.xScale,c=r.yScale;if(r.hinting&&i&&i.hinting&&(o=this.path&&i.hinting.exec(this,n)),o)a=i.hinting.getCommands(o),e=Math.round(e),t=Math.round(t),s=c=1;else{a=this.path.commands;var l=1/(this.path.unitsPerEm||1e3)*n;s===void 0&&(s=l),c===void 0&&(c=l)}for(var u=new Lz,d=0;d<a.length;d+=1){var f=a[d];f.type===`M`?u.moveTo(e+f.x*s,t+-f.y*c):f.type===`L`?u.lineTo(e+f.x*s,t+-f.y*c):f.type===`Q`?u.quadraticCurveTo(e+f.x1*s,t+-f.y1*c,e+f.x*s,t+-f.y*c):f.type===`C`?u.curveTo(e+f.x1*s,t+-f.y1*c,e+f.x2*s,t+-f.y2*c,e+f.x*s,t+-f.y*c):f.type===`Z`&&u.closePath()}return u},zB.prototype.getContours=function(){if(this.points===void 0)return[];for(var e=[],t=[],n=0;n<this.points.length;n+=1){var r=this.points[n];t.push(r),r.lastPointOfContour&&(e.push(t),t=[])}return K.argument(t.length===0,`There are still points left in the current contour.`),e},zB.prototype.getMetrics=function(){for(var e=this.path.commands,t=[],n=[],r=0;r<e.length;r+=1){var i=e[r];i.type!==`Z`&&(t.push(i.x),n.push(i.y)),(i.type===`Q`||i.type===`C`)&&(t.push(i.x1),n.push(i.y1)),i.type===`C`&&(t.push(i.x2),n.push(i.y2))}var a={xMin:Math.min.apply(null,t),yMin:Math.min.apply(null,n),xMax:Math.max.apply(null,t),yMax:Math.max.apply(null,n),leftSideBearing:this.leftSideBearing};return isFinite(a.xMin)||(a.xMin=0),isFinite(a.xMax)||(a.xMax=this.advanceWidth),isFinite(a.yMin)||(a.yMin=0),isFinite(a.yMax)||(a.yMax=0),a.rightSideBearing=this.advanceWidth-a.leftSideBearing-(a.xMax-a.xMin),a},zB.prototype.draw=function(e,t,n,r,i){this.getPath(t,n,r,i).draw(e)},zB.prototype.drawPoints=function(e,t,n,r){function i(t,n,r,i){e.beginPath();for(var a=0;a<t.length;a+=1)e.moveTo(n+t[a].x*i,r+t[a].y*i),e.arc(n+t[a].x*i,r+t[a].y*i,2,0,Math.PI*2,!1);e.closePath(),e.fill()}t=t===void 0?0:t,n=n===void 0?0:n,r=r===void 0?24:r;for(var a=1/this.path.unitsPerEm*r,o=[],s=[],c=this.path,l=0;l<c.commands.length;l+=1){var u=c.commands[l];u.x!==void 0&&o.push({x:u.x,y:-u.y}),u.x1!==void 0&&s.push({x:u.x1,y:-u.y1}),u.x2!==void 0&&s.push({x:u.x2,y:-u.y2})}e.fillStyle=`blue`,i(o,t,n,a),e.fillStyle=`red`,i(s,t,n,a)},zB.prototype.drawMetrics=function(e,t,n,r){var i;t=t===void 0?0:t,n=n===void 0?0:n,r=r===void 0?24:r,i=1/this.path.unitsPerEm*r,e.lineWidth=1,e.strokeStyle=`black`,LB.line(e,t,-1e4,t,1e4),LB.line(e,-1e4,n,1e4,n);var a=this.xMin||0,o=this.yMin||0,s=this.xMax||0,c=this.yMax||0,l=this.advanceWidth||0;e.strokeStyle=`blue`,LB.line(e,t+a*i,-1e4,t+a*i,1e4),LB.line(e,t+s*i,-1e4,t+s*i,1e4),LB.line(e,-1e4,n+-o*i,1e4,n+-o*i),LB.line(e,-1e4,n+-c*i,1e4,n+-c*i),e.strokeStyle=`green`,LB.line(e,t+l*i,-1e4,t+l*i,1e4)};function BB(e,t,n){Object.defineProperty(e,t,{get:function(){return e.path,e[n]},set:function(t){e[n]=t},enumerable:!0,configurable:!0})}function VB(e,t){if(this.font=e,this.glyphs={},Array.isArray(t))for(var n=0;n<t.length;n++){var r=t[n];r.path.unitsPerEm=e.unitsPerEm,this.glyphs[n]=r}this.length=t&&t.length||0}VB.prototype.get=function(e){if(this.glyphs[e]===void 0){this.font._push(e),typeof this.glyphs[e]==`function`&&(this.glyphs[e]=this.glyphs[e]());var t=this.glyphs[e],n=this.font._IndexToUnicodeMap[e];if(n)for(var r=0;r<n.unicodes.length;r++)t.addUnicode(n.unicodes[r]);this.font.cffEncoding?this.font.isCIDFont?t.name=`gid`+e:t.name=this.font.cffEncoding.charset[e]:this.font.glyphNames.names&&(t.name=this.font.glyphNames.glyphIndexToName(e)),this.glyphs[e].advanceWidth=this.font._hmtxTableData[e].advanceWidth,this.glyphs[e].leftSideBearing=this.font._hmtxTableData[e].leftSideBearing}else typeof this.glyphs[e]==`function`&&(this.glyphs[e]=this.glyphs[e]());return this.glyphs[e]},VB.prototype.push=function(e,t){this.glyphs[e]=t,this.length++};function HB(e,t){return new zB({index:t,font:e})}function UB(e,t,n,r,i,a){return function(){var o=new zB({index:t,font:e});return o.path=function(){n(o,r,i);var t=a(e.glyphs,o);return t.unitsPerEm=e.unitsPerEm,t},BB(o,`xMin`,`_xMin`),BB(o,`xMax`,`_xMax`),BB(o,`yMin`,`_yMin`),BB(o,`yMax`,`_yMax`),o}}function WB(e,t,n,r){return function(){var i=new zB({index:t,font:e});return i.path=function(){var t=n(e,i,r);return t.unitsPerEm=e.unitsPerEm,t},i}}var GB={GlyphSet:VB,glyphLoader:HB,ttfGlyphLoader:UB,cffGlyphLoader:WB};function KB(e,t){if(e===t)return!0;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n+=1)if(!KB(e[n],t[n]))return!1;return!0}else return!1}function qB(e){return e.length<1240?107:e.length<33900?1131:32768}function JB(e,t,n){var r=[],i=[],a=Z.getCard16(e,t),o,s;if(a!==0){var c=Z.getByte(e,t+2);o=t+(a+1)*c+2;for(var l=t+3,u=0;u<a+1;u+=1)r.push(Z.getOffset(e,l,c)),l+=c;s=o+r[a]}else s=t+2;for(var d=0;d<r.length-1;d+=1){var f=Z.getBytes(e,o+r[d],o+r[d+1]);n&&(f=n(f)),i.push(f)}return{objects:i,startOffset:t,endOffset:s}}function YB(e,t){var n=[],r=Z.getCard16(e,t),i,a;if(r!==0){var o=Z.getByte(e,t+2);i=t+(r+1)*o+2;for(var s=t+3,c=0;c<r+1;c+=1)n.push(Z.getOffset(e,s,o)),s+=o;a=i+n[r]}else a=t+2;return{offsets:n,startOffset:t,endOffset:a}}function XB(e,t,n,r,i){var a=Z.getCard16(n,r),o=0;if(a!==0){var s=Z.getByte(n,r+2);o=r+(a+1)*s+2}var c=Z.getBytes(n,o+t[e],o+t[e+1]);return i&&(c=i(c)),c}function ZB(e){for(var t=``,n=15,r=[`0`,`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`,`.`,`E`,`E-`,null,`-`];;){var i=e.parseByte(),a=i>>4,o=i&15;if(a===n||(t+=r[a],o===n))break;t+=r[o]}return parseFloat(t)}function QB(e,t){var n,r,i,a;if(t===28)return n=e.parseByte(),r=e.parseByte(),n<<8|r;if(t===29)return n=e.parseByte(),r=e.parseByte(),i=e.parseByte(),a=e.parseByte(),n<<24|r<<16|i<<8|a;if(t===30)return ZB(e);if(t>=32&&t<=246)return t-139;if(t>=247&&t<=250)return n=e.parseByte(),(t-247)*256+n+108;if(t>=251&&t<=254)return n=e.parseByte(),-(t-251)*256-n-108;throw Error(`Invalid b0 `+t)}function $B(e){for(var t={},n=0;n<e.length;n+=1){var r=e[n][0],i=e[n][1],a=void 0;if(a=i.length===1?i[0]:i,t.hasOwnProperty(r)&&!isNaN(t[r]))throw Error(`Object `+t+` already has key `+r);t[r]=a}return t}function eV(e,t,n){t=t===void 0?0:t;var r=new Z.Parser(e,t),i=[],a=[];for(n=n===void 0?e.length:n;r.relativeOffset<n;){var o=r.parseByte();o<=21?(o===12&&(o=1200+r.parseByte()),i.push([o,a]),a=[]):a.push(QB(r,o))}return $B(i)}function tV(e,t){return t=t<=390?TB[t]:e[t-391],t}function nV(e,t,n){for(var r={},i,a=0;a<t.length;a+=1){var o=t[a];if(Array.isArray(o.type)){var s=[];s.length=o.type.length;for(var c=0;c<o.type.length;c++)i=e[o.op]===void 0?void 0:e[o.op][c],i===void 0&&(i=o.value!==void 0&&o.value[c]!==void 0?o.value[c]:null),o.type[c]===`SID`&&(i=tV(n,i)),s[c]=i;r[o.name]=s}else i=e[o.op],i===void 0&&(i=o.value===void 0?null:o.value),o.type===`SID`&&(i=tV(n,i)),r[o.name]=i}return r}function rV(e,t){var n={};return n.formatMajor=Z.getCard8(e,t),n.formatMinor=Z.getCard8(e,t+1),n.size=Z.getCard8(e,t+2),n.offsetSize=Z.getCard8(e,t+3),n.startOffset=t,n.endOffset=t+4,n}var iV=[{name:`version`,op:0,type:`SID`},{name:`notice`,op:1,type:`SID`},{name:`copyright`,op:1200,type:`SID`},{name:`fullName`,op:2,type:`SID`},{name:`familyName`,op:3,type:`SID`},{name:`weight`,op:4,type:`SID`},{name:`isFixedPitch`,op:1201,type:`number`,value:0},{name:`italicAngle`,op:1202,type:`number`,value:0},{name:`underlinePosition`,op:1203,type:`number`,value:-100},{name:`underlineThickness`,op:1204,type:`number`,value:50},{name:`paintType`,op:1205,type:`number`,value:0},{name:`charstringType`,op:1206,type:`number`,value:2},{name:`fontMatrix`,op:1207,type:[`real`,`real`,`real`,`real`,`real`,`real`],value:[.001,0,0,.001,0,0]},{name:`uniqueId`,op:13,type:`number`},{name:`fontBBox`,op:5,type:[`number`,`number`,`number`,`number`],value:[0,0,0,0]},{name:`strokeWidth`,op:1208,type:`number`,value:0},{name:`xuid`,op:14,type:[],value:null},{name:`charset`,op:15,type:`offset`,value:0},{name:`encoding`,op:16,type:`offset`,value:0},{name:`charStrings`,op:17,type:`offset`,value:0},{name:`private`,op:18,type:[`number`,`offset`],value:[0,0]},{name:`ros`,op:1230,type:[`SID`,`SID`,`number`]},{name:`cidFontVersion`,op:1231,type:`number`,value:0},{name:`cidFontRevision`,op:1232,type:`number`,value:0},{name:`cidFontType`,op:1233,type:`number`,value:0},{name:`cidCount`,op:1234,type:`number`,value:8720},{name:`uidBase`,op:1235,type:`number`},{name:`fdArray`,op:1236,type:`offset`},{name:`fdSelect`,op:1237,type:`offset`},{name:`fontName`,op:1238,type:`SID`}],aV=[{name:`subrs`,op:19,type:`offset`,value:0},{name:`defaultWidthX`,op:20,type:`number`,value:0},{name:`nominalWidthX`,op:21,type:`number`,value:0}];function oV(e,t){return nV(eV(e,0,e.byteLength),iV,t)}function sV(e,t,n,r){return nV(eV(e,t,n),aV,r)}function cV(e,t,n,r){for(var i=[],a=0;a<n.length;a+=1){var o=oV(new DataView(new Uint8Array(n[a]).buffer),r);o._subrs=[],o._subrsBias=0,o._defaultWidthX=0,o._nominalWidthX=0;var s=o.private[0],c=o.private[1];if(s!==0&&c!==0){var l=sV(e,c+t,s,r);o._defaultWidthX=l.defaultWidthX,o._nominalWidthX=l.nominalWidthX,l.subrs!==0&&(o._subrs=JB(e,c+l.subrs+t).objects,o._subrsBias=qB(o._subrs)),o._privateDict=l}i.push(o)}return i}function lV(e,t,n,r){var i,a,o=new Z.Parser(e,t);--n;var s=[`.notdef`],c=o.parseCard8();if(c===0)for(var l=0;l<n;l+=1)i=o.parseSID(),s.push(tV(r,i));else if(c===1)for(;s.length<=n;){i=o.parseSID(),a=o.parseCard8();for(var u=0;u<=a;u+=1)s.push(tV(r,i)),i+=1}else if(c===2)for(;s.length<=n;){i=o.parseSID(),a=o.parseCard16();for(var d=0;d<=a;d+=1)s.push(tV(r,i)),i+=1}else throw Error(`Unknown charset format `+c);return s}function uV(e,t,n){var r,i={},a=new Z.Parser(e,t),o=a.parseCard8();if(o===0)for(var s=a.parseCard8(),c=0;c<s;c+=1)r=a.parseCard8(),i[r]=c;else if(o===1){var l=a.parseCard8();r=1;for(var u=0;u<l;u+=1)for(var d=a.parseCard8(),f=a.parseCard8(),p=d;p<=d+f;p+=1)i[p]=r,r+=1}else throw Error(`Unknown encoding format `+o);return new jB(i,n)}function dV(e,t,n){var r,i,a,o,s=new Lz,c=[],l=0,u=!1,d=!1,f=0,p=0,m,h,g,_;if(e.isCIDFont){var v=e.tables.cff.topDict._fdSelect[t.index],y=e.tables.cff.topDict._fdArray[v];m=y._subrs,h=y._subrsBias,g=y._defaultWidthX,_=y._nominalWidthX}else m=e.tables.cff.topDict._subrs,h=e.tables.cff.topDict._subrsBias,g=e.tables.cff.topDict._defaultWidthX,_=e.tables.cff.topDict._nominalWidthX;var b=g;function x(e,t){d&&s.closePath(),s.moveTo(e,t),d=!0}function S(){c.length%2!=0&&!u&&(b=c.shift()+_),l+=c.length>>1,c.length=0,u=!0}function C(n){for(var g,v,y,w,ee,te,ne,re,ie,ae,oe,se,ce=0;ce<n.length;){var le=n[ce];switch(ce+=1,le){case 1:S();break;case 3:S();break;case 4:c.length>1&&!u&&(b=c.shift()+_,u=!0),p+=c.pop(),x(f,p);break;case 5:for(;c.length>0;)f+=c.shift(),p+=c.shift(),s.lineTo(f,p);break;case 6:for(;c.length>0&&(f+=c.shift(),s.lineTo(f,p),c.length!==0);)p+=c.shift(),s.lineTo(f,p);break;case 7:for(;c.length>0&&(p+=c.shift(),s.lineTo(f,p),c.length!==0);)f+=c.shift(),s.lineTo(f,p);break;case 8:for(;c.length>0;)r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o+c.shift(),s.curveTo(r,i,a,o,f,p);break;case 10:ee=c.pop()+h,te=m[ee],te&&C(te);break;case 11:return;case 12:switch(le=n[ce],ce+=1,le){case 35:r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),ne=a+c.shift(),re=o+c.shift(),ie=ne+c.shift(),ae=re+c.shift(),oe=ie+c.shift(),se=ae+c.shift(),f=oe+c.shift(),p=se+c.shift(),c.shift(),s.curveTo(r,i,a,o,ne,re),s.curveTo(ie,ae,oe,se,f,p);break;case 34:r=f+c.shift(),i=p,a=r+c.shift(),o=i+c.shift(),ne=a+c.shift(),re=o,ie=ne+c.shift(),ae=o,oe=ie+c.shift(),se=p,f=oe+c.shift(),s.curveTo(r,i,a,o,ne,re),s.curveTo(ie,ae,oe,se,f,p);break;case 36:r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),ne=a+c.shift(),re=o,ie=ne+c.shift(),ae=o,oe=ie+c.shift(),se=ae+c.shift(),f=oe+c.shift(),s.curveTo(r,i,a,o,ne,re),s.curveTo(ie,ae,oe,se,f,p);break;case 37:r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),ne=a+c.shift(),re=o+c.shift(),ie=ne+c.shift(),ae=re+c.shift(),oe=ie+c.shift(),se=ae+c.shift(),Math.abs(oe-f)>Math.abs(se-p)?f=oe+c.shift():p=se+c.shift(),s.curveTo(r,i,a,o,ne,re),s.curveTo(ie,ae,oe,se,f,p);break;default:console.log(`Glyph `+t.index+`: unknown operator 1200`+le),c.length=0}break;case 14:c.length>0&&!u&&(b=c.shift()+_,u=!0),d&&=(s.closePath(),!1);break;case 18:S();break;case 19:case 20:S(),ce+=l+7>>3;break;case 21:c.length>2&&!u&&(b=c.shift()+_,u=!0),p+=c.pop(),f+=c.pop(),x(f,p);break;case 22:c.length>1&&!u&&(b=c.shift()+_,u=!0),f+=c.pop(),x(f,p);break;case 23:S();break;case 24:for(;c.length>2;)r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o+c.shift(),s.curveTo(r,i,a,o,f,p);f+=c.shift(),p+=c.shift(),s.lineTo(f,p);break;case 25:for(;c.length>6;)f+=c.shift(),p+=c.shift(),s.lineTo(f,p);r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o+c.shift(),s.curveTo(r,i,a,o,f,p);break;case 26:for(c.length%2&&(f+=c.shift());c.length>0;)r=f,i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a,p=o+c.shift(),s.curveTo(r,i,a,o,f,p);break;case 27:for(c.length%2&&(p+=c.shift());c.length>0;)r=f+c.shift(),i=p,a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o,s.curveTo(r,i,a,o,f,p);break;case 28:g=n[ce],v=n[ce+1],c.push((g<<24|v<<16)>>16),ce+=2;break;case 29:ee=c.pop()+e.gsubrsBias,te=e.gsubrs[ee],te&&C(te);break;case 30:for(;c.length>0&&(r=f,i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o+(c.length===1?c.shift():0),s.curveTo(r,i,a,o,f,p),c.length!==0);)r=f+c.shift(),i=p,a=r+c.shift(),o=i+c.shift(),p=o+c.shift(),f=a+(c.length===1?c.shift():0),s.curveTo(r,i,a,o,f,p);break;case 31:for(;c.length>0&&(r=f+c.shift(),i=p,a=r+c.shift(),o=i+c.shift(),p=o+c.shift(),f=a+(c.length===1?c.shift():0),s.curveTo(r,i,a,o,f,p),c.length!==0);)r=f,i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o+(c.length===1?c.shift():0),s.curveTo(r,i,a,o,f,p);break;default:le<32?console.log(`Glyph `+t.index+`: unknown operator `+le):le<247?c.push(le-139):le<251?(g=n[ce],ce+=1,c.push((le-247)*256+g+108)):le<255?(g=n[ce],ce+=1,c.push(-(le-251)*256-g-108)):(g=n[ce],v=n[ce+1],y=n[ce+2],w=n[ce+3],ce+=4,c.push((g<<24|v<<16|y<<8|w)/65536))}}}return C(n),t.advanceWidth=b,s}function fV(e,t,n,r){var i=[],a,o=new Z.Parser(e,t),s=o.parseCard8();if(s===0)for(var c=0;c<n;c++){if(a=o.parseCard8(),a>=r)throw Error(`CFF table CID Font FDSelect has bad FD index value `+a+` (FD count `+r+`)`);i.push(a)}else if(s===3){var l=o.parseCard16(),u=o.parseCard16();if(u!==0)throw Error(`CFF Table CID Font FDSelect format 3 range has bad initial GID `+u);for(var d,f=0;f<l;f++){if(a=o.parseCard8(),d=o.parseCard16(),a>=r)throw Error(`CFF table CID Font FDSelect has bad FD index value `+a+` (FD count `+r+`)`);if(d>n)throw Error(`CFF Table CID Font FDSelect format 3 range has bad GID `+d);for(;u<d;u++)i.push(a);u=d}if(d!==n)throw Error(`CFF Table CID Font FDSelect format 3 range has bad final GID `+d)}else throw Error(`CFF Table CID Font FDSelect table has unsupported format `+s);return i}function pV(e,t,n,r){n.tables.cff={};var i=JB(e,JB(e,rV(e,t).endOffset,Z.bytesToString).endOffset),a=JB(e,i.endOffset,Z.bytesToString);n.gsubrs=JB(e,a.endOffset).objects,n.gsubrsBias=qB(n.gsubrs);var o=cV(e,t,i.objects,a.objects);if(o.length!==1)throw Error(`CFF table has too many fonts in 'FontSet' - count of fonts NameIndex.length = `+o.length);var s=o[0];if(n.tables.cff.topDict=s,s._privateDict&&(n.defaultWidthX=s._privateDict.defaultWidthX,n.nominalWidthX=s._privateDict.nominalWidthX),s.ros[0]!==void 0&&s.ros[1]!==void 0&&(n.isCIDFont=!0),n.isCIDFont){var c=s.fdArray,l=s.fdSelect;if(c===0||l===0)throw Error(`Font is marked as a CID font, but FDArray and/or FDSelect information is missing`);c+=t;var u=cV(e,t,JB(e,c).objects,a.objects);s._fdArray=u,l+=t,s._fdSelect=fV(e,l,n.numGlyphs,u.length)}var d=t+s.private[1],f=sV(e,d,s.private[0],a.objects);n.defaultWidthX=f.defaultWidthX,n.nominalWidthX=f.nominalWidthX,f.subrs===0?(n.subrs=[],n.subrsBias=0):(n.subrs=JB(e,d+f.subrs).objects,n.subrsBias=qB(n.subrs));var p;r.lowMemory?(p=YB(e,t+s.charStrings),n.nGlyphs=p.offsets.length):(p=JB(e,t+s.charStrings),n.nGlyphs=p.objects.length);var m=lV(e,t+s.charset,n.nGlyphs,a.objects);if(s.encoding===0?n.cffEncoding=new jB(EB,m):s.encoding===1?n.cffEncoding=new jB(DB,m):n.cffEncoding=uV(e,t+s.encoding,m),n.encoding=n.encoding||n.cffEncoding,n.glyphs=new GB.GlyphSet(n),r.lowMemory)n._push=function(r){var i=XB(r,p.offsets,e,t+s.charStrings);n.glyphs.push(r,GB.cffGlyphLoader(n,r,dV,i))};else for(var h=0;h<n.nGlyphs;h+=1){var g=p.objects[h];n.glyphs.push(h,GB.cffGlyphLoader(n,h,dV,g))}}function mV(e,t){var n,r=TB.indexOf(e);return r>=0&&(n=r),r=t.indexOf(e),r>=0?n=r+TB.length:(n=TB.length+t.length,t.push(e)),n}function hV(){return new Y.Record(`Header`,[{name:`major`,type:`Card8`,value:1},{name:`minor`,type:`Card8`,value:0},{name:`hdrSize`,type:`Card8`,value:4},{name:`major`,type:`Card8`,value:1}])}function gV(e){var t=new Y.Record(`Name INDEX`,[{name:`names`,type:`INDEX`,value:[]}]);t.names=[];for(var n=0;n<e.length;n+=1)t.names.push({name:`name_`+n,type:`NAME`,value:e[n]});return t}function _V(e,t,n){for(var r={},i=0;i<e.length;i+=1){var a=e[i],o=t[a.name];o!==void 0&&!KB(o,a.value)&&(a.type===`SID`&&(o=mV(o,n)),r[a.op]={name:a.name,type:a.type,value:o})}return r}function vV(e,t){var n=new Y.Record(`Top DICT`,[{name:`dict`,type:`DICT`,value:{}}]);return n.dict=_V(iV,e,t),n}function yV(e){var t=new Y.Record(`Top DICT INDEX`,[{name:`topDicts`,type:`INDEX`,value:[]}]);return t.topDicts=[{name:`topDict_0`,type:`TABLE`,value:e}],t}function bV(e){var t=new Y.Record(`String INDEX`,[{name:`strings`,type:`INDEX`,value:[]}]);t.strings=[];for(var n=0;n<e.length;n+=1)t.strings.push({name:`string_`+n,type:`STRING`,value:e[n]});return t}function xV(){return new Y.Record(`Global Subr INDEX`,[{name:`subrs`,type:`INDEX`,value:[]}])}function SV(e,t){for(var n=new Y.Record(`Charsets`,[{name:`format`,type:`Card8`,value:0}]),r=0;r<e.length;r+=1){var i=e[r],a=mV(i,t);n.fields.push({name:`glyph_`+r,type:`SID`,value:a})}return n}function CV(e){var t=[],n=e.path;t.push({name:`width`,type:`NUMBER`,value:e.advanceWidth});for(var r=0,i=0,a=0;a<n.commands.length;a+=1){var o=void 0,s=void 0,c=n.commands[a];if(c.type===`Q`){var l=1/3,u=2/3;c={type:`C`,x:c.x,y:c.y,x1:Math.round(l*r+u*c.x1),y1:Math.round(l*i+u*c.y1),x2:Math.round(l*c.x+u*c.x1),y2:Math.round(l*c.y+u*c.y1)}}if(c.type===`M`)o=Math.round(c.x-r),s=Math.round(c.y-i),t.push({name:`dx`,type:`NUMBER`,value:o}),t.push({name:`dy`,type:`NUMBER`,value:s}),t.push({name:`rmoveto`,type:`OP`,value:21}),r=Math.round(c.x),i=Math.round(c.y);else if(c.type===`L`)o=Math.round(c.x-r),s=Math.round(c.y-i),t.push({name:`dx`,type:`NUMBER`,value:o}),t.push({name:`dy`,type:`NUMBER`,value:s}),t.push({name:`rlineto`,type:`OP`,value:5}),r=Math.round(c.x),i=Math.round(c.y);else if(c.type===`C`){var d=Math.round(c.x1-r),f=Math.round(c.y1-i),p=Math.round(c.x2-c.x1),m=Math.round(c.y2-c.y1);o=Math.round(c.x-c.x2),s=Math.round(c.y-c.y2),t.push({name:`dx1`,type:`NUMBER`,value:d}),t.push({name:`dy1`,type:`NUMBER`,value:f}),t.push({name:`dx2`,type:`NUMBER`,value:p}),t.push({name:`dy2`,type:`NUMBER`,value:m}),t.push({name:`dx`,type:`NUMBER`,value:o}),t.push({name:`dy`,type:`NUMBER`,value:s}),t.push({name:`rrcurveto`,type:`OP`,value:8}),r=Math.round(c.x),i=Math.round(c.y)}}return t.push({name:`endchar`,type:`OP`,value:14}),t}function wV(e){for(var t=new Y.Record(`CharStrings INDEX`,[{name:`charStrings`,type:`INDEX`,value:[]}]),n=0;n<e.length;n+=1){var r=e.get(n),i=CV(r);t.charStrings.push({name:r.name,type:`CHARSTRING`,value:i})}return t}function TV(e,t){var n=new Y.Record(`Private DICT`,[{name:`dict`,type:`DICT`,value:{}}]);return n.dict=_V(aV,e,t),n}function EV(e,t){for(var n=new Y.Table(`CFF `,[{name:`header`,type:`RECORD`},{name:`nameIndex`,type:`RECORD`},{name:`topDictIndex`,type:`RECORD`},{name:`stringIndex`,type:`RECORD`},{name:`globalSubrIndex`,type:`RECORD`},{name:`charsets`,type:`RECORD`},{name:`charStringsIndex`,type:`RECORD`},{name:`privateDict`,type:`RECORD`}]),r=1/t.unitsPerEm,i={version:t.version,fullName:t.fullName,familyName:t.familyName,weight:t.weightName,fontBBox:t.fontBBox||[0,0,0,0],fontMatrix:[r,0,0,r,0,0],charset:999,encoding:0,charStrings:999,private:[0,999]},a={},o=[],s,c=1;c<e.length;c+=1)s=e.get(c),o.push(s.name);var l=[];n.header=hV(),n.nameIndex=gV([t.postScriptName]);var u=vV(i,l);return n.topDictIndex=yV(u),n.globalSubrIndex=xV(),n.charsets=SV(o,l),n.charStringsIndex=wV(e),n.privateDict=TV(a,l),n.stringIndex=bV(l),i.charset=n.header.sizeOf()+n.nameIndex.sizeOf()+n.topDictIndex.sizeOf()+n.stringIndex.sizeOf()+n.globalSubrIndex.sizeOf(),i.encoding=0,i.charStrings=i.charset+n.charsets.sizeOf(),i.private[1]=i.charStrings+n.charStringsIndex.sizeOf(),u=vV(i,l),n.topDictIndex=yV(u),n}var DV={parse:pV,make:EV};function OV(e,t){var n={},r=new Z.Parser(e,t);return n.version=r.parseVersion(),n.fontRevision=Math.round(r.parseFixed()*1e3)/1e3,n.checkSumAdjustment=r.parseULong(),n.magicNumber=r.parseULong(),K.argument(n.magicNumber===1594834165,`Font header has wrong magic number.`),n.flags=r.parseUShort(),n.unitsPerEm=r.parseUShort(),n.created=r.parseLongDateTime(),n.modified=r.parseLongDateTime(),n.xMin=r.parseShort(),n.yMin=r.parseShort(),n.xMax=r.parseShort(),n.yMax=r.parseShort(),n.macStyle=r.parseUShort(),n.lowestRecPPEM=r.parseUShort(),n.fontDirectionHint=r.parseShort(),n.indexToLocFormat=r.parseShort(),n.glyphDataFormat=r.parseShort(),n}function kV(e){var t=Math.round(new Date().getTime()/1e3)+2082844800,n=t;return e.createdTimestamp&&(n=e.createdTimestamp+2082844800),new Y.Table(`head`,[{name:`version`,type:`FIXED`,value:65536},{name:`fontRevision`,type:`FIXED`,value:65536},{name:`checkSumAdjustment`,type:`ULONG`,value:0},{name:`magicNumber`,type:`ULONG`,value:1594834165},{name:`flags`,type:`USHORT`,value:0},{name:`unitsPerEm`,type:`USHORT`,value:1e3},{name:`created`,type:`LONGDATETIME`,value:n},{name:`modified`,type:`LONGDATETIME`,value:t},{name:`xMin`,type:`SHORT`,value:0},{name:`yMin`,type:`SHORT`,value:0},{name:`xMax`,type:`SHORT`,value:0},{name:`yMax`,type:`SHORT`,value:0},{name:`macStyle`,type:`USHORT`,value:0},{name:`lowestRecPPEM`,type:`USHORT`,value:0},{name:`fontDirectionHint`,type:`SHORT`,value:2},{name:`indexToLocFormat`,type:`SHORT`,value:0},{name:`glyphDataFormat`,type:`SHORT`,value:0}],e)}var AV={parse:OV,make:kV};function jV(e,t){var n={},r=new Z.Parser(e,t);return n.version=r.parseVersion(),n.ascender=r.parseShort(),n.descender=r.parseShort(),n.lineGap=r.parseShort(),n.advanceWidthMax=r.parseUShort(),n.minLeftSideBearing=r.parseShort(),n.minRightSideBearing=r.parseShort(),n.xMaxExtent=r.parseShort(),n.caretSlopeRise=r.parseShort(),n.caretSlopeRun=r.parseShort(),n.caretOffset=r.parseShort(),r.relativeOffset+=8,n.metricDataFormat=r.parseShort(),n.numberOfHMetrics=r.parseUShort(),n}function MV(e){return new Y.Table(`hhea`,[{name:`version`,type:`FIXED`,value:65536},{name:`ascender`,type:`FWORD`,value:0},{name:`descender`,type:`FWORD`,value:0},{name:`lineGap`,type:`FWORD`,value:0},{name:`advanceWidthMax`,type:`UFWORD`,value:0},{name:`minLeftSideBearing`,type:`FWORD`,value:0},{name:`minRightSideBearing`,type:`FWORD`,value:0},{name:`xMaxExtent`,type:`FWORD`,value:0},{name:`caretSlopeRise`,type:`SHORT`,value:1},{name:`caretSlopeRun`,type:`SHORT`,value:0},{name:`caretOffset`,type:`SHORT`,value:0},{name:`reserved1`,type:`SHORT`,value:0},{name:`reserved2`,type:`SHORT`,value:0},{name:`reserved3`,type:`SHORT`,value:0},{name:`reserved4`,type:`SHORT`,value:0},{name:`metricDataFormat`,type:`SHORT`,value:0},{name:`numberOfHMetrics`,type:`USHORT`,value:0}],e)}var NV={parse:jV,make:MV};function PV(e,t,n,r,i){for(var a,o,s=new Z.Parser(e,t),c=0;c<r;c+=1){c<n&&(a=s.parseUShort(),o=s.parseShort());var l=i.get(c);l.advanceWidth=a,l.leftSideBearing=o}}function FV(e,t,n,r,i){e._hmtxTableData={};for(var a,o,s=new Z.Parser(t,n),c=0;c<i;c+=1)c<r&&(a=s.parseUShort(),o=s.parseShort()),e._hmtxTableData[c]={advanceWidth:a,leftSideBearing:o}}function IV(e,t,n,r,i,a,o){o.lowMemory?FV(e,t,n,r,i):PV(t,n,r,i,a)}function LV(e){for(var t=new Y.Table(`hmtx`,[]),n=0;n<e.length;n+=1){var r=e.get(n),i=r.advanceWidth||0,a=r.leftSideBearing||0;t.fields.push({name:`advanceWidth_`+n,type:`USHORT`,value:i}),t.fields.push({name:`leftSideBearing_`+n,type:`SHORT`,value:a})}return t}var RV={parse:IV,make:LV};function zV(e){for(var t=new Y.Table(`ltag`,[{name:`version`,type:`ULONG`,value:1},{name:`flags`,type:`ULONG`,value:0},{name:`numTags`,type:`ULONG`,value:e.length}]),n=``,r=12+e.length*4,i=0;i<e.length;++i){var a=n.indexOf(e[i]);a<0&&(a=n.length,n+=e[i]),t.fields.push({name:`offset `+i,type:`USHORT`,value:r+a}),t.fields.push({name:`length `+i,type:`USHORT`,value:e[i].length})}return t.fields.push({name:`stringPool`,type:`CHARARRAY`,value:n}),t}function BV(e,t){var n=new Z.Parser(e,t),r=n.parseULong();K.argument(r===1,`Unsupported ltag table version.`),n.skip(`uLong`,1);for(var i=n.parseULong(),a=[],o=0;o<i;o++){for(var s=``,c=t+n.parseUShort(),l=n.parseUShort(),u=c;u<c+l;++u)s+=String.fromCharCode(e.getInt8(u));a.push(s)}return a}var VV={make:zV,parse:BV};function HV(e,t){var n={},r=new Z.Parser(e,t);return n.version=r.parseVersion(),n.numGlyphs=r.parseUShort(),n.version===1&&(n.maxPoints=r.parseUShort(),n.maxContours=r.parseUShort(),n.maxCompositePoints=r.parseUShort(),n.maxCompositeContours=r.parseUShort(),n.maxZones=r.parseUShort(),n.maxTwilightPoints=r.parseUShort(),n.maxStorage=r.parseUShort(),n.maxFunctionDefs=r.parseUShort(),n.maxInstructionDefs=r.parseUShort(),n.maxStackElements=r.parseUShort(),n.maxSizeOfInstructions=r.parseUShort(),n.maxComponentElements=r.parseUShort(),n.maxComponentDepth=r.parseUShort()),n}function UV(e){return new Y.Table(`maxp`,[{name:`version`,type:`FIXED`,value:20480},{name:`numGlyphs`,type:`USHORT`,value:e}])}var WV={parse:HV,make:UV},GV=[`copyright`,`fontFamily`,`fontSubfamily`,`uniqueID`,`fullName`,`version`,`postScriptName`,`trademark`,`manufacturer`,`designer`,`description`,`manufacturerURL`,`designerURL`,`license`,`licenseURL`,`reserved`,`preferredFamily`,`preferredSubfamily`,`compatibleFullName`,`sampleText`,`postScriptFindFontName`,`wwsFamily`,`wwsSubfamily`],KV={0:`en`,1:`fr`,2:`de`,3:`it`,4:`nl`,5:`sv`,6:`es`,7:`da`,8:`pt`,9:`no`,10:`he`,11:`ja`,12:`ar`,13:`fi`,14:`el`,15:`is`,16:`mt`,17:`tr`,18:`hr`,19:`zh-Hant`,20:`ur`,21:`hi`,22:`th`,23:`ko`,24:`lt`,25:`pl`,26:`hu`,27:`es`,28:`lv`,29:`se`,30:`fo`,31:`fa`,32:`ru`,33:`zh`,34:`nl-BE`,35:`ga`,36:`sq`,37:`ro`,38:`cz`,39:`sk`,40:`si`,41:`yi`,42:`sr`,43:`mk`,44:`bg`,45:`uk`,46:`be`,47:`uz`,48:`kk`,49:`az-Cyrl`,50:`az-Arab`,51:`hy`,52:`ka`,53:`mo`,54:`ky`,55:`tg`,56:`tk`,57:`mn-CN`,58:`mn`,59:`ps`,60:`ks`,61:`ku`,62:`sd`,63:`bo`,64:`ne`,65:`sa`,66:`mr`,67:`bn`,68:`as`,69:`gu`,70:`pa`,71:`or`,72:`ml`,73:`kn`,74:`ta`,75:`te`,76:`si`,77:`my`,78:`km`,79:`lo`,80:`vi`,81:`id`,82:`tl`,83:`ms`,84:`ms-Arab`,85:`am`,86:`ti`,87:`om`,88:`so`,89:`sw`,90:`rw`,91:`rn`,92:`ny`,93:`mg`,94:`eo`,128:`cy`,129:`eu`,130:`ca`,131:`la`,132:`qu`,133:`gn`,134:`ay`,135:`tt`,136:`ug`,137:`dz`,138:`jv`,139:`su`,140:`gl`,141:`af`,142:`br`,143:`iu`,144:`gd`,145:`gv`,146:`ga`,147:`to`,148:`el-polyton`,149:`kl`,150:`az`,151:`nn`},qV={0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:5,11:1,12:4,13:0,14:6,15:0,16:0,17:0,18:0,19:2,20:4,21:9,22:21,23:3,24:29,25:29,26:29,27:29,28:29,29:0,30:0,31:4,32:7,33:25,34:0,35:0,36:0,37:0,38:29,39:29,40:0,41:5,42:7,43:7,44:7,45:7,46:7,47:7,48:7,49:7,50:4,51:24,52:23,53:7,54:7,55:7,56:7,57:27,58:7,59:4,60:4,61:4,62:4,63:26,64:9,65:9,66:9,67:13,68:13,69:11,70:10,71:12,72:17,73:16,74:14,75:15,76:18,77:19,78:20,79:22,80:30,81:0,82:0,83:0,84:4,85:28,86:28,87:28,88:0,89:0,90:0,91:0,92:0,93:0,94:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:7,136:4,137:26,138:0,139:0,140:0,141:0,142:0,143:28,144:0,145:0,146:0,147:0,148:6,149:0,150:0,151:0},JV={1078:`af`,1052:`sq`,1156:`gsw`,1118:`am`,5121:`ar-DZ`,15361:`ar-BH`,3073:`ar`,2049:`ar-IQ`,11265:`ar-JO`,13313:`ar-KW`,12289:`ar-LB`,4097:`ar-LY`,6145:`ary`,8193:`ar-OM`,16385:`ar-QA`,1025:`ar-SA`,10241:`ar-SY`,7169:`aeb`,14337:`ar-AE`,9217:`ar-YE`,1067:`hy`,1101:`as`,2092:`az-Cyrl`,1068:`az`,1133:`ba`,1069:`eu`,1059:`be`,2117:`bn`,1093:`bn-IN`,8218:`bs-Cyrl`,5146:`bs`,1150:`br`,1026:`bg`,1027:`ca`,3076:`zh-HK`,5124:`zh-MO`,2052:`zh`,4100:`zh-SG`,1028:`zh-TW`,1155:`co`,1050:`hr`,4122:`hr-BA`,1029:`cs`,1030:`da`,1164:`prs`,1125:`dv`,2067:`nl-BE`,1043:`nl`,3081:`en-AU`,10249:`en-BZ`,4105:`en-CA`,9225:`en-029`,16393:`en-IN`,6153:`en-IE`,8201:`en-JM`,17417:`en-MY`,5129:`en-NZ`,13321:`en-PH`,18441:`en-SG`,7177:`en-ZA`,11273:`en-TT`,2057:`en-GB`,1033:`en`,12297:`en-ZW`,1061:`et`,1080:`fo`,1124:`fil`,1035:`fi`,2060:`fr-BE`,3084:`fr-CA`,1036:`fr`,5132:`fr-LU`,6156:`fr-MC`,4108:`fr-CH`,1122:`fy`,1110:`gl`,1079:`ka`,3079:`de-AT`,1031:`de`,5127:`de-LI`,4103:`de-LU`,2055:`de-CH`,1032:`el`,1135:`kl`,1095:`gu`,1128:`ha`,1037:`he`,1081:`hi`,1038:`hu`,1039:`is`,1136:`ig`,1057:`id`,1117:`iu`,2141:`iu-Latn`,2108:`ga`,1076:`xh`,1077:`zu`,1040:`it`,2064:`it-CH`,1041:`ja`,1099:`kn`,1087:`kk`,1107:`km`,1158:`quc`,1159:`rw`,1089:`sw`,1111:`kok`,1042:`ko`,1088:`ky`,1108:`lo`,1062:`lv`,1063:`lt`,2094:`dsb`,1134:`lb`,1071:`mk`,2110:`ms-BN`,1086:`ms`,1100:`ml`,1082:`mt`,1153:`mi`,1146:`arn`,1102:`mr`,1148:`moh`,1104:`mn`,2128:`mn-CN`,1121:`ne`,1044:`nb`,2068:`nn`,1154:`oc`,1096:`or`,1123:`ps`,1045:`pl`,1046:`pt`,2070:`pt-PT`,1094:`pa`,1131:`qu-BO`,2155:`qu-EC`,3179:`qu`,1048:`ro`,1047:`rm`,1049:`ru`,9275:`smn`,4155:`smj-NO`,5179:`smj`,3131:`se-FI`,1083:`se`,2107:`se-SE`,8251:`sms`,6203:`sma-NO`,7227:`sms`,1103:`sa`,7194:`sr-Cyrl-BA`,3098:`sr`,6170:`sr-Latn-BA`,2074:`sr-Latn`,1132:`nso`,1074:`tn`,1115:`si`,1051:`sk`,1060:`sl`,11274:`es-AR`,16394:`es-BO`,13322:`es-CL`,9226:`es-CO`,5130:`es-CR`,7178:`es-DO`,12298:`es-EC`,17418:`es-SV`,4106:`es-GT`,18442:`es-HN`,2058:`es-MX`,19466:`es-NI`,6154:`es-PA`,15370:`es-PY`,10250:`es-PE`,20490:`es-PR`,3082:`es`,1034:`es`,21514:`es-US`,14346:`es-UY`,8202:`es-VE`,2077:`sv-FI`,1053:`sv`,1114:`syr`,1064:`tg`,2143:`tzm`,1097:`ta`,1092:`tt`,1098:`te`,1054:`th`,1105:`bo`,1055:`tr`,1090:`tk`,1152:`ug`,1058:`uk`,1070:`hsb`,1056:`ur`,2115:`uz-Cyrl`,1091:`uz`,1066:`vi`,1106:`cy`,1160:`wo`,1157:`sah`,1144:`ii`,1130:`yo`};function YV(e,t,n){switch(e){case 0:if(t===65535)return`und`;if(n)return n[t];break;case 1:return KV[t];case 3:return JV[t]}}var XV=`utf-16`,ZV={0:`macintosh`,1:`x-mac-japanese`,2:`x-mac-chinesetrad`,3:`x-mac-korean`,6:`x-mac-greek`,7:`x-mac-cyrillic`,9:`x-mac-devanagai`,10:`x-mac-gurmukhi`,11:`x-mac-gujarati`,12:`x-mac-oriya`,13:`x-mac-bengali`,14:`x-mac-tamil`,15:`x-mac-telugu`,16:`x-mac-kannada`,17:`x-mac-malayalam`,18:`x-mac-sinhalese`,19:`x-mac-burmese`,20:`x-mac-khmer`,21:`x-mac-thai`,22:`x-mac-lao`,23:`x-mac-georgian`,24:`x-mac-armenian`,25:`x-mac-chinesesimp`,26:`x-mac-tibetan`,27:`x-mac-mongolian`,28:`x-mac-ethiopic`,29:`x-mac-ce`,30:`x-mac-vietnamese`,31:`x-mac-extarabic`},QV={15:`x-mac-icelandic`,17:`x-mac-turkish`,18:`x-mac-croatian`,24:`x-mac-ce`,25:`x-mac-ce`,26:`x-mac-ce`,27:`x-mac-ce`,28:`x-mac-ce`,30:`x-mac-icelandic`,37:`x-mac-romanian`,38:`x-mac-ce`,39:`x-mac-ce`,40:`x-mac-ce`,143:`x-mac-inuit`,146:`x-mac-gaelic`};function $V(e,t,n){switch(e){case 0:return XV;case 1:return QV[n]||ZV[t];case 3:if(t===1||t===10)return XV;break}}function eH(e,t,n){for(var r={},i=new Z.Parser(e,t),a=i.parseUShort(),o=i.parseUShort(),s=i.offset+i.parseUShort(),c=0;c<o;c++){var l=i.parseUShort(),u=i.parseUShort(),d=i.parseUShort(),f=i.parseUShort(),p=GV[f]||f,m=i.parseUShort(),h=i.parseUShort(),g=YV(l,d,n),_=$V(l,u,d);if(_!==void 0&&g!==void 0){var v=void 0;if(v=_===XV?Hz.UTF16(e,s+h,m):Hz.MACSTRING(e,s+h,m,_),v){var y=r[p];y===void 0&&(y=r[p]={}),y[g]=v}}}return a===1&&i.parseUShort(),r}function tH(e){var t={};for(var n in e)t[e[n]]=parseInt(n);return t}function nH(e,t,n,r,i,a){return new Y.Record(`NameRecord`,[{name:`platformID`,type:`USHORT`,value:e},{name:`encodingID`,type:`USHORT`,value:t},{name:`languageID`,type:`USHORT`,value:n},{name:`nameID`,type:`USHORT`,value:r},{name:`length`,type:`USHORT`,value:i},{name:`offset`,type:`USHORT`,value:a}])}function rH(e,t){var n=e.length,r=t.length-n+1;loop:for(var i=0;i<r;i++)for(;i<r;i++){for(var a=0;a<n;a++)if(t[i+a]!==e[a])continue loop;return i}return-1}function iH(e,t){var n=rH(e,t);if(n<0){n=t.length;for(var r=0,i=e.length;r<i;++r)t.push(e[r])}return n}function aH(e,t){var n,r=[],i={},a=tH(GV);for(var o in e){var s=a[o];if(s===void 0&&(s=o),n=parseInt(s),isNaN(n))throw Error(`Name table entry "`+o+`" does not exist, see nameTableNames for complete list.`);i[n]=e[o],r.push(n)}for(var c=tH(KV),l=tH(JV),u=[],d=[],f=0;f<r.length;f++){n=r[f];var p=i[n];for(var m in p){var h=p[m],g=1,_=c[m],v=qV[_],y=$V(g,v,_),b=q.MACSTRING(h,y);b===void 0&&(g=0,_=t.indexOf(m),_<0&&(_=t.length,t.push(m)),v=4,b=q.UTF16(h));var x=iH(b,d);u.push(nH(g,v,_,n,b.length,x));var S=l[m];if(S!==void 0){var C=q.UTF16(h),w=iH(C,d);u.push(nH(3,1,S,n,C.length,w))}}}u.sort(function(e,t){return e.platformID-t.platformID||e.encodingID-t.encodingID||e.languageID-t.languageID||e.nameID-t.nameID});for(var ee=new Y.Table(`name`,[{name:`format`,type:`USHORT`,value:0},{name:`count`,type:`USHORT`,value:u.length},{name:`stringOffset`,type:`USHORT`,value:6+u.length*12}]),te=0;te<u.length;te++)ee.fields.push({name:`record_`+te,type:`RECORD`,value:u[te]});return ee.fields.push({name:`strings`,type:`LITERAL`,value:d}),ee}var oH={parse:eH,make:aH},sH=[{begin:0,end:127},{begin:128,end:255},{begin:256,end:383},{begin:384,end:591},{begin:592,end:687},{begin:688,end:767},{begin:768,end:879},{begin:880,end:1023},{begin:11392,end:11519},{begin:1024,end:1279},{begin:1328,end:1423},{begin:1424,end:1535},{begin:42240,end:42559},{begin:1536,end:1791},{begin:1984,end:2047},{begin:2304,end:2431},{begin:2432,end:2559},{begin:2560,end:2687},{begin:2688,end:2815},{begin:2816,end:2943},{begin:2944,end:3071},{begin:3072,end:3199},{begin:3200,end:3327},{begin:3328,end:3455},{begin:3584,end:3711},{begin:3712,end:3839},{begin:4256,end:4351},{begin:6912,end:7039},{begin:4352,end:4607},{begin:7680,end:7935},{begin:7936,end:8191},{begin:8192,end:8303},{begin:8304,end:8351},{begin:8352,end:8399},{begin:8400,end:8447},{begin:8448,end:8527},{begin:8528,end:8591},{begin:8592,end:8703},{begin:8704,end:8959},{begin:8960,end:9215},{begin:9216,end:9279},{begin:9280,end:9311},{begin:9312,end:9471},{begin:9472,end:9599},{begin:9600,end:9631},{begin:9632,end:9727},{begin:9728,end:9983},{begin:9984,end:10175},{begin:12288,end:12351},{begin:12352,end:12447},{begin:12448,end:12543},{begin:12544,end:12591},{begin:12592,end:12687},{begin:43072,end:43135},{begin:12800,end:13055},{begin:13056,end:13311},{begin:44032,end:55215},{begin:55296,end:57343},{begin:67840,end:67871},{begin:19968,end:40959},{begin:57344,end:63743},{begin:12736,end:12783},{begin:64256,end:64335},{begin:64336,end:65023},{begin:65056,end:65071},{begin:65040,end:65055},{begin:65104,end:65135},{begin:65136,end:65279},{begin:65280,end:65519},{begin:65520,end:65535},{begin:3840,end:4095},{begin:1792,end:1871},{begin:1920,end:1983},{begin:3456,end:3583},{begin:4096,end:4255},{begin:4608,end:4991},{begin:5024,end:5119},{begin:5120,end:5759},{begin:5760,end:5791},{begin:5792,end:5887},{begin:6016,end:6143},{begin:6144,end:6319},{begin:10240,end:10495},{begin:40960,end:42127},{begin:5888,end:5919},{begin:66304,end:66351},{begin:66352,end:66383},{begin:66560,end:66639},{begin:118784,end:119039},{begin:119808,end:120831},{begin:1044480,end:1048573},{begin:65024,end:65039},{begin:917504,end:917631},{begin:6400,end:6479},{begin:6480,end:6527},{begin:6528,end:6623},{begin:6656,end:6687},{begin:11264,end:11359},{begin:11568,end:11647},{begin:19904,end:19967},{begin:43008,end:43055},{begin:65536,end:65663},{begin:65856,end:65935},{begin:66432,end:66463},{begin:66464,end:66527},{begin:66640,end:66687},{begin:66688,end:66735},{begin:67584,end:67647},{begin:68096,end:68191},{begin:119552,end:119647},{begin:73728,end:74751},{begin:119648,end:119679},{begin:7040,end:7103},{begin:7168,end:7247},{begin:7248,end:7295},{begin:43136,end:43231},{begin:43264,end:43311},{begin:43312,end:43359},{begin:43520,end:43615},{begin:65936,end:65999},{begin:66e3,end:66047},{begin:66208,end:66271},{begin:127024,end:127135}];function cH(e){for(var t=0;t<sH.length;t+=1){var n=sH[t];if(e>=n.begin&&e<n.end)return t}return-1}function lH(e,t){var n={},r=new Z.Parser(e,t);n.version=r.parseUShort(),n.xAvgCharWidth=r.parseShort(),n.usWeightClass=r.parseUShort(),n.usWidthClass=r.parseUShort(),n.fsType=r.parseUShort(),n.ySubscriptXSize=r.parseShort(),n.ySubscriptYSize=r.parseShort(),n.ySubscriptXOffset=r.parseShort(),n.ySubscriptYOffset=r.parseShort(),n.ySuperscriptXSize=r.parseShort(),n.ySuperscriptYSize=r.parseShort(),n.ySuperscriptXOffset=r.parseShort(),n.ySuperscriptYOffset=r.parseShort(),n.yStrikeoutSize=r.parseShort(),n.yStrikeoutPosition=r.parseShort(),n.sFamilyClass=r.parseShort(),n.panose=[];for(var i=0;i<10;i++)n.panose[i]=r.parseByte();return n.ulUnicodeRange1=r.parseULong(),n.ulUnicodeRange2=r.parseULong(),n.ulUnicodeRange3=r.parseULong(),n.ulUnicodeRange4=r.parseULong(),n.achVendID=String.fromCharCode(r.parseByte(),r.parseByte(),r.parseByte(),r.parseByte()),n.fsSelection=r.parseUShort(),n.usFirstCharIndex=r.parseUShort(),n.usLastCharIndex=r.parseUShort(),n.sTypoAscender=r.parseShort(),n.sTypoDescender=r.parseShort(),n.sTypoLineGap=r.parseShort(),n.usWinAscent=r.parseUShort(),n.usWinDescent=r.parseUShort(),n.version>=1&&(n.ulCodePageRange1=r.parseULong(),n.ulCodePageRange2=r.parseULong()),n.version>=2&&(n.sxHeight=r.parseShort(),n.sCapHeight=r.parseShort(),n.usDefaultChar=r.parseUShort(),n.usBreakChar=r.parseUShort(),n.usMaxContent=r.parseUShort()),n}function uH(e){return new Y.Table(`OS/2`,[{name:`version`,type:`USHORT`,value:3},{name:`xAvgCharWidth`,type:`SHORT`,value:0},{name:`usWeightClass`,type:`USHORT`,value:0},{name:`usWidthClass`,type:`USHORT`,value:0},{name:`fsType`,type:`USHORT`,value:0},{name:`ySubscriptXSize`,type:`SHORT`,value:650},{name:`ySubscriptYSize`,type:`SHORT`,value:699},{name:`ySubscriptXOffset`,type:`SHORT`,value:0},{name:`ySubscriptYOffset`,type:`SHORT`,value:140},{name:`ySuperscriptXSize`,type:`SHORT`,value:650},{name:`ySuperscriptYSize`,type:`SHORT`,value:699},{name:`ySuperscriptXOffset`,type:`SHORT`,value:0},{name:`ySuperscriptYOffset`,type:`SHORT`,value:479},{name:`yStrikeoutSize`,type:`SHORT`,value:49},{name:`yStrikeoutPosition`,type:`SHORT`,value:258},{name:`sFamilyClass`,type:`SHORT`,value:0},{name:`bFamilyType`,type:`BYTE`,value:0},{name:`bSerifStyle`,type:`BYTE`,value:0},{name:`bWeight`,type:`BYTE`,value:0},{name:`bProportion`,type:`BYTE`,value:0},{name:`bContrast`,type:`BYTE`,value:0},{name:`bStrokeVariation`,type:`BYTE`,value:0},{name:`bArmStyle`,type:`BYTE`,value:0},{name:`bLetterform`,type:`BYTE`,value:0},{name:`bMidline`,type:`BYTE`,value:0},{name:`bXHeight`,type:`BYTE`,value:0},{name:`ulUnicodeRange1`,type:`ULONG`,value:0},{name:`ulUnicodeRange2`,type:`ULONG`,value:0},{name:`ulUnicodeRange3`,type:`ULONG`,value:0},{name:`ulUnicodeRange4`,type:`ULONG`,value:0},{name:`achVendID`,type:`CHARARRAY`,value:`XXXX`},{name:`fsSelection`,type:`USHORT`,value:0},{name:`usFirstCharIndex`,type:`USHORT`,value:0},{name:`usLastCharIndex`,type:`USHORT`,value:0},{name:`sTypoAscender`,type:`SHORT`,value:0},{name:`sTypoDescender`,type:`SHORT`,value:0},{name:`sTypoLineGap`,type:`SHORT`,value:0},{name:`usWinAscent`,type:`USHORT`,value:0},{name:`usWinDescent`,type:`USHORT`,value:0},{name:`ulCodePageRange1`,type:`ULONG`,value:0},{name:`ulCodePageRange2`,type:`ULONG`,value:0},{name:`sxHeight`,type:`SHORT`,value:0},{name:`sCapHeight`,type:`SHORT`,value:0},{name:`usDefaultChar`,type:`USHORT`,value:0},{name:`usBreakChar`,type:`USHORT`,value:0},{name:`usMaxContext`,type:`USHORT`,value:0}],e)}var dH={parse:lH,make:uH,unicodeRanges:sH,getUnicodeRange:cH};function fH(e,t){var n={},r=new Z.Parser(e,t);switch(n.version=r.parseVersion(),n.italicAngle=r.parseFixed(),n.underlinePosition=r.parseShort(),n.underlineThickness=r.parseShort(),n.isFixedPitch=r.parseULong(),n.minMemType42=r.parseULong(),n.maxMemType42=r.parseULong(),n.minMemType1=r.parseULong(),n.maxMemType1=r.parseULong(),n.version){case 1:n.names=OB.slice();break;case 2:n.numberOfGlyphs=r.parseUShort(),n.glyphNameIndex=Array(n.numberOfGlyphs);for(var i=0;i<n.numberOfGlyphs;i++)n.glyphNameIndex[i]=r.parseUShort();n.names=[];for(var a=0;a<n.numberOfGlyphs;a++)if(n.glyphNameIndex[a]>=OB.length){var o=r.parseChar();n.names.push(r.parseString(o))}break;case 2.5:n.numberOfGlyphs=r.parseUShort(),n.offset=Array(n.numberOfGlyphs);for(var s=0;s<n.numberOfGlyphs;s++)n.offset[s]=r.parseChar();break}return n}function pH(){return new Y.Table(`post`,[{name:`version`,type:`FIXED`,value:196608},{name:`italicAngle`,type:`FIXED`,value:0},{name:`underlinePosition`,type:`FWORD`,value:0},{name:`underlineThickness`,type:`FWORD`,value:0},{name:`isFixedPitch`,type:`ULONG`,value:0},{name:`minMemType42`,type:`ULONG`,value:0},{name:`maxMemType42`,type:`ULONG`,value:0},{name:`minMemType1`,type:`ULONG`,value:0},{name:`maxMemType1`,type:`ULONG`,value:0}])}var mH={parse:fH,make:pH},hH=Array(9);hH[1]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{substFormat:1,coverage:this.parsePointer(X.coverage),deltaGlyphId:this.parseUShort()};if(t===2)return{substFormat:2,coverage:this.parsePointer(X.coverage),substitute:this.parseOffset16List()};K.assert(!1,`0x`+e.toString(16)+`: lookup type 1 format must be 1 or 2.`)},hH[2]=function(){var e=this.parseUShort();return K.argument(e===1,`GSUB Multiple Substitution Subtable identifier-format must be 1`),{substFormat:e,coverage:this.parsePointer(X.coverage),sequences:this.parseListOfLists()}},hH[3]=function(){var e=this.parseUShort();return K.argument(e===1,`GSUB Alternate Substitution Subtable identifier-format must be 1`),{substFormat:e,coverage:this.parsePointer(X.coverage),alternateSets:this.parseListOfLists()}},hH[4]=function(){var e=this.parseUShort();return K.argument(e===1,`GSUB ligature table identifier-format must be 1`),{substFormat:e,coverage:this.parsePointer(X.coverage),ligatureSets:this.parseListOfLists(function(){return{ligGlyph:this.parseUShort(),components:this.parseUShortList(this.parseUShort()-1)}})}};var gH={sequenceIndex:X.uShort,lookupListIndex:X.uShort};hH[5]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{substFormat:t,coverage:this.parsePointer(X.coverage),ruleSets:this.parseListOfLists(function(){var e=this.parseUShort(),t=this.parseUShort();return{input:this.parseUShortList(e-1),lookupRecords:this.parseRecordList(t,gH)}})};if(t===2)return{substFormat:t,coverage:this.parsePointer(X.coverage),classDef:this.parsePointer(X.classDef),classSets:this.parseListOfLists(function(){var e=this.parseUShort(),t=this.parseUShort();return{classes:this.parseUShortList(e-1),lookupRecords:this.parseRecordList(t,gH)}})};if(t===3){var n=this.parseUShort(),r=this.parseUShort();return{substFormat:t,coverages:this.parseList(n,X.pointer(X.coverage)),lookupRecords:this.parseRecordList(r,gH)}}K.assert(!1,`0x`+e.toString(16)+`: lookup type 5 format must be 1, 2 or 3.`)},hH[6]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{substFormat:1,coverage:this.parsePointer(X.coverage),chainRuleSets:this.parseListOfLists(function(){return{backtrack:this.parseUShortList(),input:this.parseUShortList(this.parseShort()-1),lookahead:this.parseUShortList(),lookupRecords:this.parseRecordList(gH)}})};if(t===2)return{substFormat:2,coverage:this.parsePointer(X.coverage),backtrackClassDef:this.parsePointer(X.classDef),inputClassDef:this.parsePointer(X.classDef),lookaheadClassDef:this.parsePointer(X.classDef),chainClassSet:this.parseListOfLists(function(){return{backtrack:this.parseUShortList(),input:this.parseUShortList(this.parseShort()-1),lookahead:this.parseUShortList(),lookupRecords:this.parseRecordList(gH)}})};if(t===3)return{substFormat:3,backtrackCoverage:this.parseList(X.pointer(X.coverage)),inputCoverage:this.parseList(X.pointer(X.coverage)),lookaheadCoverage:this.parseList(X.pointer(X.coverage)),lookupRecords:this.parseRecordList(gH)};K.assert(!1,`0x`+e.toString(16)+`: lookup type 6 format must be 1, 2 or 3.`)},hH[7]=function(){var e=this.parseUShort();K.argument(e===1,`GSUB Extension Substitution subtable identifier-format must be 1`);var t=this.parseUShort(),n=new X(this.data,this.offset+this.parseULong());return{substFormat:1,lookupType:t,extension:hH[t].call(n)}},hH[8]=function(){var e=this.parseUShort();return K.argument(e===1,`GSUB Reverse Chaining Contextual Single Substitution Subtable identifier-format must be 1`),{substFormat:e,coverage:this.parsePointer(X.coverage),backtrackCoverage:this.parseList(X.pointer(X.coverage)),lookaheadCoverage:this.parseList(X.pointer(X.coverage)),substitutes:this.parseUShortList()}};function _H(e,t){t||=0;var n=new X(e,t),r=n.parseVersion(1);return K.argument(r===1||r===1.1,`Unsupported GSUB table version.`),r===1?{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(hH)}:{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(hH),variations:n.parseFeatureVariationsList()}}var vH=Array(9);vH[1]=function(e){return e.substFormat===1?new Y.Table(`substitutionTable`,[{name:`substFormat`,type:`USHORT`,value:1},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)},{name:`deltaGlyphID`,type:`USHORT`,value:e.deltaGlyphId}]):new Y.Table(`substitutionTable`,[{name:`substFormat`,type:`USHORT`,value:2},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)}].concat(Y.ushortList(`substitute`,e.substitute)))},vH[2]=function(e){return K.assert(e.substFormat===1,`Lookup type 2 substFormat must be 1.`),new Y.Table(`substitutionTable`,[{name:`substFormat`,type:`USHORT`,value:1},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)}].concat(Y.tableList(`seqSet`,e.sequences,function(e){return new Y.Table(`sequenceSetTable`,Y.ushortList(`sequence`,e))})))},vH[3]=function(e){return K.assert(e.substFormat===1,`Lookup type 3 substFormat must be 1.`),new Y.Table(`substitutionTable`,[{name:`substFormat`,type:`USHORT`,value:1},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)}].concat(Y.tableList(`altSet`,e.alternateSets,function(e){return new Y.Table(`alternateSetTable`,Y.ushortList(`alternate`,e))})))},vH[4]=function(e){return K.assert(e.substFormat===1,`Lookup type 4 substFormat must be 1.`),new Y.Table(`substitutionTable`,[{name:`substFormat`,type:`USHORT`,value:1},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)}].concat(Y.tableList(`ligSet`,e.ligatureSets,function(e){return new Y.Table(`ligatureSetTable`,Y.tableList(`ligature`,e,function(e){return new Y.Table(`ligatureTable`,[{name:`ligGlyph`,type:`USHORT`,value:e.ligGlyph}].concat(Y.ushortList(`component`,e.components,e.components.length+1)))}))})))},vH[6]=function(e){if(e.substFormat===1)return new Y.Table(`chainContextTable`,[{name:`substFormat`,type:`USHORT`,value:e.substFormat},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)}].concat(Y.tableList(`chainRuleSet`,e.chainRuleSets,function(e){return new Y.Table(`chainRuleSetTable`,Y.tableList(`chainRule`,e,function(e){var t=Y.ushortList(`backtrackGlyph`,e.backtrack,e.backtrack.length).concat(Y.ushortList(`inputGlyph`,e.input,e.input.length+1)).concat(Y.ushortList(`lookaheadGlyph`,e.lookahead,e.lookahead.length)).concat(Y.ushortList(`substitution`,[],e.lookupRecords.length));return e.lookupRecords.forEach(function(e,n){t=t.concat({name:`sequenceIndex`+n,type:`USHORT`,value:e.sequenceIndex}).concat({name:`lookupListIndex`+n,type:`USHORT`,value:e.lookupListIndex})}),new Y.Table(`chainRuleTable`,t)}))})));if(e.substFormat===2)K.assert(!1,`lookup type 6 format 2 is not yet supported.`);else if(e.substFormat===3){var t=[{name:`substFormat`,type:`USHORT`,value:e.substFormat}];return t.push({name:`backtrackGlyphCount`,type:`USHORT`,value:e.backtrackCoverage.length}),e.backtrackCoverage.forEach(function(e,n){t.push({name:`backtrackCoverage`+n,type:`TABLE`,value:new Y.Coverage(e)})}),t.push({name:`inputGlyphCount`,type:`USHORT`,value:e.inputCoverage.length}),e.inputCoverage.forEach(function(e,n){t.push({name:`inputCoverage`+n,type:`TABLE`,value:new Y.Coverage(e)})}),t.push({name:`lookaheadGlyphCount`,type:`USHORT`,value:e.lookaheadCoverage.length}),e.lookaheadCoverage.forEach(function(e,n){t.push({name:`lookaheadCoverage`+n,type:`TABLE`,value:new Y.Coverage(e)})}),t.push({name:`substitutionCount`,type:`USHORT`,value:e.lookupRecords.length}),e.lookupRecords.forEach(function(e,n){t=t.concat({name:`sequenceIndex`+n,type:`USHORT`,value:e.sequenceIndex}).concat({name:`lookupListIndex`+n,type:`USHORT`,value:e.lookupListIndex})}),new Y.Table(`chainContextTable`,t)}K.assert(!1,`lookup type 6 format must be 1, 2 or 3.`)};function yH(e){return new Y.Table(`GSUB`,[{name:`version`,type:`ULONG`,value:65536},{name:`scripts`,type:`TABLE`,value:new Y.ScriptList(e.scripts)},{name:`features`,type:`TABLE`,value:new Y.FeatureList(e.features)},{name:`lookups`,type:`TABLE`,value:new Y.LookupList(e.lookups,vH)}])}var bH={parse:_H,make:yH};function xH(e,t){var n=new Z.Parser(e,t),r=n.parseULong();K.argument(r===1,`Unsupported META table version.`),n.parseULong(),n.parseULong();for(var i=n.parseULong(),a={},o=0;o<i;o++){var s=n.parseTag(),c=n.parseULong(),l=n.parseULong();a[s]=Hz.UTF8(e,t+c,l)}return a}function SH(e){var t=Object.keys(e).length,n=``,r=16+t*12,i=new Y.Table(`meta`,[{name:`version`,type:`ULONG`,value:1},{name:`flags`,type:`ULONG`,value:0},{name:`offset`,type:`ULONG`,value:r},{name:`numTags`,type:`ULONG`,value:t}]);for(var a in e){var o=n.length;n+=e[a],i.fields.push({name:`tag `+a,type:`TAG`,value:a}),i.fields.push({name:`offset `+a,type:`ULONG`,value:r+o}),i.fields.push({name:`length `+a,type:`ULONG`,value:e[a].length})}return i.fields.push({name:`stringPool`,type:`CHARARRAY`,value:n}),i}var CH={parse:xH,make:SH};function wH(e){return Math.log(e)/Math.log(2)|0}function TH(e){for(;e.length%4!=0;)e.push(0);for(var t=0,n=0;n<e.length;n+=4)t+=(e[n]<<24)+(e[n+1]<<16)+(e[n+2]<<8)+e[n+3];return t%=2**32,t}function EH(e,t,n,r){return new Y.Record(`Table Record`,[{name:`tag`,type:`TAG`,value:e===void 0?``:e},{name:`checkSum`,type:`ULONG`,value:t===void 0?0:t},{name:`offset`,type:`ULONG`,value:n===void 0?0:n},{name:`length`,type:`ULONG`,value:r===void 0?0:r}])}function DH(e){var t=new Y.Table(`sfnt`,[{name:`version`,type:`TAG`,value:`OTTO`},{name:`numTables`,type:`USHORT`,value:0},{name:`searchRange`,type:`USHORT`,value:0},{name:`entrySelector`,type:`USHORT`,value:0},{name:`rangeShift`,type:`USHORT`,value:0}]);t.tables=e,t.numTables=e.length;var n=2**wH(t.numTables);t.searchRange=16*n,t.entrySelector=wH(n),t.rangeShift=t.numTables*16-t.searchRange;for(var r=[],i=[],a=t.sizeOf()+EH().sizeOf()*t.numTables;a%4!=0;)a+=1,i.push({name:`padding`,type:`BYTE`,value:0});for(var o=0;o<e.length;o+=1){var s=e[o];K.argument(s.tableName.length===4,`Table name`+s.tableName+` is invalid.`);var c=s.sizeOf(),l=EH(s.tableName,TH(s.encode()),a,c);for(r.push({name:l.tag+` Table Record`,type:`RECORD`,value:l}),i.push({name:s.tableName+` table`,type:`RECORD`,value:s}),a+=c,K.argument(!isNaN(a),`Something went wrong calculating the offset.`);a%4!=0;)a+=1,i.push({name:`padding`,type:`BYTE`,value:0})}return r.sort(function(e,t){return e.value.tag>t.value.tag?1:-1}),t.fields=t.fields.concat(r),t.fields=t.fields.concat(i),t}function OH(e,t,n){for(var r=0;r<t.length;r+=1){var i=e.charToGlyphIndex(t[r]);if(i>0)return e.glyphs.get(i).getMetrics()}return n}function kH(e){for(var t=0,n=0;n<e.length;n+=1)t+=e[n];return t/e.length}function AH(e){for(var t=[],n=[],r=[],i=[],a=[],o=[],s=[],c,l=0,u=0,d=0,f=0,p=0,m=0;m<e.glyphs.length;m+=1){var h=e.glyphs.get(m),g=h.unicode|0;if(isNaN(h.advanceWidth))throw Error(`Glyph `+h.name+` (`+m+`): advanceWidth is not a number.`);(c>g||c===void 0)&&g>0&&(c=g),l<g&&(l=g);var _=dH.getUnicodeRange(g);if(_<32)u|=1<<_;else if(_<64)d|=1<<_-32;else if(_<96)f|=1<<_-64;else if(_<123)p|=1<<_-96;else throw Error(`Unicode ranges bits > 123 are reserved for internal usage`);if(h.name!==`.notdef`){var v=h.getMetrics();t.push(v.xMin),n.push(v.yMin),r.push(v.xMax),i.push(v.yMax),o.push(v.leftSideBearing),s.push(v.rightSideBearing),a.push(h.advanceWidth)}}var y={xMin:Math.min.apply(null,t),yMin:Math.min.apply(null,n),xMax:Math.max.apply(null,r),yMax:Math.max.apply(null,i),advanceWidthMax:Math.max.apply(null,a),advanceWidthAvg:kH(a),minLeftSideBearing:Math.min.apply(null,o),maxLeftSideBearing:Math.max.apply(null,o),minRightSideBearing:Math.min.apply(null,s)};y.ascender=e.ascender,y.descender=e.descender;var b=AV.make({flags:3,unitsPerEm:e.unitsPerEm,xMin:y.xMin,yMin:y.yMin,xMax:y.xMax,yMax:y.yMax,lowestRecPPEM:3,createdTimestamp:e.createdTimestamp}),x=NV.make({ascender:y.ascender,descender:y.descender,advanceWidthMax:y.advanceWidthMax,minLeftSideBearing:y.minLeftSideBearing,minRightSideBearing:y.minRightSideBearing,xMaxExtent:y.maxLeftSideBearing+(y.xMax-y.xMin),numberOfHMetrics:e.glyphs.length}),S=WV.make(e.glyphs.length),C=dH.make(Object.assign({xAvgCharWidth:Math.round(y.advanceWidthAvg),usFirstCharIndex:c,usLastCharIndex:l,ulUnicodeRange1:u,ulUnicodeRange2:d,ulUnicodeRange3:f,ulUnicodeRange4:p,sTypoAscender:y.ascender,sTypoDescender:y.descender,sTypoLineGap:0,usWinAscent:y.yMax,usWinDescent:Math.abs(y.yMin),ulCodePageRange1:1,sxHeight:OH(e,`xyvw`,{yMax:Math.round(y.ascender/2)}).yMax,sCapHeight:OH(e,`HIKLEFJMNTZBDPRAGOQSUVWXY`,y).yMax,usDefaultChar:e.hasChar(` `)?32:0,usBreakChar:e.hasChar(` `)?32:0},e.tables.os2)),w=RV.make(e.glyphs),ee=wB.make(e.glyphs),te=e.getEnglishName(`fontFamily`),ne=e.getEnglishName(`fontSubfamily`),re=te+` `+ne,ie=e.getEnglishName(`postScriptName`);ie||=te.replace(/\s/g,``)+`-`+ne;var ae={};for(var oe in e.names)ae[oe]=e.names[oe];ae.uniqueID||={en:e.getEnglishName(`manufacturer`)+`:`+re},ae.postScriptName||={en:ie},ae.preferredFamily||=e.names.fontFamily,ae.preferredSubfamily||=e.names.fontSubfamily;var se=[],ce=oH.make(ae,se),le=se.length>0?VV.make(se):void 0,ue=mH.make(),de=DV.make(e.glyphs,{version:e.getEnglishName(`version`),fullName:re,familyName:te,weightName:ne,postScriptName:ie,unitsPerEm:e.unitsPerEm,fontBBox:[0,y.yMin,y.ascender,y.advanceWidthMax]}),fe=e.metas&&Object.keys(e.metas).length>0?CH.make(e.metas):void 0,pe=[b,x,S,C,ce,ee,ue,de,w];le&&pe.push(le),e.tables.gsub&&pe.push(bH.make(e.tables.gsub)),fe&&pe.push(fe);for(var me=DH(pe),he=TH(me.encode()),ge=me.fields,_e=!1,ve=0;ve<ge.length;ve+=1)if(ge[ve].name===`head table`){ge[ve].value.checkSumAdjustment=2981146554-he,_e=!0;break}if(!_e)throw Error(`Could not find head table with checkSum to adjust.`);return me}var jH={make:DH,fontToTable:AH,computeCheckSum:TH};function MH(e,t){for(var n=0,r=e.length-1;n<=r;){var i=n+r>>>1,a=e[i].tag;if(a===t)return i;a<t?n=i+1:r=i-1}return-n-1}function NH(e,t){for(var n=0,r=e.length-1;n<=r;){var i=n+r>>>1,a=e[i];if(a===t)return i;a<t?n=i+1:r=i-1}return-n-1}function PH(e,t){for(var n,r=0,i=e.length-1;r<=i;){var a=r+i>>>1;n=e[a];var o=n.start;if(o===t)return n;o<t?r=a+1:i=a-1}if(r>0)return n=e[r-1],t>n.end?0:n}function FH(e,t){this.font=e,this.tableName=t}FH.prototype={searchTag:MH,binSearch:NH,getTable:function(e){var t=this.font.tables[this.tableName];return!t&&e&&(t=this.font.tables[this.tableName]=this.createDefaultTable()),t},getScriptNames:function(){var e=this.getTable();return e?e.scripts.map(function(e){return e.tag}):[]},getDefaultScriptName:function(){var e=this.getTable();if(e){for(var t=!1,n=0;n<e.scripts.length;n++){var r=e.scripts[n].tag;if(r===`DFLT`)return r;r===`latn`&&(t=!0)}if(t)return`latn`}},getScriptTable:function(e,t){var n=this.getTable(t);if(n){e||=`DFLT`;var r=n.scripts,i=MH(n.scripts,e);if(i>=0)return r[i].script;if(t){var a={tag:e,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};return r.splice(-1-i,0,a),a.script}}},getLangSysTable:function(e,t,n){var r=this.getScriptTable(e,n);if(r){if(!t||t===`dflt`||t===`DFLT`)return r.defaultLangSys;var i=MH(r.langSysRecords,t);if(i>=0)return r.langSysRecords[i].langSys;if(n){var a={tag:t,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};return r.langSysRecords.splice(-1-i,0,a),a.langSys}}},getFeatureTable:function(e,t,n,r){var i=this.getLangSysTable(e,t,r);if(i){for(var a,o=i.featureIndexes,s=this.font.tables[this.tableName].features,c=0;c<o.length;c++)if(a=s[o[c]],a.tag===n)return a.feature;if(r){var l=s.length;return K.assert(l===0||n>=s[l-1].tag,`Features must be added in alphabetical order.`),a={tag:n,feature:{params:0,lookupListIndexes:[]}},s.push(a),o.push(l),a.feature}}},getLookupTables:function(e,t,n,r,i){var a=this.getFeatureTable(e,t,n,i),o=[];if(a){for(var s,c=a.lookupListIndexes,l=this.font.tables[this.tableName].lookups,u=0;u<c.length;u++)s=l[c[u]],s.lookupType===r&&o.push(s);if(o.length===0&&i){s={lookupType:r,lookupFlag:0,subtables:[],markFilteringSet:void 0};var d=l.length;return l.push(s),c.push(d),[s]}}return o},getGlyphClass:function(e,t){switch(e.format){case 1:return e.startGlyph<=t&&t<e.startGlyph+e.classes.length?e.classes[t-e.startGlyph]:0;case 2:var n=PH(e.ranges,t);return n?n.classId:0}},getCoverageIndex:function(e,t){switch(e.format){case 1:var n=NH(e.glyphs,t);return n>=0?n:-1;case 2:var r=PH(e.ranges,t);return r?r.index+t-r.start:-1}},expandCoverage:function(e){if(e.format===1)return e.glyphs;for(var t=[],n=e.ranges,r=0;r<n.length;r++)for(var i=n[r],a=i.start,o=i.end,s=a;s<=o;s++)t.push(s);return t}};function IH(e){FH.call(this,e,`gpos`)}IH.prototype=FH.prototype,IH.prototype.init=function(){var e=this.getDefaultScriptName();this.defaultKerningTables=this.getKerningTables(e)},IH.prototype.getKerningValue=function(e,t,n){for(var r=0;r<e.length;r++)for(var i=e[r].subtables,a=0;a<i.length;a++){var o=i[a],s=this.getCoverageIndex(o.coverage,t);if(!(s<0))switch(o.posFormat){case 1:for(var c=o.pairSets[s],l=0;l<c.length;l++){var u=c[l];if(u.secondGlyph===n)return u.value1&&u.value1.xAdvance||0}break;case 2:var d=this.getGlyphClass(o.classDef1,t),f=this.getGlyphClass(o.classDef2,n),p=o.classRecords[d][f];return p.value1&&p.value1.xAdvance||0}}return 0},IH.prototype.getKerningTables=function(e,t){if(this.font.tables.gpos)return this.getLookupTables(e,t,`kern`,2)};function LH(e){FH.call(this,e,`gsub`)}function RH(e,t){var n=e.length;if(n!==t.length)return!1;for(var r=0;r<n;r++)if(e[r]!==t[r])return!1;return!0}function zH(e,t,n){for(var r=e.subtables,i=0;i<r.length;i++){var a=r[i];if(a.substFormat===t)return a}if(n)return r.push(n),n}LH.prototype=FH.prototype,LH.prototype.createDefaultTable=function(){return{version:1,scripts:[{tag:`DFLT`,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}}],features:[],lookups:[]}},LH.prototype.getSingle=function(e,t,n){for(var r=[],i=this.getLookupTables(t,n,e,1),a=0;a<i.length;a++)for(var o=i[a].subtables,s=0;s<o.length;s++){var c=o[s],l=this.expandCoverage(c.coverage),u=void 0;if(c.substFormat===1){var d=c.deltaGlyphId;for(u=0;u<l.length;u++){var f=l[u];r.push({sub:f,by:f+d})}}else{var p=c.substitute;for(u=0;u<l.length;u++)r.push({sub:l[u],by:p[u]})}}return r},LH.prototype.getMultiple=function(e,t,n){for(var r=[],i=this.getLookupTables(t,n,e,2),a=0;a<i.length;a++)for(var o=i[a].subtables,s=0;s<o.length;s++){var c=o[s],l=this.expandCoverage(c.coverage),u=void 0;for(u=0;u<l.length;u++){var d=l[u],f=c.sequences[u];r.push({sub:d,by:f})}}return r},LH.prototype.getAlternates=function(e,t,n){for(var r=[],i=this.getLookupTables(t,n,e,3),a=0;a<i.length;a++)for(var o=i[a].subtables,s=0;s<o.length;s++)for(var c=o[s],l=this.expandCoverage(c.coverage),u=c.alternateSets,d=0;d<l.length;d++)r.push({sub:l[d],by:u[d]});return r},LH.prototype.getLigatures=function(e,t,n){for(var r=[],i=this.getLookupTables(t,n,e,4),a=0;a<i.length;a++)for(var o=i[a].subtables,s=0;s<o.length;s++)for(var c=o[s],l=this.expandCoverage(c.coverage),u=c.ligatureSets,d=0;d<l.length;d++)for(var f=l[d],p=u[d],m=0;m<p.length;m++){var h=p[m];r.push({sub:[f].concat(h.components),by:h.ligGlyph})}return r},LH.prototype.addSingle=function(e,t,n,r){var i=this.getLookupTables(n,r,e,1,!0)[0],a=zH(i,2,{substFormat:2,coverage:{format:1,glyphs:[]},substitute:[]});K.assert(a.coverage.format===1,`Single: unable to modify coverage table format `+a.coverage.format);var o=t.sub,s=this.binSearch(a.coverage.glyphs,o);s<0&&(s=-1-s,a.coverage.glyphs.splice(s,0,o),a.substitute.splice(s,0,0)),a.substitute[s]=t.by},LH.prototype.addMultiple=function(e,t,n,r){K.assert(t.by instanceof Array&&t.by.length>1,`Multiple: "by" must be an array of two or more ids`);var i=this.getLookupTables(n,r,e,2,!0)[0],a=zH(i,1,{substFormat:1,coverage:{format:1,glyphs:[]},sequences:[]});K.assert(a.coverage.format===1,`Multiple: unable to modify coverage table format `+a.coverage.format);var o=t.sub,s=this.binSearch(a.coverage.glyphs,o);s<0&&(s=-1-s,a.coverage.glyphs.splice(s,0,o),a.sequences.splice(s,0,0)),a.sequences[s]=t.by},LH.prototype.addAlternate=function(e,t,n,r){var i=this.getLookupTables(n,r,e,3,!0)[0],a=zH(i,1,{substFormat:1,coverage:{format:1,glyphs:[]},alternateSets:[]});K.assert(a.coverage.format===1,`Alternate: unable to modify coverage table format `+a.coverage.format);var o=t.sub,s=this.binSearch(a.coverage.glyphs,o);s<0&&(s=-1-s,a.coverage.glyphs.splice(s,0,o),a.alternateSets.splice(s,0,0)),a.alternateSets[s]=t.by},LH.prototype.addLigature=function(e,t,n,r){var i=this.getLookupTables(n,r,e,4,!0)[0],a=i.subtables[0];a||(a={substFormat:1,coverage:{format:1,glyphs:[]},ligatureSets:[]},i.subtables[0]=a),K.assert(a.coverage.format===1,`Ligature: unable to modify coverage table format `+a.coverage.format);var o=t.sub[0],s=t.sub.slice(1),c={ligGlyph:t.by,components:s},l=this.binSearch(a.coverage.glyphs,o);if(l>=0){for(var u=a.ligatureSets[l],d=0;d<u.length;d++)if(RH(u[d].components,s))return;u.push(c)}else l=-1-l,a.coverage.glyphs.splice(l,0,o),a.ligatureSets.splice(l,0,[c])},LH.prototype.getFeature=function(e,t,n){if(/ss\d\d/.test(e))return this.getSingle(e,t,n);switch(e){case`aalt`:case`salt`:return this.getSingle(e,t,n).concat(this.getAlternates(e,t,n));case`dlig`:case`liga`:case`rlig`:return this.getLigatures(e,t,n);case`ccmp`:return this.getMultiple(e,t,n).concat(this.getLigatures(e,t,n));case`stch`:return this.getMultiple(e,t,n)}},LH.prototype.add=function(e,t,n,r){if(/ss\d\d/.test(e))return this.addSingle(e,t,n,r);switch(e){case`aalt`:case`salt`:return typeof t.by==`number`?this.addSingle(e,t,n,r):this.addAlternate(e,t,n,r);case`dlig`:case`liga`:case`rlig`:return this.addLigature(e,t,n,r);case`ccmp`:return t.by instanceof Array?this.addMultiple(e,t,n,r):this.addLigature(e,t,n,r)}};function BH(){return typeof window<`u`}function VH(e){for(var t=new ArrayBuffer(e.length),n=new Uint8Array(t),r=0;r<e.length;++r)n[r]=e[r];return t}function HH(e){for(var t=new Buffer(e.byteLength),n=new Uint8Array(e),r=0;r<t.length;++r)t[r]=n[r];return t}function UH(e,t){if(!e)throw t}function WH(e,t,n,r,i){var a;return(t&r)>0?(a=e.parseByte(),(t&i)===0&&(a=-a),a=n+a):a=(t&i)>0?n:n+e.parseShort(),a}function GH(e,t,n){var r=new Z.Parser(t,n);e.numberOfContours=r.parseShort(),e._xMin=r.parseShort(),e._yMin=r.parseShort(),e._xMax=r.parseShort(),e._yMax=r.parseShort();var i,a;if(e.numberOfContours>0){for(var o=e.endPointIndices=[],s=0;s<e.numberOfContours;s+=1)o.push(r.parseUShort());e.instructionLength=r.parseUShort(),e.instructions=[];for(var c=0;c<e.instructionLength;c+=1)e.instructions.push(r.parseByte());var l=o[o.length-1]+1;i=[];for(var u=0;u<l;u+=1)if(a=r.parseByte(),i.push(a),(a&8)>0)for(var d=r.parseByte(),f=0;f<d;f+=1)i.push(a),u+=1;if(K.argument(i.length===l,`Bad flags.`),o.length>0){var p=[],m;if(l>0){for(var h=0;h<l;h+=1)a=i[h],m={},m.onCurve=!!(a&1),m.lastPointOfContour=o.indexOf(h)>=0,p.push(m);for(var g=0,_=0;_<l;_+=1)a=i[_],m=p[_],m.x=WH(r,a,g,2,16),g=m.x;for(var v=0,y=0;y<l;y+=1)a=i[y],m=p[y],m.y=WH(r,a,v,4,32),v=m.y}e.points=p}else e.points=[]}else if(e.numberOfContours===0)e.points=[];else{e.isComposite=!0,e.points=[],e.components=[];for(var b=!0;b;){i=r.parseUShort();var x={glyphIndex:r.parseUShort(),xScale:1,scale01:0,scale10:0,yScale:1,dx:0,dy:0};(i&1)>0?(i&2)>0?(x.dx=r.parseShort(),x.dy=r.parseShort()):x.matchedPoints=[r.parseUShort(),r.parseUShort()]:(i&2)>0?(x.dx=r.parseChar(),x.dy=r.parseChar()):x.matchedPoints=[r.parseByte(),r.parseByte()],(i&8)>0?x.xScale=x.yScale=r.parseF2Dot14():(i&64)>0?(x.xScale=r.parseF2Dot14(),x.yScale=r.parseF2Dot14()):(i&128)>0&&(x.xScale=r.parseF2Dot14(),x.scale01=r.parseF2Dot14(),x.scale10=r.parseF2Dot14(),x.yScale=r.parseF2Dot14()),e.components.push(x),b=!!(i&32)}if(i&256){e.instructionLength=r.parseUShort(),e.instructions=[];for(var S=0;S<e.instructionLength;S+=1)e.instructions.push(r.parseByte())}}}function KH(e,t){for(var n=[],r=0;r<e.length;r+=1){var i=e[r],a={x:t.xScale*i.x+t.scale01*i.y+t.dx,y:t.scale10*i.x+t.yScale*i.y+t.dy,onCurve:i.onCurve,lastPointOfContour:i.lastPointOfContour};n.push(a)}return n}function qH(e){for(var t=[],n=[],r=0;r<e.length;r+=1){var i=e[r];n.push(i),i.lastPointOfContour&&(t.push(n),n=[])}return K.argument(n.length===0,`There are still points left in the current contour.`),t}function JH(e){var t=new Lz;if(!e)return t;for(var n=qH(e),r=0;r<n.length;++r){var i=n[r],a=null,o=i[i.length-1],s=i[0];if(o.onCurve)t.moveTo(o.x,o.y);else if(s.onCurve)t.moveTo(s.x,s.y);else{var c={x:(o.x+s.x)*.5,y:(o.y+s.y)*.5};t.moveTo(c.x,c.y)}for(var l=0;l<i.length;++l)if(a=o,o=s,s=i[(l+1)%i.length],o.onCurve)t.lineTo(o.x,o.y);else{var u=s;a.onCurve||((o.x+a.x)*.5,(o.y+a.y)*.5),s.onCurve||(u={x:(o.x+s.x)*.5,y:(o.y+s.y)*.5}),t.quadraticCurveTo(o.x,o.y,u.x,u.y)}t.closePath()}return t}function YH(e,t){if(t.isComposite)for(var n=0;n<t.components.length;n+=1){var r=t.components[n],i=e.get(r.glyphIndex);if(i.getPath(),i.points){var a=void 0;if(r.matchedPoints===void 0)a=KH(i.points,r);else{if(r.matchedPoints[0]>t.points.length-1||r.matchedPoints[1]>i.points.length-1)throw Error(`Matched points out of range in `+t.name);var o=t.points[r.matchedPoints[0]],s=i.points[r.matchedPoints[1]],c={xScale:r.xScale,scale01:r.scale01,scale10:r.scale10,yScale:r.yScale,dx:0,dy:0};s=KH([s],c)[0],c.dx=o.x-s.x,c.dy=o.y-s.y,a=KH(i.points,c)}t.points=t.points.concat(a)}}return JH(t.points)}function XH(e,t,n,r){for(var i=new GB.GlyphSet(r),a=0;a<n.length-1;a+=1){var o=n[a];o===n[a+1]?i.push(a,GB.glyphLoader(r,a)):i.push(a,GB.ttfGlyphLoader(r,a,GH,e,t+o,YH))}return i}function ZH(e,t,n,r){var i=new GB.GlyphSet(r);return r._push=function(a){var o=n[a];o===n[a+1]?i.push(a,GB.glyphLoader(r,a)):i.push(a,GB.ttfGlyphLoader(r,a,GH,e,t+o,YH))},i}function QH(e,t,n,r,i){return i.lowMemory?ZH(e,t,n,r):XH(e,t,n,r)}var $H={getPath:JH,parse:QH},eU,tU,nU,rU;function iU(e){this.font=e,this.getCommands=function(e){return $H.getPath(e).commands},this._fpgmState=this._prepState=void 0,this._errorState=0}function aU(e){return e}function oU(e){return Math.sign(e)*Math.round(Math.abs(e))}function sU(e){return Math.sign(e)*Math.round(Math.abs(e*2))/2}function cU(e){return Math.sign(e)*(Math.round(Math.abs(e)+.5)-.5)}function lU(e){return Math.sign(e)*Math.ceil(Math.abs(e))}function uU(e){return Math.sign(e)*Math.floor(Math.abs(e))}var dU=function(e){var t=this.srPeriod,n=this.srPhase,r=this.srThreshold,i=1;return e<0&&(e=-e,i=-1),e+=r-n,e=Math.trunc(e/t)*t,e+=n,e<0?n*i:e*i},fU={x:1,y:0,axis:`x`,distance:function(e,t,n,r){return(n?e.xo:e.x)-(r?t.xo:t.x)},interpolate:function(e,t,n,r){var i,a,o,s,c,l,u;if(!r||r===this){if(i=e.xo-t.xo,a=e.xo-n.xo,c=t.x-t.xo,l=n.x-n.xo,o=Math.abs(i),s=Math.abs(a),u=o+s,u===0){e.x=e.xo+(c+l)/2;return}e.x=e.xo+(c*s+l*o)/u;return}if(i=r.distance(e,t,!0,!0),a=r.distance(e,n,!0,!0),c=r.distance(t,t,!1,!0),l=r.distance(n,n,!1,!0),o=Math.abs(i),s=Math.abs(a),u=o+s,u===0){fU.setRelative(e,e,(c+l)/2,r,!0);return}fU.setRelative(e,e,(c*s+l*o)/u,r,!0)},normalSlope:-1/0,setRelative:function(e,t,n,r,i){if(!r||r===this){e.x=(i?t.xo:t.x)+n;return}var a=i?t.xo:t.x,o=i?t.yo:t.y,s=a+n*r.x,c=o+n*r.y;e.x=s+(e.y-c)/r.normalSlope},slope:0,touch:function(e){e.xTouched=!0},touched:function(e){return e.xTouched},untouch:function(e){e.xTouched=!1}},pU={x:0,y:1,axis:`y`,distance:function(e,t,n,r){return(n?e.yo:e.y)-(r?t.yo:t.y)},interpolate:function(e,t,n,r){var i,a,o,s,c,l,u;if(!r||r===this){if(i=e.yo-t.yo,a=e.yo-n.yo,c=t.y-t.yo,l=n.y-n.yo,o=Math.abs(i),s=Math.abs(a),u=o+s,u===0){e.y=e.yo+(c+l)/2;return}e.y=e.yo+(c*s+l*o)/u;return}if(i=r.distance(e,t,!0,!0),a=r.distance(e,n,!0,!0),c=r.distance(t,t,!1,!0),l=r.distance(n,n,!1,!0),o=Math.abs(i),s=Math.abs(a),u=o+s,u===0){pU.setRelative(e,e,(c+l)/2,r,!0);return}pU.setRelative(e,e,(c*s+l*o)/u,r,!0)},normalSlope:0,setRelative:function(e,t,n,r,i){if(!r||r===this){e.y=(i?t.yo:t.y)+n;return}var a=i?t.xo:t.x,o=i?t.yo:t.y,s=a+n*r.x;e.y=o+n*r.y+r.normalSlope*(e.x-s)},slope:1/0,touch:function(e){e.yTouched=!0},touched:function(e){return e.yTouched},untouch:function(e){e.yTouched=!1}};Object.freeze(fU),Object.freeze(pU);function mU(e,t){this.x=e,this.y=t,this.axis=void 0,this.slope=t/e,this.normalSlope=-e/t,Object.freeze(this)}mU.prototype.distance=function(e,t,n,r){return this.x*fU.distance(e,t,n,r)+this.y*pU.distance(e,t,n,r)},mU.prototype.interpolate=function(e,t,n,r){var i,a,o=r.distance(e,t,!0,!0),s=r.distance(e,n,!0,!0),c,l,u;if(i=r.distance(t,t,!1,!0),a=r.distance(n,n,!1,!0),c=Math.abs(o),l=Math.abs(s),u=c+l,u===0){this.setRelative(e,e,(i+a)/2,r,!0);return}this.setRelative(e,e,(i*l+a*c)/u,r,!0)},mU.prototype.setRelative=function(e,t,n,r,i){r||=this;var a=i?t.xo:t.x,o=i?t.yo:t.y,s=a+n*r.x,c=o+n*r.y,l=r.normalSlope,u=this.slope,d=e.x,f=e.y;e.x=(u*d-l*s+c-f)/(u-l),e.y=u*(e.x-d)+f},mU.prototype.touch=function(e){e.xTouched=!0,e.yTouched=!0};function hU(e,t){var n=Math.sqrt(e*e+t*t);return e/=n,t/=n,e===1&&t===0?fU:e===0&&t===1?pU:new mU(e,t)}function gU(e,t,n,r){this.x=this.xo=Math.round(e*64)/64,this.y=this.yo=Math.round(t*64)/64,this.lastPointOfContour=n,this.onCurve=r,this.prevPointOnContour=void 0,this.nextPointOnContour=void 0,this.xTouched=!1,this.yTouched=!1,Object.preventExtensions(this)}gU.prototype.nextTouched=function(e){for(var t=this.nextPointOnContour;!e.touched(t)&&t!==this;)t=t.nextPointOnContour;return t},gU.prototype.prevTouched=function(e){for(var t=this.prevPointOnContour;!e.touched(t)&&t!==this;)t=t.prevPointOnContour;return t};var _U=Object.freeze(new gU(0,0)),vU={cvCutIn:17/16,deltaBase:9,deltaShift:.125,loop:1,minDis:1,autoFlip:!0};function yU(e,t){switch(this.env=e,this.stack=[],this.prog=t,e){case`glyf`:this.zp0=this.zp1=this.zp2=1,this.rp0=this.rp1=this.rp2=0;case`prep`:this.fv=this.pv=this.dpv=fU,this.round=oU}}iU.prototype.exec=function(e,t){if(typeof t!=`number`)throw Error(`Point size is not a number!`);if(!(this._errorState>2)){var n=this.font,r=this._prepState;if(!r||r.ppem!==t){var i=this._fpgmState;if(!i){yU.prototype=vU,i=this._fpgmState=new yU(`fpgm`,n.tables.fpgm),i.funcs=[],i.font=n,exports.DEBUG&&(console.log(`---EXEC FPGM---`),i.step=-1);try{tU(i)}catch(e){console.log(`Hinting error in FPGM:`+e),this._errorState=3;return}}yU.prototype=i,r=this._prepState=new yU(`prep`,n.tables.prep),r.ppem=t;var a=n.tables.cvt;if(a)for(var o=r.cvt=Array(a.length),s=t/n.unitsPerEm,c=0;c<a.length;c++)o[c]=a[c]*s;else r.cvt=[];exports.DEBUG&&(console.log(`---EXEC PREP---`),r.step=-1);try{tU(r)}catch(e){this._errorState<2&&console.log(`Hinting error in PREP:`+e),this._errorState=2}}if(!(this._errorState>1))try{return nU(e,r)}catch(e){this._errorState<1&&(console.log(`Hinting error:`+e),console.log(`Note: further hinting errors are silenced`)),this._errorState=1;return}}},nU=function(e,t){var n=t.ppem/t.font.unitsPerEm,r=n,i=e.components,a,o,s;if(yU.prototype=t,!i)s=new yU(`glyf`,e.instructions),exports.DEBUG&&(console.log(`---EXEC GLYPH---`),s.step=-1),rU(e,s,n,r),o=s.gZone;else{var c=t.font;o=[],a=[];for(var l=0;l<i.length;l++){var u=i[l],d=c.glyphs.get(u.glyphIndex);s=new yU(`glyf`,d.instructions),exports.DEBUG&&(console.log(`---EXEC COMP `+l+`---`),s.step=-1),rU(d,s,n,r);for(var f=Math.round(u.dx*n),p=Math.round(u.dy*r),m=s.gZone,h=s.contours,g=0;g<m.length;g++){var _=m[g];_.xTouched=_.yTouched=!1,_.xo=_.x+=f,_.yo=_.y+=p}var v=o.length;o.push.apply(o,m);for(var y=0;y<h.length;y++)a.push(h[y]+v)}e.instructions&&!s.inhibitGridFit&&(s=new yU(`glyf`,e.instructions),s.gZone=s.z0=s.z1=s.z2=o,s.contours=a,o.push(new gU(0,0),new gU(Math.round(e.advanceWidth*n),0)),exports.DEBUG&&(console.log(`---EXEC COMPOSITE---`),s.step=-1),tU(s),o.length-=2)}return o},rU=function(e,t,n,r){for(var i=e.points||[],a=i.length,o=t.gZone=t.z0=t.z1=t.z2=[],s=t.contours=[],c,l=0;l<a;l++)c=i[l],o[l]=new gU(c.x*n,c.y*r,c.lastPointOfContour,c.onCurve);for(var u,d,f=0;f<a;f++)c=o[f],u||(u=c,s.push(f)),c.lastPointOfContour?(c.nextPointOnContour=u,u.prevPointOnContour=c,u=void 0):(d=o[f+1],c.nextPointOnContour=d,d.prevPointOnContour=c);if(!t.inhibitGridFit){if(exports.DEBUG){console.log(`PROCESSING GLYPH`,t.stack);for(var p=0;p<a;p++)console.log(p,o[p].x,o[p].y)}if(o.push(new gU(0,0),new gU(Math.round(e.advanceWidth*n),0)),tU(t),o.length-=2,exports.DEBUG){console.log(`FINISHED GLYPH`,t.stack);for(var m=0;m<a;m++)console.log(m,o[m].x,o[m].y)}}},tU=function(e){var t=e.prog;if(t){var n=t.length,r;for(e.ip=0;e.ip<n;e.ip++){if(exports.DEBUG&&e.step++,r=eU[t[e.ip]],!r)throw Error(`unknown instruction: 0x`+Number(t[e.ip]).toString(16));r(e)}}};function bU(e){for(var t=e.tZone=Array(e.gZone.length),n=0;n<t.length;n++)t[n]=new gU(0,0)}function xU(e,t){var n=e.prog,r=e.ip,i=1,a;do if(a=n[++r],a===88)i++;else if(a===89)i--;else if(a===64)r+=n[r+1]+1;else if(a===65)r+=2*n[r+1]+1;else if(a>=176&&a<=183)r+=a-176+1;else if(a>=184&&a<=191)r+=(a-184+1)*2;else if(t&&i===1&&a===27)break;while(i>0);e.ip=r}function SU(e,t){exports.DEBUG&&console.log(t.step,`SVTCA[`+e.axis+`]`),t.fv=t.pv=t.dpv=e}function CU(e,t){exports.DEBUG&&console.log(t.step,`SPVTCA[`+e.axis+`]`),t.pv=t.dpv=e}function wU(e,t){exports.DEBUG&&console.log(t.step,`SFVTCA[`+e.axis+`]`),t.fv=e}function TU(e,t){var n=t.stack,r=n.pop(),i=n.pop(),a=t.z2[r],o=t.z1[i];exports.DEBUG&&console.log(`SPVTL[`+e+`]`,r,i);var s,c;e?(s=a.y-o.y,c=o.x-a.x):(s=o.x-a.x,c=o.y-a.y),t.pv=t.dpv=hU(s,c)}function EU(e,t){var n=t.stack,r=n.pop(),i=n.pop(),a=t.z2[r],o=t.z1[i];exports.DEBUG&&console.log(`SFVTL[`+e+`]`,r,i);var s,c;e?(s=a.y-o.y,c=o.x-a.x):(s=o.x-a.x,c=o.y-a.y),t.fv=hU(s,c)}function DU(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`SPVFS[]`,n,r),e.pv=e.dpv=hU(r,n)}function OU(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`SPVFS[]`,n,r),e.fv=hU(r,n)}function kU(e){var t=e.stack,n=e.pv;exports.DEBUG&&console.log(e.step,`GPV[]`),t.push(n.x*16384),t.push(n.y*16384)}function AU(e){var t=e.stack,n=e.fv;exports.DEBUG&&console.log(e.step,`GFV[]`),t.push(n.x*16384),t.push(n.y*16384)}function jU(e){e.fv=e.pv,exports.DEBUG&&console.log(e.step,`SFVTPV[]`)}function MU(e){var t=e.stack,n=t.pop(),r=t.pop(),i=t.pop(),a=t.pop(),o=t.pop(),s=e.z0,c=e.z1,l=s[n],u=s[r],d=c[i],f=c[a],p=e.z2[o];exports.DEBUG&&console.log(`ISECT[], `,n,r,i,a,o);var m=l.x,h=l.y,g=u.x,_=u.y,v=d.x,y=d.y,b=f.x,x=f.y,S=(m-g)*(y-x)-(h-_)*(v-b),C=m*_-h*g,w=v*x-y*b;p.x=(C*(v-b)-w*(m-g))/S,p.y=(C*(y-x)-w*(h-_))/S}function NU(e){e.rp0=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SRP0[]`,e.rp0)}function PU(e){e.rp1=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SRP1[]`,e.rp1)}function FU(e){e.rp2=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SRP2[]`,e.rp2)}function IU(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZP0[]`,t),e.zp0=t,t){case 0:e.tZone||bU(e),e.z0=e.tZone;break;case 1:e.z0=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function LU(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZP1[]`,t),e.zp1=t,t){case 0:e.tZone||bU(e),e.z1=e.tZone;break;case 1:e.z1=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function RU(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZP2[]`,t),e.zp2=t,t){case 0:e.tZone||bU(e),e.z2=e.tZone;break;case 1:e.z2=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function zU(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZPS[]`,t),e.zp0=e.zp1=e.zp2=t,t){case 0:e.tZone||bU(e),e.z0=e.z1=e.z2=e.tZone;break;case 1:e.z0=e.z1=e.z2=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function BU(e){e.loop=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SLOOP[]`,e.loop)}function VU(e){exports.DEBUG&&console.log(e.step,`RTG[]`),e.round=oU}function HU(e){exports.DEBUG&&console.log(e.step,`RTHG[]`),e.round=cU}function UU(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SMD[]`,t),e.minDis=t/64}function WU(e){exports.DEBUG&&console.log(e.step,`ELSE[]`),xU(e,!1)}function GU(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`JMPR[]`,t),e.ip+=t-1}function KU(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SCVTCI[]`,t),e.cvCutIn=t/64}function qU(e){var t=e.stack;exports.DEBUG&&console.log(e.step,`DUP[]`),t.push(t[t.length-1])}function JU(e){exports.DEBUG&&console.log(e.step,`POP[]`),e.stack.pop()}function YU(e){exports.DEBUG&&console.log(e.step,`CLEAR[]`),e.stack.length=0}function XU(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`SWAP[]`),t.push(n),t.push(r)}function ZU(e){var t=e.stack;exports.DEBUG&&console.log(e.step,`DEPTH[]`),t.push(t.length)}function QU(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`LOOPCALL[]`,n,r);var i=e.ip,a=e.prog;e.prog=e.funcs[n];for(var o=0;o<r;o++)tU(e),exports.DEBUG&&console.log(++e.step,o+1<r?`next loopcall`:`done loopcall`,o);e.ip=i,e.prog=a}function $U(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`CALL[]`,t);var n=e.ip,r=e.prog;e.prog=e.funcs[t],tU(e),e.ip=n,e.prog=r,exports.DEBUG&&console.log(++e.step,`returning from`,t)}function eW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`CINDEX[]`,n),t.push(t[t.length-n])}function tW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`MINDEX[]`,n),t.push(t.splice(t.length-n,1)[0])}function nW(e){if(e.env!==`fpgm`)throw Error(`FDEF not allowed here`);var t=e.stack,n=e.prog,r=e.ip,i=t.pop(),a=r;for(exports.DEBUG&&console.log(e.step,`FDEF[]`,i);n[++r]!==45;);e.ip=r,e.funcs[i]=n.slice(a+1,r)}function rW(e,t){var n=t.stack.pop(),r=t.z0[n],i=t.fv,a=t.pv;exports.DEBUG&&console.log(t.step,`MDAP[`+e+`]`,n);var o=a.distance(r,_U);e&&(o=t.round(o)),i.setRelative(r,_U,o,a),i.touch(r),t.rp0=t.rp1=n}function iW(e,t){var n=t.z2,r=n.length-2,i,a,o;exports.DEBUG&&console.log(t.step,`IUP[`+e.axis+`]`);for(var s=0;s<r;s++)i=n[s],!e.touched(i)&&(a=i.prevTouched(e),a!==i&&(o=i.nextTouched(e),a===o&&e.setRelative(i,i,e.distance(a,a,!1,!0),e,!0),e.interpolate(i,a,o,e)))}function aW(e,t){for(var n=t.stack,r=e?t.rp1:t.rp2,i=(e?t.z0:t.z1)[r],a=t.fv,o=t.pv,s=t.loop,c=t.z2;s--;){var l=n.pop(),u=c[l],d=o.distance(i,i,!1,!0);a.setRelative(u,u,d,o),a.touch(u),exports.DEBUG&&console.log(t.step,(t.loop>1?`loop `+(t.loop-s)+`: `:``)+`SHP[`+(e?`rp1`:`rp2`)+`]`,l)}t.loop=1}function oW(e,t){var n=t.stack,r=e?t.rp1:t.rp2,i=(e?t.z0:t.z1)[r],a=t.fv,o=t.pv,s=n.pop(),c=t.z2[t.contours[s]],l=c;exports.DEBUG&&console.log(t.step,`SHC[`+e+`]`,s);var u=o.distance(i,i,!1,!0);do l!==i&&a.setRelative(l,l,u,o),l=l.nextPointOnContour;while(l!==c)}function sW(e,t){var n=t.stack,r=e?t.rp1:t.rp2,i=(e?t.z0:t.z1)[r],a=t.fv,o=t.pv,s=n.pop();exports.DEBUG&&console.log(t.step,`SHZ[`+e+`]`,s);var c;switch(s){case 0:c=t.tZone;break;case 1:c=t.gZone;break;default:throw Error(`Invalid zone`)}for(var l,u=o.distance(i,i,!1,!0),d=c.length-2,f=0;f<d;f++)l=c[f],a.setRelative(l,l,u,o)}function cW(e){for(var t=e.stack,n=e.loop,r=e.fv,i=t.pop()/64,a=e.z2;n--;){var o=t.pop(),s=a[o];exports.DEBUG&&console.log(e.step,(e.loop>1?`loop `+(e.loop-n)+`: `:``)+`SHPIX[]`,o,i),r.setRelative(s,s,i),r.touch(s)}e.loop=1}function lW(e){for(var t=e.stack,n=e.rp1,r=e.rp2,i=e.loop,a=e.z0[n],o=e.z1[r],s=e.fv,c=e.dpv,l=e.z2;i--;){var u=t.pop(),d=l[u];exports.DEBUG&&console.log(e.step,(e.loop>1?`loop `+(e.loop-i)+`: `:``)+`IP[]`,u,n,`<->`,r),s.interpolate(d,a,o,c),s.touch(d)}e.loop=1}function uW(e,t){var n=t.stack,r=n.pop()/64,i=n.pop(),a=t.z1[i],o=t.z0[t.rp0],s=t.fv,c=t.pv;s.setRelative(a,o,r,c),s.touch(a),exports.DEBUG&&console.log(t.step,`MSIRP[`+e+`]`,r,i),t.rp1=t.rp0,t.rp2=i,e&&(t.rp0=i)}function dW(e){for(var t=e.stack,n=e.rp0,r=e.z0[n],i=e.loop,a=e.fv,o=e.pv,s=e.z1;i--;){var c=t.pop(),l=s[c];exports.DEBUG&&console.log(e.step,(e.loop>1?`loop `+(e.loop-i)+`: `:``)+`ALIGNRP[]`,c),a.setRelative(l,r,0,o),a.touch(l)}e.loop=1}function fW(e){exports.DEBUG&&console.log(e.step,`RTDG[]`),e.round=sU}function pW(e,t){var n=t.stack,r=n.pop(),i=n.pop(),a=t.z0[i],o=t.fv,s=t.pv,c=t.cvt[r];exports.DEBUG&&console.log(t.step,`MIAP[`+e+`]`,r,`(`,c,`)`,i);var l=s.distance(a,_U);e&&(Math.abs(l-c)<t.cvCutIn&&(l=c),l=t.round(l)),o.setRelative(a,_U,l,s),t.zp0===0&&(a.xo=a.x,a.yo=a.y),o.touch(a),t.rp0=t.rp1=i}function mW(e){var t=e.prog,n=e.ip,r=e.stack,i=t[++n];exports.DEBUG&&console.log(e.step,`NPUSHB[]`,i);for(var a=0;a<i;a++)r.push(t[++n]);e.ip=n}function hW(e){var t=e.ip,n=e.prog,r=e.stack,i=n[++t];exports.DEBUG&&console.log(e.step,`NPUSHW[]`,i);for(var a=0;a<i;a++){var o=n[++t]<<8|n[++t];o&32768&&(o=-((o^65535)+1)),r.push(o)}e.ip=t}function gW(e){var t=e.stack,n=e.store;n||=e.store=[];var r=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,`WS`,r,i),n[i]=r}function _W(e){var t=e.stack,n=e.store,r=t.pop();exports.DEBUG&&console.log(e.step,`RS`,r);var i=n&&n[r]||0;t.push(i)}function vW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`WCVTP`,n,r),e.cvt[r]=n/64}function yW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`RCVT`,n),t.push(e.cvt[n]*64)}function bW(e,t){var n=t.stack,r=n.pop(),i=t.z2[r];exports.DEBUG&&console.log(t.step,`GC[`+e+`]`,r),n.push(t.dpv.distance(i,_U,e,!1)*64)}function xW(e,t){var n=t.stack,r=n.pop(),i=n.pop(),a=t.z1[r],o=t.z0[i],s=t.dpv.distance(o,a,e,e);exports.DEBUG&&console.log(t.step,`MD[`+e+`]`,r,i,`->`,s),t.stack.push(Math.round(s*64))}function SW(e){exports.DEBUG&&console.log(e.step,`MPPEM[]`),e.stack.push(e.ppem)}function CW(e){exports.DEBUG&&console.log(e.step,`FLIPON[]`),e.autoFlip=!0}function wW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`LT[]`,n,r),t.push(+(r<n))}function TW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`LTEQ[]`,n,r),t.push(+(r<=n))}function EW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`GT[]`,n,r),t.push(+(r>n))}function DW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`GTEQ[]`,n,r),t.push(+(r>=n))}function OW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`EQ[]`,n,r),t.push(+(n===r))}function kW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`NEQ[]`,n,r),t.push(n===r?0:1)}function AW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`ODD[]`,n),t.push(Math.trunc(n)%2?1:0)}function jW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`EVEN[]`,n),t.push(Math.trunc(n)%2?0:1)}function MW(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`IF[]`,t),t||(xU(e,!0),exports.DEBUG&&console.log(e.step,`EIF[]`))}function NW(e){exports.DEBUG&&console.log(e.step,`EIF[]`)}function PW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`AND[]`,n,r),t.push(n&&r?1:0)}function FW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`OR[]`,n,r),t.push(n||r?1:0)}function IW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`NOT[]`,n),t.push(+!n)}function LW(e,t){var n=t.stack,r=n.pop(),i=t.fv,a=t.pv,o=t.ppem,s=t.deltaBase+(e-1)*16,c=t.deltaShift,l=t.z0;exports.DEBUG&&console.log(t.step,`DELTAP[`+e+`]`,r,n);for(var u=0;u<r;u++){var d=n.pop(),f=n.pop();if(s+((f&240)>>4)===o){var p=(f&15)-8;p>=0&&p++,exports.DEBUG&&console.log(t.step,`DELTAPFIX`,d,`by`,p*c);var m=l[d];i.setRelative(m,m,p*c,a)}}}function RW(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SDB[]`,t),e.deltaBase=t}function zW(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SDS[]`,t),e.deltaShift=.5**t}function BW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`ADD[]`,n,r),t.push(r+n)}function VW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`SUB[]`,n,r),t.push(r-n)}function HW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`DIV[]`,n,r),t.push(r*64/n)}function UW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`MUL[]`,n,r),t.push(r*n/64)}function WW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`ABS[]`,n),t.push(Math.abs(n))}function GW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`NEG[]`,n),t.push(-n)}function KW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`FLOOR[]`,n),t.push(Math.floor(n/64)*64)}function qW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`CEILING[]`,n),t.push(Math.ceil(n/64)*64)}function JW(e,t){var n=t.stack,r=n.pop();exports.DEBUG&&console.log(t.step,`ROUND[]`),n.push(t.round(r/64)*64)}function YW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`WCVTF[]`,n,r),e.cvt[r]=n*e.ppem/e.font.unitsPerEm}function XW(e,t){var n=t.stack,r=n.pop(),i=t.ppem,a=t.deltaBase+(e-1)*16,o=t.deltaShift;exports.DEBUG&&console.log(t.step,`DELTAC[`+e+`]`,r,n);for(var s=0;s<r;s++){var c=n.pop(),l=n.pop();if(a+((l&240)>>4)===i){var u=(l&15)-8;u>=0&&u++;var d=u*o;exports.DEBUG&&console.log(t.step,`DELTACFIX`,c,`by`,d),t.cvt[c]+=d}}}function ZW(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SROUND[]`,t),e.round=dU;var n;switch(t&192){case 0:n=.5;break;case 64:n=1;break;case 128:n=2;break;default:throw Error(`invalid SROUND value`)}switch(e.srPeriod=n,t&48){case 0:e.srPhase=0;break;case 16:e.srPhase=.25*n;break;case 32:e.srPhase=.5*n;break;case 48:e.srPhase=.75*n;break;default:throw Error(`invalid SROUND value`)}t&=15,t===0?e.srThreshold=0:e.srThreshold=(t/8-.5)*n}function QW(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`S45ROUND[]`,t),e.round=dU;var n;switch(t&192){case 0:n=Math.sqrt(2)/2;break;case 64:n=Math.sqrt(2);break;case 128:n=2*Math.sqrt(2);break;default:throw Error(`invalid S45ROUND value`)}switch(e.srPeriod=n,t&48){case 0:e.srPhase=0;break;case 16:e.srPhase=.25*n;break;case 32:e.srPhase=.5*n;break;case 48:e.srPhase=.75*n;break;default:throw Error(`invalid S45ROUND value`)}t&=15,t===0?e.srThreshold=0:e.srThreshold=(t/8-.5)*n}function $W(e){exports.DEBUG&&console.log(e.step,`ROFF[]`),e.round=aU}function eG(e){exports.DEBUG&&console.log(e.step,`RUTG[]`),e.round=lU}function tG(e){exports.DEBUG&&console.log(e.step,`RDTG[]`),e.round=uU}function nG(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SCANCTRL[]`,t)}function rG(e,t){var n=t.stack,r=n.pop(),i=n.pop(),a=t.z2[r],o=t.z1[i];exports.DEBUG&&console.log(t.step,`SDPVTL[`+e+`]`,r,i);var s,c;e?(s=a.y-o.y,c=o.x-a.x):(s=o.x-a.x,c=o.y-a.y),t.dpv=hU(s,c)}function iG(e){var t=e.stack,n=t.pop(),r=0;exports.DEBUG&&console.log(e.step,`GETINFO[]`,n),n&1&&(r=35),n&32&&(r|=4096),t.push(r)}function aG(e){var t=e.stack,n=t.pop(),r=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,`ROLL[]`),t.push(r),t.push(n),t.push(i)}function oG(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`MAX[]`,n,r),t.push(Math.max(r,n))}function sG(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`MIN[]`,n,r),t.push(Math.min(r,n))}function cG(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SCANTYPE[]`,t)}function lG(e){var t=e.stack.pop(),n=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`INSTCTRL[]`,t,n),t){case 1:e.inhibitGridFit=!!n;return;case 2:e.ignoreCvt=!!n;return;default:throw Error(`invalid INSTCTRL[] selector`)}}function uG(e,t){var n=t.stack,r=t.prog,i=t.ip;exports.DEBUG&&console.log(t.step,`PUSHB[`+e+`]`);for(var a=0;a<e;a++)n.push(r[++i]);t.ip=i}function dG(e,t){var n=t.ip,r=t.prog,i=t.stack;exports.DEBUG&&console.log(t.ip,`PUSHW[`+e+`]`);for(var a=0;a<e;a++){var o=r[++n]<<8|r[++n];o&32768&&(o=-((o^65535)+1)),i.push(o)}t.ip=n}function Q(e,t,n,r,i,a){var o=a.stack,s=e&&o.pop(),c=o.pop(),l=a.rp0,u=a.z0[l],d=a.z1[c],f=a.minDis,p=a.fv,m=a.dpv,h,g=h=m.distance(d,u,!0,!0),_=g>=0?1:-1,v;g=Math.abs(g),e&&(v=a.cvt[s],r&&Math.abs(g-v)<a.cvCutIn&&(g=v)),n&&g<f&&(g=f),r&&(g=a.round(g)),p.setRelative(d,u,_*g,m),p.touch(d),exports.DEBUG&&console.log(a.step,(e?`MIRP[`:`MDRP[`)+(t?`M`:`m`)+(n?`>`:`_`)+(r?`R`:`_`)+(i===0?`Gr`:i===1?`Bl`:i===2?`Wh`:``)+`]`,e?s+`(`+a.cvt[s]+`,`+v+`)`:``,c,`(d =`,h,`->`,_*g,`)`),a.rp1=a.rp0,a.rp2=c,t&&(a.rp0=c)}eU=[SU.bind(void 0,pU),SU.bind(void 0,fU),CU.bind(void 0,pU),CU.bind(void 0,fU),wU.bind(void 0,pU),wU.bind(void 0,fU),TU.bind(void 0,0),TU.bind(void 0,1),EU.bind(void 0,0),EU.bind(void 0,1),DU,OU,kU,AU,jU,MU,NU,PU,FU,IU,LU,RU,zU,BU,VU,HU,UU,WU,GU,KU,void 0,void 0,qU,JU,YU,XU,ZU,eW,tW,void 0,void 0,void 0,QU,$U,nW,void 0,rW.bind(void 0,0),rW.bind(void 0,1),iW.bind(void 0,pU),iW.bind(void 0,fU),aW.bind(void 0,0),aW.bind(void 0,1),oW.bind(void 0,0),oW.bind(void 0,1),sW.bind(void 0,0),sW.bind(void 0,1),cW,lW,uW.bind(void 0,0),uW.bind(void 0,1),dW,fW,pW.bind(void 0,0),pW.bind(void 0,1),mW,hW,gW,_W,vW,yW,bW.bind(void 0,0),bW.bind(void 0,1),void 0,xW.bind(void 0,0),xW.bind(void 0,1),SW,void 0,CW,void 0,void 0,wW,TW,EW,DW,OW,kW,AW,jW,MW,NW,PW,FW,IW,LW.bind(void 0,1),RW,zW,BW,VW,HW,UW,WW,GW,KW,qW,JW.bind(void 0,0),JW.bind(void 0,1),JW.bind(void 0,2),JW.bind(void 0,3),void 0,void 0,void 0,void 0,YW,LW.bind(void 0,2),LW.bind(void 0,3),XW.bind(void 0,1),XW.bind(void 0,2),XW.bind(void 0,3),ZW,QW,void 0,void 0,$W,void 0,eG,tG,JU,JU,void 0,void 0,void 0,void 0,void 0,nG,rG.bind(void 0,0),rG.bind(void 0,1),iG,void 0,aG,oG,sG,cG,lG,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,uG.bind(void 0,1),uG.bind(void 0,2),uG.bind(void 0,3),uG.bind(void 0,4),uG.bind(void 0,5),uG.bind(void 0,6),uG.bind(void 0,7),uG.bind(void 0,8),dG.bind(void 0,1),dG.bind(void 0,2),dG.bind(void 0,3),dG.bind(void 0,4),dG.bind(void 0,5),dG.bind(void 0,6),dG.bind(void 0,7),dG.bind(void 0,8),Q.bind(void 0,0,0,0,0,0),Q.bind(void 0,0,0,0,0,1),Q.bind(void 0,0,0,0,0,2),Q.bind(void 0,0,0,0,0,3),Q.bind(void 0,0,0,0,1,0),Q.bind(void 0,0,0,0,1,1),Q.bind(void 0,0,0,0,1,2),Q.bind(void 0,0,0,0,1,3),Q.bind(void 0,0,0,1,0,0),Q.bind(void 0,0,0,1,0,1),Q.bind(void 0,0,0,1,0,2),Q.bind(void 0,0,0,1,0,3),Q.bind(void 0,0,0,1,1,0),Q.bind(void 0,0,0,1,1,1),Q.bind(void 0,0,0,1,1,2),Q.bind(void 0,0,0,1,1,3),Q.bind(void 0,0,1,0,0,0),Q.bind(void 0,0,1,0,0,1),Q.bind(void 0,0,1,0,0,2),Q.bind(void 0,0,1,0,0,3),Q.bind(void 0,0,1,0,1,0),Q.bind(void 0,0,1,0,1,1),Q.bind(void 0,0,1,0,1,2),Q.bind(void 0,0,1,0,1,3),Q.bind(void 0,0,1,1,0,0),Q.bind(void 0,0,1,1,0,1),Q.bind(void 0,0,1,1,0,2),Q.bind(void 0,0,1,1,0,3),Q.bind(void 0,0,1,1,1,0),Q.bind(void 0,0,1,1,1,1),Q.bind(void 0,0,1,1,1,2),Q.bind(void 0,0,1,1,1,3),Q.bind(void 0,1,0,0,0,0),Q.bind(void 0,1,0,0,0,1),Q.bind(void 0,1,0,0,0,2),Q.bind(void 0,1,0,0,0,3),Q.bind(void 0,1,0,0,1,0),Q.bind(void 0,1,0,0,1,1),Q.bind(void 0,1,0,0,1,2),Q.bind(void 0,1,0,0,1,3),Q.bind(void 0,1,0,1,0,0),Q.bind(void 0,1,0,1,0,1),Q.bind(void 0,1,0,1,0,2),Q.bind(void 0,1,0,1,0,3),Q.bind(void 0,1,0,1,1,0),Q.bind(void 0,1,0,1,1,1),Q.bind(void 0,1,0,1,1,2),Q.bind(void 0,1,0,1,1,3),Q.bind(void 0,1,1,0,0,0),Q.bind(void 0,1,1,0,0,1),Q.bind(void 0,1,1,0,0,2),Q.bind(void 0,1,1,0,0,3),Q.bind(void 0,1,1,0,1,0),Q.bind(void 0,1,1,0,1,1),Q.bind(void 0,1,1,0,1,2),Q.bind(void 0,1,1,0,1,3),Q.bind(void 0,1,1,1,0,0),Q.bind(void 0,1,1,1,0,1),Q.bind(void 0,1,1,1,0,2),Q.bind(void 0,1,1,1,0,3),Q.bind(void 0,1,1,1,1,0),Q.bind(void 0,1,1,1,1,1),Q.bind(void 0,1,1,1,1,2),Q.bind(void 0,1,1,1,1,3)];function fG(e){this.char=e,this.state={},this.activeState=null}function pG(e,t,n){this.contextName=n,this.startIndex=e,this.endOffset=t}function mG(e,t,n){this.contextName=e,this.openRange=null,this.ranges=[],this.checkStart=t,this.checkEnd=n}function hG(e,t){this.context=e,this.index=t,this.length=e.length,this.current=e[t],this.backtrack=e.slice(0,t),this.lookahead=e.slice(t+1)}function gG(e){this.eventId=e,this.subscribers=[]}function _G(e){var t=this,n=[`start`,`end`,`next`,`newToken`,`contextStart`,`contextEnd`,`insertToken`,`removeToken`,`removeRange`,`replaceToken`,`replaceRange`,`composeRUD`,`updateContextsRanges`];n.forEach(function(e){Object.defineProperty(t.events,e,{value:new gG(e)})}),e&&n.forEach(function(n){var r=e[n];typeof r==`function`&&t.events[n].subscribe(r)}),[`insertToken`,`removeToken`,`removeRange`,`replaceToken`,`replaceRange`,`composeRUD`].forEach(function(e){t.events[e].subscribe(t.updateContextsRanges)})}function vG(e){this.tokens=[],this.registeredContexts={},this.contextCheckers=[],this.events={},this.registeredModifiers=[],_G.call(this,e)}fG.prototype.setState=function(e,t){return this.state[e]=t,this.activeState={key:e,value:this.state[e]},this.activeState},fG.prototype.getState=function(e){return this.state[e]||null},vG.prototype.inboundIndex=function(e){return e>=0&&e<this.tokens.length},vG.prototype.composeRUD=function(e){var t=this,n=!0,r=e.map(function(e){return t[e[0]].apply(t,e.slice(1).concat(n))}),i=function(e){return typeof e==`object`&&e.hasOwnProperty(`FAIL`)};if(r.every(i))return{FAIL:`composeRUD: one or more operations hasn't completed successfully`,report:r.filter(i)};this.dispatch(`composeRUD`,[r.filter(function(e){return!i(e)})])},vG.prototype.replaceRange=function(e,t,n,r){t=t===null?this.tokens.length:t;var i=n.every(function(e){return e instanceof fG});if(!isNaN(e)&&this.inboundIndex(e)&&i){var a=this.tokens.splice.apply(this.tokens,[e,t].concat(n));return r||this.dispatch(`replaceToken`,[e,t,n]),[a,n]}else return{FAIL:`replaceRange: invalid tokens or startIndex.`}},vG.prototype.replaceToken=function(e,t,n){if(!isNaN(e)&&this.inboundIndex(e)&&t instanceof fG){var r=this.tokens.splice(e,1,t);return n||this.dispatch(`replaceToken`,[e,t]),[r[0],t]}else return{FAIL:`replaceToken: invalid token or index.`}},vG.prototype.removeRange=function(e,t,n){t=isNaN(t)?this.tokens.length:t;var r=this.tokens.splice(e,t);return n||this.dispatch(`removeRange`,[r,e,t]),r},vG.prototype.removeToken=function(e,t){if(!isNaN(e)&&this.inboundIndex(e)){var n=this.tokens.splice(e,1);return t||this.dispatch(`removeToken`,[n,e]),n}else return{FAIL:`removeToken: invalid token index.`}},vG.prototype.insertToken=function(e,t,n){return e.every(function(e){return e instanceof fG})?(this.tokens.splice.apply(this.tokens,[t,0].concat(e)),n||this.dispatch(`insertToken`,[e,t]),e):{FAIL:`insertToken: invalid token(s).`}},vG.prototype.registerModifier=function(e,t,n){this.events.newToken.subscribe(function(r,i){var a=[r,i],o=t===null||t.apply(this,a)===!0,s=[r,i];if(o){var c=n.apply(this,s);r.setState(e,c)}}),this.registeredModifiers.push(e)},gG.prototype.subscribe=function(e){return typeof e==`function`?this.subscribers.push(e)-1:{FAIL:`invalid '`+this.eventId+`' event handler`}},gG.prototype.unsubscribe=function(e){this.subscribers.splice(e,1)},hG.prototype.setCurrentIndex=function(e){this.index=e,this.current=this.context[e],this.backtrack=this.context.slice(0,e),this.lookahead=this.context.slice(e+1)},hG.prototype.get=function(e){switch(!0){case e===0:return this.current;case e<0&&Math.abs(e)<=this.backtrack.length:return this.backtrack.slice(e)[0];case e>0&&e<=this.lookahead.length:return this.lookahead[e-1];default:return null}},vG.prototype.rangeToText=function(e){if(e instanceof pG)return this.getRangeTokens(e).map(function(e){return e.char}).join(``)},vG.prototype.getText=function(){return this.tokens.map(function(e){return e.char}).join(``)},vG.prototype.getContext=function(e){return this.registeredContexts[e]||null},vG.prototype.on=function(e,t){var n=this.events[e];return n?n.subscribe(t):null},vG.prototype.dispatch=function(e,t){var n=this,r=this.events[e];r instanceof gG&&r.subscribers.forEach(function(e){e.apply(n,t||[])})},vG.prototype.registerContextChecker=function(e,t,n){if(this.getContext(e))return{FAIL:`context name '`+e+`' is already registered.`};if(typeof t!=`function`)return{FAIL:`missing context start check.`};if(typeof n!=`function`)return{FAIL:`missing context end check.`};var r=new mG(e,t,n);return this.registeredContexts[e]=r,this.contextCheckers.push(r),r},vG.prototype.getRangeTokens=function(e){var t=e.startIndex+e.endOffset;return[].concat(this.tokens.slice(e.startIndex,t))},vG.prototype.getContextRanges=function(e){var t=this.getContext(e);return t?t.ranges:{FAIL:`context checker '`+e+`' is not registered.`}},vG.prototype.resetContextsRanges=function(){var e=this.registeredContexts;for(var t in e)if(e.hasOwnProperty(t)){var n=e[t];n.ranges=[]}},vG.prototype.updateContextsRanges=function(){this.resetContextsRanges();for(var e=this.tokens.map(function(e){return e.char}),t=0;t<e.length;t++){var n=new hG(e,t);this.runContextCheck(n)}this.dispatch(`updateContextsRanges`,[this.registeredContexts])},vG.prototype.setEndOffset=function(e,t){var n=this.getContext(t).openRange.startIndex,r=new pG(n,e,t),i=this.getContext(t).ranges;return r.rangeId=t+`.`+i.length,i.push(r),this.getContext(t).openRange=null,r},vG.prototype.runContextCheck=function(e){var t=this,n=e.index;this.contextCheckers.forEach(function(r){var i=r.contextName,a=t.getContext(i).openRange;if(!a&&r.checkStart(e)&&(a=new pG(n,null,i),t.getContext(i).openRange=a,t.dispatch(`contextStart`,[i,n])),a&&r.checkEnd(e)){var o=n-a.startIndex+1,s=t.setEndOffset(o,i);t.dispatch(`contextEnd`,[i,s])}})},vG.prototype.tokenize=function(e){this.tokens=[],this.resetContextsRanges();var t=Array.from(e);this.dispatch(`start`);for(var n=0;n<t.length;n++){var r=t[n],i=new hG(t,n);this.dispatch(`next`,[i]),this.runContextCheck(i);var a=new fG(r);this.tokens.push(a),this.dispatch(`newToken`,[a,i])}return this.dispatch(`end`,[this.tokens]),this.tokens};function yG(e){return/[\u0600-\u065F\u066A-\u06D2\u06FA-\u06FF]/.test(e)}function bG(e){return/[\u0630\u0690\u0621\u0631\u0661\u0671\u0622\u0632\u0672\u0692\u06C2\u0623\u0673\u0693\u06C3\u0624\u0694\u06C4\u0625\u0675\u0695\u06C5\u06E5\u0676\u0696\u06C6\u0627\u0677\u0697\u06C7\u0648\u0688\u0698\u06C8\u0689\u0699\u06C9\u068A\u06CA\u066B\u068B\u06CB\u068C\u068D\u06CD\u06FD\u068E\u06EE\u06FE\u062F\u068F\u06CF\u06EF]/.test(e)}function xG(e){return/[\u0600-\u0605\u060C-\u060E\u0610-\u061B\u061E\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED]/.test(e)}function SG(e){return/[A-z]/.test(e)}function CG(e){return/\s/.test(e)}function wG(e){this.font=e,this.features={}}function TG(e){this.id=e.id,this.tag=e.tag,this.substitution=e.substitution}function EG(e,t){if(!e)return-1;switch(t.format){case 1:return t.glyphs.indexOf(e);case 2:for(var n=t.ranges,r=0;r<n.length;r++){var i=n[r];if(e>=i.start&&e<=i.end){var a=e-i.start;return i.index+a}}break;default:return-1}return-1}function DG(e,t){return EG(e,t.coverage)===-1?null:e+t.deltaGlyphId}function OG(e,t){var n=EG(e,t.coverage);return n===-1?null:t.substitute[n]}function kG(e,t){for(var n=[],r=0;r<e.length;r++){var i=e[r],a=t.current;a=Array.isArray(a)?a[0]:a;var o=EG(a,i);o!==-1&&n.push(o)}return n.length===e.length?n:-1}function AG(e,t){var n=t.inputCoverage.length+t.lookaheadCoverage.length+t.backtrackCoverage.length;if(e.context.length<n)return[];var r=kG(t.inputCoverage,e);if(r===-1)return[];var i=t.inputCoverage.length-1;if(e.lookahead.length<t.lookaheadCoverage.length)return[];for(var a=e.lookahead.slice(i);a.length&&xG(a[0].char);)a.shift();var o=new hG(a,0),s=kG(t.lookaheadCoverage,o),c=[].concat(e.backtrack);for(c.reverse();c.length&&xG(c[0].char);)c.shift();if(c.length<t.backtrackCoverage.length)return[];var l=new hG(c,0),u=kG(t.backtrackCoverage,l),d=r.length===t.inputCoverage.length&&s.length===t.lookaheadCoverage.length&&u.length===t.backtrackCoverage.length,f=[];if(d)for(var p=0;p<t.lookupRecords.length;p++)for(var m=t.lookupRecords[p].lookupListIndex,h=this.getLookupByIndex(m),g=0;g<h.subtables.length;g++){var _=h.subtables[g],v=this.getLookupMethod(h,_);if(this.getSubstitutionType(h,_)===`12`)for(var y=0;y<r.length;y++){var b=v(e.get(y));b&&f.push(b)}}return f}function jG(e,t){var n=e.current,r=EG(n,t.coverage);if(r===-1)return null;for(var i,a=t.ligatureSets[r],o=0;o<a.length;o++){i=a[o];for(var s=0;s<i.components.length&&e.lookahead[s]===i.components[s];s++)if(s===i.components.length-1)return i}return null}function MG(e,t){var n=EG(e,t.coverage);return n===-1?null:t.sequences[n]}wG.prototype.getDefaultScriptFeaturesIndexes=function(){for(var e=this.font.tables.gsub.scripts,t=0;t<e.length;t++){var n=e[t];if(n.tag===`DFLT`)return n.script.defaultLangSys.featureIndexes}return[]},wG.prototype.getScriptFeaturesIndexes=function(e){if(!this.font.tables.gsub)return[];if(!e)return this.getDefaultScriptFeaturesIndexes();for(var t=this.font.tables.gsub.scripts,n=0;n<t.length;n++){var r=t[n];if(r.tag===e&&r.script.defaultLangSys)return r.script.defaultLangSys.featureIndexes;var i=r.langSysRecords;if(i)for(var a=0;a<i.length;a++){var o=i[a];if(o.tag===e)return o.langSys.featureIndexes}}return this.getDefaultScriptFeaturesIndexes()},wG.prototype.mapTagsToFeatures=function(e,t){for(var n={},r=0;r<e.length;r++){var i=e[r].tag;n[i]=e[r].feature}this.features[t].tags=n},wG.prototype.getScriptFeatures=function(e){var t=this.features[e];if(this.features.hasOwnProperty(e))return t;var n=this.getScriptFeaturesIndexes(e);if(!n)return null;var r=this.font.tables.gsub;return t=n.map(function(e){return r.features[e]}),this.features[e]=t,this.mapTagsToFeatures(t,e),t},wG.prototype.getSubstitutionType=function(e,t){return e.lookupType.toString()+t.substFormat.toString()},wG.prototype.getLookupMethod=function(e,t){var n=this;switch(this.getSubstitutionType(e,t)){case`11`:return function(e){return DG.apply(n,[e,t])};case`12`:return function(e){return OG.apply(n,[e,t])};case`63`:return function(e){return AG.apply(n,[e,t])};case`41`:return function(e){return jG.apply(n,[e,t])};case`21`:return function(e){return MG.apply(n,[e,t])};default:throw Error(`lookupType: `+e.lookupType+` - substFormat: `+t.substFormat+` is not yet supported`)}},wG.prototype.lookupFeature=function(e){var t=e.contextParams,n=t.index,r=this.getFeature({tag:e.tag,script:e.script});if(!r)return Error(`font '`+this.font.names.fullName.en+`' doesn't support feature '`+e.tag+`' for script '`+e.script+`'.`);for(var i=this.getFeatureLookups(r),a=[].concat(t.context),o=0;o<i.length;o++)for(var s=i[o],c=this.getLookupSubtables(s),l=0;l<c.length;l++){var u=c[l],d=this.getSubstitutionType(s,u),f=this.getLookupMethod(s,u),p=void 0;switch(d){case`11`:p=f(t.current),p&&a.splice(n,1,new TG({id:11,tag:e.tag,substitution:p}));break;case`12`:p=f(t.current),p&&a.splice(n,1,new TG({id:12,tag:e.tag,substitution:p}));break;case`63`:p=f(t),Array.isArray(p)&&p.length&&a.splice(n,1,new TG({id:63,tag:e.tag,substitution:p}));break;case`41`:p=f(t),p&&a.splice(n,1,new TG({id:41,tag:e.tag,substitution:p}));break;case`21`:p=f(t.current),p&&a.splice(n,1,new TG({id:21,tag:e.tag,substitution:p}));break}t=new hG(a,n),!(Array.isArray(p)&&!p.length)&&(p=null)}return a.length?a:null},wG.prototype.supports=function(e){if(!e.script)return!1;this.getScriptFeatures(e.script);var t=this.features.hasOwnProperty(e.script);if(!e.tag)return t;var n=this.features[e.script].some(function(t){return t.tag===e.tag});return t&&n},wG.prototype.getLookupSubtables=function(e){return e.subtables||null},wG.prototype.getLookupByIndex=function(e){return this.font.tables.gsub.lookups[e]||null},wG.prototype.getFeatureLookups=function(e){return e.lookupListIndexes.map(this.getLookupByIndex.bind(this))},wG.prototype.getFeature=function(e){if(!this.font)return{FAIL:`No font was found`};this.features.hasOwnProperty(e.script)||this.getScriptFeatures(e.script);var t=this.features[e.script];return t?t.tags[e.tag]?this.features[e.script].tags[e.tag]:null:{FAIL:`No feature for script `+e.script}};function NG(e){var t=e.current,n=e.get(-1);return n===null&&yG(t)||!yG(n)&&yG(t)}function PG(e){var t=e.get(1);return t===null||!yG(t)}var FG={startCheck:NG,endCheck:PG};function IG(e){var t=e.current,n=e.get(-1);return(yG(t)||xG(t))&&!yG(n)}function LG(e){var t=e.get(1);switch(!0){case t===null:return!0;case!yG(t)&&!xG(t):var n=CG(t);if(!n)return!0;if(n){var r=!1;if(r=e.lookahead.some(function(e){return yG(e)||xG(e)}),!r)return!0}break;default:return!1}}var RG={startCheck:IG,endCheck:LG};function zG(e,t,n){t[n].setState(e.tag,e.substitution)}function BG(e,t,n){t[n].setState(e.tag,e.substitution)}function VG(e,t,n){e.substitution.forEach(function(r,i){t[n+i].setState(e.tag,r)})}function HG(e,t,n){var r=t[n];r.setState(e.tag,e.substitution.ligGlyph);for(var i=e.substitution.components.length,a=0;a<i;a++)r=t[n+a+1],r.setState(`deleted`,!0)}var UG={11:zG,12:BG,63:VG,41:HG};function WG(e,t,n){e instanceof TG&&UG[e.id]&&UG[e.id](e,t,n)}function GG(e){for(var t=[].concat(e.backtrack),n=t.length-1;n>=0;n--){var r=t[n],i=bG(r),a=xG(r);if(!i&&!a)return!0;if(i)return!1}return!1}function KG(e){if(bG(e.current))return!1;for(var t=0;t<e.lookahead.length;t++){var n=e.lookahead[t];if(!xG(n))return!0}return!1}function qG(e){var t=this,n=`arab`,r=this.featuresTags[n],i=this.tokenizer.getRangeTokens(e);if(i.length!==1){var a=new hG(i.map(function(e){return e.getState(`glyphIndex`)}),0),o=new hG(i.map(function(e){return e.char}),0);i.forEach(function(e,s){if(!xG(e.char)){a.setCurrentIndex(s),o.setCurrentIndex(s);var c=0;GG(o)&&(c|=1),KG(o)&&(c|=2);var l;switch(c){case 1:l=`fina`;break;case 2:l=`init`;break;case 3:l=`medi`;break}if(r.indexOf(l)!==-1){var u=t.query.lookupFeature({tag:l,script:n,contextParams:a});if(u instanceof Error)return console.info(u.message);u.forEach(function(e,t){e instanceof TG&&(WG(e,i,t),a.context[t]=e.substitution)})}}})}}function JG(e,t){return new hG(e.map(function(e){return e.activeState.value}),t||0)}function YG(e){var t=this,n=`arab`,r=this.tokenizer.getRangeTokens(e),i=JG(r);i.context.forEach(function(e,a){i.setCurrentIndex(a);var o=t.query.lookupFeature({tag:`rlig`,script:n,contextParams:i});o.length&&(o.forEach(function(e){return WG(e,r,a)}),i=JG(r))})}function XG(e){var t=e.current,n=e.get(-1);return n===null&&SG(t)||!SG(n)&&SG(t)}function ZG(e){var t=e.get(1);return t===null||!SG(t)}var QG={startCheck:XG,endCheck:ZG};function $G(e,t){return new hG(e.map(function(e){return e.activeState.value}),t||0)}function eK(e){var t=this,n=`latn`,r=this.tokenizer.getRangeTokens(e),i=$G(r);i.context.forEach(function(e,a){i.setCurrentIndex(a);var o=t.query.lookupFeature({tag:`liga`,script:n,contextParams:i});o.length&&(o.forEach(function(e){return WG(e,r,a)}),i=$G(r))})}function tK(e){this.baseDir=e||`ltr`,this.tokenizer=new vG,this.featuresTags={}}tK.prototype.setText=function(e){this.text=e},tK.prototype.contextChecks={latinWordCheck:QG,arabicWordCheck:FG,arabicSentenceCheck:RG};function nK(e){var t=this.contextChecks[e+`Check`];return this.tokenizer.registerContextChecker(e,t.startCheck,t.endCheck)}function rK(){return nK.call(this,`latinWord`),nK.call(this,`arabicWord`),nK.call(this,`arabicSentence`),this.tokenizer.tokenize(this.text)}function iK(){var e=this;this.tokenizer.getContextRanges(`arabicSentence`).forEach(function(t){var n=e.tokenizer.getRangeTokens(t);e.tokenizer.replaceRange(t.startIndex,t.endOffset,n.reverse())})}tK.prototype.registerFeatures=function(e,t){var n=this,r=t.filter(function(t){return n.query.supports({script:e,tag:t})});this.featuresTags.hasOwnProperty(e)?this.featuresTags[e]=this.featuresTags[e].concat(r):this.featuresTags[e]=r},tK.prototype.applyFeatures=function(e,t){if(!e)throw Error(`No valid font was provided to apply features`);this.query||=new wG(e);for(var n=0;n<t.length;n++){var r=t[n];this.query.supports({script:r.script})&&this.registerFeatures(r.script,r.tags)}},tK.prototype.registerModifier=function(e,t,n){this.tokenizer.registerModifier(e,t,n)};function aK(){if(this.tokenizer.registeredModifiers.indexOf(`glyphIndex`)===-1)throw Error(`glyphIndex modifier is required to apply arabic presentation features.`)}function oK(){var e=this;this.featuresTags.hasOwnProperty(`arab`)&&(aK.call(this),this.tokenizer.getContextRanges(`arabicWord`).forEach(function(t){qG.call(e,t)}))}function sK(){var e=this,t=`arab`;this.featuresTags.hasOwnProperty(t)&&this.featuresTags[t].indexOf(`rlig`)!==-1&&(aK.call(this),this.tokenizer.getContextRanges(`arabicWord`).forEach(function(t){YG.call(e,t)}))}function cK(){var e=this,t=`latn`;this.featuresTags.hasOwnProperty(t)&&this.featuresTags[t].indexOf(`liga`)!==-1&&(aK.call(this),this.tokenizer.getContextRanges(`latinWord`).forEach(function(t){eK.call(e,t)}))}tK.prototype.checkContextReady=function(e){return!!this.tokenizer.getContext(e)},tK.prototype.applyFeaturesToContexts=function(){this.checkContextReady(`arabicWord`)&&(oK.call(this),sK.call(this)),this.checkContextReady(`latinWord`)&&cK.call(this),this.checkContextReady(`arabicSentence`)&&iK.call(this)},tK.prototype.processText=function(e){(!this.text||this.text!==e)&&(this.setText(e),rK.call(this),this.applyFeaturesToContexts())},tK.prototype.getBidiText=function(e){return this.processText(e),this.tokenizer.getText()},tK.prototype.getTextGlyphs=function(e){this.processText(e);for(var t=[],n=0;n<this.tokenizer.tokens.length;n++){var r=this.tokenizer.tokens[n];if(!r.state.deleted){var i=r.activeState.value;t.push(Array.isArray(i)?i[0]:i)}}return t};function lK(e){e||={},e.tables=e.tables||{},e.empty||(UH(e.familyName,`When creating a new Font object, familyName is required.`),UH(e.styleName,`When creating a new Font object, styleName is required.`),UH(e.unitsPerEm,`When creating a new Font object, unitsPerEm is required.`),UH(e.ascender,`When creating a new Font object, ascender is required.`),UH(e.descender<=0,`When creating a new Font object, negative descender value is required.`),this.names={fontFamily:{en:e.familyName||` `},fontSubfamily:{en:e.styleName||` `},fullName:{en:e.fullName||e.familyName+` `+e.styleName},postScriptName:{en:e.postScriptName||(e.familyName+e.styleName).replace(/\s/g,``)},designer:{en:e.designer||` `},designerURL:{en:e.designerURL||` `},manufacturer:{en:e.manufacturer||` `},manufacturerURL:{en:e.manufacturerURL||` `},license:{en:e.license||` `},licenseURL:{en:e.licenseURL||` `},version:{en:e.version||`Version 0.1`},description:{en:e.description||` `},copyright:{en:e.copyright||` `},trademark:{en:e.trademark||` `}},this.unitsPerEm=e.unitsPerEm||1e3,this.ascender=e.ascender,this.descender=e.descender,this.createdTimestamp=e.createdTimestamp,this.tables=Object.assign(e.tables,{os2:Object.assign({usWeightClass:e.weightClass||this.usWeightClasses.MEDIUM,usWidthClass:e.widthClass||this.usWidthClasses.MEDIUM,fsSelection:e.fsSelection||this.fsSelectionValues.REGULAR},e.tables.os2)})),this.supported=!0,this.glyphs=new GB.GlyphSet(this,e.glyphs||[]),this.encoding=new kB(this),this.position=new IH(this),this.substitution=new LH(this),this.tables=this.tables||{},this._push=null,this._hmtxTableData={},Object.defineProperty(this,"hinting",{get:function(){if(this._hinting)return this._hinting;if(this.outlinesFormat===`truetype`)return this._hinting=new iU(this)}})}lK.prototype.hasChar=function(e){return this.encoding.charToGlyphIndex(e)!==null},lK.prototype.charToGlyphIndex=function(e){return this.encoding.charToGlyphIndex(e)},lK.prototype.charToGlyph=function(e){var t=this.charToGlyphIndex(e),n=this.glyphs.get(t);return n||=this.glyphs.get(0),n},lK.prototype.updateFeatures=function(e){return this.defaultRenderOptions.features.map(function(t){return t.script===`latn`?{script:`latn`,tags:t.tags.filter(function(t){return e[t]})}:t})},lK.prototype.stringToGlyphs=function(e,t){var n=this,r=new tK;r.registerModifier(`glyphIndex`,null,function(e){return n.charToGlyphIndex(e.char)});var i=t?this.updateFeatures(t.features):this.defaultRenderOptions.features;r.applyFeatures(this,i);for(var a=r.getTextGlyphs(e),o=a.length,s=Array(o),c=this.glyphs.get(0),l=0;l<o;l+=1)s[l]=this.glyphs.get(a[l])||c;return s},lK.prototype.nameToGlyphIndex=function(e){return this.glyphNames.nameToGlyphIndex(e)},lK.prototype.nameToGlyph=function(e){var t=this.nameToGlyphIndex(e),n=this.glyphs.get(t);return n||=this.glyphs.get(0),n},lK.prototype.glyphIndexToName=function(e){return this.glyphNames.glyphIndexToName?this.glyphNames.glyphIndexToName(e):``},lK.prototype.getKerningValue=function(e,t){e=e.index||e,t=t.index||t;var n=this.position.defaultKerningTables;return n?this.position.getKerningValue(n,e,t):this.kerningPairs[e+`,`+t]||0},lK.prototype.defaultRenderOptions={kerning:!0,features:[{script:`arab`,tags:[`init`,`medi`,`fina`,`rlig`]},{script:`latn`,tags:[`liga`,`rlig`]}]},lK.prototype.forEachGlyph=function(e,t,n,r,i,a){t=t===void 0?0:t,n=n===void 0?0:n,r=r===void 0?72:r,i=Object.assign({},this.defaultRenderOptions,i);var o=1/this.unitsPerEm*r,s=this.stringToGlyphs(e,i),c;if(i.kerning){var l=i.script||this.position.getDefaultScriptName();c=this.position.getKerningTables(l,i.language)}for(var u=0;u<s.length;u+=1){var d=s[u];if(a.call(this,d,t,n,r,i),d.advanceWidth&&(t+=d.advanceWidth*o),i.kerning&&u<s.length-1){var f=c?this.position.getKerningValue(c,d.index,s[u+1].index):this.getKerningValue(d,s[u+1]);t+=f*o}i.letterSpacing?t+=i.letterSpacing*r:i.tracking&&(t+=i.tracking/1e3*r)}return t},lK.prototype.getPath=function(e,t,n,r,i){var a=new Lz;return this.forEachGlyph(e,t,n,r,i,function(e,t,n,r){var o=e.getPath(t,n,r,i,this);a.extend(o)}),a},lK.prototype.getPaths=function(e,t,n,r,i){var a=[];return this.forEachGlyph(e,t,n,r,i,function(e,t,n,r){var o=e.getPath(t,n,r,i,this);a.push(o)}),a},lK.prototype.getAdvanceWidth=function(e,t,n){return this.forEachGlyph(e,0,0,t,n,function(){})},lK.prototype.draw=function(e,t,n,r,i,a){this.getPath(t,n,r,i,a).draw(e)},lK.prototype.drawPoints=function(e,t,n,r,i,a){this.forEachGlyph(t,n,r,i,a,function(t,n,r,i){t.drawPoints(e,n,r,i)})},lK.prototype.drawMetrics=function(e,t,n,r,i,a){this.forEachGlyph(t,n,r,i,a,function(t,n,r,i){t.drawMetrics(e,n,r,i)})},lK.prototype.getEnglishName=function(e){var t=this.names[e];if(t)return t.en},lK.prototype.validate=function(){var e=this;function t(t){var n=e.getEnglishName(t);n&&n.trim().length}t(`fontFamily`),t(`weightName`),t(`manufacturer`),t(`copyright`),t(`version`),this.unitsPerEm},lK.prototype.toTables=function(){return jH.fontToTable(this)},lK.prototype.toBuffer=function(){return console.warn(`Font.toBuffer is deprecated. Use Font.toArrayBuffer instead.`),this.toArrayBuffer()},lK.prototype.toArrayBuffer=function(){for(var e=this.toTables().encode(),t=new ArrayBuffer(e.length),n=new Uint8Array(t),r=0;r<e.length;r++)n[r]=e[r];return t},lK.prototype.download=function(e){var t=this.getEnglishName(`fontFamily`),n=this.getEnglishName(`fontSubfamily`);e||=t.replace(/\s/g,``)+`-`+n+`.otf`;var r=this.toArrayBuffer();if(BH())if(window.URL=window.URL||window.webkitURL,window.URL){var i=new DataView(r),a=new Blob([i],{type:`font/opentype`}),o=document.createElement(`a`);o.href=window.URL.createObjectURL(a),o.download=e;var s=document.createEvent(`MouseEvents`);s.initEvent(`click`,!0,!1),o.dispatchEvent(s)}else console.warn(`Font file could not be downloaded. Try using a different browser.`);else{var c=lz(),l=HH(r);c.writeFileSync(e,l)}},lK.prototype.fsSelectionValues={ITALIC:1,UNDERSCORE:2,NEGATIVE:4,OUTLINED:8,STRIKEOUT:16,BOLD:32,REGULAR:64,USER_TYPO_METRICS:128,WWS:256,OBLIQUE:512},lK.prototype.usWidthClasses={ULTRA_CONDENSED:1,EXTRA_CONDENSED:2,CONDENSED:3,SEMI_CONDENSED:4,MEDIUM:5,SEMI_EXPANDED:6,EXPANDED:7,EXTRA_EXPANDED:8,ULTRA_EXPANDED:9},lK.prototype.usWeightClasses={THIN:100,EXTRA_LIGHT:200,LIGHT:300,NORMAL:400,MEDIUM:500,SEMI_BOLD:600,BOLD:700,EXTRA_BOLD:800,BLACK:900};function uK(e,t){var n=JSON.stringify(e),r=256;for(var i in t){var a=parseInt(i);if(!(!a||a<256)){if(JSON.stringify(t[i])===n)return a;r<=a&&(r=a+1)}}return t[r]=e,r}function dK(e,t,n){var r=uK(t.name,n);return[{name:`tag_`+e,type:`TAG`,value:t.tag},{name:`minValue_`+e,type:`FIXED`,value:t.minValue<<16},{name:`defaultValue_`+e,type:`FIXED`,value:t.defaultValue<<16},{name:`maxValue_`+e,type:`FIXED`,value:t.maxValue<<16},{name:`flags_`+e,type:`USHORT`,value:0},{name:`nameID_`+e,type:`USHORT`,value:r}]}function fK(e,t,n){var r={},i=new Z.Parser(e,t);return r.tag=i.parseTag(),r.minValue=i.parseFixed(),r.defaultValue=i.parseFixed(),r.maxValue=i.parseFixed(),i.skip(`uShort`,1),r.name=n[i.parseUShort()]||{},r}function pK(e,t,n,r){for(var i=uK(t.name,r),a=[{name:`nameID_`+e,type:`USHORT`,value:i},{name:`flags_`+e,type:`USHORT`,value:0}],o=0;o<n.length;++o){var s=n[o].tag;a.push({name:`axis_`+e+` `+s,type:`FIXED`,value:t.coordinates[s]<<16})}return a}function mK(e,t,n,r){var i={},a=new Z.Parser(e,t);i.name=r[a.parseUShort()]||{},a.skip(`uShort`,1),i.coordinates={};for(var o=0;o<n.length;++o)i.coordinates[n[o].tag]=a.parseFixed();return i}function hK(e,t){var n=new Y.Table(`fvar`,[{name:`version`,type:`ULONG`,value:65536},{name:`offsetToData`,type:`USHORT`,value:0},{name:`countSizePairs`,type:`USHORT`,value:2},{name:`axisCount`,type:`USHORT`,value:e.axes.length},{name:`axisSize`,type:`USHORT`,value:20},{name:`instanceCount`,type:`USHORT`,value:e.instances.length},{name:`instanceSize`,type:`USHORT`,value:4+e.axes.length*4}]);n.offsetToData=n.sizeOf();for(var r=0;r<e.axes.length;r++)n.fields=n.fields.concat(dK(r,e.axes[r],t));for(var i=0;i<e.instances.length;i++)n.fields=n.fields.concat(pK(i,e.instances[i],e.axes,t));return n}function gK(e,t,n){var r=new Z.Parser(e,t),i=r.parseULong();K.argument(i===65536,`Unsupported fvar table version.`);var a=r.parseOffset16();r.skip(`uShort`,1);for(var o=r.parseUShort(),s=r.parseUShort(),c=r.parseUShort(),l=r.parseUShort(),u=[],d=0;d<o;d++)u.push(fK(e,t+a+d*s,n));for(var f=[],p=t+a+o*s,m=0;m<c;m++)f.push(mK(e,p+m*l,u,n));return{axes:u,instances:f}}var _K={make:hK,parse:gK},vK=function(){return{coverage:this.parsePointer(X.coverage),attachPoints:this.parseList(X.pointer(X.uShortList))}},yK=function(){var e=this.parseUShort();if(K.argument(e===1||e===2||e===3,`Unsupported CaretValue table version.`),e===1)return{coordinate:this.parseShort()};if(e===2)return{pointindex:this.parseShort()};if(e===3)return{coordinate:this.parseShort()}},bK=function(){return this.parseList(X.pointer(yK))},xK=function(){return{coverage:this.parsePointer(X.coverage),ligGlyphs:this.parseList(X.pointer(bK))}},SK=function(){return this.parseUShort(),this.parseList(X.pointer(X.coverage))};function CK(e,t){t||=0;var n=new X(e,t),r=n.parseVersion(1);K.argument(r===1||r===1.2||r===1.3,`Unsupported GDEF table version.`);var i={version:r,classDef:n.parsePointer(X.classDef),attachList:n.parsePointer(vK),ligCaretList:n.parsePointer(xK),markAttachClassDef:n.parsePointer(X.classDef)};return r>=1.2&&(i.markGlyphSets=n.parsePointer(SK)),i}var wK={parse:CK},TK=Array(10);TK[1]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{posFormat:1,coverage:this.parsePointer(X.coverage),value:this.parseValueRecord()};if(t===2)return{posFormat:2,coverage:this.parsePointer(X.coverage),values:this.parseValueRecordList()};K.assert(!1,`0x`+e.toString(16)+`: GPOS lookup type 1 format must be 1 or 2.`)},TK[2]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();K.assert(t===1||t===2,`0x`+e.toString(16)+`: GPOS lookup type 2 format must be 1 or 2.`);var n=this.parsePointer(X.coverage),r=this.parseUShort(),i=this.parseUShort();if(t===1)return{posFormat:t,coverage:n,valueFormat1:r,valueFormat2:i,pairSets:this.parseList(X.pointer(X.list(function(){return{secondGlyph:this.parseUShort(),value1:this.parseValueRecord(r),value2:this.parseValueRecord(i)}})))};if(t===2){var a=this.parsePointer(X.classDef),o=this.parsePointer(X.classDef),s=this.parseUShort(),c=this.parseUShort();return{posFormat:t,coverage:n,valueFormat1:r,valueFormat2:i,classDef1:a,classDef2:o,class1Count:s,class2Count:c,classRecords:this.parseList(s,X.list(c,function(){return{value1:this.parseValueRecord(r),value2:this.parseValueRecord(i)}}))}}},TK[3]=function(){return{error:`GPOS Lookup 3 not supported`}},TK[4]=function(){return{error:`GPOS Lookup 4 not supported`}},TK[5]=function(){return{error:`GPOS Lookup 5 not supported`}},TK[6]=function(){return{error:`GPOS Lookup 6 not supported`}},TK[7]=function(){return{error:`GPOS Lookup 7 not supported`}},TK[8]=function(){return{error:`GPOS Lookup 8 not supported`}},TK[9]=function(){return{error:`GPOS Lookup 9 not supported`}};function EK(e,t){t||=0;var n=new X(e,t),r=n.parseVersion(1);return K.argument(r===1||r===1.1,`Unsupported GPOS table version `+r),r===1?{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(TK)}:{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(TK),variations:n.parseFeatureVariationsList()}}var DK=Array(10);function OK(e){return new Y.Table(`GPOS`,[{name:`version`,type:`ULONG`,value:65536},{name:`scripts`,type:`TABLE`,value:new Y.ScriptList(e.scripts)},{name:`features`,type:`TABLE`,value:new Y.FeatureList(e.features)},{name:`lookups`,type:`TABLE`,value:new Y.LookupList(e.lookups,DK)}])}var kK={parse:EK,make:OK};function AK(e){var t={};e.skip(`uShort`);var n=e.parseUShort();K.argument(n===0,`Unsupported kern sub-table version.`),e.skip(`uShort`,2);var r=e.parseUShort();e.skip(`uShort`,3);for(var i=0;i<r;i+=1){var a=e.parseUShort(),o=e.parseUShort(),s=e.parseShort();t[a+`,`+o]=s}return t}function jK(e){var t={};e.skip(`uShort`),e.parseULong()>1&&console.warn(`Only the first kern subtable is supported.`),e.skip(`uLong`);var n=e.parseUShort()&255;if(e.skip(`uShort`),n===0){var r=e.parseUShort();e.skip(`uShort`,3);for(var i=0;i<r;i+=1){var a=e.parseUShort(),o=e.parseUShort(),s=e.parseShort();t[a+`,`+o]=s}}return t}function MK(e,t){var n=new Z.Parser(e,t),r=n.parseUShort();if(r===0)return AK(n);if(r===1)return jK(n);throw Error(`Unsupported kern table version (`+r+`).`)}var NK={parse:MK};function PK(e,t,n,r){for(var i=new Z.Parser(e,t),a=r?i.parseUShort:i.parseULong,o=[],s=0;s<n+1;s+=1){var c=a.call(i);r&&(c*=2),o.push(c)}return o}var FK={parse:PK};function IK(e,t){lz().readFile(e,function(e,n){if(e)return t(e.message);t(null,VH(n))})}function LK(e,t){var n=new XMLHttpRequest;n.open(`get`,e,!0),n.responseType=`arraybuffer`,n.onload=function(){return n.response?t(null,n.response):t(`Font could not be loaded: `+n.statusText)},n.onerror=function(){t(`Font could not be loaded`)},n.send()}function RK(e,t){for(var n=[],r=12,i=0;i<t;i+=1){var a=Z.getTag(e,r),o=Z.getULong(e,r+4),s=Z.getULong(e,r+8),c=Z.getULong(e,r+12);n.push({tag:a,checksum:o,offset:s,length:c,compression:!1}),r+=16}return n}function zK(e,t){for(var n=[],r=44,i=0;i<t;i+=1){var a=Z.getTag(e,r),o=Z.getULong(e,r+4),s=Z.getULong(e,r+8),c=Z.getULong(e,r+12),l=void 0;l=s<c?`WOFF`:!1,n.push({tag:a,offset:o,compression:l,compressedLength:s,length:c}),r+=20}return n}function BK(e,t){if(t.compression===`WOFF`){var n=new Uint8Array(e.buffer,t.offset+2,t.compressedLength-2),r=new Uint8Array(t.length);if(Pz(n,r),r.byteLength!==t.length)throw Error(`Decompression error: `+t.tag+` decompressed length doesn't match recorded length`);return{data:new DataView(r.buffer,0),offset:0}}else return{data:e,offset:t.offset}}function VK(e,t){t??={};var n,r,i=new lK({empty:!0}),a=new DataView(e,0),o,s=[],c=Z.getTag(a,0);if(c===`\0\0\0`||c===`true`||c===`typ1`)i.outlinesFormat=`truetype`,o=Z.getUShort(a,4),s=RK(a,o);else if(c===`OTTO`)i.outlinesFormat=`cff`,o=Z.getUShort(a,4),s=RK(a,o);else if(c===`wOFF`){var l=Z.getTag(a,4);if(l===`\0\0\0`)i.outlinesFormat=`truetype`;else if(l===`OTTO`)i.outlinesFormat=`cff`;else throw Error(`Unsupported OpenType flavor `+c);o=Z.getUShort(a,12),s=zK(a,o)}else throw Error(`Unsupported OpenType signature `+c);for(var u,d,f,p,m,h,g,_,v,y,b,x,S=0;S<o;S+=1){var C=s[S],w=void 0;switch(C.tag){case`cmap`:w=BK(a,C),i.tables.cmap=wB.parse(w.data,w.offset),i.encoding=new AB(i.tables.cmap);break;case`cvt `:w=BK(a,C),x=new Z.Parser(w.data,w.offset),i.tables.cvt=x.parseShortList(C.length/2);break;case`fvar`:d=C;break;case`fpgm`:w=BK(a,C),x=new Z.Parser(w.data,w.offset),i.tables.fpgm=x.parseByteList(C.length);break;case`head`:w=BK(a,C),i.tables.head=AV.parse(w.data,w.offset),i.unitsPerEm=i.tables.head.unitsPerEm,n=i.tables.head.indexToLocFormat;break;case`hhea`:w=BK(a,C),i.tables.hhea=NV.parse(w.data,w.offset),i.ascender=i.tables.hhea.ascender,i.descender=i.tables.hhea.descender,i.numberOfHMetrics=i.tables.hhea.numberOfHMetrics;break;case`hmtx`:g=C;break;case`ltag`:w=BK(a,C),r=VV.parse(w.data,w.offset);break;case`maxp`:w=BK(a,C),i.tables.maxp=WV.parse(w.data,w.offset),i.numGlyphs=i.tables.maxp.numGlyphs;break;case`name`:y=C;break;case`OS/2`:w=BK(a,C),i.tables.os2=dH.parse(w.data,w.offset);break;case`post`:w=BK(a,C),i.tables.post=mH.parse(w.data,w.offset),i.glyphNames=new MB(i.tables.post);break;case`prep`:w=BK(a,C),x=new Z.Parser(w.data,w.offset),i.tables.prep=x.parseByteList(C.length);break;case`glyf`:f=C;break;case`loca`:v=C;break;case`CFF `:u=C;break;case`kern`:_=C;break;case`GDEF`:p=C;break;case`GPOS`:m=C;break;case`GSUB`:h=C;break;case`meta`:b=C;break}}var ee=BK(a,y);if(i.tables.name=oH.parse(ee.data,ee.offset,r),i.names=i.tables.name,f&&v){var te=n===0,ne=BK(a,v),re=FK.parse(ne.data,ne.offset,i.numGlyphs,te),ie=BK(a,f);i.glyphs=$H.parse(ie.data,ie.offset,re,i,t)}else if(u){var ae=BK(a,u);DV.parse(ae.data,ae.offset,i,t)}else throw Error(`Font doesn't contain TrueType or CFF outlines.`);var oe=BK(a,g);if(RV.parse(i,oe.data,oe.offset,i.numberOfHMetrics,i.numGlyphs,i.glyphs,t),FB(i,t),_){var se=BK(a,_);i.kerningPairs=NK.parse(se.data,se.offset)}else i.kerningPairs={};if(p){var ce=BK(a,p);i.tables.gdef=wK.parse(ce.data,ce.offset)}if(m){var le=BK(a,m);i.tables.gpos=kK.parse(le.data,le.offset),i.position.init()}if(h){var ue=BK(a,h);i.tables.gsub=bH.parse(ue.data,ue.offset)}if(d){var de=BK(a,d);i.tables.fvar=_K.parse(de.data,de.offset,i.names)}if(b){var fe=BK(a,b);i.tables.meta=CH.parse(fe.data,fe.offset),i.metas=i.tables.meta}return i}function HK(e,t,n){n??={};var r=typeof window>`u`&&!n.isUrl?IK:LK;return new Promise(function(i,a){r(e,function(e,r){if(e){if(t)return t(e);a(e)}var o;try{o=VK(r,n)}catch(e){if(t)return t(e,null);a(e)}if(t)return t(null,o);i(o)})})}function UK(e,t){return VK(VH(lz().readFileSync(e)),t)}var WK=Object.freeze({__proto__:null,Font:lK,Glyph:zB,Path:Lz,BoundingBox:Iz,_parse:Z,parse:VK,load:HK,loadSync:UK}),GK=class e{sketches;constructor(e){e.length===0&&i(`CompoundSketch`,`Cannot create CompoundSketch with an empty array of sketches`),this.sketches=e}delete(){this.sketches.forEach(e=>{e.delete()})}get outerSketch(){return gA(this.sketches)}get innerSketches(){return this.sketches.slice(1)}get wires(){return rq(this)}face(){return nq(this)}extrude(e,t={}){return iq(this,e,t)}revolve(e,t={}){return aq(this,e,t)}loftWith(t,n={}){return Array.isArray(t)||!(t instanceof e)?i(`CompoundSketch.loftWith`,`A compound (face-with-holes) sketch can only loft to another compound sketch with the same number of sub-sketches.`):oq(this,t,n)}sweepSketch(){return i(`CompoundSketch.sweepSketch`,`Sweeping a compound (face-with-holes) profile is not supported — sweep its outer Sketch instead.`)}};function KK(e){let t={};e.defaultOrigin&&(t.defaultOrigin=e.defaultOrigin),e.defaultDirection&&(t.defaultDirection=e.defaultDirection);let n=new sq(e.wire,t);return e.baseFace&&(n.baseFace=e.baseFace),n}function qK(e){return new GK(e.map(KK))}function JK(e){if(e instanceof sq)return e;let t=e.sketches;if(Array.isArray(t)){let[e,...n]=t;if(e instanceof sq){for(let e of n)e.delete();return e}}i(`asSketch`,`Expected a single-wire profile to loft or sweep.`)}function YK(e){let t;return t=e.baseFace?NA(e.baseFace,e.wire):j(jA(e.wire)),t}function XK(e){return wE(j(lO(e.wire.wrapped)))}function ZK(e,t,{origin:n}={}){let r=j(jA(e.wire)),i=j(DM(r,n?OD(n):e.defaultOrigin,t?OD(t):[0,0,1]));return r[Symbol.dispose](),e.delete(),i}function QK(e,t,{extrusionDirection:n,extrusionProfile:r,twistAngle:i,origin:a}={}){let o=PD(VD(n?OD(n):e.defaultDirection),t),s=a?OD(a):e.defaultOrigin;if(r&&!i){let t=j(bM(e.wire,[...s],[...o],r));return e.delete(),t}if(i){let t=j(xM(e.wire,i,[...s],[...o],r));return e.delete(),t}let c=j(jA(e.wire)),l=j(EM(c,[...o]));return c[Symbol.dispose](),e.delete(),l}function $K(e,t,n={}){let r=Ak(e.wire),i=VD(PD(Nk(e.wire,1e-9),-1)),a=e.defaultDirection,o=PD(LD(i,a),-1),s=JK(t(YD([...r],[...o],[...i]),[...r])),c={forceProfileSpineOthogonality:!0,...n};e.baseFace&&(c.support=e.baseFace.wrapped);let l=j(vM(s.wire,e.wire,c));return e.delete(),l}function eq(e,t,n={},r=!1){let i=[e,...(Array.isArray(t)?t:[t]).map(JK)],a=j(kM(i.map(e=>e.wire),n,r));return i.forEach(e=>{e.delete()}),a}var tq=(e,t)=>{let n=j(t(gA(e))),r=e.slice(1).map(e=>j(t(e)));if(r.length===0)return n;try{return j(WA(n,r,{unsafe:!0}))}finally{n.delete();for(let e of r)e.delete()}};function nq(e){let t=e.outerSketch.face(),n=FA(t,e.innerSketches.map(e=>e.wire));return t[Symbol.dispose](),n}function rq(e){return fj(e.sketches.map(e=>e.wire))}function iq(e,t,{extrusionDirection:n,extrusionProfile:r,twistAngle:i,origin:a}={}){let o=PD(VD(n?OD(n):e.outerSketch.defaultDirection),t);if(r&&!i)return tq(e.sketches,t=>bM(t.wire,a?OD(a):e.outerSketch.defaultOrigin,o,r));if(i)return tq(e.sketches,t=>xM(t.wire,i,a?OD(a):e.outerSketch.defaultOrigin,o,r));let s=nq(e),c=j(EM(s,o));return s[Symbol.dispose](),c}function aq(e,t,{origin:n}={}){let r=n?OD(n):e.outerSketch.defaultOrigin,i=t?OD(t):[0,0,1],a=nq(e),o=j(DM(a,r,i));return a[Symbol.dispose](),o}function oq(e,t,n={}){e.sketches.length!==t.sketches.length&&i(`CompoundSketch.loftWith`,`You need to loft with another compound with the same number of sketches`);let r=e.sketches.map((e,r)=>{let i=hA(t.sketches,r),a={};return n.ruled!==void 0&&(a.ruled=n.ruled),e.clone().loftWith(i.clone(),a,!0)}),a=nq(e),o=TE(j(lO(a.wrapped)));a[Symbol.dispose](),r.push(o,nq(t));let s=j(pj(r));for(let e of r)e[Symbol.dispose]();return s}var sq=class e{wire;_defaultOrigin;_defaultDirection;_baseFace;constructor(e,{defaultOrigin:t=[0,0,0],defaultDirection:n=[0,0,1]}={}){this.wire=e,this._defaultOrigin=OD(t),this._defaultDirection=OD(n),this.baseFace=null}get baseFace(){return this._baseFace}set baseFace(e){this._baseFace&&this._baseFace[Symbol.dispose](),this._baseFace=e&&TE(j(lO(e.wrapped)))}delete(){this.wire[Symbol.dispose](),this.baseFace&&this.baseFace[Symbol.dispose]()}clone(){let t=wE(j(lO(this.wire.wrapped))),n=new e(t,{defaultOrigin:this.defaultOrigin,defaultDirection:this.defaultDirection});return this.baseFace&&(n.baseFace=TE(j(lO(this.baseFace.wrapped)))),n}get defaultOrigin(){return this._defaultOrigin}set defaultOrigin(e){this._defaultOrigin=OD(e)}get defaultDirection(){return this._defaultDirection}set defaultDirection(e){this._defaultDirection=OD(e)}face(){return YK(this)}wires(){return XK(this)}faces(){return this.face()}revolve(e,t={}){return ZK(this,e,t)}extrude(e,t={}){return QK(this,e,t)}sweepSketch(e,t={}){return $K(this,e,t)}loftWith(e,t={},n=!1){return eq(this,e,t,n)}},cq=class{sketches;constructor(e){this.sketches=e}soleSketch(e){this.sketches.length!==1&&i(`Sketches.${e}`,`Multiple profiles — ${e} each sub-sketch individually.`);let t=gA(this.sketches);return t instanceof sq||i(`Sketches.${e}`,`${e} is only supported on single-wire profiles.`),t}face(){return this.sketches.length!==1&&i(`Sketches.face`,`Multiple profiles — use faces() to combine them.`),gA(this.sketches).face()}loftWith(e,t,n){return this.soleSketch(`loftWith`).loftWith(e,t,n)}sweepSketch(e,t){return this.soleSketch(`sweepSketch`).sweepSketch(e,t)}wires(){return fj(this.sketches.flatMap(e=>e instanceof sq?[e.wire]:e.sketches.map(e=>e.wire)))}faces(){return fj(this.sketches.map(e=>e.face()))}extrude(e,t={}){return fj(this.sketches.map(n=>n.extrude(e,t)))}revolve(e,t){return fj(this.sketches.map(n=>n.revolve(e,t)))}},lq={};async function uq(e,t=`default`,n=!1){if(!n&&lq[t])return O(lq[t]);let r;if(typeof e==`string`){let t;try{t=await fetch(e)}catch(t){return k(To(M.FONT_FETCH_FAILED,`Failed to fetch font from ${e}: ${t instanceof Error?t.message:String(t)}`,t))}if(!t.ok)return k(To(M.FONT_FETCH_FAILED,`Failed to fetch font from ${e}: HTTP ${t.status} ${t.statusText}`));r=await t.arrayBuffer()}else r=e;let i;try{i=WK.parse(r)}catch(e){return k(To(M.FONT_PARSE_FAILED,`Failed to parse font data: ${e instanceof Error?e.message:String(e)}`,e))}let a=i;return lq[t]=a,lq.default||=a,O(a)}var dq=(e=`default`)=>lq[e],fq=function*(e){let t=null,n=null;for(let r of e){if(r.type===`Z`){t&&(yield t.close()),t=null;continue}let e=[-r.x,r.y];if(r.type===`M`){t&&(yield t.done()),t=new gR,t.movePointerTo(e),n=e;continue}n&&Math.abs(e[0]-n[0])<1e-9&&Math.abs(e[1]-n[1])<1e-9||(r.type===`L`&&t?.lineTo(e),r.type===`C`&&t?.cubicBezierCurveTo(e,[-r.x1,r.y1],[-r.x2,r.y2]),r.type===`Q`&&t?.quadraticBezierCurveTo(e,[-r.x1,r.y1]),n=e)}};function pq(e,{startX:t=0,startY:n=0,fontSize:r=16,fontFamily:a=`default`}={}){let o=dq(a);o||=dq(),o||i(`text`,`No fonts loaded. Call loadFont() before using text functions.`);let s=o.getPath(e,-t,-n,r);return aR(Array.from(fq(s.commands))).mirror([0,0])}var mq={XY:{dir:[0,0,1],xAxis:[1,0,0]},XZ:{dir:[0,-1,0],xAxis:[1,0,0]},YZ:{dir:[1,0,0],xAxis:[0,1,0]},YX:{dir:[0,0,-1],xAxis:[0,1,0]},ZX:{dir:[0,1,0],xAxis:[0,0,1]},ZY:{dir:[-1,0,0],xAxis:[0,0,1]},front:{dir:[0,-1,0],xAxis:[1,0,0]},back:{dir:[0,1,0],xAxis:[-1,0,0]},right:{dir:[-1,0,0],xAxis:[0,-1,0]},left:{dir:[1,0,0],xAxis:[0,1,0]},bottom:{dir:[0,0,1],xAxis:[1,0,0]},top:{dir:[0,0,-1],xAxis:[1,0,0]}};function hq(e){return typeof e==`string`&&e in mq}var gq=e=>{try{var t=PT();return e.IsNull()?[]:cD(t.u(U(e))).map(e=>j(Sk(e)))}catch(e){t.e=e}finally{t.d()}};function _q(e,t,n=!0){let r=H().projectEdges(e.wrapped,[...t.position],[...t.direction],[...t.xAxis]),i=[...gq(r.visible.sharp),...gq(r.visible.smooth),...gq(r.visible.outline)],a=[...gq(r.hidden.sharp),...gq(r.hidden.smooth),...gq(r.hidden.outline)],o;if(n)o=a;else{for(let e of a)e[Symbol.dispose]();o=[]}return{visible:i,hidden:o}}function vq(e=[0,0,0],t=[0,0,1],n){if(RD(t)<1e-12)return k(P(`CAMERA_ZERO_DIRECTION`,`Camera direction cannot be a zero-length vector`));let r;if(n)r=VD(n);else{let e=LD([0,0,1],t);RD(e)<1e-12&&(e=LD([0,1,0],t)),RD(e)<1e-12&&(e=LD([1,0,0],t)),r=VD(e)}let i=VD(LD(t,r));return O({position:e,direction:VD(t),xAxis:r,yAxis:i})}function yq(e,t){let n=VD(ND(e.position,t));return vq(e.position,n)}function bq(e){let t=mq[e];return vq([0,0,0],t.dir,t.xAxis)}function xq(e,t,n=!0){return _q(e,t,n)}var Sq=(e,n=1e-7)=>{if(e.length===0)return[];let r=new zL(e.length);e.forEach(e=>{let[t,i]=e.firstPoint;r.add(t-n,i-n,t+n,i+n)}),r.finish();let a=[],o=new Set;return e.forEach((s,c)=>{if(o.has(c))return;let l=[s],u=c;o.add(c);let d=e.length;for(;;){d--<0&&i(`stitchCurves`,`Infinite loop detected`);let[s,c]=t(l,l.length-1).lastPoint,f=r.search(s-n,c-n,s+n,c+n),p=t=>Math.abs((u-t)%e.length),m=f.filter(e=>!o.has(e)).map(n=>[t(e,n),n,p(n)]).sort(([,,e],[,,t])=>e-t);if(m.length===0){a.push(l);break}let[h,g]=t(m,0);l.push(h),o.add(g),u=g}}),a},Cq=class extends hR{plane;constructor(e,t){super(),this.plane=e&&typeof e!=`string`?{...e}:j(QD(e??`XY`,t))}delete(){this.pendingCurves=[]}sagittaArcTo(e,t){return super.sagittaArcTo(e,-t)}buildWire(){try{var e=PT();this.pendingCurves.length||i(`Sketcher.buildWire`,`No lines to convert into a wire`);let t=e.u(new JT);return j(AA(SL(this.pendingCurves,this.plane).map(e=>t.register(e))))}catch(t){e.e=t}finally{e.d()}}done(){return new sq(this.buildWire(),{defaultOrigin:this.plane.origin,defaultDirection:this.plane.zDir})}close(){return this._closeSketch(),this.done()}closeWithMirror(){wI(this.pointer,this.firstPoint)&&i(`Sketcher.closeWithMirror`,`Cannot close with a mirror when the sketch is already closed`);let e=this.buildWire(),t=eO(this.plane,this.pointer),n=LD(VD(ND(t,eO(this.plane,this.firstPoint))),this.plane.zDir),r=j(cO(e.wrapped));return new sq(j(AA([e,wE(j(cO(H().mirror(r,OD(t),OD(n)))))])),{defaultOrigin:this.plane.origin,defaultDirection:this.plane.zDir})}closeWithCustomCorner(e,t=`fillet`){return this._closeSketch(),this._customCornerLastWithFirst(e,t),this.done()}},wq=class extends hR{face;_bounds;constructor(e,t=[0,0]){super(t),this.face=TE(j(lO(e.wrapped))),this._bounds=vO(e)}_convertToUV([e,t]){let{uMin:n,uMax:r,vMin:i,vMax:a}=this._bounds;return[n+e*(r-n),i+t*(a-i)]}_convertFromUV([e,t]){let{uMin:n,uMax:r,vMin:i,vMax:a}=this._bounds;return[(e-n)/(r-n),(t-i)/(a-i)]}_adaptSurface(){return H().extractSurfaceFromFace(this.face.wrapped)}buildWire(){let e=H(),t=this._adaptSurface(),n=j(AA(this.pendingCurves.map(n=>CE(e.buildEdgeOnSurface(n.wrapped,t)))));return e.buildCurves3d(n.wrapped),n}done(){try{var e=PT();let t=e.u(new JT),n=this.buildWire(),r=new sq(n);if(Ik(n)){let e=t.register(r.clone().face()),n=yO(e,.5,.5),i=PD(SO(e),-1);r.defaultOrigin=[n[0],n[1],n[2]],r.defaultDirection=[i[0],i[1],i[2]]}else{let e=Ak(n),t=SO(this.face,[e[0],e[1],e[2]]);r.defaultOrigin=[e[0],e[1],e[2]],r.defaultDirection=[t[0],t[1],t[2]]}return r.baseFace=this.face,r}catch(t){e.e=t}finally{e.d()}}close(){return this._closeSketch(),this.done()}closeWithMirror(){return this._closeWithMirror(),this.close()}closeWithCustomCorner(e,t=`fillet`){return this._closeSketch(),this._customCornerLastWithFirst(e,t),this.done()}},Tq=(e,t={})=>{try{var n=PT();let r=t.plane&&typeof t.plane!=`string`?{...t.plane}:j(QD(t.plane??`XY`,t.origin));return new sq(j(AA([n.u(new JT).register(xA(e,r.origin,r.zDir))])),{defaultOrigin:[...r.origin],defaultDirection:[...r.zDir]})}catch(e){n.e=e}finally{n.d()}},Eq=(e=1,t=2,n={})=>{try{var r=PT();let i=n.plane&&typeof n.plane!=`string`?{...n.plane}:j(QD(n.plane??`XY`,n.origin)),a=i.xDir,o=e,s=t;return t>e&&(a=KD(a,i.zDir,90*KE),o=t,s=e),new sq(j(AA([r.u(new JT).register(j(SA(o,s,i.origin,i.zDir,a)))])),{defaultOrigin:[...i.origin],defaultDirection:[...i.zDir]})}catch(e){r.e=e}finally{r.d()}},Dq=(e,t,n={})=>(n.plane&&typeof n.plane!=`string`?new Cq(n.plane):new Cq(n.plane,n.origin)).movePointerTo([-e/2,-t/2]).hLine(e).vLine(t).hLine(-e).vLine(-t).done(),Oq=(e,t,n=0,r={})=>{let i=CR(e,t,n).sketchOnPlane(r.plane,r.origin),a={};return i.defaultOrigin&&(a.defaultOrigin=i.defaultOrigin),i.defaultDirection&&(a.defaultDirection=i.defaultDirection),new sq(i.wire,a)},kq=(e,t,n=0,r={})=>{let i=[...Array(t).keys()].map(n=>{let r=-(Math.PI*2/t)*n;return[e*Math.sin(r),e*Math.cos(r)]}),a=r.plane&&typeof r.plane!=`string`?new Cq(r.plane):new Cq(r.plane,r.origin),o=_A(i),s=a.movePointerTo([hA(o,0),hA(o,1)]);return n?i.forEach(e=>s.sagittaArcTo([hA(e,0),hA(e,1)],n)):i.forEach(e=>s.lineTo([hA(e,0),hA(e,1)])),s.done()},Aq=(e,t,n=0)=>{let r=Math.PI/t,i=Math.cos(r)*e;return n>=0?i:i+n},jq=(e,t)=>{let n=[...CO(e)],r=[...SO(e)];return new sq(j(Uk(EO(e),t)),{defaultOrigin:n,defaultDirection:r})},Mq=(e,t={},{pointsCount:n=400,start:r=0,stop:i=1}={},a={})=>{try{var o=PT();let s=o.u(new JT),c=t.plane&&typeof t.plane!=`string`?{...t.plane}:j(QD(t.plane??`XY`,t.origin)),l=(i-r)/n,u=[...Array(n+1).keys()].map(t=>{let n=e(r+t*l);return eO(c,n)});return new sq(j(AA([s.register(j(EA(u,a)))])),{defaultOrigin:[...c.origin],defaultDirection:[...c.zDir]})}catch(e){o.e=e}finally{o.d()}},Nq=(e,t,n,r=[0,0,0],i=[0,0,1],a=!1)=>new sq(j(AA([CA(e,t,n,OD(r),OD(i),a)]))),Pq=(e,t,n)=>new Cq().movePointerTo([-e/2,t/2]).hLine(e).vLine(-t).hLine(-e).close().extrude(n),Fq=(e,t)=>wI(e,t,SI*100),Iq=(e,t,n,r)=>{let i=e[0]-t[0],a=e[1]-t[1],o=n[0]-r[0],s=n[1]-r[1],c=i*s-a*o;if(Math.abs(c)<1e-12)return null;let l=e[0]*t[1]-e[1]*t[0],u=n[0]*r[1]-n[1]*r[0];return[(l*o-u*i)/c,(l*s-u*a)/c]};function Lq(e,t,n,r,i){let a=yL(t,n,r.original.lastPoint);e(r),e(a)}function Rq(e,t,n,r,i){let a=dL(t,n);e(r),e(a)}function zq(e,t,n,r,i){let a=Iq(r.offset instanceof sL?EI(t,r.offset.tangentAt(1)):r.offset.firstPoint,t,n,i.offset instanceof sL?TI(n,i.offset.tangentAt(0)):i.offset.lastPoint);if(!a){let i=dL(t,n);e(r),e(i);return}let o=kI([(t[0]+n[0])/2,(t[1]+n[1])/2],a),s=kI(t,n);if(s<1e-18||o>16*s){let i=dL(t,n);e(r),e(i);return}let c=dL(t,a),l=dL(a,n);e(r),e(c),e(l)}var Bq={round:Lq,bevel:Rq,miter:zq};function Vq(e,t,n){let r=n.length===1?Oo(n,0,`rawOffsets`):Hq(n,e.original.lastPoint),a=Oo(e.offset.splitAt([r],SI),0,`rawOffsets`),o=t.offset.splitAt([r],SI).at(-1);return o||i(`offset.rawOffsets`,`Split produced no trailing curve segment`),{splitPrevious:{offset:a,original:e.original},splitCurrent:{offset:o,original:t.original}}}function Hq(e,t){let n=Oo(e,0,`selectClosestIntersection`),r=kI(n,t);for(let i=1;i<e.length;i++){let a=Oo(e,i,`selectClosestIntersection`),o=kI(a,t);o<r&&(r=o,n=a)}return n}function Uq(e){let t=new Map,n=(e,n)=>{let r=t.get(e)||[];t.set(e,[...r,...n])},r=new zL(e.length);for(let t of e){let[[e,n],[i,a]]=t.boundingBox.bounds;r.add(e,n,i,a)}return r.finish(),e.forEach((t,i)=>{let[[a,o],[s,c]]=t.boundingBox.bounds,l=r.search(a,o,s,c);for(let r of l){if(r<=i)continue;let a=Oo(e,r,`offsetBlueprint`),{intersections:o,commonSegmentsPoints:s}=j(WL(t,a,SI)),c=[...o,...s].filter(e=>{let n=Fq(e,t.firstPoint)||Fq(e,t.lastPoint),r=Fq(e,a.firstPoint)||Fq(e,a.lastPoint);return!(n&&r)});c.length&&(n(i,c),n(r,c))}}),t}function Wq(e,t,n={}){let r=e.orientation===`clockwise`?-t:t,a=e.curves.map(e=>({offset:qL(e,r),original:e})),o=[],s=null,c=a.at(-1);if(!c)return[];function l(e){if(e instanceof sL){o.push(e);return}s?e.offset instanceof sL?o.push(e.offset):Fq(e.offset.firstPoint,e.offset.lastPoint)||o.push(dL(e.offset.firstPoint,e.offset.lastPoint)):s=e}let u=function*(){for(let e of a.slice(0,-1))yield e;s||i(`offset.rawOffsets`,`No saved curve after iterating offset segments`),yield s};for(let e of u()){let t=c.offset.lastPoint,r=e.offset.firstPoint;if(Fq(t,r)){l(c),c=e;continue}let i=[];if(c.offset instanceof sL&&e.offset instanceof sL){let{intersections:t,commonSegmentsPoints:n}=j(WL(c.offset,e.offset,SI/100));i=[...t,...n]}if(i.length>0){let{splitPrevious:t,splitCurrent:n}=Vq(c,e,i);l(t),c=n;continue}let a=Bq[n.lineJoinType??`round`];a(l,t,r,c,e),c=e}return l(c),o}function Gq(e,n,r={}){let i=Wq(e,n,r);if(i.length<2)return null;let a=Uq(i);if(!a.size){let t=new FL(i);return e.intersects(t)?null:t}let o=i.flatMap((e,t)=>{if(!a.has(t))return e;let n=a.get(t)||[];return e.splitAt(n,SI*100)}),s=new zL(e.curves.length);for(let t of e.curves){let[[e,n],[r,i]]=t.boundingBox.bounds;s.add(e,n,r,i)}s.finish();let c=Math.abs(n),l=o.filter(n=>{let[[r,i],[a,o]]=n.boundingBox.bounds;return!s.search(r-c,i-c,a+c,o+c).some(r=>t(e.curves,r).distanceFrom(n)<c-SI)});if(!l.length)return null;let u=Sq(l).filter(e=>e.length>1).map(e=>new FL(e)).filter(e=>e.isClosed());return u.length?u.length===1?Oo(u,0,`offsetBlueprint`):new QL(u):null}var Kq=e=>{let t=Oo(e,0,`fuseAll`);for(let n=1;n<e.length;n++)t=az(t,Oo(e,n,`fuseAll`));return t};function qq(e,t,n={}){if(e instanceof FL)return Gq(e,t,n);if(e instanceof QL)return Kq(e.blueprints.map(e=>qq(e,t,n)));if(e instanceof $L){let r=Kq(e.blueprints.slice(1).map(e=>qq(e,-t,n)));return sz(qq(Oo(e.blueprints,0,`offset`),t,n),r)}return null}function Jq(e,t){return e instanceof FL?new FL(uL(e.curves,t)):e instanceof $L?new $L(e.blueprints.map(e=>Jq(e,t))):e instanceof QL?new QL(e.blueprints.map(e=>Jq(e,t))):e}function Yq(e,t,n,r){let a=()=>!0;r&&(a=r.shouldKeep.bind(r));let o=[gA(t.curves)],s=(t,r)=>{a({firstCurve:t,secondCurve:r,point:t.lastPoint})?o.push(...e(t,r,n)):o.push(t,r)};t.curves.slice(1).forEach(e=>{let t=o.pop();t||i(`customCorners.modifyCorners`,`Unexpected empty curve stack during filleting`),s(t,e)});let c=o.at(-1);if(c||i(`customCorners.modifyCorners`,`Unexpected empty curve list during corner modification`),wI(gA(o).firstPoint,c.lastPoint)&&o.length>1){let e=o.pop(),t=o.shift();(!e||!t)&&i(`customCorners.modifyCorners`,`Unexpected empty curve stack during close-and-fillet`),s(e,t)}return new FL(o)}function Xq(e,t,n,r){return t instanceof FL?Yq(e,t,n,r):t instanceof $L?new $L(t.blueprints.map(t=>Yq(e,t,n,r))):t instanceof QL?new QL(t.blueprints.map(t=>Xq(e,t,n,r)).filter(e=>e!==null)):null}function Zq(e,t,n){return Xq(YL,e,t,n)}function Qq(e,t,n){return Xq(XL,e,t,n)}function $q(e,t){return e instanceof FL?KK(t):e instanceof $L?qK(t):new cq(t.map(e=>Array.isArray(e)?qK(e):KK(e)))}var eJ=class e{innerShape;constructor(e=null){this.innerShape=e}clone(){return new e(this.innerShape?.clone()||null)}serialize(){if(!this.innerShape)return JSON.stringify({type:`Empty`});function e(t){if(t instanceof $L)return{type:`CompoundBlueprint`,blueprints:t.blueprints.map(e)};if(t instanceof QL)return{type:`Blueprints`,blueprints:t.blueprints.map(e)};if(t instanceof FL)return{type:`Blueprint`,curves:t.curves.map(e=>e.serialize())};i(`Drawing.serialize`,`Unknown shape type for serialization`)}return JSON.stringify(e(this.innerShape))}get boundingBox(){return this.innerShape?this.innerShape.boundingBox:new aL}stretch(t,n,r){return this.innerShape?new e(this.innerShape.stretch(t,n,r)):new e}get repr(){return this.innerShape===null?`=== empty shape`:this.innerShape.repr}rotate(t,n){return this.innerShape?new e(this.innerShape.rotate(t,n)):new e}translate(t,n=0){return this.innerShape?new e(typeof t==`number`?this.innerShape.translate(t,n):this.innerShape.translate(t)):new e}scale(t,n){return this.innerShape?new e(this.innerShape.scale(t,n)):new e}mirror(t,n,r){return this.innerShape?new e(this.innerShape.mirror(t,n,r)):new e}cut(t){return new e(sz(this.innerShape,t.innerShape))}fuse(t){return new e(az(this.innerShape,t.innerShape))}intersect(t){return new e(cz(this.innerShape,t.innerShape))}fillet(t,n){let r=n&&n(xR());return new e(Zq(this.innerShape,t,r))}chamfer(t,n){let r=n&&n(xR());return new e(Qq(this.innerShape,t,r))}sketchOnPlane(e,t){this.innerShape||i(`Drawing`,`Trying to sketch an empty drawing`);let n=this.innerShape.sketchOnPlane(e,t);return $q(this.innerShape,n)}sketchOnFace(e,t){this.innerShape||i(`Drawing`,`Trying to sketch an empty drawing`);let n=this.innerShape.sketchOnFace(e,t);return $q(this.innerShape,n)}punchHole(e,t,n={}){return this.innerShape?this.innerShape.punchHole(e,t,n):e}toSVG(e){return this.innerShape?.toSVG(e)||``}toSVGViewBox(e=1){return this.innerShape?.toSVGViewBox(e)||``}toSVGPaths(){return this.innerShape?.toSVGPaths()||[]}offset(t,n={}){return new e(qq(this.innerShape,t,n))}approximate(t,n={}){return t!==`svg`&&i(`Drawing.approximate`,`Only 'svg' is supported for now`),new e(Jq(this.innerShape,n))}get blueprint(){if(!(this.innerShape instanceof FL)){if(this.innerShape instanceof QL&&this.innerShape.blueprints.length===1&&this.innerShape.blueprints[0]instanceof FL)return this.innerShape.blueprints[0];i(`Drawing.blueprint`,`This drawing is not a blueprint`)}return this.innerShape}};function tJ(e){function t(e){if(e.type===`CompoundBlueprint`)return new $L(e.blueprints.map(t));if(e.type===`Blueprints`)return new QL(e.blueprints.map(t));if(e.type===`Blueprint`)return new FL(e.curves.map(e=>oL(e)));i(`Drawing.deserialize`,`Unknown shape type for deserialization`)}return new eJ(t(JSON.parse(e)))}var nJ=class extends hR{constructor(e=[0,0]){super(),this.pointer=e,this.firstPoint=e,this.pendingCurves=[]}done(){return new eJ(new FL(this.pendingCurves))}close(){return this._closeSketch(),this.done()}closeWithMirror(){return this._closeWithMirror(),this.close()}closeWithCustomCorner(e,t=`fillet`){return this._closeSketch(),this._customCornerLastWithFirst(e,t),this.done()}};function rJ(e){let t=new nJ;return e&&t.movePointerTo(e),t}function iJ(e,t,n=0){return new eJ(CR(e,t,n))}var aJ=iJ;function oJ(e){return new eJ(new FL([mL(e)]))}function sJ(e,t){let[n,r]=[e,t].sort((e,t)=>e-t);return new eJ(new FL([hL(r,n,r===e?[1,0]:[0,1])]))}function cJ(e){return rJ().movePointerTo([-e,0]).sagittaArc(2*e,0,e).sagittaArc(-2*e,0,e).close()}function lJ(e,t){return rJ().movePointerTo([-e,0]).halfEllipse(2*e,0,t).halfEllipse(-2*e,0,t).close()}function uJ(e,t,n=0){return new eJ(SR(e,t,n))}function dJ(e,{startX:t=0,startY:n=0,fontSize:r=16,fontFamily:i=`default`}={}){return new eJ(pq(e,{startX:t,startY:n,fontSize:r,fontFamily:i}))}var fJ=(e,t={},n={})=>{e.length<2&&i(`drawPointsInterpolation`,`Need at least 2 points for interpolation, got ${e.length}`);let r=[j(vL(e,t))],a=e[0],o=e[e.length-1];return n.closeShape&&a&&o&&!wI(a,o)&&r.push(dL(o,a)),new eJ(new FL(r))},pJ=(e,{pointsCount:t=400,start:n=0,stop:r=1,closeShape:i=!1}={},a={})=>{let o=(r-n)/t;return fJ([...Array(t+1).keys()].map(t=>e(n+t*o)),a,{closeShape:i})},mJ=e=>{try{var t=PT();let n=t.u(new JT),r=aJ(1e3,1e3).sketchOnPlane();n.register(r.wire);let i=n.register(j(jA(r.wire))),a=Sq(e.map(e=>jL(e,i))).map(e=>new FL(e));return a.length===0?new eJ:a.length===1?new eJ(a[0]):new eJ(new QL(a))}catch(e){t.e=e}finally{t.d()}};function hJ(e,t=`front`){let n;n=typeof t==`string`?j(bq(t)):t;let{visible:r,hidden:i}=xq(e,n);try{return{visible:mJ(r),hidden:mJ(i)}}finally{for(let e of r)e[Symbol.dispose]();for(let e of i)e[Symbol.dispose]()}}function gJ(e){try{var t=PT();let n=t.u(new JT),r=n.register(TE(j(lO(e.wrapped)))),i=Sq(cD(n.register(EO(r))).map(t=>jL(t,e))).map(e=>new FL(e));return i.length===0?new eJ:i.length===1?new eJ(i[0]):new eJ(new QL(i))}catch(e){t.e=e}finally{t.d()}}function _J(e,t,n){return n===void 0?e.sketchOnPlane(t):e.sketchOnPlane(t,n)}function vJ(e,t){return e.fuse(t)}function yJ(e,t){return e.cut(t)}function bJ(e,t){return e.intersect(t)}function xJ(e,t,n){return e.fillet(t,n)}function SJ(e,t,n){return e.chamfer(t,n)}function CJ(e,t,n=0){return typeof t==`number`?e.translate(t,n):e.translate(t)}function wJ(e,t,n){return e.rotate(t,n)}function TJ(e,t,n){return e.scale(t,n)}function EJ(e,t,n,r){return e.mirror(t,n,r)}function DJ(e){let t=e.clone();return t.reverse(),t}function OJ(e){return e.boundingBox}function kJ(e){return e.firstPoint}function AJ(e){return e.lastPoint}function jJ(e,t,n){return e.splitAt(t,n)}function MJ(e,t,n){return e.parameter(t,n)}function NJ(e,t){return e.tangentAt(t)}function PJ(e,t){return e.isOnCurve(t)}function FJ(e,t){return e.distanceFrom(t)}function IJ(e){return e.length===0?k(P(M.BLUEPRINT_EMPTY_CURVES,`createBlueprint: at least one curve is required`)):O(new FL(e))}function LJ(e){return e.length===0?k(P(M.COMPOUND_BLUEPRINT_EMPTY,`createCompoundBlueprint: at least one blueprint (outer boundary) is required`)):O(new $L(e))}function RJ(e){return e.boundingBox}function zJ(e){return e.orientation}function BJ(e,t){return e.isInside(t)}function VJ(e){return e.toSVGPathD()}function HJ(e,t,n){return e.translate(t,n)}function UJ(e,t,n){return e.rotate(t,n)}function WJ(e,t,n){return e.scale(t,n)}function GJ(e,t,n,r){return e.mirror(t,n,r)}function KJ(e,t,n,r){return e.stretch(t,n,r)}function qJ(e,t,n){return e.sketchOnPlane(t,n)}function JJ(e,t,n){return e.sketchOnFace(t,n)}function YJ(e,t){return n(e,t*3)}function XJ(e,t){return n(e,t)}function ZJ(e){let t=[`# brepjs OBJ export`],n=e.vertices.length/3;for(let r=0;r<n;r++){let[n,i,a]=YJ(e.vertices,r);t.push(`v ${n} ${i} ${a}`)}let r=e.normals.length/3;for(let n=0;n<r;n++){let[r,i,a]=YJ(e.normals,n);t.push(`vn ${r} ${i} ${a}`)}let i=n=>{let[r,i,a]=XJ(e.triangles,n);t.push(`f ${r+1}//${r+1} ${i+1}//${i+1} ${a+1}//${a+1}`)};if(e.faceGroups.length>0)for(let n of e.faceGroups){t.push(`g face_${n.faceId}`);let e=n.count/3;for(let t=0;t<e;t++)i(n.start+t*3)}else{let t=e.triangles.length/3;for(let e=0;e<t;e++)i(e*3)}return t.join(`
|
|
24
|
+
String.prototype.codePointAt||(function(){var e=function(){try{var e={},t=Object.defineProperty,n=t(e,e,e)&&t}catch{}return n}(),t=function(e){if(this==null)throw TypeError();var t=String(this),n=t.length,r=e?Number(e):0;if(r!=r&&(r=0),!(r<0||r>=n)){var i=t.charCodeAt(r),a;return i>=55296&&i<=56319&&n>r+1&&(a=t.charCodeAt(r+1),a>=56320&&a<=57343)?(i-55296)*1024+a-56320+65536:i}};e?e(String.prototype,`codePointAt`,{value:t,configurable:!0,writable:!0}):String.prototype.codePointAt=t})();var fz=0,pz=-3;function mz(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function hz(e,t){this.source=e,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=t,this.destLen=0,this.ltree=new mz,this.dtree=new mz}var gz=new mz,_z=new mz,vz=new Uint8Array(30),yz=new Uint16Array(30),bz=new Uint8Array(30),xz=new Uint16Array(30),Sz=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),Cz=new mz,wz=new Uint8Array(320);function Tz(e,t,n,r){var i,a;for(i=0;i<n;++i)e[i]=0;for(i=0;i<30-n;++i)e[i+n]=i/n|0;for(a=r,i=0;i<30;++i)t[i]=a,a+=1<<e[i]}function Ez(e,t){var n;for(n=0;n<7;++n)e.table[n]=0;for(e.table[7]=24,e.table[8]=152,e.table[9]=112,n=0;n<24;++n)e.trans[n]=256+n;for(n=0;n<144;++n)e.trans[24+n]=n;for(n=0;n<8;++n)e.trans[168+n]=280+n;for(n=0;n<112;++n)e.trans[176+n]=144+n;for(n=0;n<5;++n)t.table[n]=0;for(t.table[5]=32,n=0;n<32;++n)t.trans[n]=n}var Dz=new Uint16Array(16);function Oz(e,t,n,r){var i,a;for(i=0;i<16;++i)e.table[i]=0;for(i=0;i<r;++i)e.table[t[n+i]]++;for(e.table[0]=0,a=0,i=0;i<16;++i)Dz[i]=a,a+=e.table[i];for(i=0;i<r;++i)t[n+i]&&(e.trans[Dz[t[n+i]]++]=i)}function kz(e){e.bitcount--||(e.tag=e.source[e.sourceIndex++],e.bitcount=7);var t=e.tag&1;return e.tag>>>=1,t}function Az(e,t,n){if(!t)return n;for(;e.bitcount<24;)e.tag|=e.source[e.sourceIndex++]<<e.bitcount,e.bitcount+=8;var r=e.tag&65535>>>16-t;return e.tag>>>=t,e.bitcount-=t,r+n}function jz(e,t){for(;e.bitcount<24;)e.tag|=e.source[e.sourceIndex++]<<e.bitcount,e.bitcount+=8;var n=0,r=0,i=0,a=e.tag;do r=2*r+(a&1),a>>>=1,++i,n+=t.table[i],r-=t.table[i];while(r>=0);return e.tag=a,e.bitcount-=i,t.trans[n+r]}function Mz(e,t,n){var r=Az(e,5,257),i=Az(e,5,1),a=Az(e,4,4),o,s,c;for(o=0;o<19;++o)wz[o]=0;for(o=0;o<a;++o){var l=Az(e,3,0);wz[Sz[o]]=l}for(Oz(Cz,wz,0,19),s=0;s<r+i;){var u=jz(e,Cz);switch(u){case 16:var d=wz[s-1];for(c=Az(e,2,3);c;--c)wz[s++]=d;break;case 17:for(c=Az(e,3,3);c;--c)wz[s++]=0;break;case 18:for(c=Az(e,7,11);c;--c)wz[s++]=0;break;default:wz[s++]=u;break}}Oz(t,wz,0,r),Oz(n,wz,r,i)}function Nz(e,t,n){for(;;){var r=jz(e,t);if(r===256)return fz;if(r<256)e.dest[e.destLen++]=r;else{var i,a,o,s;for(r-=257,i=Az(e,vz[r],yz[r]),a=jz(e,n),o=e.destLen-Az(e,bz[a],xz[a]),s=o;s<o+i;++s)e.dest[e.destLen++]=e.dest[s]}}}function Pz(e){for(var t,n,r;e.bitcount>8;)e.sourceIndex--,e.bitcount-=8;if(t=e.source[e.sourceIndex+1],t=256*t+e.source[e.sourceIndex],n=e.source[e.sourceIndex+3],n=256*n+e.source[e.sourceIndex+2],t!==(~n&65535))return pz;for(e.sourceIndex+=4,r=t;r;--r)e.dest[e.destLen++]=e.source[e.sourceIndex++];return e.bitcount=0,fz}function Fz(e,t){var n=new hz(e,t),r,i,a;do{switch(r=kz(n),i=Az(n,2,0),i){case 0:a=Pz(n);break;case 1:a=Nz(n,gz,_z);break;case 2:Mz(n,n.ltree,n.dtree),a=Nz(n,n.ltree,n.dtree);break;default:a=pz}if(a!==fz)throw Error(`Data error`)}while(!r);return n.destLen<n.dest.length?typeof n.dest.slice==`function`?n.dest.slice(0,n.destLen):n.dest.subarray(0,n.destLen):n.dest}Ez(gz,_z),Tz(vz,yz,4,3),Tz(bz,xz,2,1),vz[28]=0,yz[28]=258;var Iz=Fz;function Lz(e,t,n,r,i){return(1-i)**3*e+3*(1-i)**2*i*t+3*(1-i)*i**2*n+i**3*r}function Rz(){this.x1=NaN,this.y1=NaN,this.x2=NaN,this.y2=NaN}Rz.prototype.isEmpty=function(){return isNaN(this.x1)||isNaN(this.y1)||isNaN(this.x2)||isNaN(this.y2)},Rz.prototype.addPoint=function(e,t){typeof e==`number`&&((isNaN(this.x1)||isNaN(this.x2))&&(this.x1=e,this.x2=e),e<this.x1&&(this.x1=e),e>this.x2&&(this.x2=e)),typeof t==`number`&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=t,this.y2=t),t<this.y1&&(this.y1=t),t>this.y2&&(this.y2=t))},Rz.prototype.addX=function(e){this.addPoint(e,null)},Rz.prototype.addY=function(e){this.addPoint(null,e)},Rz.prototype.addBezier=function(e,t,n,r,i,a,o,s){var c=[e,t],l=[n,r],u=[i,a],d=[o,s];this.addPoint(e,t),this.addPoint(o,s);for(var f=0;f<=1;f++){var p=6*c[f]-12*l[f]+6*u[f],m=-3*c[f]+9*l[f]-9*u[f]+3*d[f],h=3*l[f]-3*c[f];if(m===0){if(p===0)continue;var g=-h/p;0<g&&g<1&&(f===0&&this.addX(Lz(c[f],l[f],u[f],d[f],g)),f===1&&this.addY(Lz(c[f],l[f],u[f],d[f],g)));continue}var _=p**2-4*h*m;if(!(_<0)){var v=(-p+Math.sqrt(_))/(2*m);0<v&&v<1&&(f===0&&this.addX(Lz(c[f],l[f],u[f],d[f],v)),f===1&&this.addY(Lz(c[f],l[f],u[f],d[f],v)));var y=(-p-Math.sqrt(_))/(2*m);0<y&&y<1&&(f===0&&this.addX(Lz(c[f],l[f],u[f],d[f],y)),f===1&&this.addY(Lz(c[f],l[f],u[f],d[f],y)))}}},Rz.prototype.addQuad=function(e,t,n,r,i,a){var o=e+2/3*(n-e),s=t+2/3*(r-t),c=o+1/3*(i-e),l=s+1/3*(a-t);this.addBezier(e,t,o,s,c,l,i,a)};function zz(){this.commands=[],this.fill=`black`,this.stroke=null,this.strokeWidth=1}zz.prototype.moveTo=function(e,t){this.commands.push({type:`M`,x:e,y:t})},zz.prototype.lineTo=function(e,t){this.commands.push({type:`L`,x:e,y:t})},zz.prototype.curveTo=zz.prototype.bezierCurveTo=function(e,t,n,r,i,a){this.commands.push({type:`C`,x1:e,y1:t,x2:n,y2:r,x:i,y:a})},zz.prototype.quadTo=zz.prototype.quadraticCurveTo=function(e,t,n,r){this.commands.push({type:`Q`,x1:e,y1:t,x:n,y:r})},zz.prototype.close=zz.prototype.closePath=function(){this.commands.push({type:`Z`})},zz.prototype.extend=function(e){if(e.commands)e=e.commands;else if(e instanceof Rz){var t=e;this.moveTo(t.x1,t.y1),this.lineTo(t.x2,t.y1),this.lineTo(t.x2,t.y2),this.lineTo(t.x1,t.y2),this.close();return}Array.prototype.push.apply(this.commands,e)},zz.prototype.getBoundingBox=function(){for(var e=new Rz,t=0,n=0,r=0,i=0,a=0;a<this.commands.length;a++){var o=this.commands[a];switch(o.type){case`M`:e.addPoint(o.x,o.y),t=r=o.x,n=i=o.y;break;case`L`:e.addPoint(o.x,o.y),r=o.x,i=o.y;break;case`Q`:e.addQuad(r,i,o.x1,o.y1,o.x,o.y),r=o.x,i=o.y;break;case`C`:e.addBezier(r,i,o.x1,o.y1,o.x2,o.y2,o.x,o.y),r=o.x,i=o.y;break;case`Z`:r=t,i=n;break;default:throw Error(`Unexpected path command `+o.type)}}return e.isEmpty()&&e.addPoint(0,0),e},zz.prototype.draw=function(e){e.beginPath();for(var t=0;t<this.commands.length;t+=1){var n=this.commands[t];n.type===`M`?e.moveTo(n.x,n.y):n.type===`L`?e.lineTo(n.x,n.y):n.type===`C`?e.bezierCurveTo(n.x1,n.y1,n.x2,n.y2,n.x,n.y):n.type===`Q`?e.quadraticCurveTo(n.x1,n.y1,n.x,n.y):n.type===`Z`&&e.closePath()}this.fill&&(e.fillStyle=this.fill,e.fill()),this.stroke&&(e.strokeStyle=this.stroke,e.lineWidth=this.strokeWidth,e.stroke())},zz.prototype.toPathData=function(e){e=e===void 0?2:e;function t(t){return Math.round(t)===t?``+Math.round(t):t.toFixed(e)}function n(){for(var e=arguments,n=``,r=0;r<arguments.length;r+=1){var i=e[r];i>=0&&r>0&&(n+=` `),n+=t(i)}return n}for(var r=``,i=0;i<this.commands.length;i+=1){var a=this.commands[i];a.type===`M`?r+=`M`+n(a.x,a.y):a.type===`L`?r+=`L`+n(a.x,a.y):a.type===`C`?r+=`C`+n(a.x1,a.y1,a.x2,a.y2,a.x,a.y):a.type===`Q`?r+=`Q`+n(a.x1,a.y1,a.x,a.y):a.type===`Z`&&(r+=`Z`)}return r},zz.prototype.toSVG=function(e){var t=`<path d="`;return t+=this.toPathData(e),t+=`"`,this.fill&&this.fill!==`black`&&(this.fill===null?t+=` fill="none"`:t+=` fill="`+this.fill+`"`),this.stroke&&(t+=` stroke="`+this.stroke+`" stroke-width="`+this.strokeWidth+`"`),t+=`/>`,t},zz.prototype.toDOMElement=function(e){var t=this.toPathData(e),n=document.createElementNS(`http://www.w3.org/2000/svg`,`path`);return n.setAttribute(`d`,t),n};function Bz(e){throw Error(e)}function Vz(e,t){e||Bz(t)}var K={fail:Bz,argument:Vz,assert:Vz},Hz=32768,Uz=2147483648,Wz={},q={},J={};function Gz(e){return function(){return e}}q.BYTE=function(e){return K.argument(e>=0&&e<=255,`Byte value should be between 0 and 255.`),[e]},J.BYTE=Gz(1),q.CHAR=function(e){return[e.charCodeAt(0)]},J.CHAR=Gz(1),q.CHARARRAY=function(e){e===void 0&&(e=``,console.warn(`Undefined CHARARRAY encountered and treated as an empty string. This is probably caused by a missing glyph name.`));for(var t=[],n=0;n<e.length;n+=1)t[n]=e.charCodeAt(n);return t},J.CHARARRAY=function(e){return e===void 0?0:e.length},q.USHORT=function(e){return[e>>8&255,e&255]},J.USHORT=Gz(2),q.SHORT=function(e){return e>=Hz&&(e=-(2*Hz-e)),[e>>8&255,e&255]},J.SHORT=Gz(2),q.UINT24=function(e){return[e>>16&255,e>>8&255,e&255]},J.UINT24=Gz(3),q.ULONG=function(e){return[e>>24&255,e>>16&255,e>>8&255,e&255]},J.ULONG=Gz(4),q.LONG=function(e){return e>=Uz&&(e=-(2*Uz-e)),[e>>24&255,e>>16&255,e>>8&255,e&255]},J.LONG=Gz(4),q.FIXED=q.ULONG,J.FIXED=J.ULONG,q.FWORD=q.SHORT,J.FWORD=J.SHORT,q.UFWORD=q.USHORT,J.UFWORD=J.USHORT,q.LONGDATETIME=function(e){return[0,0,0,0,e>>24&255,e>>16&255,e>>8&255,e&255]},J.LONGDATETIME=Gz(8),q.TAG=function(e){return K.argument(e.length===4,`Tag should be exactly 4 ASCII characters.`),[e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2),e.charCodeAt(3)]},J.TAG=Gz(4),q.Card8=q.BYTE,J.Card8=J.BYTE,q.Card16=q.USHORT,J.Card16=J.USHORT,q.OffSize=q.BYTE,J.OffSize=J.BYTE,q.SID=q.USHORT,J.SID=J.USHORT,q.NUMBER=function(e){return e>=-107&&e<=107?[e+139]:e>=108&&e<=1131?(e-=108,[(e>>8)+247,e&255]):e>=-1131&&e<=-108?(e=-e-108,[(e>>8)+251,e&255]):e>=-32768&&e<=32767?q.NUMBER16(e):q.NUMBER32(e)},J.NUMBER=function(e){return q.NUMBER(e).length},q.NUMBER16=function(e){return[28,e>>8&255,e&255]},J.NUMBER16=Gz(3),q.NUMBER32=function(e){return[29,e>>24&255,e>>16&255,e>>8&255,e&255]},J.NUMBER32=Gz(5),q.REAL=function(e){var t=e.toString(),n=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(t);if(n){var r=parseFloat(`1e`+((n[2]?+n[2]:0)+n[1].length));t=(Math.round(e*r)/r).toString()}for(var i=``,a=0,o=t.length;a<o;a+=1){var s=t[a];s===`e`?i+=t[++a]===`-`?`c`:`b`:s===`.`?i+=`a`:s===`-`?i+=`e`:i+=s}i+=i.length&1?`f`:`ff`;for(var c=[30],l=0,u=i.length;l<u;l+=2)c.push(parseInt(i.substr(l,2),16));return c},J.REAL=function(e){return q.REAL(e).length},q.NAME=q.CHARARRAY,J.NAME=J.CHARARRAY,q.STRING=q.CHARARRAY,J.STRING=J.CHARARRAY,Wz.UTF8=function(e,t,n){for(var r=[],i=n,a=0;a<i;a++,t+=1)r[a]=e.getUint8(t);return String.fromCharCode.apply(null,r)},Wz.UTF16=function(e,t,n){for(var r=[],i=n/2,a=0;a<i;a++,t+=2)r[a]=e.getUint16(t);return String.fromCharCode.apply(null,r)},q.UTF16=function(e){for(var t=[],n=0;n<e.length;n+=1){var r=e.charCodeAt(n);t[t.length]=r>>8&255,t[t.length]=r&255}return t},J.UTF16=function(e){return e.length*2};var Kz={"x-mac-croatian":`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ\xA0ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ`,"x-mac-cyrillic":`АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»…\xA0ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю`,"x-mac-gaelic":`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»…\xA0ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ`,"x-mac-greek":`Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»…\xA0ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ`,"x-mac-icelandic":`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ`,"x-mac-inuit":`ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ…\xA0ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł`,"x-mac-ce":`ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»…\xA0ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ`,macintosh:`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ`,"x-mac-romanian":`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ`,"x-mac-turkish":`ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»…\xA0ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ`};Wz.MACSTRING=function(e,t,n,r){var i=Kz[r];if(i!==void 0){for(var a=``,o=0;o<n;o++){var s=e.getUint8(t+o);s<=127?a+=String.fromCharCode(s):a+=i[s&127]}return a}};var qz=typeof WeakMap==`function`&&new WeakMap,Jz,Yz=function(e){if(!Jz)for(var t in Jz={},Kz)Jz[t]=new String(t);var n=Jz[e];if(n!==void 0){if(qz){var r=qz.get(n);if(r!==void 0)return r}var i=Kz[e];if(i!==void 0){for(var a={},o=0;o<i.length;o++)a[i.charCodeAt(o)]=o+128;return qz&&qz.set(n,a),a}}};q.MACSTRING=function(e,t){var n=Yz(t);if(n!==void 0){for(var r=[],i=0;i<e.length;i++){var a=e.charCodeAt(i);if(a>=128&&(a=n[a],a===void 0))return;r[i]=a}return r}},J.MACSTRING=function(e,t){var n=q.MACSTRING(e,t);return n===void 0?0:n.length};function Xz(e){return e>=-128&&e<=127}function Zz(e,t,n){for(var r=0,i=e.length;t<i&&r<64&&e[t]===0;)++t,++r;return n.push(128|r-1),t}function Qz(e,t,n){for(var r=0,i=e.length,a=t;a<i&&r<64;){var o=e[a];if(!Xz(o)||o===0&&a+1<i&&e[a+1]===0)break;++a,++r}n.push(r-1);for(var s=t;s<a;++s)n.push(e[s]+256&255);return a}function $z(e,t,n){for(var r=0,i=e.length,a=t;a<i&&r<64;){var o=e[a];if(o===0||Xz(o)&&a+1<i&&Xz(e[a+1]))break;++a,++r}n.push(64|r-1);for(var s=t;s<a;++s){var c=e[s];n.push(c+65536>>8&255,c+256&255)}return a}q.VARDELTAS=function(e){for(var t=0,n=[];t<e.length;){var r=e[t];t=r===0?Zz(e,t,n):r>=-128&&r<=127?Qz(e,t,n):$z(e,t,n)}return n},q.INDEX=function(e){for(var t=1,n=[t],r=[],i=0;i<e.length;i+=1){var a=q.OBJECT(e[i]);Array.prototype.push.apply(r,a),t+=a.length,n.push(t)}if(r.length===0)return[0,0];for(var o=[],s=1+Math.floor(Math.log(t)/Math.log(2))/8|0,c=[void 0,q.BYTE,q.USHORT,q.UINT24,q.ULONG][s],l=0;l<n.length;l+=1){var u=c(n[l]);Array.prototype.push.apply(o,u)}return Array.prototype.concat(q.Card16(e.length),q.OffSize(s),o,r)},J.INDEX=function(e){return q.INDEX(e).length},q.DICT=function(e){for(var t=[],n=Object.keys(e),r=n.length,i=0;i<r;i+=1){var a=parseInt(n[i],0),o=e[a];t=t.concat(q.OPERAND(o.value,o.type)),t=t.concat(q.OPERATOR(a))}return t},J.DICT=function(e){return q.DICT(e).length},q.OPERATOR=function(e){return e<1200?[e]:[12,e-1200]},q.OPERAND=function(e,t){var n=[];if(Array.isArray(t))for(var r=0;r<t.length;r+=1)K.argument(e.length===t.length,`Not enough arguments given for type`+t),n=n.concat(q.OPERAND(e[r],t[r]));else if(t===`SID`)n=n.concat(q.NUMBER(e));else if(t===`offset`)n=n.concat(q.NUMBER32(e));else if(t===`number`)n=n.concat(q.NUMBER(e));else if(t===`real`)n=n.concat(q.REAL(e));else throw Error(`Unknown operand type `+t);return n},q.OP=q.BYTE,J.OP=J.BYTE;var eB=typeof WeakMap==`function`&&new WeakMap;q.CHARSTRING=function(e){if(eB){var t=eB.get(e);if(t!==void 0)return t}for(var n=[],r=e.length,i=0;i<r;i+=1){var a=e[i];n=n.concat(q[a.type](a.value))}return eB&&eB.set(e,n),n},J.CHARSTRING=function(e){return q.CHARSTRING(e).length},q.OBJECT=function(e){var t=q[e.type];return K.argument(t!==void 0,`No encoding function for type `+e.type),t(e.value)},J.OBJECT=function(e){var t=J[e.type];return K.argument(t!==void 0,`No sizeOf function for type `+e.type),t(e.value)},q.TABLE=function(e){for(var t=[],n=e.fields.length,r=[],i=[],a=0;a<n;a+=1){var o=e.fields[a],s=q[o.type];K.argument(s!==void 0,`No encoding function for field type `+o.type+` (`+o.name+`)`);var c=e[o.name];c===void 0&&(c=o.value);var l=s(c);o.type===`TABLE`?(i.push(t.length),t=t.concat([0,0]),r.push(l)):t=t.concat(l)}for(var u=0;u<r.length;u+=1){var d=i[u],f=t.length;K.argument(f<65536,`Table `+e.tableName+` too big.`),t[d]=f>>8,t[d+1]=f&255,t=t.concat(r[u])}return t},J.TABLE=function(e){for(var t=0,n=e.fields.length,r=0;r<n;r+=1){var i=e.fields[r],a=J[i.type];K.argument(a!==void 0,`No sizeOf function for field type `+i.type+` (`+i.name+`)`);var o=e[i.name];o===void 0&&(o=i.value),t+=a(o),i.type===`TABLE`&&(t+=2)}return t},q.RECORD=q.TABLE,J.RECORD=J.TABLE,q.LITERAL=function(e){return e},J.LITERAL=function(e){return e.length};function tB(e,t,n){if(t.length&&(t[0].name!==`coverageFormat`||t[0].value===1))for(var r=0;r<t.length;r+=1){var i=t[r];this[i.name]=i.value}if(this.tableName=e,this.fields=t,n)for(var a=Object.keys(n),o=0;o<a.length;o+=1){var s=a[o],c=n[s];this[s]!==void 0&&(this[s]=c)}}tB.prototype.encode=function(){return q.TABLE(this)},tB.prototype.sizeOf=function(){return J.TABLE(this)};function nB(e,t,n){n===void 0&&(n=t.length);var r=Array(t.length+1);r[0]={name:e+`Count`,type:`USHORT`,value:n};for(var i=0;i<t.length;i++)r[i+1]={name:e+i,type:`USHORT`,value:t[i]};return r}function rB(e,t,n){var r=t.length,i=Array(r+1);i[0]={name:e+`Count`,type:`USHORT`,value:r};for(var a=0;a<r;a++)i[a+1]={name:e+a,type:`TABLE`,value:n(t[a],a)};return i}function iB(e,t,n){var r=t.length,i=[];i[0]={name:e+`Count`,type:`USHORT`,value:r};for(var a=0;a<r;a++)i=i.concat(n(t[a],a));return i}function aB(e){e.format===1?tB.call(this,`coverageTable`,[{name:`coverageFormat`,type:`USHORT`,value:1}].concat(nB(`glyph`,e.glyphs))):e.format===2?tB.call(this,`coverageTable`,[{name:`coverageFormat`,type:`USHORT`,value:2}].concat(iB(`rangeRecord`,e.ranges,function(e){return[{name:`startGlyphID`,type:`USHORT`,value:e.start},{name:`endGlyphID`,type:`USHORT`,value:e.end},{name:`startCoverageIndex`,type:`USHORT`,value:e.index}]}))):K.assert(!1,`Coverage format must be 1 or 2.`)}aB.prototype=Object.create(tB.prototype),aB.prototype.constructor=aB;function oB(e){tB.call(this,`scriptListTable`,iB(`scriptRecord`,e,function(e,t){var n=e.script,r=n.defaultLangSys;return K.assert(!!r,`Unable to write GSUB: script `+e.tag+` has no default language system.`),[{name:`scriptTag`+t,type:`TAG`,value:e.tag},{name:`script`+t,type:`TABLE`,value:new tB(`scriptTable`,[{name:`defaultLangSys`,type:`TABLE`,value:new tB(`defaultLangSys`,[{name:`lookupOrder`,type:`USHORT`,value:0},{name:`reqFeatureIndex`,type:`USHORT`,value:r.reqFeatureIndex}].concat(nB(`featureIndex`,r.featureIndexes)))}].concat(iB(`langSys`,n.langSysRecords,function(e,t){var n=e.langSys;return[{name:`langSysTag`+t,type:`TAG`,value:e.tag},{name:`langSys`+t,type:`TABLE`,value:new tB(`langSys`,[{name:`lookupOrder`,type:`USHORT`,value:0},{name:`reqFeatureIndex`,type:`USHORT`,value:n.reqFeatureIndex}].concat(nB(`featureIndex`,n.featureIndexes)))}]})))}]}))}oB.prototype=Object.create(tB.prototype),oB.prototype.constructor=oB;function sB(e){tB.call(this,`featureListTable`,iB(`featureRecord`,e,function(e,t){var n=e.feature;return[{name:`featureTag`+t,type:`TAG`,value:e.tag},{name:`feature`+t,type:`TABLE`,value:new tB(`featureTable`,[{name:`featureParams`,type:`USHORT`,value:n.featureParams}].concat(nB(`lookupListIndex`,n.lookupListIndexes)))}]}))}sB.prototype=Object.create(tB.prototype),sB.prototype.constructor=sB;function cB(e,t){tB.call(this,`lookupListTable`,rB(`lookup`,e,function(e){var n=t[e.lookupType];return K.assert(!!n,`Unable to write GSUB lookup type `+e.lookupType+` tables.`),new tB(`lookupTable`,[{name:`lookupType`,type:`USHORT`,value:e.lookupType},{name:`lookupFlag`,type:`USHORT`,value:e.lookupFlag}].concat(rB(`subtable`,e.subtables,n)))}))}cB.prototype=Object.create(tB.prototype),cB.prototype.constructor=cB;var Y={Table:tB,Record:tB,Coverage:aB,ScriptList:oB,FeatureList:sB,LookupList:cB,ushortList:nB,tableList:rB,recordList:iB};function lB(e,t){return e.getUint8(t)}function uB(e,t){return e.getUint16(t,!1)}function dB(e,t){return e.getInt16(t,!1)}function fB(e,t){return e.getUint32(t,!1)}function pB(e,t){return e.getInt16(t,!1)+e.getUint16(t+2,!1)/65535}function mB(e,t){for(var n=``,r=t;r<t+4;r+=1)n+=String.fromCharCode(e.getInt8(r));return n}function hB(e,t,n){for(var r=0,i=0;i<n;i+=1)r<<=8,r+=e.getUint8(t+i);return r}function gB(e,t,n){for(var r=[],i=t;i<n;i+=1)r.push(e.getUint8(i));return r}function _B(e){for(var t=``,n=0;n<e.length;n+=1)t+=String.fromCharCode(e[n]);return t}var vB={byte:1,uShort:2,short:2,uLong:4,fixed:4,longDateTime:8,tag:4};function X(e,t){this.data=e,this.offset=t,this.relativeOffset=0}X.prototype.parseByte=function(){var e=this.data.getUint8(this.offset+this.relativeOffset);return this.relativeOffset+=1,e},X.prototype.parseChar=function(){var e=this.data.getInt8(this.offset+this.relativeOffset);return this.relativeOffset+=1,e},X.prototype.parseCard8=X.prototype.parseByte,X.prototype.parseUShort=function(){var e=this.data.getUint16(this.offset+this.relativeOffset);return this.relativeOffset+=2,e},X.prototype.parseCard16=X.prototype.parseUShort,X.prototype.parseSID=X.prototype.parseUShort,X.prototype.parseOffset16=X.prototype.parseUShort,X.prototype.parseShort=function(){var e=this.data.getInt16(this.offset+this.relativeOffset);return this.relativeOffset+=2,e},X.prototype.parseF2Dot14=function(){var e=this.data.getInt16(this.offset+this.relativeOffset)/16384;return this.relativeOffset+=2,e},X.prototype.parseULong=function(){var e=fB(this.data,this.offset+this.relativeOffset);return this.relativeOffset+=4,e},X.prototype.parseOffset32=X.prototype.parseULong,X.prototype.parseFixed=function(){var e=pB(this.data,this.offset+this.relativeOffset);return this.relativeOffset+=4,e},X.prototype.parseString=function(e){var t=this.data,n=this.offset+this.relativeOffset,r=``;this.relativeOffset+=e;for(var i=0;i<e;i++)r+=String.fromCharCode(t.getUint8(n+i));return r},X.prototype.parseTag=function(){return this.parseString(4)},X.prototype.parseLongDateTime=function(){var e=fB(this.data,this.offset+this.relativeOffset+4);return e-=2082844800,this.relativeOffset+=8,e},X.prototype.parseVersion=function(e){var t=uB(this.data,this.offset+this.relativeOffset),n=uB(this.data,this.offset+this.relativeOffset+2);return this.relativeOffset+=4,e===void 0&&(e=4096),t+n/e/10},X.prototype.skip=function(e,t){t===void 0&&(t=1),this.relativeOffset+=vB[e]*t},X.prototype.parseULongList=function(e){e===void 0&&(e=this.parseULong());for(var t=Array(e),n=this.data,r=this.offset+this.relativeOffset,i=0;i<e;i++)t[i]=n.getUint32(r),r+=4;return this.relativeOffset+=e*4,t},X.prototype.parseOffset16List=X.prototype.parseUShortList=function(e){e===void 0&&(e=this.parseUShort());for(var t=Array(e),n=this.data,r=this.offset+this.relativeOffset,i=0;i<e;i++)t[i]=n.getUint16(r),r+=2;return this.relativeOffset+=e*2,t},X.prototype.parseShortList=function(e){for(var t=Array(e),n=this.data,r=this.offset+this.relativeOffset,i=0;i<e;i++)t[i]=n.getInt16(r),r+=2;return this.relativeOffset+=e*2,t},X.prototype.parseByteList=function(e){for(var t=Array(e),n=this.data,r=this.offset+this.relativeOffset,i=0;i<e;i++)t[i]=n.getUint8(r++);return this.relativeOffset+=e,t},X.prototype.parseList=function(e,t){t||(t=e,e=this.parseUShort());for(var n=Array(e),r=0;r<e;r++)n[r]=t.call(this);return n},X.prototype.parseList32=function(e,t){t||(t=e,e=this.parseULong());for(var n=Array(e),r=0;r<e;r++)n[r]=t.call(this);return n},X.prototype.parseRecordList=function(e,t){t||(t=e,e=this.parseUShort());for(var n=Array(e),r=Object.keys(t),i=0;i<e;i++){for(var a={},o=0;o<r.length;o++){var s=r[o];a[s]=t[s].call(this)}n[i]=a}return n},X.prototype.parseRecordList32=function(e,t){t||(t=e,e=this.parseULong());for(var n=Array(e),r=Object.keys(t),i=0;i<e;i++){for(var a={},o=0;o<r.length;o++){var s=r[o];a[s]=t[s].call(this)}n[i]=a}return n},X.prototype.parseStruct=function(e){if(typeof e==`function`)return e.call(this);for(var t=Object.keys(e),n={},r=0;r<t.length;r++){var i=t[r];n[i]=e[i].call(this)}return n},X.prototype.parseValueRecord=function(e){if(e===void 0&&(e=this.parseUShort()),e!==0){var t={};return e&1&&(t.xPlacement=this.parseShort()),e&2&&(t.yPlacement=this.parseShort()),e&4&&(t.xAdvance=this.parseShort()),e&8&&(t.yAdvance=this.parseShort()),e&16&&(t.xPlaDevice=void 0,this.parseShort()),e&32&&(t.yPlaDevice=void 0,this.parseShort()),e&64&&(t.xAdvDevice=void 0,this.parseShort()),e&128&&(t.yAdvDevice=void 0,this.parseShort()),t}},X.prototype.parseValueRecordList=function(){for(var e=this.parseUShort(),t=this.parseUShort(),n=Array(t),r=0;r<t;r++)n[r]=this.parseValueRecord(e);return n},X.prototype.parsePointer=function(e){var t=this.parseOffset16();if(t>0)return new X(this.data,this.offset+t).parseStruct(e)},X.prototype.parsePointer32=function(e){var t=this.parseOffset32();if(t>0)return new X(this.data,this.offset+t).parseStruct(e)},X.prototype.parseListOfLists=function(e){for(var t=this.parseOffset16List(),n=t.length,r=this.relativeOffset,i=Array(n),a=0;a<n;a++){var o=t[a];if(o===0){i[a]=void 0;continue}if(this.relativeOffset=o,e){for(var s=this.parseOffset16List(),c=Array(s.length),l=0;l<s.length;l++)this.relativeOffset=o+s[l],c[l]=e.call(this);i[a]=c}else i[a]=this.parseUShortList()}return this.relativeOffset=r,i},X.prototype.parseCoverage=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort(),n=this.parseUShort();if(t===1)return{format:1,glyphs:this.parseUShortList(n)};if(t===2){for(var r=Array(n),i=0;i<n;i++)r[i]={start:this.parseUShort(),end:this.parseUShort(),index:this.parseUShort()};return{format:2,ranges:r}}throw Error(`0x`+e.toString(16)+`: Coverage format must be 1 or 2.`)},X.prototype.parseClassDef=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{format:1,startGlyph:this.parseUShort(),classes:this.parseUShortList()};if(t===2)return{format:2,ranges:this.parseRecordList({start:X.uShort,end:X.uShort,classId:X.uShort})};throw Error(`0x`+e.toString(16)+`: ClassDef format must be 1 or 2.`)},X.list=function(e,t){return function(){return this.parseList(e,t)}},X.list32=function(e,t){return function(){return this.parseList32(e,t)}},X.recordList=function(e,t){return function(){return this.parseRecordList(e,t)}},X.recordList32=function(e,t){return function(){return this.parseRecordList32(e,t)}},X.pointer=function(e){return function(){return this.parsePointer(e)}},X.pointer32=function(e){return function(){return this.parsePointer32(e)}},X.tag=X.prototype.parseTag,X.byte=X.prototype.parseByte,X.uShort=X.offset16=X.prototype.parseUShort,X.uShortList=X.prototype.parseUShortList,X.uLong=X.offset32=X.prototype.parseULong,X.uLongList=X.prototype.parseULongList,X.struct=X.prototype.parseStruct,X.coverage=X.prototype.parseCoverage,X.classDef=X.prototype.parseClassDef;var yB={reserved:X.uShort,reqFeatureIndex:X.uShort,featureIndexes:X.uShortList};X.prototype.parseScriptList=function(){return this.parsePointer(X.recordList({tag:X.tag,script:X.pointer({defaultLangSys:X.pointer(yB),langSysRecords:X.recordList({tag:X.tag,langSys:X.pointer(yB)})})}))||[]},X.prototype.parseFeatureList=function(){return this.parsePointer(X.recordList({tag:X.tag,feature:X.pointer({featureParams:X.offset16,lookupListIndexes:X.uShortList})}))||[]},X.prototype.parseLookupList=function(e){return this.parsePointer(X.list(X.pointer(function(){var t=this.parseUShort();K.argument(1<=t&&t<=9,`GPOS/GSUB lookup type `+t+` unknown.`);var n=this.parseUShort(),r=n&16;return{lookupType:t,lookupFlag:n,subtables:this.parseList(X.pointer(e[t])),markFilteringSet:r?this.parseUShort():void 0}})))||[]},X.prototype.parseFeatureVariationsList=function(){return this.parsePointer32(function(){var e=this.parseUShort(),t=this.parseUShort();return K.argument(e===1&&t<1,`GPOS/GSUB feature variations table unknown.`),this.parseRecordList32({conditionSetOffset:X.offset32,featureTableSubstitutionOffset:X.offset32})})||[]};var Z={getByte:lB,getCard8:lB,getUShort:uB,getCard16:uB,getShort:dB,getULong:fB,getFixed:pB,getTag:mB,getOffset:hB,getBytes:gB,bytesToString:_B,Parser:X};function bB(e,t){t.parseUShort(),e.length=t.parseULong(),e.language=t.parseULong();var n;e.groupCount=n=t.parseULong(),e.glyphIndexMap={};for(var r=0;r<n;r+=1)for(var i=t.parseULong(),a=t.parseULong(),o=t.parseULong(),s=i;s<=a;s+=1)e.glyphIndexMap[s]=o,o++}function xB(e,t,n,r,i){e.length=t.parseUShort(),e.language=t.parseUShort();var a;e.segCount=a=t.parseUShort()>>1,t.skip(`uShort`,3),e.glyphIndexMap={};for(var o=new Z.Parser(n,r+i+14),s=new Z.Parser(n,r+i+16+a*2),c=new Z.Parser(n,r+i+16+a*4),l=new Z.Parser(n,r+i+16+a*6),u=r+i+16+a*8,d=0;d<a-1;d+=1)for(var f=void 0,p=o.parseUShort(),m=s.parseUShort(),h=c.parseShort(),g=l.parseUShort(),_=m;_<=p;_+=1)g===0?f=_+h&65535:(u=l.offset+l.relativeOffset-2,u+=g,u+=(_-m)*2,f=Z.getUShort(n,u),f!==0&&(f=f+h&65535)),e.glyphIndexMap[_]=f}function SB(e,t){var n={};n.version=Z.getUShort(e,t),K.argument(n.version===0,`cmap table version should be 0.`),n.numTables=Z.getUShort(e,t+2);for(var r=-1,i=n.numTables-1;i>=0;--i){var a=Z.getUShort(e,t+4+i*8),o=Z.getUShort(e,t+4+i*8+2);if(a===3&&(o===0||o===1||o===10)||a===0&&(o===0||o===1||o===2||o===3||o===4)){r=Z.getULong(e,t+4+i*8+4);break}}if(r===-1)throw Error(`No valid cmap sub-tables found.`);var s=new Z.Parser(e,t+r);if(n.format=s.parseUShort(),n.format===12)bB(n,s);else if(n.format===4)xB(n,s,e,t,r);else throw Error(`Only format 4 and 12 cmap tables are supported (found format `+n.format+`).`);return n}function CB(e,t,n){e.segments.push({end:t,start:t,delta:-(t-n),offset:0,glyphIndex:n})}function wB(e){e.segments.push({end:65535,start:65535,delta:1,offset:0})}function TB(e){var t=!0,n;for(n=e.length-1;n>0;--n)if(e.get(n).unicode>65535){console.log(`Adding CMAP format 12 (needed!)`),t=!1;break}var r=[{name:`version`,type:`USHORT`,value:0},{name:`numTables`,type:`USHORT`,value:t?1:2},{name:`platformID`,type:`USHORT`,value:3},{name:`encodingID`,type:`USHORT`,value:1},{name:`offset`,type:`ULONG`,value:t?12:20}];t||(r=r.concat([{name:`cmap12PlatformID`,type:`USHORT`,value:3},{name:`cmap12EncodingID`,type:`USHORT`,value:10},{name:`cmap12Offset`,type:`ULONG`,value:0}])),r=r.concat([{name:`format`,type:`USHORT`,value:4},{name:`cmap4Length`,type:`USHORT`,value:0},{name:`language`,type:`USHORT`,value:0},{name:`segCountX2`,type:`USHORT`,value:0},{name:`searchRange`,type:`USHORT`,value:0},{name:`entrySelector`,type:`USHORT`,value:0},{name:`rangeShift`,type:`USHORT`,value:0}]);var i=new Y.Table(`cmap`,r);for(i.segments=[],n=0;n<e.length;n+=1){for(var a=e.get(n),o=0;o<a.unicodes.length;o+=1)CB(i,a.unicodes[o],n);i.segments=i.segments.sort(function(e,t){return e.start-t.start})}wB(i);var s=i.segments.length,c=0,l=[],u=[],d=[],f=[],p=[],m=[];for(n=0;n<s;n+=1){var h=i.segments[n];h.end<=65535&&h.start<=65535?(l=l.concat({name:`end_`+n,type:`USHORT`,value:h.end}),u=u.concat({name:`start_`+n,type:`USHORT`,value:h.start}),d=d.concat({name:`idDelta_`+n,type:`SHORT`,value:h.delta}),f=f.concat({name:`idRangeOffset_`+n,type:`USHORT`,value:h.offset}),h.glyphId!==void 0&&(p=p.concat({name:`glyph_`+n,type:`USHORT`,value:h.glyphId}))):c+=1,!t&&h.glyphIndex!==void 0&&(m=m.concat({name:`cmap12Start_`+n,type:`ULONG`,value:h.start}),m=m.concat({name:`cmap12End_`+n,type:`ULONG`,value:h.end}),m=m.concat({name:`cmap12Glyph_`+n,type:`ULONG`,value:h.glyphIndex}))}if(i.segCountX2=(s-c)*2,i.searchRange=2**Math.floor(Math.log(s-c)/Math.log(2))*2,i.entrySelector=Math.log(i.searchRange/2)/Math.log(2),i.rangeShift=i.segCountX2-i.searchRange,i.fields=i.fields.concat(l),i.fields.push({name:`reservedPad`,type:`USHORT`,value:0}),i.fields=i.fields.concat(u),i.fields=i.fields.concat(d),i.fields=i.fields.concat(f),i.fields=i.fields.concat(p),i.cmap4Length=14+l.length*2+2+u.length*2+d.length*2+f.length*2+p.length*2,!t){var g=16+m.length*4;i.cmap12Offset=20+i.cmap4Length,i.fields=i.fields.concat([{name:`cmap12Format`,type:`USHORT`,value:12},{name:`cmap12Reserved`,type:`USHORT`,value:0},{name:`cmap12Length`,type:`ULONG`,value:g},{name:`cmap12Language`,type:`ULONG`,value:0},{name:`cmap12nGroups`,type:`ULONG`,value:m.length/3}]),i.fields=i.fields.concat(m)}return i}var EB={parse:SB,make:TB},DB=`.notdef,space,exclam,quotedbl,numbersign,dollar,percent,ampersand,quoteright,parenleft,parenright,asterisk,plus,comma,hyphen,period,slash,zero,one,two,three,four,five,six,seven,eight,nine,colon,semicolon,less,equal,greater,question,at,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,bracketleft,backslash,bracketright,asciicircum,underscore,quoteleft,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,braceleft,bar,braceright,asciitilde,exclamdown,cent,sterling,fraction,yen,florin,section,currency,quotesingle,quotedblleft,guillemotleft,guilsinglleft,guilsinglright,fi,fl,endash,dagger,daggerdbl,periodcentered,paragraph,bullet,quotesinglbase,quotedblbase,quotedblright,guillemotright,ellipsis,perthousand,questiondown,grave,acute,circumflex,tilde,macron,breve,dotaccent,dieresis,ring,cedilla,hungarumlaut,ogonek,caron,emdash,AE,ordfeminine,Lslash,Oslash,OE,ordmasculine,ae,dotlessi,lslash,oslash,oe,germandbls,onesuperior,logicalnot,mu,trademark,Eth,onehalf,plusminus,Thorn,onequarter,divide,brokenbar,degree,thorn,threequarters,twosuperior,registered,minus,eth,multiply,threesuperior,copyright,Aacute,Acircumflex,Adieresis,Agrave,Aring,Atilde,Ccedilla,Eacute,Ecircumflex,Edieresis,Egrave,Iacute,Icircumflex,Idieresis,Igrave,Ntilde,Oacute,Ocircumflex,Odieresis,Ograve,Otilde,Scaron,Uacute,Ucircumflex,Udieresis,Ugrave,Yacute,Ydieresis,Zcaron,aacute,acircumflex,adieresis,agrave,aring,atilde,ccedilla,eacute,ecircumflex,edieresis,egrave,iacute,icircumflex,idieresis,igrave,ntilde,oacute,ocircumflex,odieresis,ograve,otilde,scaron,uacute,ucircumflex,udieresis,ugrave,yacute,ydieresis,zcaron,exclamsmall,Hungarumlautsmall,dollaroldstyle,dollarsuperior,ampersandsmall,Acutesmall,parenleftsuperior,parenrightsuperior,266 ff,onedotenleader,zerooldstyle,oneoldstyle,twooldstyle,threeoldstyle,fouroldstyle,fiveoldstyle,sixoldstyle,sevenoldstyle,eightoldstyle,nineoldstyle,commasuperior,threequartersemdash,periodsuperior,questionsmall,asuperior,bsuperior,centsuperior,dsuperior,esuperior,isuperior,lsuperior,msuperior,nsuperior,osuperior,rsuperior,ssuperior,tsuperior,ff,ffi,ffl,parenleftinferior,parenrightinferior,Circumflexsmall,hyphensuperior,Gravesmall,Asmall,Bsmall,Csmall,Dsmall,Esmall,Fsmall,Gsmall,Hsmall,Ismall,Jsmall,Ksmall,Lsmall,Msmall,Nsmall,Osmall,Psmall,Qsmall,Rsmall,Ssmall,Tsmall,Usmall,Vsmall,Wsmall,Xsmall,Ysmall,Zsmall,colonmonetary,onefitted,rupiah,Tildesmall,exclamdownsmall,centoldstyle,Lslashsmall,Scaronsmall,Zcaronsmall,Dieresissmall,Brevesmall,Caronsmall,Dotaccentsmall,Macronsmall,figuredash,hypheninferior,Ogoneksmall,Ringsmall,Cedillasmall,questiondownsmall,oneeighth,threeeighths,fiveeighths,seveneighths,onethird,twothirds,zerosuperior,foursuperior,fivesuperior,sixsuperior,sevensuperior,eightsuperior,ninesuperior,zeroinferior,oneinferior,twoinferior,threeinferior,fourinferior,fiveinferior,sixinferior,seveninferior,eightinferior,nineinferior,centinferior,dollarinferior,periodinferior,commainferior,Agravesmall,Aacutesmall,Acircumflexsmall,Atildesmall,Adieresissmall,Aringsmall,AEsmall,Ccedillasmall,Egravesmall,Eacutesmall,Ecircumflexsmall,Edieresissmall,Igravesmall,Iacutesmall,Icircumflexsmall,Idieresissmall,Ethsmall,Ntildesmall,Ogravesmall,Oacutesmall,Ocircumflexsmall,Otildesmall,Odieresissmall,OEsmall,Oslashsmall,Ugravesmall,Uacutesmall,Ucircumflexsmall,Udieresissmall,Yacutesmall,Thornsmall,Ydieresissmall,001.000,001.001,001.002,001.003,Black,Bold,Book,Light,Medium,Regular,Roman,Semibold`.split(`,`),OB=`................................space.exclam.quotedbl.numbersign.dollar.percent.ampersand.quoteright.parenleft.parenright.asterisk.plus.comma.hyphen.period.slash.zero.one.two.three.four.five.six.seven.eight.nine.colon.semicolon.less.equal.greater.question.at.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.bracketleft.backslash.bracketright.asciicircum.underscore.quoteleft.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y.z.braceleft.bar.braceright.asciitilde...................................exclamdown.cent.sterling.fraction.yen.florin.section.currency.quotesingle.quotedblleft.guillemotleft.guilsinglleft.guilsinglright.fi.fl..endash.dagger.daggerdbl.periodcentered..paragraph.bullet.quotesinglbase.quotedblbase.quotedblright.guillemotright.ellipsis.perthousand..questiondown..grave.acute.circumflex.tilde.macron.breve.dotaccent.dieresis..ring.cedilla..hungarumlaut.ogonek.caron.emdash.................AE..ordfeminine.....Lslash.Oslash.OE.ordmasculine......ae....dotlessi...lslash.oslash.oe.germandbls`.split(`.`),kB=`................................space.exclamsmall.Hungarumlautsmall..dollaroldstyle.dollarsuperior.ampersandsmall.Acutesmall.parenleftsuperior.parenrightsuperior.twodotenleader.onedotenleader.comma.hyphen.period.fraction.zerooldstyle.oneoldstyle.twooldstyle.threeoldstyle.fouroldstyle.fiveoldstyle.sixoldstyle.sevenoldstyle.eightoldstyle.nineoldstyle.colon.semicolon.commasuperior.threequartersemdash.periodsuperior.questionsmall..asuperior.bsuperior.centsuperior.dsuperior.esuperior...isuperior...lsuperior.msuperior.nsuperior.osuperior...rsuperior.ssuperior.tsuperior..ff.fi.fl.ffi.ffl.parenleftinferior..parenrightinferior.Circumflexsmall.hyphensuperior.Gravesmall.Asmall.Bsmall.Csmall.Dsmall.Esmall.Fsmall.Gsmall.Hsmall.Ismall.Jsmall.Ksmall.Lsmall.Msmall.Nsmall.Osmall.Psmall.Qsmall.Rsmall.Ssmall.Tsmall.Usmall.Vsmall.Wsmall.Xsmall.Ysmall.Zsmall.colonmonetary.onefitted.rupiah.Tildesmall...................................exclamdownsmall.centoldstyle.Lslashsmall...Scaronsmall.Zcaronsmall.Dieresissmall.Brevesmall.Caronsmall..Dotaccentsmall...Macronsmall...figuredash.hypheninferior...Ogoneksmall.Ringsmall.Cedillasmall....onequarter.onehalf.threequarters.questiondownsmall.oneeighth.threeeighths.fiveeighths.seveneighths.onethird.twothirds...zerosuperior.onesuperior.twosuperior.threesuperior.foursuperior.fivesuperior.sixsuperior.sevensuperior.eightsuperior.ninesuperior.zeroinferior.oneinferior.twoinferior.threeinferior.fourinferior.fiveinferior.sixinferior.seveninferior.eightinferior.nineinferior.centinferior.dollarinferior.periodinferior.commainferior.Agravesmall.Aacutesmall.Acircumflexsmall.Atildesmall.Adieresissmall.Aringsmall.AEsmall.Ccedillasmall.Egravesmall.Eacutesmall.Ecircumflexsmall.Edieresissmall.Igravesmall.Iacutesmall.Icircumflexsmall.Idieresissmall.Ethsmall.Ntildesmall.Ogravesmall.Oacutesmall.Ocircumflexsmall.Otildesmall.Odieresissmall.OEsmall.Oslashsmall.Ugravesmall.Uacutesmall.Ucircumflexsmall.Udieresissmall.Yacutesmall.Thornsmall.Ydieresissmall`.split(`.`),AB=`.notdef,.null,nonmarkingreturn,space,exclam,quotedbl,numbersign,dollar,percent,ampersand,quotesingle,parenleft,parenright,asterisk,plus,comma,hyphen,period,slash,zero,one,two,three,four,five,six,seven,eight,nine,colon,semicolon,less,equal,greater,question,at,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,bracketleft,backslash,bracketright,asciicircum,underscore,grave,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,braceleft,bar,braceright,asciitilde,Adieresis,Aring,Ccedilla,Eacute,Ntilde,Odieresis,Udieresis,aacute,agrave,acircumflex,adieresis,atilde,aring,ccedilla,eacute,egrave,ecircumflex,edieresis,iacute,igrave,icircumflex,idieresis,ntilde,oacute,ograve,ocircumflex,odieresis,otilde,uacute,ugrave,ucircumflex,udieresis,dagger,degree,cent,sterling,section,bullet,paragraph,germandbls,registered,copyright,trademark,acute,dieresis,notequal,AE,Oslash,infinity,plusminus,lessequal,greaterequal,yen,mu,partialdiff,summation,product,pi,integral,ordfeminine,ordmasculine,Omega,ae,oslash,questiondown,exclamdown,logicalnot,radical,florin,approxequal,Delta,guillemotleft,guillemotright,ellipsis,nonbreakingspace,Agrave,Atilde,Otilde,OE,oe,endash,emdash,quotedblleft,quotedblright,quoteleft,quoteright,divide,lozenge,ydieresis,Ydieresis,fraction,currency,guilsinglleft,guilsinglright,fi,fl,daggerdbl,periodcentered,quotesinglbase,quotedblbase,perthousand,Acircumflex,Ecircumflex,Aacute,Edieresis,Egrave,Iacute,Icircumflex,Idieresis,Igrave,Oacute,Ocircumflex,apple,Ograve,Uacute,Ucircumflex,Ugrave,dotlessi,circumflex,tilde,macron,breve,dotaccent,ring,cedilla,hungarumlaut,ogonek,caron,Lslash,lslash,Scaron,scaron,Zcaron,zcaron,brokenbar,Eth,eth,Yacute,yacute,Thorn,thorn,minus,multiply,onesuperior,twosuperior,threesuperior,onehalf,onequarter,threequarters,franc,Gbreve,gbreve,Idotaccent,Scedilla,scedilla,Cacute,cacute,Ccaron,ccaron,dcroat`.split(`,`);function jB(e){this.font=e}jB.prototype.charToGlyphIndex=function(e){var t=e.codePointAt(0),n=this.font.glyphs;if(n){for(var r=0;r<n.length;r+=1)for(var i=n.get(r),a=0;a<i.unicodes.length;a+=1)if(i.unicodes[a]===t)return r}return null};function MB(e){this.cmap=e}MB.prototype.charToGlyphIndex=function(e){return this.cmap.glyphIndexMap[e.codePointAt(0)]||0};function NB(e,t){this.encoding=e,this.charset=t}NB.prototype.charToGlyphIndex=function(e){var t=e.codePointAt(0),n=this.encoding[t];return this.charset.indexOf(n)};function PB(e){switch(e.version){case 1:this.names=AB.slice();break;case 2:this.names=Array(e.numberOfGlyphs);for(var t=0;t<e.numberOfGlyphs;t++)e.glyphNameIndex[t]<AB.length?this.names[t]=AB[e.glyphNameIndex[t]]:this.names[t]=e.names[e.glyphNameIndex[t]-AB.length];break;case 2.5:this.names=Array(e.numberOfGlyphs);for(var n=0;n<e.numberOfGlyphs;n++)this.names[n]=AB[n+e.glyphNameIndex[n]];break;case 3:this.names=[];break;default:this.names=[];break}}PB.prototype.nameToGlyphIndex=function(e){return this.names.indexOf(e)},PB.prototype.glyphIndexToName=function(e){return this.names[e]};function FB(e){for(var t,n=e.tables.cmap.glyphIndexMap,r=Object.keys(n),i=0;i<r.length;i+=1){var a=r[i],o=n[a];t=e.glyphs.get(o),t.addUnicode(parseInt(a))}for(var s=0;s<e.glyphs.length;s+=1)t=e.glyphs.get(s),e.cffEncoding?e.isCIDFont?t.name=`gid`+s:t.name=e.cffEncoding.charset[s]:e.glyphNames.names&&(t.name=e.glyphNames.glyphIndexToName(s))}function IB(e){e._IndexToUnicodeMap={};for(var t=e.tables.cmap.glyphIndexMap,n=Object.keys(t),r=0;r<n.length;r+=1){var i=n[r],a=t[i];e._IndexToUnicodeMap[a]===void 0?e._IndexToUnicodeMap[a]={unicodes:[parseInt(i)]}:e._IndexToUnicodeMap[a].unicodes.push(parseInt(i))}}function LB(e,t){t.lowMemory?IB(e):FB(e)}function RB(e,t,n,r,i){e.beginPath(),e.moveTo(t,n),e.lineTo(r,i),e.stroke()}var zB={line:RB};function BB(e,t){var n=t||new zz;return{configurable:!0,get:function(){return typeof n==`function`&&(n=n()),n},set:function(e){n=e}}}function VB(e){this.bindConstructorValues(e)}VB.prototype.bindConstructorValues=function(e){this.index=e.index||0,this.name=e.name||null,this.unicode=e.unicode||void 0,this.unicodes=e.unicodes||e.unicode!==void 0?[e.unicode]:[],`xMin`in e&&(this.xMin=e.xMin),`yMin`in e&&(this.yMin=e.yMin),`xMax`in e&&(this.xMax=e.xMax),`yMax`in e&&(this.yMax=e.yMax),`advanceWidth`in e&&(this.advanceWidth=e.advanceWidth),Object.defineProperty(this,"path",BB(this,e.path))},VB.prototype.addUnicode=function(e){this.unicodes.length===0&&(this.unicode=e),this.unicodes.push(e)},VB.prototype.getBoundingBox=function(){return this.path.getBoundingBox()},VB.prototype.getPath=function(e,t,n,r,i){e=e===void 0?0:e,t=t===void 0?0:t,n=n===void 0?72:n;var a,o;r||={};var s=r.xScale,c=r.yScale;if(r.hinting&&i&&i.hinting&&(o=this.path&&i.hinting.exec(this,n)),o)a=i.hinting.getCommands(o),e=Math.round(e),t=Math.round(t),s=c=1;else{a=this.path.commands;var l=1/(this.path.unitsPerEm||1e3)*n;s===void 0&&(s=l),c===void 0&&(c=l)}for(var u=new zz,d=0;d<a.length;d+=1){var f=a[d];f.type===`M`?u.moveTo(e+f.x*s,t+-f.y*c):f.type===`L`?u.lineTo(e+f.x*s,t+-f.y*c):f.type===`Q`?u.quadraticCurveTo(e+f.x1*s,t+-f.y1*c,e+f.x*s,t+-f.y*c):f.type===`C`?u.curveTo(e+f.x1*s,t+-f.y1*c,e+f.x2*s,t+-f.y2*c,e+f.x*s,t+-f.y*c):f.type===`Z`&&u.closePath()}return u},VB.prototype.getContours=function(){if(this.points===void 0)return[];for(var e=[],t=[],n=0;n<this.points.length;n+=1){var r=this.points[n];t.push(r),r.lastPointOfContour&&(e.push(t),t=[])}return K.argument(t.length===0,`There are still points left in the current contour.`),e},VB.prototype.getMetrics=function(){for(var e=this.path.commands,t=[],n=[],r=0;r<e.length;r+=1){var i=e[r];i.type!==`Z`&&(t.push(i.x),n.push(i.y)),(i.type===`Q`||i.type===`C`)&&(t.push(i.x1),n.push(i.y1)),i.type===`C`&&(t.push(i.x2),n.push(i.y2))}var a={xMin:Math.min.apply(null,t),yMin:Math.min.apply(null,n),xMax:Math.max.apply(null,t),yMax:Math.max.apply(null,n),leftSideBearing:this.leftSideBearing};return isFinite(a.xMin)||(a.xMin=0),isFinite(a.xMax)||(a.xMax=this.advanceWidth),isFinite(a.yMin)||(a.yMin=0),isFinite(a.yMax)||(a.yMax=0),a.rightSideBearing=this.advanceWidth-a.leftSideBearing-(a.xMax-a.xMin),a},VB.prototype.draw=function(e,t,n,r,i){this.getPath(t,n,r,i).draw(e)},VB.prototype.drawPoints=function(e,t,n,r){function i(t,n,r,i){e.beginPath();for(var a=0;a<t.length;a+=1)e.moveTo(n+t[a].x*i,r+t[a].y*i),e.arc(n+t[a].x*i,r+t[a].y*i,2,0,Math.PI*2,!1);e.closePath(),e.fill()}t=t===void 0?0:t,n=n===void 0?0:n,r=r===void 0?24:r;for(var a=1/this.path.unitsPerEm*r,o=[],s=[],c=this.path,l=0;l<c.commands.length;l+=1){var u=c.commands[l];u.x!==void 0&&o.push({x:u.x,y:-u.y}),u.x1!==void 0&&s.push({x:u.x1,y:-u.y1}),u.x2!==void 0&&s.push({x:u.x2,y:-u.y2})}e.fillStyle=`blue`,i(o,t,n,a),e.fillStyle=`red`,i(s,t,n,a)},VB.prototype.drawMetrics=function(e,t,n,r){var i;t=t===void 0?0:t,n=n===void 0?0:n,r=r===void 0?24:r,i=1/this.path.unitsPerEm*r,e.lineWidth=1,e.strokeStyle=`black`,zB.line(e,t,-1e4,t,1e4),zB.line(e,-1e4,n,1e4,n);var a=this.xMin||0,o=this.yMin||0,s=this.xMax||0,c=this.yMax||0,l=this.advanceWidth||0;e.strokeStyle=`blue`,zB.line(e,t+a*i,-1e4,t+a*i,1e4),zB.line(e,t+s*i,-1e4,t+s*i,1e4),zB.line(e,-1e4,n+-o*i,1e4,n+-o*i),zB.line(e,-1e4,n+-c*i,1e4,n+-c*i),e.strokeStyle=`green`,zB.line(e,t+l*i,-1e4,t+l*i,1e4)};function HB(e,t,n){Object.defineProperty(e,t,{get:function(){return e.path,e[n]},set:function(t){e[n]=t},enumerable:!0,configurable:!0})}function UB(e,t){if(this.font=e,this.glyphs={},Array.isArray(t))for(var n=0;n<t.length;n++){var r=t[n];r.path.unitsPerEm=e.unitsPerEm,this.glyphs[n]=r}this.length=t&&t.length||0}UB.prototype.get=function(e){if(this.glyphs[e]===void 0){this.font._push(e),typeof this.glyphs[e]==`function`&&(this.glyphs[e]=this.glyphs[e]());var t=this.glyphs[e],n=this.font._IndexToUnicodeMap[e];if(n)for(var r=0;r<n.unicodes.length;r++)t.addUnicode(n.unicodes[r]);this.font.cffEncoding?this.font.isCIDFont?t.name=`gid`+e:t.name=this.font.cffEncoding.charset[e]:this.font.glyphNames.names&&(t.name=this.font.glyphNames.glyphIndexToName(e)),this.glyphs[e].advanceWidth=this.font._hmtxTableData[e].advanceWidth,this.glyphs[e].leftSideBearing=this.font._hmtxTableData[e].leftSideBearing}else typeof this.glyphs[e]==`function`&&(this.glyphs[e]=this.glyphs[e]());return this.glyphs[e]},UB.prototype.push=function(e,t){this.glyphs[e]=t,this.length++};function WB(e,t){return new VB({index:t,font:e})}function GB(e,t,n,r,i,a){return function(){var o=new VB({index:t,font:e});return o.path=function(){n(o,r,i);var t=a(e.glyphs,o);return t.unitsPerEm=e.unitsPerEm,t},HB(o,`xMin`,`_xMin`),HB(o,`xMax`,`_xMax`),HB(o,`yMin`,`_yMin`),HB(o,`yMax`,`_yMax`),o}}function KB(e,t,n,r){return function(){var i=new VB({index:t,font:e});return i.path=function(){var t=n(e,i,r);return t.unitsPerEm=e.unitsPerEm,t},i}}var qB={GlyphSet:UB,glyphLoader:WB,ttfGlyphLoader:GB,cffGlyphLoader:KB};function JB(e,t){if(e===t)return!0;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n+=1)if(!JB(e[n],t[n]))return!1;return!0}else return!1}function YB(e){return e.length<1240?107:e.length<33900?1131:32768}function XB(e,t,n){var r=[],i=[],a=Z.getCard16(e,t),o,s;if(a!==0){var c=Z.getByte(e,t+2);o=t+(a+1)*c+2;for(var l=t+3,u=0;u<a+1;u+=1)r.push(Z.getOffset(e,l,c)),l+=c;s=o+r[a]}else s=t+2;for(var d=0;d<r.length-1;d+=1){var f=Z.getBytes(e,o+r[d],o+r[d+1]);n&&(f=n(f)),i.push(f)}return{objects:i,startOffset:t,endOffset:s}}function ZB(e,t){var n=[],r=Z.getCard16(e,t),i,a;if(r!==0){var o=Z.getByte(e,t+2);i=t+(r+1)*o+2;for(var s=t+3,c=0;c<r+1;c+=1)n.push(Z.getOffset(e,s,o)),s+=o;a=i+n[r]}else a=t+2;return{offsets:n,startOffset:t,endOffset:a}}function QB(e,t,n,r,i){var a=Z.getCard16(n,r),o=0;if(a!==0){var s=Z.getByte(n,r+2);o=r+(a+1)*s+2}var c=Z.getBytes(n,o+t[e],o+t[e+1]);return i&&(c=i(c)),c}function $B(e){for(var t=``,n=15,r=[`0`,`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`,`.`,`E`,`E-`,null,`-`];;){var i=e.parseByte(),a=i>>4,o=i&15;if(a===n||(t+=r[a],o===n))break;t+=r[o]}return parseFloat(t)}function eV(e,t){var n,r,i,a;if(t===28)return n=e.parseByte(),r=e.parseByte(),n<<8|r;if(t===29)return n=e.parseByte(),r=e.parseByte(),i=e.parseByte(),a=e.parseByte(),n<<24|r<<16|i<<8|a;if(t===30)return $B(e);if(t>=32&&t<=246)return t-139;if(t>=247&&t<=250)return n=e.parseByte(),(t-247)*256+n+108;if(t>=251&&t<=254)return n=e.parseByte(),-(t-251)*256-n-108;throw Error(`Invalid b0 `+t)}function tV(e){for(var t={},n=0;n<e.length;n+=1){var r=e[n][0],i=e[n][1],a=void 0;if(a=i.length===1?i[0]:i,t.hasOwnProperty(r)&&!isNaN(t[r]))throw Error(`Object `+t+` already has key `+r);t[r]=a}return t}function nV(e,t,n){t=t===void 0?0:t;var r=new Z.Parser(e,t),i=[],a=[];for(n=n===void 0?e.length:n;r.relativeOffset<n;){var o=r.parseByte();o<=21?(o===12&&(o=1200+r.parseByte()),i.push([o,a]),a=[]):a.push(eV(r,o))}return tV(i)}function rV(e,t){return t=t<=390?DB[t]:e[t-391],t}function iV(e,t,n){for(var r={},i,a=0;a<t.length;a+=1){var o=t[a];if(Array.isArray(o.type)){var s=[];s.length=o.type.length;for(var c=0;c<o.type.length;c++)i=e[o.op]===void 0?void 0:e[o.op][c],i===void 0&&(i=o.value!==void 0&&o.value[c]!==void 0?o.value[c]:null),o.type[c]===`SID`&&(i=rV(n,i)),s[c]=i;r[o.name]=s}else i=e[o.op],i===void 0&&(i=o.value===void 0?null:o.value),o.type===`SID`&&(i=rV(n,i)),r[o.name]=i}return r}function aV(e,t){var n={};return n.formatMajor=Z.getCard8(e,t),n.formatMinor=Z.getCard8(e,t+1),n.size=Z.getCard8(e,t+2),n.offsetSize=Z.getCard8(e,t+3),n.startOffset=t,n.endOffset=t+4,n}var oV=[{name:`version`,op:0,type:`SID`},{name:`notice`,op:1,type:`SID`},{name:`copyright`,op:1200,type:`SID`},{name:`fullName`,op:2,type:`SID`},{name:`familyName`,op:3,type:`SID`},{name:`weight`,op:4,type:`SID`},{name:`isFixedPitch`,op:1201,type:`number`,value:0},{name:`italicAngle`,op:1202,type:`number`,value:0},{name:`underlinePosition`,op:1203,type:`number`,value:-100},{name:`underlineThickness`,op:1204,type:`number`,value:50},{name:`paintType`,op:1205,type:`number`,value:0},{name:`charstringType`,op:1206,type:`number`,value:2},{name:`fontMatrix`,op:1207,type:[`real`,`real`,`real`,`real`,`real`,`real`],value:[.001,0,0,.001,0,0]},{name:`uniqueId`,op:13,type:`number`},{name:`fontBBox`,op:5,type:[`number`,`number`,`number`,`number`],value:[0,0,0,0]},{name:`strokeWidth`,op:1208,type:`number`,value:0},{name:`xuid`,op:14,type:[],value:null},{name:`charset`,op:15,type:`offset`,value:0},{name:`encoding`,op:16,type:`offset`,value:0},{name:`charStrings`,op:17,type:`offset`,value:0},{name:`private`,op:18,type:[`number`,`offset`],value:[0,0]},{name:`ros`,op:1230,type:[`SID`,`SID`,`number`]},{name:`cidFontVersion`,op:1231,type:`number`,value:0},{name:`cidFontRevision`,op:1232,type:`number`,value:0},{name:`cidFontType`,op:1233,type:`number`,value:0},{name:`cidCount`,op:1234,type:`number`,value:8720},{name:`uidBase`,op:1235,type:`number`},{name:`fdArray`,op:1236,type:`offset`},{name:`fdSelect`,op:1237,type:`offset`},{name:`fontName`,op:1238,type:`SID`}],sV=[{name:`subrs`,op:19,type:`offset`,value:0},{name:`defaultWidthX`,op:20,type:`number`,value:0},{name:`nominalWidthX`,op:21,type:`number`,value:0}];function cV(e,t){return iV(nV(e,0,e.byteLength),oV,t)}function lV(e,t,n,r){return iV(nV(e,t,n),sV,r)}function uV(e,t,n,r){for(var i=[],a=0;a<n.length;a+=1){var o=cV(new DataView(new Uint8Array(n[a]).buffer),r);o._subrs=[],o._subrsBias=0,o._defaultWidthX=0,o._nominalWidthX=0;var s=o.private[0],c=o.private[1];if(s!==0&&c!==0){var l=lV(e,c+t,s,r);o._defaultWidthX=l.defaultWidthX,o._nominalWidthX=l.nominalWidthX,l.subrs!==0&&(o._subrs=XB(e,c+l.subrs+t).objects,o._subrsBias=YB(o._subrs)),o._privateDict=l}i.push(o)}return i}function dV(e,t,n,r){var i,a,o=new Z.Parser(e,t);--n;var s=[`.notdef`],c=o.parseCard8();if(c===0)for(var l=0;l<n;l+=1)i=o.parseSID(),s.push(rV(r,i));else if(c===1)for(;s.length<=n;){i=o.parseSID(),a=o.parseCard8();for(var u=0;u<=a;u+=1)s.push(rV(r,i)),i+=1}else if(c===2)for(;s.length<=n;){i=o.parseSID(),a=o.parseCard16();for(var d=0;d<=a;d+=1)s.push(rV(r,i)),i+=1}else throw Error(`Unknown charset format `+c);return s}function fV(e,t,n){var r,i={},a=new Z.Parser(e,t),o=a.parseCard8();if(o===0)for(var s=a.parseCard8(),c=0;c<s;c+=1)r=a.parseCard8(),i[r]=c;else if(o===1){var l=a.parseCard8();r=1;for(var u=0;u<l;u+=1)for(var d=a.parseCard8(),f=a.parseCard8(),p=d;p<=d+f;p+=1)i[p]=r,r+=1}else throw Error(`Unknown encoding format `+o);return new NB(i,n)}function pV(e,t,n){var r,i,a,o,s=new zz,c=[],l=0,u=!1,d=!1,f=0,p=0,m,h,g,_;if(e.isCIDFont){var v=e.tables.cff.topDict._fdSelect[t.index],y=e.tables.cff.topDict._fdArray[v];m=y._subrs,h=y._subrsBias,g=y._defaultWidthX,_=y._nominalWidthX}else m=e.tables.cff.topDict._subrs,h=e.tables.cff.topDict._subrsBias,g=e.tables.cff.topDict._defaultWidthX,_=e.tables.cff.topDict._nominalWidthX;var b=g;function x(e,t){d&&s.closePath(),s.moveTo(e,t),d=!0}function S(){c.length%2!=0&&!u&&(b=c.shift()+_),l+=c.length>>1,c.length=0,u=!0}function C(n){for(var g,v,y,w,ee,te,ne,re,ie,ae,oe,se,ce=0;ce<n.length;){var le=n[ce];switch(ce+=1,le){case 1:S();break;case 3:S();break;case 4:c.length>1&&!u&&(b=c.shift()+_,u=!0),p+=c.pop(),x(f,p);break;case 5:for(;c.length>0;)f+=c.shift(),p+=c.shift(),s.lineTo(f,p);break;case 6:for(;c.length>0&&(f+=c.shift(),s.lineTo(f,p),c.length!==0);)p+=c.shift(),s.lineTo(f,p);break;case 7:for(;c.length>0&&(p+=c.shift(),s.lineTo(f,p),c.length!==0);)f+=c.shift(),s.lineTo(f,p);break;case 8:for(;c.length>0;)r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o+c.shift(),s.curveTo(r,i,a,o,f,p);break;case 10:ee=c.pop()+h,te=m[ee],te&&C(te);break;case 11:return;case 12:switch(le=n[ce],ce+=1,le){case 35:r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),ne=a+c.shift(),re=o+c.shift(),ie=ne+c.shift(),ae=re+c.shift(),oe=ie+c.shift(),se=ae+c.shift(),f=oe+c.shift(),p=se+c.shift(),c.shift(),s.curveTo(r,i,a,o,ne,re),s.curveTo(ie,ae,oe,se,f,p);break;case 34:r=f+c.shift(),i=p,a=r+c.shift(),o=i+c.shift(),ne=a+c.shift(),re=o,ie=ne+c.shift(),ae=o,oe=ie+c.shift(),se=p,f=oe+c.shift(),s.curveTo(r,i,a,o,ne,re),s.curveTo(ie,ae,oe,se,f,p);break;case 36:r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),ne=a+c.shift(),re=o,ie=ne+c.shift(),ae=o,oe=ie+c.shift(),se=ae+c.shift(),f=oe+c.shift(),s.curveTo(r,i,a,o,ne,re),s.curveTo(ie,ae,oe,se,f,p);break;case 37:r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),ne=a+c.shift(),re=o+c.shift(),ie=ne+c.shift(),ae=re+c.shift(),oe=ie+c.shift(),se=ae+c.shift(),Math.abs(oe-f)>Math.abs(se-p)?f=oe+c.shift():p=se+c.shift(),s.curveTo(r,i,a,o,ne,re),s.curveTo(ie,ae,oe,se,f,p);break;default:console.log(`Glyph `+t.index+`: unknown operator 1200`+le),c.length=0}break;case 14:c.length>0&&!u&&(b=c.shift()+_,u=!0),d&&=(s.closePath(),!1);break;case 18:S();break;case 19:case 20:S(),ce+=l+7>>3;break;case 21:c.length>2&&!u&&(b=c.shift()+_,u=!0),p+=c.pop(),f+=c.pop(),x(f,p);break;case 22:c.length>1&&!u&&(b=c.shift()+_,u=!0),f+=c.pop(),x(f,p);break;case 23:S();break;case 24:for(;c.length>2;)r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o+c.shift(),s.curveTo(r,i,a,o,f,p);f+=c.shift(),p+=c.shift(),s.lineTo(f,p);break;case 25:for(;c.length>6;)f+=c.shift(),p+=c.shift(),s.lineTo(f,p);r=f+c.shift(),i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o+c.shift(),s.curveTo(r,i,a,o,f,p);break;case 26:for(c.length%2&&(f+=c.shift());c.length>0;)r=f,i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a,p=o+c.shift(),s.curveTo(r,i,a,o,f,p);break;case 27:for(c.length%2&&(p+=c.shift());c.length>0;)r=f+c.shift(),i=p,a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o,s.curveTo(r,i,a,o,f,p);break;case 28:g=n[ce],v=n[ce+1],c.push((g<<24|v<<16)>>16),ce+=2;break;case 29:ee=c.pop()+e.gsubrsBias,te=e.gsubrs[ee],te&&C(te);break;case 30:for(;c.length>0&&(r=f,i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o+(c.length===1?c.shift():0),s.curveTo(r,i,a,o,f,p),c.length!==0);)r=f+c.shift(),i=p,a=r+c.shift(),o=i+c.shift(),p=o+c.shift(),f=a+(c.length===1?c.shift():0),s.curveTo(r,i,a,o,f,p);break;case 31:for(;c.length>0&&(r=f+c.shift(),i=p,a=r+c.shift(),o=i+c.shift(),p=o+c.shift(),f=a+(c.length===1?c.shift():0),s.curveTo(r,i,a,o,f,p),c.length!==0);)r=f,i=p+c.shift(),a=r+c.shift(),o=i+c.shift(),f=a+c.shift(),p=o+(c.length===1?c.shift():0),s.curveTo(r,i,a,o,f,p);break;default:le<32?console.log(`Glyph `+t.index+`: unknown operator `+le):le<247?c.push(le-139):le<251?(g=n[ce],ce+=1,c.push((le-247)*256+g+108)):le<255?(g=n[ce],ce+=1,c.push(-(le-251)*256-g-108)):(g=n[ce],v=n[ce+1],y=n[ce+2],w=n[ce+3],ce+=4,c.push((g<<24|v<<16|y<<8|w)/65536))}}}return C(n),t.advanceWidth=b,s}function mV(e,t,n,r){var i=[],a,o=new Z.Parser(e,t),s=o.parseCard8();if(s===0)for(var c=0;c<n;c++){if(a=o.parseCard8(),a>=r)throw Error(`CFF table CID Font FDSelect has bad FD index value `+a+` (FD count `+r+`)`);i.push(a)}else if(s===3){var l=o.parseCard16(),u=o.parseCard16();if(u!==0)throw Error(`CFF Table CID Font FDSelect format 3 range has bad initial GID `+u);for(var d,f=0;f<l;f++){if(a=o.parseCard8(),d=o.parseCard16(),a>=r)throw Error(`CFF table CID Font FDSelect has bad FD index value `+a+` (FD count `+r+`)`);if(d>n)throw Error(`CFF Table CID Font FDSelect format 3 range has bad GID `+d);for(;u<d;u++)i.push(a);u=d}if(d!==n)throw Error(`CFF Table CID Font FDSelect format 3 range has bad final GID `+d)}else throw Error(`CFF Table CID Font FDSelect table has unsupported format `+s);return i}function hV(e,t,n,r){n.tables.cff={};var i=XB(e,XB(e,aV(e,t).endOffset,Z.bytesToString).endOffset),a=XB(e,i.endOffset,Z.bytesToString);n.gsubrs=XB(e,a.endOffset).objects,n.gsubrsBias=YB(n.gsubrs);var o=uV(e,t,i.objects,a.objects);if(o.length!==1)throw Error(`CFF table has too many fonts in 'FontSet' - count of fonts NameIndex.length = `+o.length);var s=o[0];if(n.tables.cff.topDict=s,s._privateDict&&(n.defaultWidthX=s._privateDict.defaultWidthX,n.nominalWidthX=s._privateDict.nominalWidthX),s.ros[0]!==void 0&&s.ros[1]!==void 0&&(n.isCIDFont=!0),n.isCIDFont){var c=s.fdArray,l=s.fdSelect;if(c===0||l===0)throw Error(`Font is marked as a CID font, but FDArray and/or FDSelect information is missing`);c+=t;var u=uV(e,t,XB(e,c).objects,a.objects);s._fdArray=u,l+=t,s._fdSelect=mV(e,l,n.numGlyphs,u.length)}var d=t+s.private[1],f=lV(e,d,s.private[0],a.objects);n.defaultWidthX=f.defaultWidthX,n.nominalWidthX=f.nominalWidthX,f.subrs===0?(n.subrs=[],n.subrsBias=0):(n.subrs=XB(e,d+f.subrs).objects,n.subrsBias=YB(n.subrs));var p;r.lowMemory?(p=ZB(e,t+s.charStrings),n.nGlyphs=p.offsets.length):(p=XB(e,t+s.charStrings),n.nGlyphs=p.objects.length);var m=dV(e,t+s.charset,n.nGlyphs,a.objects);if(s.encoding===0?n.cffEncoding=new NB(OB,m):s.encoding===1?n.cffEncoding=new NB(kB,m):n.cffEncoding=fV(e,t+s.encoding,m),n.encoding=n.encoding||n.cffEncoding,n.glyphs=new qB.GlyphSet(n),r.lowMemory)n._push=function(r){var i=QB(r,p.offsets,e,t+s.charStrings);n.glyphs.push(r,qB.cffGlyphLoader(n,r,pV,i))};else for(var h=0;h<n.nGlyphs;h+=1){var g=p.objects[h];n.glyphs.push(h,qB.cffGlyphLoader(n,h,pV,g))}}function gV(e,t){var n,r=DB.indexOf(e);return r>=0&&(n=r),r=t.indexOf(e),r>=0?n=r+DB.length:(n=DB.length+t.length,t.push(e)),n}function _V(){return new Y.Record(`Header`,[{name:`major`,type:`Card8`,value:1},{name:`minor`,type:`Card8`,value:0},{name:`hdrSize`,type:`Card8`,value:4},{name:`major`,type:`Card8`,value:1}])}function vV(e){var t=new Y.Record(`Name INDEX`,[{name:`names`,type:`INDEX`,value:[]}]);t.names=[];for(var n=0;n<e.length;n+=1)t.names.push({name:`name_`+n,type:`NAME`,value:e[n]});return t}function yV(e,t,n){for(var r={},i=0;i<e.length;i+=1){var a=e[i],o=t[a.name];o!==void 0&&!JB(o,a.value)&&(a.type===`SID`&&(o=gV(o,n)),r[a.op]={name:a.name,type:a.type,value:o})}return r}function bV(e,t){var n=new Y.Record(`Top DICT`,[{name:`dict`,type:`DICT`,value:{}}]);return n.dict=yV(oV,e,t),n}function xV(e){var t=new Y.Record(`Top DICT INDEX`,[{name:`topDicts`,type:`INDEX`,value:[]}]);return t.topDicts=[{name:`topDict_0`,type:`TABLE`,value:e}],t}function SV(e){var t=new Y.Record(`String INDEX`,[{name:`strings`,type:`INDEX`,value:[]}]);t.strings=[];for(var n=0;n<e.length;n+=1)t.strings.push({name:`string_`+n,type:`STRING`,value:e[n]});return t}function CV(){return new Y.Record(`Global Subr INDEX`,[{name:`subrs`,type:`INDEX`,value:[]}])}function wV(e,t){for(var n=new Y.Record(`Charsets`,[{name:`format`,type:`Card8`,value:0}]),r=0;r<e.length;r+=1){var i=e[r],a=gV(i,t);n.fields.push({name:`glyph_`+r,type:`SID`,value:a})}return n}function TV(e){var t=[],n=e.path;t.push({name:`width`,type:`NUMBER`,value:e.advanceWidth});for(var r=0,i=0,a=0;a<n.commands.length;a+=1){var o=void 0,s=void 0,c=n.commands[a];if(c.type===`Q`){var l=1/3,u=2/3;c={type:`C`,x:c.x,y:c.y,x1:Math.round(l*r+u*c.x1),y1:Math.round(l*i+u*c.y1),x2:Math.round(l*c.x+u*c.x1),y2:Math.round(l*c.y+u*c.y1)}}if(c.type===`M`)o=Math.round(c.x-r),s=Math.round(c.y-i),t.push({name:`dx`,type:`NUMBER`,value:o}),t.push({name:`dy`,type:`NUMBER`,value:s}),t.push({name:`rmoveto`,type:`OP`,value:21}),r=Math.round(c.x),i=Math.round(c.y);else if(c.type===`L`)o=Math.round(c.x-r),s=Math.round(c.y-i),t.push({name:`dx`,type:`NUMBER`,value:o}),t.push({name:`dy`,type:`NUMBER`,value:s}),t.push({name:`rlineto`,type:`OP`,value:5}),r=Math.round(c.x),i=Math.round(c.y);else if(c.type===`C`){var d=Math.round(c.x1-r),f=Math.round(c.y1-i),p=Math.round(c.x2-c.x1),m=Math.round(c.y2-c.y1);o=Math.round(c.x-c.x2),s=Math.round(c.y-c.y2),t.push({name:`dx1`,type:`NUMBER`,value:d}),t.push({name:`dy1`,type:`NUMBER`,value:f}),t.push({name:`dx2`,type:`NUMBER`,value:p}),t.push({name:`dy2`,type:`NUMBER`,value:m}),t.push({name:`dx`,type:`NUMBER`,value:o}),t.push({name:`dy`,type:`NUMBER`,value:s}),t.push({name:`rrcurveto`,type:`OP`,value:8}),r=Math.round(c.x),i=Math.round(c.y)}}return t.push({name:`endchar`,type:`OP`,value:14}),t}function EV(e){for(var t=new Y.Record(`CharStrings INDEX`,[{name:`charStrings`,type:`INDEX`,value:[]}]),n=0;n<e.length;n+=1){var r=e.get(n),i=TV(r);t.charStrings.push({name:r.name,type:`CHARSTRING`,value:i})}return t}function DV(e,t){var n=new Y.Record(`Private DICT`,[{name:`dict`,type:`DICT`,value:{}}]);return n.dict=yV(sV,e,t),n}function OV(e,t){for(var n=new Y.Table(`CFF `,[{name:`header`,type:`RECORD`},{name:`nameIndex`,type:`RECORD`},{name:`topDictIndex`,type:`RECORD`},{name:`stringIndex`,type:`RECORD`},{name:`globalSubrIndex`,type:`RECORD`},{name:`charsets`,type:`RECORD`},{name:`charStringsIndex`,type:`RECORD`},{name:`privateDict`,type:`RECORD`}]),r=1/t.unitsPerEm,i={version:t.version,fullName:t.fullName,familyName:t.familyName,weight:t.weightName,fontBBox:t.fontBBox||[0,0,0,0],fontMatrix:[r,0,0,r,0,0],charset:999,encoding:0,charStrings:999,private:[0,999]},a={},o=[],s,c=1;c<e.length;c+=1)s=e.get(c),o.push(s.name);var l=[];n.header=_V(),n.nameIndex=vV([t.postScriptName]);var u=bV(i,l);return n.topDictIndex=xV(u),n.globalSubrIndex=CV(),n.charsets=wV(o,l),n.charStringsIndex=EV(e),n.privateDict=DV(a,l),n.stringIndex=SV(l),i.charset=n.header.sizeOf()+n.nameIndex.sizeOf()+n.topDictIndex.sizeOf()+n.stringIndex.sizeOf()+n.globalSubrIndex.sizeOf(),i.encoding=0,i.charStrings=i.charset+n.charsets.sizeOf(),i.private[1]=i.charStrings+n.charStringsIndex.sizeOf(),u=bV(i,l),n.topDictIndex=xV(u),n}var kV={parse:hV,make:OV};function AV(e,t){var n={},r=new Z.Parser(e,t);return n.version=r.parseVersion(),n.fontRevision=Math.round(r.parseFixed()*1e3)/1e3,n.checkSumAdjustment=r.parseULong(),n.magicNumber=r.parseULong(),K.argument(n.magicNumber===1594834165,`Font header has wrong magic number.`),n.flags=r.parseUShort(),n.unitsPerEm=r.parseUShort(),n.created=r.parseLongDateTime(),n.modified=r.parseLongDateTime(),n.xMin=r.parseShort(),n.yMin=r.parseShort(),n.xMax=r.parseShort(),n.yMax=r.parseShort(),n.macStyle=r.parseUShort(),n.lowestRecPPEM=r.parseUShort(),n.fontDirectionHint=r.parseShort(),n.indexToLocFormat=r.parseShort(),n.glyphDataFormat=r.parseShort(),n}function jV(e){var t=Math.round(new Date().getTime()/1e3)+2082844800,n=t;return e.createdTimestamp&&(n=e.createdTimestamp+2082844800),new Y.Table(`head`,[{name:`version`,type:`FIXED`,value:65536},{name:`fontRevision`,type:`FIXED`,value:65536},{name:`checkSumAdjustment`,type:`ULONG`,value:0},{name:`magicNumber`,type:`ULONG`,value:1594834165},{name:`flags`,type:`USHORT`,value:0},{name:`unitsPerEm`,type:`USHORT`,value:1e3},{name:`created`,type:`LONGDATETIME`,value:n},{name:`modified`,type:`LONGDATETIME`,value:t},{name:`xMin`,type:`SHORT`,value:0},{name:`yMin`,type:`SHORT`,value:0},{name:`xMax`,type:`SHORT`,value:0},{name:`yMax`,type:`SHORT`,value:0},{name:`macStyle`,type:`USHORT`,value:0},{name:`lowestRecPPEM`,type:`USHORT`,value:0},{name:`fontDirectionHint`,type:`SHORT`,value:2},{name:`indexToLocFormat`,type:`SHORT`,value:0},{name:`glyphDataFormat`,type:`SHORT`,value:0}],e)}var MV={parse:AV,make:jV};function NV(e,t){var n={},r=new Z.Parser(e,t);return n.version=r.parseVersion(),n.ascender=r.parseShort(),n.descender=r.parseShort(),n.lineGap=r.parseShort(),n.advanceWidthMax=r.parseUShort(),n.minLeftSideBearing=r.parseShort(),n.minRightSideBearing=r.parseShort(),n.xMaxExtent=r.parseShort(),n.caretSlopeRise=r.parseShort(),n.caretSlopeRun=r.parseShort(),n.caretOffset=r.parseShort(),r.relativeOffset+=8,n.metricDataFormat=r.parseShort(),n.numberOfHMetrics=r.parseUShort(),n}function PV(e){return new Y.Table(`hhea`,[{name:`version`,type:`FIXED`,value:65536},{name:`ascender`,type:`FWORD`,value:0},{name:`descender`,type:`FWORD`,value:0},{name:`lineGap`,type:`FWORD`,value:0},{name:`advanceWidthMax`,type:`UFWORD`,value:0},{name:`minLeftSideBearing`,type:`FWORD`,value:0},{name:`minRightSideBearing`,type:`FWORD`,value:0},{name:`xMaxExtent`,type:`FWORD`,value:0},{name:`caretSlopeRise`,type:`SHORT`,value:1},{name:`caretSlopeRun`,type:`SHORT`,value:0},{name:`caretOffset`,type:`SHORT`,value:0},{name:`reserved1`,type:`SHORT`,value:0},{name:`reserved2`,type:`SHORT`,value:0},{name:`reserved3`,type:`SHORT`,value:0},{name:`reserved4`,type:`SHORT`,value:0},{name:`metricDataFormat`,type:`SHORT`,value:0},{name:`numberOfHMetrics`,type:`USHORT`,value:0}],e)}var FV={parse:NV,make:PV};function IV(e,t,n,r,i){for(var a,o,s=new Z.Parser(e,t),c=0;c<r;c+=1){c<n&&(a=s.parseUShort(),o=s.parseShort());var l=i.get(c);l.advanceWidth=a,l.leftSideBearing=o}}function LV(e,t,n,r,i){e._hmtxTableData={};for(var a,o,s=new Z.Parser(t,n),c=0;c<i;c+=1)c<r&&(a=s.parseUShort(),o=s.parseShort()),e._hmtxTableData[c]={advanceWidth:a,leftSideBearing:o}}function RV(e,t,n,r,i,a,o){o.lowMemory?LV(e,t,n,r,i):IV(t,n,r,i,a)}function zV(e){for(var t=new Y.Table(`hmtx`,[]),n=0;n<e.length;n+=1){var r=e.get(n),i=r.advanceWidth||0,a=r.leftSideBearing||0;t.fields.push({name:`advanceWidth_`+n,type:`USHORT`,value:i}),t.fields.push({name:`leftSideBearing_`+n,type:`SHORT`,value:a})}return t}var BV={parse:RV,make:zV};function VV(e){for(var t=new Y.Table(`ltag`,[{name:`version`,type:`ULONG`,value:1},{name:`flags`,type:`ULONG`,value:0},{name:`numTags`,type:`ULONG`,value:e.length}]),n=``,r=12+e.length*4,i=0;i<e.length;++i){var a=n.indexOf(e[i]);a<0&&(a=n.length,n+=e[i]),t.fields.push({name:`offset `+i,type:`USHORT`,value:r+a}),t.fields.push({name:`length `+i,type:`USHORT`,value:e[i].length})}return t.fields.push({name:`stringPool`,type:`CHARARRAY`,value:n}),t}function HV(e,t){var n=new Z.Parser(e,t),r=n.parseULong();K.argument(r===1,`Unsupported ltag table version.`),n.skip(`uLong`,1);for(var i=n.parseULong(),a=[],o=0;o<i;o++){for(var s=``,c=t+n.parseUShort(),l=n.parseUShort(),u=c;u<c+l;++u)s+=String.fromCharCode(e.getInt8(u));a.push(s)}return a}var UV={make:VV,parse:HV};function WV(e,t){var n={},r=new Z.Parser(e,t);return n.version=r.parseVersion(),n.numGlyphs=r.parseUShort(),n.version===1&&(n.maxPoints=r.parseUShort(),n.maxContours=r.parseUShort(),n.maxCompositePoints=r.parseUShort(),n.maxCompositeContours=r.parseUShort(),n.maxZones=r.parseUShort(),n.maxTwilightPoints=r.parseUShort(),n.maxStorage=r.parseUShort(),n.maxFunctionDefs=r.parseUShort(),n.maxInstructionDefs=r.parseUShort(),n.maxStackElements=r.parseUShort(),n.maxSizeOfInstructions=r.parseUShort(),n.maxComponentElements=r.parseUShort(),n.maxComponentDepth=r.parseUShort()),n}function GV(e){return new Y.Table(`maxp`,[{name:`version`,type:`FIXED`,value:20480},{name:`numGlyphs`,type:`USHORT`,value:e}])}var KV={parse:WV,make:GV},qV=[`copyright`,`fontFamily`,`fontSubfamily`,`uniqueID`,`fullName`,`version`,`postScriptName`,`trademark`,`manufacturer`,`designer`,`description`,`manufacturerURL`,`designerURL`,`license`,`licenseURL`,`reserved`,`preferredFamily`,`preferredSubfamily`,`compatibleFullName`,`sampleText`,`postScriptFindFontName`,`wwsFamily`,`wwsSubfamily`],JV={0:`en`,1:`fr`,2:`de`,3:`it`,4:`nl`,5:`sv`,6:`es`,7:`da`,8:`pt`,9:`no`,10:`he`,11:`ja`,12:`ar`,13:`fi`,14:`el`,15:`is`,16:`mt`,17:`tr`,18:`hr`,19:`zh-Hant`,20:`ur`,21:`hi`,22:`th`,23:`ko`,24:`lt`,25:`pl`,26:`hu`,27:`es`,28:`lv`,29:`se`,30:`fo`,31:`fa`,32:`ru`,33:`zh`,34:`nl-BE`,35:`ga`,36:`sq`,37:`ro`,38:`cz`,39:`sk`,40:`si`,41:`yi`,42:`sr`,43:`mk`,44:`bg`,45:`uk`,46:`be`,47:`uz`,48:`kk`,49:`az-Cyrl`,50:`az-Arab`,51:`hy`,52:`ka`,53:`mo`,54:`ky`,55:`tg`,56:`tk`,57:`mn-CN`,58:`mn`,59:`ps`,60:`ks`,61:`ku`,62:`sd`,63:`bo`,64:`ne`,65:`sa`,66:`mr`,67:`bn`,68:`as`,69:`gu`,70:`pa`,71:`or`,72:`ml`,73:`kn`,74:`ta`,75:`te`,76:`si`,77:`my`,78:`km`,79:`lo`,80:`vi`,81:`id`,82:`tl`,83:`ms`,84:`ms-Arab`,85:`am`,86:`ti`,87:`om`,88:`so`,89:`sw`,90:`rw`,91:`rn`,92:`ny`,93:`mg`,94:`eo`,128:`cy`,129:`eu`,130:`ca`,131:`la`,132:`qu`,133:`gn`,134:`ay`,135:`tt`,136:`ug`,137:`dz`,138:`jv`,139:`su`,140:`gl`,141:`af`,142:`br`,143:`iu`,144:`gd`,145:`gv`,146:`ga`,147:`to`,148:`el-polyton`,149:`kl`,150:`az`,151:`nn`},YV={0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:5,11:1,12:4,13:0,14:6,15:0,16:0,17:0,18:0,19:2,20:4,21:9,22:21,23:3,24:29,25:29,26:29,27:29,28:29,29:0,30:0,31:4,32:7,33:25,34:0,35:0,36:0,37:0,38:29,39:29,40:0,41:5,42:7,43:7,44:7,45:7,46:7,47:7,48:7,49:7,50:4,51:24,52:23,53:7,54:7,55:7,56:7,57:27,58:7,59:4,60:4,61:4,62:4,63:26,64:9,65:9,66:9,67:13,68:13,69:11,70:10,71:12,72:17,73:16,74:14,75:15,76:18,77:19,78:20,79:22,80:30,81:0,82:0,83:0,84:4,85:28,86:28,87:28,88:0,89:0,90:0,91:0,92:0,93:0,94:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:7,136:4,137:26,138:0,139:0,140:0,141:0,142:0,143:28,144:0,145:0,146:0,147:0,148:6,149:0,150:0,151:0},XV={1078:`af`,1052:`sq`,1156:`gsw`,1118:`am`,5121:`ar-DZ`,15361:`ar-BH`,3073:`ar`,2049:`ar-IQ`,11265:`ar-JO`,13313:`ar-KW`,12289:`ar-LB`,4097:`ar-LY`,6145:`ary`,8193:`ar-OM`,16385:`ar-QA`,1025:`ar-SA`,10241:`ar-SY`,7169:`aeb`,14337:`ar-AE`,9217:`ar-YE`,1067:`hy`,1101:`as`,2092:`az-Cyrl`,1068:`az`,1133:`ba`,1069:`eu`,1059:`be`,2117:`bn`,1093:`bn-IN`,8218:`bs-Cyrl`,5146:`bs`,1150:`br`,1026:`bg`,1027:`ca`,3076:`zh-HK`,5124:`zh-MO`,2052:`zh`,4100:`zh-SG`,1028:`zh-TW`,1155:`co`,1050:`hr`,4122:`hr-BA`,1029:`cs`,1030:`da`,1164:`prs`,1125:`dv`,2067:`nl-BE`,1043:`nl`,3081:`en-AU`,10249:`en-BZ`,4105:`en-CA`,9225:`en-029`,16393:`en-IN`,6153:`en-IE`,8201:`en-JM`,17417:`en-MY`,5129:`en-NZ`,13321:`en-PH`,18441:`en-SG`,7177:`en-ZA`,11273:`en-TT`,2057:`en-GB`,1033:`en`,12297:`en-ZW`,1061:`et`,1080:`fo`,1124:`fil`,1035:`fi`,2060:`fr-BE`,3084:`fr-CA`,1036:`fr`,5132:`fr-LU`,6156:`fr-MC`,4108:`fr-CH`,1122:`fy`,1110:`gl`,1079:`ka`,3079:`de-AT`,1031:`de`,5127:`de-LI`,4103:`de-LU`,2055:`de-CH`,1032:`el`,1135:`kl`,1095:`gu`,1128:`ha`,1037:`he`,1081:`hi`,1038:`hu`,1039:`is`,1136:`ig`,1057:`id`,1117:`iu`,2141:`iu-Latn`,2108:`ga`,1076:`xh`,1077:`zu`,1040:`it`,2064:`it-CH`,1041:`ja`,1099:`kn`,1087:`kk`,1107:`km`,1158:`quc`,1159:`rw`,1089:`sw`,1111:`kok`,1042:`ko`,1088:`ky`,1108:`lo`,1062:`lv`,1063:`lt`,2094:`dsb`,1134:`lb`,1071:`mk`,2110:`ms-BN`,1086:`ms`,1100:`ml`,1082:`mt`,1153:`mi`,1146:`arn`,1102:`mr`,1148:`moh`,1104:`mn`,2128:`mn-CN`,1121:`ne`,1044:`nb`,2068:`nn`,1154:`oc`,1096:`or`,1123:`ps`,1045:`pl`,1046:`pt`,2070:`pt-PT`,1094:`pa`,1131:`qu-BO`,2155:`qu-EC`,3179:`qu`,1048:`ro`,1047:`rm`,1049:`ru`,9275:`smn`,4155:`smj-NO`,5179:`smj`,3131:`se-FI`,1083:`se`,2107:`se-SE`,8251:`sms`,6203:`sma-NO`,7227:`sms`,1103:`sa`,7194:`sr-Cyrl-BA`,3098:`sr`,6170:`sr-Latn-BA`,2074:`sr-Latn`,1132:`nso`,1074:`tn`,1115:`si`,1051:`sk`,1060:`sl`,11274:`es-AR`,16394:`es-BO`,13322:`es-CL`,9226:`es-CO`,5130:`es-CR`,7178:`es-DO`,12298:`es-EC`,17418:`es-SV`,4106:`es-GT`,18442:`es-HN`,2058:`es-MX`,19466:`es-NI`,6154:`es-PA`,15370:`es-PY`,10250:`es-PE`,20490:`es-PR`,3082:`es`,1034:`es`,21514:`es-US`,14346:`es-UY`,8202:`es-VE`,2077:`sv-FI`,1053:`sv`,1114:`syr`,1064:`tg`,2143:`tzm`,1097:`ta`,1092:`tt`,1098:`te`,1054:`th`,1105:`bo`,1055:`tr`,1090:`tk`,1152:`ug`,1058:`uk`,1070:`hsb`,1056:`ur`,2115:`uz-Cyrl`,1091:`uz`,1066:`vi`,1106:`cy`,1160:`wo`,1157:`sah`,1144:`ii`,1130:`yo`};function ZV(e,t,n){switch(e){case 0:if(t===65535)return`und`;if(n)return n[t];break;case 1:return JV[t];case 3:return XV[t]}}var QV=`utf-16`,$V={0:`macintosh`,1:`x-mac-japanese`,2:`x-mac-chinesetrad`,3:`x-mac-korean`,6:`x-mac-greek`,7:`x-mac-cyrillic`,9:`x-mac-devanagai`,10:`x-mac-gurmukhi`,11:`x-mac-gujarati`,12:`x-mac-oriya`,13:`x-mac-bengali`,14:`x-mac-tamil`,15:`x-mac-telugu`,16:`x-mac-kannada`,17:`x-mac-malayalam`,18:`x-mac-sinhalese`,19:`x-mac-burmese`,20:`x-mac-khmer`,21:`x-mac-thai`,22:`x-mac-lao`,23:`x-mac-georgian`,24:`x-mac-armenian`,25:`x-mac-chinesesimp`,26:`x-mac-tibetan`,27:`x-mac-mongolian`,28:`x-mac-ethiopic`,29:`x-mac-ce`,30:`x-mac-vietnamese`,31:`x-mac-extarabic`},eH={15:`x-mac-icelandic`,17:`x-mac-turkish`,18:`x-mac-croatian`,24:`x-mac-ce`,25:`x-mac-ce`,26:`x-mac-ce`,27:`x-mac-ce`,28:`x-mac-ce`,30:`x-mac-icelandic`,37:`x-mac-romanian`,38:`x-mac-ce`,39:`x-mac-ce`,40:`x-mac-ce`,143:`x-mac-inuit`,146:`x-mac-gaelic`};function tH(e,t,n){switch(e){case 0:return QV;case 1:return eH[n]||$V[t];case 3:if(t===1||t===10)return QV;break}}function nH(e,t,n){for(var r={},i=new Z.Parser(e,t),a=i.parseUShort(),o=i.parseUShort(),s=i.offset+i.parseUShort(),c=0;c<o;c++){var l=i.parseUShort(),u=i.parseUShort(),d=i.parseUShort(),f=i.parseUShort(),p=qV[f]||f,m=i.parseUShort(),h=i.parseUShort(),g=ZV(l,d,n),_=tH(l,u,d);if(_!==void 0&&g!==void 0){var v=void 0;if(v=_===QV?Wz.UTF16(e,s+h,m):Wz.MACSTRING(e,s+h,m,_),v){var y=r[p];y===void 0&&(y=r[p]={}),y[g]=v}}}return a===1&&i.parseUShort(),r}function rH(e){var t={};for(var n in e)t[e[n]]=parseInt(n);return t}function iH(e,t,n,r,i,a){return new Y.Record(`NameRecord`,[{name:`platformID`,type:`USHORT`,value:e},{name:`encodingID`,type:`USHORT`,value:t},{name:`languageID`,type:`USHORT`,value:n},{name:`nameID`,type:`USHORT`,value:r},{name:`length`,type:`USHORT`,value:i},{name:`offset`,type:`USHORT`,value:a}])}function aH(e,t){var n=e.length,r=t.length-n+1;loop:for(var i=0;i<r;i++)for(;i<r;i++){for(var a=0;a<n;a++)if(t[i+a]!==e[a])continue loop;return i}return-1}function oH(e,t){var n=aH(e,t);if(n<0){n=t.length;for(var r=0,i=e.length;r<i;++r)t.push(e[r])}return n}function sH(e,t){var n,r=[],i={},a=rH(qV);for(var o in e){var s=a[o];if(s===void 0&&(s=o),n=parseInt(s),isNaN(n))throw Error(`Name table entry "`+o+`" does not exist, see nameTableNames for complete list.`);i[n]=e[o],r.push(n)}for(var c=rH(JV),l=rH(XV),u=[],d=[],f=0;f<r.length;f++){n=r[f];var p=i[n];for(var m in p){var h=p[m],g=1,_=c[m],v=YV[_],y=tH(g,v,_),b=q.MACSTRING(h,y);b===void 0&&(g=0,_=t.indexOf(m),_<0&&(_=t.length,t.push(m)),v=4,b=q.UTF16(h));var x=oH(b,d);u.push(iH(g,v,_,n,b.length,x));var S=l[m];if(S!==void 0){var C=q.UTF16(h),w=oH(C,d);u.push(iH(3,1,S,n,C.length,w))}}}u.sort(function(e,t){return e.platformID-t.platformID||e.encodingID-t.encodingID||e.languageID-t.languageID||e.nameID-t.nameID});for(var ee=new Y.Table(`name`,[{name:`format`,type:`USHORT`,value:0},{name:`count`,type:`USHORT`,value:u.length},{name:`stringOffset`,type:`USHORT`,value:6+u.length*12}]),te=0;te<u.length;te++)ee.fields.push({name:`record_`+te,type:`RECORD`,value:u[te]});return ee.fields.push({name:`strings`,type:`LITERAL`,value:d}),ee}var cH={parse:nH,make:sH},lH=[{begin:0,end:127},{begin:128,end:255},{begin:256,end:383},{begin:384,end:591},{begin:592,end:687},{begin:688,end:767},{begin:768,end:879},{begin:880,end:1023},{begin:11392,end:11519},{begin:1024,end:1279},{begin:1328,end:1423},{begin:1424,end:1535},{begin:42240,end:42559},{begin:1536,end:1791},{begin:1984,end:2047},{begin:2304,end:2431},{begin:2432,end:2559},{begin:2560,end:2687},{begin:2688,end:2815},{begin:2816,end:2943},{begin:2944,end:3071},{begin:3072,end:3199},{begin:3200,end:3327},{begin:3328,end:3455},{begin:3584,end:3711},{begin:3712,end:3839},{begin:4256,end:4351},{begin:6912,end:7039},{begin:4352,end:4607},{begin:7680,end:7935},{begin:7936,end:8191},{begin:8192,end:8303},{begin:8304,end:8351},{begin:8352,end:8399},{begin:8400,end:8447},{begin:8448,end:8527},{begin:8528,end:8591},{begin:8592,end:8703},{begin:8704,end:8959},{begin:8960,end:9215},{begin:9216,end:9279},{begin:9280,end:9311},{begin:9312,end:9471},{begin:9472,end:9599},{begin:9600,end:9631},{begin:9632,end:9727},{begin:9728,end:9983},{begin:9984,end:10175},{begin:12288,end:12351},{begin:12352,end:12447},{begin:12448,end:12543},{begin:12544,end:12591},{begin:12592,end:12687},{begin:43072,end:43135},{begin:12800,end:13055},{begin:13056,end:13311},{begin:44032,end:55215},{begin:55296,end:57343},{begin:67840,end:67871},{begin:19968,end:40959},{begin:57344,end:63743},{begin:12736,end:12783},{begin:64256,end:64335},{begin:64336,end:65023},{begin:65056,end:65071},{begin:65040,end:65055},{begin:65104,end:65135},{begin:65136,end:65279},{begin:65280,end:65519},{begin:65520,end:65535},{begin:3840,end:4095},{begin:1792,end:1871},{begin:1920,end:1983},{begin:3456,end:3583},{begin:4096,end:4255},{begin:4608,end:4991},{begin:5024,end:5119},{begin:5120,end:5759},{begin:5760,end:5791},{begin:5792,end:5887},{begin:6016,end:6143},{begin:6144,end:6319},{begin:10240,end:10495},{begin:40960,end:42127},{begin:5888,end:5919},{begin:66304,end:66351},{begin:66352,end:66383},{begin:66560,end:66639},{begin:118784,end:119039},{begin:119808,end:120831},{begin:1044480,end:1048573},{begin:65024,end:65039},{begin:917504,end:917631},{begin:6400,end:6479},{begin:6480,end:6527},{begin:6528,end:6623},{begin:6656,end:6687},{begin:11264,end:11359},{begin:11568,end:11647},{begin:19904,end:19967},{begin:43008,end:43055},{begin:65536,end:65663},{begin:65856,end:65935},{begin:66432,end:66463},{begin:66464,end:66527},{begin:66640,end:66687},{begin:66688,end:66735},{begin:67584,end:67647},{begin:68096,end:68191},{begin:119552,end:119647},{begin:73728,end:74751},{begin:119648,end:119679},{begin:7040,end:7103},{begin:7168,end:7247},{begin:7248,end:7295},{begin:43136,end:43231},{begin:43264,end:43311},{begin:43312,end:43359},{begin:43520,end:43615},{begin:65936,end:65999},{begin:66e3,end:66047},{begin:66208,end:66271},{begin:127024,end:127135}];function uH(e){for(var t=0;t<lH.length;t+=1){var n=lH[t];if(e>=n.begin&&e<n.end)return t}return-1}function dH(e,t){var n={},r=new Z.Parser(e,t);n.version=r.parseUShort(),n.xAvgCharWidth=r.parseShort(),n.usWeightClass=r.parseUShort(),n.usWidthClass=r.parseUShort(),n.fsType=r.parseUShort(),n.ySubscriptXSize=r.parseShort(),n.ySubscriptYSize=r.parseShort(),n.ySubscriptXOffset=r.parseShort(),n.ySubscriptYOffset=r.parseShort(),n.ySuperscriptXSize=r.parseShort(),n.ySuperscriptYSize=r.parseShort(),n.ySuperscriptXOffset=r.parseShort(),n.ySuperscriptYOffset=r.parseShort(),n.yStrikeoutSize=r.parseShort(),n.yStrikeoutPosition=r.parseShort(),n.sFamilyClass=r.parseShort(),n.panose=[];for(var i=0;i<10;i++)n.panose[i]=r.parseByte();return n.ulUnicodeRange1=r.parseULong(),n.ulUnicodeRange2=r.parseULong(),n.ulUnicodeRange3=r.parseULong(),n.ulUnicodeRange4=r.parseULong(),n.achVendID=String.fromCharCode(r.parseByte(),r.parseByte(),r.parseByte(),r.parseByte()),n.fsSelection=r.parseUShort(),n.usFirstCharIndex=r.parseUShort(),n.usLastCharIndex=r.parseUShort(),n.sTypoAscender=r.parseShort(),n.sTypoDescender=r.parseShort(),n.sTypoLineGap=r.parseShort(),n.usWinAscent=r.parseUShort(),n.usWinDescent=r.parseUShort(),n.version>=1&&(n.ulCodePageRange1=r.parseULong(),n.ulCodePageRange2=r.parseULong()),n.version>=2&&(n.sxHeight=r.parseShort(),n.sCapHeight=r.parseShort(),n.usDefaultChar=r.parseUShort(),n.usBreakChar=r.parseUShort(),n.usMaxContent=r.parseUShort()),n}function fH(e){return new Y.Table(`OS/2`,[{name:`version`,type:`USHORT`,value:3},{name:`xAvgCharWidth`,type:`SHORT`,value:0},{name:`usWeightClass`,type:`USHORT`,value:0},{name:`usWidthClass`,type:`USHORT`,value:0},{name:`fsType`,type:`USHORT`,value:0},{name:`ySubscriptXSize`,type:`SHORT`,value:650},{name:`ySubscriptYSize`,type:`SHORT`,value:699},{name:`ySubscriptXOffset`,type:`SHORT`,value:0},{name:`ySubscriptYOffset`,type:`SHORT`,value:140},{name:`ySuperscriptXSize`,type:`SHORT`,value:650},{name:`ySuperscriptYSize`,type:`SHORT`,value:699},{name:`ySuperscriptXOffset`,type:`SHORT`,value:0},{name:`ySuperscriptYOffset`,type:`SHORT`,value:479},{name:`yStrikeoutSize`,type:`SHORT`,value:49},{name:`yStrikeoutPosition`,type:`SHORT`,value:258},{name:`sFamilyClass`,type:`SHORT`,value:0},{name:`bFamilyType`,type:`BYTE`,value:0},{name:`bSerifStyle`,type:`BYTE`,value:0},{name:`bWeight`,type:`BYTE`,value:0},{name:`bProportion`,type:`BYTE`,value:0},{name:`bContrast`,type:`BYTE`,value:0},{name:`bStrokeVariation`,type:`BYTE`,value:0},{name:`bArmStyle`,type:`BYTE`,value:0},{name:`bLetterform`,type:`BYTE`,value:0},{name:`bMidline`,type:`BYTE`,value:0},{name:`bXHeight`,type:`BYTE`,value:0},{name:`ulUnicodeRange1`,type:`ULONG`,value:0},{name:`ulUnicodeRange2`,type:`ULONG`,value:0},{name:`ulUnicodeRange3`,type:`ULONG`,value:0},{name:`ulUnicodeRange4`,type:`ULONG`,value:0},{name:`achVendID`,type:`CHARARRAY`,value:`XXXX`},{name:`fsSelection`,type:`USHORT`,value:0},{name:`usFirstCharIndex`,type:`USHORT`,value:0},{name:`usLastCharIndex`,type:`USHORT`,value:0},{name:`sTypoAscender`,type:`SHORT`,value:0},{name:`sTypoDescender`,type:`SHORT`,value:0},{name:`sTypoLineGap`,type:`SHORT`,value:0},{name:`usWinAscent`,type:`USHORT`,value:0},{name:`usWinDescent`,type:`USHORT`,value:0},{name:`ulCodePageRange1`,type:`ULONG`,value:0},{name:`ulCodePageRange2`,type:`ULONG`,value:0},{name:`sxHeight`,type:`SHORT`,value:0},{name:`sCapHeight`,type:`SHORT`,value:0},{name:`usDefaultChar`,type:`USHORT`,value:0},{name:`usBreakChar`,type:`USHORT`,value:0},{name:`usMaxContext`,type:`USHORT`,value:0}],e)}var pH={parse:dH,make:fH,unicodeRanges:lH,getUnicodeRange:uH};function mH(e,t){var n={},r=new Z.Parser(e,t);switch(n.version=r.parseVersion(),n.italicAngle=r.parseFixed(),n.underlinePosition=r.parseShort(),n.underlineThickness=r.parseShort(),n.isFixedPitch=r.parseULong(),n.minMemType42=r.parseULong(),n.maxMemType42=r.parseULong(),n.minMemType1=r.parseULong(),n.maxMemType1=r.parseULong(),n.version){case 1:n.names=AB.slice();break;case 2:n.numberOfGlyphs=r.parseUShort(),n.glyphNameIndex=Array(n.numberOfGlyphs);for(var i=0;i<n.numberOfGlyphs;i++)n.glyphNameIndex[i]=r.parseUShort();n.names=[];for(var a=0;a<n.numberOfGlyphs;a++)if(n.glyphNameIndex[a]>=AB.length){var o=r.parseChar();n.names.push(r.parseString(o))}break;case 2.5:n.numberOfGlyphs=r.parseUShort(),n.offset=Array(n.numberOfGlyphs);for(var s=0;s<n.numberOfGlyphs;s++)n.offset[s]=r.parseChar();break}return n}function hH(){return new Y.Table(`post`,[{name:`version`,type:`FIXED`,value:196608},{name:`italicAngle`,type:`FIXED`,value:0},{name:`underlinePosition`,type:`FWORD`,value:0},{name:`underlineThickness`,type:`FWORD`,value:0},{name:`isFixedPitch`,type:`ULONG`,value:0},{name:`minMemType42`,type:`ULONG`,value:0},{name:`maxMemType42`,type:`ULONG`,value:0},{name:`minMemType1`,type:`ULONG`,value:0},{name:`maxMemType1`,type:`ULONG`,value:0}])}var gH={parse:mH,make:hH},_H=Array(9);_H[1]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{substFormat:1,coverage:this.parsePointer(X.coverage),deltaGlyphId:this.parseUShort()};if(t===2)return{substFormat:2,coverage:this.parsePointer(X.coverage),substitute:this.parseOffset16List()};K.assert(!1,`0x`+e.toString(16)+`: lookup type 1 format must be 1 or 2.`)},_H[2]=function(){var e=this.parseUShort();return K.argument(e===1,`GSUB Multiple Substitution Subtable identifier-format must be 1`),{substFormat:e,coverage:this.parsePointer(X.coverage),sequences:this.parseListOfLists()}},_H[3]=function(){var e=this.parseUShort();return K.argument(e===1,`GSUB Alternate Substitution Subtable identifier-format must be 1`),{substFormat:e,coverage:this.parsePointer(X.coverage),alternateSets:this.parseListOfLists()}},_H[4]=function(){var e=this.parseUShort();return K.argument(e===1,`GSUB ligature table identifier-format must be 1`),{substFormat:e,coverage:this.parsePointer(X.coverage),ligatureSets:this.parseListOfLists(function(){return{ligGlyph:this.parseUShort(),components:this.parseUShortList(this.parseUShort()-1)}})}};var vH={sequenceIndex:X.uShort,lookupListIndex:X.uShort};_H[5]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{substFormat:t,coverage:this.parsePointer(X.coverage),ruleSets:this.parseListOfLists(function(){var e=this.parseUShort(),t=this.parseUShort();return{input:this.parseUShortList(e-1),lookupRecords:this.parseRecordList(t,vH)}})};if(t===2)return{substFormat:t,coverage:this.parsePointer(X.coverage),classDef:this.parsePointer(X.classDef),classSets:this.parseListOfLists(function(){var e=this.parseUShort(),t=this.parseUShort();return{classes:this.parseUShortList(e-1),lookupRecords:this.parseRecordList(t,vH)}})};if(t===3){var n=this.parseUShort(),r=this.parseUShort();return{substFormat:t,coverages:this.parseList(n,X.pointer(X.coverage)),lookupRecords:this.parseRecordList(r,vH)}}K.assert(!1,`0x`+e.toString(16)+`: lookup type 5 format must be 1, 2 or 3.`)},_H[6]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{substFormat:1,coverage:this.parsePointer(X.coverage),chainRuleSets:this.parseListOfLists(function(){return{backtrack:this.parseUShortList(),input:this.parseUShortList(this.parseShort()-1),lookahead:this.parseUShortList(),lookupRecords:this.parseRecordList(vH)}})};if(t===2)return{substFormat:2,coverage:this.parsePointer(X.coverage),backtrackClassDef:this.parsePointer(X.classDef),inputClassDef:this.parsePointer(X.classDef),lookaheadClassDef:this.parsePointer(X.classDef),chainClassSet:this.parseListOfLists(function(){return{backtrack:this.parseUShortList(),input:this.parseUShortList(this.parseShort()-1),lookahead:this.parseUShortList(),lookupRecords:this.parseRecordList(vH)}})};if(t===3)return{substFormat:3,backtrackCoverage:this.parseList(X.pointer(X.coverage)),inputCoverage:this.parseList(X.pointer(X.coverage)),lookaheadCoverage:this.parseList(X.pointer(X.coverage)),lookupRecords:this.parseRecordList(vH)};K.assert(!1,`0x`+e.toString(16)+`: lookup type 6 format must be 1, 2 or 3.`)},_H[7]=function(){var e=this.parseUShort();K.argument(e===1,`GSUB Extension Substitution subtable identifier-format must be 1`);var t=this.parseUShort(),n=new X(this.data,this.offset+this.parseULong());return{substFormat:1,lookupType:t,extension:_H[t].call(n)}},_H[8]=function(){var e=this.parseUShort();return K.argument(e===1,`GSUB Reverse Chaining Contextual Single Substitution Subtable identifier-format must be 1`),{substFormat:e,coverage:this.parsePointer(X.coverage),backtrackCoverage:this.parseList(X.pointer(X.coverage)),lookaheadCoverage:this.parseList(X.pointer(X.coverage)),substitutes:this.parseUShortList()}};function yH(e,t){t||=0;var n=new X(e,t),r=n.parseVersion(1);return K.argument(r===1||r===1.1,`Unsupported GSUB table version.`),r===1?{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(_H)}:{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(_H),variations:n.parseFeatureVariationsList()}}var bH=Array(9);bH[1]=function(e){return e.substFormat===1?new Y.Table(`substitutionTable`,[{name:`substFormat`,type:`USHORT`,value:1},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)},{name:`deltaGlyphID`,type:`USHORT`,value:e.deltaGlyphId}]):new Y.Table(`substitutionTable`,[{name:`substFormat`,type:`USHORT`,value:2},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)}].concat(Y.ushortList(`substitute`,e.substitute)))},bH[2]=function(e){return K.assert(e.substFormat===1,`Lookup type 2 substFormat must be 1.`),new Y.Table(`substitutionTable`,[{name:`substFormat`,type:`USHORT`,value:1},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)}].concat(Y.tableList(`seqSet`,e.sequences,function(e){return new Y.Table(`sequenceSetTable`,Y.ushortList(`sequence`,e))})))},bH[3]=function(e){return K.assert(e.substFormat===1,`Lookup type 3 substFormat must be 1.`),new Y.Table(`substitutionTable`,[{name:`substFormat`,type:`USHORT`,value:1},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)}].concat(Y.tableList(`altSet`,e.alternateSets,function(e){return new Y.Table(`alternateSetTable`,Y.ushortList(`alternate`,e))})))},bH[4]=function(e){return K.assert(e.substFormat===1,`Lookup type 4 substFormat must be 1.`),new Y.Table(`substitutionTable`,[{name:`substFormat`,type:`USHORT`,value:1},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)}].concat(Y.tableList(`ligSet`,e.ligatureSets,function(e){return new Y.Table(`ligatureSetTable`,Y.tableList(`ligature`,e,function(e){return new Y.Table(`ligatureTable`,[{name:`ligGlyph`,type:`USHORT`,value:e.ligGlyph}].concat(Y.ushortList(`component`,e.components,e.components.length+1)))}))})))},bH[6]=function(e){if(e.substFormat===1)return new Y.Table(`chainContextTable`,[{name:`substFormat`,type:`USHORT`,value:e.substFormat},{name:`coverage`,type:`TABLE`,value:new Y.Coverage(e.coverage)}].concat(Y.tableList(`chainRuleSet`,e.chainRuleSets,function(e){return new Y.Table(`chainRuleSetTable`,Y.tableList(`chainRule`,e,function(e){var t=Y.ushortList(`backtrackGlyph`,e.backtrack,e.backtrack.length).concat(Y.ushortList(`inputGlyph`,e.input,e.input.length+1)).concat(Y.ushortList(`lookaheadGlyph`,e.lookahead,e.lookahead.length)).concat(Y.ushortList(`substitution`,[],e.lookupRecords.length));return e.lookupRecords.forEach(function(e,n){t=t.concat({name:`sequenceIndex`+n,type:`USHORT`,value:e.sequenceIndex}).concat({name:`lookupListIndex`+n,type:`USHORT`,value:e.lookupListIndex})}),new Y.Table(`chainRuleTable`,t)}))})));if(e.substFormat===2)K.assert(!1,`lookup type 6 format 2 is not yet supported.`);else if(e.substFormat===3){var t=[{name:`substFormat`,type:`USHORT`,value:e.substFormat}];return t.push({name:`backtrackGlyphCount`,type:`USHORT`,value:e.backtrackCoverage.length}),e.backtrackCoverage.forEach(function(e,n){t.push({name:`backtrackCoverage`+n,type:`TABLE`,value:new Y.Coverage(e)})}),t.push({name:`inputGlyphCount`,type:`USHORT`,value:e.inputCoverage.length}),e.inputCoverage.forEach(function(e,n){t.push({name:`inputCoverage`+n,type:`TABLE`,value:new Y.Coverage(e)})}),t.push({name:`lookaheadGlyphCount`,type:`USHORT`,value:e.lookaheadCoverage.length}),e.lookaheadCoverage.forEach(function(e,n){t.push({name:`lookaheadCoverage`+n,type:`TABLE`,value:new Y.Coverage(e)})}),t.push({name:`substitutionCount`,type:`USHORT`,value:e.lookupRecords.length}),e.lookupRecords.forEach(function(e,n){t=t.concat({name:`sequenceIndex`+n,type:`USHORT`,value:e.sequenceIndex}).concat({name:`lookupListIndex`+n,type:`USHORT`,value:e.lookupListIndex})}),new Y.Table(`chainContextTable`,t)}K.assert(!1,`lookup type 6 format must be 1, 2 or 3.`)};function xH(e){return new Y.Table(`GSUB`,[{name:`version`,type:`ULONG`,value:65536},{name:`scripts`,type:`TABLE`,value:new Y.ScriptList(e.scripts)},{name:`features`,type:`TABLE`,value:new Y.FeatureList(e.features)},{name:`lookups`,type:`TABLE`,value:new Y.LookupList(e.lookups,bH)}])}var SH={parse:yH,make:xH};function CH(e,t){var n=new Z.Parser(e,t),r=n.parseULong();K.argument(r===1,`Unsupported META table version.`),n.parseULong(),n.parseULong();for(var i=n.parseULong(),a={},o=0;o<i;o++){var s=n.parseTag(),c=n.parseULong(),l=n.parseULong();a[s]=Wz.UTF8(e,t+c,l)}return a}function wH(e){var t=Object.keys(e).length,n=``,r=16+t*12,i=new Y.Table(`meta`,[{name:`version`,type:`ULONG`,value:1},{name:`flags`,type:`ULONG`,value:0},{name:`offset`,type:`ULONG`,value:r},{name:`numTags`,type:`ULONG`,value:t}]);for(var a in e){var o=n.length;n+=e[a],i.fields.push({name:`tag `+a,type:`TAG`,value:a}),i.fields.push({name:`offset `+a,type:`ULONG`,value:r+o}),i.fields.push({name:`length `+a,type:`ULONG`,value:e[a].length})}return i.fields.push({name:`stringPool`,type:`CHARARRAY`,value:n}),i}var TH={parse:CH,make:wH};function EH(e){return Math.log(e)/Math.log(2)|0}function DH(e){for(;e.length%4!=0;)e.push(0);for(var t=0,n=0;n<e.length;n+=4)t+=(e[n]<<24)+(e[n+1]<<16)+(e[n+2]<<8)+e[n+3];return t%=2**32,t}function OH(e,t,n,r){return new Y.Record(`Table Record`,[{name:`tag`,type:`TAG`,value:e===void 0?``:e},{name:`checkSum`,type:`ULONG`,value:t===void 0?0:t},{name:`offset`,type:`ULONG`,value:n===void 0?0:n},{name:`length`,type:`ULONG`,value:r===void 0?0:r}])}function kH(e){var t=new Y.Table(`sfnt`,[{name:`version`,type:`TAG`,value:`OTTO`},{name:`numTables`,type:`USHORT`,value:0},{name:`searchRange`,type:`USHORT`,value:0},{name:`entrySelector`,type:`USHORT`,value:0},{name:`rangeShift`,type:`USHORT`,value:0}]);t.tables=e,t.numTables=e.length;var n=2**EH(t.numTables);t.searchRange=16*n,t.entrySelector=EH(n),t.rangeShift=t.numTables*16-t.searchRange;for(var r=[],i=[],a=t.sizeOf()+OH().sizeOf()*t.numTables;a%4!=0;)a+=1,i.push({name:`padding`,type:`BYTE`,value:0});for(var o=0;o<e.length;o+=1){var s=e[o];K.argument(s.tableName.length===4,`Table name`+s.tableName+` is invalid.`);var c=s.sizeOf(),l=OH(s.tableName,DH(s.encode()),a,c);for(r.push({name:l.tag+` Table Record`,type:`RECORD`,value:l}),i.push({name:s.tableName+` table`,type:`RECORD`,value:s}),a+=c,K.argument(!isNaN(a),`Something went wrong calculating the offset.`);a%4!=0;)a+=1,i.push({name:`padding`,type:`BYTE`,value:0})}return r.sort(function(e,t){return e.value.tag>t.value.tag?1:-1}),t.fields=t.fields.concat(r),t.fields=t.fields.concat(i),t}function AH(e,t,n){for(var r=0;r<t.length;r+=1){var i=e.charToGlyphIndex(t[r]);if(i>0)return e.glyphs.get(i).getMetrics()}return n}function jH(e){for(var t=0,n=0;n<e.length;n+=1)t+=e[n];return t/e.length}function MH(e){for(var t=[],n=[],r=[],i=[],a=[],o=[],s=[],c,l=0,u=0,d=0,f=0,p=0,m=0;m<e.glyphs.length;m+=1){var h=e.glyphs.get(m),g=h.unicode|0;if(isNaN(h.advanceWidth))throw Error(`Glyph `+h.name+` (`+m+`): advanceWidth is not a number.`);(c>g||c===void 0)&&g>0&&(c=g),l<g&&(l=g);var _=pH.getUnicodeRange(g);if(_<32)u|=1<<_;else if(_<64)d|=1<<_-32;else if(_<96)f|=1<<_-64;else if(_<123)p|=1<<_-96;else throw Error(`Unicode ranges bits > 123 are reserved for internal usage`);if(h.name!==`.notdef`){var v=h.getMetrics();t.push(v.xMin),n.push(v.yMin),r.push(v.xMax),i.push(v.yMax),o.push(v.leftSideBearing),s.push(v.rightSideBearing),a.push(h.advanceWidth)}}var y={xMin:Math.min.apply(null,t),yMin:Math.min.apply(null,n),xMax:Math.max.apply(null,r),yMax:Math.max.apply(null,i),advanceWidthMax:Math.max.apply(null,a),advanceWidthAvg:jH(a),minLeftSideBearing:Math.min.apply(null,o),maxLeftSideBearing:Math.max.apply(null,o),minRightSideBearing:Math.min.apply(null,s)};y.ascender=e.ascender,y.descender=e.descender;var b=MV.make({flags:3,unitsPerEm:e.unitsPerEm,xMin:y.xMin,yMin:y.yMin,xMax:y.xMax,yMax:y.yMax,lowestRecPPEM:3,createdTimestamp:e.createdTimestamp}),x=FV.make({ascender:y.ascender,descender:y.descender,advanceWidthMax:y.advanceWidthMax,minLeftSideBearing:y.minLeftSideBearing,minRightSideBearing:y.minRightSideBearing,xMaxExtent:y.maxLeftSideBearing+(y.xMax-y.xMin),numberOfHMetrics:e.glyphs.length}),S=KV.make(e.glyphs.length),C=pH.make(Object.assign({xAvgCharWidth:Math.round(y.advanceWidthAvg),usFirstCharIndex:c,usLastCharIndex:l,ulUnicodeRange1:u,ulUnicodeRange2:d,ulUnicodeRange3:f,ulUnicodeRange4:p,sTypoAscender:y.ascender,sTypoDescender:y.descender,sTypoLineGap:0,usWinAscent:y.yMax,usWinDescent:Math.abs(y.yMin),ulCodePageRange1:1,sxHeight:AH(e,`xyvw`,{yMax:Math.round(y.ascender/2)}).yMax,sCapHeight:AH(e,`HIKLEFJMNTZBDPRAGOQSUVWXY`,y).yMax,usDefaultChar:e.hasChar(` `)?32:0,usBreakChar:e.hasChar(` `)?32:0},e.tables.os2)),w=BV.make(e.glyphs),ee=EB.make(e.glyphs),te=e.getEnglishName(`fontFamily`),ne=e.getEnglishName(`fontSubfamily`),re=te+` `+ne,ie=e.getEnglishName(`postScriptName`);ie||=te.replace(/\s/g,``)+`-`+ne;var ae={};for(var oe in e.names)ae[oe]=e.names[oe];ae.uniqueID||={en:e.getEnglishName(`manufacturer`)+`:`+re},ae.postScriptName||={en:ie},ae.preferredFamily||=e.names.fontFamily,ae.preferredSubfamily||=e.names.fontSubfamily;var se=[],ce=cH.make(ae,se),le=se.length>0?UV.make(se):void 0,ue=gH.make(),de=kV.make(e.glyphs,{version:e.getEnglishName(`version`),fullName:re,familyName:te,weightName:ne,postScriptName:ie,unitsPerEm:e.unitsPerEm,fontBBox:[0,y.yMin,y.ascender,y.advanceWidthMax]}),fe=e.metas&&Object.keys(e.metas).length>0?TH.make(e.metas):void 0,pe=[b,x,S,C,ce,ee,ue,de,w];le&&pe.push(le),e.tables.gsub&&pe.push(SH.make(e.tables.gsub)),fe&&pe.push(fe);for(var me=kH(pe),he=DH(me.encode()),ge=me.fields,_e=!1,ve=0;ve<ge.length;ve+=1)if(ge[ve].name===`head table`){ge[ve].value.checkSumAdjustment=2981146554-he,_e=!0;break}if(!_e)throw Error(`Could not find head table with checkSum to adjust.`);return me}var NH={make:kH,fontToTable:MH,computeCheckSum:DH};function PH(e,t){for(var n=0,r=e.length-1;n<=r;){var i=n+r>>>1,a=e[i].tag;if(a===t)return i;a<t?n=i+1:r=i-1}return-n-1}function FH(e,t){for(var n=0,r=e.length-1;n<=r;){var i=n+r>>>1,a=e[i];if(a===t)return i;a<t?n=i+1:r=i-1}return-n-1}function IH(e,t){for(var n,r=0,i=e.length-1;r<=i;){var a=r+i>>>1;n=e[a];var o=n.start;if(o===t)return n;o<t?r=a+1:i=a-1}if(r>0)return n=e[r-1],t>n.end?0:n}function LH(e,t){this.font=e,this.tableName=t}LH.prototype={searchTag:PH,binSearch:FH,getTable:function(e){var t=this.font.tables[this.tableName];return!t&&e&&(t=this.font.tables[this.tableName]=this.createDefaultTable()),t},getScriptNames:function(){var e=this.getTable();return e?e.scripts.map(function(e){return e.tag}):[]},getDefaultScriptName:function(){var e=this.getTable();if(e){for(var t=!1,n=0;n<e.scripts.length;n++){var r=e.scripts[n].tag;if(r===`DFLT`)return r;r===`latn`&&(t=!0)}if(t)return`latn`}},getScriptTable:function(e,t){var n=this.getTable(t);if(n){e||=`DFLT`;var r=n.scripts,i=PH(n.scripts,e);if(i>=0)return r[i].script;if(t){var a={tag:e,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};return r.splice(-1-i,0,a),a.script}}},getLangSysTable:function(e,t,n){var r=this.getScriptTable(e,n);if(r){if(!t||t===`dflt`||t===`DFLT`)return r.defaultLangSys;var i=PH(r.langSysRecords,t);if(i>=0)return r.langSysRecords[i].langSys;if(n){var a={tag:t,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};return r.langSysRecords.splice(-1-i,0,a),a.langSys}}},getFeatureTable:function(e,t,n,r){var i=this.getLangSysTable(e,t,r);if(i){for(var a,o=i.featureIndexes,s=this.font.tables[this.tableName].features,c=0;c<o.length;c++)if(a=s[o[c]],a.tag===n)return a.feature;if(r){var l=s.length;return K.assert(l===0||n>=s[l-1].tag,`Features must be added in alphabetical order.`),a={tag:n,feature:{params:0,lookupListIndexes:[]}},s.push(a),o.push(l),a.feature}}},getLookupTables:function(e,t,n,r,i){var a=this.getFeatureTable(e,t,n,i),o=[];if(a){for(var s,c=a.lookupListIndexes,l=this.font.tables[this.tableName].lookups,u=0;u<c.length;u++)s=l[c[u]],s.lookupType===r&&o.push(s);if(o.length===0&&i){s={lookupType:r,lookupFlag:0,subtables:[],markFilteringSet:void 0};var d=l.length;return l.push(s),c.push(d),[s]}}return o},getGlyphClass:function(e,t){switch(e.format){case 1:return e.startGlyph<=t&&t<e.startGlyph+e.classes.length?e.classes[t-e.startGlyph]:0;case 2:var n=IH(e.ranges,t);return n?n.classId:0}},getCoverageIndex:function(e,t){switch(e.format){case 1:var n=FH(e.glyphs,t);return n>=0?n:-1;case 2:var r=IH(e.ranges,t);return r?r.index+t-r.start:-1}},expandCoverage:function(e){if(e.format===1)return e.glyphs;for(var t=[],n=e.ranges,r=0;r<n.length;r++)for(var i=n[r],a=i.start,o=i.end,s=a;s<=o;s++)t.push(s);return t}};function RH(e){LH.call(this,e,`gpos`)}RH.prototype=LH.prototype,RH.prototype.init=function(){var e=this.getDefaultScriptName();this.defaultKerningTables=this.getKerningTables(e)},RH.prototype.getKerningValue=function(e,t,n){for(var r=0;r<e.length;r++)for(var i=e[r].subtables,a=0;a<i.length;a++){var o=i[a],s=this.getCoverageIndex(o.coverage,t);if(!(s<0))switch(o.posFormat){case 1:for(var c=o.pairSets[s],l=0;l<c.length;l++){var u=c[l];if(u.secondGlyph===n)return u.value1&&u.value1.xAdvance||0}break;case 2:var d=this.getGlyphClass(o.classDef1,t),f=this.getGlyphClass(o.classDef2,n),p=o.classRecords[d][f];return p.value1&&p.value1.xAdvance||0}}return 0},RH.prototype.getKerningTables=function(e,t){if(this.font.tables.gpos)return this.getLookupTables(e,t,`kern`,2)};function zH(e){LH.call(this,e,`gsub`)}function BH(e,t){var n=e.length;if(n!==t.length)return!1;for(var r=0;r<n;r++)if(e[r]!==t[r])return!1;return!0}function VH(e,t,n){for(var r=e.subtables,i=0;i<r.length;i++){var a=r[i];if(a.substFormat===t)return a}if(n)return r.push(n),n}zH.prototype=LH.prototype,zH.prototype.createDefaultTable=function(){return{version:1,scripts:[{tag:`DFLT`,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}}],features:[],lookups:[]}},zH.prototype.getSingle=function(e,t,n){for(var r=[],i=this.getLookupTables(t,n,e,1),a=0;a<i.length;a++)for(var o=i[a].subtables,s=0;s<o.length;s++){var c=o[s],l=this.expandCoverage(c.coverage),u=void 0;if(c.substFormat===1){var d=c.deltaGlyphId;for(u=0;u<l.length;u++){var f=l[u];r.push({sub:f,by:f+d})}}else{var p=c.substitute;for(u=0;u<l.length;u++)r.push({sub:l[u],by:p[u]})}}return r},zH.prototype.getMultiple=function(e,t,n){for(var r=[],i=this.getLookupTables(t,n,e,2),a=0;a<i.length;a++)for(var o=i[a].subtables,s=0;s<o.length;s++){var c=o[s],l=this.expandCoverage(c.coverage),u=void 0;for(u=0;u<l.length;u++){var d=l[u],f=c.sequences[u];r.push({sub:d,by:f})}}return r},zH.prototype.getAlternates=function(e,t,n){for(var r=[],i=this.getLookupTables(t,n,e,3),a=0;a<i.length;a++)for(var o=i[a].subtables,s=0;s<o.length;s++)for(var c=o[s],l=this.expandCoverage(c.coverage),u=c.alternateSets,d=0;d<l.length;d++)r.push({sub:l[d],by:u[d]});return r},zH.prototype.getLigatures=function(e,t,n){for(var r=[],i=this.getLookupTables(t,n,e,4),a=0;a<i.length;a++)for(var o=i[a].subtables,s=0;s<o.length;s++)for(var c=o[s],l=this.expandCoverage(c.coverage),u=c.ligatureSets,d=0;d<l.length;d++)for(var f=l[d],p=u[d],m=0;m<p.length;m++){var h=p[m];r.push({sub:[f].concat(h.components),by:h.ligGlyph})}return r},zH.prototype.addSingle=function(e,t,n,r){var i=this.getLookupTables(n,r,e,1,!0)[0],a=VH(i,2,{substFormat:2,coverage:{format:1,glyphs:[]},substitute:[]});K.assert(a.coverage.format===1,`Single: unable to modify coverage table format `+a.coverage.format);var o=t.sub,s=this.binSearch(a.coverage.glyphs,o);s<0&&(s=-1-s,a.coverage.glyphs.splice(s,0,o),a.substitute.splice(s,0,0)),a.substitute[s]=t.by},zH.prototype.addMultiple=function(e,t,n,r){K.assert(t.by instanceof Array&&t.by.length>1,`Multiple: "by" must be an array of two or more ids`);var i=this.getLookupTables(n,r,e,2,!0)[0],a=VH(i,1,{substFormat:1,coverage:{format:1,glyphs:[]},sequences:[]});K.assert(a.coverage.format===1,`Multiple: unable to modify coverage table format `+a.coverage.format);var o=t.sub,s=this.binSearch(a.coverage.glyphs,o);s<0&&(s=-1-s,a.coverage.glyphs.splice(s,0,o),a.sequences.splice(s,0,0)),a.sequences[s]=t.by},zH.prototype.addAlternate=function(e,t,n,r){var i=this.getLookupTables(n,r,e,3,!0)[0],a=VH(i,1,{substFormat:1,coverage:{format:1,glyphs:[]},alternateSets:[]});K.assert(a.coverage.format===1,`Alternate: unable to modify coverage table format `+a.coverage.format);var o=t.sub,s=this.binSearch(a.coverage.glyphs,o);s<0&&(s=-1-s,a.coverage.glyphs.splice(s,0,o),a.alternateSets.splice(s,0,0)),a.alternateSets[s]=t.by},zH.prototype.addLigature=function(e,t,n,r){var i=this.getLookupTables(n,r,e,4,!0)[0],a=i.subtables[0];a||(a={substFormat:1,coverage:{format:1,glyphs:[]},ligatureSets:[]},i.subtables[0]=a),K.assert(a.coverage.format===1,`Ligature: unable to modify coverage table format `+a.coverage.format);var o=t.sub[0],s=t.sub.slice(1),c={ligGlyph:t.by,components:s},l=this.binSearch(a.coverage.glyphs,o);if(l>=0){for(var u=a.ligatureSets[l],d=0;d<u.length;d++)if(BH(u[d].components,s))return;u.push(c)}else l=-1-l,a.coverage.glyphs.splice(l,0,o),a.ligatureSets.splice(l,0,[c])},zH.prototype.getFeature=function(e,t,n){if(/ss\d\d/.test(e))return this.getSingle(e,t,n);switch(e){case`aalt`:case`salt`:return this.getSingle(e,t,n).concat(this.getAlternates(e,t,n));case`dlig`:case`liga`:case`rlig`:return this.getLigatures(e,t,n);case`ccmp`:return this.getMultiple(e,t,n).concat(this.getLigatures(e,t,n));case`stch`:return this.getMultiple(e,t,n)}},zH.prototype.add=function(e,t,n,r){if(/ss\d\d/.test(e))return this.addSingle(e,t,n,r);switch(e){case`aalt`:case`salt`:return typeof t.by==`number`?this.addSingle(e,t,n,r):this.addAlternate(e,t,n,r);case`dlig`:case`liga`:case`rlig`:return this.addLigature(e,t,n,r);case`ccmp`:return t.by instanceof Array?this.addMultiple(e,t,n,r):this.addLigature(e,t,n,r)}};function HH(){return typeof window<`u`}function UH(e){for(var t=new ArrayBuffer(e.length),n=new Uint8Array(t),r=0;r<e.length;++r)n[r]=e[r];return t}function WH(e){for(var t=new Buffer(e.byteLength),n=new Uint8Array(e),r=0;r<t.length;++r)t[r]=n[r];return t}function GH(e,t){if(!e)throw t}function KH(e,t,n,r,i){var a;return(t&r)>0?(a=e.parseByte(),(t&i)===0&&(a=-a),a=n+a):a=(t&i)>0?n:n+e.parseShort(),a}function qH(e,t,n){var r=new Z.Parser(t,n);e.numberOfContours=r.parseShort(),e._xMin=r.parseShort(),e._yMin=r.parseShort(),e._xMax=r.parseShort(),e._yMax=r.parseShort();var i,a;if(e.numberOfContours>0){for(var o=e.endPointIndices=[],s=0;s<e.numberOfContours;s+=1)o.push(r.parseUShort());e.instructionLength=r.parseUShort(),e.instructions=[];for(var c=0;c<e.instructionLength;c+=1)e.instructions.push(r.parseByte());var l=o[o.length-1]+1;i=[];for(var u=0;u<l;u+=1)if(a=r.parseByte(),i.push(a),(a&8)>0)for(var d=r.parseByte(),f=0;f<d;f+=1)i.push(a),u+=1;if(K.argument(i.length===l,`Bad flags.`),o.length>0){var p=[],m;if(l>0){for(var h=0;h<l;h+=1)a=i[h],m={},m.onCurve=!!(a&1),m.lastPointOfContour=o.indexOf(h)>=0,p.push(m);for(var g=0,_=0;_<l;_+=1)a=i[_],m=p[_],m.x=KH(r,a,g,2,16),g=m.x;for(var v=0,y=0;y<l;y+=1)a=i[y],m=p[y],m.y=KH(r,a,v,4,32),v=m.y}e.points=p}else e.points=[]}else if(e.numberOfContours===0)e.points=[];else{e.isComposite=!0,e.points=[],e.components=[];for(var b=!0;b;){i=r.parseUShort();var x={glyphIndex:r.parseUShort(),xScale:1,scale01:0,scale10:0,yScale:1,dx:0,dy:0};(i&1)>0?(i&2)>0?(x.dx=r.parseShort(),x.dy=r.parseShort()):x.matchedPoints=[r.parseUShort(),r.parseUShort()]:(i&2)>0?(x.dx=r.parseChar(),x.dy=r.parseChar()):x.matchedPoints=[r.parseByte(),r.parseByte()],(i&8)>0?x.xScale=x.yScale=r.parseF2Dot14():(i&64)>0?(x.xScale=r.parseF2Dot14(),x.yScale=r.parseF2Dot14()):(i&128)>0&&(x.xScale=r.parseF2Dot14(),x.scale01=r.parseF2Dot14(),x.scale10=r.parseF2Dot14(),x.yScale=r.parseF2Dot14()),e.components.push(x),b=!!(i&32)}if(i&256){e.instructionLength=r.parseUShort(),e.instructions=[];for(var S=0;S<e.instructionLength;S+=1)e.instructions.push(r.parseByte())}}}function JH(e,t){for(var n=[],r=0;r<e.length;r+=1){var i=e[r],a={x:t.xScale*i.x+t.scale01*i.y+t.dx,y:t.scale10*i.x+t.yScale*i.y+t.dy,onCurve:i.onCurve,lastPointOfContour:i.lastPointOfContour};n.push(a)}return n}function YH(e){for(var t=[],n=[],r=0;r<e.length;r+=1){var i=e[r];n.push(i),i.lastPointOfContour&&(t.push(n),n=[])}return K.argument(n.length===0,`There are still points left in the current contour.`),t}function XH(e){var t=new zz;if(!e)return t;for(var n=YH(e),r=0;r<n.length;++r){var i=n[r],a=null,o=i[i.length-1],s=i[0];if(o.onCurve)t.moveTo(o.x,o.y);else if(s.onCurve)t.moveTo(s.x,s.y);else{var c={x:(o.x+s.x)*.5,y:(o.y+s.y)*.5};t.moveTo(c.x,c.y)}for(var l=0;l<i.length;++l)if(a=o,o=s,s=i[(l+1)%i.length],o.onCurve)t.lineTo(o.x,o.y);else{var u=s;a.onCurve||((o.x+a.x)*.5,(o.y+a.y)*.5),s.onCurve||(u={x:(o.x+s.x)*.5,y:(o.y+s.y)*.5}),t.quadraticCurveTo(o.x,o.y,u.x,u.y)}t.closePath()}return t}function ZH(e,t){if(t.isComposite)for(var n=0;n<t.components.length;n+=1){var r=t.components[n],i=e.get(r.glyphIndex);if(i.getPath(),i.points){var a=void 0;if(r.matchedPoints===void 0)a=JH(i.points,r);else{if(r.matchedPoints[0]>t.points.length-1||r.matchedPoints[1]>i.points.length-1)throw Error(`Matched points out of range in `+t.name);var o=t.points[r.matchedPoints[0]],s=i.points[r.matchedPoints[1]],c={xScale:r.xScale,scale01:r.scale01,scale10:r.scale10,yScale:r.yScale,dx:0,dy:0};s=JH([s],c)[0],c.dx=o.x-s.x,c.dy=o.y-s.y,a=JH(i.points,c)}t.points=t.points.concat(a)}}return XH(t.points)}function QH(e,t,n,r){for(var i=new qB.GlyphSet(r),a=0;a<n.length-1;a+=1){var o=n[a];o===n[a+1]?i.push(a,qB.glyphLoader(r,a)):i.push(a,qB.ttfGlyphLoader(r,a,qH,e,t+o,ZH))}return i}function $H(e,t,n,r){var i=new qB.GlyphSet(r);return r._push=function(a){var o=n[a];o===n[a+1]?i.push(a,qB.glyphLoader(r,a)):i.push(a,qB.ttfGlyphLoader(r,a,qH,e,t+o,ZH))},i}function eU(e,t,n,r,i){return i.lowMemory?$H(e,t,n,r):QH(e,t,n,r)}var tU={getPath:XH,parse:eU},nU,rU,iU,aU;function oU(e){this.font=e,this.getCommands=function(e){return tU.getPath(e).commands},this._fpgmState=this._prepState=void 0,this._errorState=0}function sU(e){return e}function cU(e){return Math.sign(e)*Math.round(Math.abs(e))}function lU(e){return Math.sign(e)*Math.round(Math.abs(e*2))/2}function uU(e){return Math.sign(e)*(Math.round(Math.abs(e)+.5)-.5)}function dU(e){return Math.sign(e)*Math.ceil(Math.abs(e))}function fU(e){return Math.sign(e)*Math.floor(Math.abs(e))}var pU=function(e){var t=this.srPeriod,n=this.srPhase,r=this.srThreshold,i=1;return e<0&&(e=-e,i=-1),e+=r-n,e=Math.trunc(e/t)*t,e+=n,e<0?n*i:e*i},mU={x:1,y:0,axis:`x`,distance:function(e,t,n,r){return(n?e.xo:e.x)-(r?t.xo:t.x)},interpolate:function(e,t,n,r){var i,a,o,s,c,l,u;if(!r||r===this){if(i=e.xo-t.xo,a=e.xo-n.xo,c=t.x-t.xo,l=n.x-n.xo,o=Math.abs(i),s=Math.abs(a),u=o+s,u===0){e.x=e.xo+(c+l)/2;return}e.x=e.xo+(c*s+l*o)/u;return}if(i=r.distance(e,t,!0,!0),a=r.distance(e,n,!0,!0),c=r.distance(t,t,!1,!0),l=r.distance(n,n,!1,!0),o=Math.abs(i),s=Math.abs(a),u=o+s,u===0){mU.setRelative(e,e,(c+l)/2,r,!0);return}mU.setRelative(e,e,(c*s+l*o)/u,r,!0)},normalSlope:-1/0,setRelative:function(e,t,n,r,i){if(!r||r===this){e.x=(i?t.xo:t.x)+n;return}var a=i?t.xo:t.x,o=i?t.yo:t.y,s=a+n*r.x,c=o+n*r.y;e.x=s+(e.y-c)/r.normalSlope},slope:0,touch:function(e){e.xTouched=!0},touched:function(e){return e.xTouched},untouch:function(e){e.xTouched=!1}},hU={x:0,y:1,axis:`y`,distance:function(e,t,n,r){return(n?e.yo:e.y)-(r?t.yo:t.y)},interpolate:function(e,t,n,r){var i,a,o,s,c,l,u;if(!r||r===this){if(i=e.yo-t.yo,a=e.yo-n.yo,c=t.y-t.yo,l=n.y-n.yo,o=Math.abs(i),s=Math.abs(a),u=o+s,u===0){e.y=e.yo+(c+l)/2;return}e.y=e.yo+(c*s+l*o)/u;return}if(i=r.distance(e,t,!0,!0),a=r.distance(e,n,!0,!0),c=r.distance(t,t,!1,!0),l=r.distance(n,n,!1,!0),o=Math.abs(i),s=Math.abs(a),u=o+s,u===0){hU.setRelative(e,e,(c+l)/2,r,!0);return}hU.setRelative(e,e,(c*s+l*o)/u,r,!0)},normalSlope:0,setRelative:function(e,t,n,r,i){if(!r||r===this){e.y=(i?t.yo:t.y)+n;return}var a=i?t.xo:t.x,o=i?t.yo:t.y,s=a+n*r.x;e.y=o+n*r.y+r.normalSlope*(e.x-s)},slope:1/0,touch:function(e){e.yTouched=!0},touched:function(e){return e.yTouched},untouch:function(e){e.yTouched=!1}};Object.freeze(mU),Object.freeze(hU);function gU(e,t){this.x=e,this.y=t,this.axis=void 0,this.slope=t/e,this.normalSlope=-e/t,Object.freeze(this)}gU.prototype.distance=function(e,t,n,r){return this.x*mU.distance(e,t,n,r)+this.y*hU.distance(e,t,n,r)},gU.prototype.interpolate=function(e,t,n,r){var i,a,o=r.distance(e,t,!0,!0),s=r.distance(e,n,!0,!0),c,l,u;if(i=r.distance(t,t,!1,!0),a=r.distance(n,n,!1,!0),c=Math.abs(o),l=Math.abs(s),u=c+l,u===0){this.setRelative(e,e,(i+a)/2,r,!0);return}this.setRelative(e,e,(i*l+a*c)/u,r,!0)},gU.prototype.setRelative=function(e,t,n,r,i){r||=this;var a=i?t.xo:t.x,o=i?t.yo:t.y,s=a+n*r.x,c=o+n*r.y,l=r.normalSlope,u=this.slope,d=e.x,f=e.y;e.x=(u*d-l*s+c-f)/(u-l),e.y=u*(e.x-d)+f},gU.prototype.touch=function(e){e.xTouched=!0,e.yTouched=!0};function _U(e,t){var n=Math.sqrt(e*e+t*t);return e/=n,t/=n,e===1&&t===0?mU:e===0&&t===1?hU:new gU(e,t)}function vU(e,t,n,r){this.x=this.xo=Math.round(e*64)/64,this.y=this.yo=Math.round(t*64)/64,this.lastPointOfContour=n,this.onCurve=r,this.prevPointOnContour=void 0,this.nextPointOnContour=void 0,this.xTouched=!1,this.yTouched=!1,Object.preventExtensions(this)}vU.prototype.nextTouched=function(e){for(var t=this.nextPointOnContour;!e.touched(t)&&t!==this;)t=t.nextPointOnContour;return t},vU.prototype.prevTouched=function(e){for(var t=this.prevPointOnContour;!e.touched(t)&&t!==this;)t=t.prevPointOnContour;return t};var yU=Object.freeze(new vU(0,0)),bU={cvCutIn:17/16,deltaBase:9,deltaShift:.125,loop:1,minDis:1,autoFlip:!0};function xU(e,t){switch(this.env=e,this.stack=[],this.prog=t,e){case`glyf`:this.zp0=this.zp1=this.zp2=1,this.rp0=this.rp1=this.rp2=0;case`prep`:this.fv=this.pv=this.dpv=mU,this.round=cU}}oU.prototype.exec=function(e,t){if(typeof t!=`number`)throw Error(`Point size is not a number!`);if(!(this._errorState>2)){var n=this.font,r=this._prepState;if(!r||r.ppem!==t){var i=this._fpgmState;if(!i){xU.prototype=bU,i=this._fpgmState=new xU(`fpgm`,n.tables.fpgm),i.funcs=[],i.font=n,exports.DEBUG&&(console.log(`---EXEC FPGM---`),i.step=-1);try{rU(i)}catch(e){console.log(`Hinting error in FPGM:`+e),this._errorState=3;return}}xU.prototype=i,r=this._prepState=new xU(`prep`,n.tables.prep),r.ppem=t;var a=n.tables.cvt;if(a)for(var o=r.cvt=Array(a.length),s=t/n.unitsPerEm,c=0;c<a.length;c++)o[c]=a[c]*s;else r.cvt=[];exports.DEBUG&&(console.log(`---EXEC PREP---`),r.step=-1);try{rU(r)}catch(e){this._errorState<2&&console.log(`Hinting error in PREP:`+e),this._errorState=2}}if(!(this._errorState>1))try{return iU(e,r)}catch(e){this._errorState<1&&(console.log(`Hinting error:`+e),console.log(`Note: further hinting errors are silenced`)),this._errorState=1;return}}},iU=function(e,t){var n=t.ppem/t.font.unitsPerEm,r=n,i=e.components,a,o,s;if(xU.prototype=t,!i)s=new xU(`glyf`,e.instructions),exports.DEBUG&&(console.log(`---EXEC GLYPH---`),s.step=-1),aU(e,s,n,r),o=s.gZone;else{var c=t.font;o=[],a=[];for(var l=0;l<i.length;l++){var u=i[l],d=c.glyphs.get(u.glyphIndex);s=new xU(`glyf`,d.instructions),exports.DEBUG&&(console.log(`---EXEC COMP `+l+`---`),s.step=-1),aU(d,s,n,r);for(var f=Math.round(u.dx*n),p=Math.round(u.dy*r),m=s.gZone,h=s.contours,g=0;g<m.length;g++){var _=m[g];_.xTouched=_.yTouched=!1,_.xo=_.x+=f,_.yo=_.y+=p}var v=o.length;o.push.apply(o,m);for(var y=0;y<h.length;y++)a.push(h[y]+v)}e.instructions&&!s.inhibitGridFit&&(s=new xU(`glyf`,e.instructions),s.gZone=s.z0=s.z1=s.z2=o,s.contours=a,o.push(new vU(0,0),new vU(Math.round(e.advanceWidth*n),0)),exports.DEBUG&&(console.log(`---EXEC COMPOSITE---`),s.step=-1),rU(s),o.length-=2)}return o},aU=function(e,t,n,r){for(var i=e.points||[],a=i.length,o=t.gZone=t.z0=t.z1=t.z2=[],s=t.contours=[],c,l=0;l<a;l++)c=i[l],o[l]=new vU(c.x*n,c.y*r,c.lastPointOfContour,c.onCurve);for(var u,d,f=0;f<a;f++)c=o[f],u||(u=c,s.push(f)),c.lastPointOfContour?(c.nextPointOnContour=u,u.prevPointOnContour=c,u=void 0):(d=o[f+1],c.nextPointOnContour=d,d.prevPointOnContour=c);if(!t.inhibitGridFit){if(exports.DEBUG){console.log(`PROCESSING GLYPH`,t.stack);for(var p=0;p<a;p++)console.log(p,o[p].x,o[p].y)}if(o.push(new vU(0,0),new vU(Math.round(e.advanceWidth*n),0)),rU(t),o.length-=2,exports.DEBUG){console.log(`FINISHED GLYPH`,t.stack);for(var m=0;m<a;m++)console.log(m,o[m].x,o[m].y)}}},rU=function(e){var t=e.prog;if(t){var n=t.length,r;for(e.ip=0;e.ip<n;e.ip++){if(exports.DEBUG&&e.step++,r=nU[t[e.ip]],!r)throw Error(`unknown instruction: 0x`+Number(t[e.ip]).toString(16));r(e)}}};function SU(e){for(var t=e.tZone=Array(e.gZone.length),n=0;n<t.length;n++)t[n]=new vU(0,0)}function CU(e,t){var n=e.prog,r=e.ip,i=1,a;do if(a=n[++r],a===88)i++;else if(a===89)i--;else if(a===64)r+=n[r+1]+1;else if(a===65)r+=2*n[r+1]+1;else if(a>=176&&a<=183)r+=a-176+1;else if(a>=184&&a<=191)r+=(a-184+1)*2;else if(t&&i===1&&a===27)break;while(i>0);e.ip=r}function wU(e,t){exports.DEBUG&&console.log(t.step,`SVTCA[`+e.axis+`]`),t.fv=t.pv=t.dpv=e}function TU(e,t){exports.DEBUG&&console.log(t.step,`SPVTCA[`+e.axis+`]`),t.pv=t.dpv=e}function EU(e,t){exports.DEBUG&&console.log(t.step,`SFVTCA[`+e.axis+`]`),t.fv=e}function DU(e,t){var n=t.stack,r=n.pop(),i=n.pop(),a=t.z2[r],o=t.z1[i];exports.DEBUG&&console.log(`SPVTL[`+e+`]`,r,i);var s,c;e?(s=a.y-o.y,c=o.x-a.x):(s=o.x-a.x,c=o.y-a.y),t.pv=t.dpv=_U(s,c)}function OU(e,t){var n=t.stack,r=n.pop(),i=n.pop(),a=t.z2[r],o=t.z1[i];exports.DEBUG&&console.log(`SFVTL[`+e+`]`,r,i);var s,c;e?(s=a.y-o.y,c=o.x-a.x):(s=o.x-a.x,c=o.y-a.y),t.fv=_U(s,c)}function kU(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`SPVFS[]`,n,r),e.pv=e.dpv=_U(r,n)}function AU(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`SPVFS[]`,n,r),e.fv=_U(r,n)}function jU(e){var t=e.stack,n=e.pv;exports.DEBUG&&console.log(e.step,`GPV[]`),t.push(n.x*16384),t.push(n.y*16384)}function MU(e){var t=e.stack,n=e.fv;exports.DEBUG&&console.log(e.step,`GFV[]`),t.push(n.x*16384),t.push(n.y*16384)}function NU(e){e.fv=e.pv,exports.DEBUG&&console.log(e.step,`SFVTPV[]`)}function PU(e){var t=e.stack,n=t.pop(),r=t.pop(),i=t.pop(),a=t.pop(),o=t.pop(),s=e.z0,c=e.z1,l=s[n],u=s[r],d=c[i],f=c[a],p=e.z2[o];exports.DEBUG&&console.log(`ISECT[], `,n,r,i,a,o);var m=l.x,h=l.y,g=u.x,_=u.y,v=d.x,y=d.y,b=f.x,x=f.y,S=(m-g)*(y-x)-(h-_)*(v-b),C=m*_-h*g,w=v*x-y*b;p.x=(C*(v-b)-w*(m-g))/S,p.y=(C*(y-x)-w*(h-_))/S}function FU(e){e.rp0=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SRP0[]`,e.rp0)}function IU(e){e.rp1=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SRP1[]`,e.rp1)}function LU(e){e.rp2=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SRP2[]`,e.rp2)}function RU(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZP0[]`,t),e.zp0=t,t){case 0:e.tZone||SU(e),e.z0=e.tZone;break;case 1:e.z0=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function zU(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZP1[]`,t),e.zp1=t,t){case 0:e.tZone||SU(e),e.z1=e.tZone;break;case 1:e.z1=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function BU(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZP2[]`,t),e.zp2=t,t){case 0:e.tZone||SU(e),e.z2=e.tZone;break;case 1:e.z2=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function VU(e){var t=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`SZPS[]`,t),e.zp0=e.zp1=e.zp2=t,t){case 0:e.tZone||SU(e),e.z0=e.z1=e.z2=e.tZone;break;case 1:e.z0=e.z1=e.z2=e.gZone;break;default:throw Error(`Invalid zone pointer`)}}function HU(e){e.loop=e.stack.pop(),exports.DEBUG&&console.log(e.step,`SLOOP[]`,e.loop)}function UU(e){exports.DEBUG&&console.log(e.step,`RTG[]`),e.round=cU}function WU(e){exports.DEBUG&&console.log(e.step,`RTHG[]`),e.round=uU}function GU(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SMD[]`,t),e.minDis=t/64}function KU(e){exports.DEBUG&&console.log(e.step,`ELSE[]`),CU(e,!1)}function qU(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`JMPR[]`,t),e.ip+=t-1}function JU(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SCVTCI[]`,t),e.cvCutIn=t/64}function YU(e){var t=e.stack;exports.DEBUG&&console.log(e.step,`DUP[]`),t.push(t[t.length-1])}function XU(e){exports.DEBUG&&console.log(e.step,`POP[]`),e.stack.pop()}function ZU(e){exports.DEBUG&&console.log(e.step,`CLEAR[]`),e.stack.length=0}function QU(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`SWAP[]`),t.push(n),t.push(r)}function $U(e){var t=e.stack;exports.DEBUG&&console.log(e.step,`DEPTH[]`),t.push(t.length)}function eW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`LOOPCALL[]`,n,r);var i=e.ip,a=e.prog;e.prog=e.funcs[n];for(var o=0;o<r;o++)rU(e),exports.DEBUG&&console.log(++e.step,o+1<r?`next loopcall`:`done loopcall`,o);e.ip=i,e.prog=a}function tW(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`CALL[]`,t);var n=e.ip,r=e.prog;e.prog=e.funcs[t],rU(e),e.ip=n,e.prog=r,exports.DEBUG&&console.log(++e.step,`returning from`,t)}function nW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`CINDEX[]`,n),t.push(t[t.length-n])}function rW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`MINDEX[]`,n),t.push(t.splice(t.length-n,1)[0])}function iW(e){if(e.env!==`fpgm`)throw Error(`FDEF not allowed here`);var t=e.stack,n=e.prog,r=e.ip,i=t.pop(),a=r;for(exports.DEBUG&&console.log(e.step,`FDEF[]`,i);n[++r]!==45;);e.ip=r,e.funcs[i]=n.slice(a+1,r)}function aW(e,t){var n=t.stack.pop(),r=t.z0[n],i=t.fv,a=t.pv;exports.DEBUG&&console.log(t.step,`MDAP[`+e+`]`,n);var o=a.distance(r,yU);e&&(o=t.round(o)),i.setRelative(r,yU,o,a),i.touch(r),t.rp0=t.rp1=n}function oW(e,t){var n=t.z2,r=n.length-2,i,a,o;exports.DEBUG&&console.log(t.step,`IUP[`+e.axis+`]`);for(var s=0;s<r;s++)i=n[s],!e.touched(i)&&(a=i.prevTouched(e),a!==i&&(o=i.nextTouched(e),a===o&&e.setRelative(i,i,e.distance(a,a,!1,!0),e,!0),e.interpolate(i,a,o,e)))}function sW(e,t){for(var n=t.stack,r=e?t.rp1:t.rp2,i=(e?t.z0:t.z1)[r],a=t.fv,o=t.pv,s=t.loop,c=t.z2;s--;){var l=n.pop(),u=c[l],d=o.distance(i,i,!1,!0);a.setRelative(u,u,d,o),a.touch(u),exports.DEBUG&&console.log(t.step,(t.loop>1?`loop `+(t.loop-s)+`: `:``)+`SHP[`+(e?`rp1`:`rp2`)+`]`,l)}t.loop=1}function cW(e,t){var n=t.stack,r=e?t.rp1:t.rp2,i=(e?t.z0:t.z1)[r],a=t.fv,o=t.pv,s=n.pop(),c=t.z2[t.contours[s]],l=c;exports.DEBUG&&console.log(t.step,`SHC[`+e+`]`,s);var u=o.distance(i,i,!1,!0);do l!==i&&a.setRelative(l,l,u,o),l=l.nextPointOnContour;while(l!==c)}function lW(e,t){var n=t.stack,r=e?t.rp1:t.rp2,i=(e?t.z0:t.z1)[r],a=t.fv,o=t.pv,s=n.pop();exports.DEBUG&&console.log(t.step,`SHZ[`+e+`]`,s);var c;switch(s){case 0:c=t.tZone;break;case 1:c=t.gZone;break;default:throw Error(`Invalid zone`)}for(var l,u=o.distance(i,i,!1,!0),d=c.length-2,f=0;f<d;f++)l=c[f],a.setRelative(l,l,u,o)}function uW(e){for(var t=e.stack,n=e.loop,r=e.fv,i=t.pop()/64,a=e.z2;n--;){var o=t.pop(),s=a[o];exports.DEBUG&&console.log(e.step,(e.loop>1?`loop `+(e.loop-n)+`: `:``)+`SHPIX[]`,o,i),r.setRelative(s,s,i),r.touch(s)}e.loop=1}function dW(e){for(var t=e.stack,n=e.rp1,r=e.rp2,i=e.loop,a=e.z0[n],o=e.z1[r],s=e.fv,c=e.dpv,l=e.z2;i--;){var u=t.pop(),d=l[u];exports.DEBUG&&console.log(e.step,(e.loop>1?`loop `+(e.loop-i)+`: `:``)+`IP[]`,u,n,`<->`,r),s.interpolate(d,a,o,c),s.touch(d)}e.loop=1}function fW(e,t){var n=t.stack,r=n.pop()/64,i=n.pop(),a=t.z1[i],o=t.z0[t.rp0],s=t.fv,c=t.pv;s.setRelative(a,o,r,c),s.touch(a),exports.DEBUG&&console.log(t.step,`MSIRP[`+e+`]`,r,i),t.rp1=t.rp0,t.rp2=i,e&&(t.rp0=i)}function pW(e){for(var t=e.stack,n=e.rp0,r=e.z0[n],i=e.loop,a=e.fv,o=e.pv,s=e.z1;i--;){var c=t.pop(),l=s[c];exports.DEBUG&&console.log(e.step,(e.loop>1?`loop `+(e.loop-i)+`: `:``)+`ALIGNRP[]`,c),a.setRelative(l,r,0,o),a.touch(l)}e.loop=1}function mW(e){exports.DEBUG&&console.log(e.step,`RTDG[]`),e.round=lU}function hW(e,t){var n=t.stack,r=n.pop(),i=n.pop(),a=t.z0[i],o=t.fv,s=t.pv,c=t.cvt[r];exports.DEBUG&&console.log(t.step,`MIAP[`+e+`]`,r,`(`,c,`)`,i);var l=s.distance(a,yU);e&&(Math.abs(l-c)<t.cvCutIn&&(l=c),l=t.round(l)),o.setRelative(a,yU,l,s),t.zp0===0&&(a.xo=a.x,a.yo=a.y),o.touch(a),t.rp0=t.rp1=i}function gW(e){var t=e.prog,n=e.ip,r=e.stack,i=t[++n];exports.DEBUG&&console.log(e.step,`NPUSHB[]`,i);for(var a=0;a<i;a++)r.push(t[++n]);e.ip=n}function _W(e){var t=e.ip,n=e.prog,r=e.stack,i=n[++t];exports.DEBUG&&console.log(e.step,`NPUSHW[]`,i);for(var a=0;a<i;a++){var o=n[++t]<<8|n[++t];o&32768&&(o=-((o^65535)+1)),r.push(o)}e.ip=t}function vW(e){var t=e.stack,n=e.store;n||=e.store=[];var r=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,`WS`,r,i),n[i]=r}function yW(e){var t=e.stack,n=e.store,r=t.pop();exports.DEBUG&&console.log(e.step,`RS`,r);var i=n&&n[r]||0;t.push(i)}function bW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`WCVTP`,n,r),e.cvt[r]=n/64}function xW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`RCVT`,n),t.push(e.cvt[n]*64)}function SW(e,t){var n=t.stack,r=n.pop(),i=t.z2[r];exports.DEBUG&&console.log(t.step,`GC[`+e+`]`,r),n.push(t.dpv.distance(i,yU,e,!1)*64)}function CW(e,t){var n=t.stack,r=n.pop(),i=n.pop(),a=t.z1[r],o=t.z0[i],s=t.dpv.distance(o,a,e,e);exports.DEBUG&&console.log(t.step,`MD[`+e+`]`,r,i,`->`,s),t.stack.push(Math.round(s*64))}function wW(e){exports.DEBUG&&console.log(e.step,`MPPEM[]`),e.stack.push(e.ppem)}function TW(e){exports.DEBUG&&console.log(e.step,`FLIPON[]`),e.autoFlip=!0}function EW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`LT[]`,n,r),t.push(+(r<n))}function DW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`LTEQ[]`,n,r),t.push(+(r<=n))}function OW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`GT[]`,n,r),t.push(+(r>n))}function kW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`GTEQ[]`,n,r),t.push(+(r>=n))}function AW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`EQ[]`,n,r),t.push(+(n===r))}function jW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`NEQ[]`,n,r),t.push(n===r?0:1)}function MW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`ODD[]`,n),t.push(Math.trunc(n)%2?1:0)}function NW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`EVEN[]`,n),t.push(Math.trunc(n)%2?0:1)}function PW(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`IF[]`,t),t||(CU(e,!0),exports.DEBUG&&console.log(e.step,`EIF[]`))}function FW(e){exports.DEBUG&&console.log(e.step,`EIF[]`)}function IW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`AND[]`,n,r),t.push(n&&r?1:0)}function LW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`OR[]`,n,r),t.push(n||r?1:0)}function RW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`NOT[]`,n),t.push(+!n)}function zW(e,t){var n=t.stack,r=n.pop(),i=t.fv,a=t.pv,o=t.ppem,s=t.deltaBase+(e-1)*16,c=t.deltaShift,l=t.z0;exports.DEBUG&&console.log(t.step,`DELTAP[`+e+`]`,r,n);for(var u=0;u<r;u++){var d=n.pop(),f=n.pop();if(s+((f&240)>>4)===o){var p=(f&15)-8;p>=0&&p++,exports.DEBUG&&console.log(t.step,`DELTAPFIX`,d,`by`,p*c);var m=l[d];i.setRelative(m,m,p*c,a)}}}function BW(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SDB[]`,t),e.deltaBase=t}function VW(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SDS[]`,t),e.deltaShift=.5**t}function HW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`ADD[]`,n,r),t.push(r+n)}function UW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`SUB[]`,n,r),t.push(r-n)}function WW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`DIV[]`,n,r),t.push(r*64/n)}function GW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`MUL[]`,n,r),t.push(r*n/64)}function KW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`ABS[]`,n),t.push(Math.abs(n))}function qW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`NEG[]`,n),t.push(-n)}function JW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`FLOOR[]`,n),t.push(Math.floor(n/64)*64)}function YW(e){var t=e.stack,n=t.pop();exports.DEBUG&&console.log(e.step,`CEILING[]`,n),t.push(Math.ceil(n/64)*64)}function XW(e,t){var n=t.stack,r=n.pop();exports.DEBUG&&console.log(t.step,`ROUND[]`),n.push(t.round(r/64)*64)}function ZW(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`WCVTF[]`,n,r),e.cvt[r]=n*e.ppem/e.font.unitsPerEm}function QW(e,t){var n=t.stack,r=n.pop(),i=t.ppem,a=t.deltaBase+(e-1)*16,o=t.deltaShift;exports.DEBUG&&console.log(t.step,`DELTAC[`+e+`]`,r,n);for(var s=0;s<r;s++){var c=n.pop(),l=n.pop();if(a+((l&240)>>4)===i){var u=(l&15)-8;u>=0&&u++;var d=u*o;exports.DEBUG&&console.log(t.step,`DELTACFIX`,c,`by`,d),t.cvt[c]+=d}}}function $W(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SROUND[]`,t),e.round=pU;var n;switch(t&192){case 0:n=.5;break;case 64:n=1;break;case 128:n=2;break;default:throw Error(`invalid SROUND value`)}switch(e.srPeriod=n,t&48){case 0:e.srPhase=0;break;case 16:e.srPhase=.25*n;break;case 32:e.srPhase=.5*n;break;case 48:e.srPhase=.75*n;break;default:throw Error(`invalid SROUND value`)}t&=15,t===0?e.srThreshold=0:e.srThreshold=(t/8-.5)*n}function eG(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`S45ROUND[]`,t),e.round=pU;var n;switch(t&192){case 0:n=Math.sqrt(2)/2;break;case 64:n=Math.sqrt(2);break;case 128:n=2*Math.sqrt(2);break;default:throw Error(`invalid S45ROUND value`)}switch(e.srPeriod=n,t&48){case 0:e.srPhase=0;break;case 16:e.srPhase=.25*n;break;case 32:e.srPhase=.5*n;break;case 48:e.srPhase=.75*n;break;default:throw Error(`invalid S45ROUND value`)}t&=15,t===0?e.srThreshold=0:e.srThreshold=(t/8-.5)*n}function tG(e){exports.DEBUG&&console.log(e.step,`ROFF[]`),e.round=sU}function nG(e){exports.DEBUG&&console.log(e.step,`RUTG[]`),e.round=dU}function rG(e){exports.DEBUG&&console.log(e.step,`RDTG[]`),e.round=fU}function iG(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SCANCTRL[]`,t)}function aG(e,t){var n=t.stack,r=n.pop(),i=n.pop(),a=t.z2[r],o=t.z1[i];exports.DEBUG&&console.log(t.step,`SDPVTL[`+e+`]`,r,i);var s,c;e?(s=a.y-o.y,c=o.x-a.x):(s=o.x-a.x,c=o.y-a.y),t.dpv=_U(s,c)}function oG(e){var t=e.stack,n=t.pop(),r=0;exports.DEBUG&&console.log(e.step,`GETINFO[]`,n),n&1&&(r=35),n&32&&(r|=4096),t.push(r)}function sG(e){var t=e.stack,n=t.pop(),r=t.pop(),i=t.pop();exports.DEBUG&&console.log(e.step,`ROLL[]`),t.push(r),t.push(n),t.push(i)}function cG(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`MAX[]`,n,r),t.push(Math.max(r,n))}function lG(e){var t=e.stack,n=t.pop(),r=t.pop();exports.DEBUG&&console.log(e.step,`MIN[]`,n,r),t.push(Math.min(r,n))}function uG(e){var t=e.stack.pop();exports.DEBUG&&console.log(e.step,`SCANTYPE[]`,t)}function dG(e){var t=e.stack.pop(),n=e.stack.pop();switch(exports.DEBUG&&console.log(e.step,`INSTCTRL[]`,t,n),t){case 1:e.inhibitGridFit=!!n;return;case 2:e.ignoreCvt=!!n;return;default:throw Error(`invalid INSTCTRL[] selector`)}}function fG(e,t){var n=t.stack,r=t.prog,i=t.ip;exports.DEBUG&&console.log(t.step,`PUSHB[`+e+`]`);for(var a=0;a<e;a++)n.push(r[++i]);t.ip=i}function pG(e,t){var n=t.ip,r=t.prog,i=t.stack;exports.DEBUG&&console.log(t.ip,`PUSHW[`+e+`]`);for(var a=0;a<e;a++){var o=r[++n]<<8|r[++n];o&32768&&(o=-((o^65535)+1)),i.push(o)}t.ip=n}function Q(e,t,n,r,i,a){var o=a.stack,s=e&&o.pop(),c=o.pop(),l=a.rp0,u=a.z0[l],d=a.z1[c],f=a.minDis,p=a.fv,m=a.dpv,h,g=h=m.distance(d,u,!0,!0),_=g>=0?1:-1,v;g=Math.abs(g),e&&(v=a.cvt[s],r&&Math.abs(g-v)<a.cvCutIn&&(g=v)),n&&g<f&&(g=f),r&&(g=a.round(g)),p.setRelative(d,u,_*g,m),p.touch(d),exports.DEBUG&&console.log(a.step,(e?`MIRP[`:`MDRP[`)+(t?`M`:`m`)+(n?`>`:`_`)+(r?`R`:`_`)+(i===0?`Gr`:i===1?`Bl`:i===2?`Wh`:``)+`]`,e?s+`(`+a.cvt[s]+`,`+v+`)`:``,c,`(d =`,h,`->`,_*g,`)`),a.rp1=a.rp0,a.rp2=c,t&&(a.rp0=c)}nU=[wU.bind(void 0,hU),wU.bind(void 0,mU),TU.bind(void 0,hU),TU.bind(void 0,mU),EU.bind(void 0,hU),EU.bind(void 0,mU),DU.bind(void 0,0),DU.bind(void 0,1),OU.bind(void 0,0),OU.bind(void 0,1),kU,AU,jU,MU,NU,PU,FU,IU,LU,RU,zU,BU,VU,HU,UU,WU,GU,KU,qU,JU,void 0,void 0,YU,XU,ZU,QU,$U,nW,rW,void 0,void 0,void 0,eW,tW,iW,void 0,aW.bind(void 0,0),aW.bind(void 0,1),oW.bind(void 0,hU),oW.bind(void 0,mU),sW.bind(void 0,0),sW.bind(void 0,1),cW.bind(void 0,0),cW.bind(void 0,1),lW.bind(void 0,0),lW.bind(void 0,1),uW,dW,fW.bind(void 0,0),fW.bind(void 0,1),pW,mW,hW.bind(void 0,0),hW.bind(void 0,1),gW,_W,vW,yW,bW,xW,SW.bind(void 0,0),SW.bind(void 0,1),void 0,CW.bind(void 0,0),CW.bind(void 0,1),wW,void 0,TW,void 0,void 0,EW,DW,OW,kW,AW,jW,MW,NW,PW,FW,IW,LW,RW,zW.bind(void 0,1),BW,VW,HW,UW,WW,GW,KW,qW,JW,YW,XW.bind(void 0,0),XW.bind(void 0,1),XW.bind(void 0,2),XW.bind(void 0,3),void 0,void 0,void 0,void 0,ZW,zW.bind(void 0,2),zW.bind(void 0,3),QW.bind(void 0,1),QW.bind(void 0,2),QW.bind(void 0,3),$W,eG,void 0,void 0,tG,void 0,nG,rG,XU,XU,void 0,void 0,void 0,void 0,void 0,iG,aG.bind(void 0,0),aG.bind(void 0,1),oG,void 0,sG,cG,lG,uG,dG,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,fG.bind(void 0,1),fG.bind(void 0,2),fG.bind(void 0,3),fG.bind(void 0,4),fG.bind(void 0,5),fG.bind(void 0,6),fG.bind(void 0,7),fG.bind(void 0,8),pG.bind(void 0,1),pG.bind(void 0,2),pG.bind(void 0,3),pG.bind(void 0,4),pG.bind(void 0,5),pG.bind(void 0,6),pG.bind(void 0,7),pG.bind(void 0,8),Q.bind(void 0,0,0,0,0,0),Q.bind(void 0,0,0,0,0,1),Q.bind(void 0,0,0,0,0,2),Q.bind(void 0,0,0,0,0,3),Q.bind(void 0,0,0,0,1,0),Q.bind(void 0,0,0,0,1,1),Q.bind(void 0,0,0,0,1,2),Q.bind(void 0,0,0,0,1,3),Q.bind(void 0,0,0,1,0,0),Q.bind(void 0,0,0,1,0,1),Q.bind(void 0,0,0,1,0,2),Q.bind(void 0,0,0,1,0,3),Q.bind(void 0,0,0,1,1,0),Q.bind(void 0,0,0,1,1,1),Q.bind(void 0,0,0,1,1,2),Q.bind(void 0,0,0,1,1,3),Q.bind(void 0,0,1,0,0,0),Q.bind(void 0,0,1,0,0,1),Q.bind(void 0,0,1,0,0,2),Q.bind(void 0,0,1,0,0,3),Q.bind(void 0,0,1,0,1,0),Q.bind(void 0,0,1,0,1,1),Q.bind(void 0,0,1,0,1,2),Q.bind(void 0,0,1,0,1,3),Q.bind(void 0,0,1,1,0,0),Q.bind(void 0,0,1,1,0,1),Q.bind(void 0,0,1,1,0,2),Q.bind(void 0,0,1,1,0,3),Q.bind(void 0,0,1,1,1,0),Q.bind(void 0,0,1,1,1,1),Q.bind(void 0,0,1,1,1,2),Q.bind(void 0,0,1,1,1,3),Q.bind(void 0,1,0,0,0,0),Q.bind(void 0,1,0,0,0,1),Q.bind(void 0,1,0,0,0,2),Q.bind(void 0,1,0,0,0,3),Q.bind(void 0,1,0,0,1,0),Q.bind(void 0,1,0,0,1,1),Q.bind(void 0,1,0,0,1,2),Q.bind(void 0,1,0,0,1,3),Q.bind(void 0,1,0,1,0,0),Q.bind(void 0,1,0,1,0,1),Q.bind(void 0,1,0,1,0,2),Q.bind(void 0,1,0,1,0,3),Q.bind(void 0,1,0,1,1,0),Q.bind(void 0,1,0,1,1,1),Q.bind(void 0,1,0,1,1,2),Q.bind(void 0,1,0,1,1,3),Q.bind(void 0,1,1,0,0,0),Q.bind(void 0,1,1,0,0,1),Q.bind(void 0,1,1,0,0,2),Q.bind(void 0,1,1,0,0,3),Q.bind(void 0,1,1,0,1,0),Q.bind(void 0,1,1,0,1,1),Q.bind(void 0,1,1,0,1,2),Q.bind(void 0,1,1,0,1,3),Q.bind(void 0,1,1,1,0,0),Q.bind(void 0,1,1,1,0,1),Q.bind(void 0,1,1,1,0,2),Q.bind(void 0,1,1,1,0,3),Q.bind(void 0,1,1,1,1,0),Q.bind(void 0,1,1,1,1,1),Q.bind(void 0,1,1,1,1,2),Q.bind(void 0,1,1,1,1,3)];function mG(e){this.char=e,this.state={},this.activeState=null}function hG(e,t,n){this.contextName=n,this.startIndex=e,this.endOffset=t}function gG(e,t,n){this.contextName=e,this.openRange=null,this.ranges=[],this.checkStart=t,this.checkEnd=n}function _G(e,t){this.context=e,this.index=t,this.length=e.length,this.current=e[t],this.backtrack=e.slice(0,t),this.lookahead=e.slice(t+1)}function vG(e){this.eventId=e,this.subscribers=[]}function yG(e){var t=this,n=[`start`,`end`,`next`,`newToken`,`contextStart`,`contextEnd`,`insertToken`,`removeToken`,`removeRange`,`replaceToken`,`replaceRange`,`composeRUD`,`updateContextsRanges`];n.forEach(function(e){Object.defineProperty(t.events,e,{value:new vG(e)})}),e&&n.forEach(function(n){var r=e[n];typeof r==`function`&&t.events[n].subscribe(r)}),[`insertToken`,`removeToken`,`removeRange`,`replaceToken`,`replaceRange`,`composeRUD`].forEach(function(e){t.events[e].subscribe(t.updateContextsRanges)})}function bG(e){this.tokens=[],this.registeredContexts={},this.contextCheckers=[],this.events={},this.registeredModifiers=[],yG.call(this,e)}mG.prototype.setState=function(e,t){return this.state[e]=t,this.activeState={key:e,value:this.state[e]},this.activeState},mG.prototype.getState=function(e){return this.state[e]||null},bG.prototype.inboundIndex=function(e){return e>=0&&e<this.tokens.length},bG.prototype.composeRUD=function(e){var t=this,n=!0,r=e.map(function(e){return t[e[0]].apply(t,e.slice(1).concat(n))}),i=function(e){return typeof e==`object`&&e.hasOwnProperty(`FAIL`)};if(r.every(i))return{FAIL:`composeRUD: one or more operations hasn't completed successfully`,report:r.filter(i)};this.dispatch(`composeRUD`,[r.filter(function(e){return!i(e)})])},bG.prototype.replaceRange=function(e,t,n,r){t=t===null?this.tokens.length:t;var i=n.every(function(e){return e instanceof mG});if(!isNaN(e)&&this.inboundIndex(e)&&i){var a=this.tokens.splice.apply(this.tokens,[e,t].concat(n));return r||this.dispatch(`replaceToken`,[e,t,n]),[a,n]}else return{FAIL:`replaceRange: invalid tokens or startIndex.`}},bG.prototype.replaceToken=function(e,t,n){if(!isNaN(e)&&this.inboundIndex(e)&&t instanceof mG){var r=this.tokens.splice(e,1,t);return n||this.dispatch(`replaceToken`,[e,t]),[r[0],t]}else return{FAIL:`replaceToken: invalid token or index.`}},bG.prototype.removeRange=function(e,t,n){t=isNaN(t)?this.tokens.length:t;var r=this.tokens.splice(e,t);return n||this.dispatch(`removeRange`,[r,e,t]),r},bG.prototype.removeToken=function(e,t){if(!isNaN(e)&&this.inboundIndex(e)){var n=this.tokens.splice(e,1);return t||this.dispatch(`removeToken`,[n,e]),n}else return{FAIL:`removeToken: invalid token index.`}},bG.prototype.insertToken=function(e,t,n){return e.every(function(e){return e instanceof mG})?(this.tokens.splice.apply(this.tokens,[t,0].concat(e)),n||this.dispatch(`insertToken`,[e,t]),e):{FAIL:`insertToken: invalid token(s).`}},bG.prototype.registerModifier=function(e,t,n){this.events.newToken.subscribe(function(r,i){var a=[r,i],o=t===null||t.apply(this,a)===!0,s=[r,i];if(o){var c=n.apply(this,s);r.setState(e,c)}}),this.registeredModifiers.push(e)},vG.prototype.subscribe=function(e){return typeof e==`function`?this.subscribers.push(e)-1:{FAIL:`invalid '`+this.eventId+`' event handler`}},vG.prototype.unsubscribe=function(e){this.subscribers.splice(e,1)},_G.prototype.setCurrentIndex=function(e){this.index=e,this.current=this.context[e],this.backtrack=this.context.slice(0,e),this.lookahead=this.context.slice(e+1)},_G.prototype.get=function(e){switch(!0){case e===0:return this.current;case e<0&&Math.abs(e)<=this.backtrack.length:return this.backtrack.slice(e)[0];case e>0&&e<=this.lookahead.length:return this.lookahead[e-1];default:return null}},bG.prototype.rangeToText=function(e){if(e instanceof hG)return this.getRangeTokens(e).map(function(e){return e.char}).join(``)},bG.prototype.getText=function(){return this.tokens.map(function(e){return e.char}).join(``)},bG.prototype.getContext=function(e){return this.registeredContexts[e]||null},bG.prototype.on=function(e,t){var n=this.events[e];return n?n.subscribe(t):null},bG.prototype.dispatch=function(e,t){var n=this,r=this.events[e];r instanceof vG&&r.subscribers.forEach(function(e){e.apply(n,t||[])})},bG.prototype.registerContextChecker=function(e,t,n){if(this.getContext(e))return{FAIL:`context name '`+e+`' is already registered.`};if(typeof t!=`function`)return{FAIL:`missing context start check.`};if(typeof n!=`function`)return{FAIL:`missing context end check.`};var r=new gG(e,t,n);return this.registeredContexts[e]=r,this.contextCheckers.push(r),r},bG.prototype.getRangeTokens=function(e){var t=e.startIndex+e.endOffset;return[].concat(this.tokens.slice(e.startIndex,t))},bG.prototype.getContextRanges=function(e){var t=this.getContext(e);return t?t.ranges:{FAIL:`context checker '`+e+`' is not registered.`}},bG.prototype.resetContextsRanges=function(){var e=this.registeredContexts;for(var t in e)if(e.hasOwnProperty(t)){var n=e[t];n.ranges=[]}},bG.prototype.updateContextsRanges=function(){this.resetContextsRanges();for(var e=this.tokens.map(function(e){return e.char}),t=0;t<e.length;t++){var n=new _G(e,t);this.runContextCheck(n)}this.dispatch(`updateContextsRanges`,[this.registeredContexts])},bG.prototype.setEndOffset=function(e,t){var n=this.getContext(t).openRange.startIndex,r=new hG(n,e,t),i=this.getContext(t).ranges;return r.rangeId=t+`.`+i.length,i.push(r),this.getContext(t).openRange=null,r},bG.prototype.runContextCheck=function(e){var t=this,n=e.index;this.contextCheckers.forEach(function(r){var i=r.contextName,a=t.getContext(i).openRange;if(!a&&r.checkStart(e)&&(a=new hG(n,null,i),t.getContext(i).openRange=a,t.dispatch(`contextStart`,[i,n])),a&&r.checkEnd(e)){var o=n-a.startIndex+1,s=t.setEndOffset(o,i);t.dispatch(`contextEnd`,[i,s])}})},bG.prototype.tokenize=function(e){this.tokens=[],this.resetContextsRanges();var t=Array.from(e);this.dispatch(`start`);for(var n=0;n<t.length;n++){var r=t[n],i=new _G(t,n);this.dispatch(`next`,[i]),this.runContextCheck(i);var a=new mG(r);this.tokens.push(a),this.dispatch(`newToken`,[a,i])}return this.dispatch(`end`,[this.tokens]),this.tokens};function xG(e){return/[\u0600-\u065F\u066A-\u06D2\u06FA-\u06FF]/.test(e)}function SG(e){return/[\u0630\u0690\u0621\u0631\u0661\u0671\u0622\u0632\u0672\u0692\u06C2\u0623\u0673\u0693\u06C3\u0624\u0694\u06C4\u0625\u0675\u0695\u06C5\u06E5\u0676\u0696\u06C6\u0627\u0677\u0697\u06C7\u0648\u0688\u0698\u06C8\u0689\u0699\u06C9\u068A\u06CA\u066B\u068B\u06CB\u068C\u068D\u06CD\u06FD\u068E\u06EE\u06FE\u062F\u068F\u06CF\u06EF]/.test(e)}function CG(e){return/[\u0600-\u0605\u060C-\u060E\u0610-\u061B\u061E\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED]/.test(e)}function wG(e){return/[A-z]/.test(e)}function TG(e){return/\s/.test(e)}function EG(e){this.font=e,this.features={}}function DG(e){this.id=e.id,this.tag=e.tag,this.substitution=e.substitution}function OG(e,t){if(!e)return-1;switch(t.format){case 1:return t.glyphs.indexOf(e);case 2:for(var n=t.ranges,r=0;r<n.length;r++){var i=n[r];if(e>=i.start&&e<=i.end){var a=e-i.start;return i.index+a}}break;default:return-1}return-1}function kG(e,t){return OG(e,t.coverage)===-1?null:e+t.deltaGlyphId}function AG(e,t){var n=OG(e,t.coverage);return n===-1?null:t.substitute[n]}function jG(e,t){for(var n=[],r=0;r<e.length;r++){var i=e[r],a=t.current;a=Array.isArray(a)?a[0]:a;var o=OG(a,i);o!==-1&&n.push(o)}return n.length===e.length?n:-1}function MG(e,t){var n=t.inputCoverage.length+t.lookaheadCoverage.length+t.backtrackCoverage.length;if(e.context.length<n)return[];var r=jG(t.inputCoverage,e);if(r===-1)return[];var i=t.inputCoverage.length-1;if(e.lookahead.length<t.lookaheadCoverage.length)return[];for(var a=e.lookahead.slice(i);a.length&&CG(a[0].char);)a.shift();var o=new _G(a,0),s=jG(t.lookaheadCoverage,o),c=[].concat(e.backtrack);for(c.reverse();c.length&&CG(c[0].char);)c.shift();if(c.length<t.backtrackCoverage.length)return[];var l=new _G(c,0),u=jG(t.backtrackCoverage,l),d=r.length===t.inputCoverage.length&&s.length===t.lookaheadCoverage.length&&u.length===t.backtrackCoverage.length,f=[];if(d)for(var p=0;p<t.lookupRecords.length;p++)for(var m=t.lookupRecords[p].lookupListIndex,h=this.getLookupByIndex(m),g=0;g<h.subtables.length;g++){var _=h.subtables[g],v=this.getLookupMethod(h,_);if(this.getSubstitutionType(h,_)===`12`)for(var y=0;y<r.length;y++){var b=v(e.get(y));b&&f.push(b)}}return f}function NG(e,t){var n=e.current,r=OG(n,t.coverage);if(r===-1)return null;for(var i,a=t.ligatureSets[r],o=0;o<a.length;o++){i=a[o];for(var s=0;s<i.components.length&&e.lookahead[s]===i.components[s];s++)if(s===i.components.length-1)return i}return null}function PG(e,t){var n=OG(e,t.coverage);return n===-1?null:t.sequences[n]}EG.prototype.getDefaultScriptFeaturesIndexes=function(){for(var e=this.font.tables.gsub.scripts,t=0;t<e.length;t++){var n=e[t];if(n.tag===`DFLT`)return n.script.defaultLangSys.featureIndexes}return[]},EG.prototype.getScriptFeaturesIndexes=function(e){if(!this.font.tables.gsub)return[];if(!e)return this.getDefaultScriptFeaturesIndexes();for(var t=this.font.tables.gsub.scripts,n=0;n<t.length;n++){var r=t[n];if(r.tag===e&&r.script.defaultLangSys)return r.script.defaultLangSys.featureIndexes;var i=r.langSysRecords;if(i)for(var a=0;a<i.length;a++){var o=i[a];if(o.tag===e)return o.langSys.featureIndexes}}return this.getDefaultScriptFeaturesIndexes()},EG.prototype.mapTagsToFeatures=function(e,t){for(var n={},r=0;r<e.length;r++){var i=e[r].tag;n[i]=e[r].feature}this.features[t].tags=n},EG.prototype.getScriptFeatures=function(e){var t=this.features[e];if(this.features.hasOwnProperty(e))return t;var n=this.getScriptFeaturesIndexes(e);if(!n)return null;var r=this.font.tables.gsub;return t=n.map(function(e){return r.features[e]}),this.features[e]=t,this.mapTagsToFeatures(t,e),t},EG.prototype.getSubstitutionType=function(e,t){return e.lookupType.toString()+t.substFormat.toString()},EG.prototype.getLookupMethod=function(e,t){var n=this;switch(this.getSubstitutionType(e,t)){case`11`:return function(e){return kG.apply(n,[e,t])};case`12`:return function(e){return AG.apply(n,[e,t])};case`63`:return function(e){return MG.apply(n,[e,t])};case`41`:return function(e){return NG.apply(n,[e,t])};case`21`:return function(e){return PG.apply(n,[e,t])};default:throw Error(`lookupType: `+e.lookupType+` - substFormat: `+t.substFormat+` is not yet supported`)}},EG.prototype.lookupFeature=function(e){var t=e.contextParams,n=t.index,r=this.getFeature({tag:e.tag,script:e.script});if(!r)return Error(`font '`+this.font.names.fullName.en+`' doesn't support feature '`+e.tag+`' for script '`+e.script+`'.`);for(var i=this.getFeatureLookups(r),a=[].concat(t.context),o=0;o<i.length;o++)for(var s=i[o],c=this.getLookupSubtables(s),l=0;l<c.length;l++){var u=c[l],d=this.getSubstitutionType(s,u),f=this.getLookupMethod(s,u),p=void 0;switch(d){case`11`:p=f(t.current),p&&a.splice(n,1,new DG({id:11,tag:e.tag,substitution:p}));break;case`12`:p=f(t.current),p&&a.splice(n,1,new DG({id:12,tag:e.tag,substitution:p}));break;case`63`:p=f(t),Array.isArray(p)&&p.length&&a.splice(n,1,new DG({id:63,tag:e.tag,substitution:p}));break;case`41`:p=f(t),p&&a.splice(n,1,new DG({id:41,tag:e.tag,substitution:p}));break;case`21`:p=f(t.current),p&&a.splice(n,1,new DG({id:21,tag:e.tag,substitution:p}));break}t=new _G(a,n),!(Array.isArray(p)&&!p.length)&&(p=null)}return a.length?a:null},EG.prototype.supports=function(e){if(!e.script)return!1;this.getScriptFeatures(e.script);var t=this.features.hasOwnProperty(e.script);if(!e.tag)return t;var n=this.features[e.script].some(function(t){return t.tag===e.tag});return t&&n},EG.prototype.getLookupSubtables=function(e){return e.subtables||null},EG.prototype.getLookupByIndex=function(e){return this.font.tables.gsub.lookups[e]||null},EG.prototype.getFeatureLookups=function(e){return e.lookupListIndexes.map(this.getLookupByIndex.bind(this))},EG.prototype.getFeature=function(e){if(!this.font)return{FAIL:`No font was found`};this.features.hasOwnProperty(e.script)||this.getScriptFeatures(e.script);var t=this.features[e.script];return t?t.tags[e.tag]?this.features[e.script].tags[e.tag]:null:{FAIL:`No feature for script `+e.script}};function FG(e){var t=e.current,n=e.get(-1);return n===null&&xG(t)||!xG(n)&&xG(t)}function IG(e){var t=e.get(1);return t===null||!xG(t)}var LG={startCheck:FG,endCheck:IG};function RG(e){var t=e.current,n=e.get(-1);return(xG(t)||CG(t))&&!xG(n)}function zG(e){var t=e.get(1);switch(!0){case t===null:return!0;case!xG(t)&&!CG(t):var n=TG(t);if(!n)return!0;if(n){var r=!1;if(r=e.lookahead.some(function(e){return xG(e)||CG(e)}),!r)return!0}break;default:return!1}}var BG={startCheck:RG,endCheck:zG};function VG(e,t,n){t[n].setState(e.tag,e.substitution)}function HG(e,t,n){t[n].setState(e.tag,e.substitution)}function UG(e,t,n){e.substitution.forEach(function(r,i){t[n+i].setState(e.tag,r)})}function WG(e,t,n){var r=t[n];r.setState(e.tag,e.substitution.ligGlyph);for(var i=e.substitution.components.length,a=0;a<i;a++)r=t[n+a+1],r.setState(`deleted`,!0)}var GG={11:VG,12:HG,63:UG,41:WG};function KG(e,t,n){e instanceof DG&&GG[e.id]&&GG[e.id](e,t,n)}function qG(e){for(var t=[].concat(e.backtrack),n=t.length-1;n>=0;n--){var r=t[n],i=SG(r),a=CG(r);if(!i&&!a)return!0;if(i)return!1}return!1}function JG(e){if(SG(e.current))return!1;for(var t=0;t<e.lookahead.length;t++){var n=e.lookahead[t];if(!CG(n))return!0}return!1}function YG(e){var t=this,n=`arab`,r=this.featuresTags[n],i=this.tokenizer.getRangeTokens(e);if(i.length!==1){var a=new _G(i.map(function(e){return e.getState(`glyphIndex`)}),0),o=new _G(i.map(function(e){return e.char}),0);i.forEach(function(e,s){if(!CG(e.char)){a.setCurrentIndex(s),o.setCurrentIndex(s);var c=0;qG(o)&&(c|=1),JG(o)&&(c|=2);var l;switch(c){case 1:l=`fina`;break;case 2:l=`init`;break;case 3:l=`medi`;break}if(r.indexOf(l)!==-1){var u=t.query.lookupFeature({tag:l,script:n,contextParams:a});if(u instanceof Error)return console.info(u.message);u.forEach(function(e,t){e instanceof DG&&(KG(e,i,t),a.context[t]=e.substitution)})}}})}}function XG(e,t){return new _G(e.map(function(e){return e.activeState.value}),t||0)}function ZG(e){var t=this,n=`arab`,r=this.tokenizer.getRangeTokens(e),i=XG(r);i.context.forEach(function(e,a){i.setCurrentIndex(a);var o=t.query.lookupFeature({tag:`rlig`,script:n,contextParams:i});o.length&&(o.forEach(function(e){return KG(e,r,a)}),i=XG(r))})}function QG(e){var t=e.current,n=e.get(-1);return n===null&&wG(t)||!wG(n)&&wG(t)}function $G(e){var t=e.get(1);return t===null||!wG(t)}var eK={startCheck:QG,endCheck:$G};function tK(e,t){return new _G(e.map(function(e){return e.activeState.value}),t||0)}function nK(e){var t=this,n=`latn`,r=this.tokenizer.getRangeTokens(e),i=tK(r);i.context.forEach(function(e,a){i.setCurrentIndex(a);var o=t.query.lookupFeature({tag:`liga`,script:n,contextParams:i});o.length&&(o.forEach(function(e){return KG(e,r,a)}),i=tK(r))})}function rK(e){this.baseDir=e||`ltr`,this.tokenizer=new bG,this.featuresTags={}}rK.prototype.setText=function(e){this.text=e},rK.prototype.contextChecks={latinWordCheck:eK,arabicWordCheck:LG,arabicSentenceCheck:BG};function iK(e){var t=this.contextChecks[e+`Check`];return this.tokenizer.registerContextChecker(e,t.startCheck,t.endCheck)}function aK(){return iK.call(this,`latinWord`),iK.call(this,`arabicWord`),iK.call(this,`arabicSentence`),this.tokenizer.tokenize(this.text)}function oK(){var e=this;this.tokenizer.getContextRanges(`arabicSentence`).forEach(function(t){var n=e.tokenizer.getRangeTokens(t);e.tokenizer.replaceRange(t.startIndex,t.endOffset,n.reverse())})}rK.prototype.registerFeatures=function(e,t){var n=this,r=t.filter(function(t){return n.query.supports({script:e,tag:t})});this.featuresTags.hasOwnProperty(e)?this.featuresTags[e]=this.featuresTags[e].concat(r):this.featuresTags[e]=r},rK.prototype.applyFeatures=function(e,t){if(!e)throw Error(`No valid font was provided to apply features`);this.query||=new EG(e);for(var n=0;n<t.length;n++){var r=t[n];this.query.supports({script:r.script})&&this.registerFeatures(r.script,r.tags)}},rK.prototype.registerModifier=function(e,t,n){this.tokenizer.registerModifier(e,t,n)};function sK(){if(this.tokenizer.registeredModifiers.indexOf(`glyphIndex`)===-1)throw Error(`glyphIndex modifier is required to apply arabic presentation features.`)}function cK(){var e=this;this.featuresTags.hasOwnProperty(`arab`)&&(sK.call(this),this.tokenizer.getContextRanges(`arabicWord`).forEach(function(t){YG.call(e,t)}))}function lK(){var e=this,t=`arab`;this.featuresTags.hasOwnProperty(t)&&this.featuresTags[t].indexOf(`rlig`)!==-1&&(sK.call(this),this.tokenizer.getContextRanges(`arabicWord`).forEach(function(t){ZG.call(e,t)}))}function uK(){var e=this,t=`latn`;this.featuresTags.hasOwnProperty(t)&&this.featuresTags[t].indexOf(`liga`)!==-1&&(sK.call(this),this.tokenizer.getContextRanges(`latinWord`).forEach(function(t){nK.call(e,t)}))}rK.prototype.checkContextReady=function(e){return!!this.tokenizer.getContext(e)},rK.prototype.applyFeaturesToContexts=function(){this.checkContextReady(`arabicWord`)&&(cK.call(this),lK.call(this)),this.checkContextReady(`latinWord`)&&uK.call(this),this.checkContextReady(`arabicSentence`)&&oK.call(this)},rK.prototype.processText=function(e){(!this.text||this.text!==e)&&(this.setText(e),aK.call(this),this.applyFeaturesToContexts())},rK.prototype.getBidiText=function(e){return this.processText(e),this.tokenizer.getText()},rK.prototype.getTextGlyphs=function(e){this.processText(e);for(var t=[],n=0;n<this.tokenizer.tokens.length;n++){var r=this.tokenizer.tokens[n];if(!r.state.deleted){var i=r.activeState.value;t.push(Array.isArray(i)?i[0]:i)}}return t};function dK(e){e||={},e.tables=e.tables||{},e.empty||(GH(e.familyName,`When creating a new Font object, familyName is required.`),GH(e.styleName,`When creating a new Font object, styleName is required.`),GH(e.unitsPerEm,`When creating a new Font object, unitsPerEm is required.`),GH(e.ascender,`When creating a new Font object, ascender is required.`),GH(e.descender<=0,`When creating a new Font object, negative descender value is required.`),this.names={fontFamily:{en:e.familyName||` `},fontSubfamily:{en:e.styleName||` `},fullName:{en:e.fullName||e.familyName+` `+e.styleName},postScriptName:{en:e.postScriptName||(e.familyName+e.styleName).replace(/\s/g,``)},designer:{en:e.designer||` `},designerURL:{en:e.designerURL||` `},manufacturer:{en:e.manufacturer||` `},manufacturerURL:{en:e.manufacturerURL||` `},license:{en:e.license||` `},licenseURL:{en:e.licenseURL||` `},version:{en:e.version||`Version 0.1`},description:{en:e.description||` `},copyright:{en:e.copyright||` `},trademark:{en:e.trademark||` `}},this.unitsPerEm=e.unitsPerEm||1e3,this.ascender=e.ascender,this.descender=e.descender,this.createdTimestamp=e.createdTimestamp,this.tables=Object.assign(e.tables,{os2:Object.assign({usWeightClass:e.weightClass||this.usWeightClasses.MEDIUM,usWidthClass:e.widthClass||this.usWidthClasses.MEDIUM,fsSelection:e.fsSelection||this.fsSelectionValues.REGULAR},e.tables.os2)})),this.supported=!0,this.glyphs=new qB.GlyphSet(this,e.glyphs||[]),this.encoding=new jB(this),this.position=new RH(this),this.substitution=new zH(this),this.tables=this.tables||{},this._push=null,this._hmtxTableData={},Object.defineProperty(this,"hinting",{get:function(){if(this._hinting)return this._hinting;if(this.outlinesFormat===`truetype`)return this._hinting=new oU(this)}})}dK.prototype.hasChar=function(e){return this.encoding.charToGlyphIndex(e)!==null},dK.prototype.charToGlyphIndex=function(e){return this.encoding.charToGlyphIndex(e)},dK.prototype.charToGlyph=function(e){var t=this.charToGlyphIndex(e),n=this.glyphs.get(t);return n||=this.glyphs.get(0),n},dK.prototype.updateFeatures=function(e){return this.defaultRenderOptions.features.map(function(t){return t.script===`latn`?{script:`latn`,tags:t.tags.filter(function(t){return e[t]})}:t})},dK.prototype.stringToGlyphs=function(e,t){var n=this,r=new rK;r.registerModifier(`glyphIndex`,null,function(e){return n.charToGlyphIndex(e.char)});var i=t?this.updateFeatures(t.features):this.defaultRenderOptions.features;r.applyFeatures(this,i);for(var a=r.getTextGlyphs(e),o=a.length,s=Array(o),c=this.glyphs.get(0),l=0;l<o;l+=1)s[l]=this.glyphs.get(a[l])||c;return s},dK.prototype.nameToGlyphIndex=function(e){return this.glyphNames.nameToGlyphIndex(e)},dK.prototype.nameToGlyph=function(e){var t=this.nameToGlyphIndex(e),n=this.glyphs.get(t);return n||=this.glyphs.get(0),n},dK.prototype.glyphIndexToName=function(e){return this.glyphNames.glyphIndexToName?this.glyphNames.glyphIndexToName(e):``},dK.prototype.getKerningValue=function(e,t){e=e.index||e,t=t.index||t;var n=this.position.defaultKerningTables;return n?this.position.getKerningValue(n,e,t):this.kerningPairs[e+`,`+t]||0},dK.prototype.defaultRenderOptions={kerning:!0,features:[{script:`arab`,tags:[`init`,`medi`,`fina`,`rlig`]},{script:`latn`,tags:[`liga`,`rlig`]}]},dK.prototype.forEachGlyph=function(e,t,n,r,i,a){t=t===void 0?0:t,n=n===void 0?0:n,r=r===void 0?72:r,i=Object.assign({},this.defaultRenderOptions,i);var o=1/this.unitsPerEm*r,s=this.stringToGlyphs(e,i),c;if(i.kerning){var l=i.script||this.position.getDefaultScriptName();c=this.position.getKerningTables(l,i.language)}for(var u=0;u<s.length;u+=1){var d=s[u];if(a.call(this,d,t,n,r,i),d.advanceWidth&&(t+=d.advanceWidth*o),i.kerning&&u<s.length-1){var f=c?this.position.getKerningValue(c,d.index,s[u+1].index):this.getKerningValue(d,s[u+1]);t+=f*o}i.letterSpacing?t+=i.letterSpacing*r:i.tracking&&(t+=i.tracking/1e3*r)}return t},dK.prototype.getPath=function(e,t,n,r,i){var a=new zz;return this.forEachGlyph(e,t,n,r,i,function(e,t,n,r){var o=e.getPath(t,n,r,i,this);a.extend(o)}),a},dK.prototype.getPaths=function(e,t,n,r,i){var a=[];return this.forEachGlyph(e,t,n,r,i,function(e,t,n,r){var o=e.getPath(t,n,r,i,this);a.push(o)}),a},dK.prototype.getAdvanceWidth=function(e,t,n){return this.forEachGlyph(e,0,0,t,n,function(){})},dK.prototype.draw=function(e,t,n,r,i,a){this.getPath(t,n,r,i,a).draw(e)},dK.prototype.drawPoints=function(e,t,n,r,i,a){this.forEachGlyph(t,n,r,i,a,function(t,n,r,i){t.drawPoints(e,n,r,i)})},dK.prototype.drawMetrics=function(e,t,n,r,i,a){this.forEachGlyph(t,n,r,i,a,function(t,n,r,i){t.drawMetrics(e,n,r,i)})},dK.prototype.getEnglishName=function(e){var t=this.names[e];if(t)return t.en},dK.prototype.validate=function(){var e=this;function t(t){var n=e.getEnglishName(t);n&&n.trim().length}t(`fontFamily`),t(`weightName`),t(`manufacturer`),t(`copyright`),t(`version`),this.unitsPerEm},dK.prototype.toTables=function(){return NH.fontToTable(this)},dK.prototype.toBuffer=function(){return console.warn(`Font.toBuffer is deprecated. Use Font.toArrayBuffer instead.`),this.toArrayBuffer()},dK.prototype.toArrayBuffer=function(){for(var e=this.toTables().encode(),t=new ArrayBuffer(e.length),n=new Uint8Array(t),r=0;r<e.length;r++)n[r]=e[r];return t},dK.prototype.download=function(e){var t=this.getEnglishName(`fontFamily`),n=this.getEnglishName(`fontSubfamily`);e||=t.replace(/\s/g,``)+`-`+n+`.otf`;var r=this.toArrayBuffer();if(HH())if(window.URL=window.URL||window.webkitURL,window.URL){var i=new DataView(r),a=new Blob([i],{type:`font/opentype`}),o=document.createElement(`a`);o.href=window.URL.createObjectURL(a),o.download=e;var s=document.createEvent(`MouseEvents`);s.initEvent(`click`,!0,!1),o.dispatchEvent(s)}else console.warn(`Font file could not be downloaded. Try using a different browser.`);else{var c=dz(),l=WH(r);c.writeFileSync(e,l)}},dK.prototype.fsSelectionValues={ITALIC:1,UNDERSCORE:2,NEGATIVE:4,OUTLINED:8,STRIKEOUT:16,BOLD:32,REGULAR:64,USER_TYPO_METRICS:128,WWS:256,OBLIQUE:512},dK.prototype.usWidthClasses={ULTRA_CONDENSED:1,EXTRA_CONDENSED:2,CONDENSED:3,SEMI_CONDENSED:4,MEDIUM:5,SEMI_EXPANDED:6,EXPANDED:7,EXTRA_EXPANDED:8,ULTRA_EXPANDED:9},dK.prototype.usWeightClasses={THIN:100,EXTRA_LIGHT:200,LIGHT:300,NORMAL:400,MEDIUM:500,SEMI_BOLD:600,BOLD:700,EXTRA_BOLD:800,BLACK:900};function fK(e,t){var n=JSON.stringify(e),r=256;for(var i in t){var a=parseInt(i);if(!(!a||a<256)){if(JSON.stringify(t[i])===n)return a;r<=a&&(r=a+1)}}return t[r]=e,r}function pK(e,t,n){var r=fK(t.name,n);return[{name:`tag_`+e,type:`TAG`,value:t.tag},{name:`minValue_`+e,type:`FIXED`,value:t.minValue<<16},{name:`defaultValue_`+e,type:`FIXED`,value:t.defaultValue<<16},{name:`maxValue_`+e,type:`FIXED`,value:t.maxValue<<16},{name:`flags_`+e,type:`USHORT`,value:0},{name:`nameID_`+e,type:`USHORT`,value:r}]}function mK(e,t,n){var r={},i=new Z.Parser(e,t);return r.tag=i.parseTag(),r.minValue=i.parseFixed(),r.defaultValue=i.parseFixed(),r.maxValue=i.parseFixed(),i.skip(`uShort`,1),r.name=n[i.parseUShort()]||{},r}function hK(e,t,n,r){for(var i=fK(t.name,r),a=[{name:`nameID_`+e,type:`USHORT`,value:i},{name:`flags_`+e,type:`USHORT`,value:0}],o=0;o<n.length;++o){var s=n[o].tag;a.push({name:`axis_`+e+` `+s,type:`FIXED`,value:t.coordinates[s]<<16})}return a}function gK(e,t,n,r){var i={},a=new Z.Parser(e,t);i.name=r[a.parseUShort()]||{},a.skip(`uShort`,1),i.coordinates={};for(var o=0;o<n.length;++o)i.coordinates[n[o].tag]=a.parseFixed();return i}function _K(e,t){var n=new Y.Table(`fvar`,[{name:`version`,type:`ULONG`,value:65536},{name:`offsetToData`,type:`USHORT`,value:0},{name:`countSizePairs`,type:`USHORT`,value:2},{name:`axisCount`,type:`USHORT`,value:e.axes.length},{name:`axisSize`,type:`USHORT`,value:20},{name:`instanceCount`,type:`USHORT`,value:e.instances.length},{name:`instanceSize`,type:`USHORT`,value:4+e.axes.length*4}]);n.offsetToData=n.sizeOf();for(var r=0;r<e.axes.length;r++)n.fields=n.fields.concat(pK(r,e.axes[r],t));for(var i=0;i<e.instances.length;i++)n.fields=n.fields.concat(hK(i,e.instances[i],e.axes,t));return n}function vK(e,t,n){var r=new Z.Parser(e,t),i=r.parseULong();K.argument(i===65536,`Unsupported fvar table version.`);var a=r.parseOffset16();r.skip(`uShort`,1);for(var o=r.parseUShort(),s=r.parseUShort(),c=r.parseUShort(),l=r.parseUShort(),u=[],d=0;d<o;d++)u.push(mK(e,t+a+d*s,n));for(var f=[],p=t+a+o*s,m=0;m<c;m++)f.push(gK(e,p+m*l,u,n));return{axes:u,instances:f}}var yK={make:_K,parse:vK},bK=function(){return{coverage:this.parsePointer(X.coverage),attachPoints:this.parseList(X.pointer(X.uShortList))}},xK=function(){var e=this.parseUShort();if(K.argument(e===1||e===2||e===3,`Unsupported CaretValue table version.`),e===1)return{coordinate:this.parseShort()};if(e===2)return{pointindex:this.parseShort()};if(e===3)return{coordinate:this.parseShort()}},SK=function(){return this.parseList(X.pointer(xK))},CK=function(){return{coverage:this.parsePointer(X.coverage),ligGlyphs:this.parseList(X.pointer(SK))}},wK=function(){return this.parseUShort(),this.parseList(X.pointer(X.coverage))};function TK(e,t){t||=0;var n=new X(e,t),r=n.parseVersion(1);K.argument(r===1||r===1.2||r===1.3,`Unsupported GDEF table version.`);var i={version:r,classDef:n.parsePointer(X.classDef),attachList:n.parsePointer(bK),ligCaretList:n.parsePointer(CK),markAttachClassDef:n.parsePointer(X.classDef)};return r>=1.2&&(i.markGlyphSets=n.parsePointer(wK)),i}var EK={parse:TK},DK=Array(10);DK[1]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();if(t===1)return{posFormat:1,coverage:this.parsePointer(X.coverage),value:this.parseValueRecord()};if(t===2)return{posFormat:2,coverage:this.parsePointer(X.coverage),values:this.parseValueRecordList()};K.assert(!1,`0x`+e.toString(16)+`: GPOS lookup type 1 format must be 1 or 2.`)},DK[2]=function(){var e=this.offset+this.relativeOffset,t=this.parseUShort();K.assert(t===1||t===2,`0x`+e.toString(16)+`: GPOS lookup type 2 format must be 1 or 2.`);var n=this.parsePointer(X.coverage),r=this.parseUShort(),i=this.parseUShort();if(t===1)return{posFormat:t,coverage:n,valueFormat1:r,valueFormat2:i,pairSets:this.parseList(X.pointer(X.list(function(){return{secondGlyph:this.parseUShort(),value1:this.parseValueRecord(r),value2:this.parseValueRecord(i)}})))};if(t===2){var a=this.parsePointer(X.classDef),o=this.parsePointer(X.classDef),s=this.parseUShort(),c=this.parseUShort();return{posFormat:t,coverage:n,valueFormat1:r,valueFormat2:i,classDef1:a,classDef2:o,class1Count:s,class2Count:c,classRecords:this.parseList(s,X.list(c,function(){return{value1:this.parseValueRecord(r),value2:this.parseValueRecord(i)}}))}}},DK[3]=function(){return{error:`GPOS Lookup 3 not supported`}},DK[4]=function(){return{error:`GPOS Lookup 4 not supported`}},DK[5]=function(){return{error:`GPOS Lookup 5 not supported`}},DK[6]=function(){return{error:`GPOS Lookup 6 not supported`}},DK[7]=function(){return{error:`GPOS Lookup 7 not supported`}},DK[8]=function(){return{error:`GPOS Lookup 8 not supported`}},DK[9]=function(){return{error:`GPOS Lookup 9 not supported`}};function OK(e,t){t||=0;var n=new X(e,t),r=n.parseVersion(1);return K.argument(r===1||r===1.1,`Unsupported GPOS table version `+r),r===1?{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(DK)}:{version:r,scripts:n.parseScriptList(),features:n.parseFeatureList(),lookups:n.parseLookupList(DK),variations:n.parseFeatureVariationsList()}}var kK=Array(10);function AK(e){return new Y.Table(`GPOS`,[{name:`version`,type:`ULONG`,value:65536},{name:`scripts`,type:`TABLE`,value:new Y.ScriptList(e.scripts)},{name:`features`,type:`TABLE`,value:new Y.FeatureList(e.features)},{name:`lookups`,type:`TABLE`,value:new Y.LookupList(e.lookups,kK)}])}var jK={parse:OK,make:AK};function MK(e){var t={};e.skip(`uShort`);var n=e.parseUShort();K.argument(n===0,`Unsupported kern sub-table version.`),e.skip(`uShort`,2);var r=e.parseUShort();e.skip(`uShort`,3);for(var i=0;i<r;i+=1){var a=e.parseUShort(),o=e.parseUShort(),s=e.parseShort();t[a+`,`+o]=s}return t}function NK(e){var t={};e.skip(`uShort`),e.parseULong()>1&&console.warn(`Only the first kern subtable is supported.`),e.skip(`uLong`);var n=e.parseUShort()&255;if(e.skip(`uShort`),n===0){var r=e.parseUShort();e.skip(`uShort`,3);for(var i=0;i<r;i+=1){var a=e.parseUShort(),o=e.parseUShort(),s=e.parseShort();t[a+`,`+o]=s}}return t}function PK(e,t){var n=new Z.Parser(e,t),r=n.parseUShort();if(r===0)return MK(n);if(r===1)return NK(n);throw Error(`Unsupported kern table version (`+r+`).`)}var FK={parse:PK};function IK(e,t,n,r){for(var i=new Z.Parser(e,t),a=r?i.parseUShort:i.parseULong,o=[],s=0;s<n+1;s+=1){var c=a.call(i);r&&(c*=2),o.push(c)}return o}var LK={parse:IK};function RK(e,t){dz().readFile(e,function(e,n){if(e)return t(e.message);t(null,UH(n))})}function zK(e,t){var n=new XMLHttpRequest;n.open(`get`,e,!0),n.responseType=`arraybuffer`,n.onload=function(){return n.response?t(null,n.response):t(`Font could not be loaded: `+n.statusText)},n.onerror=function(){t(`Font could not be loaded`)},n.send()}function BK(e,t){for(var n=[],r=12,i=0;i<t;i+=1){var a=Z.getTag(e,r),o=Z.getULong(e,r+4),s=Z.getULong(e,r+8),c=Z.getULong(e,r+12);n.push({tag:a,checksum:o,offset:s,length:c,compression:!1}),r+=16}return n}function VK(e,t){for(var n=[],r=44,i=0;i<t;i+=1){var a=Z.getTag(e,r),o=Z.getULong(e,r+4),s=Z.getULong(e,r+8),c=Z.getULong(e,r+12),l=void 0;l=s<c?`WOFF`:!1,n.push({tag:a,offset:o,compression:l,compressedLength:s,length:c}),r+=20}return n}function HK(e,t){if(t.compression===`WOFF`){var n=new Uint8Array(e.buffer,t.offset+2,t.compressedLength-2),r=new Uint8Array(t.length);if(Iz(n,r),r.byteLength!==t.length)throw Error(`Decompression error: `+t.tag+` decompressed length doesn't match recorded length`);return{data:new DataView(r.buffer,0),offset:0}}else return{data:e,offset:t.offset}}function UK(e,t){t??={};var n,r,i=new dK({empty:!0}),a=new DataView(e,0),o,s=[],c=Z.getTag(a,0);if(c===`\0\0\0`||c===`true`||c===`typ1`)i.outlinesFormat=`truetype`,o=Z.getUShort(a,4),s=BK(a,o);else if(c===`OTTO`)i.outlinesFormat=`cff`,o=Z.getUShort(a,4),s=BK(a,o);else if(c===`wOFF`){var l=Z.getTag(a,4);if(l===`\0\0\0`)i.outlinesFormat=`truetype`;else if(l===`OTTO`)i.outlinesFormat=`cff`;else throw Error(`Unsupported OpenType flavor `+c);o=Z.getUShort(a,12),s=VK(a,o)}else throw Error(`Unsupported OpenType signature `+c);for(var u,d,f,p,m,h,g,_,v,y,b,x,S=0;S<o;S+=1){var C=s[S],w=void 0;switch(C.tag){case`cmap`:w=HK(a,C),i.tables.cmap=EB.parse(w.data,w.offset),i.encoding=new MB(i.tables.cmap);break;case`cvt `:w=HK(a,C),x=new Z.Parser(w.data,w.offset),i.tables.cvt=x.parseShortList(C.length/2);break;case`fvar`:d=C;break;case`fpgm`:w=HK(a,C),x=new Z.Parser(w.data,w.offset),i.tables.fpgm=x.parseByteList(C.length);break;case`head`:w=HK(a,C),i.tables.head=MV.parse(w.data,w.offset),i.unitsPerEm=i.tables.head.unitsPerEm,n=i.tables.head.indexToLocFormat;break;case`hhea`:w=HK(a,C),i.tables.hhea=FV.parse(w.data,w.offset),i.ascender=i.tables.hhea.ascender,i.descender=i.tables.hhea.descender,i.numberOfHMetrics=i.tables.hhea.numberOfHMetrics;break;case`hmtx`:g=C;break;case`ltag`:w=HK(a,C),r=UV.parse(w.data,w.offset);break;case`maxp`:w=HK(a,C),i.tables.maxp=KV.parse(w.data,w.offset),i.numGlyphs=i.tables.maxp.numGlyphs;break;case`name`:y=C;break;case`OS/2`:w=HK(a,C),i.tables.os2=pH.parse(w.data,w.offset);break;case`post`:w=HK(a,C),i.tables.post=gH.parse(w.data,w.offset),i.glyphNames=new PB(i.tables.post);break;case`prep`:w=HK(a,C),x=new Z.Parser(w.data,w.offset),i.tables.prep=x.parseByteList(C.length);break;case`glyf`:f=C;break;case`loca`:v=C;break;case`CFF `:u=C;break;case`kern`:_=C;break;case`GDEF`:p=C;break;case`GPOS`:m=C;break;case`GSUB`:h=C;break;case`meta`:b=C;break}}var ee=HK(a,y);if(i.tables.name=cH.parse(ee.data,ee.offset,r),i.names=i.tables.name,f&&v){var te=n===0,ne=HK(a,v),re=LK.parse(ne.data,ne.offset,i.numGlyphs,te),ie=HK(a,f);i.glyphs=tU.parse(ie.data,ie.offset,re,i,t)}else if(u){var ae=HK(a,u);kV.parse(ae.data,ae.offset,i,t)}else throw Error(`Font doesn't contain TrueType or CFF outlines.`);var oe=HK(a,g);if(BV.parse(i,oe.data,oe.offset,i.numberOfHMetrics,i.numGlyphs,i.glyphs,t),LB(i,t),_){var se=HK(a,_);i.kerningPairs=FK.parse(se.data,se.offset)}else i.kerningPairs={};if(p){var ce=HK(a,p);i.tables.gdef=EK.parse(ce.data,ce.offset)}if(m){var le=HK(a,m);i.tables.gpos=jK.parse(le.data,le.offset),i.position.init()}if(h){var ue=HK(a,h);i.tables.gsub=SH.parse(ue.data,ue.offset)}if(d){var de=HK(a,d);i.tables.fvar=yK.parse(de.data,de.offset,i.names)}if(b){var fe=HK(a,b);i.tables.meta=TH.parse(fe.data,fe.offset),i.metas=i.tables.meta}return i}function WK(e,t,n){n??={};var r=typeof window>`u`&&!n.isUrl?RK:zK;return new Promise(function(i,a){r(e,function(e,r){if(e){if(t)return t(e);a(e)}var o;try{o=UK(r,n)}catch(e){if(t)return t(e,null);a(e)}if(t)return t(null,o);i(o)})})}function GK(e,t){return UK(UH(dz().readFileSync(e)),t)}var KK=Object.freeze({__proto__:null,Font:dK,Glyph:VB,Path:zz,BoundingBox:Rz,_parse:Z,parse:UK,load:WK,loadSync:GK}),qK=class e{sketches;constructor(e){e.length===0&&i(`CompoundSketch`,`Cannot create CompoundSketch with an empty array of sketches`),this.sketches=e}delete(){this.sketches.forEach(e=>{e.delete()})}get outerSketch(){return vA(this.sketches)}get innerSketches(){return this.sketches.slice(1)}get wires(){return aq(this)}face(){return iq(this)}extrude(e,t={}){return oq(this,e,t)}revolve(e,t={}){return sq(this,e,t)}loftWith(t,n={}){return Array.isArray(t)||!(t instanceof e)?i(`CompoundSketch.loftWith`,`A compound (face-with-holes) sketch can only loft to another compound sketch with the same number of sub-sketches.`):cq(this,t,n)}sweepSketch(){return i(`CompoundSketch.sweepSketch`,`Sweeping a compound (face-with-holes) profile is not supported — sweep its outer Sketch instead.`)}};function JK(e){let t={};e.defaultOrigin&&(t.defaultOrigin=e.defaultOrigin),e.defaultDirection&&(t.defaultDirection=e.defaultDirection);let n=new lq(e.wire,t);return e.baseFace&&(n.baseFace=e.baseFace),n}function YK(e){return new qK(e.map(JK))}function XK(e){if(e instanceof lq)return e;let t=e.sketches;if(Array.isArray(t)){let[e,...n]=t;if(e instanceof lq){for(let e of n)e.delete();return e}}i(`asSketch`,`Expected a single-wire profile to loft or sweep.`)}function ZK(e){let t;return t=e.baseFace?FA(e.baseFace,e.wire):j(NA(e.wire)),t}function QK(e){return EE(j(dO(e.wire.wrapped)))}function $K(e,t,{origin:n}={}){let r=j(NA(e.wire)),i=j(kM(r,n?AD(n):e.defaultOrigin,t?AD(t):[0,0,1]));return r[Symbol.dispose](),e.delete(),i}function eq(e,t,{extrusionDirection:n,extrusionProfile:r,twistAngle:i,origin:a}={}){let o=ID(UD(n?AD(n):e.defaultDirection),t),s=a?AD(a):e.defaultOrigin;if(r&&!i){let t=j(SM(e.wire,[...s],[...o],r));return e.delete(),t}if(i){let t=j(CM(e.wire,i,[...s],[...o],r));return e.delete(),t}let c=j(NA(e.wire)),l=j(OM(c,[...o]));return c[Symbol.dispose](),e.delete(),l}function tq(e,t,n={}){let r=Mk(e.wire),i=UD(ID(Fk(e.wire,1e-9),-1)),a=e.defaultDirection,o=ID(zD(i,a),-1),s=XK(t(ZD([...r],[...o],[...i]),[...r])),c={forceProfileSpineOthogonality:!0,...n};e.baseFace&&(c.support=e.baseFace.wrapped);let l=j(bM(s.wire,e.wire,c));return e.delete(),l}function nq(e,t,n={},r=!1){let i=[e,...(Array.isArray(t)?t:[t]).map(XK)],a=j(jM(i.map(e=>e.wire),n,r));return i.forEach(e=>{e.delete()}),a}var rq=(e,t)=>{let n=j(t(vA(e))),r=e.slice(1).map(e=>j(t(e)));if(r.length===0)return n;try{return j(KA(n,r,{unsafe:!0}))}finally{n.delete();for(let e of r)e.delete()}};function iq(e){let t=e.outerSketch.face(),n=LA(t,e.innerSketches.map(e=>e.wire));return t[Symbol.dispose](),n}function aq(e){return mj(e.sketches.map(e=>e.wire))}function oq(e,t,{extrusionDirection:n,extrusionProfile:r,twistAngle:i,origin:a}={}){let o=ID(UD(n?AD(n):e.outerSketch.defaultDirection),t);if(r&&!i)return rq(e.sketches,t=>SM(t.wire,a?AD(a):e.outerSketch.defaultOrigin,o,r));if(i)return rq(e.sketches,t=>CM(t.wire,i,a?AD(a):e.outerSketch.defaultOrigin,o,r));let s=iq(e),c=j(OM(s,o));return s[Symbol.dispose](),c}function sq(e,t,{origin:n}={}){let r=n?AD(n):e.outerSketch.defaultOrigin,i=t?AD(t):[0,0,1],a=iq(e),o=j(kM(a,r,i));return a[Symbol.dispose](),o}function cq(e,t,n={}){e.sketches.length!==t.sketches.length&&i(`CompoundSketch.loftWith`,`You need to loft with another compound with the same number of sketches`);let r=e.sketches.map((e,r)=>{let i=_A(t.sketches,r),a={};return n.ruled!==void 0&&(a.ruled=n.ruled),e.clone().loftWith(i.clone(),a,!0)}),a=iq(e),o=DE(j(dO(a.wrapped)));a[Symbol.dispose](),r.push(o,iq(t));let s=j(hj(r));for(let e of r)e[Symbol.dispose]();return s}var lq=class e{wire;_defaultOrigin;_defaultDirection;_baseFace;constructor(e,{defaultOrigin:t=[0,0,0],defaultDirection:n=[0,0,1]}={}){this.wire=e,this._defaultOrigin=AD(t),this._defaultDirection=AD(n),this.baseFace=null}get baseFace(){return this._baseFace}set baseFace(e){this._baseFace&&this._baseFace[Symbol.dispose](),this._baseFace=e&&DE(j(dO(e.wrapped)))}delete(){this.wire[Symbol.dispose](),this.baseFace&&this.baseFace[Symbol.dispose]()}clone(){let t=EE(j(dO(this.wire.wrapped))),n=new e(t,{defaultOrigin:this.defaultOrigin,defaultDirection:this.defaultDirection});return this.baseFace&&(n.baseFace=DE(j(dO(this.baseFace.wrapped)))),n}get defaultOrigin(){return this._defaultOrigin}set defaultOrigin(e){this._defaultOrigin=AD(e)}get defaultDirection(){return this._defaultDirection}set defaultDirection(e){this._defaultDirection=AD(e)}face(){return ZK(this)}wires(){return QK(this)}faces(){return this.face()}revolve(e,t={}){return $K(this,e,t)}extrude(e,t={}){return eq(this,e,t)}sweepSketch(e,t={}){return tq(this,e,t)}loftWith(e,t={},n=!1){return nq(this,e,t,n)}},uq=class{sketches;constructor(e){this.sketches=e}soleSketch(e){this.sketches.length!==1&&i(`Sketches.${e}`,`Multiple profiles — ${e} each sub-sketch individually.`);let t=vA(this.sketches);return t instanceof lq||i(`Sketches.${e}`,`${e} is only supported on single-wire profiles.`),t}face(){return this.sketches.length!==1&&i(`Sketches.face`,`Multiple profiles — use faces() to combine them.`),vA(this.sketches).face()}loftWith(e,t,n){return this.soleSketch(`loftWith`).loftWith(e,t,n)}sweepSketch(e,t){return this.soleSketch(`sweepSketch`).sweepSketch(e,t)}wires(){return mj(this.sketches.flatMap(e=>e instanceof lq?[e.wire]:e.sketches.map(e=>e.wire)))}faces(){return mj(this.sketches.map(e=>e.face()))}extrude(e,t={}){return mj(this.sketches.map(n=>n.extrude(e,t)))}revolve(e,t){return mj(this.sketches.map(n=>n.revolve(e,t)))}},dq={};async function fq(e,t=`default`,n=!1){if(!n&&dq[t])return O(dq[t]);let r;if(typeof e==`string`){let t;try{t=await fetch(e)}catch(t){return k(Do(M.FONT_FETCH_FAILED,`Failed to fetch font from ${e}: ${t instanceof Error?t.message:String(t)}`,t))}if(!t.ok)return k(Do(M.FONT_FETCH_FAILED,`Failed to fetch font from ${e}: HTTP ${t.status} ${t.statusText}`));r=await t.arrayBuffer()}else r=e;let i;try{i=KK.parse(r)}catch(e){return k(Do(M.FONT_PARSE_FAILED,`Failed to parse font data: ${e instanceof Error?e.message:String(e)}`,e))}let a=i;return dq[t]=a,dq.default||=a,O(a)}var pq=(e=`default`)=>dq[e],mq=function*(e){let t=null,n=null;for(let r of e){if(r.type===`Z`){t&&(yield t.close()),t=null;continue}let e=[-r.x,r.y];if(r.type===`M`){t&&(yield t.done()),t=new vR,t.movePointerTo(e),n=e;continue}n&&Math.abs(e[0]-n[0])<1e-9&&Math.abs(e[1]-n[1])<1e-9||(r.type===`L`&&t?.lineTo(e),r.type===`C`&&t?.cubicBezierCurveTo(e,[-r.x1,r.y1],[-r.x2,r.y2]),r.type===`Q`&&t?.quadraticBezierCurveTo(e,[-r.x1,r.y1]),n=e)}};function hq(e,{startX:t=0,startY:n=0,fontSize:r=16,fontFamily:a=`default`}={}){let o=pq(a);o||=pq(),o||i(`text`,`No fonts loaded. Call loadFont() before using text functions.`);let s=o.getPath(e,-t,-n,r);return sR(Array.from(mq(s.commands))).mirror([0,0])}var gq={XY:{dir:[0,0,1],xAxis:[1,0,0]},XZ:{dir:[0,-1,0],xAxis:[1,0,0]},YZ:{dir:[1,0,0],xAxis:[0,1,0]},YX:{dir:[0,0,-1],xAxis:[0,1,0]},ZX:{dir:[0,1,0],xAxis:[0,0,1]},ZY:{dir:[-1,0,0],xAxis:[0,0,1]},front:{dir:[0,-1,0],xAxis:[1,0,0]},back:{dir:[0,1,0],xAxis:[-1,0,0]},right:{dir:[-1,0,0],xAxis:[0,-1,0]},left:{dir:[1,0,0],xAxis:[0,1,0]},bottom:{dir:[0,0,1],xAxis:[1,0,0]},top:{dir:[0,0,-1],xAxis:[1,0,0]}};function _q(e){return typeof e==`string`&&e in gq}var vq=e=>{try{var t=IT();return e.IsNull()?[]:uD(t.u(U(e))).map(e=>j(wk(e)))}catch(e){t.e=e}finally{t.d()}};function yq(e,t,n=!0){let r=H().projectEdges(e.wrapped,[...t.position],[...t.direction],[...t.xAxis]),i=[...vq(r.visible.sharp),...vq(r.visible.smooth),...vq(r.visible.outline)],a=[...vq(r.hidden.sharp),...vq(r.hidden.smooth),...vq(r.hidden.outline)],o;if(n)o=a;else{for(let e of a)e[Symbol.dispose]();o=[]}return{visible:i,hidden:o}}function bq(e=[0,0,0],t=[0,0,1],n){if(BD(t)<1e-12)return k(P(`CAMERA_ZERO_DIRECTION`,`Camera direction cannot be a zero-length vector`));let r;if(n)r=UD(n);else{let e=zD([0,0,1],t);BD(e)<1e-12&&(e=zD([0,1,0],t)),BD(e)<1e-12&&(e=zD([1,0,0],t)),r=UD(e)}let i=UD(zD(t,r));return O({position:e,direction:UD(t),xAxis:r,yAxis:i})}function xq(e,t){let n=UD(FD(e.position,t));return bq(e.position,n)}function Sq(e){let t=gq[e];return bq([0,0,0],t.dir,t.xAxis)}function Cq(e,t,n=!0){return yq(e,t,n)}var wq=(e,n=1e-7)=>{if(e.length===0)return[];let r=new VL(e.length);e.forEach(e=>{let[t,i]=e.firstPoint;r.add(t-n,i-n,t+n,i+n)}),r.finish();let a=[],o=new Set;return e.forEach((s,c)=>{if(o.has(c))return;let l=[s],u=c;o.add(c);let d=e.length;for(;;){d--<0&&i(`stitchCurves`,`Infinite loop detected`);let[s,c]=t(l,l.length-1).lastPoint,f=r.search(s-n,c-n,s+n,c+n),p=t=>Math.abs((u-t)%e.length),m=f.filter(e=>!o.has(e)).map(n=>[t(e,n),n,p(n)]).sort(([,,e],[,,t])=>e-t);if(m.length===0){a.push(l);break}let[h,g]=t(m,0);l.push(h),o.add(g),u=g}}),a},Tq=class extends _R{plane;constructor(e,t){super(),this.plane=e&&typeof e!=`string`?{...e}:j(eO(e??`XY`,t))}delete(){this.pendingCurves=[]}sagittaArcTo(e,t){return super.sagittaArcTo(e,-t)}buildWire(){try{var e=IT();this.pendingCurves.length||i(`Sketcher.buildWire`,`No lines to convert into a wire`);let t=e.u(new XT);return j(MA(wL(this.pendingCurves,this.plane).map(e=>t.register(e))))}catch(t){e.e=t}finally{e.d()}}done(){return new lq(this.buildWire(),{defaultOrigin:this.plane.origin,defaultDirection:this.plane.zDir})}close(){return this._closeSketch(),this.done()}closeWithMirror(){EI(this.pointer,this.firstPoint)&&i(`Sketcher.closeWithMirror`,`Cannot close with a mirror when the sketch is already closed`);let e=this.buildWire(),t=nO(this.plane,this.pointer),n=zD(UD(FD(t,nO(this.plane,this.firstPoint))),this.plane.zDir),r=j(uO(e.wrapped));return new lq(j(MA([e,EE(j(uO(H().mirror(r,AD(t),AD(n)))))])),{defaultOrigin:this.plane.origin,defaultDirection:this.plane.zDir})}closeWithCustomCorner(e,t=`fillet`){return this._closeSketch(),this._customCornerLastWithFirst(e,t),this.done()}},Eq=class extends _R{face;_bounds;constructor(e,t=[0,0]){super(t),this.face=DE(j(dO(e.wrapped))),this._bounds=bO(e)}_convertToUV([e,t]){let{uMin:n,uMax:r,vMin:i,vMax:a}=this._bounds;return[n+e*(r-n),i+t*(a-i)]}_convertFromUV([e,t]){let{uMin:n,uMax:r,vMin:i,vMax:a}=this._bounds;return[(e-n)/(r-n),(t-i)/(a-i)]}_adaptSurface(){return H().extractSurfaceFromFace(this.face.wrapped)}buildWire(){let e=H(),t=this._adaptSurface(),n=j(MA(this.pendingCurves.map(n=>TE(e.buildEdgeOnSurface(n.wrapped,t)))));return e.buildCurves3d(n.wrapped),n}done(){try{var e=IT();let t=e.u(new XT),n=this.buildWire(),r=new lq(n);if(Rk(n)){let e=t.register(r.clone().face()),n=xO(e,.5,.5),i=ID(wO(e),-1);r.defaultOrigin=[n[0],n[1],n[2]],r.defaultDirection=[i[0],i[1],i[2]]}else{let e=Mk(n),t=wO(this.face,[e[0],e[1],e[2]]);r.defaultOrigin=[e[0],e[1],e[2]],r.defaultDirection=[t[0],t[1],t[2]]}return r.baseFace=this.face,r}catch(t){e.e=t}finally{e.d()}}close(){return this._closeSketch(),this.done()}closeWithMirror(){return this._closeWithMirror(),this.close()}closeWithCustomCorner(e,t=`fillet`){return this._closeSketch(),this._customCornerLastWithFirst(e,t),this.done()}},Dq=(e,t={})=>{try{var n=IT();let r=t.plane&&typeof t.plane!=`string`?{...t.plane}:j(eO(t.plane??`XY`,t.origin));return new lq(j(MA([n.u(new XT).register(CA(e,r.origin,r.zDir))])),{defaultOrigin:[...r.origin],defaultDirection:[...r.zDir]})}catch(e){n.e=e}finally{n.d()}},Oq=(e=1,t=2,n={})=>{try{var r=IT();let i=n.plane&&typeof n.plane!=`string`?{...n.plane}:j(eO(n.plane??`XY`,n.origin)),a=i.xDir,o=e,s=t;return t>e&&(a=JD(a,i.zDir,90*JE),o=t,s=e),new lq(j(MA([r.u(new XT).register(j(wA(o,s,i.origin,i.zDir,a)))])),{defaultOrigin:[...i.origin],defaultDirection:[...i.zDir]})}catch(e){r.e=e}finally{r.d()}},kq=(e,t,n={})=>(n.plane&&typeof n.plane!=`string`?new Tq(n.plane):new Tq(n.plane,n.origin)).movePointerTo([-e/2,-t/2]).hLine(e).vLine(t).hLine(-e).vLine(-t).done(),Aq=(e,t,n=0,r={})=>{let i=TR(e,t,n).sketchOnPlane(r.plane,r.origin),a={};return i.defaultOrigin&&(a.defaultOrigin=i.defaultOrigin),i.defaultDirection&&(a.defaultDirection=i.defaultDirection),new lq(i.wire,a)},jq=(e,t,n=0,r={})=>{let i=[...Array(t).keys()].map(n=>{let r=-(Math.PI*2/t)*n;return[e*Math.sin(r),e*Math.cos(r)]}),a=r.plane&&typeof r.plane!=`string`?new Tq(r.plane):new Tq(r.plane,r.origin),o=yA(i),s=a.movePointerTo([_A(o,0),_A(o,1)]);return n?i.forEach(e=>s.sagittaArcTo([_A(e,0),_A(e,1)],n)):i.forEach(e=>s.lineTo([_A(e,0),_A(e,1)])),s.done()},Mq=(e,t,n=0)=>{let r=Math.PI/t,i=Math.cos(r)*e;return n>=0?i:i+n},Nq=(e,t)=>{let n=[...TO(e)],r=[...wO(e)];return new lq(j(Gk(OO(e),t)),{defaultOrigin:n,defaultDirection:r})},Pq=(e,t={},{pointsCount:n=400,start:r=0,stop:i=1}={},a={})=>{try{var o=IT();let s=o.u(new XT),c=t.plane&&typeof t.plane!=`string`?{...t.plane}:j(eO(t.plane??`XY`,t.origin)),l=(i-r)/n,u=[...Array(n+1).keys()].map(t=>{let n=e(r+t*l);return nO(c,n)});return new lq(j(MA([s.register(j(OA(u,a)))])),{defaultOrigin:[...c.origin],defaultDirection:[...c.zDir]})}catch(e){o.e=e}finally{o.d()}},Fq=(e,t,n,r=[0,0,0],i=[0,0,1],a=!1)=>new lq(j(MA([TA(e,t,n,AD(r),AD(i),a)]))),Iq=(e,t,n)=>new Tq().movePointerTo([-e/2,t/2]).hLine(e).vLine(-t).hLine(-e).close().extrude(n),Lq=(e,t)=>EI(e,t,wI*100),Rq=(e,t,n,r)=>{let i=e[0]-t[0],a=e[1]-t[1],o=n[0]-r[0],s=n[1]-r[1],c=i*s-a*o;if(Math.abs(c)<1e-12)return null;let l=e[0]*t[1]-e[1]*t[0],u=n[0]*r[1]-n[1]*r[0];return[(l*o-u*i)/c,(l*s-u*a)/c]};function zq(e,t,n,r,i){let a=xL(t,n,r.original.lastPoint);e(r),e(a)}function Bq(e,t,n,r,i){let a=pL(t,n);e(r),e(a)}function Vq(e,t,n,r,i){let a=Rq(r.offset instanceof lL?OI(t,r.offset.tangentAt(1)):r.offset.firstPoint,t,n,i.offset instanceof lL?DI(n,i.offset.tangentAt(0)):i.offset.lastPoint);if(!a){let i=pL(t,n);e(r),e(i);return}let o=jI([(t[0]+n[0])/2,(t[1]+n[1])/2],a),s=jI(t,n);if(s<1e-18||o>16*s){let i=pL(t,n);e(r),e(i);return}let c=pL(t,a),l=pL(a,n);e(r),e(c),e(l)}var Hq={round:zq,bevel:Bq,miter:Vq};function Uq(e,t,n){let r=n.length===1?Ao(n,0,`rawOffsets`):Wq(n,e.original.lastPoint),a=Ao(e.offset.splitAt([r],wI),0,`rawOffsets`),o=t.offset.splitAt([r],wI).at(-1);return o||i(`offset.rawOffsets`,`Split produced no trailing curve segment`),{splitPrevious:{offset:a,original:e.original},splitCurrent:{offset:o,original:t.original}}}function Wq(e,t){let n=Ao(e,0,`selectClosestIntersection`),r=jI(n,t);for(let i=1;i<e.length;i++){let a=Ao(e,i,`selectClosestIntersection`),o=jI(a,t);o<r&&(r=o,n=a)}return n}function Gq(e){let t=new Map,n=(e,n)=>{let r=t.get(e)||[];t.set(e,[...r,...n])},r=new VL(e.length);for(let t of e){let[[e,n],[i,a]]=t.boundingBox.bounds;r.add(e,n,i,a)}return r.finish(),e.forEach((t,i)=>{let[[a,o],[s,c]]=t.boundingBox.bounds,l=r.search(a,o,s,c);for(let r of l){if(r<=i)continue;let a=Ao(e,r,`offsetBlueprint`),{intersections:o,commonSegmentsPoints:s}=j(KL(t,a,wI)),c=[...o,...s].filter(e=>{let n=Lq(e,t.firstPoint)||Lq(e,t.lastPoint),r=Lq(e,a.firstPoint)||Lq(e,a.lastPoint);return!(n&&r)});c.length&&(n(i,c),n(r,c))}}),t}function Kq(e,t,n={}){let r=e.orientation===`clockwise`?-t:t,a=e.curves.map(e=>({offset:YL(e,r),original:e})),o=[],s=null,c=a.at(-1);if(!c)return[];function l(e){if(e instanceof lL){o.push(e);return}s?e.offset instanceof lL?o.push(e.offset):Lq(e.offset.firstPoint,e.offset.lastPoint)||o.push(pL(e.offset.firstPoint,e.offset.lastPoint)):s=e}let u=function*(){for(let e of a.slice(0,-1))yield e;s||i(`offset.rawOffsets`,`No saved curve after iterating offset segments`),yield s};for(let e of u()){let t=c.offset.lastPoint,r=e.offset.firstPoint;if(Lq(t,r)){l(c),c=e;continue}let i=[];if(c.offset instanceof lL&&e.offset instanceof lL){let{intersections:t,commonSegmentsPoints:n}=j(KL(c.offset,e.offset,wI/100));i=[...t,...n]}if(i.length>0){let{splitPrevious:t,splitCurrent:n}=Uq(c,e,i);l(t),c=n;continue}let a=Hq[n.lineJoinType??`round`];a(l,t,r,c,e),c=e}return l(c),o}function qq(e,n,r={}){let i=Kq(e,n,r);if(i.length<2)return null;let a=Gq(i);if(!a.size){let t=new LL(i);return e.intersects(t)?null:t}let o=i.flatMap((e,t)=>{if(!a.has(t))return e;let n=a.get(t)||[];return e.splitAt(n,wI*100)}),s=new VL(e.curves.length);for(let t of e.curves){let[[e,n],[r,i]]=t.boundingBox.bounds;s.add(e,n,r,i)}s.finish();let c=Math.abs(n),l=o.filter(n=>{let[[r,i],[a,o]]=n.boundingBox.bounds;return!s.search(r-c,i-c,a+c,o+c).some(r=>t(e.curves,r).distanceFrom(n)<c-wI)});if(!l.length)return null;let u=wq(l).filter(e=>e.length>1).map(e=>new LL(e)).filter(e=>e.isClosed());return u.length?u.length===1?Ao(u,0,`offsetBlueprint`):new eR(u):null}var Jq=e=>{let t=Ao(e,0,`fuseAll`);for(let n=1;n<e.length;n++)t=sz(t,Ao(e,n,`fuseAll`));return t};function Yq(e,t,n={}){if(e instanceof LL)return qq(e,t,n);if(e instanceof eR)return Jq(e.blueprints.map(e=>Yq(e,t,n)));if(e instanceof tR){let r=Jq(e.blueprints.slice(1).map(e=>Yq(e,-t,n)));return lz(Yq(Ao(e.blueprints,0,`offset`),t,n),r)}return null}function Xq(e,t){return e instanceof LL?new LL(fL(e.curves,t)):e instanceof tR?new tR(e.blueprints.map(e=>Xq(e,t))):e instanceof eR?new eR(e.blueprints.map(e=>Xq(e,t))):e}function Zq(e,t,n,r){let a=()=>!0;r&&(a=r.shouldKeep.bind(r));let o=[vA(t.curves)],s=(t,r)=>{a({firstCurve:t,secondCurve:r,point:t.lastPoint})?o.push(...e(t,r,n)):o.push(t,r)};t.curves.slice(1).forEach(e=>{let t=o.pop();t||i(`customCorners.modifyCorners`,`Unexpected empty curve stack during filleting`),s(t,e)});let c=o.at(-1);if(c||i(`customCorners.modifyCorners`,`Unexpected empty curve list during corner modification`),EI(vA(o).firstPoint,c.lastPoint)&&o.length>1){let e=o.pop(),t=o.shift();(!e||!t)&&i(`customCorners.modifyCorners`,`Unexpected empty curve stack during close-and-fillet`),s(e,t)}return new LL(o)}function Qq(e,t,n,r){return t instanceof LL?Zq(e,t,n,r):t instanceof tR?new tR(t.blueprints.map(t=>Zq(e,t,n,r))):t instanceof eR?new eR(t.blueprints.map(t=>Qq(e,t,n,r)).filter(e=>e!==null)):null}function $q(e,t,n){return Qq(ZL,e,t,n)}function eJ(e,t,n){return Qq(QL,e,t,n)}function tJ(e,t){return e instanceof LL?JK(t):e instanceof tR?YK(t):new uq(t.map(e=>Array.isArray(e)?YK(e):JK(e)))}var nJ=class e{innerShape;constructor(e=null){this.innerShape=e}clone(){return new e(this.innerShape?.clone()||null)}serialize(){if(!this.innerShape)return JSON.stringify({type:`Empty`});function e(t){if(t instanceof tR)return{type:`CompoundBlueprint`,blueprints:t.blueprints.map(e)};if(t instanceof eR)return{type:`Blueprints`,blueprints:t.blueprints.map(e)};if(t instanceof LL)return{type:`Blueprint`,curves:t.curves.map(e=>e.serialize())};i(`Drawing.serialize`,`Unknown shape type for serialization`)}return JSON.stringify(e(this.innerShape))}get boundingBox(){return this.innerShape?this.innerShape.boundingBox:new sL}stretch(t,n,r){return this.innerShape?new e(this.innerShape.stretch(t,n,r)):new e}get repr(){return this.innerShape===null?`=== empty shape`:this.innerShape.repr}rotate(t,n){return this.innerShape?new e(this.innerShape.rotate(t,n)):new e}translate(t,n=0){return this.innerShape?new e(typeof t==`number`?this.innerShape.translate(t,n):this.innerShape.translate(t)):new e}scale(t,n){return this.innerShape?new e(this.innerShape.scale(t,n)):new e}mirror(t,n,r){return this.innerShape?new e(this.innerShape.mirror(t,n,r)):new e}cut(t){return new e(lz(this.innerShape,t.innerShape))}fuse(t){return new e(sz(this.innerShape,t.innerShape))}intersect(t){return new e(uz(this.innerShape,t.innerShape))}fillet(t,n){let r=n&&n(CR());return new e($q(this.innerShape,t,r))}chamfer(t,n){let r=n&&n(CR());return new e(eJ(this.innerShape,t,r))}sketchOnPlane(e,t){this.innerShape||i(`Drawing`,`Trying to sketch an empty drawing`);let n=this.innerShape.sketchOnPlane(e,t);return tJ(this.innerShape,n)}sketchOnFace(e,t){this.innerShape||i(`Drawing`,`Trying to sketch an empty drawing`);let n=this.innerShape.sketchOnFace(e,t);return tJ(this.innerShape,n)}punchHole(e,t,n={}){return this.innerShape?this.innerShape.punchHole(e,t,n):e}toSVG(e){return this.innerShape?.toSVG(e)||``}toSVGViewBox(e=1){return this.innerShape?.toSVGViewBox(e)||``}toSVGPaths(){return this.innerShape?.toSVGPaths()||[]}offset(t,n={}){return new e(Yq(this.innerShape,t,n))}approximate(t,n={}){return t!==`svg`&&i(`Drawing.approximate`,`Only 'svg' is supported for now`),new e(Xq(this.innerShape,n))}get blueprint(){if(!(this.innerShape instanceof LL)){if(this.innerShape instanceof eR&&this.innerShape.blueprints.length===1&&this.innerShape.blueprints[0]instanceof LL)return this.innerShape.blueprints[0];i(`Drawing.blueprint`,`This drawing is not a blueprint`)}return this.innerShape}};function rJ(e){function t(e){if(e.type===`CompoundBlueprint`)return new tR(e.blueprints.map(t));if(e.type===`Blueprints`)return new eR(e.blueprints.map(t));if(e.type===`Blueprint`)return new LL(e.curves.map(e=>cL(e)));i(`Drawing.deserialize`,`Unknown shape type for deserialization`)}return new nJ(t(JSON.parse(e)))}var iJ=class extends _R{constructor(e=[0,0]){super(),this.pointer=e,this.firstPoint=e,this.pendingCurves=[]}done(){return new nJ(new LL(this.pendingCurves))}close(){return this._closeSketch(),this.done()}closeWithMirror(){return this._closeWithMirror(),this.close()}closeWithCustomCorner(e,t=`fillet`){return this._closeSketch(),this._customCornerLastWithFirst(e,t),this.done()}};function aJ(e){let t=new iJ;return e&&t.movePointerTo(e),t}function oJ(e,t,n=0){return new nJ(TR(e,t,n))}var sJ=oJ;function cJ(e){return new nJ(new LL([gL(e)]))}function lJ(e,t){let[n,r]=[e,t].sort((e,t)=>e-t);return new nJ(new LL([_L(r,n,r===e?[1,0]:[0,1])]))}function uJ(e){return aJ().movePointerTo([-e,0]).sagittaArc(2*e,0,e).sagittaArc(-2*e,0,e).close()}function dJ(e,t){return aJ().movePointerTo([-e,0]).halfEllipse(2*e,0,t).halfEllipse(-2*e,0,t).close()}function fJ(e,t,n=0){return new nJ(wR(e,t,n))}function pJ(e,{startX:t=0,startY:n=0,fontSize:r=16,fontFamily:i=`default`}={}){return new nJ(hq(e,{startX:t,startY:n,fontSize:r,fontFamily:i}))}var mJ=(e,t={},n={})=>{e.length<2&&i(`drawPointsInterpolation`,`Need at least 2 points for interpolation, got ${e.length}`);let r=[j(bL(e,t))],a=e[0],o=e[e.length-1];return n.closeShape&&a&&o&&!EI(a,o)&&r.push(pL(o,a)),new nJ(new LL(r))},hJ=(e,{pointsCount:t=400,start:n=0,stop:r=1,closeShape:i=!1}={},a={})=>{let o=(r-n)/t;return mJ([...Array(t+1).keys()].map(t=>e(n+t*o)),a,{closeShape:i})},gJ=e=>{try{var t=IT();let n=t.u(new XT),r=sJ(1e3,1e3).sketchOnPlane();n.register(r.wire);let i=n.register(j(NA(r.wire))),a=wq(e.map(e=>NL(e,i))).map(e=>new LL(e));return a.length===0?new nJ:a.length===1?new nJ(a[0]):new nJ(new eR(a))}catch(e){t.e=e}finally{t.d()}};function _J(e,t=`front`){let n;n=typeof t==`string`?j(Sq(t)):t;let{visible:r,hidden:i}=Cq(e,n);try{return{visible:gJ(r),hidden:gJ(i)}}finally{for(let e of r)e[Symbol.dispose]();for(let e of i)e[Symbol.dispose]()}}function vJ(e){try{var t=IT();let n=t.u(new XT),r=n.register(DE(j(dO(e.wrapped)))),i=wq(uD(n.register(OO(r))).map(t=>NL(t,e))).map(e=>new LL(e));return i.length===0?new nJ:i.length===1?new nJ(i[0]):new nJ(new eR(i))}catch(e){t.e=e}finally{t.d()}}function yJ(e,t,n){return n===void 0?e.sketchOnPlane(t):e.sketchOnPlane(t,n)}function bJ(e,t){return e.fuse(t)}function xJ(e,t){return e.cut(t)}function SJ(e,t){return e.intersect(t)}function CJ(e,t,n){return e.fillet(t,n)}function wJ(e,t,n){return e.chamfer(t,n)}function TJ(e,t,n=0){return typeof t==`number`?e.translate(t,n):e.translate(t)}function EJ(e,t,n){return e.rotate(t,n)}function DJ(e,t,n){return e.scale(t,n)}function OJ(e,t,n,r){return e.mirror(t,n,r)}function kJ(e){let t=e.clone();return t.reverse(),t}function AJ(e){return e.boundingBox}function jJ(e){return e.firstPoint}function MJ(e){return e.lastPoint}function NJ(e,t,n){return e.splitAt(t,n)}function PJ(e,t,n){return e.parameter(t,n)}function FJ(e,t){return e.tangentAt(t)}function IJ(e,t){return e.isOnCurve(t)}function LJ(e,t){return e.distanceFrom(t)}function RJ(e){return e.length===0?k(P(M.BLUEPRINT_EMPTY_CURVES,`createBlueprint: at least one curve is required`)):O(new LL(e))}function zJ(e){return e.length===0?k(P(M.COMPOUND_BLUEPRINT_EMPTY,`createCompoundBlueprint: at least one blueprint (outer boundary) is required`)):O(new tR(e))}function BJ(e){return e.boundingBox}function VJ(e){return e.orientation}function HJ(e,t){return e.isInside(t)}function UJ(e){return e.toSVGPathD()}function WJ(e,t,n){return e.translate(t,n)}function GJ(e,t,n){return e.rotate(t,n)}function KJ(e,t,n){return e.scale(t,n)}function qJ(e,t,n,r){return e.mirror(t,n,r)}function JJ(e,t,n,r){return e.stretch(t,n,r)}function YJ(e,t,n){return e.sketchOnPlane(t,n)}function XJ(e,t,n){return e.sketchOnFace(t,n)}function ZJ(e,t){return n(e,t*3)}function QJ(e,t){return n(e,t)}function $J(e){let t=[`# brepjs OBJ export`],n=e.vertices.length/3;for(let r=0;r<n;r++){let[n,i,a]=ZJ(e.vertices,r);t.push(`v ${n} ${i} ${a}`)}let r=e.normals.length/3;for(let n=0;n<r;n++){let[r,i,a]=ZJ(e.normals,n);t.push(`vn ${r} ${i} ${a}`)}let i=n=>{let[r,i,a]=QJ(e.triangles,n);t.push(`f ${r+1}//${r+1} ${i+1}//${i+1} ${a+1}//${a+1}`)};if(e.faceGroups.length>0)for(let n of e.faceGroups){t.push(`g face_${n.faceId}`);let e=n.count/3;for(let t=0;t<e;t++)i(n.start+t*3)}else{let t=e.triangles.length/3;for(let e=0;e<t;e++)i(e*3)}return t.join(`
|
|
25
25
|
`)+`
|
|
26
|
-
`}var
|
|
26
|
+
`}var eY=5126,tY=5125,nY=34962,rY=34963,iY=[-Math.SQRT1_2,0,0,Math.SQRT1_2];function aY(e){return e===`Z`?[{mesh:0}]:[{name:`Z_up_to_Y_up`,rotation:iY,children:[1]},{mesh:0}]}function oY(e){let n=[1/0,1/0,1/0],r=[-1/0,-1/0,-1/0];for(let i=0;i<e.length;i+=3)for(let a=0;a<3;a++){let o=t(e,i+a);o<t(n,a)&&(n[a]=o),o>t(r,a)&&(r[a]=o)}return{min:n,max:r}}function sY(e){return e+3&-4}function cY(e){let t=new Uint8Array(e),n=8192,r=[];for(let e=0;e<t.length;e+=n)r.push(String.fromCharCode(...t.subarray(e,e+n)));return btoa(r.join(``))}function lY(e,t){let n=pY(e,`base64`,t);return JSON.stringify(n)}function uY(e,t){let{doc:n,binBuffer:r}=mY(e,t),i=JSON.stringify(n),a=new TextEncoder().encode(i),o=sY(a.length),s=new Uint8Array(o);s.set(a);for(let e=a.length;e<o;e++)s[e]=32;let c=sY(r.byteLength),l=new Uint8Array(c);l.set(new Uint8Array(r));let u=20+o+8+c,d=new ArrayBuffer(u),f=new DataView(d),p=new Uint8Array(d);f.setUint32(0,1179937895,!0),f.setUint32(4,2,!0),f.setUint32(8,u,!0),f.setUint32(12,o,!0),f.setUint32(16,1313821514,!0),p.set(s,20);let m=20+o;return f.setUint32(m,c,!0),f.setUint32(m+4,5130562,!0),p.set(l,m+8),d}function dY(e,t,n,r,i){return[{bufferView:0,componentType:tY,count:e.length,type:`SCALAR`},{bufferView:1,componentType:eY,count:t.length/3,type:`VEC3`,min:r,max:i},{bufferView:2,componentType:eY,count:n.length/3,type:`VEC3`}]}function fY(e,t,n){return[{buffer:0,byteOffset:0,byteLength:e,target:rY},{buffer:0,byteOffset:sY(e),byteLength:t,target:nY},{buffer:0,byteOffset:sY(e)+t,byteLength:n,target:nY}]}function pY(e,t,n){let{vertices:r,normals:i,triangles:a}=e,o=n?.materials;if(o&&o.size>0&&e.faceGroups.length>0)return bY(e,t,o,n.upAxis??`Y`);let s=a.byteLength,c=r.byteLength,l=i.byteLength,u=sY(s)+c+l,{min:d,max:f}=oY(r),p={asset:{version:`2.0`,generator:`brepjs`},scene:0,scenes:[{nodes:[0]}],nodes:aY(n?.upAxis??`Y`),meshes:[{primitives:[{attributes:{POSITION:1,NORMAL:2},indices:0}]}],accessors:dY(a,r,i,d,f),bufferViews:fY(s,c,l),buffers:[{byteLength:u}]};if(t===`base64`){let t=SY(e);p.buffers[0]={byteLength:u,uri:`data:application/octet-stream;base64,`+cY(t)}}return p}function mY(e,t){let n=t?.materials;if(n&&n.size>0&&e.faceGroups.length>0){let{doc:r,binBuffer:i}=xY(e,n,t.upAxis??`Y`);return{doc:r,binBuffer:i}}return{doc:pY(e,`glb`,t),binBuffer:SY(e)}}function hY(e,n){let{vertices:r,normals:i,triangles:a,faceGroups:o}=e,s=[],c=new Map,l=new Map;for(let e of n.values()){if(l.has(e))continue;let t=JSON.stringify([e.baseColor,e.metallic,e.roughness,e.name]),n=c.get(t);if(n!==void 0)l.set(e,n);else{let n=s.length;c.set(t,n),l.set(e,n),s.push({name:e.name??`material_${n}`,pbrMetallicRoughness:{baseColorFactor:e.baseColor??[.8,.8,.8,1],metallicFactor:e.metallic??0,roughnessFactor:e.roughness??.5}})}}let u=new Map;for(let e=0;e<o.length;e++){let t=_A(o,e),r=n.get(t.faceId),i=r===void 0?-1:l.get(r)??-1,a=u.get(i);a?a.push(e):u.set(i,[e])}let d=[];for(let[e,n]of u){let r=0;for(let e of n)r+=_A(o,e).count;let i=new Uint32Array(r),s=0;for(let e of n){let n=_A(o,e);for(let e=n.start;e<n.start+n.count;e++)i[s++]=t(a,e)}d.push({indices:i,materialIdx:e})}let f=0,p=[];for(let e of d){let t=e.indices.byteLength;p.push({byteOffset:f,byteLength:t}),f=sY(f+t)}let m=f;return{primitiveData:d,indexBufferInfos:p,verticesOffset:m,totalByteLength:m+r.byteLength+i.byteLength,uniqueMaterials:s}}function gY(e,t,n,r){let{vertices:i,normals:a}=e,{min:o,max:s}=oY(i),c=r.length;r.push({buffer:0,byteOffset:t,byteLength:i.byteLength,target:nY});let l=n.length;n.push({bufferView:c,componentType:eY,count:i.length/3,type:`VEC3`,min:o,max:s});let u=r.length;r.push({buffer:0,byteOffset:t+i.byteLength,byteLength:a.byteLength,target:nY});let d=n.length;return n.push({bufferView:u,componentType:eY,count:a.length/3,type:`VEC3`}),{verticesAccIdx:l,normalsAccIdx:d}}function _Y(e,t,n,r,i,a){let o=[];for(let s=0;s<e.length;s++){let c=_A(e,s),l=_A(t,s),u=a.length;a.push({buffer:0,byteOffset:l.byteOffset,byteLength:l.byteLength,target:rY});let d=i.length;i.push({bufferView:u,componentType:tY,count:c.indices.length,type:`SCALAR`});let f={attributes:{POSITION:n,NORMAL:r},indices:d};c.materialIdx>=0&&(f.material=c.materialIdx),o.push(f)}return o}function vY(e,t,n=`Y`){let{primitiveData:r,indexBufferInfos:i,verticesOffset:a,totalByteLength:o,uniqueMaterials:s}=t,c=[],l=[],{verticesAccIdx:u,normalsAccIdx:d}=gY(e,a,c,l),f=_Y(r,i,u,d,c,l);return{asset:{version:`2.0`,generator:`brepjs`},scene:0,scenes:[{nodes:[0]}],nodes:aY(n),meshes:[{primitives:f}],accessors:c,bufferViews:l,buffers:[{byteLength:o}],materials:s}}function yY(e,t){let{vertices:n,normals:r}=e,{primitiveData:i,indexBufferInfos:a,verticesOffset:o,totalByteLength:s}=t,c=new ArrayBuffer(s),l=new Uint8Array(c);for(let e=0;e<i.length;e++){let t=_A(i,e),n=_A(a,e);l.set(new Uint8Array(t.indices.buffer,t.indices.byteOffset,t.indices.byteLength),n.byteOffset)}return l.set(new Uint8Array(n.buffer,n.byteOffset,n.byteLength),o),l.set(new Uint8Array(r.buffer,r.byteOffset,r.byteLength),o+n.byteLength),c}function bY(e,t,n,r=`Y`){let i=hY(e,n),a=vY(e,i,r);if(t===`base64`){let t=yY(e,i);a.buffers[0]={byteLength:i.totalByteLength,uri:`data:application/octet-stream;base64,`+cY(t)}}return a}function xY(e,t,n=`Y`){let r=hY(e,t);return{doc:vY(e,r,n),binBuffer:yY(e,r)}}function SY(e){let{vertices:t,normals:n,triangles:r}=e,i=r.byteLength,a=t.byteLength,o=n.byteLength,s=sY(i)+a+o,c=new ArrayBuffer(s),l=new Uint8Array(c);return l.set(new Uint8Array(r.buffer,r.byteOffset,i),0),l.set(new Uint8Array(t.buffer,t.byteOffset,a),sY(i)),l.set(new Uint8Array(n.buffer,n.byteOffset,o),sY(i)+a),c}function CY(e,t){let n=t?.layer??`0`,r=[];r.push(`0`,`SECTION`,`2`,`HEADER`),r.push(`9`,`$ACADVER`,`1`,`AC1009`),r.push(`0`,`ENDSEC`);let i=new Set([n]);for(let t of e)t.layer&&i.add(t.layer);r.push(`0`,`SECTION`,`2`,`TABLES`),r.push(`0`,`TABLE`,`2`,`LAYER`,`70`,String(i.size));for(let e of i)r.push(`0`,`LAYER`,`2`,e,`70`,`0`,`62`,`7`,`6`,`CONTINUOUS`);r.push(`0`,`ENDTAB`),r.push(`0`,`ENDSEC`),r.push(`0`,`SECTION`,`2`,`ENTITIES`);for(let t of e){let e=t.layer??n;if(t.type===`LINE`)r.push(`0`,`LINE`,`8`,e,`10`,String(t.start[0]),`20`,String(t.start[1]),`30`,`0`,`11`,String(t.end[0]),`21`,String(t.end[1]),`31`,`0`);else{r.push(`0`,`LWPOLYLINE`,`8`,e,`90`,String(t.points.length),`70`,t.closed?`1`:`0`);for(let e of t.points)r.push(`10`,String(e[0]),`20`,String(e[1]))}}return r.push(`0`,`ENDSEC`),r.push(`0`,`EOF`),r.join(`
|
|
27
27
|
`)+`
|
|
28
|
-
`}function
|
|
29
|
-
`);n.push(` <colorgroup id="2">\n${t}\n </colorgroup>`)}if(t.length>0){let e=t.map(e=>{let t=e.displayColor===void 0?`#FFFFFFFF`:
|
|
30
|
-
`);n.push(` <basematerials id="3">\n${e}\n </basematerials>`)}return n}function
|
|
28
|
+
`}function wY(e,t){let n=t?.curveSegments??32,r=[],i=TY(e);for(let e of i)for(let t of e.curves)r.push(...EY(t,n));return CY(r,t)}function TY(e){if(`curves`in e&&Array.isArray(e.curves))return[e];if(`blueprints`in e&&Array.isArray(e.blueprints)){let t=[];for(let n of e.blueprints)t.push(...TY(n));return t}return[]}function EY(e,t){return e.geomType===`LINE`?[{type:`LINE`,start:e.firstPoint,end:e.lastPoint}]:[DY(e,t)]}function DY(e,t){let n=e.firstParameter,r=e.lastParameter,i=[];for(let a=0;a<=t;a++){let o=n+(r-n)*(a/t);i.push(e.value(o))}return{type:`POLYLINE`,points:i}}var OY=new Uint32Array(256);for(let e=0;e<256;e++){let t=e;for(let e=0;e<8;e++)t=t&1?3988292384^t>>>1:t>>>1;OY[e]=t}function kY(e){let t=4294967295;for(let n of e)t=(OY[(t^n)&255]??0)^t>>>8;return(t^4294967295)>>>0}function AY(e,t,n,r){return e.setUint32(n,67324752,!0),n+=4,e.setUint16(n,20,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint32(n,r.crc,!0),n+=4,e.setUint32(n,r.data.length,!0),n+=4,e.setUint32(n,r.data.length,!0),n+=4,e.setUint16(n,r.name.length,!0),n+=2,e.setUint16(n,0,!0),n+=2,t.set(r.name,n),n+=r.name.length,t.set(r.data,n),n+=r.data.length,n}function jY(e,t,n,r,i){return e.setUint32(n,33639248,!0),n+=4,e.setUint16(n,20,!0),n+=2,e.setUint16(n,20,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint32(n,i.crc,!0),n+=4,e.setUint32(n,i.data.length,!0),n+=4,e.setUint32(n,i.data.length,!0),n+=4,e.setUint16(n,i.name.length,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint16(n,0,!0),n+=2,e.setUint32(n,0,!0),n+=4,e.setUint32(n,r,!0),n+=4,t.set(i.name,n),n+=i.name.length,n}function MY(e,t,n,r,i){e.setUint32(t,101010256,!0),t+=4,e.setUint16(t,0,!0),t+=2,e.setUint16(t,0,!0),t+=2,e.setUint16(t,n,!0),t+=2,e.setUint16(t,n,!0),t+=2,e.setUint32(t,i,!0),t+=4,e.setUint32(t,r,!0),t+=4,e.setUint16(t,0,!0)}function NY(e){let t=0,n=[];for(let r of e)n.push({offset:t,entry:r}),t+=30+r.name.length+r.data.length;let r=t,i=0;for(let t of e)i+=46+t.name.length;let a=t+i+22,o=new ArrayBuffer(a),s=new DataView(o),c=new Uint8Array(o),l=0;for(let{entry:e}of n)l=AY(s,c,l,e);for(let{offset:e,entry:t}of n)l=jY(s,c,l,e,t);return MY(s,l,e.length,r,i),o}function PY(e){return e.replaceAll(`&`,`&`).replaceAll(`<`,`<`).replaceAll(`>`,`>`).replaceAll(`"`,`"`)}function FY(e){let t=e=>Math.round(Math.max(0,Math.min(1,e))*255).toString(16).padStart(2,`0`).toUpperCase();return`#${t(e[0])}${t(e[1])}${t(e[2])}${t(e[3])}`}function IY(e){let t=[];for(let n=0;n<e.vertices.length;n+=3){let r=e.vertices[n]??0,i=e.vertices[n+1]??0,a=e.vertices[n+2]??0;t.push(` <vertex x="${r}" y="${i}" z="${a}" />`)}return t}function LY(e){let t=new Map,n=[];if(e!==void 0&&e.size>0)for(let r of e.values()){let e=FY(r);t.has(e)||(t.set(e,n.length),n.push(e))}return{colorIndexByHex:t,colorHexList:n}}function RY(e){let t=new Map,n=[];if(e!==void 0&&e.size>0)for(let r of e.values())t.has(r.name)||(t.set(r.name,n.length),n.push(r));return{materialIndexByName:t,materialList:n}}function zY(e,t,n,r,i){let a=new Map;for(let o of e.faceGroups){let e=o.start/3,s=o.count/3,c=o.faceId,l;if(n!==void 0){let e=n.get(c);if(e!==void 0){let t=i.get(e.name);t!==void 0&&(l={pid:3,p1:t})}}if(l===void 0&&t!==void 0){let e=t.get(c);if(e!==void 0){let t=FY(e),n=r.get(t);n!==void 0&&(l={pid:2,p1:n})}}if(l!==void 0)for(let t=e;t<e+s;t++)a.set(t,l)}return a}function BY(e,t){let n=[];for(let r=0;r<e.triangles.length;r+=3){let i=r/3,a=e.triangles[r]??0,o=e.triangles[r+1]??0,s=e.triangles[r+2]??0,c=t.get(i);c===void 0?n.push(` <triangle v1="${a}" v2="${o}" v3="${s}" />`):n.push(` <triangle v1="${a}" v2="${o}" v3="${s}" pid="${c.pid}" p1="${c.p1}" />`)}return n}function VY(e,t){let n=[];if(e.length>0){let t=e.map(e=>` <color color="${e}" />`).join(`
|
|
29
|
+
`);n.push(` <colorgroup id="2">\n${t}\n </colorgroup>`)}if(t.length>0){let e=t.map(e=>{let t=e.displayColor===void 0?`#FFFFFFFF`:FY(e.displayColor);return` <base name="${PY(e.name)}" displaycolor="${t}" />`}).join(`
|
|
30
|
+
`);n.push(` <basematerials id="3">\n${e}\n </basematerials>`)}return n}function HY(e,t,n,r,i){let a=IY(e),{colorIndexByHex:o,colorHexList:s}=LY(r),{materialIndexByName:c,materialList:l}=RY(i),u=BY(e,zY(e,r,i,o,c)),d=VY(s,l);return`<?xml version="1.0" encoding="UTF-8"?>
|
|
31
31
|
<model unit="${n}" xmlns="http://schemas.microsoft.com/3dmanufacturing/core/2015/02"${l.length>0?`
|
|
32
32
|
xmlns:m="http://schemas.microsoft.com/3dmanufacturing/material/2015/02"`:``}>
|
|
33
33
|
<resources>${d.length>0?`
|
|
34
34
|
`+d.join(`
|
|
35
35
|
`):``}
|
|
36
|
-
<object id="1" name="${
|
|
36
|
+
<object id="1" name="${PY(t)}" type="model">
|
|
37
37
|
<mesh>
|
|
38
38
|
<vertices>
|
|
39
39
|
${a.join(`
|
|
@@ -49,12 +49,12 @@ ${u.join(`
|
|
|
49
49
|
<build>
|
|
50
50
|
<item objectid="1" />
|
|
51
51
|
</build>
|
|
52
|
-
</model>`}function
|
|
52
|
+
</model>`}function UY(e,t={}){let{name:n=`model`,unit:r=`millimeter`,colors:i,materials:a}=t,o=new TextEncoder,s=HY(e,n,r,i,a);function c(e,t){let n=o.encode(e),r=o.encode(t);return{name:n,data:r,crc:kY(r)}}return NY([c(`[Content_Types].xml`,`<?xml version="1.0" encoding="UTF-8"?>
|
|
53
53
|
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
|
|
54
54
|
<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" />
|
|
55
55
|
<Default Extension="model" ContentType="application/vnd.ms-package.3dmanufacturing-3dmodel+xml" />
|
|
56
56
|
</Types>`),c(`_rels/.rels`,`<?xml version="1.0" encoding="UTF-8"?>
|
|
57
57
|
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
|
|
58
58
|
<Relationship Target="/3D/3dmodel.model" Id="rel0" Type="http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel" />
|
|
59
|
-
</Relationships>`),c(`3D/3dmodel.model`,s)])}function HY(e){let t=[],n=/([MmLlHhVvCcSsQqTtAaZz])([^MmLlHhVvCcSsQqTtAaZz]*)/g,r;for(;(r=n.exec(e))!==null;){let e=r[1]??``,n=(r[2]??``).trim(),i=[];if(n){let e=/[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/g,t;for(;(t=e.exec(n))!==null;)i.push(parseFloat(t[0]))}t.push({command:e,args:i})}return t}function UY(e){return[e[0],-e[1]]}function WY(e,t,n,r){let i=0;for(;i<e.length;){let a=(n?t.cx:0)+(e[i]??0),o=(n?t.cy:0)+(e[i+1]??0);i===0?(t.sx=a,t.sy=o):r.push(dL(UY([t.cx,t.cy]),UY([a,o]))),t.cx=a,t.cy=o,i+=2}}function GY(e,t,n,r){let i=0;for(;i<e.length;){let a=(n?t.cx:0)+(e[i]??0),o=(n?t.cy:0)+(e[i+1]??0);r.push(dL(UY([t.cx,t.cy]),UY([a,o]))),t.cx=a,t.cy=o,i+=2}}function KY(e,t,n,r){for(let i of e){let e=n?t.cx+i:i;r.push(dL(UY([t.cx,t.cy]),UY([e,t.cy]))),t.cx=e}}function qY(e,t,n,r){for(let i of e){let e=n?t.cy+i:i;r.push(dL(UY([t.cx,t.cy]),UY([t.cx,e]))),t.cy=e}}function JY(e,t,n,r){let i=0;for(;i+5<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=a+(e[i]??0),c=o+(e[i+1]??0),l=a+(e[i+2]??0),u=o+(e[i+3]??0),d=a+(e[i+4]??0),f=o+(e[i+5]??0);r.push(_L(UY([t.cx,t.cy]),[UY([s,c]),UY([l,u])],UY([d,f]))),t.prevControlX=l,t.prevControlY=u,t.cx=d,t.cy=f,i+=6}}function YY(e,t,n,r){let i=0;for(;i+3<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=t.lastCmd,c=s===`C`||s===`S`?2*t.cx-t.prevControlX:t.cx,l=s===`C`||s===`S`?2*t.cy-t.prevControlY:t.cy,u=a+(e[i]??0),d=o+(e[i+1]??0),f=a+(e[i+2]??0),p=o+(e[i+3]??0);r.push(_L(UY([t.cx,t.cy]),[UY([c,l]),UY([u,d])],UY([f,p]))),t.prevControlX=u,t.prevControlY=d,t.cx=f,t.cy=p,t.lastCmd=`S`,i+=4}}function XY(e,t,n,r){let i=0;for(;i+3<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=a+(e[i]??0),c=o+(e[i+1]??0),l=a+(e[i+2]??0),u=o+(e[i+3]??0);r.push(_L(UY([t.cx,t.cy]),[UY([s,c])],UY([l,u]))),t.prevControlX=s,t.prevControlY=c,t.cx=l,t.cy=u,i+=4}}function ZY(e,t,n,r){let i=0;for(;i+1<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=t.lastCmd,c=s===`Q`||s===`T`?2*t.cx-t.prevControlX:t.cx,l=s===`Q`||s===`T`?2*t.cy-t.prevControlY:t.cy,u=a+(e[i]??0),d=o+(e[i+1]??0);r.push(_L(UY([t.cx,t.cy]),[UY([c,l])],UY([u,d]))),t.prevControlX=c,t.prevControlY=l,t.cx=u,t.cy=d,t.lastCmd=`T`,i+=2}}function QY(e,t,n,r,i){let a=Math.max(n,r),o=i?1:-1,s=t+2*o*a,c=[e-o*a,t+o*a],l=[e+o*a,t+o*a];try{return[fL(UY([e,t]),UY(c),UY([e,s])),fL(UY([e,s]),UY(l),UY([e,t]))]}catch{return[]}}function $Y(e,t,n,r,i,a,o,s){let c=.5,l=e+c*(n-e),u=t+c*(r-t),d=n-e,f=r-t,p=Math.sqrt(d*d+f*f),m=Math.max(i,a),h=p/2,g=h<m?m-Math.sqrt(m*m-h*h):m,_=(o===s?-1:1)*(s?1:-1),v=-f/p,y=d/p,b=l+_*g*v,x=u+_*g*y;try{return[fL(UY([e,t]),UY([b,x]),UY([n,r]))]}catch{return[dL(UY([e,t]),UY([n,r]))]}}function eX(e,t,n,r){let i=0;for(;i+6<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=Math.abs(e[i]??0),c=Math.abs(e[i+1]??0),l=(e[i+3]??0)!==0,u=(e[i+4]??0)!==0,d=a+(e[i+5]??0),f=o+(e[i+6]??0);if(s===0||c===0)r.push(dL(UY([t.cx,t.cy]),UY([d,f])));else{let e=d-t.cx,n=f-t.cy;Math.sqrt(e*e+n*n)<1e-10?r.push(...QY(t.cx,t.cy,s,c,u)):r.push(...$Y(t.cx,t.cy,d,f,s,c,l,u))}t.cx=d,t.cy=f,i+=7}}function tX(e,t){(Math.abs(e.cx-e.sx)>1e-10||Math.abs(e.cy-e.sy)>1e-10)&&t.push(dL(UY([e.cx,e.cy]),UY([e.sx,e.sy]))),e.cx=e.sx,e.cy=e.sy}function nX(e){let t=HY(e),n=[],r={cx:0,cy:0,sx:0,sy:0,prevControlX:0,prevControlY:0,lastCmd:``};for(let{command:e,args:i}of t){let t=e===e.toLowerCase(),a=e.toUpperCase();switch(a){case`M`:WY(i,r,t,n);break;case`L`:GY(i,r,t,n);break;case`H`:KY(i,r,t,n);break;case`V`:qY(i,r,t,n);break;case`C`:JY(i,r,t,n);break;case`S`:YY(i,r,t,n);break;case`Q`:XY(i,r,t,n);break;case`T`:ZY(i,r,t,n);break;case`A`:eX(i,r,t,n);break;case`Z`:tX(r,n);break}a!==`S`&&a!==`T`&&(r.lastCmd=a)}return n}function rX(e){try{let t=nX(e);return t.length===0?k(To(`SVG_EMPTY_PATH`,`SVG path produced no curves`)):O(new FL(t))}catch(e){return k(To(`SVG_PARSE_FAILED`,`Failed to parse SVG path: ${e instanceof Error?e.message:String(e)}`))}}function iX(e){try{let t=/\bd\s*=\s*(?:"([^"]*)"|'([^']*)')/,n=[],r=e.toLowerCase(),i=0;for(;i<r.length;){let a=r.indexOf(`<path `,i);if(a===-1)break;let o=e.indexOf(`>`,a);if(o===-1)break;let s=e.slice(a,o+1);i=o+1;let c=t.exec(s),l=c?.[1]??c?.[2];if(!l)continue;let u=rX(l);u.ok&&n.push(u.value)}return n.length===0?k(To(`SVG_NO_PATHS`,`No <path> elements found in SVG`)):O(n)}catch(e){return k(To(`SVG_IMPORT_FAILED`,`Failed to import SVG: ${e instanceof Error?e.message:String(e)}`))}}function aX(e,t){try{let n=H(),r=e.map(e=>({shape:e.shape.wrapped,name:e.name,color:e.color?[...e.color]:void 0}));return O(n.exportSTEPConfigured(r,t))}catch(e){return k(To(M.STEP_EXPORT_CONFIGURED_FAILED,`Configured STEP export failed`,e))}}async function oX(e){try{let t=await e.arrayBuffer(),n=H().importSTEP(t);if(n.length===0)return k(To(`STEP_IMPORT_FAILED`,`STEP file contains no valid geometry`));for(let e=1;e<n.length;e++){let t=n[e];t&&H().dispose(t)}return O(U(n[0]))}catch(e){return k(To(`STEP_IMPORT_FAILED`,`Failed to load STEP file`,e))}}async function sX(e){try{let t=await e.arrayBuffer(),n=H().importSTL(t);return n.IsNull()?k(To(`STL_IMPORT_FAILED`,`Failed to create solid from STL mesh`)):O(U(n))}catch(e){return k(To(`STL_IMPORT_FAILED`,`Failed to load STL file`,e))}}async function cX(e){try{let t=await e.arrayBuffer(),n=H().importIGES(t);if(n.length===0)return k(To(`IGES_IMPORT_FAILED`,`IGES file contains no valid geometry`));for(let e=1;e<n.length;e++){let t=n[e];t&&H().dispose(t)}return O(U(n[0]))}catch(e){return k(To(`IGES_IMPORT_FAILED`,`Failed to load IGES file`,e))}}function lX(e,t,n={}){let r=pq(e,t);return new cq((typeof n.plane==`string`||n.plane===void 0?r.sketchOnPlane(n.plane,n.origin):r.sketchOnPlane(n.plane)).map(e=>Array.isArray(e)?new GK(e.map(KK)):KK(e)))}function uX(e,t){let n=t?.fontSize??1,r=dq(t?.fontFamily);if(!r)return k(P(M.NO_FONT_LOADED,`No font loaded. Call loadFont() first.`,void 0,void 0,`Load a font with loadFont() before calling textMetrics()`));let i=r.getAdvanceWidth(e,n),a=n/r.unitsPerEm,o=r.ascender*a,s=r.descender*a;return O({width:i,height:o-s,ascender:o,descender:s})}function dX(e){let t=e?.fontSize??1,n=dq(e?.fontFamily);if(!n)return k(P(M.NO_FONT_LOADED,`No font loaded. Call loadFont() first.`,void 0,void 0,`Load a font with loadFont() before calling fontMetrics()`));let r=t/n.unitsPerEm,i=n.ascender*r,a=n.descender*r,o=(n.tables?.os2?.sTypoLineGap??0)*r;return O({ascender:i,descender:a,unitsPerEm:n.unitsPerEm,lineHeight:i-a+o})}function fX(e){return e.type===`init`}function pX(e){return e.type===`operation`}function mX(e){return e.type===`dispose`}function hX(e){return e.type===`batch`}function gX(e){return e.success}function _X(e){return!e.success}function vX(){return{pending:new Map}}function yX(e,t){let n=new Map(e.pending);return n.set(t.id,t),{pending:n}}function bX(e,t){let n=e.pending.get(t);if(!n)return{queue:e,task:void 0};let r=new Map(e.pending);return r.delete(t),{queue:{pending:r},task:n}}function xX(e){return e.pending.size}function SX(e){return e.pending.size===0}function CX(e,t){for(let n of e.pending.values())n.reject(t);return{pending:new Map}}function wX(e,t){let n=t.data,r=e.get(n.id);if(r)if(e.delete(n.id),gX(n)){let e={};n.resultBrep!==void 0&&(e.resultBrep=n.resultBrep),n.resultData!==void 0&&(e.resultData=n.resultData),r.resolve(e)}else r.reject(Error(n.error))}function TX(e){let{worker:t,wasmUrl:n}=e,r=new Map,i=!1;function a(){return crypto.randomUUID()}function o(e){wX(r,e)}t.addEventListener(`message`,o);function s(e){return i?Promise.reject(Error(`WorkerClient has been disposed`)):new Promise((n,i)=>{r.set(e.id,{resolve:n,reject:i}),t.postMessage(e)})}return{async init(){await s({id:a(),type:`init`,...n===void 0?{}:{wasmUrl:n}})},async execute(e,t,n){return s({id:a(),type:`operation`,operation:e,shapesBrep:t,parameters:n})},executeBatch(e){let t=e.length;return s({id:a(),type:`batch`,operations:e}).then(e=>{let n=e.resultData;if(!Array.isArray(n)||n.length!==t)throw Error(`Invalid batch response: expected ${t} results`);return n})},dispose(){i=!0;for(let e of r.values())e.reject(Error(`WorkerClient disposed`));r.clear(),t.removeEventListener(`message`,o);let e={id:a(),type:`dispose`};t.postMessage(e)}}}function EX(){return{operations:new Map}}function DX(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function OX(e){return e instanceof Error?e.message:String(e)}function kX(e,t,n,r){let i=e.operations.get(t);if(!i)return{success:!1,error:`Unknown operation: ${t}`};try{let e=i(n,r);return{success:!0,...e.resultBrep===void 0?{}:{resultBrep:e.resultBrep},...e.resultData===void 0?{}:{resultData:e.resultData}}}catch(e){return{success:!1,error:OX(e)}}}function AX(e,t){return t.success?{id:e,success:!0,...t.resultBrep===void 0?{}:{resultBrep:t.resultBrep},...t.resultData===void 0?{}:{resultData:t.resultData}}:{id:e,success:!1,error:t.error??`operation failed`}}function jX(e,t){let n=globalThis;n.onmessage=async r=>{let i=r.data;if(fX(i)){try{await t(i.wasmUrl);let e={id:i.id,success:!0};n.postMessage(e)}catch(e){let t={id:i.id,success:!1,error:OX(e)};n.postMessage(t)}return}if(pX(i)){let t=kX(e,i.operation,i.shapesBrep,i.parameters);n.postMessage(AX(i.id,t));return}if(hX(i)){let t=i.operations.map(t=>kX(e,t.operation,t.shapesBrep,t.params)),r={id:i.id,success:!0,resultData:t};n.postMessage(r);return}if(mX(i)){let e={id:i.id,success:!0};n.postMessage(e),n.close?.()}}}function MX(e){let{workers:t,wasmUrl:n}=e;if(t.length===0)throw Error(`createWorkerPool requires at least one worker`);let r=t.map(e=>({client:TX({worker:e,...n===void 0?{}:{wasmUrl:n}}),inFlight:0})),i=!1;function a(){return r.reduce((e,t)=>t.inFlight<e.inFlight?t:e)}function o(e,t,n){if(i)return Promise.reject(Error(`WorkerPool has been disposed`));let r=a();return r.inFlight+=1,r.client.execute(e,t,n).finally(()=>{--r.inFlight})}function s(){if(!i){i=!0;for(let e of r)e.client.dispose()}}return{size:r.length,async init(){try{await Promise.all(r.map(e=>e.client.init()))}catch(e){throw s(),e}},execute:o,executeBatch(e){return Promise.all(e.map(e=>o(e.operation,e.shapesBrep,e.params)))},inFlight(){return r.map(e=>e.inFlight)},dispose:s}}var NX=Object.defineProperty,PX=(e,t)=>{let n={};for(var r in e)NX(n,r,{get:e[r],enumerable:!0});return t||NX(n,Symbol.toStringTag,{value:`Module`}),n},FX=1,IX=2;function LX(e,t){t===`commonFace`&&e.SetGlue(FX),t===`sameFace`&&e.SetGlue(IX)}function RX(e){return typeof e==`number`}function zX(e){if(typeof e==`number`)return!0;if(typeof e==`object`&&e){let t=e;return`distances`in t&&Array.isArray(t.distances)&&`selectedFace`in t||`distance`in t&&`angle`in t&&`selectedFace`in t}return!1}function BX(e){return typeof e==`number`?!0:Array.isArray(e)&&e.length===2?e.every(RX):!1}function VX(e,t){let n=n=>{let r=e.findAll(n);if(r.length===0)return[];let i=0,a=BD(DD(gA(r)),t);for(let e=1;e<r.length;e++){let n=BD(DD(hA(r,e)),t);n<a&&(a=n,i=e)}return[hA(r,i)]},r=e=>{let t=n(e);return t.length===0?k(Eo(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found 0 element(s)`)):O(gA(t))};return{...e,findAll:n,findUnique:r}}function HX(e){return zI(`vertex`,e,HX,(t,n)=>({nearestTo:t=>VX(HX(e),t),atPosition:(e,t=1e-4)=>n(n=>BD(DD(n),e)<t),withinBox:(e,t)=>n(n=>{let r=DD(n);return r[0]>=e[0]-1e-6&&r[0]<=t[0]+1e-6&&r[1]>=e[1]-1e-6&&r[1]<=t[1]+1e-6&&r[2]>=e[2]-1e-6&&r[2]<=t[2]+1e-6}),atDistance:(e,t=[0,0,0],r=1e-4)=>n(n=>{let i=DD(n);return Math.abs(BD(i,t)-e)<r})}))}function UX(){return HX([])}var WX=new Map,GX=null,KX=null;function qX(e,t){WX.set(e,t),GX||=e,e===GX&&(KX=t)}function JX(e){if(!e&&KX)return KX;let t=e??GX;if(!t)throw Error(`brepjs voxel engine not initialized. Call initVoxel() (or registerVoxel()) before using voxel operations.`);let n=WX.get(t);if(!n)throw Error(`brepjs: voxel engine '${t}' is not registered.`);return n}function YX(){return GX}function XX(e,t=`voxel`){qX(t,e),GX=t,KX=e}function ZX(e){if(e.vertices.length%3!=0)return P(`VOXEL_INVALID_MESH`,`mesh.vertices length must be a multiple of 3 (flat xyz).`);if(e.triangles.length%3!=0)return P(`VOXEL_INVALID_MESH`,`mesh.triangles length must be a multiple of 3.`);let t=e.vertices.length/3;for(let n=0;n<e.triangles.length;n++){let r=e.triangles[n];if(r===void 0||r>=t)return P(`VOXEL_INVALID_TRIANGLE_INDEX`,`triangle index ${r} at position ${n} is out of range for ${t} vertices.`)}return null}function QX(e,t){return ZX(e)||(t.length%3==0?null:P(`VOXEL_INVALID_QUERIES`,`queries length must be a multiple of 3 (flat xyz).`))}function $X(e){try{return O(JX(e))}catch(e){return k(Co(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function eZ(e,t,n){let r=QX(e,t);if(r)return k(r);let i=$X(n);return A(i)?i:O(i.value.winding_numbers(e.vertices,e.triangles,t))}function tZ(e,t,n){let r=QX(e,t);if(r)return k(r);let i=$X(n);if(A(i))return i;let a=i.value.points_inside(e.vertices,e.triangles,t);return O(Array.from(a,e=>e===1))}var nZ=48,rZ=2;function iZ(e,t,n){let r=ZX(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`repairMesh requires a non-empty triangle mesh.`));let i=t?.resolution??nZ,a=t?.padding??rZ;if(!Number.isInteger(i)||i<1)return k(P(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`));if(!Number.isInteger(a)||a<1)return k(P(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`));let o=$X(n);if(A(o))return o;try{try{var s=PT();let t=s.u(o.value.repair_mesh(e.vertices,e.triangles,i,a)),n=t.positions.length/3;return O({vertices:t.positions,normals:t.normals,triangles:t.indices,uvs:new Float32Array(n*2),faceGroups:[{start:0,count:t.indices.length/3,faceHash:0}]})}catch(e){s.e=e}finally{s.d()}}catch(e){return k(wo(`VOXEL_REPAIR_FAILED`,e instanceof Error?e.message:`voxel repair failed (grid too large?).`,e))}}var aZ=.001;function oZ(e,t=aZ){try{let n=eA(e,{tolerance:t});return n.vertices.length===0||n.triangles.length===0?k(wo(`VOXEL_SHAPE_MESH_EMPTY`,`shape tessellated to an empty triangle mesh.`)):O({vertices:n.vertices,triangles:n.triangles})}catch(e){return k(wo(`VOXEL_SHAPE_MESH_FAILED`,e instanceof Error?e.message:`failed to mesh shape for voxel op.`,e))}}var sZ=48,cZ=2,lZ={union:0,intersection:1,difference:2};function uZ(e){let t=e?.resolution??sZ,n=e?.padding??cZ;return!Number.isInteger(t)||t<1?k(P(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(P(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function dZ(e){if(e.positions.length===0||e.indices.length===0)return k(wo(`VOXEL_DEGENERATE_RESULT`,`the voxel operation produced an empty mesh (over-shrunk offset or disjoint operands?).`));let t=e.positions.length/3;return O({vertices:e.positions,normals:e.normals,triangles:e.indices,uvs:new Float32Array(t*2),faceGroups:[{start:0,count:e.indices.length/3,faceHash:0}]})}function fZ(e,t,n,r){let i=ZX(e);if(i)return k(i);if(e.vertices.length===0||e.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`offsetMesh requires a non-empty triangle mesh.`));if(!Number.isFinite(t))return k(P(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));let a=uZ(n);if(A(a))return a;let o=$X(r);if(A(o))return o;try{try{var s=PT();return dZ(s.u(o.value.offset_mesh(e.vertices,e.triangles,t,a.value.resolution,a.value.padding)))}catch(e){s.e=e}finally{s.d()}}catch(e){return k(wo(`VOXEL_OFFSET_FAILED`,e instanceof Error?e.message:`voxel offset failed (grid too large?).`,e))}}function pZ(e,t,n,r){let i=ZX(e);if(i)return k(i);if(e.vertices.length===0||e.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`shellMesh requires a non-empty triangle mesh.`));if(!Number.isFinite(t)||t<=0)return k(P(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));let a=uZ(n);if(A(a))return a;let o=$X(r);if(A(o))return o;try{try{var s=PT();return dZ(s.u(o.value.shell_mesh(e.vertices,e.triangles,t,a.value.resolution,a.value.padding)))}catch(e){s.e=e}finally{s.d()}}catch(e){return k(wo(`VOXEL_SHELL_FAILED`,e instanceof Error?e.message:`voxel shell failed (grid too large?).`,e))}}function mZ(e,t,n,r,i){let a=ZX(e);if(a)return k(a);let o=ZX(t);if(o)return k(o);if(e.vertices.length===0||e.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`voxelBoolean requires a non-empty mesh for operand A.`));if(t.vertices.length===0||t.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`voxelBoolean requires a non-empty mesh for operand B.`));let s=lZ[n],c=uZ(r);if(A(c))return c;let l=$X(i);if(A(l))return l;try{try{var u=PT();return dZ(u.u(l.value.voxel_boolean(e.vertices,e.triangles,t.vertices,t.triangles,s,c.value.resolution,c.value.padding)))}catch(e){u.e=e}finally{u.d()}}catch(e){return k(wo(`VOXEL_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel boolean failed (grid too large?).`,e))}}function hZ(e,t,n,r){let i=oZ(e);return A(i)?i:fZ(i.value,t,n,r)}function gZ(e,t,n,r){let i=oZ(e);return A(i)?i:pZ(i.value,t,n,r)}function _Z(e,t,n,r,i){let a=oZ(e);if(A(a))return a;let o=oZ(t);return A(o)?o:mZ(a.value,o.value,n,r,i)}var vZ=48,yZ=2,bZ={union:0,intersection:1,difference:2};function xZ(e){let t=e?.resolution??vZ,n=e?.padding??yZ;return!Number.isInteger(t)||t<1?k(P(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(P(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function SZ(e){try{var t=PT();let n=e.contour(),{positions:r,normals:i,indices:a}=t.u({value:n,[Symbol.dispose](){n.free()}}).value;if(r.length===0||a.length===0)return k(wo(`VOXEL_DEGENERATE_RESULT`,`the voxel field contoured to an empty mesh (over-shrunk offset or disjoint operands?).`));let o=r.length/3;return O({vertices:r,normals:i,triangles:a,uvs:new Float32Array(o*2),faceGroups:[{start:0,count:a.length/3,faceHash:0}]})}catch(e){t.e=e}finally{t.d()}}function CZ(e){return{raw:e,delete(){e.free()}}}function wZ(e){return TZ(e)}function TZ(e){let t=qT(CZ(e)),n={get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},boolean(e,t){return this.value.boolean(e.value,bZ[t]),n},offset(e){return this.value.offset(e),n},shell(e){return this.value.shell(e),n},reinit(){return this.value.reinit(),n},contour(){let e=SZ(this.value);if(A(e))throw Error(e.error.message);return e.value}};return n}function EZ(e){return!e.disposed}function DZ(){return k(P(`VOXEL_FIELD_DISPOSED`,`the voxel field handle has been disposed.`))}function OZ(e,t,n){let r=ZX(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`voxelField requires a non-empty triangle mesh.`));let i=xZ(t);if(A(i))return i;let a=$X(n);if(A(a))return a;try{return O(TZ(new a.value.VoxelField(e.vertices,e.triangles,i.value.resolution,i.value.padding)))}catch(e){return k(wo(`VOXEL_FIELD_VOXELIZE_FAILED`,e instanceof Error?e.message:`voxel field voxelization failed (grid too large or non-dense?).`,e))}}function kZ(e,t,n,r,i){let a=ZX(e);if(a)return k(a);let o=ZX(t);if(o)return k(o);if(e.vertices.length===0||e.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`voxelBooleanField requires a non-empty mesh for operand A.`));if(t.vertices.length===0||t.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`voxelBooleanField requires a non-empty mesh for operand B.`));let s=xZ(r);if(A(s))return s;let c=$X(i);if(A(c))return c;try{return O(TZ(c.value.VoxelField.boolean_of(e.vertices,e.triangles,t.vertices,t.triangles,bZ[n],s.value.resolution,s.value.padding)))}catch(e){return k(wo(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (grid too large or non-dense?).`,e))}}function AZ(e,t,n){if(!EZ(e)||!EZ(t))return DZ();try{return e.value.boolean(t.value,bZ[n]),O(e)}catch(e){return k(wo(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (dim mismatch?).`,e))}}function jZ(e,t){if(!EZ(e))return DZ();if(!Number.isFinite(t))return k(P(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));try{return e.value.offset(t),O(e)}catch(e){return k(wo(`VOXEL_FIELD_OFFSET_FAILED`,e instanceof Error?e.message:`voxel field offset failed.`,e))}}function MZ(e,t){if(!EZ(e))return DZ();if(!Number.isFinite(t)||t<=0)return k(P(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));try{return e.value.shell(t),O(e)}catch(e){return k(wo(`VOXEL_FIELD_SHELL_FAILED`,e instanceof Error?e.message:`voxel field shell failed.`,e))}}function NZ(e){if(!EZ(e))return DZ();try{return e.value.reinit(),O(e)}catch(e){return k(wo(`VOXEL_FIELD_REINIT_FAILED`,e instanceof Error?e.message:`voxel field reinit failed.`,e))}}function PZ(e){if(!EZ(e))return DZ();try{return SZ(e.value)}catch(e){return k(wo(`VOXEL_FIELD_CONTOUR_FAILED`,e instanceof Error?e.message:`voxel field contour failed.`,e))}}function FZ(e,t,n){let r=oZ(e);return A(r)?r:OZ(r.value,t,n)}function IZ(e,t,n,r,i){let a=oZ(e);if(A(a))return a;let o=oZ(t);return A(o)?o:kZ(a.value,o.value,n,r,i)}var LZ=48,RZ=2;function zZ(e){try{return O(JX(e))}catch(e){return k(Co(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function BZ(e){let t=e?.resolution??LZ,n=e?.padding??RZ;return!Number.isInteger(t)||t<1?k(P(`SDF_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(P(`SDF_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function VZ(e){return{raw:e,delete(){e.free()}}}var HZ={offsetField(e){return UZ(this.value.offset_field(e.value))},roundField(e){return UZ(this.value.round_field(e.value))},shellField(e){return UZ(this.value.shell_field(e.value))},smoothUnionField(e,t){return UZ(this.value.smooth_union_field(e.value,t.value))}};function UZ(e){let t=qT(VZ(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},union(e){return UZ(this.value.union(e.value))},intersection(e){return UZ(this.value.intersection(e.value))},difference(e){return UZ(this.value.difference(e.value))},smoothUnion(e,t){return UZ(this.value.smooth_union(e.value,t))},smoothIntersection(e,t){return UZ(this.value.smooth_intersection(e.value,t))},smoothDifference(e,t){return UZ(this.value.smooth_difference(e.value,t))},offset(e){return UZ(this.value.offset(e))},round(e){return UZ(this.value.round(e))},shell(e){return UZ(this.value.shell(e))},onion(e){return UZ(this.value.onion(e))},...HZ,translate(e,t,n){return UZ(this.value.translate(e,t,n))},rotate(e,t,n,r){return UZ(this.value.rotate(e,t,n,r))},scale(e){return UZ(this.value.scale(e))},rasterize(e){return WZ(this.value,e)},rasterizeIn(e,t){return GZ(this.value,e,t)}}}function WZ(e,t){let n=BZ(t);if(A(n))return n;try{return O(wZ(e.rasterize(n.value.resolution,n.value.padding)))}catch(e){return KZ(e)}}function GZ(e,t,n){let r=BZ(n);if(A(r))return r;let i=qZ(t);if(i)return k(i);try{return O(wZ(e.rasterize_in(t.min[0],t.min[1],t.min[2],t.max[0],t.max[1],t.max[2],r.value.resolution,r.value.padding)))}catch(e){return KZ(e)}}function KZ(e){return k(wo(`SDF_RASTERIZE_FAILED`,e instanceof Error?e.message:`SDF rasterization failed (grid too large?).`,e))}function qZ(e){if(![...e.min,...e.max].every(e=>Number.isFinite(e)))return P(`SDF_INVALID_BOUNDS`,`bounds must be finite numbers.`);for(let t=0;t<3;t++)if(e.max[t]<=e.min[t])return P(`SDF_INVALID_BOUNDS`,`bounds max must exceed min on every axis.`);return null}function JZ(e,t){let n=zZ(t);if(A(n))return n;try{return O(UZ(e(n.value)))}catch(e){return k(wo(`SDF_BUILD_FAILED`,e instanceof Error?e.message:`SDF primitive construction failed.`,e))}}function YZ(e,t){return JZ(t=>t.Sdf.sphere(e),t)}function XZ(e,t,n,r){return JZ(r=>r.Sdf.box_(e,t,n),r)}function ZZ(e,t,n,r,i){return JZ(i=>i.Sdf.rounded_box(e,t,n,r),i)}function QZ(e,t,n){return JZ(n=>n.Sdf.cylinder(e,t),n)}function $Z(e,t,n){return JZ(n=>n.Sdf.cone(e,t),n)}function eQ(e,t,n,r){return JZ(r=>r.Sdf.capsule(e[0],e[1],e[2],t[0],t[1],t[2],n),r)}function tQ(e,t,n){return JZ(n=>n.Sdf.torus(e,t),n)}function nQ(e,t,n){return JZ(n=>n.Sdf.plane(e[0],e[1],e[2],t),n)}function rQ(e){if(e.length<2)return k(P(`SDF_INVALID_SPINE`,`sweep spine needs at least 2 points.`));let t=new Float64Array(e.length*3);for(let n=0;n<e.length;n++){let r=e[n];if(!r.every(e=>Number.isFinite(e)))return k(P(`SDF_INVALID_SPINE`,`sweep spine coordinates must be finite.`));t[n*3]=r[0],t[n*3+1]=r[1],t[n*3+2]=r[2]}return O(t)}function iQ(e,t,n,r){let i=rQ(e);if(A(i))return i;let a=n?.closed??!1;return JZ(e=>e.Sdf.sweep(i.value,t.value,a),r)}var aQ={gyroid:0,schwarzP:1,diamond:2};function oQ(e,t,n,r){let i=aQ[e];return i===void 0?k(P(`SDF_INVALID_LATTICE_KIND`,`unknown lattice kind: ${e}`)):JZ(e=>e.Sdf.lattice(i,t.value,n.value),r)}function sQ(e,t,n){return JZ(n=>n.Sdf.strut_lattice(e,t.value),n)}function cQ(e){return{raw:e,delete(){e.free()}}}function lQ(e){let t=qT(cQ(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()}}}function uQ(e,t){let n=zZ(t);if(A(n))return n;try{return O(lQ(e(n.value)))}catch(e){return k(wo(`SDF_FIELD_BUILD_FAILED`,e instanceof Error?e.message:`scalar field construction failed.`,e))}}function dQ(e,t){return uQ(t=>t.ScalarField.constant(e),t)}function fQ(e,t,n,r,i,a){return uQ(a=>a.ScalarField.axial_ramp(e,t,n,r,i),a)}function pQ(e,t,n,r,i,a,o){return uQ(o=>o.ScalarField.radial_ramp(e[0],e[1],e[2],t,n,r,i,a),o)}function mQ(e,t,n,r){return uQ(r=>r.ScalarField.from_sdf(e.value,t,n),r)}function hQ(e,t,n,r){return uQ(r=>r.ScalarField.clamp(e.value,t,n),r)}var gQ={gyroid:0,schwarzP:1,diamond:2},_Q=48,vQ=2;function yQ(e){let t=gQ[e.type];if(t===void 0)return k(P(`LATTICE_INVALID_TYPE`,`lattice type must be one of gyroid, schwarzP, diamond (got '${e.type}').`));if(!(e.period>0))return k(P(`LATTICE_INVALID_PERIOD`,`period must be > 0.`));if(!(e.thickness>0))return k(P(`LATTICE_INVALID_THICKNESS`,`thickness must be > 0.`));let n=e.resolution??_Q,r=e.padding??vQ;return!Number.isInteger(n)||n<1?k(P(`LATTICE_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(r)||r<1?k(P(`LATTICE_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({tag:t,period:e.period,thickness:e.thickness,resolution:n,padding:r})}function bQ(e){let t=e.positions.length/3;return{vertices:e.positions,normals:e.normals,triangles:e.indices,uvs:new Float32Array(t*2),faceGroups:[{start:0,count:e.indices.length/3,faceHash:0}]}}function xQ(e,t,n){let r=ZX(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(P(`LATTICE_EMPTY_MESH`,`latticeInfill requires a non-empty triangle mesh.`));let i=yQ(t);if(A(i))return i;let a=$X(n);if(A(a))return a;let{tag:o,period:s,thickness:c,resolution:l,padding:u}=i.value;try{try{var d=PT();return O(bQ(d.u(a.value.lattice_infill(e.vertices,e.triangles,l,u,o,s,c))))}catch(e){d.e=e}finally{d.d()}}catch(e){return k(wo(`LATTICE_INFILL_FAILED`,e instanceof Error?e.message:`lattice infill failed (grid too large?).`,e))}}function SQ(e,t,n){let r=oZ(e);return A(r)?r:xQ(r.value,t,n)}function CQ(e,t,n){for(let t=0;t<3;t++){let n=e.min[t],r=e.max[t];if(n===void 0||r===void 0||!(n<r))return k(P(`LATTICE_INVALID_BOUNDS`,`bounds.min must be strictly less than bounds.max on every axis (axis ${t}).`))}let r=yQ(t);if(A(r))return r;let i=$X(n);if(A(i))return i;let{tag:a,period:o,thickness:s,resolution:c,padding:l}=r.value,[u,d,f]=e.min,[p,m,h]=e.max;try{try{var g=PT();return O(bQ(g.u(i.value.tpms_box(u,d,f,p,m,h,c,l,a,o,s))))}catch(e){g.e=e}finally{g.d()}}catch(e){return k(wo(`TPMS_LATTICE_FAILED`,e instanceof Error?e.message:`tpms lattice failed (grid too large?).`,e))}}function wQ(e){return H().createVector3d(e[0],e[1],e[2])}function TQ(e){return H().createPoint3d(e[0],e[1],e[2])}function EQ(e){return H().createDirection3d(e[0],e[1],e[2])}function DQ(e){return[e.X(),e.Y(),e.Z()]}function OQ(e){return[e.X(),e.Y(),e.Z()]}function kQ(e){return[e.X(),e.Y(),e.Z()]}function AQ(e,t){let n=wQ(e);try{return t(n)}finally{n.delete()}}function jQ(e,t){let n=TQ(e);try{return t(n)}finally{n.delete()}}function MQ(e,t){let n=EQ(e);try{return t(n)}finally{n.delete()}}var NQ=.299,PQ=.587,FQ=.114;function IQ(e,t={}){if(e.length<2)return k(P(M.SURFACE_GRID_TOO_SMALL,`surfaceFromGrid: need at least 2 rows, got ${e.length}`));let n=e.length,r=e[0]?.length??0;if(r<2)return k(P(M.SURFACE_GRID_TOO_SMALL,`surfaceFromGrid: need at least 2 columns, got ${r}`));for(let t=0;t<n;t++){let n=e[t];if(!n||n.length!==r)return k(P(M.SURFACE_GRID_JAGGED,`surfaceFromGrid: row ${t} has ${n?.length??0} columns, expected ${r}`))}let{width:i=r-1,depth:a=n-1,scaleZ:o=1}=t,s=i/(r-1),c=a/(n-1);try{return LQ(e,n,r,s,c,o)}catch{}try{return RQ(e,n,r,s,c,o)}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.SURFACE_FAILED,`surfaceFromGrid failed: ${t}`,e))}}function LQ(e,t,n,r,i,a){let o=[];for(let s=0;s<t;s++)for(let t=0;t<n;t++){let n=e[s],c=(n?n[t]??0:0)*a;o.push([t*r,s*i,c])}let s=U(H().bsplineSurface(o,t,n));return NE(s)?O(s):(W(s),k(N(M.SURFACE_FAILED,`B-spline surface did not produce a face`)))}function RQ(e,t,n,r,i,a){let o=[];for(let s=0;s<t;s++)for(let t=0;t<n;t++){let n=e[s],c=(n?n[t]??0:0)*a;o.push([t*r,s*i,c])}let s=U(H().triangulatedSurface(o,t,n));return NE(s)||PE(s)?O(s):(W(s),k(N(M.SURFACE_FAILED,`surfaceFromGrid: unexpected shape type from sewing`)))}async function zQ(e,t={}){let n=t.channel??`luminance`,r=Math.max(1,Math.round(t.downsample??1));if(typeof createImageBitmap!=`function`)return k(To(M.SURFACE_FAILED,`surfaceFromImage requires createImageBitmap (not available in this environment)`));let i;try{i=await createImageBitmap(e)}catch(e){return k(To(M.SURFACE_FAILED,`surfaceFromImage: failed to decode image — ${e instanceof Error?e.message:String(e)}`))}let a=i.width,o=i.height;if(a<2||o<2)return i.close(),k(P(M.SURFACE_GRID_TOO_SMALL,`surfaceFromImage: image too small (${a}x${o}), need at least 2x2`));if(typeof OffscreenCanvas!=`function`)return i.close(),k(To(M.SURFACE_FAILED,`surfaceFromImage requires OffscreenCanvas (not available in this environment)`));let s=new OffscreenCanvas(a,o).getContext(`2d`);if(!s)return i.close(),k(To(M.SURFACE_FAILED,`surfaceFromImage: could not get 2D canvas context`));s.drawImage(i,0,0),i.close();let c=s.getImageData(0,0,a,o).data,l=[];for(let e=0;e<o;e+=r){let t=[];for(let i=0;i<a;i+=r){let r=(e*a+i)*4,o=c[r]??0,s=c[r+1]??0,l=c[r+2]??0,u;switch(n){case`r`:u=o/255;break;case`g`:u=s/255;break;case`b`:u=l/255;break;default:u=(NQ*o+PQ*s+FQ*l)/255;break}t.push(u)}l.push(t)}let u={};return t.width!==void 0&&(u.width=t.width),t.depth!==void 0&&(u.depth=t.depth),t.scaleZ!==void 0&&(u.scaleZ=t.scaleZ),IQ(l,u)}function BQ(e,t){return H().isNull(e.wrapped)?k(P(M.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function VQ(e,t={}){if(e.length===0)return k(P(M.HULL_EMPTY_INPUT,`hull: at least one shape is required`,void 0,void 0,`Provide one or more shapes to compute a convex hull`));for(let[t,n]of e.entries()){let e=BQ(n,`hull: shapes[${t}]`);if(A(e))return e}let n=t.tolerance??.1;try{let t=H(),r=e.map(e=>e.wrapped),i=U(t.hull(r,n));return FE(i)?O(i):(W(i),k(N(M.HULL_NOT_3D,`Hull result is not a solid; input may be degenerate`)))}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`coplanar`)||t.includes(`fewer than`)||t.includes(`degenerate`)?k(N(M.HULL_DEGENERATE,`Hull degenerate: ${t}`,e)):k(N(M.HULL_FAILED,`Hull operation failed: ${t}`,e))}}function HQ(e){if(e.length<4)return k(P(M.HULL_EMPTY_INPUT,`convexHull: at least 4 points required, got ${e.length}`,void 0,void 0,`Provide 4 or more non-coplanar 3D points`));try{let t=H(),n=e.map(e=>({x:e[0],y:e[1],z:e[2]})),r=U(t.hullFromPoints(n,.1));return FE(r)?O(r):(W(r),k(N(M.HULL_NOT_3D,`convexHull result is not a solid; points may be coplanar`)))}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`coplanar`)||t.includes(`fewer than`)||t.includes(`degenerate`)?k(N(M.HULL_DEGENERATE,`convexHull degenerate: ${t}`,e)):k(N(M.HULL_FAILED,`convexHull failed: ${t}`,e))}}function UQ(e){let n=lD(e);if(n.length!==1)return null;let r=t(n,0);if(wD(r)!==`sphere`)return null;let i=H().area(r.wrapped);return Math.sqrt(i/(4*Math.PI))}function WQ(e,t,n){try{let r=U(H().offset(e.wrapped,t,n));return LE(r)?O(r):(W(r),k(xo(M.MINKOWSKI_NOT_3D,`Minkowski sphere offset did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.MINKOWSKI_FAILED,`Minkowski sphere offset failed: ${t}`,e,{operation:`minkowski`,fastPath:`sphere`}))}}function GQ(e,t,n){let r=H();try{let i=dD(e),a=dD(t);if(i.length===0||a.length===0)return k(N(M.MINKOWSKI_FAILED,`Minkowski sum: one or both shapes have no vertices`,void 0,{operation:`minkowski`}));let o=[];for(let e of i){let[t,n,i]=r.vertexPosition(e.wrapped);for(let e of a){let[a,s,c]=r.vertexPosition(e.wrapped);o.push({x:t+a,y:n+s,z:i+c})}}let s=U(r.hullFromPoints(o,n));return LE(s)?O(s):(W(s),k(xo(M.MINKOWSKI_NOT_3D,`Minkowski hull did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.MINKOWSKI_FAILED,`Minkowski general path failed: ${t}`,e,{operation:`minkowski`}))}}function KQ(e,t,n={}){let{tolerance:r=1e-6}=n;if(H().isNull(e.wrapped))return k(P(M.NULL_SHAPE_INPUT,`minkowski: shape is a null shape`));if(H().isNull(t.wrapped))return k(P(M.MINKOWSKI_NULL_TOOL,`minkowski: tool is a null shape`));if(!LE(e)||!LE(t))return k(P(M.MINKOWSKI_NOT_3D,`minkowski: both shape and tool must be 3D`));let i=UQ(t);return i===null?GQ(e,t,r):WQ(e,i,r)}function qQ(e,t,n={}){let{tolerance:r=1e-6}=n;if(e.length<4)return k(P(M.POLYHEDRON_INSUFFICIENT_POINTS,`polyhedron: need at least 4 points, got ${e.length}`));if(t.length<4)return k(P(M.POLYHEDRON_INSUFFICIENT_FACES,`polyhedron: need at least 4 faces, got ${t.length}`));let i=[];for(let[n,r]of t.entries()){for(let t of r)if(t<0||t>=e.length)return k(P(M.POLYHEDRON_INVALID_INDEX,`polyhedron: face ${n} has out-of-range index ${t} (${e.length} points)`));if(r.length<3)continue;let t=r[0];for(let e=1;e<r.length-1;e++)i.push([t,r[e],r[e+1]])}try{let t=H(),n=e.map(([e,t,n])=>({x:e,y:t,z:n})),a=U(t.buildSolidFromFaces(n,i,r));return FE(a)?O(a):(W(a),k(N(M.POLYHEDRON_FAILED,`Polyhedron did not produce a solid`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.POLYHEDRON_FAILED,`Polyhedron failed: ${t}`,e))}}var JQ=1e-10;function YQ(e,t,n,r){return e*r-t*n}function XQ(e,t,n,r){return e*n+t*r}function ZQ(e,t){return Math.sqrt(e*e+t*t)}function QQ(e,t){let n=e[(t%e.length+e.length)%e.length];if(!n)throw Error(`Invalid polygon index ${t} for length ${e.length}`);return n}function $Q(e){let t=0;for(let n=0;n<e.length;n++){let r=QQ(e,n),i=QQ(e,n+1);t+=r.x*i.y-i.x*r.y}return t<0?[...e].reverse():e}function e$(e,t){let n=QQ(e,t-1),r=QQ(e,t),i=QQ(e,t+1),a=r.x-n.x,o=r.y-n.y,s=ZQ(a,o),c=i.x-r.x,l=i.y-r.y,u=ZQ(c,l);if(s<JQ||u<JQ)return{dx:0,dy:0};let d=-o/s,f=a/s,p=-l/u,m=c/u,h=d+p,g=f+m,_=ZQ(h,g);if(_<JQ)return{dx:d,dy:f};h/=_,g/=_;let v=XQ(h,g,d,f),y=Math.abs(v)>JQ?1/v:1;return{dx:h*y,dy:g*y}}function t$(e){return!e.prev||!e.next?!1:YQ(e.x-e.prev.x,e.y-e.prev.y,e.next.x-e.x,e.next.y-e.y)<-1e-10}function n$(e){let t=e.map((t,n)=>{let r=e$(e,n);return{x:t.x,y:t.y,bx:r.dx,by:r.dy,origIdx:n,prev:null,next:null,active:!0}});for(let e=0;e<t.length;e++){let n=t[e],r=t[(e-1+t.length)%t.length],i=t[(e+1)%t.length];n&&r&&i&&(n.prev=r,n.next=i)}return t}function r$(e,t){let n=e;for(let e=0;e<t&&n;e++)n.active=!1,n=n.next}function i$(e){let t=1,n=e.next;for(;n!==e&&(t++,n=n.next,!(t>1e4)););return t}function a$(e,t){let n=e.bx-t.bx,r=e.by-t.by,i=t.x-e.x,a=t.y-e.y;if(Math.abs(n)<JQ&&Math.abs(r)<JQ)return null;let o;if(o=Math.abs(n)>Math.abs(r)?i/n:a/r,o<JQ)return null;let s=Math.abs(n)>Math.abs(r)?r:n,c=Math.abs(n)>Math.abs(r)?a:i;if(Math.abs(s)>JQ){let e=c/s;if(Math.abs(o-e)>1e-4*Math.max(1,Math.abs(o)))return null}return o}function o$(e,t,n){let r=n.x-t.x,i=n.y-t.y,a=ZQ(r,i);if(a<JQ)return null;let o=-i/a,s=r/a,c=(e.x-t.x)*o+(e.y-t.y)*s,l=e.bx-(t.bx+n.bx)/2,u=e.by-(t.by+n.by)/2,d=l*o+u*s;if(Math.abs(d)<JQ)return null;let f=-c/d;if(f<JQ)return null;let p=e.x+f*e.bx,m=e.y+f*e.by,h=t.x+f*t.bx,g=t.y+f*t.by,_=n.x+f*n.bx,v=n.y+f*n.by,y=_-h,b=v-g,x=ZQ(y,b);if(x<JQ)return f;let S=XQ(p-h,m-g,y,b)/(x*x);return S<-.01||S>1.01?null:f}function s$(e){let t=[];for(let n of e){if(!n.active||!n.next)continue;let e=a$(n,n.next);if(e!==null&&e>JQ){let r=n.x+e*n.bx,i=n.y+e*n.by;t.push({time:e,x:r,y:i,nodeA:n,nodeB:n.next,type:`edge`})}if(t$(n)){let e=n.next.next,r=0;for(;e!==n.prev&&e!==n&&r<1e3;){let i=o$(n,e,e.next);if(i!==null&&i>JQ){let r=n.x+i*n.bx,a=n.y+i*n.by;t.push({time:i,x:r,y:a,nodeA:n,nodeB:e,type:`split`})}e=e.next,r++}}}return t.sort((e,t)=>e.time-t.time),t}function c$(e){if(e.length<3)return O({nodes:[],faces:[]});try{return O(l$(e))}catch(e){return k(wo(M.STRAIGHT_SKELETON_FAILED,e instanceof Error?e.message:String(e),e))}}function l$(e){let t=$Q(e),n=t.length,r=[],i=Array.from({length:n},()=>[]),a=n$(t),o=0,s=n*n*2;for(;o<s;){o++;let e=a.find(e=>e.active);if(!e)break;let t=i$(e);if(t<=3){if(t===3){let t=e,n=t.next,a=n.next,o=a$(t,n),s=o!==null&&o>JQ?o:0,c=(t.x+n.x+a.x)/3+s*(t.bx+n.bx+a.bx)/3,l=(t.y+n.y+a.y)/3+s*(t.by+n.by+a.by)/3,u=r.length;r.push({x:c,y:l,height:s});let d=i[t.origIdx],f=i[n.origIdx],p=i[a.origIdx];d&&d.push(u),f&&f.push(u),p&&p.push(u),t.active=!1,n.active=!1,a.active=!1}else r$(e,t);continue}let n=a.filter(e=>e.active),s=s$(n);if(s.length===0){for(let e of n)e.active=!1;break}let c=s[0];if(!c)break;if(c.type===`edge`){let e=c.nodeA,t=c.nodeB;if(!e.active||!t.active)continue;let n=r.length;r.push({x:c.x,y:c.y,height:c.time});let a=i[e.origIdx],o=i[t.origIdx];a&&a.push(n),o&&o.push(n),e.x=c.x,e.y=c.y,e.next=t.next,t.next.prev=e,t.active=!1;let s=[],l=e;do s.push({x:l.x,y:l.y}),l=l.next;while(l!==e);let u=e$(s,0);e.bx=u.dx,e.by=u.dy}else{let e=c.nodeA,t=c.nodeB;if(!e.active||!t.active)continue;let n=r.length;r.push({x:c.x,y:c.y,height:c.time});let o=i[e.origIdx];o&&o.push(n);let s=i[t.origIdx];s&&s.push(n);let l={x:c.x,y:c.y,bx:0,by:0,origIdx:e.origIdx,prev:null,next:null,active:!0};a.push(l),e.x=c.x,e.y=c.y;let u=e.next,d=t.next;e.next=d,d.prev=e,l.next=u,u.prev=l,l.prev=t,t.next=l;let f=e=>{let t=[],n=e;do t.push({x:n.x,y:n.y}),n=n.next;while(n!==e);return t},p=e$(f(e),0);e.bx=p.dx,e.by=p.dy;let m=e$(f(l),0);l.bx=m.dx,l.by=m.dy}}let c=[];for(let e=0;e<n;e++){let a=(e+1)%n,o=[QQ(t,e),QQ(t,a)],s=[0,0],l=i[a],u=i[e];if(l)for(let e of l){let t=r[e];t&&(o.push({x:t.x,y:t.y}),s.push(t.height))}if(u)for(let e=u.length-1;e>=0;e--){let t=u[e];if(t===void 0)continue;let n=r[t];if(!n)continue;let i=o[o.length-1];i&&ZQ(n.x-i.x,n.y-i.y)>JQ&&(o.push({x:n.x,y:n.y}),s.push(n.height))}o.length>=3&&c.push({vertices:o,heights:s})}let l=[];for(let e of r)l.some(t=>Math.abs(t.x-e.x)<.01&&Math.abs(t.y-e.y)<.01)||l.push(e);return{nodes:l,faces:c}}function u$(e){let t=cD(e).map(e=>{let t=Ak(e);return{x:t[0],y:t[1]}}),n=t[0],r=t[t.length-1];return t.length>1&&n&&r&&Math.abs(n.x-r.x)<1e-10&&Math.abs(n.y-r.y)<1e-10&&t.pop(),t}function d$(e){let t=[];for(let n=1;n<e-1;n++)t.push([0,n,n+1]);return t}function f$(e,t,n,r,i,a){return(n-e)*(a-t)-(r-t)*(i-e)}function p$(e,t,n,r,i,a,o,s){let c=f$(n,r,i,a,e,t),l=f$(i,a,o,s,e,t),u=f$(o,s,n,r,e,t);return!((c<0||l<0||u<0)&&(c>0||l>0||u>0))}function m$(e){let t=e.length;if(t<3)return[];if(t===3)return[[0,1,2]];let n=0;for(let r=0;r<t;r++){let i=e[r],a=e[(r+1)%t];i&&a&&(n+=i.x*a.y-a.x*i.y)}let r=[],i=Array.from({length:t},(e,t)=>t);n<0&&i.reverse();let a=(t,n,r)=>{let a=e[t],o=e[n],s=e[r];if(!a||!o||!s||f$(a.x,a.y,o.x,o.y,s.x,s.y)<=0)return!1;for(let c of i){if(c===t||c===n||c===r)continue;let i=e[c];if(i&&p$(i.x,i.y,a.x,a.y,o.x,o.y,s.x,s.y))return!1}return!0};for(;i.length>3;){let e=!1;for(let t=0;t<i.length;t++){let n=i[(t-1+i.length)%i.length],o=i[t],s=i[(t+1)%i.length];if(!(n===void 0||o===void 0||s===void 0)&&a(n,o,s)){r.push([n,o,s]),i.splice(t,1),e=!0;break}}if(!e)break}if(i.length===3){let[e,t,n]=i;e!==void 0&&t!==void 0&&n!==void 0&&r.push([e,t,n])}return r}function h$(e,t,n){let r=[];for(let i of e.faces){let e=i.vertices.map((e,n)=>[e.x,e.y,(i.heights[n]??0)*t]),a=d$(e.length);for(let[t,i,o]of a){let a=e[t],s=e[i],c=e[o];if(!a||!s||!c)continue;let l=s[0]-a[0],u=s[1]-a[1],d=s[2]-a[2],f=c[0]-a[0],p=c[1]-a[1],m=c[2]-a[2],h=u*m-d*p,g=d*f-l*m,_=l*p-u*f;if(h*h+g*g+_*_<1e-20)continue;let v=n.buildTriFace(a,s,c);v!==null&&r.push(v)}}return r}function g$(e,t){let n=(t?.angle??45)*KE,r=Math.tan(n);try{let t=u$(e);if(t.length<3)return k(N(M.ROOF_FAILED,`Wire must have at least 3 edges for roof generation`));let n=c$(t);if(!n.ok)return n;let i=n.value;if(i.faces.length===0)return k(N(M.ROOF_FAILED,`Straight skeleton computation produced no faces`));let a=H(),o=h$(i,r,a);for(let[e,n,r]of m$(t)){let i=t[e],s=t[n],c=t[r];if(!i||!s||!c)continue;let l=[i.x,i.y,0],u=[s.x,s.y,0],d=[c.x,c.y,0],f=a.buildTriFace(l,d,u);f!==null&&o.push(f)}if(o.length===0)return k(N(M.ROOF_FAILED,`No valid triangular faces could be built`));try{let e=a.sewAndSolidify(o,1e-6),t=a.fixShape(e);return t!==e&&a.dispose(e),O(DE(t))}catch(e){try{let t=DE(a.sew(o,1e-6));return fE(t)?O(t):k(N(M.ROOF_FAILED,`Sew fallback produced invalid solid`,e))}catch(e){return k(N(M.ROOF_FAILED,`Failed to sew roof faces`,e))}}finally{for(let e of o)a.dispose(e)}}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.ROOF_FAILED,`Roof generation failed: ${t}`,e))}}function _$(e){return[[1,0,0,e[0]],[0,1,0,e[1]],[0,0,1,e[2]],[0,0,0,1]]}function v$(e){let t=e[0];return t!==void 0&&typeof t[0]==`number`}function y$(e,t,n){return{__instanced:!0,source:e,placements:t,grid:n,[Symbol.dispose](){e[Symbol.dispose]()}}}function b$(e){return typeof e==`object`&&!!e&&e.__instanced===!0}function x$(e,t){return y$(e,v$(t)?t.map(_$):t.map(e=>e.map(e=>[...e])))}function S$(e,t){let{cols:n,rows:r,pitchX:i,pitchY:a}=t;if(!Number.isInteger(n)||!Number.isInteger(r)||n<1||r<1)throw RangeError(`instanceGrid: cols and rows must be positive integers, got ${n}x${r}`);let o=[];for(let e=0;e<n;e++)for(let t=0;t<r;t++)o.push(_$([e*i,t*a,0]));return y$(e,o,{cols:n,rows:r,pitchX:i,pitchY:a})}function C$(e){return e.placements.length}function w$(e,t={}){let{source:n,placements:r,grid:i}=e;return r.length===0?k(P(`INSTANCE_EMPTY`,`materialize: instance has no placements`)):t.fuse?LE(n)?i?GP(n,[1,0,0],[0,1,0],i.cols,i.rows,i.pitchX,i.pitchY):T$(n,r,!0):k(P(`MATERIALIZE_NOT_3D`,`materialize({fuse:true}) requires a 3D source shape`)):T$(n,r,!1)}function T$(e,t,n){let r=[];for(let n of t){let t=vk(e,n);if(!t.ok){for(let e of r)e[Symbol.dispose]();return t}r.push(t.value)}let i=n?UA(r,{unsafe:!0}):O(fj(r));for(let e of r)(!i.ok||e!==i.value)&&e[Symbol.dispose]();return i}function E$(e,t){return{geometry:eA(e.source,t),instances:e.placements}}var D$={coincident:3,concentric:4,distance:1,angle:1},O$=[1,0,0,0];function k$(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function A$(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function j$(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function M$(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function N$(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function P$(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function F$(e){return P$(M$(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function I$(e,t){let n=k$(iF(t.rotation,e.origin),t.position);return{type:e.type,origin:n,...e.normal?{normal:iF(t.rotation,e.normal)}:{},...e.direction?{direction:iF(t.rotation,e.direction)}:{}}}function L$(e,t,n){let r=e.normal??[0,0,1];return{position:N$(r,j$(r,A$(e.origin,t.origin))+n),rotation:O$}}function R$(e,t){let n=e.direction??[0,0,1],r=oF(t.direction??[0,0,1],n),i=iF(r,t.origin);return{position:A$(e.origin,i),rotation:r}}function z$(e,t,n){let r=P$(e.normal??[0,0,1]),i=P$(t.normal??[0,0,1]),a=Math.acos(Math.max(-1,Math.min(1,j$(i,r)))),o=M$(i,r);return{position:[0,0,0],rotation:aF(Math.hypot(o[0],o[1],o[2])<1e-9?F$(i):o,a-n)}}function B$(e,t,n){let r=A$(t,e),i=Math.hypot(r[0],r[1],r[2]);return{position:A$(k$(e,N$(i<1e-9?[1,0,0]:N$(r,1/i),n)),t),rotation:O$}}function V$(e,t,n,r){let i=P$(e);return{position:N$(i,j$(i,A$(t,n))-r),rotation:O$}}function H$(e,t,n){let r=P$(e.direction??[0,0,1]),i=k$(e.origin,N$(r,j$(r,A$(t,e.origin))));if(n===0)return{position:A$(i,t),rotation:O$};let a=A$(t,i),o=Math.hypot(a[0],a[1],a[2]);return{position:A$(k$(i,N$(o<1e-9?F$(r):N$(a,1/o),n)),t),rotation:O$}}function U$(e,t,n){let r=P$(t.direction??[0,0,1]),i=A$(t.origin,e),a=A$(i,N$(r,j$(r,i))),o=Math.hypot(a[0],a[1],a[2]);return n===0?{position:N$(a,-1),rotation:O$}:{position:A$(N$(o<1e-9?F$(r):N$(a,1/o),n),a),rotation:O$}}function W$(e,t,n){let r=P$(e.direction??[0,0,1]),i=oF(P$(t.direction??[0,0,1]),r),a=A$(iF(i,t.origin),e.origin),o=A$(a,N$(r,j$(r,a))),s=Math.hypot(o[0],o[1],o[2]);return{position:A$(N$(s<1e-9?F$(r):N$(o,1/s),n),o),rotation:i}}var G$=new Set([`plane-plane`,`plane-point`,`point-plane`,`point-point`,`axis-axis`,`axis-point`,`point-axis`]),K$={angle:`plane`,concentric:`axis`},q$=new Set([`coincident`,`distance`,`angle`,`concentric`]);function J$(e,t,n){let r=K$[e];return r?t===r&&n===r:G$.has(`${t}-${n}`)}function Y$(e,t,n){switch(`${e.type}-${t.type}`){case`plane-plane`:case`plane-point`:return L$(e,t,n);case`point-plane`:return V$(t.normal??[0,0,1],e.origin,t.origin,n);case`point-point`:return B$(e.origin,t.origin,n);case`axis-axis`:return n===0?R$(e,t):W$(e,t,n);case`axis-point`:return H$(e,t.origin,n);case`point-axis`:return U$(e.origin,t,n);default:return null}}function X$(e,t,n){switch(e.type){case`concentric`:return R$(t,n);case`angle`:return z$(t,n,(e.value??0)*Math.PI/180);default:{let r=Y$(t,n,e.type===`distance`?e.value??0:0);if(!r)throw Error(`solveMate: unsupported entity pair escaped filter: ${t.type}-${n.type}`);return r}}}function Z$(e,t){let n=new Map;for(let t of e)n.set(t,{position:[0,0,0],rotation:O$});let r=[],i=t.filter(e=>q$.has(e.type)&&e.entityA&&e.entityB),a=new Set;for(let e of i)e.entityB&&a.add(e.entityB.node);let o=new Set;for(let t of e)a.has(t)||o.add(t);for(let e of t)e.type===`fixed`&&e.entityA&&o.add(e.entityA.node);let s=[];for(let e of i){if(!e.entityA||!e.entityB)continue;let t=e.entityA.entity.type,n=e.entityB.entity.type;if(!J$(e.type,t,n)){r.push(`${e.type}(${t}-${n})`);continue}s.push(e)}let c=!0;for(;c&&s.length>0;){c=!1;for(let e=s.length-1;e>=0;e--){let t=s[e];if(!t?.entityA||!t.entityB)continue;let r=t.entityA,i=t.entityB;if(!o.has(r.node)||(s.splice(e,1),c=!0,o.has(i.node)))continue;let a=n.get(r.node)??{position:[0,0,0],rotation:O$},l=I$(r.entity,a);n.set(i.node,X$(t,l,i.entity)),o.add(i.node)}}for(let e of s)r.push(`${e.type}(unanchored)`);return{transforms:n,dof:r.reduce((e,t)=>e+(D$[t]??D$[t.split(`(`)[0]??``]??0),0),converged:r.length===0,unsupported:r}}function Q$(e){if(e.face){let t=wO(e.face);return t?{type:`axis`,origin:t.origin,direction:t.direction}:{type:`plane`,origin:CO(e.face),normal:SO(e.face)}}if(e.edge){if(kk(e.edge)===`LINE`)return{type:`axis`,origin:Ak(e.edge),direction:Nk(e.edge)};let t=Fk(e.edge);return t?{type:`axis`,origin:t.origin,direction:t.direction}:null}return e.point?{type:`point`,origin:e.point}:null}function $$(e,t){let n=Q$(e),r=Q$(t);return!n||!r?k(P(M.ASSEMBLY_MATE_INVALID,`solveAssembly: could not extract geometry from mate entities`)):O({entityA:{node:e.node,entity:n},entityB:{node:t.node,entity:r}})}function e1(e){switch(e.type){case`fixed`:return O({type:`fixed`,entityA:{node:e.entity.node,entity:{type:`point`,origin:[0,0,0]}}});case`coincident`:{let t=$$(e.entityA,e.entityB);return t.ok?O({type:`coincident`,...t.value}):t}case`distance`:{let t=$$(e.entityA,e.entityB);return t.ok?O({type:`distance`,...t.value,value:e.distance}):t}case`angle`:{let t=$$(e.entityA,e.entityB);return t.ok?O({type:`angle`,...t.value,value:e.angle}):t}case`concentric`:{let t=$$(e.axisA,e.axisB);return t.ok?O({type:`concentric`,...t.value}):t}}}function t1(e,t){let n=e.mates??[];return{...e,mates:[...n,t]}}function n1(e){let t=e.mates;if(!t||t.length===0)return k(P(M.ASSEMBLY_MATE_INVALID,`solveAssembly: no mates defined`));try{let n=[];ZP(e,e=>{n.push(e.name)});let r=[];for(let e of t){let t=e1(e);if(!t.ok)return t;r.push(t.value)}let i=Z$(n,r);if(!i.converged){let e=i.unsupported.length>0?`Unsupported constraint types: ${i.unsupported.join(`, `)} (${i.dof} DOF unresolved)`:`Assembly constraint solver did not converge`;return k(N(M.ASSEMBLY_NOT_CONVERGED,e))}return O({transforms:i.transforms,dof:i.dof,converged:i.converged})}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.ASSEMBLY_SOLVE_FAILED,`Assembly solve failed: ${t}`,e))}}function r1(e,t,n=1e-6){return H().isNull(e.wrapped)?k(P(M.NULL_SHAPE_INPUT,`checkInterference: first shape is a null shape`)):H().isNull(t.wrapped)?k(P(M.NULL_SHAPE_INPUT,`checkInterference: second shape is a null shape`)):KT(()=>{let r=H().distance(e.wrapped,t.wrapped);return O({hasInterference:r.value<=n,minDistance:r.value,pointOnShape1:r.point1,pointOnShape2:r.point2})})}function i1(e,n=1e-6){let r=[],i=e.map(e=>SD(e));return e.forEach((a,o)=>{for(let s=o+1;s<e.length;s++){if(a1(t(i,o),t(i,s),n))continue;let c=j(r1(a,t(e,s),n));c.hasInterference&&r.push({i:o,j:s,result:c})}}),r}function a1(e,t,n){return e.xMax+n<t.xMin||t.xMax+n<e.xMin||e.yMax+n<t.yMin||t.yMax+n<e.yMin||e.zMax+n<t.zMin||t.zMax+n<e.zMin}function o1(e){let t=e.split(/\r?\n/),n=[],r=!1,i;for(let e=0;e<t.length-1;e+=2){let a=t[e],o=t[e+1];if(a===void 0||o===void 0)continue;let s=parseInt(a.trim(),10),c=o.trim();if(!isNaN(s)){if(s===2&&c===`ENTITIES`){r=!0;continue}if(r){if(s===0){if(c===`ENDSEC`||c===`EOF`){i&&n.push(i);break}i&&n.push(i),i={type:c,layer:`0`,data:new Map};continue}i&&(s===8?i.layer=c:i.data.set(s,c))}}}return n}function s1(e,t,n=0){let r=e.get(t);if(r===void 0)return n;let i=parseFloat(r);return isNaN(i)?n:i}function c1(e){let{type:t,data:n}=e,r=H();if(t===`LINE`)return r.makeLineEdge([s1(n,10),s1(n,20),s1(n,30)],[s1(n,11),s1(n,21),s1(n,31)]);if(t===`CIRCLE`)return r.makeCircleEdge([s1(n,10),s1(n,20),s1(n,30)],[0,0,1],s1(n,40));if(t===`ARC`){let e=s1(n,50)*Math.PI/180,t=s1(n,51)*Math.PI/180;return r.makeCircleArc([s1(n,10),s1(n,20),s1(n,30)],[0,0,1],s1(n,40),e,t)}}async function l1(e,t){let n;try{n=await e.text()}catch(e){return k(To(M.DXF_IMPORT_FAILED,`Failed to read DXF blob`,e))}let r=o1(n),i=t?.layer===void 0?r:r.filter(e=>e.layer===t.layer);if(i.length===0)return O([]);let a=[];try{for(let e of i){let t=c1(e);t!==void 0&&a.push(t)}return a.length===0?O([]):O([wE(H().makeWire(a))])}catch(e){return k(To(M.DXF_IMPORT_FAILED,`Failed to convert DXF entities to geometry`,e))}finally{for(let e of a)e.delete()}}function u1(e,t,n=1e-6){let r=H(),i=[];for(let[t,n,a]of e){let e=r.buildTriFace(t,n,a);e!==null&&i.push(e)}if(i.length===0)return k(To(t,`No valid triangular faces could be built`));try{let e=U(r.sewAndSolidify(i,n));for(let e of i)r.dispose(e);return O(e)}catch{try{return O(zE(r.sew(i,n)))}catch(e){return k(To(t,`Failed to sew triangular faces`,e))}}}function d1(e){let t=e.split(/\s+/),n=parseFloat(t[1]??``),r=parseFloat(t[2]??``),i=parseFloat(t[3]??``);return isNaN(n)||isNaN(r)||isNaN(i)?null:[n,r,i]}function f1(e){return e.split(/\s+/).slice(1).map(e=>parseInt(e.split(`/`)[0]??``,10)).filter(e=>!isNaN(e))}async function p1(e){let t=(await e.text()).split(`
|
|
60
|
-
`),n=[],r=[];for(let e of t){let t=e.trim();if(t.startsWith(`v `)){let e=d1(t);e&&n.push(e)}else if(t.startsWith(`f `)){let e=f1(t);e.length>=3&&r.push(e)}}if(n.length===0||r.length===0)return k(To(M.OBJ_IMPORT_FAILED,`OBJ file contains no valid geometry`));try{return m1(n,r)}catch(e){let t=e instanceof Error?e.message:String(e);return k(To(M.OBJ_IMPORT_FAILED,`OBJ import failed: ${t}`,e))}}function m1(e,t){let n=[];for(let r of t)for(let t=1;t<r.length-1;t++){let i=r[0]??0,a=r[t]??0,o=r[t+1]??0,s=i>0?i-1:e.length+i,c=a>0?a-1:e.length+a,l=o>0?o-1:e.length+o,u=e[s],d=e[c],f=e[l];!u||!d||!f||n.push([u,d,f])}return u1(n,M.OBJ_IMPORT_FAILED)}function h1(e,t){let n=-1;for(let t=e.length-22;t>=0;t--)if(e[t]===80&&e[t+1]===75&&e[t+2]===5&&e[t+3]===6){n=t;break}if(n<0)return null;let r=new DataView(e.buffer,e.byteOffset,e.byteLength),i=r.getUint32(n+16,!0),a=i+r.getUint32(n+12,!0),o=i,s=new TextDecoder;for(;o<a&&r.getUint32(o,!0)===33639248;){let n=r.getUint16(o+28,!0),i=r.getUint16(o+30,!0),a=r.getUint16(o+32,!0),c=r.getUint32(o+42,!0);if(s.decode(e.subarray(o+46,o+46+n))===t){if(r.getUint16(c+8,!0)!==0)return null;let t=r.getUint16(c+26,!0),n=r.getUint16(c+28,!0),i=r.getUint32(c+18,!0),a=c+30+t+n;return e.subarray(a,a+i)}o+=46+n+i+a}return null}function g1(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95}function _1(e){let t={},n=0;for(;n<e.length;){let r=e.indexOf(`="`,n);if(r<0)break;let i=r;for(;i>0&&g1(e.charCodeAt(i-1));)i--;if(i===r){n=r+2;continue}let a=e.slice(i,r),o=r+2,s=e.indexOf(`"`,o);if(s<0)break;t[a]=e.slice(o,s),n=s+1}return t}function v1(e,t){let n=[],r=`<${t} `,i=0;for(;i<e.length;){let t=e.indexOf(r,i);if(t<0)break;let a=e.indexOf(`>`,t);if(a<0)break;n.push(e.slice(t,a+1)),i=a+1}return n}function y1(e,t){let n=e.indexOf(`<${t}`);if(n<0)return null;let r=e.indexOf(`</${t}>`,n);return r<0?null:e.slice(n,r+t.length+3)}function b1(e){let t=e.startsWith(`#`)?e.slice(1):e;return[parseInt(t.slice(0,2),16)/255,parseInt(t.slice(2,4),16)/255,parseInt(t.slice(4,6),16)/255,t.length>=8?parseInt(t.slice(6,8),16)/255:1]}function x1(e){let t=new Map,n=0;for(;n<e.length;){let r=e.indexOf(`<colorgroup`,n);if(r<0)break;let i=e.indexOf(`</colorgroup>`,r);if(i<0)break;let a=e.slice(r,i+13);n=i+13;let o=e.indexOf(`>`,r);if(o<0)continue;let s=_1(e.slice(r,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of v1(a,`color`)){let t=_1(e).color;t!==void 0&&l.push(b1(t))}t.set(c,l)}let r=0;for(;r<e.length;){let n=e.indexOf(`<basematerials`,r);if(n<0)break;let i=e.indexOf(`</basematerials>`,n);if(i<0)break;let a=e.slice(n,i+16);r=i+16;let o=e.indexOf(`>`,n);if(o<0)continue;let s=_1(e.slice(n,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of v1(a,`base`)){let t=_1(e).displaycolor;t===void 0?l.push([0,0,0,1]):l.push(b1(t))}t.set(c,l)}return t}function S1(e){let t=[],n=[],r=[],i=x1(e);for(let n of v1(e,`vertex`)){let e=_1(n);e.x!==void 0&&e.y!==void 0&&e.z!==void 0&&t.push([parseFloat(e.x),parseFloat(e.y),parseFloat(e.z)])}let a=null,o=null,s=y1(e,`object`);if(s!==null){let e=s.indexOf(`>`);if(e>=0){let t=_1(s.slice(0,e+1));t.pid!==void 0&&(a=parseInt(t.pid,10)),t.pindex!==void 0&&(o=parseInt(t.pindex,10))}}for(let t of v1(e,`triangle`)){let e=_1(t);if(e.v1!==void 0&&e.v2!==void 0&&e.v3!==void 0){n.push([parseInt(e.v1,10),parseInt(e.v2,10),parseInt(e.v3,10)]);let t=null,s=e.pid??(a===null?void 0:String(a)),c=e.p1??(o===null?void 0:String(o));if(s!==void 0&&c!==void 0){let e=parseInt(s,10),n=parseInt(c,10),r=i.get(e);r!==void 0&&n<r.length&&(t=r[n]??null)}r.push(t)}}return{vertices:t,triangles:n,triangleColors:r}}function C1(e){let t=new Map;for(let n of e){if(n===null)continue;let e=n.join(`,`),r=t.get(e);r===void 0?t.set(e,{count:1,color:n}):r.count++}let n=null;for(let e of t.values())(n===null||e.count>n.count)&&(n=e);return n===null?null:n.color}function w1(e){let t=H(),n=e.vertices.map(([e,t,n])=>({x:e,y:t,z:n})),r=e.triangles;try{return O(U(t.buildSolidFromFaces(n,r,1e-6)))}catch{let t=[];for(let[n,r,i]of e.triangles){let a=e.vertices[n],o=e.vertices[r],s=e.vertices[i];!a||!o||!s||t.push([a,o,s])}return u1(t,M.THREEMF_IMPORT_FAILED)}}async function T1(e){try{let t=await e.arrayBuffer(),n=h1(new Uint8Array(t),`3D/3dmodel.model`);if(!n)return k(To(M.THREEMF_IMPORT_FAILED,`3MF archive does not contain 3D/3dmodel.model (or uses unsupported compression)`));let r=S1(new TextDecoder().decode(n));if(r.vertices.length===0||r.triangles.length===0)return k(To(M.THREEMF_IMPORT_FAILED,`3MF model contains no valid geometry`));let i=w1(r);if(i.ok){let e=C1(r.triangleColors);e!==null&&ek(i.value,e)}return i}catch(e){let t=e instanceof Error?e.message:String(e);return k(To(M.THREEMF_IMPORT_FAILED,`3MF import failed: ${t}`,e))}}async function E1(e){try{let t=await e.arrayBuffer();return O(U(H().importGLB(t)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(To(M.GLB_IMPORT_FAILED,`Failed to import GLB: ${t}`,e))}}function $(e){return`__wrapped`in e?e.val:e}function D1(e){return $(e)}function O1(e,t){return uk($(e),t)}function k1(e,t,n){let r=n?.at;return dk($(e),t,r,n?.axis)}function A1(e,t){let n=t?.at;return fk($(e),t?.normal??[1,0,0],n)}function j1(e,t,n){return pk($(e),t,n?.center)}function M1(e){return Sk($(e))}function N1(e,t){return vk($(e),t)}function P1(e,t){return xk($(e),t)}function F1(e,t){return bk($(e),t)}function I1(e,t,n){return zA($(e),$(t),{...n,unsafe:!0})}function L1(e,t,n){return BA($(e),$(t),{...n,unsafe:!0})}function R1(e,t){return UA(e.map(e=>$(e)),{...t,unsafe:!0})}function z1(e,t,n){return WA($(e),t.map(e=>$(e)),{...n,unsafe:!0})}function B1(e,t,n){return VA($(e),$(t),{...n,unsafe:!0})}function V1(e,t,n){return KA($(e),t,n)}function H1(e,t,n){return QA($(e),t,n)}function U1(e,t){return $A($(e),t)}function W1(e,t,n){return ej($(e),t,n)}function G1(e,t){if(e!==void 0)return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(GI()).findAll(t)}function K1(e,t){return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(JI()).findAll(t)}function q1(e){return typeof e==`object`&&!Array.isArray(e)&&typeof e!=`function`?{mode:`distAngle`,distance:e.distance,angle:e.angle}:typeof e==`function`?{mode:`standard`,distance:t=>{let n=e(t);return n===null?null:typeof n==`object`&&!Array.isArray(n)?n.distance:n}}:{mode:`standard`,distance:e}}function J1(e,t,n){let r=$(e),i,a;return n===void 0?(i=void 0,a=t):(i=G1(t,r),a=n),Qj(r,i,a)}function Y1(e,t,n){let r=$(e),i,a;n===void 0?(i=void 0,a=t):(i=G1(t,r),a=n);let o=q1(a);return o.mode===`distAngle`?yj(r,[...i??cD(r)],o.distance,o.angle):$j(r,i,o.distance)}function X1(e,t,n,r){let i=$(e);return eM(i,K1(t,i),n,r?.tolerance)}function Z1(e,t,n){return tM($(e),t,n?.tolerance)}function Q1(e,t){return Xj($(e),t)}function $1(e,t,n){let r=$(e);return rM(r,K1(t,r),n.pullDirection,n.neutralPlane,n.angle)}function e0(e){return lM($(e))}function t0(e){return Ok($(e))}function n0(e,t){return eA($(e),t)}function r0(e,t){return tA($(e),t)}function i0(e){return ED($(e))}function a0(e){return Ck($(e))}function o0(e){return fO(e)}function s0(e){return aM($(e))}function c0(e){return Tk($(e))}function l0(e,t){return EM($(e),typeof t==`number`?[0,0,t]:t)}function u0(e,t){let n=t?.at??[0,0,0];return DM($(e),n,t?.axis??[0,0,1],t?.angle??2*Math.PI)}function d0(e,t){return kM(e.map(e=>$(e)),t)}function f0(e,n){if(n===void 0){let t=lD(e);if(t.length===0)return k(P(M.COMPOUND_NO_FACES,`compoundOps: shape has no faces`));let n=gA(t),r=CO(n)[2];for(let e=1;e<t.length;e++){let i=hA(t,e),a=CO(i)[2];a>r&&(n=i,r=a)}return O(n)}if(typeof n==`function`){let r=n(JI()).findAll(e);return r.length===0?k(Eo(M.COMPOUND_FACE_NOT_FOUND,`compoundOps: face finder matched no faces`)):O(t(r,0))}return O(n)}function p0(e){return`sketchOnPlane`in e&&typeof e.sketchOnPlane==`function`?{wire:e.sketchOnPlane(`XY`).wire,owned:!0}:{wire:e,owned:!1}}function m0(e,t){let n=$(e),{at:r,radius:i,axis:a}=t,o=a??[0,0,1];if(i<=0)return k(P(`DRILL_INVALID_RADIUS`,`Drill radius must be positive`));if(UD(o))return k(P(`DRILL_ZERO_AXIS`,`Drill axis cannot be zero`));let s=VD(o),c=r.length===2?[r[0],r[1],0]:[r[0],r[1],r[2]],l;if(t.depth!==void 0)l=aj(i,t.depth,c,s);else{let e=SD(n),t=[[e.xMin,e.yMin,e.zMin],[e.xMax,e.yMin,e.zMin],[e.xMin,e.yMax,e.zMin],[e.xMax,e.yMax,e.zMin],[e.xMin,e.yMin,e.zMax],[e.xMax,e.yMin,e.zMax],[e.xMin,e.yMax,e.zMax],[e.xMax,e.yMax,e.zMax]],r=1/0,a=-1/0;for(let e of t){let t=(e[0]-c[0])*s[0]+(e[1]-c[1])*s[1]+(e[2]-c[2])*s[2];t<r&&(r=t),t>a&&(a=t)}--r,a+=1,l=aj(i,a-r,[c[0]+s[0]*r,c[1]+s[1]*r,c[2]+s[2]*r],s)}try{return BA(n,l,{unsafe:!0})}finally{l[Symbol.dispose]()}}function h0(e,t){try{var n=PT();let r=$(e),{profile:i,depth:a}=t;if(a<=0)return k(P(`POCKET_INVALID_DEPTH`,`Pocket depth must be positive`));let o=f0(r,t.face);if(A(o))return o;let s=o.value,c=SO(s),l=CO(s),u=n.u(new JT),{wire:d,owned:f}=p0(i);f&&u.register(d);let p=jA(d);if(A(p))return p;u.register(p.value);let m=EM(u.register(uk(p.value,l)),PD(VD(c),-a));return A(m)?m:(u.register(m.value),BA(r,m.value,{unsafe:!0}))}catch(e){n.e=e}finally{n.d()}}function g0(e,t){try{var n=PT();let r=$(e),{profile:i,height:a}=t;if(a<=0)return k(P(`BOSS_INVALID_HEIGHT`,`Boss height must be positive`));let o=f0(r,t.face);if(A(o))return o;let s=o.value,c=SO(s),l=CO(s),u=n.u(new JT),{wire:d,owned:f}=p0(i);f&&u.register(d);let p=jA(d);if(A(p))return p;u.register(p.value);let m=EM(u.register(uk(p.value,l)),PD(VD(c),a));return A(m)?m:(u.register(m.value),zA(r,m.value,{unsafe:!0}))}catch(e){n.e=e}finally{n.d()}}function _0(e,t){try{var n=PT();let r=$(e),i=t?.normal??[1,0,0],a=t?.at;return UD(i)?k(P(`MIRROR_ZERO_NORMAL`,`Mirror plane normal cannot be zero`)):zA(r,n.u(fk(r,i,a)),{unsafe:!0})}catch(e){n.e=e}finally{n.d()}}function v0(e,t){let n=$(e),{xDir:r,xCount:i,xSpacing:a,yDir:o,yCount:s,ySpacing:c}=t;if(i<1||s<1)return k(P(`PATTERN_INVALID_COUNT`,`Pattern counts must be at least 1`));if(UD(r))return k(P(`PATTERN_ZERO_DIRECTION`,`X direction cannot be zero`));if(UD(o))return k(P(`PATTERN_ZERO_DIRECTION`,`Y direction cannot be zero`));if(i===1&&s===1)return O(n);let l=VD(r),u=VD(o),d=[n],f=[];for(let e=0;e<i;e++)for(let t=0;t<s;t++){if(e===0&&t===0)continue;let r=uk(n,[l[0]*a*e+u[0]*c*t,l[1]*a*e+u[1]*c*t,l[2]*a*e+u[2]*c*t]);d.push(r),f.push(r)}try{return UA(d,{unsafe:!0})}finally{for(let e of f)e[Symbol.dispose]()}}var y0=class extends Error{code;kind;suggestion;metadata;constructor(e){let t=e.suggestion?`${e.message}\nSuggestion: ${e.suggestion}`:e.message;super(t),this.name=`BrepError`,this.code=e.code,this.kind=e.kind,e.suggestion&&(this.suggestion=e.suggestion),e.metadata&&(this.metadata=e.metadata)}};function b0(e){if(A(e))throw new y0(e.error);return e.value}function x0(e){return e}function S0(e){return e}function C0(e){return e}function w0(e){return e}function T0(e){return{val:e,__wrapped:!0,translate:t=>F0(O1(e,t)),rotate:(t,n)=>F0(k1(e,t,n)),mirror:t=>F0(A1(e,t)),scale:(t,n)=>F0(j1(e,t,n)),applyMatrix:t=>F0(b0(N1(e,t))),moveX:t=>F0(O1(e,[t,0,0])),moveY:t=>F0(O1(e,[0,t,0])),moveZ:t=>F0(O1(e,[0,0,t])),rotateX:t=>F0(k1(e,t,{axis:[1,0,0]})),rotateY:t=>F0(k1(e,t,{axis:[0,1,0]})),rotateZ:t=>F0(k1(e,t,{axis:[0,0,1]})),bounds:()=>SD(e),describe:()=>i0(e),clone:()=>F0(b0(M1(e))),mesh:t=>n0(e,t),meshEdges:t=>r0(e,t),isValid:()=>s0(e),isEmpty:()=>c0(e),heal:()=>F0(b0(e0(e))),simplify:()=>F0(b0(t0(e))),toBREP:()=>b0(a0(e)),apply:t=>F0(t(e)),applyResult:t=>F0(b0(t(e))),done:()=>e}}function E0(e){return{fuse:(t,n)=>I0(b0(I1(e,$(t),{...n,unsafe:!0}))),cut:(t,n)=>I0(b0(L1(e,$(t),{...n,unsafe:!0}))),intersect:(t,n)=>I0(b0(B1(e,$(t),{...n,unsafe:!0}))),fuseAll:(t,n)=>I0(w0(b0(UA([e,...t.map($)],{...n,unsafe:!0})))),cutAll:(t,n)=>I0(w0(b0(WA(e,t,{...n,unsafe:!0})))),section:(t,n)=>F0(b0(V1(e,t,n))),split:t=>F0(b0(U1(e,t))),slice:(t,n)=>b0(W1(e,t,n))}}function D0(e){return{fillet(...t){return t.length===1?I0(w0(b0(J1(x0(e),t[0])))):I0(w0(b0(J1(x0(e),t[0],t[1]))))},chamfer(...t){return t.length===1?I0(w0(b0(Y1(x0(e),t[0])))):I0(w0(b0(Y1(x0(e),t[0],t[1]))))},shell:(t,n,r)=>I0(w0(b0(X1(x0(e),t,n,r)))),offset:(t,n)=>I0(w0(b0(Z1(x0(e),t,n)))),draft:(t,n)=>I0(w0(b0($1(x0(e),t,n))))}}function O0(e){return{drill:t=>I0(b0(m0(e,t))),pocket:t=>I0(b0(h0(e,t))),boss:t=>I0(b0(g0(e,t))),mirrorJoin:t=>I0(b0(_0(e,t))),rectangularPattern:t=>I0(b0(v0(e,t)))}}function k0(e){return{volume:()=>b0(zM(e)),area:()=>b0(BM(e)),volumeProps:()=>b0(IM(e)),surfaceProps:()=>b0(LM(e))}}function A0(e){return{edges:()=>cD(e),faces:()=>lD(e),wires:()=>uD(e),vertices:()=>dD(e)}}function j0(e){return{linearPattern:(t,n,r)=>I0(w0(b0(UP(e,t,n,r)))),circularPattern:(t,n,r)=>I0(w0(b0(WP(e,t,n,r))))}}function M0(e){return{...T0(e),...E0(e),...D0(e),...O0(e),...k0(e),...A0(e),...j0(e)}}function N0(e){return{...T0(e),length:()=>Pk(e),startPoint:()=>Ak(e),endPoint:()=>jk(e),pointAt:t=>Mk(e,t),tangentAt:t=>Nk(e,t),isClosed:()=>Ik(e),sweep(t,n){if(!ME(e))throw Error(`sweep requires a Wire`);let r=b0(vM(C0(e),$(t),n));return I0(Array.isArray(r)?r[0]:r)}}}function P0(e){return{...T0(e),area:()=>b0(BM(e)),normalAt:t=>SO(e,t),center:()=>CO(e),surfaceType:()=>b0(mO(e)),outerWire:()=>EO(e),innerWires:()=>OO(e),extrude:t=>I0(b0(l0(S0(e),t))),revolve:t=>I0(b0(u0(S0(e),t)))}}function F0(e){return LE(e)?M0(e):NE(e)?P0(e):jE(e)||ME(e)?N0(e):T0(e)}function I0(e){return M0(e)}function L0(e){if(e&&typeof e==`object`&&`face`in e&&typeof e.face==`function`&&`_defaultOrigin`in e)return P0(e.face());if(e&&typeof e==`object`&&`wrapped`in e)return NE(e)?P0(e):LE(e)?M0(e):jE(e)||ME(e)?N0(e):T0(e);throw Error(`shape() requires a Sketch or branded shape type`)}var R0=.25,z0=e=>Math.tan(e)-e;function B0(e,t,n,r){let i=e/Math.cos(t),a=n+r*(Math.tan(t)-t);return[i*Math.cos(a),i*Math.sin(a),0]}function V0(e,t,n,r,i){let a=[];for(let o=0;o<=r;o++){let s=.5-.5*Math.cos(o/r*Math.PI);a.push(B0(e,s*t,n,i))}return a}function H0(e){return Math.max(16,Math.round(8*Math.sqrt(e)))}function U0(e,t,n,r,i,a,o){let s=e*t/2,c=s*Math.cos(n),l=t*(1+r),u=t*(1+i-r),d=o?s-t*(1-r):s+l,f=o?s+t*(1+i+r):s-u,p=a/s,m=(Math.PI/2+2*r*Math.tan(n))/e+(o?p:-p),h=o?f:d;return{rPitch:s,rb:c,rTip:d,rRoot:f,alphaPitch:n,halfToothAngle:m,alphaTip:h<=c?0:Math.acos(Math.min(1,c/h)),toothPitch:2*Math.PI/e,isInternal:o}}function W0(e,t,n){if(t===0)return O(e);let r=z0(e)+2*t*Math.tan(e)/n,i,a;if(r>z0(e)?(i=e,a=Math.PI/2-1e-6):(i=1e-4,a=e),r>z0(a)||r<z0(i))return k(P(`GEAR_PA_OUT_OF_RANGE`,`working pressure angle out of range — target inv(αw)=${r.toFixed(4)} not in [${z0(i).toFixed(4)}, ${z0(a).toFixed(4)}]`,void 0,{target:r,invLo:z0(i),invHi:z0(a)}));for(let e=0;e<50;e++){let e=.5*(i+a);z0(e)<r?i=e:a=e}return O(.5*(i+a))}function G0(e,t,n,r,i){return W0(e,t+n,r+i)}function K0(e,t,n,r,i){return W0(e,n-t,i-r)}function q0(e,t,n,r,i){return(e+t)*n*Math.cos(r)/(2*Math.cos(i))}function J0(e,t,n,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(n))return k(P(`GEAR_NON_INTEGER_TEETH`,`tooth counts and planet count must be integers`));if(e<4||t<4||n<2)return k(P(`GEAR_TEETH_TOO_FEW`,`zs ≥ 4, zp ≥ 4, N ≥ 2 required`));if((2*e+2*t)%n!=0)return k(P(`GEAR_ASSEMBLY`,`(2·zs + 2·zp) must be divisible by N — got ${2*e+2*t} mod ${n} = ${(2*e+2*t)%n}`));let i=t+2+2*r,a=(e+t)*Math.sin(Math.PI/n);return a<=i?k(P(`GEAR_PLANET_COLLISION`,`planet tips would collide: (zs+zp)·sin(π/N) = ${a.toFixed(3)} ≤ planet tip = ${i.toFixed(3)}`)):O(void 0)}function Y0(e,t,n,r,i,a,o,s){return(Math.sqrt(Math.max(0,e*e-t*t))+Math.sqrt(Math.max(0,n*n-r*r))-i*Math.sin(s))/(Math.PI*a*Math.cos(o))}function X0(e,t,n,r,i,a,o,s){return(Math.sqrt(Math.max(0,e*e-t*t))-Math.sqrt(Math.max(0,n*n-r*r))+i*Math.sin(s))/(Math.PI*a*Math.cos(o))}function Z0(e,t){return 1-e*Math.sin(t)*Math.sin(t)/2}function Q0(e,t,n){return Math.max(0,Z0(e,t)-n)}function $0(e){return e<8?.2:.485-2.88/e}function e2(e,t,n,r){let i=e*1e3,a=$0(r);return a<=0||n<=0||t<=0?1/0:2*i/(r*t*t*n*a)}function t2(e,t,n=!1){let r=(1.4+6.5/e)*(20/(t*180/Math.PI))**.15;return n?r*.85:r}function n2(e,t,n,r,i,a=!1){return e2(e,t,n,r)*t2(r,i,a)}function r2(e){return e/2}function i2(e,t){return e+2*t}function a2(e){return e%2==0?Math.PI/e:0}function o2(e,t,n){return e*(1+t/n)+a2(n)}function s2(e={}){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=(e.pressureAngleDeg??20)*Math.PI/180,o=e.sunShift??0,s=e.planetShift??0,c=J0(n,r,i,s);if(A(c))return c;let l=G0(a,o,s,n,r);if(A(l))return l;let u=q0(n,r,t,a,l.value),d=[];for(let e=0;e<i;e++){let t=e*2*Math.PI/i,a=o2(t,n,r);d.push({rotationDeg:a*180/Math.PI,position:[u*Math.cos(t),u*Math.sin(t),0]})}return O(d)}function c2(e,t,n,r,i){let a=t*e.toothPitch,o=(t+1)%n*e.toothPitch,s=z0(e.alphaPitch),c=a-e.halfToothAngle-s,l=a+e.halfToothAngle+s,u=V0(e.rb,e.alphaTip,c,r,1),d=V0(e.rb,e.alphaTip,l,r,-1).reverse(),f=gA(u),p=_A(u),m=gA(d),h=_A(d),g=[],_=e=>{i.register(e),g.push(e)},v=e.isInternal?e.rb<e.rRoot:e.rb>e.rRoot;v&&_(bA([e.rRoot*Math.cos(c),e.rRoot*Math.sin(c),0],f));let y=e.rPitch*1e-5,b=DA(u,{tolerance:y});if(A(b))return b;_(b.value),_(wA(p,[e.rTip*Math.cos(a),e.rTip*Math.sin(a),0],m));let x=DA(d,{tolerance:y});if(A(x))return x;_(x.value),v&&_(bA(h,[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]));let S=o-e.halfToothAngle-s,C=.5*(l+S);return S<l&&(C+=Math.PI),_(wA(v?[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]:h,[e.rRoot*Math.cos(C),e.rRoot*Math.sin(C),0],v?[e.rRoot*Math.cos(S),e.rRoot*Math.sin(S),0]:[e.rb*Math.cos(S),e.rb*Math.sin(S),0])),O(g)}function l2(e){return d2(e,!1)}function u2(e){return d2(e,!0)}function d2(e,t){try{var n=PT();let{teeth:r,moduleSize:i,pressureAngle:a,shift:o,clearance:s,flankThinning:c,samples:l=H0(i)}=e;if(r<4)return k(P(`GEAR_TEETH_TOO_FEW`,`gear needs ≥ 4 teeth, got ${r}`));if(i<=0)return k(P(`GEAR_MODULE_NONPOSITIVE`,`module must be > 0, got ${i}`));let u=U0(r,i,a,o,s,c,t),d=n.u(new JT),f=[];for(let e=0;e<r;e++){let t=c2(u,e,r,l,d);if(A(t))return t;f.push(...t.value)}let p=AA(f);return A(p)?p:O(p.value)}catch(e){n.e=e}finally{n.d()}}function f2(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=R0,flankThinning:s=0,bore:c=0,samples:l}=e;if(r<=0)return k(P(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return k(P(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=U0(t,n,u,a,o,s,!1);if(c>0&&c>=2*d.rRoot)return k(P(`GEAR_BORE_TOO_LARGE`,`bore diameter ${c.toFixed(2)} ≥ root diameter ${(2*d.rRoot).toFixed(2)} — would erase the gear teeth`));let f=l2({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(f))return f;let p=m2(t,u,a);return y2(f.value,r,c,d,p)}function p2(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=R0,flankThinning:s=0,ringWallThickness:c=2*e.moduleSize,samples:l}=e;if(r<=0)return k(P(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(c<=0)return k(P(`GEAR_WALL_NONPOSITIVE`,`ringWallThickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return k(P(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=u2({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(d))return d;let f=U0(t,n,u,a,o,s,!0),p=v2(f.rPitch+c);return A(p)?p:x2(p.value,d.value,r,f,[])}function m2(e,t,n){let r=Q0(e,t,n);return r<=0?[]:[{code:`UNDERCUT_RISK`,severity:`warning`,message:`gear is undercut: increase shift by ${r.toFixed(3)} to avoid (z=${e})`,context:{deficit:r,teeth:e}}]}function h2(e){let t=_2(e);if(A(t))return t;let n=t.value,r=g2(n);if(A(r))return r;let{sun:i,planet:a,ring:o}=r.value,s=T2(n,i,a,o),c=C2(a.solid,n);a.solid.delete();let l=w2(o.solid,n.zr),u=E2(n,s);return O({sun:i.solid,planets:c,ring:l,ringTeeth:n.zr,workingPressureAngle:n.alphaW_sp,centerDistance:n.centerDistance,contactRatio:{sunPlanet:s.crSunPlanet,planetRing:s.crPlanetRing},undercutDeficit:{sun:s.undercutSun,planet:s.undercutPlanet},...s.lewisStress?{lewisStress:s.lewisStress}:{},...s.stressConcentrationFactor?{stressConcentrationFactor:s.stressConcentrationFactor}:{},diagnostics:u})}function g2(e){let t=e.samples===void 0?{}:{samples:e.samples},n={moduleSize:e.moduleSize,thickness:e.thickness,pressureAngleDeg:e.pressureAngleDeg,clearance:e.clearance,flankThinning:e.bHalf,...t},r=f2({...n,teeth:e.sunTeeth,shift:e.sunShift,bore:e.sunBore});if(A(r))return r;let i=f2({...n,teeth:e.planetTeeth,shift:e.planetShift,bore:e.planetBore});if(A(i))return r.value.solid.delete(),i;let a=p2({...n,teeth:e.zr,shift:e.ringShift,ringWallThickness:e.ringWallThickness});return A(a)?(r.value.solid.delete(),i.value.solid.delete(),a):O({sun:r.value,planet:i.value,ring:a.value})}function _2(e){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=e.pressureAngleDeg??20,o=a*Math.PI/180,s=e.sunShift??0,c=e.planetShift??0,l=e.ringShift??0;if(e.thickness<=0)return k(P(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));let u=J0(n,r,i,c);if(A(u))return u;let d=i2(n,r),f=G0(o,s,c,n,r);if(A(f))return f;let p=K0(o,c,l,r,d);if(A(p))return p;let m=q0(n,r,t,o,f.value);return O({moduleSize:t,sunTeeth:n,planetTeeth:r,numPlanets:i,pressureAngleDeg:a,alpha:o,alphaW_sp:f.value,alphaW_pr:p.value,clearance:e.clearance??.25,bHalf:r2(e.backlash??0),sunShift:s,planetShift:c,ringShift:l,ringWallThickness:e.ringWallThickness??2*t,thickness:e.thickness,sunBore:e.sunBore??0,planetBore:e.planetBore??0,...e.appliedTorque===void 0?{}:{appliedTorque:e.appliedTorque},...e.samples===void 0?{}:{samples:e.samples},zr:d,centerDistance:m})}function v2(e){try{var t=PT();let n=AA([t.u(new JT).register(xA(e,[0,0,0],[0,0,1]))]);return A(n)?n:O(n.value)}catch(e){t.e=e}finally{t.d()}}function y2(e,t,n,r,i){try{var a=PT();let o=a.u(new JT);o.register(e);let s=jA(e);if(A(s))return s;o.register(s.value);let c=EM(s.value,[0,0,t]);if(A(c))return c;if(n<=0)return O(S2(c.value,r,i));let l=a.u(new JT);l.register(c.value);let u=b2(n/2);if(A(u))return u;l.register(u.value);let d=EM(u.value,[0,0,t+1]);if(A(d))return d;l.register(d.value);let f=l.register(uk(d.value,[0,0,-.5])),p=BA(c.value,f);return A(p)?p:O(S2(p.value,r,i))}catch(e){a.e=e}finally{a.d()}}function b2(e){let t=v2(e);return A(t)?t:jA(t.value)}function x2(e,t,n,r,i){let a=jA(e,[t]);if(A(a))return a;let o=EM(a.value,[0,0,n]);return A(o)?o:O(S2(o.value,r,i))}function S2(e,t,n=[]){return{solid:e,diagnostics:n,pitchDiameter:2*t.rPitch,baseDiameter:2*t.rb,tipDiameter:2*t.rTip,rootDiameter:2*t.rRoot}}function C2(e,t){let n=[];try{for(let r=0;r<t.numPlanets;r++){let i=r*2*Math.PI/t.numPlanets,a=dk(e,o2(i,t.sunTeeth,t.planetTeeth)*180/Math.PI);try{let e=[t.centerDistance*Math.cos(i),t.centerDistance*Math.sin(i),0];n.push(uk(a,e))}finally{a.delete()}}return n}catch(e){for(let e of n)e.delete();throw e}}function w2(e,t){let n=a2(t);if(n===0)return e;let r=dk(e,n*180/Math.PI);return e.delete(),r}function T2(e,t,n,r){let i={crSunPlanet:Y0(t.tipDiameter/2,t.baseDiameter/2,n.tipDiameter/2,n.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_sp),crPlanetRing:X0(n.tipDiameter/2,n.baseDiameter/2,r.tipDiameter/2,r.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_pr),undercutSun:Q0(e.sunTeeth,e.alpha,e.sunShift),undercutPlanet:Q0(e.planetTeeth,e.alpha,e.planetShift)};if(e.appliedTorque!==void 0){let t=e.appliedTorque;i.lewisStress={sun:n2(t,e.moduleSize,e.thickness,e.sunTeeth,e.alpha),planet:n2(t*e.planetTeeth/e.sunTeeth,e.moduleSize,e.thickness,e.planetTeeth,e.alpha),ring:n2(t*e.zr/e.sunTeeth,e.moduleSize,e.thickness,e.zr,e.alpha,!0)},i.stressConcentrationFactor={sun:t2(e.sunTeeth,e.alpha),planet:t2(e.planetTeeth,e.alpha),ring:t2(e.zr,e.alpha,!0)}}return i}function E2(e,t){let n=[];t.crSunPlanet<1.2&&n.push({code:`CONTACT_RATIO_LOW_SUN_PLANET`,severity:`warning`,message:`sun-planet contact ratio ${t.crSunPlanet.toFixed(2)} is below 1.2 — may run unevenly`,context:{value:t.crSunPlanet}}),t.crPlanetRing<1.2&&n.push({code:`CONTACT_RATIO_LOW_PLANET_RING`,severity:`warning`,message:`planet-ring contact ratio ${t.crPlanetRing.toFixed(2)} is below 1.2 — may run unevenly`,context:{value:t.crPlanetRing}}),t.undercutSun>0&&n.push({code:`UNDERCUT_RISK_SUN`,severity:`warning`,message:`sun gear is undercut: increase sunShift by ${t.undercutSun.toFixed(3)} to avoid`,context:{deficit:t.undercutSun,sunTeeth:e.sunTeeth}}),t.undercutPlanet>0&&n.push({code:`UNDERCUT_RISK_PLANET`,severity:`warning`,message:`planet gear is undercut: increase planetShift by ${t.undercutPlanet.toFixed(3)} to avoid`,context:{deficit:t.undercutPlanet,planetTeeth:e.planetTeeth}});let r=Math.abs(e.sunShift)+Math.abs(e.planetShift)+Math.abs(e.ringShift);e.appliedTorque!==void 0&&r>.05&&n.push({code:`LEWIS_Y_SHIFT_UNCORRECTED`,severity:`info`,message:`Lewis stress uses unshifted Y(z) and K_f approximations; expect ±5% per 0.1 of profile shift`});let i=e.ringShift-(e.sunShift+2*e.planetShift);return Math.abs(i)>1e-6&&n.push({code:`PLANETARY_SHIFT_KINEMATIC_MISMATCH`,severity:`warning`,message:`ringShift should equal sunShift + 2·planetShift for both meshes to share working PA; off by ${i.toFixed(3)}`,context:{kinematicError:i,sunShift:e.sunShift,planetShift:e.planetShift,ringShift:e.ringShift}}),n}var D2=PX({addHoles:()=>zP,bezier:()=>EP,box:()=>pP,bsplineApprox:()=>TP,circle:()=>bP,compound:()=>FP,cone:()=>gP,cylinder:()=>mP,ellipse:()=>xP,ellipseArc:()=>wP,ellipsoid:()=>vP,face:()=>AP,fill:()=>MA,filledFace:()=>jP,helix:()=>SP,line:()=>yP,offsetFace:()=>LP,polygon:()=>NP,polyhedron:()=>qQ,sewShells:()=>RP,solid:()=>IP,sphere:()=>hP,subFace:()=>MP,tangentArc:()=>DP,threePointArc:()=>CP,torus:()=>_P,vertex:()=>PP,wire:()=>OP,wireLoop:()=>kP}),O2=PX({checkBoolean:()=>Nj,convexHull:()=>HQ,cut:()=>L1,cutAll:()=>WA,cutAllBisect:()=>wj,fuse:()=>I1,fuseAll:()=>UA,fuseAllBisect:()=>Oj,hull:()=>VQ,intersect:()=>B1,minkowski:()=>KQ,section:()=>V1,sectionToFace:()=>H1,slice:()=>W1,split:()=>U1}),k2=PX({chamfer:()=>Y1,draft:()=>$1,fillet:()=>J1,heal:()=>e0,offset:()=>Z1,shell:()=>X1,simplify:()=>t0,thicken:()=>Q1,variableFillet:()=>iM}),A2=PX({applyMatrix:()=>N1,clone:()=>M1,composeTransforms:()=>yk,mirror:()=>A1,rotate:()=>k1,scale:()=>j1,transformCopy:()=>P1,translate:()=>O1}),j2=PX({checkAllInterferences:()=>i1,checkInterference:()=>r1,createDistanceQuery:()=>WM,measureArea:()=>BM,measureCurvatureAt:()=>GM,measureCurvatureAtMid:()=>KM,measureDistance:()=>HM,measureDistanceProps:()=>UM,measureLength:()=>VM,measureLinearProps:()=>RM,measureSurfaceProps:()=>LM,measureVolume:()=>zM,measureVolumeProps:()=>IM}),M2=PX({blueprintToDXF:()=>SY,exportAssemblySTEP:()=>HP,exportDXF:()=>xY,exportGlb:()=>cY,exportGltf:()=>sY,exportIGES:()=>sA,exportOBJ:()=>ZJ,exportSTEP:()=>aA,exportSTEPConfigured:()=>aX,exportSTL:()=>oA,exportThreeMF:()=>VY,importDXF:()=>l1,importGLB:()=>E1,importIGES:()=>cX,importOBJ:()=>p1,importSTEP:()=>oX,importSTL:()=>sX,importSVG:()=>iX,importSVGPathD:()=>rX,importThreeMF:()=>T1}),N2=PX({cornerFinder:()=>xR,edgeFinder:()=>GI,faceFinder:()=>JI,getSingleFace:()=>ZI,vertexFinder:()=>UX,wireFinder:()=>XI}),P2=PX({complexExtrude:()=>bM,extrude:()=>l0,guidedSweep:()=>TM,loft:()=>d0,multiSectionSweep:()=>wM,revolve:()=>u0,roof:()=>g$,supportExtrude:()=>yM,surfaceFromGrid:()=>IQ,surfaceFromImage:()=>zQ,sweep:()=>vM,twistExtrude:()=>xM}),F2=PX({circularPattern:()=>WP,linearPattern:()=>UP}),I2=14695981039346656037n,L2=1099511628211n,R2=18446744073709551615n;function z2(){return I2}function B2(e,t){return(e^BigInt(t&255))*L2&R2}function V2(e,t){let n=e;for(let e=0;e<t.length;e++)n=B2(n,t[e]??0);return n}var H2=new TextEncoder;function U2(e,t){return V2(e,H2.encode(t))}var W2=new ArrayBuffer(8),G2=new DataView(W2),K2=new Uint8Array(W2);function q2(e,t){return G2.setFloat64(0,Object.is(t,-0)?0:t),V2(e,K2)}function J2(e,t){let n=e,r=t&R2;for(let e=0;e<8;e++)n=B2(n,Number(r&255n)),r>>=8n;return n}function Y2(e,t){let n=e,r=t|0;for(let e=0;e<4;e++)n=B2(n,r&255),r>>>=8;return n}function X2(e,t){return B2(e,+!!t)}function Z2(e){return(e&R2).toString(16).padStart(16,`0`)}var Q2=new Set;function $2(e){return U2(z2(),e)}function e4(e){return{kind:`NumLit`,value:e,structuralHash:q2($2(`NumLit`),e),freeParams:Q2}}function t4(e){let t=$2(`Vec3Lit`);for(let n of e)t=q2(t,n);return{kind:`Vec3Lit`,value:e,structuralHash:t,freeParams:Q2}}function n4(e){let t=$2(`Vec2Lit`);for(let n of e)t=q2(t,n);return{kind:`Vec2Lit`,value:e,structuralHash:t,freeParams:Q2}}function r4(e){return{kind:`Param`,name:e,structuralHash:U2($2(`Param`),e),freeParams:new Set([e])}}function i4(e,t,n){let r=U2($2(`BinOp`),e);return r=J2(r,t.structuralHash),r=J2(r,n.structuralHash),{kind:`BinOp`,op:e,a:t,b:n,structuralHash:r,freeParams:m4(t.freeParams,n.freeParams)}}function a4(e,t){let n=U2($2(`UnaryOp`),e);return n=J2(n,t.structuralHash),{kind:`UnaryOp`,op:e,arg:t,structuralHash:n,freeParams:t.freeParams}}function o4(e,t){let n=Y2($2(`Component`),t);return n=J2(n,e.structuralHash),{kind:`Component`,vec:e,index:t,structuralHash:n,freeParams:e.freeParams}}function s4(e,t){let n=Y2($2(`BuildVec`),e),r=new Set;for(let e of t){n=J2(n,e.structuralHash);for(let t of e.freeParams)r.add(t)}return{kind:`BuildVec`,dim:e,components:t,structuralHash:n,freeParams:r}}var c4=(e,t)=>i4(`+`,e,t),l4=(e,t)=>i4(`*`,e,t);function u4(e){return typeof e==`number`?e4(e):e}function d4(e,t){if(!Array.isArray(e))return e;let n=e;return n.every(e=>typeof e==`number`)?t===3?t4([n[0],n[1],n[2]]):n4([n[0],n[1]]):s4(t,n.map(u4))}function f4(e){return d4(e,3)}function p4(e){return d4(e,2)}function m4(e,t){if(e.size===0)return t;if(t.size===0)return e;let n=new Set(e);for(let e of t)n.add(e);return n}function h4(e){return typeof e==`number`}function g4(e,t){return h4(e)?O(e):k(P(M.NULL_SHAPE_INPUT,`${t}: expected number, got ${Array.isArray(e)?`vector(${e.length})`:typeof e}`))}function _4(e,t,n){return Array.isArray(e)&&e.length===t?O(e):k(P(M.NULL_SHAPE_INPUT,`${n}: expected Vec${t}, got ${h4(e)?`number`:`vector(${e.length})`}`))}function v4(e,t){switch(e.kind){case`NumLit`:return O(e.value);case`Vec3Lit`:return O(e.value);case`Vec2Lit`:return O(e.value);case`Param`:{let n=t[e.name];return n===void 0?k(P(M.NULL_SHAPE_INPUT,`unbound param: ${e.name}`)):O(n)}case`BinOp`:return y4(e,t);case`UnaryOp`:return b4(e,t);case`Component`:return x4(e,t);case`BuildVec`:return S4(e,t)}}function y4(e,t){let n=v4(e.a,t);if(!n.ok)return n;let r=v4(e.b,t);if(!r.ok)return r;let i=g4(n.value,`BinOp(${e.op}).a`);if(!i.ok)return i;let a=g4(r.value,`BinOp(${e.op}).b`);if(!a.ok)return a;switch(e.op){case`+`:return O(i.value+a.value);case`-`:return O(i.value-a.value);case`*`:return O(i.value*a.value);case`/`:return a.value===0?k(P(M.NULL_SHAPE_INPUT,`BinOp(/): division by zero`)):O(i.value/a.value)}}function b4(e,t){let n=v4(e.arg,t);if(!n.ok)return n;let r=g4(n.value,`UnaryOp(${e.op})`);if(!r.ok)return r;let i=r.value;switch(e.op){case`neg`:return O(-i);case`sin`:return O(Math.sin(i));case`cos`:return O(Math.cos(i));case`sqrt`:return O(Math.sqrt(i));case`abs`:return O(Math.abs(i))}}function x4(e,t){let n=v4(e.vec,t);if(!n.ok)return n;if(h4(n.value))return k(P(M.NULL_SHAPE_INPUT,`Component: cannot index a scalar`));let r=n.value,i=r[e.index];return i===void 0?k(P(M.NULL_SHAPE_INPUT,`Component: index ${e.index} out of range for Vec${r.length}`)):O(i)}function S4(e,t){if(e.components.length!==e.dim)return k(P(M.NULL_SHAPE_INPUT,`BuildVec(${e.dim}): expected ${e.dim} components, got ${e.components.length}`));let n=[];for(let r of e.components){let e=v4(r,t);if(!e.ok)return e;let i=g4(e.value,`BuildVec.component`);if(!i.ok)return i;n.push(i.value)}return O(e.dim===2?[n[0],n[1]]:[n[0],n[1],n[2]])}function C4(e,t,n){let r=v4(e,t);return r.ok?g4(r.value,n):r}function w4(e,t,n){let r=v4(e,t);if(!r.ok)return r;let i=_4(r.value,3,n);if(!i.ok)return i;let[a,o,s]=i.value;return O([a,o,s])}function T4(e,t){if(t.size===0)return Object.freeze({});let n={};for(let r of t){let t=e[r];t!==void 0&&(n[r]=t)}return Object.freeze(n)}var E4=new Set;function D4(e){return U2(z2(),e)}function O4(e,t){return J2(e,t.structuralHash)}function k4(e,t){return t===void 0?X2(e,!1):O4(X2(e,!0),t)}function A4(e,t){return t===void 0?X2(e,!1):q2(X2(e,!0),t)}function j4(...e){let t=new Set;for(let n of e)if(n)for(let e of n.freeParams)t.add(e);return t.size===0?E4:t}function M4(e,t,n){let r=u4(e),i=u4(t),a=u4(n),o=D4(`Box`);return o=O4(O4(O4(o,r),i),a),{kind:`Box`,x:r,y:i,z:a,structuralHash:o,freeParams:j4(r,i,a)}}function N4(e){let t=u4(e);return{kind:`Sphere`,radius:t,structuralHash:O4(D4(`Sphere`),t),freeParams:t.freeParams}}function P4(e,t){let n=u4(e),r=u4(t);return{kind:`Cylinder`,radius:n,height:r,structuralHash:O4(O4(D4(`Cylinder`),n),r),freeParams:j4(n,r)}}function F4(e,t,n){let r=u4(e),i=u4(t),a=u4(n),o=D4(`Cone`);return o=O4(O4(O4(o,r),i),a),{kind:`Cone`,radius1:r,radius2:i,height:a,structuralHash:o,freeParams:j4(r,i,a)}}function I4(e,t){let n=u4(e),r=u4(t);return{kind:`Torus`,majorRadius:n,minorRadius:r,structuralHash:O4(O4(D4(`Torus`),n),r),freeParams:j4(n,r)}}function L4(e){let t=e.map(f4),n=Y2(D4(`Polygon`),t.length);for(let e of t)n=O4(n,e);return{kind:`Polygon`,points:t,structuralHash:n,freeParams:j4(...t)}}function R4(e){let t=u4(e);return{kind:`Circle`,radius:t,structuralHash:O4(D4(`Circle`),t),freeParams:t.freeParams}}function z4(e,t){let n=f4(e),r=f4(t);return{kind:`Line`,from:n,to:r,structuralHash:O4(O4(D4(`Line`),n),r),freeParams:j4(n,r)}}function B4(e){let t=f4(e);return{kind:`Vertex`,point:t,structuralHash:O4(D4(`Vertex`),t),freeParams:t.freeParams}}function V4(e){return{kind:`Empty`,output:e,structuralHash:U2(D4(`Empty`),e),freeParams:E4}}function H4(){return V4(`Solid`)}function U4(){return V4(`Face`)}function W4(){return V4(`Wire`)}function G4(e,t,n,r){return A4(O4(O4(D4(e),t),n),r)}function K4(e,t,n){return{kind:`Fuse`,a:e,b:t,tolerance:n,structuralHash:G4(`Fuse`,e,t,n),freeParams:j4(e,t)}}function q4(e,t,n){return{kind:`Cut`,a:e,b:t,tolerance:n,structuralHash:G4(`Cut`,e,t,n),freeParams:j4(e,t)}}function J4(e,t,n){return{kind:`Intersect`,a:e,b:t,tolerance:n,structuralHash:G4(`Intersect`,e,t,n),freeParams:j4(e,t)}}function Y4(e,t){let n=Y2(D4(`FuseAll`),e.length);for(let t of e)n=O4(n,t);return n=A4(n,t),{kind:`FuseAll`,shapes:e,tolerance:t,structuralHash:n,freeParams:j4(...e)}}function X4(e,t,n){let r=O4(D4(`CutAll`),e);r=Y2(r,t.length);for(let e of t)r=O4(r,e);return r=A4(r,n),{kind:`CutAll`,base:e,tools:t,tolerance:n,structuralHash:r,freeParams:j4(e,...t)}}function Z4(e){return e===void 0?void 0:f4(e)}function Q4(e,t){let n=f4(t);return{kind:`Translate`,target:e,vector:n,structuralHash:O4(O4(D4(`Translate`),e),n),freeParams:j4(e,n)}}function $4(e,t,n){let r=u4(t),i=Z4(n?.axis),a=Z4(n?.at),o=O4(O4(D4(`Rotate`),e),r);return o=k4(o,i),o=k4(o,a),{kind:`Rotate`,target:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:j4(e,r,i,a)}}function e3(e,t,n){let r=u4(t),i=Z4(n?.center),a=O4(O4(D4(`Scale`),e),r);return a=k4(a,i),{kind:`Scale`,target:e,factor:r,center:i,structuralHash:a,freeParams:j4(e,r,i)}}function t3(e,t){let n=Z4(t?.normal),r=Z4(t?.at),i=O4(D4(`Mirror`),e);return i=k4(i,n),i=k4(i,r),{kind:`Mirror`,target:e,normal:n,at:r,structuralHash:i,freeParams:j4(e,n,r)}}function n3(e){let t=Y2(D4(`Compound`),e.length);for(let n of e)t=O4(t,n);return{kind:`Compound`,children:e,structuralHash:t,freeParams:j4(...e)}}function r3(e,t,n=!1){let r=t.map(e=>e.map(e=>[...e])),i=Y2(X2(O4(D4(`Instance`),e),n),r.length);for(let e of r)for(let t of e.flat())i=q2(i,t);return{kind:`Instance`,source:e,placements:r,fuse:n,structuralHash:i,freeParams:j4(e)}}function i3(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:return`Solid`;case`Polygon`:return`Face`;case`Circle`:case`Line`:return`Edge`;case`Vertex`:return`Vertex`;case`Empty`:return e.output;case`Fuse`:case`Cut`:case`Intersect`:return i3(e.a);case`FuseAll`:return e.shapes[0]?i3(e.shapes[0]):`Solid`;case`CutAll`:return i3(e.base);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return i3(e.target);case`Compound`:return`Compound`;case`Instance`:return e.fuse?`Solid`:`Compound`}}function a3(e,t){let n=C4(e.x,t.env,`Box.x`);if(!n.ok)return n;let r=C4(e.y,t.env,`Box.y`);if(!r.ok)return r;let i=C4(e.z,t.env,`Box.z`);return i.ok?O(pP(n.value,r.value,i.value)):i}function o3(e,t){let n=C4(e.radius,t.env,`Sphere.radius`);return n.ok?O(hP(n.value)):n}function s3(e,t){let n=C4(e.radius,t.env,`Cylinder.radius`);if(!n.ok)return n;let r=C4(e.height,t.env,`Cylinder.height`);return r.ok?O(mP(n.value,r.value)):r}function c3(e,t){let n=C4(e.radius1,t.env,`Cone.radius1`);if(!n.ok)return n;let r=C4(e.radius2,t.env,`Cone.radius2`);if(!r.ok)return r;let i=C4(e.height,t.env,`Cone.height`);return i.ok?O(gP(n.value,r.value,i.value)):i}function l3(e,t){let n=C4(e.majorRadius,t.env,`Torus.majorRadius`);if(!n.ok)return n;let r=C4(e.minorRadius,t.env,`Torus.minorRadius`);return r.ok?O(_P(n.value,r.value)):r}function u3(e,t){let n=[];for(let r of e.points){let e=w4(r,t.env,`Polygon.point`);if(!e.ok)return e;n.push(e.value)}return NP(n)}function d3(e,t){let n=C4(e.radius,t.env,`Circle.radius`);return n.ok?O(bP(n.value)):n}function f3(e,t){let n=w4(e.from,t.env,`Line.from`);if(!n.ok)return n;let r=w4(e.to,t.env,`Line.to`);return r.ok?O(yP(n.value,r.value)):r}function p3(e,t){let n=w4(e.point,t.env,`Vertex.point`);return n.ok?O(PP(n.value)):n}function m3(e){return k(wo(M.NULL_SHAPE_INPUT,`${e}: empty result has no kernel representation`))}function h3(e,t,n){let r=e.evalNode(t);return r.ok?LE(r.value)?O(r.value):k(xo(M.CSG_NOT_3D,`${n}: operand did not produce a 3D shape`)):r}function g3(e,t){return{unsafe:!0,fuzzyValue:e.tolerance??t.tolerance}}function _3(e,t){if(e.a.kind===`Empty`)return t.evalNode(e.b);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=h3(t,e.a,`Fuse.a`);if(!n.ok)return n;let r=h3(t,e.b,`Fuse.b`);return r.ok?zA(n.value,r.value,g3(e,t)):r}function v3(e,t){if(e.a.kind===`Empty`)return m3(`Cut`);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=h3(t,e.a,`Cut.a`);if(!n.ok)return n;let r=h3(t,e.b,`Cut.b`);return r.ok?BA(n.value,r.value,g3(e,t)):r}function y3(e,t){if(e.a.kind===`Empty`||e.b.kind===`Empty`)return m3(`Intersect`);let n=h3(t,e.a,`Intersect.a`);if(!n.ok)return n;let r=h3(t,e.b,`Intersect.b`);return r.ok?VA(n.value,r.value,g3(e,t)):r}function b3(e,t,n){let r=[];for(let i of t){let t=h3(e,i,n);if(!t.ok)return t;r.push(t.value)}return O(r)}function x3(e,t){let n=e.shapes.filter(e=>e.kind!==`Empty`);if(n.length===0)return m3(`FuseAll`);if(n.length===1&&n[0])return t.evalNode(n[0]);let r=b3(t,n,`FuseAll.operand`);return r.ok?UA(r.value,g3(e,t)):r}function S3(e,t){if(e.base.kind===`Empty`)return m3(`CutAll`);let n=e.tools.filter(e=>e.kind!==`Empty`);if(n.length===0)return t.evalNode(e.base);let r=h3(t,e.base,`CutAll.base`);if(!r.ok)return r;let i=b3(t,n,`CutAll.tool`);return i.ok?WA(r.value,i.value,g3(e,t)):i}function C3(e){return k(wo(M.NULL_SHAPE_INPUT,`${e}: cannot transform an Empty node`))}function w3(e,t,n,r){return e?w4(e,t,n):O(r)}function T3(e,t){let n=H(),{handle:r,dispose:i}=n.composeTransform(t),a;try{a=zE(n.locate(e.wrapped,r))}finally{i()}return ak(e)&&lk(e,a),a}function E3(e,t){if(e.target.kind===`Empty`)return C3(`Translate`);let n=w4(e.vector,t.env,`Translate.vector`);if(!n.ok)return n;let r=t.evalNode(e.target);return r.ok?O(T3(r.value,[{type:`translate`,x:n.value[0],y:n.value[1],z:n.value[2]}])):r}function D3(e,t){if(e.target.kind===`Empty`)return C3(`Rotate`);let n=C4(e.angle,t.env,`Rotate.angle`);if(!n.ok)return n;let r=w3(e.axis,t.env,`Rotate.axis`,[0,0,1]);if(!r.ok)return r;let i=w3(e.at,t.env,`Rotate.at`,[0,0,0]);if(!i.ok)return i;let a=t.evalNode(e.target);return a.ok?O(T3(a.value,[{type:`rotate`,angle:n.value,axis:r.value,center:i.value}])):a}function O3(e,t){if(e.target.kind===`Empty`)return C3(`Scale`);let n=C4(e.factor,t.env,`Scale.factor`);if(!n.ok)return n;let r=w3(e.center,t.env,`Scale.center`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(pk(i.value,n.value,r.value)):i}function k3(e,t){if(e.target.kind===`Empty`)return C3(`Mirror`);let n=w3(e.normal,t.env,`Mirror.normal`,[1,0,0]);if(!n.ok)return n;let r=w3(e.at,t.env,`Mirror.at`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(fk(i.value,n.value,r.value)):i}function A3(e,t){let n=e.children.filter(e=>e.kind!==`Empty`);if(n.length===0)return k(wo(M.NULL_SHAPE_INPUT,`Compound: cannot materialize a compound with zero non-empty children`));let r=[];for(let e of n){let n=t.evalNode(e);if(!n.ok)return n;r.push(n.value)}return O(FP(r))}function j3(){return k(wo(M.NULL_SHAPE_INPUT,`Empty: cannot materialize an Empty node directly — only valid as boolean/transform operand`))}function M3(e,t){let n=t.evalNode(e.source);return n.ok?w$(x$(n.value,e.placements),{fuse:e.fuse}):n}function N3(e,t){switch(e.kind){case`Box`:return a3(e,t);case`Sphere`:return o3(e,t);case`Cylinder`:return s3(e,t);case`Cone`:return c3(e,t);case`Torus`:return l3(e,t);case`Polygon`:return u3(e,t);case`Circle`:return d3(e,t);case`Line`:return f3(e,t);case`Vertex`:return p3(e,t);case`Empty`:return j3();case`Fuse`:return _3(e,t);case`Cut`:return v3(e,t);case`Intersect`:return y3(e,t);case`FuseAll`:return x3(e,t);case`CutAll`:return S3(e,t);case`Translate`:return E3(e,t);case`Rotate`:return D3(e,t);case`Scale`:return O3(e,t);case`Mirror`:return k3(e,t);case`Compound`:return A3(e,t);case`Instance`:return M3(e,t)}}function P3(e,t){if(typeof t==`number`)return q2(X2(e,!1),t);let n=X2(e,!0);n=Y2(n,t.length);for(let e of t)n=q2(n,e);return n}function F3(e,t){if(t.size===0)return z2();let n=T4(e,t),r=Object.keys(n).sort(),i=z2();for(let e of r){i=U2(i,e);let t=n[e];t!==void 0&&(i=P3(i,t))}return i}function I3(e,t,n,r){let i=F3(t,e.freeParams),a=r===void 0?`d`:q2(z2(),r).toString(16);return`${Z2(e.structuralHash)}:${n}:${Z2(i)}:${a}`}var L3=[1,0,0,0];function R3(e,t){let n=C4(e.angle,t,`evaluateMesh.peelRigid`);if(!n.ok)return null;let r=e.axis?w4(e.axis,t,`evaluateMesh.peelRigid`):O([0,0,1]);if(!r.ok)return null;let i=e.at?w4(e.at,t,`evaluateMesh.peelRigid`):O([0,0,0]);return i.ok?{angle:n.value,axis:r.value,center:i.value}:null}function z3(e,t){let n=e,r=L3,i=[0,0,0];for(;;)if(n.kind===`Translate`){let e=w4(n.vector,t,`evaluateMesh.peelRigid`);if(!e.ok)break;let a=iF(r,e.value);i=[i[0]+a[0],i[1]+a[1],i[2]+a[2]],n=n.target}else if(n.kind===`Rotate`){let e=R3(n,t);if(!e)break;let a=aF(e.axis,e.angle*Math.PI/180),o=sF(r,a),s=iF(r,e.center),c=iF(o,e.center);i=[i[0]+s[0]-c[0],i[1]+s[1]-c[1],i[2]+s[2]-c[2]],r=o,n=n.target}else break;return{inner:n,rot:r,trans:i}}function B3(e){return e[0]===1&&e[1]===0&&e[2]===0&&e[3]===0}function V3(e,t,n,r,i,a,o,s,c){for(let l=0;l<t.length;l+=3){let u=t[l]??0,d=t[l+1]??0,f=t[l+2]??0,p=2*(i*f-a*d),m=2*(a*u-r*f),h=2*(r*d-i*u);e[l]=u+n*p+(i*h-a*m)+o,e[l+1]=d+n*m+(a*p-r*h)+s,e[l+2]=f+n*h+(r*m-i*p)+c}}function H3(e,t,n){let[r,i,a]=n,o=B3(t);if(o&&r===0&&i===0&&a===0)return e;let s=e.vertices,c=new Float32Array(s.length);if(o){for(let e=0;e<s.length;e+=3)c[e]=(s[e]??0)+r,c[e+1]=(s[e+1]??0)+i,c[e+2]=(s[e+2]??0)+a;return{...e,vertices:c}}let[l,u,d,f]=t;V3(c,s,l,u,d,f,r,i,a);let p=e.normals,m=new Float32Array(p.length);return V3(m,p,l,u,d,f,0,0,0),{...e,vertices:c,normals:m}}function U3(e,t,n){let r=new Map,i=Math.min(t.length,n.length);for(let e=0;e<i;e++){let i=t[e],a=n[e];i!==void 0&&a!==void 0&&r.set(i,a)}return e.map(e=>({...e,faceId:r.get(e.faceId)??e.faceId}))}var W3=class{cache=new Map;refCounts=new Map;evaluating=!1;pendingKeys=[];kernelId;defaultTolerance;maxCacheEntries;maxMeshCacheEntries;meshCache=new Map;onStep;hits=0;misses=0;evictions=0;constructor(e={}){this.kernelId=e.kernel??CT()??`unregistered`,this.defaultTolerance=e.tolerance,e.onStep&&(this.onStep=e.onStep);let t=e.maxCacheEntries;if(t!==void 0&&(!Number.isInteger(t)||t<1))throw RangeError(`Evaluator: maxCacheEntries must be a positive integer, got ${String(t)}`);this.maxCacheEntries=t;let n=e.maxMeshCacheEntries;if(n!==void 0&&(!Number.isInteger(n)||n<1))throw RangeError(`Evaluator: maxMeshCacheEntries must be a positive integer, got ${String(n)}`);this.maxMeshCacheEntries=n}evaluate(e,t={}){if(this.maxCacheEntries!==void 0&&this.evaluating)throw Error(`Evaluator.evaluate() is not reentrant when maxCacheEntries is set — do not call it from an onStep callback.`);return wT(this.kernelId,()=>{this.evaluating=!0;let n=!1;try{let r=this.evaluateInner(e,t);return this.maxCacheEntries!==void 0&&r.ok&&this.trimCache(this.maxCacheEntries),n=r.ok,r}finally{!n&&this.maxCacheEntries!==void 0&&this.rollbackPending(),this.pendingKeys.length=0,this.evaluating=!1}})}evaluateMesh(e,t={},n={}){n.signal?.throwIfAborted();let r=n.cache??!0,i=Mo(),a=n.tolerance??i.tolerance,o=n.angularTolerance??i.angularTolerance,s=`${I3(e,t,this.kernelId,this.defaultTolerance)}|${Wk(a,o,n.skipNormals??!1,n.includeUVs??!1)}`;if(r){let r=this.meshCache.get(s);if(r!==void 0)return this.maxMeshCacheEntries!==void 0&&(this.meshCache.delete(s),this.meshCache.set(s,r)),O(r);let{inner:i,rot:a,trans:o}=z3(e,t);if(i!==e){let r=this.evaluateMesh(i,t,n);if(!r.ok)return r;let c=this.evaluate(i,t);if(!c.ok)return c;let l=lD(c.value).map(wk),u=this.evaluate(e,t);if(!u.ok)return u;let d=lD(u.value).map(wk),f=H3(r.value,a,o),p=U3(f.faceGroups,l,d),m=new Set(d);if(p.every(e=>m.has(e.faceId))){let e={...f,faceGroups:p};return this.meshCache.set(s,e),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries),O(e)}}}let c=this.evaluate(e,t);if(!c.ok)return c;let l=wT(this.kernelId,()=>eA(c.value,n));return r&&(this.meshCache.set(s,l),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries)),O(l)}evaluateInner(e,t){let n=I3(e,t,this.kernelId,this.defaultTolerance),r=this.cache.get(n);if(r!==void 0)return this.hits++,this.maxCacheEntries!==void 0&&(this.cache.delete(n),this.cache.set(n,r)),this.onStep?.({node:e,cacheKey:n,cacheHit:!0}),O(r);this.misses++;let i=N3(e,{env:t,tolerance:this.defaultTolerance,evalNode:e=>this.evaluateInner(e,t)});if(!i.ok)return i;let a=i.value;return this.refCounts.set(a,(this.refCounts.get(a)??0)+1),this.cache.set(n,a),this.maxCacheEntries!==void 0&&this.pendingKeys.push(n),this.onStep?.({node:e,cacheKey:n,cacheHit:!1}),i}releaseShape(e){let t=(this.refCounts.get(e)??1)-1;t<=0?(this.refCounts.delete(e),e[Symbol.dispose]()):this.refCounts.set(e,t)}trimCache(e){for(;this.cache.size>e;){let e=this.cache.keys().next();if(e.done)break;let t=e.value,n=this.cache.get(t);this.cache.delete(t),this.evictions++,n!==void 0&&this.releaseShape(n)}}trimMeshCache(e){for(;this.meshCache.size>e;){let e=this.meshCache.keys().next();if(e.done)break;this.meshCache.delete(e.value)}}rollbackPending(){for(let e of this.pendingKeys){let t=this.cache.get(e);t!==void 0&&(this.cache.delete(e),this.releaseShape(t))}}cacheStats(){return{hits:this.hits,misses:this.misses,entries:this.cache.size,evictions:this.evictions}}resetStats(){this.hits=0,this.misses=0,this.evictions=0}[Symbol.dispose](){for(let e of this.refCounts.keys())e[Symbol.dispose]();this.refCounts.clear(),this.cache.clear(),this.meshCache.clear()}};function G3(e,t){try{var n=PT();let r=t(n.u(new W3(e)));if(r instanceof Promise)throw Error(`withEvaluator() callback returned a Promise. Async code must construct an Evaluator directly and dispose it manually — borrowed shapes would otherwise be freed before the Promise resolves.`);return r}catch(e){n.e=e}finally{n.d()}}function K3(e){return{csgVersion:1,root:Q3(e)}}function q3(e){switch(e.kind){case`NumLit`:return{kind:`NumLit`,value:e.value};case`Vec3Lit`:return{kind:`Vec3Lit`,value:[e.value[0],e.value[1],e.value[2]]};case`Vec2Lit`:return{kind:`Vec2Lit`,value:[e.value[0],e.value[1]]};case`Param`:return{kind:`Param`,name:e.name};case`BinOp`:return{kind:`BinOp`,op:e.op,a:q3(e.a),b:q3(e.b)};case`UnaryOp`:return{kind:`UnaryOp`,op:e.op,arg:q3(e.arg)};case`Component`:return{kind:`Component`,vec:q3(e.vec),index:e.index};case`BuildVec`:return{kind:`BuildVec`,dim:e.dim,components:e.components.map(q3)}}}function J3(e){switch(e.kind){case`Box`:return{kind:`Box`,x:q3(e.x),y:q3(e.y),z:q3(e.z)};case`Sphere`:return{kind:`Sphere`,radius:q3(e.radius)};case`Cylinder`:return{kind:`Cylinder`,radius:q3(e.radius),height:q3(e.height)};case`Cone`:return{kind:`Cone`,radius1:q3(e.radius1),radius2:q3(e.radius2),height:q3(e.height)};case`Torus`:return{kind:`Torus`,majorRadius:q3(e.majorRadius),minorRadius:q3(e.minorRadius)};case`Polygon`:return{kind:`Polygon`,points:e.points.map(q3)};case`Circle`:return{kind:`Circle`,radius:q3(e.radius)};case`Line`:return{kind:`Line`,from:q3(e.from),to:q3(e.to)};case`Vertex`:return{kind:`Vertex`,point:q3(e.point)};case`Empty`:return{kind:`Empty`,output:e.output};default:return}}function Y3(e){switch(e.kind){case`Fuse`:case`Cut`:case`Intersect`:return{kind:e.kind,a:Q3(e.a),b:Q3(e.b),tolerance:e.tolerance};case`FuseAll`:return{kind:`FuseAll`,shapes:e.shapes.map(Q3),tolerance:e.tolerance};case`CutAll`:return{kind:`CutAll`,base:Q3(e.base),tools:e.tools.map(Q3),tolerance:e.tolerance};default:return}}function X3(e){return e?q3(e):void 0}function Z3(e){switch(e.kind){case`Translate`:return{kind:`Translate`,target:Q3(e.target),vector:q3(e.vector)};case`Rotate`:return{kind:`Rotate`,target:Q3(e.target),angle:q3(e.angle),axis:X3(e.axis),at:X3(e.at)};case`Scale`:return{kind:`Scale`,target:Q3(e.target),factor:q3(e.factor),center:X3(e.center)};case`Mirror`:return{kind:`Mirror`,target:Q3(e.target),normal:X3(e.normal),at:X3(e.at)};default:return}}function Q3(e){return e.kind===`Compound`?{kind:`Compound`,children:e.children.map(Q3)}:e.kind===`Instance`?{kind:`Instance`,source:Q3(e.source),placements:e.placements,fuse:e.fuse}:J3(e)??Y3(e)??Z3(e)}function $3(e){return k(P(M.NULL_SHAPE_INPUT,`csg.fromJSON: ${e}`))}function e6(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function t6(e){return typeof e==`number`&&Number.isFinite(e)}function n6(e){return typeof e==`string`}function r6(e,t){if(!Array.isArray(e)||e.length!==3)return $3(`${t}: expected Vec3 array`);let[n,r,i]=e;return!t6(n)||!t6(r)||!t6(i)?$3(`${t}: Vec3 contains non-number`):O([n,r,i])}function i6(e,t){if(!Array.isArray(e)||e.length!==2)return $3(`${t}: expected Vec2 array`);let[n,r]=e;return!t6(n)||!t6(r)?$3(`${t}: Vec2 contains non-number`):O([n,r])}function a6(e){if(!e6(e))return $3(`input is not an object`);let t=e.csgVersion;if(t!==1)return $3(`unsupported csgVersion ${String(t)} (expected 1)`);let n=e.root;return p6(n)}function o6(e){if(!e6(e))return $3(`expression: not an object`);let t=e.kind;switch(t){case`NumLit`:return t6(e.value)?O(e4(e.value)):$3(`NumLit.value`);case`Vec3Lit`:{let t=r6(e.value,`Vec3Lit.value`);return t.ok?O(t4(t.value)):t}case`Vec2Lit`:{let t=i6(e.value,`Vec2Lit.value`);return t.ok?O(n4(t.value)):t}case`Param`:return n6(e.name)?O(r4(e.name)):$3(`Param.name`);case`BinOp`:return s6(e);case`UnaryOp`:return c6(e);case`Component`:return l6(e);case`BuildVec`:return u6(e);default:return $3(`unknown expression kind: ${String(t)}`)}}function s6(e){let t=e.op;if(t!==`+`&&t!==`-`&&t!==`*`&&t!==`/`)return $3(`BinOp.op: ${String(t)}`);let n=o6(e.a);if(!n.ok)return n;let r=o6(e.b);return r.ok?O(i4(t,n.value,r.value)):r}function c6(e){let t=e.op;if(!n6(t)||![`neg`,`sin`,`cos`,`sqrt`,`abs`].includes(t))return $3(`UnaryOp.op: ${String(t)}`);let n=o6(e.arg);return n.ok?O(a4(t,n.value)):n}function l6(e){let t=e.index;if(t!==0&&t!==1&&t!==2)return $3(`Component.index: ${String(t)}`);let n=o6(e.vec);return n.ok?O(o4(n.value,t)):n}function u6(e){let t=e.dim;if(t!==2&&t!==3)return $3(`BuildVec.dim: ${String(t)}`);let n=e.components;if(!Array.isArray(n))return $3(`BuildVec.components: not array`);if(n.length!==t)return $3(`BuildVec.components: expected ${t} components, got ${n.length}`);let r=[];for(let e of n){let t=o6(e);if(!t.ok)return t;r.push(t.value)}return O(s4(t,r))}function d6(e,t){if(!Array.isArray(e))return $3(`${t}: not array`);let n=[];for(let t of e){let e=p6(t);if(!e.ok)return e;n.push(e.value)}return O(n)}function f6(e){let t=e.tolerance;return t==null?O(void 0):t6(t)?O(t):$3(`tolerance: not a finite number`)}function p6(e){if(!e6(e))return $3(`node: not an object`);let t=e.kind;switch(t){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return h6(t,e);case`Fuse`:case`Cut`:case`Intersect`:return C6(t,e);case`FuseAll`:case`CutAll`:return w6(t,e);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return T6(t,e);case`Compound`:return j6(e);case`Instance`:return N6(e);default:return $3(`unknown node kind: ${String(t)}`)}}function m6(e,t,n){let r=o6(e[t]);return r.ok?O(n(r.value)):r}function h6(e,t){switch(e){case`Box`:return g6(t);case`Sphere`:return m6(t,`radius`,N4);case`Cylinder`:return _6(t);case`Cone`:return v6(t);case`Torus`:return y6(t);case`Polygon`:return b6(t);case`Circle`:return m6(t,`radius`,R4);case`Line`:return x6(t);case`Vertex`:return m6(t,`point`,B4);case`Empty`:return S6(t)}return $3(`unhandled primitive: ${e}`)}function g6(e){let t=o6(e.x);if(!t.ok)return t;let n=o6(e.y);if(!n.ok)return n;let r=o6(e.z);return r.ok?O(M4(t.value,n.value,r.value)):r}function _6(e){let t=o6(e.radius);if(!t.ok)return t;let n=o6(e.height);return n.ok?O(P4(t.value,n.value)):n}function v6(e){let t=o6(e.radius1);if(!t.ok)return t;let n=o6(e.radius2);if(!n.ok)return n;let r=o6(e.height);return r.ok?O(F4(t.value,n.value,r.value)):r}function y6(e){let t=o6(e.majorRadius);if(!t.ok)return t;let n=o6(e.minorRadius);return n.ok?O(I4(t.value,n.value)):n}function b6(e){let t=e.points;if(!Array.isArray(t))return $3(`Polygon.points: not array`);let n=[];for(let e of t){let t=o6(e);if(!t.ok)return t;n.push(t.value)}return O(L4(n))}function x6(e){let t=o6(e.from);if(!t.ok)return t;let n=o6(e.to);return n.ok?O(z4(t.value,n.value)):n}function S6(e){let t=e.output;switch(t){case`Solid`:return O(H4());case`Face`:return O(U4());case`Wire`:return O(W4());default:return $3(`Empty.output: ${String(t)}`)}}function C6(e,t){let n=p6(t.a);if(!n.ok)return n;let r=p6(t.b);if(!r.ok)return r;let i=f6(t);if(!i.ok)return i;switch(e){case`Fuse`:return O(K4(n.value,r.value,i.value));case`Cut`:return O(q4(n.value,r.value,i.value));case`Intersect`:return O(J4(n.value,r.value,i.value))}}function w6(e,t){let n=f6(t);if(!n.ok)return n;if(e===`FuseAll`){let e=d6(t.shapes,`FuseAll.shapes`);return e.ok?O(Y4(e.value,n.value)):e}let r=p6(t.base);if(!r.ok)return r;let i=d6(t.tools,`CutAll.tools`);return i.ok?O(X4(r.value,i.value,n.value)):i}function T6(e,t){let n=p6(t.target);if(!n.ok)return n;switch(e){case`Translate`:return E6(t,n.value);case`Rotate`:return O6(t,n.value);case`Scale`:return k6(t,n.value);case`Mirror`:return A6(t,n.value)}}function E6(e,t){let n=o6(e.vector);return n.ok?O(Q4(t,n.value)):n}function D6(e,t){if(e[t]===void 0)return O(void 0);let n=o6(e[t]);return n.ok?O(n.value):n}function O6(e,t){let n=o6(e.angle);if(!n.ok)return n;let r=D6(e,`axis`);if(!r.ok)return r;let i=D6(e,`at`);return i.ok?O($4(t,n.value,{axis:r.value,at:i.value})):i}function k6(e,t){let n=o6(e.factor);if(!n.ok)return n;let r=D6(e,`center`);return r.ok?O(e3(t,n.value,{center:r.value})):r}function A6(e,t){let n=D6(e,`normal`);if(!n.ok)return n;let r=D6(e,`at`);return r.ok?O(t3(t,{normal:n.value,at:r.value})):r}function j6(e){let t=d6(e.children,`Compound.children`);return t.ok?O(n3(t.value)):t}function M6(e){return Array.isArray(e)&&e.length===4&&e.every(e=>Array.isArray(e)&&e.length===4&&e.every(t6))}function N6(e){let t=p6(e.source);if(!t.ok)return t;let n=e.placements;return!Array.isArray(n)||!n.every(M6)?$3(`Instance.placements must be an array of 4x4 number matrices`):O(r3(t.value,n,e.fuse===!0))}function P6(e){return L6(e)}function F6(e){switch(e.kind){case`NumLit`:case`Vec3Lit`:case`Vec2Lit`:case`Param`:return e;case`BinOp`:{let t=F6(e.a),n=F6(e.b);if(t.kind===`NumLit`&&n.kind===`NumLit`)switch(e.op){case`+`:return e4(t.value+n.value);case`-`:return e4(t.value-n.value);case`*`:return e4(t.value*n.value);case`/`:return e4(t.value/n.value)}return t!==e.a||n!==e.b?i4(e.op,t,n):e}case`UnaryOp`:{let t=F6(e.arg);if(t.kind===`NumLit`){let n=t.value;switch(e.op){case`neg`:return e4(-n);case`sin`:return e4(Math.sin(n));case`cos`:return e4(Math.cos(n));case`sqrt`:return e4(Math.sqrt(n));case`abs`:return e4(Math.abs(n))}}return t===e.arg?e:a4(e.op,t)}case`Component`:{let t=F6(e.vec);return t.kind===`Vec3Lit`||t.kind===`Vec2Lit`&&(e.index===0||e.index===1)?e4(t.value[e.index]):t===e.vec?e:o4(t,e.index)}case`BuildVec`:{let t=e.components.map(F6);return I6(e.dim,t)||(t.some((t,n)=>t!==e.components[n])?s4(e.dim,t):e)}}}function I6(e,t){if(t.length!==e)return;let n=[];for(let e of t){if(e.kind!==`NumLit`)return;n.push(e.value)}return e===2?n4([n[0],n[1]]):t4([n[0],n[1],n[2]])}function L6(e){switch(e.kind){case`Box`:return M4(F6(e.x),F6(e.y),F6(e.z));case`Sphere`:return N4(F6(e.radius));case`Cylinder`:return P4(F6(e.radius),F6(e.height));case`Cone`:return F4(F6(e.radius1),F6(e.radius2),F6(e.height));case`Torus`:return I4(F6(e.majorRadius),F6(e.minorRadius));case`Polygon`:return L4(e.points.map(F6));case`Circle`:return R4(F6(e.radius));case`Line`:return z4(F6(e.from),F6(e.to));case`Vertex`:return B4(F6(e.point));case`Empty`:return e;case`Fuse`:return R6(e.a,e.b,e.tolerance);case`Cut`:return z6(e.a,e.b,e.tolerance);case`Intersect`:return B6(e.a,e.b,e.tolerance);case`FuseAll`:return V6(e.shapes,e.tolerance);case`CutAll`:return H6(e.base,e.tools,e.tolerance);case`Translate`:return U6(e.target,e.vector);case`Rotate`:return $4(L6(e.target),F6(e.angle),{axis:e.axis?F6(e.axis):void 0,at:e.at?F6(e.at):void 0});case`Scale`:return e3(L6(e.target),F6(e.factor),{center:e.center?F6(e.center):void 0});case`Mirror`:return t3(L6(e.target),{normal:e.normal?F6(e.normal):void 0,at:e.at?F6(e.at):void 0});case`Compound`:return n3(e.children.map(L6).filter(e=>e.kind!==`Empty`));case`Instance`:return r3(L6(e.source),e.placements,e.fuse)}}function R6(e,t,n){let r=L6(e),i=L6(t);return r.kind===`Empty`?i:i.kind===`Empty`?r:K4(r,i,n)}function z6(e,t,n){let r=L6(e),i=L6(t);return i.kind===`Empty`||r.kind===`Empty`?r:q4(r,i,n)}function B6(e,t,n){let r=L6(e),i=L6(t);return r.kind===`Empty`?r:i.kind===`Empty`?i:J4(r,i,n)}function V6(e,t){let n=e.map(L6).filter(e=>e.kind!==`Empty`);return n.length===0?H4():n.length===1?n[0]:Y4(n,t)}function H6(e,t,n){let r=L6(e);if(r.kind===`Empty`)return r;let i=t.map(L6).filter(e=>e.kind!==`Empty`);return i.length===0?r:X4(r,i,n)}function U6(e,t){let n=L6(e),r=F6(t);if(r.kind!==`Vec3Lit`)return Q4(n,r);let[i,a,o]=r.value;if(i===0&&a===0&&o===0)return n;if(n.kind===`Translate`){let e=F6(n.vector);if(e.kind===`Vec3Lit`)return Q4(n.target,[e.value[0]+i,e.value[1]+a,e.value[2]+o])}return Q4(n,r)}function W6(e,t,n){return G6(e,t,n)}function G6(e,t,n){return t(e)?n:K6(e,t,n)}function K6(e,t,n){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return e;case`Fuse`:return K4(G6(e.a,t,n),G6(e.b,t,n),e.tolerance);case`Cut`:return q4(G6(e.a,t,n),G6(e.b,t,n),e.tolerance);case`Intersect`:return J4(G6(e.a,t,n),G6(e.b,t,n),e.tolerance);case`FuseAll`:return Y4(e.shapes.map(e=>G6(e,t,n)),e.tolerance);case`CutAll`:return X4(G6(e.base,t,n),e.tools.map(e=>G6(e,t,n)),e.tolerance);case`Translate`:return Q4(G6(e.target,t,n),e.vector);case`Rotate`:return $4(G6(e.target,t,n),e.angle,{axis:e.axis,at:e.at});case`Scale`:return e3(G6(e.target,t,n),e.factor,{center:e.center});case`Mirror`:return t3(G6(e.target,t,n),{normal:e.normal,at:e.at});case`Compound`:return n3(e.children.map(e=>G6(e,t,n)));case`Instance`:return r3(G6(e.source,t,n),e.placements,e.fuse)}}function q6(e,t){t(e);for(let n of J6(e))q6(n,t)}function J6(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return[];case`Fuse`:case`Cut`:case`Intersect`:return[e.a,e.b];case`FuseAll`:return e.shapes;case`CutAll`:return[e.base,...e.tools];case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return[e.target];case`Compound`:return e.children;case`Instance`:return[e.source]}}function Y6(e){let t=0;return q6(e,()=>{t++}),t}var X6=PX({CSG_VERSION:()=>1,Evaluator:()=>W3,add:()=>c4,asScalarExpr:()=>u4,asVec2Expr:()=>p4,asVec3Expr:()=>f4,binOp:()=>i4,box:()=>M4,buildVec:()=>s4,circle:()=>R4,component:()=>o4,compound:()=>n3,cone:()=>F4,cut:()=>q4,cutAll:()=>X4,cylinder:()=>P4,emptyFace:()=>U4,emptySolid:()=>H4,emptyWire:()=>W4,foldExpr:()=>F6,forEachNode:()=>q6,fromJSON:()=>a6,fuse:()=>K4,fuseAll:()=>Y4,instance:()=>r3,intersect:()=>J4,line:()=>z4,mirror:()=>t3,mul:()=>l4,nodeCount:()=>Y6,numLit:()=>e4,optimize:()=>P6,outputKindOf:()=>i3,param:()=>r4,polygon:()=>L4,replaceNode:()=>W6,rotate:()=>$4,scale:()=>e3,sphere:()=>N4,toJSON:()=>K3,torus:()=>I4,translate:()=>Q4,unaryOp:()=>a4,vec2Lit:()=>n4,vec3Lit:()=>t4,vertex:()=>B4,withEvaluator:()=>G3});export{hR as BaseSketcher2d,gR as BlueprintSketcher,r as BrepBugError,M as BrepErrorCode,y0 as BrepWrapperError,Iy as BrepkitAdapter,GK as CompoundSketch,o as DEFAULT_CAPABILITIES,KE as DEG2RAD,JT as DisposalScope,a as EXACT_BREP_CAPABILITIES,wq as FaceSketcher,G as HASH_CODE_MAX,Ga as OK,Wa as OcctWasmAdapter,qE as RAD2DEG,sq as Sketch,Cq as Sketcher,cq as Sketches,qP as addChild,zP as addHoles,wF as addJoint,t1 as addMate,aI as addStep,aN as adjacentFaces,eo as all,Ya as andThen,LX as applyGlue,N1 as applyMatrix,Hk as approximateCurve,iE as as2D,rE as as3D,iO as asTopo,bN as assignRoles,uM as autoHeal,EP as bezier,SY as blueprintToDXF,tj as booleanPipeline,O2 as booleans,g0 as boss,pP as box,TP as bsplineApprox,i as bug,bq as cameraFromPlane,yq as cameraLookAt,fN as captureHint,uO as cast,zE as castShape,BE as castShape3D,Y1 as chamfer,yj as chamferDistAngleShape,Hj as chamferWithEvolution,i1 as checkAllInterferences,Nj as checkBoolean,r1 as checkInterference,bP as circle,WP as circularPattern,TO as classifyPointOnFace,Qk as clearMeshCache,M1 as clone,pE as closedWire,fo as collect,$P as collectShapes,tk as colorFaces,ek as colorShape,bM as complexExtrude,yk as composeTransforms,FP as compound,iq as compoundSketchExtrude,nq as compoundSketchFace,oq as compoundSketchLoft,aq as compoundSketchRevolve,wo as computationError,c$ as computeStraightSkeleton,gP as cone,P2 as construction,HQ as convexHull,xR as cornerFinder,QP as countNodes,VP as createAssembly,KP as createAssemblyNode,IJ as createBlueprint,vq as createCamera,kE as createCompound,LJ as createCompoundBlueprint,$N as createDerivedFaceRef,WM as createDistanceQuery,CE as createEdge,IN as createEdgeRef,TE as createFace,WT as createHandle,iI as createHistory,qT as createKernelHandle,$k as createMeshCache,ZD as createNamedPlane,EX as createOperationRegistry,YD as createPlane,xN as createRef,fI as createRegistry,EE as createShell,DE as createSolid,vX as createTaskQueue,SE as createVertex,WN as createVertexRef,wE as createWire,TX as createWorkerClient,jX as createWorkerHandler,MX as createWorkerPool,X6 as csg,jo as currentQuality,OJ as curve2dBoundingBox,FJ as curve2dDistanceFrom,kJ as curve2dFirstPoint,PJ as curve2dIsOnCurve,AJ as curve2dLastPoint,MJ as curve2dParameter,jJ as curve2dSplitAt,NJ as curve2dTangentAt,Fk as curveAxis,jk as curveEndPoint,Ik as curveIsClosed,Lk as curveIsPeriodic,Pk as curveLength,Rk as curvePeriod,Mk as curvePointAt,Ak as curveStartPoint,Nk as curveTangentAt,L1 as cut,sz as cut2D,z1 as cutAll,wj as cutAllBisect,XR as cutBlueprints,zj as cutWithEvolution,mP as cylinder,_F as cylindricalJoint,dN as defaultScorer,bX as dequeueTask,i0 as describe,tJ as deserializeDrawing,yI as deserializeHistory,fO as deserializeShape,cO as downcast,$1 as draft,rJ as draw,cJ as drawCircle,lJ as drawEllipse,gJ as drawFaceOutline,pJ as drawParametricFunction,fJ as drawPointsInterpolation,uJ as drawPolysides,hJ as drawProjection,aJ as drawRectangle,iJ as drawRoundedRectangle,oJ as drawSingleCircle,sJ as drawSingleEllipse,dJ as drawText,SJ as drawingChamfer,yJ as drawingCut,xJ as drawingFillet,vJ as drawingFuse,bJ as drawingIntersect,_J as drawingToSketchOnPlane,m0 as drill,GI as edgeFinder,tN as edgesOfFace,xP as ellipse,wP as ellipseArc,vP as ellipsoid,yX as enqueueTask,k as err,HP as exportAssemblySTEP,xY as exportDXF,cY as exportGlb,sY as exportGltf,sA as exportIGES,ZJ as exportOBJ,aA as exportSTEP,aX as exportSTEPConfigured,oA as exportSTL,VY as exportThreeMF,$F as exportURDF,l0 as extrude,OM as extrudeAll,AP as face,wO as faceAxis,CO as faceCenter,JI as faceFinder,hO as faceGeomType,gO as faceOrientation,$M as facesOfEdge,eN as facesOfVertex,AZ as fieldBoolean,PZ as fieldContour,jZ as fieldOffset,NZ as fieldReinit,MZ as fieldShell,MA as fill,jP as filledFace,J1 as fillet,Vj as filletWithEvolution,UO as findFacesByTag,XP as findNode,sI as findStep,pM as fixSelfIntersection,dM as fixShape,Xa as flatMap,ro as flatten,_O as flipFaceOrientation,Bk as flipOrientation,dX as fontMetrics,OF as forwardKinematics,o0 as fromBREP,kQ as fromKernelDir,OQ as fromKernelPnt,DQ as fromKernelVec,ao as fromNullable,I1 as fuse,az as fuse2D,R1 as fuseAll,Oj as fuseAllBisect,YR as fuseBlueprints,Rj as fuseWithEvolution,U0 as gearGeometry,YX as getActiveVoxelId,SD as getBounds,RJ as getBounds2D,mD as getCompSolids,kk as getCurveType,RT as getDisposalStats,cD as getEdges,rk as getFaceColor,AO as getFaceOrigins,WO as getFaceTags,lD as getFaces,dq as getFont,wk as getHashCode,cI as getHistoryShape,H as getKernel,TT as getKernelCapabilities,kT as getKernelTier,bj as getNurbsCurveData,xj as getNurbsSurfaceData,zk as getOrientation,zJ as getOrientation2D,Bo as getPerformanceStats,nk as getShapeColor,cE as getShapeKind,pD as getShells,ZI as getSingleFace,fD as getSolids,mO as getSurfaceType,KO as getTagMetadata,dD as getVertices,JX as getVoxel,uD as getWires,GP as gridPattern,TM as guidedSweep,e0 as heal,sM as healFace,oM as healSolid,cM as healWire,SP as helix,VQ as hull,l1 as importDXF,E1 as importGLB,cX as importIGES,p1 as importOBJ,oX as importSTEP,sX as importSTL,iX as importSVG,rX as importSVGPathD,T1 as importThreeMF,rI as importURDF,NT as init,bT as initFromManifold,jT as initFromOC,XX as initVoxel,OO as innerWires,x$ as instance,C$ as instanceCount,S$ as instanceGrid,E$ as instancedMesh,Vk as interpolateCurve,B1 as intersect,cz as intersect2D,ZR as intersectBlueprints,Bj as intersectWithEvolution,sD as invalidateShapeCache,HF as inverseKinematics,M2 as io,To as ioError,nE as is2D,tE as is3D,hX as isBatchRequest,zX as isChamferRadius,lE as isClosedWire,dO as isCompSolid,IE as isCompound,nP as isDerivedFaceRef,mX as isDisposeRequest,jE as isEdge,rP as isEdgeRef,c0 as isEmpty,Dk as isEqualShape,A as isErr,_X as isErrorResponse,NE as isFace,aP as isFaceRef,BX as isFilletRadius,fX as isInitRequest,BJ as isInside2D,b$ as isInstanced,oP as isLineageRef,eE as isLive,dE as isManifoldShell,RX as isNumber,Ka as isOk,pX as isOperationRequest,uE as isOrientedFace,_E as isPlanarFace,vE as isPlanarWire,hq as isProjectionPlane,SX as isQueueEmpty,Ek as isSameShape,RE as isShape1D,LE as isShape3D,PE as isShell,FE as isSolid,gX as isSuccessResponse,s0 as isValid,fE as isValidSolid,AE as isVertex,iP as isVertexRef,ME as isWire,xD as iterCompSolids,hD as iterEdges,gD as iterFaces,bD as iterShells,yD as iterSolids,oO as iterTopo,vD as iterVertices,_D as iterWires,WF as jointTrajectory,CF as jointTransform,qF as jointsFromDH,XE as kernelCall,ZE as kernelCallRaw,QE as kernelCallScoped,N as kernelError,xQ as latticeInfill,SQ as latticeInfillShape,yP as line,UP as linearPattern,uq as loadFont,F1 as locate,d0 as loft,AM as loftAll,Pq as makeBaseBox,f2 as makeExternalGear,p2 as makeInternalGear,$D as makePlane,h2 as makePlanetaryGear,_q as makeProjectedEdges,hE as manifoldShell,qa as map,io as mapBoth,Ja as mapErr,uo as match,w$ as materialize,BM as measureArea,GM as measureCurvatureAt,KM as measureCurvatureAtMid,HM as measureDistance,UM as measureDistanceProps,VM as measureLength,RM as measureLinearProps,LM as measureSurfaceProps,zM as measureVolume,IM as measureVolumeProps,j2 as measurement,kF as mechanismDOF,n0 as mesh,r0 as meshEdges,fA as meshLODs,mA as meshLODsProgressive,cA as meshMultiLOD,KQ as minkowski,A1 as mirror,GJ as mirror2D,EJ as mirrorDrawing,_0 as mirrorJoin,k2 as modifiers,_I as modifyStep,Co as moduleInitError,wM as multiSectionSweep,SO as normalAt,Z1 as offset,LP as offsetFace,fZ as offsetMesh,hZ as offsetShape,Uk as offsetWire2D,O as ok,Za as or,Qa as orElse,aR as organiseBlueprints,mE as orientedFace,EO as outerWire,F2 as patterns,xX as pendingCount,ho as pipeline,nO as pivotPlane,yE as planarFace,vF as planarJoint,bE as planarWire,s2 as planetPlacements,h0 as pocket,yO as pointOnSurface,tZ as pointsInside,NP as polygon,qQ as polyhedron,Aq as polysideInnerRadius,SR as polysidesBlueprint,Wj as positionOnCurve,MT as prewarm,D2 as primitives,gF as prismaticJoint,xq as projectEdges,xO as projectPointOnFace,N2 as query,Eo as queryError,v0 as rectangularPattern,DX as registerHandler,xT as registerKernel,OT as registerKernelTier,pI as registerOperation,dI as registerShape,qX as registerVoxel,CX as rejectAll,JP as removeChild,DO as removeHolesFromFace,iZ as repairMesh,gI as replayFrom,hI as replayHistory,zT as resetDisposalStats,Vo as resetPerformanceStats,mk as resize,$ as resolve,D1 as resolve3D,eP as resolveDerivedFaceRef,jD as resolveDirection,LN as resolveEdgeRef,cP as resolveLineageRef,QD as resolvePlane,DN as resolveRef,uP as resolveRefIn,fP as resolveRefParams,GN as resolveVertexRef,DJ as reverseCurve,hF as revoluteJoint,u0 as revolve,g$ as roof,k1 as rotate,UJ as rotate2D,wJ as rotateDrawing,CR as roundedRectangleBlueprint,j1 as scale,WJ as scale2D,TJ as scaleDrawing,XZ as sdfBox,eQ as sdfCapsule,$Z as sdfCone,QZ as sdfCylinder,fQ as sdfFieldAxialRamp,hQ as sdfFieldClamp,dQ as sdfFieldConst,mQ as sdfFieldFromSdf,pQ as sdfFieldRadialRamp,oQ as sdfLattice,nQ as sdfPlane,ZZ as sdfRoundedBox,YZ as sdfSphere,sQ as sdfStrutLattice,iQ as sdfSweep,tQ as sdfTorus,V1 as section,H1 as sectionToFace,vI as serializeHistory,xF as setJointValue,bF as setJointValues,kO as setShapeOrigin,GO as setTagMetadata,RP as sewShells,L0 as shape,oZ as shapeToMeshInput,sO as shapeType,sN as sharedEdges,X1 as shell,pZ as shellMesh,gZ as shellShape,Uj as shellWithEvolution,t0 as simplify,Tq as sketchCircle,Eq as sketchEllipse,QK as sketchExtrude,YK as sketchFace,jq as sketchFaceOffset,Nq as sketchHelix,eq as sketchLoft,JJ as sketchOnFace2D,qJ as sketchOnPlane2D,Mq as sketchParametricFunction,kq as sketchPolysides,Dq as sketchRectangle,ZK as sketchRevolve,Oq as sketchRoundedRectangle,$K as sketchSweep,lX as sketchText,XK as sketchWires,So as sketcherStateError,W1 as slice,IP as solid,fM as solidFromShell,n1 as solveAssembly,hP as sphere,yF as sphericalJoint,U1 as split,lI as stepCount,uI as stepsFrom,KJ as stretch2D,MP as subFace,yM as supportExtrude,gT as supportsConstraintSketch,hT as supportsProjection,IQ as surfaceFromGrid,zQ as surfaceFromImage,vM as sweep,HO as tagFaces,DP as tangentArc,to as tap,no as tapErr,pq as textBlueprints,uX as textMetrics,Q1 as thicken,bI as thread,CP as threePointArc,a0 as toBREP,mj as toBufferGeometryData,hj as toGroupedBufferGeometryData,wQ as toKernelVec,_j as toLODGeometryData,vj as toLODGeometryLevels,gj as toLineGeometryData,VJ as toSVGPathD,kD as toVec2,OD as toVec3,_P as torus,CQ as tpmsLattice,P1 as transformCopy,A2 as transforms,O1 as translate,HJ as translate2D,CJ as translateDrawing,tO as translatePlane,po as tryCatch,mo as tryCatchAsync,xM as twistExtrude,xo as typeCastError,oI as undoLast,Do as unsupportedError,j as unwrap,lo as unwrapErr,so as unwrapOr,co as unwrapOrElse,YP as updateNode,CN as updateRoles,vO as uvBounds,bO as uvCoordinates,gE as validSolid,J0 as validatePlanetary,P as validationError,iM as variableFillet,MD as vecAdd,WD as vecAngle,LD as vecCross,BD as vecDistance,ID as vecDot,HD as vecEquals,UD as vecIsZero,RD as vecLength,zD as vecLengthSq,FD as vecNegate,VD as vecNormalize,GD as vecProjectToPlane,JD as vecRepr,KD as vecRotate,PD as vecScale,ND as vecSub,PP as vertex,UX as vertexFinder,DD as vertexPosition,iN as verticesOfEdge,nN as verticesOfFace,mZ as voxelBoolean,kZ as voxelBooleanField,IZ as voxelBooleanFieldShapes,_Z as voxelBooleanShapes,OZ as voxelField,FZ as voxelFieldFromShape,ZP as walkAssembly,eZ as windingNumbers,OP as wire,XI as wireFinder,kP as wireLoop,rN as wiresOfFace,wT as withKernel,MQ as withKernelDir,jQ as withKernelPnt,AQ as withKernelVec,ET as withQuality,YT as withScope,QT as withScopeResult,$T as withScopeResultAsync,AT as withTier,$a as zipResults};
|
|
59
|
+
</Relationships>`),c(`3D/3dmodel.model`,s)])}function WY(e){let t=[],n=/([MmLlHhVvCcSsQqTtAaZz])([^MmLlHhVvCcSsQqTtAaZz]*)/g,r;for(;(r=n.exec(e))!==null;){let e=r[1]??``,n=(r[2]??``).trim(),i=[];if(n){let e=/[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/g,t;for(;(t=e.exec(n))!==null;)i.push(parseFloat(t[0]))}t.push({command:e,args:i})}return t}function GY(e){return[e[0],-e[1]]}function KY(e,t,n,r){let i=0;for(;i<e.length;){let a=(n?t.cx:0)+(e[i]??0),o=(n?t.cy:0)+(e[i+1]??0);i===0?(t.sx=a,t.sy=o):r.push(pL(GY([t.cx,t.cy]),GY([a,o]))),t.cx=a,t.cy=o,i+=2}}function qY(e,t,n,r){let i=0;for(;i<e.length;){let a=(n?t.cx:0)+(e[i]??0),o=(n?t.cy:0)+(e[i+1]??0);r.push(pL(GY([t.cx,t.cy]),GY([a,o]))),t.cx=a,t.cy=o,i+=2}}function JY(e,t,n,r){for(let i of e){let e=n?t.cx+i:i;r.push(pL(GY([t.cx,t.cy]),GY([e,t.cy]))),t.cx=e}}function YY(e,t,n,r){for(let i of e){let e=n?t.cy+i:i;r.push(pL(GY([t.cx,t.cy]),GY([t.cx,e]))),t.cy=e}}function XY(e,t,n,r){let i=0;for(;i+5<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=a+(e[i]??0),c=o+(e[i+1]??0),l=a+(e[i+2]??0),u=o+(e[i+3]??0),d=a+(e[i+4]??0),f=o+(e[i+5]??0);r.push(yL(GY([t.cx,t.cy]),[GY([s,c]),GY([l,u])],GY([d,f]))),t.prevControlX=l,t.prevControlY=u,t.cx=d,t.cy=f,i+=6}}function ZY(e,t,n,r){let i=0;for(;i+3<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=t.lastCmd,c=s===`C`||s===`S`?2*t.cx-t.prevControlX:t.cx,l=s===`C`||s===`S`?2*t.cy-t.prevControlY:t.cy,u=a+(e[i]??0),d=o+(e[i+1]??0),f=a+(e[i+2]??0),p=o+(e[i+3]??0);r.push(yL(GY([t.cx,t.cy]),[GY([c,l]),GY([u,d])],GY([f,p]))),t.prevControlX=u,t.prevControlY=d,t.cx=f,t.cy=p,t.lastCmd=`S`,i+=4}}function QY(e,t,n,r){let i=0;for(;i+3<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=a+(e[i]??0),c=o+(e[i+1]??0),l=a+(e[i+2]??0),u=o+(e[i+3]??0);r.push(yL(GY([t.cx,t.cy]),[GY([s,c])],GY([l,u]))),t.prevControlX=s,t.prevControlY=c,t.cx=l,t.cy=u,i+=4}}function $Y(e,t,n,r){let i=0;for(;i+1<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=t.lastCmd,c=s===`Q`||s===`T`?2*t.cx-t.prevControlX:t.cx,l=s===`Q`||s===`T`?2*t.cy-t.prevControlY:t.cy,u=a+(e[i]??0),d=o+(e[i+1]??0);r.push(yL(GY([t.cx,t.cy]),[GY([c,l])],GY([u,d]))),t.prevControlX=c,t.prevControlY=l,t.cx=u,t.cy=d,t.lastCmd=`T`,i+=2}}function eX(e,t,n,r,i){let a=Math.max(n,r),o=i?1:-1,s=t+2*o*a,c=[e-o*a,t+o*a],l=[e+o*a,t+o*a];try{return[mL(GY([e,t]),GY(c),GY([e,s])),mL(GY([e,s]),GY(l),GY([e,t]))]}catch{return[]}}function tX(e,t,n,r,i,a,o,s){let c=.5,l=e+c*(n-e),u=t+c*(r-t),d=n-e,f=r-t,p=Math.sqrt(d*d+f*f),m=Math.max(i,a),h=p/2,g=h<m?m-Math.sqrt(m*m-h*h):m,_=(o===s?-1:1)*(s?1:-1),v=-f/p,y=d/p,b=l+_*g*v,x=u+_*g*y;try{return[mL(GY([e,t]),GY([b,x]),GY([n,r]))]}catch{return[pL(GY([e,t]),GY([n,r]))]}}function nX(e,t,n,r){let i=0;for(;i+6<e.length;){let a=n?t.cx:0,o=n?t.cy:0,s=Math.abs(e[i]??0),c=Math.abs(e[i+1]??0),l=(e[i+3]??0)!==0,u=(e[i+4]??0)!==0,d=a+(e[i+5]??0),f=o+(e[i+6]??0);if(s===0||c===0)r.push(pL(GY([t.cx,t.cy]),GY([d,f])));else{let e=d-t.cx,n=f-t.cy;Math.sqrt(e*e+n*n)<1e-10?r.push(...eX(t.cx,t.cy,s,c,u)):r.push(...tX(t.cx,t.cy,d,f,s,c,l,u))}t.cx=d,t.cy=f,i+=7}}function rX(e,t){(Math.abs(e.cx-e.sx)>1e-10||Math.abs(e.cy-e.sy)>1e-10)&&t.push(pL(GY([e.cx,e.cy]),GY([e.sx,e.sy]))),e.cx=e.sx,e.cy=e.sy}function iX(e){let t=WY(e),n=[],r={cx:0,cy:0,sx:0,sy:0,prevControlX:0,prevControlY:0,lastCmd:``};for(let{command:e,args:i}of t){let t=e===e.toLowerCase(),a=e.toUpperCase();switch(a){case`M`:KY(i,r,t,n);break;case`L`:qY(i,r,t,n);break;case`H`:JY(i,r,t,n);break;case`V`:YY(i,r,t,n);break;case`C`:XY(i,r,t,n);break;case`S`:ZY(i,r,t,n);break;case`Q`:QY(i,r,t,n);break;case`T`:$Y(i,r,t,n);break;case`A`:nX(i,r,t,n);break;case`Z`:rX(r,n);break}a!==`S`&&a!==`T`&&(r.lastCmd=a)}return n}function aX(e){try{let t=iX(e);return t.length===0?k(Do(`SVG_EMPTY_PATH`,`SVG path produced no curves`)):O(new LL(t))}catch(e){return k(Do(`SVG_PARSE_FAILED`,`Failed to parse SVG path: ${e instanceof Error?e.message:String(e)}`))}}function oX(e){try{let t=/\bd\s*=\s*(?:"([^"]*)"|'([^']*)')/,n=[],r=e.toLowerCase(),i=0;for(;i<r.length;){let a=r.indexOf(`<path `,i);if(a===-1)break;let o=e.indexOf(`>`,a);if(o===-1)break;let s=e.slice(a,o+1);i=o+1;let c=t.exec(s),l=c?.[1]??c?.[2];if(!l)continue;let u=aX(l);u.ok&&n.push(u.value)}return n.length===0?k(Do(`SVG_NO_PATHS`,`No <path> elements found in SVG`)):O(n)}catch(e){return k(Do(`SVG_IMPORT_FAILED`,`Failed to import SVG: ${e instanceof Error?e.message:String(e)}`))}}function sX(e,t){try{let n=H(),r=e.map(e=>({shape:e.shape.wrapped,name:e.name,color:e.color?[...e.color]:void 0}));return O(n.exportSTEPConfigured(r,t))}catch(e){return k(Do(M.STEP_EXPORT_CONFIGURED_FAILED,`Configured STEP export failed`,e))}}async function cX(e){try{let t=await e.arrayBuffer(),n=H().importSTEP(t);if(n.length===0)return k(Do(`STEP_IMPORT_FAILED`,`STEP file contains no valid geometry`));for(let e=1;e<n.length;e++){let t=n[e];t&&H().dispose(t)}return O(U(n[0]))}catch(e){return k(Do(`STEP_IMPORT_FAILED`,`Failed to load STEP file`,e))}}async function lX(e){try{let t=await e.arrayBuffer(),n=H().importSTL(t);return n.IsNull()?k(Do(`STL_IMPORT_FAILED`,`Failed to create solid from STL mesh`)):O(U(n))}catch(e){return k(Do(`STL_IMPORT_FAILED`,`Failed to load STL file`,e))}}async function uX(e){try{let t=await e.arrayBuffer(),n=H().importIGES(t);if(n.length===0)return k(Do(`IGES_IMPORT_FAILED`,`IGES file contains no valid geometry`));for(let e=1;e<n.length;e++){let t=n[e];t&&H().dispose(t)}return O(U(n[0]))}catch(e){return k(Do(`IGES_IMPORT_FAILED`,`Failed to load IGES file`,e))}}function dX(e,t,n={}){let r=hq(e,t);return new uq((typeof n.plane==`string`||n.plane===void 0?r.sketchOnPlane(n.plane,n.origin):r.sketchOnPlane(n.plane)).map(e=>Array.isArray(e)?new qK(e.map(JK)):JK(e)))}function fX(e,t){let n=t?.fontSize??1,r=pq(t?.fontFamily);if(!r)return k(P(M.NO_FONT_LOADED,`No font loaded. Call loadFont() first.`,void 0,void 0,`Load a font with loadFont() before calling textMetrics()`));let i=r.getAdvanceWidth(e,n),a=n/r.unitsPerEm,o=r.ascender*a,s=r.descender*a;return O({width:i,height:o-s,ascender:o,descender:s})}function pX(e){let t=e?.fontSize??1,n=pq(e?.fontFamily);if(!n)return k(P(M.NO_FONT_LOADED,`No font loaded. Call loadFont() first.`,void 0,void 0,`Load a font with loadFont() before calling fontMetrics()`));let r=t/n.unitsPerEm,i=n.ascender*r,a=n.descender*r,o=(n.tables?.os2?.sTypoLineGap??0)*r;return O({ascender:i,descender:a,unitsPerEm:n.unitsPerEm,lineHeight:i-a+o})}function mX(e){return e.type===`init`}function hX(e){return e.type===`operation`}function gX(e){return e.type===`dispose`}function _X(e){return e.type===`batch`}function vX(e){return e.success}function yX(e){return!e.success}function bX(){return{pending:new Map}}function xX(e,t){let n=new Map(e.pending);return n.set(t.id,t),{pending:n}}function SX(e,t){let n=e.pending.get(t);if(!n)return{queue:e,task:void 0};let r=new Map(e.pending);return r.delete(t),{queue:{pending:r},task:n}}function CX(e){return e.pending.size}function wX(e){return e.pending.size===0}function TX(e,t){for(let n of e.pending.values())n.reject(t);return{pending:new Map}}function EX(e,t){let n=t.data,r=e.get(n.id);if(r)if(e.delete(n.id),vX(n)){let e={};n.resultBrep!==void 0&&(e.resultBrep=n.resultBrep),n.resultData!==void 0&&(e.resultData=n.resultData),r.resolve(e)}else r.reject(Error(n.error))}function DX(e){let{worker:t,wasmUrl:n}=e,r=new Map,i=!1;function a(){return crypto.randomUUID()}function o(e){EX(r,e)}t.addEventListener(`message`,o);function s(e){return i?Promise.reject(Error(`WorkerClient has been disposed`)):new Promise((n,i)=>{r.set(e.id,{resolve:n,reject:i}),t.postMessage(e)})}return{async init(){await s({id:a(),type:`init`,...n===void 0?{}:{wasmUrl:n}})},async execute(e,t,n){return s({id:a(),type:`operation`,operation:e,shapesBrep:t,parameters:n})},executeBatch(e){let t=e.length;return s({id:a(),type:`batch`,operations:e}).then(e=>{let n=e.resultData;if(!Array.isArray(n)||n.length!==t)throw Error(`Invalid batch response: expected ${t} results`);return n})},dispose(){i=!0;for(let e of r.values())e.reject(Error(`WorkerClient disposed`));r.clear(),t.removeEventListener(`message`,o);let e={id:a(),type:`dispose`};t.postMessage(e)}}}function OX(){return{operations:new Map}}function kX(e,t,n){let r=new Map(e.operations);return r.set(t,n),{operations:r}}function AX(e){return e instanceof Error?e.message:String(e)}function jX(e,t,n,r){let i=e.operations.get(t);if(!i)return{success:!1,error:`Unknown operation: ${t}`};try{let e=i(n,r);return{success:!0,...e.resultBrep===void 0?{}:{resultBrep:e.resultBrep},...e.resultData===void 0?{}:{resultData:e.resultData}}}catch(e){return{success:!1,error:AX(e)}}}function MX(e,t){return t.success?{id:e,success:!0,...t.resultBrep===void 0?{}:{resultBrep:t.resultBrep},...t.resultData===void 0?{}:{resultData:t.resultData}}:{id:e,success:!1,error:t.error??`operation failed`}}function NX(e,t){let n=globalThis;n.onmessage=async r=>{let i=r.data;if(mX(i)){try{await t(i.wasmUrl);let e={id:i.id,success:!0};n.postMessage(e)}catch(e){let t={id:i.id,success:!1,error:AX(e)};n.postMessage(t)}return}if(hX(i)){let t=jX(e,i.operation,i.shapesBrep,i.parameters);n.postMessage(MX(i.id,t));return}if(_X(i)){let t=i.operations.map(t=>jX(e,t.operation,t.shapesBrep,t.params)),r={id:i.id,success:!0,resultData:t};n.postMessage(r);return}if(gX(i)){let e={id:i.id,success:!0};n.postMessage(e),n.close?.()}}}function PX(e){let{workers:t,wasmUrl:n}=e;if(t.length===0)throw Error(`createWorkerPool requires at least one worker`);let r=t.map(e=>({client:DX({worker:e,...n===void 0?{}:{wasmUrl:n}}),inFlight:0})),i=!1;function a(){return r.reduce((e,t)=>t.inFlight<e.inFlight?t:e)}function o(e,t,n){if(i)return Promise.reject(Error(`WorkerPool has been disposed`));let r=a();return r.inFlight+=1,r.client.execute(e,t,n).finally(()=>{--r.inFlight})}function s(){if(!i){i=!0;for(let e of r)e.client.dispose()}}return{size:r.length,async init(){try{await Promise.all(r.map(e=>e.client.init()))}catch(e){throw s(),e}},execute:o,executeBatch(e){return Promise.all(e.map(e=>o(e.operation,e.shapesBrep,e.params)))},inFlight(){return r.map(e=>e.inFlight)},dispose:s}}var FX=Object.defineProperty,IX=(e,t)=>{let n={};for(var r in e)FX(n,r,{get:e[r],enumerable:!0});return t||FX(n,Symbol.toStringTag,{value:`Module`}),n},LX=1,RX=2;function zX(e,t){t===`commonFace`&&e.SetGlue(LX),t===`sameFace`&&e.SetGlue(RX)}function BX(e){return typeof e==`number`}function VX(e){if(typeof e==`number`)return!0;if(typeof e==`object`&&e){let t=e;return`distances`in t&&Array.isArray(t.distances)&&`selectedFace`in t||`distance`in t&&`angle`in t&&`selectedFace`in t}return!1}function HX(e){return typeof e==`number`?!0:Array.isArray(e)&&e.length===2?e.every(BX):!1}function UX(e,t){let n=n=>{let r=e.findAll(n);if(r.length===0)return[];let i=0,a=HD(kD(vA(r)),t);for(let e=1;e<r.length;e++){let n=HD(kD(_A(r,e)),t);n<a&&(a=n,i=e)}return[_A(r,i)]},r=e=>{let t=n(e);return t.length===0?k(Oo(`FINDER_NOT_UNIQUE`,`Finder expected a unique match but found 0 element(s)`)):O(vA(t))};return{...e,findAll:n,findUnique:r}}function WX(e){return VI(`vertex`,e,WX,(t,n)=>({nearestTo:t=>UX(WX(e),t),atPosition:(e,t=1e-4)=>n(n=>HD(kD(n),e)<t),withinBox:(e,t)=>n(n=>{let r=kD(n);return r[0]>=e[0]-1e-6&&r[0]<=t[0]+1e-6&&r[1]>=e[1]-1e-6&&r[1]<=t[1]+1e-6&&r[2]>=e[2]-1e-6&&r[2]<=t[2]+1e-6}),atDistance:(e,t=[0,0,0],r=1e-4)=>n(n=>{let i=kD(n);return Math.abs(HD(i,t)-e)<r})}))}function GX(){return WX([])}var KX=new Map,qX=null,JX=null;function YX(e,t){KX.set(e,t),qX||=e,e===qX&&(JX=t)}function XX(e){if(!e&&JX)return JX;let t=e??qX;if(!t)throw Error(`brepjs voxel engine not initialized. Call initVoxel() (or registerVoxel()) before using voxel operations.`);let n=KX.get(t);if(!n)throw Error(`brepjs: voxel engine '${t}' is not registered.`);return n}function ZX(){return qX}function QX(e,t=`voxel`){YX(t,e),qX=t,JX=e}function $X(e){if(e.vertices.length%3!=0)return P(`VOXEL_INVALID_MESH`,`mesh.vertices length must be a multiple of 3 (flat xyz).`);if(e.triangles.length%3!=0)return P(`VOXEL_INVALID_MESH`,`mesh.triangles length must be a multiple of 3.`);let t=e.vertices.length/3;for(let n=0;n<e.triangles.length;n++){let r=e.triangles[n];if(r===void 0||r>=t)return P(`VOXEL_INVALID_TRIANGLE_INDEX`,`triangle index ${r} at position ${n} is out of range for ${t} vertices.`)}return null}function eZ(e,t){return $X(e)||(t.length%3==0?null:P(`VOXEL_INVALID_QUERIES`,`queries length must be a multiple of 3 (flat xyz).`))}function tZ(e){try{return O(XX(e))}catch(e){return k(To(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function nZ(e,t,n){let r=eZ(e,t);if(r)return k(r);let i=tZ(n);return A(i)?i:O(i.value.winding_numbers(e.vertices,e.triangles,t))}function rZ(e,t,n){let r=eZ(e,t);if(r)return k(r);let i=tZ(n);if(A(i))return i;let a=i.value.points_inside(e.vertices,e.triangles,t);return O(Array.from(a,e=>e===1))}var iZ=48,aZ=2;function oZ(e,t,n){let r=$X(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`repairMesh requires a non-empty triangle mesh.`));let i=t?.resolution??iZ,a=t?.padding??aZ;if(!Number.isInteger(i)||i<1)return k(P(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`));if(!Number.isInteger(a)||a<1)return k(P(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`));let o=tZ(n);if(A(o))return o;try{try{var s=IT();let t=s.u(o.value.repair_mesh(e.vertices,e.triangles,i,a)),n=t.positions.length/3;return O({vertices:t.positions,normals:t.normals,triangles:t.indices,uvs:new Float32Array(n*2),faceGroups:[{start:0,count:t.indices.length/3,faceHash:0}]})}catch(e){s.e=e}finally{s.d()}}catch(e){return k(Eo(`VOXEL_REPAIR_FAILED`,e instanceof Error?e.message:`voxel repair failed (grid too large?).`,e))}}var sZ=.001;function cZ(e,t=sZ){try{let n=nA(e,{tolerance:t});return n.vertices.length===0||n.triangles.length===0?k(Eo(`VOXEL_SHAPE_MESH_EMPTY`,`shape tessellated to an empty triangle mesh.`)):O({vertices:n.vertices,triangles:n.triangles})}catch(e){return k(Eo(`VOXEL_SHAPE_MESH_FAILED`,e instanceof Error?e.message:`failed to mesh shape for voxel op.`,e))}}var lZ=48,uZ=2,dZ={union:0,intersection:1,difference:2};function fZ(e){let t=e?.resolution??lZ,n=e?.padding??uZ;return!Number.isInteger(t)||t<1?k(P(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(P(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function pZ(e){if(e.positions.length===0||e.indices.length===0)return k(Eo(`VOXEL_DEGENERATE_RESULT`,`the voxel operation produced an empty mesh (over-shrunk offset or disjoint operands?).`));let t=e.positions.length/3;return O({vertices:e.positions,normals:e.normals,triangles:e.indices,uvs:new Float32Array(t*2),faceGroups:[{start:0,count:e.indices.length/3,faceHash:0}]})}function mZ(e,t,n,r){let i=$X(e);if(i)return k(i);if(e.vertices.length===0||e.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`offsetMesh requires a non-empty triangle mesh.`));if(!Number.isFinite(t))return k(P(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));let a=fZ(n);if(A(a))return a;let o=tZ(r);if(A(o))return o;try{try{var s=IT();return pZ(s.u(o.value.offset_mesh(e.vertices,e.triangles,t,a.value.resolution,a.value.padding)))}catch(e){s.e=e}finally{s.d()}}catch(e){return k(Eo(`VOXEL_OFFSET_FAILED`,e instanceof Error?e.message:`voxel offset failed (grid too large?).`,e))}}function hZ(e,t,n,r){let i=$X(e);if(i)return k(i);if(e.vertices.length===0||e.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`shellMesh requires a non-empty triangle mesh.`));if(!Number.isFinite(t)||t<=0)return k(P(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));let a=fZ(n);if(A(a))return a;let o=tZ(r);if(A(o))return o;try{try{var s=IT();return pZ(s.u(o.value.shell_mesh(e.vertices,e.triangles,t,a.value.resolution,a.value.padding)))}catch(e){s.e=e}finally{s.d()}}catch(e){return k(Eo(`VOXEL_SHELL_FAILED`,e instanceof Error?e.message:`voxel shell failed (grid too large?).`,e))}}function gZ(e,t,n,r,i){let a=$X(e);if(a)return k(a);let o=$X(t);if(o)return k(o);if(e.vertices.length===0||e.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`voxelBoolean requires a non-empty mesh for operand A.`));if(t.vertices.length===0||t.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`voxelBoolean requires a non-empty mesh for operand B.`));let s=dZ[n],c=fZ(r);if(A(c))return c;let l=tZ(i);if(A(l))return l;try{try{var u=IT();return pZ(u.u(l.value.voxel_boolean(e.vertices,e.triangles,t.vertices,t.triangles,s,c.value.resolution,c.value.padding)))}catch(e){u.e=e}finally{u.d()}}catch(e){return k(Eo(`VOXEL_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel boolean failed (grid too large?).`,e))}}function _Z(e,t,n,r){let i=cZ(e);return A(i)?i:mZ(i.value,t,n,r)}function vZ(e,t,n,r){let i=cZ(e);return A(i)?i:hZ(i.value,t,n,r)}function yZ(e,t,n,r,i){let a=cZ(e);if(A(a))return a;let o=cZ(t);return A(o)?o:gZ(a.value,o.value,n,r,i)}var bZ=48,xZ=2,SZ={union:0,intersection:1,difference:2};function CZ(e){let t=e?.resolution??bZ,n=e?.padding??xZ;return!Number.isInteger(t)||t<1?k(P(`VOXEL_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(P(`VOXEL_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function wZ(e){try{var t=IT();let n=e.contour(),{positions:r,normals:i,indices:a}=t.u({value:n,[Symbol.dispose](){n.free()}}).value;if(r.length===0||a.length===0)return k(Eo(`VOXEL_DEGENERATE_RESULT`,`the voxel field contoured to an empty mesh (over-shrunk offset or disjoint operands?).`));let o=r.length/3;return O({vertices:r,normals:i,triangles:a,uvs:new Float32Array(o*2),faceGroups:[{start:0,count:a.length/3,faceHash:0}]})}catch(e){t.e=e}finally{t.d()}}function TZ(e){return{raw:e,delete(){e.free()}}}function EZ(e){return DZ(e)}function DZ(e){let t=YT(TZ(e)),n={get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},boolean(e,t){return this.value.boolean(e.value,SZ[t]),n},offset(e){return this.value.offset(e),n},shell(e){return this.value.shell(e),n},reinit(){return this.value.reinit(),n},contour(){let e=wZ(this.value);if(A(e))throw Error(e.error.message);return e.value}};return n}function OZ(e){return!e.disposed}function kZ(){return k(P(`VOXEL_FIELD_DISPOSED`,`the voxel field handle has been disposed.`))}function AZ(e,t,n){let r=$X(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`voxelField requires a non-empty triangle mesh.`));let i=CZ(t);if(A(i))return i;let a=tZ(n);if(A(a))return a;try{return O(DZ(new a.value.VoxelField(e.vertices,e.triangles,i.value.resolution,i.value.padding)))}catch(e){return k(Eo(`VOXEL_FIELD_VOXELIZE_FAILED`,e instanceof Error?e.message:`voxel field voxelization failed (grid too large or non-dense?).`,e))}}function jZ(e,t,n,r,i){let a=$X(e);if(a)return k(a);let o=$X(t);if(o)return k(o);if(e.vertices.length===0||e.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`voxelBooleanField requires a non-empty mesh for operand A.`));if(t.vertices.length===0||t.triangles.length===0)return k(P(`VOXEL_EMPTY_MESH`,`voxelBooleanField requires a non-empty mesh for operand B.`));let s=CZ(r);if(A(s))return s;let c=tZ(i);if(A(c))return c;try{return O(DZ(c.value.VoxelField.boolean_of(e.vertices,e.triangles,t.vertices,t.triangles,SZ[n],s.value.resolution,s.value.padding)))}catch(e){return k(Eo(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (grid too large or non-dense?).`,e))}}function MZ(e,t,n){if(!OZ(e)||!OZ(t))return kZ();try{return e.value.boolean(t.value,SZ[n]),O(e)}catch(e){return k(Eo(`VOXEL_FIELD_BOOLEAN_FAILED`,e instanceof Error?e.message:`voxel field boolean failed (dim mismatch?).`,e))}}function NZ(e,t){if(!OZ(e))return kZ();if(!Number.isFinite(t))return k(P(`VOXEL_INVALID_DISTANCE`,`distance must be a finite number.`));try{return e.value.offset(t),O(e)}catch(e){return k(Eo(`VOXEL_FIELD_OFFSET_FAILED`,e instanceof Error?e.message:`voxel field offset failed.`,e))}}function PZ(e,t){if(!OZ(e))return kZ();if(!Number.isFinite(t)||t<=0)return k(P(`VOXEL_INVALID_THICKNESS`,`thickness must be a finite number > 0.`));try{return e.value.shell(t),O(e)}catch(e){return k(Eo(`VOXEL_FIELD_SHELL_FAILED`,e instanceof Error?e.message:`voxel field shell failed.`,e))}}function FZ(e){if(!OZ(e))return kZ();try{return e.value.reinit(),O(e)}catch(e){return k(Eo(`VOXEL_FIELD_REINIT_FAILED`,e instanceof Error?e.message:`voxel field reinit failed.`,e))}}function IZ(e){if(!OZ(e))return kZ();try{return wZ(e.value)}catch(e){return k(Eo(`VOXEL_FIELD_CONTOUR_FAILED`,e instanceof Error?e.message:`voxel field contour failed.`,e))}}function LZ(e,t,n){let r=cZ(e);return A(r)?r:AZ(r.value,t,n)}function RZ(e,t,n,r,i){let a=cZ(e);if(A(a))return a;let o=cZ(t);return A(o)?o:jZ(a.value,o.value,n,r,i)}var zZ=48,BZ=2;function VZ(e){try{return O(XX(e))}catch(e){return k(To(`VOXEL_NOT_INITIALIZED`,e instanceof Error?e.message:`voxel engine not initialized`,e))}}function HZ(e){let t=e?.resolution??zZ,n=e?.padding??BZ;return!Number.isInteger(t)||t<1?k(P(`SDF_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(n)||n<1?k(P(`SDF_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({resolution:t,padding:n})}function UZ(e){return{raw:e,delete(){e.free()}}}var WZ={offsetField(e){return GZ(this.value.offset_field(e.value))},roundField(e){return GZ(this.value.round_field(e.value))},shellField(e){return GZ(this.value.shell_field(e.value))},smoothUnionField(e,t){return GZ(this.value.smooth_union_field(e.value,t.value))}};function GZ(e){let t=YT(UZ(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()},union(e){return GZ(this.value.union(e.value))},intersection(e){return GZ(this.value.intersection(e.value))},difference(e){return GZ(this.value.difference(e.value))},smoothUnion(e,t){return GZ(this.value.smooth_union(e.value,t))},smoothIntersection(e,t){return GZ(this.value.smooth_intersection(e.value,t))},smoothDifference(e,t){return GZ(this.value.smooth_difference(e.value,t))},offset(e){return GZ(this.value.offset(e))},round(e){return GZ(this.value.round(e))},shell(e){return GZ(this.value.shell(e))},onion(e){return GZ(this.value.onion(e))},...WZ,translate(e,t,n){return GZ(this.value.translate(e,t,n))},rotate(e,t,n,r){return GZ(this.value.rotate(e,t,n,r))},scale(e){return GZ(this.value.scale(e))},rasterize(e){return KZ(this.value,e)},rasterizeIn(e,t){return qZ(this.value,e,t)}}}function KZ(e,t){let n=HZ(t);if(A(n))return n;try{return O(EZ(e.rasterize(n.value.resolution,n.value.padding)))}catch(e){return JZ(e)}}function qZ(e,t,n){let r=HZ(n);if(A(r))return r;let i=YZ(t);if(i)return k(i);try{return O(EZ(e.rasterize_in(t.min[0],t.min[1],t.min[2],t.max[0],t.max[1],t.max[2],r.value.resolution,r.value.padding)))}catch(e){return JZ(e)}}function JZ(e){return k(Eo(`SDF_RASTERIZE_FAILED`,e instanceof Error?e.message:`SDF rasterization failed (grid too large?).`,e))}function YZ(e){if(![...e.min,...e.max].every(e=>Number.isFinite(e)))return P(`SDF_INVALID_BOUNDS`,`bounds must be finite numbers.`);for(let t=0;t<3;t++)if(e.max[t]<=e.min[t])return P(`SDF_INVALID_BOUNDS`,`bounds max must exceed min on every axis.`);return null}function XZ(e,t){let n=VZ(t);if(A(n))return n;try{return O(GZ(e(n.value)))}catch(e){return k(Eo(`SDF_BUILD_FAILED`,e instanceof Error?e.message:`SDF primitive construction failed.`,e))}}function ZZ(e,t){return XZ(t=>t.Sdf.sphere(e),t)}function QZ(e,t,n,r){return XZ(r=>r.Sdf.box_(e,t,n),r)}function $Z(e,t,n,r,i){return XZ(i=>i.Sdf.rounded_box(e,t,n,r),i)}function eQ(e,t,n){return XZ(n=>n.Sdf.cylinder(e,t),n)}function tQ(e,t,n){return XZ(n=>n.Sdf.cone(e,t),n)}function nQ(e,t,n,r){return XZ(r=>r.Sdf.capsule(e[0],e[1],e[2],t[0],t[1],t[2],n),r)}function rQ(e,t,n){return XZ(n=>n.Sdf.torus(e,t),n)}function iQ(e,t,n){return XZ(n=>n.Sdf.plane(e[0],e[1],e[2],t),n)}function aQ(e){if(e.length<2)return k(P(`SDF_INVALID_SPINE`,`sweep spine needs at least 2 points.`));let t=new Float64Array(e.length*3);for(let n=0;n<e.length;n++){let r=e[n];if(!r.every(e=>Number.isFinite(e)))return k(P(`SDF_INVALID_SPINE`,`sweep spine coordinates must be finite.`));t[n*3]=r[0],t[n*3+1]=r[1],t[n*3+2]=r[2]}return O(t)}function oQ(e,t,n,r){let i=aQ(e);if(A(i))return i;let a=n?.closed??!1;return XZ(e=>e.Sdf.sweep(i.value,t.value,a),r)}var sQ={gyroid:0,schwarzP:1,diamond:2};function cQ(e,t,n,r){let i=sQ[e];return i===void 0?k(P(`SDF_INVALID_LATTICE_KIND`,`unknown lattice kind: ${e}`)):XZ(e=>e.Sdf.lattice(i,t.value,n.value),r)}function lQ(e,t,n){return XZ(n=>n.Sdf.strut_lattice(e,t.value),n)}function uQ(e){return{raw:e,delete(){e.free()}}}function dQ(e){let t=YT(uQ(e));return{get value(){return t.value.raw},get disposed(){return t.disposed},[Symbol.dispose](){t[Symbol.dispose]()}}}function fQ(e,t){let n=VZ(t);if(A(n))return n;try{return O(dQ(e(n.value)))}catch(e){return k(Eo(`SDF_FIELD_BUILD_FAILED`,e instanceof Error?e.message:`scalar field construction failed.`,e))}}function pQ(e,t){return fQ(t=>t.ScalarField.constant(e),t)}function mQ(e,t,n,r,i,a){return fQ(a=>a.ScalarField.axial_ramp(e,t,n,r,i),a)}function hQ(e,t,n,r,i,a,o){return fQ(o=>o.ScalarField.radial_ramp(e[0],e[1],e[2],t,n,r,i,a),o)}function gQ(e,t,n,r){return fQ(r=>r.ScalarField.from_sdf(e.value,t,n),r)}function _Q(e,t,n,r){return fQ(r=>r.ScalarField.clamp(e.value,t,n),r)}var vQ={gyroid:0,schwarzP:1,diamond:2},yQ=48,bQ=2;function xQ(e){let t=vQ[e.type];if(t===void 0)return k(P(`LATTICE_INVALID_TYPE`,`lattice type must be one of gyroid, schwarzP, diamond (got '${e.type}').`));if(!(e.period>0))return k(P(`LATTICE_INVALID_PERIOD`,`period must be > 0.`));if(!(e.thickness>0))return k(P(`LATTICE_INVALID_THICKNESS`,`thickness must be > 0.`));let n=e.resolution??yQ,r=e.padding??bQ;return!Number.isInteger(n)||n<1?k(P(`LATTICE_INVALID_RESOLUTION`,`resolution must be an integer >= 1.`)):!Number.isInteger(r)||r<1?k(P(`LATTICE_INVALID_PADDING`,`padding must be an integer >= 1.`)):O({tag:t,period:e.period,thickness:e.thickness,resolution:n,padding:r})}function SQ(e){let t=e.positions.length/3;return{vertices:e.positions,normals:e.normals,triangles:e.indices,uvs:new Float32Array(t*2),faceGroups:[{start:0,count:e.indices.length/3,faceHash:0}]}}function CQ(e,t,n){let r=$X(e);if(r)return k(r);if(e.vertices.length===0||e.triangles.length===0)return k(P(`LATTICE_EMPTY_MESH`,`latticeInfill requires a non-empty triangle mesh.`));let i=xQ(t);if(A(i))return i;let a=tZ(n);if(A(a))return a;let{tag:o,period:s,thickness:c,resolution:l,padding:u}=i.value;try{try{var d=IT();return O(SQ(d.u(a.value.lattice_infill(e.vertices,e.triangles,l,u,o,s,c))))}catch(e){d.e=e}finally{d.d()}}catch(e){return k(Eo(`LATTICE_INFILL_FAILED`,e instanceof Error?e.message:`lattice infill failed (grid too large?).`,e))}}function wQ(e,t,n){let r=cZ(e);return A(r)?r:CQ(r.value,t,n)}function TQ(e,t,n){for(let t=0;t<3;t++){let n=e.min[t],r=e.max[t];if(n===void 0||r===void 0||!(n<r))return k(P(`LATTICE_INVALID_BOUNDS`,`bounds.min must be strictly less than bounds.max on every axis (axis ${t}).`))}let r=xQ(t);if(A(r))return r;let i=tZ(n);if(A(i))return i;let{tag:a,period:o,thickness:s,resolution:c,padding:l}=r.value,[u,d,f]=e.min,[p,m,h]=e.max;try{try{var g=IT();return O(SQ(g.u(i.value.tpms_box(u,d,f,p,m,h,c,l,a,o,s))))}catch(e){g.e=e}finally{g.d()}}catch(e){return k(Eo(`TPMS_LATTICE_FAILED`,e instanceof Error?e.message:`tpms lattice failed (grid too large?).`,e))}}function EQ(e){return H().createVector3d(e[0],e[1],e[2])}function DQ(e){return H().createPoint3d(e[0],e[1],e[2])}function OQ(e){return H().createDirection3d(e[0],e[1],e[2])}function kQ(e){return[e.X(),e.Y(),e.Z()]}function AQ(e){return[e.X(),e.Y(),e.Z()]}function jQ(e){return[e.X(),e.Y(),e.Z()]}function MQ(e,t){let n=EQ(e);try{return t(n)}finally{n.delete()}}function NQ(e,t){let n=DQ(e);try{return t(n)}finally{n.delete()}}function PQ(e,t){let n=OQ(e);try{return t(n)}finally{n.delete()}}var FQ=.299,IQ=.587,LQ=.114;function RQ(e,t={}){if(e.length<2)return k(P(M.SURFACE_GRID_TOO_SMALL,`surfaceFromGrid: need at least 2 rows, got ${e.length}`));let n=e.length,r=e[0]?.length??0;if(r<2)return k(P(M.SURFACE_GRID_TOO_SMALL,`surfaceFromGrid: need at least 2 columns, got ${r}`));for(let t=0;t<n;t++){let n=e[t];if(!n||n.length!==r)return k(P(M.SURFACE_GRID_JAGGED,`surfaceFromGrid: row ${t} has ${n?.length??0} columns, expected ${r}`))}let{width:i=r-1,depth:a=n-1,scaleZ:o=1}=t,s=i/(r-1),c=a/(n-1);try{return zQ(e,n,r,s,c,o)}catch{}try{return BQ(e,n,r,s,c,o)}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.SURFACE_FAILED,`surfaceFromGrid failed: ${t}`,e))}}function zQ(e,t,n,r,i,a){let o=[];for(let s=0;s<t;s++)for(let t=0;t<n;t++){let n=e[s],c=(n?n[t]??0:0)*a;o.push([t*r,s*i,c])}let s=U(H().bsplineSurface(o,t,n));return FE(s)?O(s):(W(s),k(N(M.SURFACE_FAILED,`B-spline surface did not produce a face`)))}function BQ(e,t,n,r,i,a){let o=[];for(let s=0;s<t;s++)for(let t=0;t<n;t++){let n=e[s],c=(n?n[t]??0:0)*a;o.push([t*r,s*i,c])}let s=U(H().triangulatedSurface(o,t,n));return FE(s)||IE(s)?O(s):(W(s),k(N(M.SURFACE_FAILED,`surfaceFromGrid: unexpected shape type from sewing`)))}async function VQ(e,t={}){let n=t.channel??`luminance`,r=Math.max(1,Math.round(t.downsample??1));if(typeof createImageBitmap!=`function`)return k(Do(M.SURFACE_FAILED,`surfaceFromImage requires createImageBitmap (not available in this environment)`));let i;try{i=await createImageBitmap(e)}catch(e){return k(Do(M.SURFACE_FAILED,`surfaceFromImage: failed to decode image — ${e instanceof Error?e.message:String(e)}`))}let a=i.width,o=i.height;if(a<2||o<2)return i.close(),k(P(M.SURFACE_GRID_TOO_SMALL,`surfaceFromImage: image too small (${a}x${o}), need at least 2x2`));if(typeof OffscreenCanvas!=`function`)return i.close(),k(Do(M.SURFACE_FAILED,`surfaceFromImage requires OffscreenCanvas (not available in this environment)`));let s=new OffscreenCanvas(a,o).getContext(`2d`);if(!s)return i.close(),k(Do(M.SURFACE_FAILED,`surfaceFromImage: could not get 2D canvas context`));s.drawImage(i,0,0),i.close();let c=s.getImageData(0,0,a,o).data,l=[];for(let e=0;e<o;e+=r){let t=[];for(let i=0;i<a;i+=r){let r=(e*a+i)*4,o=c[r]??0,s=c[r+1]??0,l=c[r+2]??0,u;switch(n){case`r`:u=o/255;break;case`g`:u=s/255;break;case`b`:u=l/255;break;default:u=(FQ*o+IQ*s+LQ*l)/255;break}t.push(u)}l.push(t)}let u={};return t.width!==void 0&&(u.width=t.width),t.depth!==void 0&&(u.depth=t.depth),t.scaleZ!==void 0&&(u.scaleZ=t.scaleZ),RQ(l,u)}function HQ(e,t){return H().isNull(e.wrapped)?k(P(M.NULL_SHAPE_INPUT,`${t} is a null shape`)):O(void 0)}function UQ(e,t={}){if(e.length===0)return k(P(M.HULL_EMPTY_INPUT,`hull: at least one shape is required`,void 0,void 0,`Provide one or more shapes to compute a convex hull`));for(let[t,n]of e.entries()){let e=HQ(n,`hull: shapes[${t}]`);if(A(e))return e}let n=t.tolerance??.1;try{let t=H(),r=e.map(e=>e.wrapped),i=U(t.hull(r,n));return LE(i)?O(i):(W(i),k(N(M.HULL_NOT_3D,`Hull result is not a solid; input may be degenerate`)))}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`coplanar`)||t.includes(`fewer than`)||t.includes(`degenerate`)?k(N(M.HULL_DEGENERATE,`Hull degenerate: ${t}`,e)):k(N(M.HULL_FAILED,`Hull operation failed: ${t}`,e))}}function WQ(e){if(e.length<4)return k(P(M.HULL_EMPTY_INPUT,`convexHull: at least 4 points required, got ${e.length}`,void 0,void 0,`Provide 4 or more non-coplanar 3D points`));try{let t=H(),n=e.map(e=>({x:e[0],y:e[1],z:e[2]})),r=U(t.hullFromPoints(n,.1));return LE(r)?O(r):(W(r),k(N(M.HULL_NOT_3D,`convexHull result is not a solid; points may be coplanar`)))}catch(e){let t=e instanceof Error?e.message:String(e);return t.includes(`coplanar`)||t.includes(`fewer than`)||t.includes(`degenerate`)?k(N(M.HULL_DEGENERATE,`convexHull degenerate: ${t}`,e)):k(N(M.HULL_FAILED,`convexHull failed: ${t}`,e))}}function GQ(e){let n=dD(e);if(n.length!==1)return null;let r=t(n,0);if(ED(r)!==`sphere`)return null;let i=H().area(r.wrapped);return Math.sqrt(i/(4*Math.PI))}function KQ(e,t,n){try{let r=U(H().offset(e.wrapped,t,n));return zE(r)?O(r):(W(r),k(Co(M.MINKOWSKI_NOT_3D,`Minkowski sphere offset did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.MINKOWSKI_FAILED,`Minkowski sphere offset failed: ${t}`,e,{operation:`minkowski`,fastPath:`sphere`}))}}function qQ(e,t,n){let r=H();try{let i=pD(e),a=pD(t);if(i.length===0||a.length===0)return k(N(M.MINKOWSKI_FAILED,`Minkowski sum: one or both shapes have no vertices`,void 0,{operation:`minkowski`}));let o=[];for(let e of i){let[t,n,i]=r.vertexPosition(e.wrapped);for(let e of a){let[a,s,c]=r.vertexPosition(e.wrapped);o.push({x:t+a,y:n+s,z:i+c})}}let s=U(r.hullFromPoints(o,n));return zE(s)?O(s):(W(s),k(Co(M.MINKOWSKI_NOT_3D,`Minkowski hull did not produce a 3D shape`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.MINKOWSKI_FAILED,`Minkowski general path failed: ${t}`,e,{operation:`minkowski`}))}}function JQ(e,t,n={}){let{tolerance:r=1e-6}=n;if(H().isNull(e.wrapped))return k(P(M.NULL_SHAPE_INPUT,`minkowski: shape is a null shape`));if(H().isNull(t.wrapped))return k(P(M.MINKOWSKI_NULL_TOOL,`minkowski: tool is a null shape`));if(!zE(e)||!zE(t))return k(P(M.MINKOWSKI_NOT_3D,`minkowski: both shape and tool must be 3D`));let i=GQ(t);return i===null?qQ(e,t,r):KQ(e,i,r)}function YQ(e,t,n={}){let{tolerance:r=1e-6}=n;if(e.length<4)return k(P(M.POLYHEDRON_INSUFFICIENT_POINTS,`polyhedron: need at least 4 points, got ${e.length}`));if(t.length<4)return k(P(M.POLYHEDRON_INSUFFICIENT_FACES,`polyhedron: need at least 4 faces, got ${t.length}`));let i=[];for(let[n,r]of t.entries()){for(let t of r)if(t<0||t>=e.length)return k(P(M.POLYHEDRON_INVALID_INDEX,`polyhedron: face ${n} has out-of-range index ${t} (${e.length} points)`));if(r.length<3)continue;let t=r[0];for(let e=1;e<r.length-1;e++)i.push([t,r[e],r[e+1]])}try{let t=H(),n=e.map(([e,t,n])=>({x:e,y:t,z:n})),a=U(t.buildSolidFromFaces(n,i,r));return LE(a)?O(a):(W(a),k(N(M.POLYHEDRON_FAILED,`Polyhedron did not produce a solid`)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.POLYHEDRON_FAILED,`Polyhedron failed: ${t}`,e))}}var XQ=1e-10;function ZQ(e,t,n,r){return e*r-t*n}function QQ(e,t,n,r){return e*n+t*r}function $Q(e,t){return Math.sqrt(e*e+t*t)}function e$(e,t){let n=e[(t%e.length+e.length)%e.length];if(!n)throw Error(`Invalid polygon index ${t} for length ${e.length}`);return n}function t$(e){let t=0;for(let n=0;n<e.length;n++){let r=e$(e,n),i=e$(e,n+1);t+=r.x*i.y-i.x*r.y}return t<0?[...e].reverse():e}function n$(e,t){let n=e$(e,t-1),r=e$(e,t),i=e$(e,t+1),a=r.x-n.x,o=r.y-n.y,s=$Q(a,o),c=i.x-r.x,l=i.y-r.y,u=$Q(c,l);if(s<XQ||u<XQ)return{dx:0,dy:0};let d=-o/s,f=a/s,p=-l/u,m=c/u,h=d+p,g=f+m,_=$Q(h,g);if(_<XQ)return{dx:d,dy:f};h/=_,g/=_;let v=QQ(h,g,d,f),y=Math.abs(v)>XQ?1/v:1;return{dx:h*y,dy:g*y}}function r$(e){return!e.prev||!e.next?!1:ZQ(e.x-e.prev.x,e.y-e.prev.y,e.next.x-e.x,e.next.y-e.y)<-1e-10}function i$(e){let t=e.map((t,n)=>{let r=n$(e,n);return{x:t.x,y:t.y,bx:r.dx,by:r.dy,origIdx:n,prev:null,next:null,active:!0}});for(let e=0;e<t.length;e++){let n=t[e],r=t[(e-1+t.length)%t.length],i=t[(e+1)%t.length];n&&r&&i&&(n.prev=r,n.next=i)}return t}function a$(e,t){let n=e;for(let e=0;e<t&&n;e++)n.active=!1,n=n.next}function o$(e){let t=1,n=e.next;for(;n!==e&&(t++,n=n.next,!(t>1e4)););return t}function s$(e,t){let n=e.bx-t.bx,r=e.by-t.by,i=t.x-e.x,a=t.y-e.y;if(Math.abs(n)<XQ&&Math.abs(r)<XQ)return null;let o;if(o=Math.abs(n)>Math.abs(r)?i/n:a/r,o<XQ)return null;let s=Math.abs(n)>Math.abs(r)?r:n,c=Math.abs(n)>Math.abs(r)?a:i;if(Math.abs(s)>XQ){let e=c/s;if(Math.abs(o-e)>1e-4*Math.max(1,Math.abs(o)))return null}return o}function c$(e,t,n){let r=n.x-t.x,i=n.y-t.y,a=$Q(r,i);if(a<XQ)return null;let o=-i/a,s=r/a,c=(e.x-t.x)*o+(e.y-t.y)*s,l=e.bx-(t.bx+n.bx)/2,u=e.by-(t.by+n.by)/2,d=l*o+u*s;if(Math.abs(d)<XQ)return null;let f=-c/d;if(f<XQ)return null;let p=e.x+f*e.bx,m=e.y+f*e.by,h=t.x+f*t.bx,g=t.y+f*t.by,_=n.x+f*n.bx,v=n.y+f*n.by,y=_-h,b=v-g,x=$Q(y,b);if(x<XQ)return f;let S=QQ(p-h,m-g,y,b)/(x*x);return S<-.01||S>1.01?null:f}function l$(e){let t=[];for(let n of e){if(!n.active||!n.next)continue;let e=s$(n,n.next);if(e!==null&&e>XQ){let r=n.x+e*n.bx,i=n.y+e*n.by;t.push({time:e,x:r,y:i,nodeA:n,nodeB:n.next,type:`edge`})}if(r$(n)){let e=n.next.next,r=0;for(;e!==n.prev&&e!==n&&r<1e3;){let i=c$(n,e,e.next);if(i!==null&&i>XQ){let r=n.x+i*n.bx,a=n.y+i*n.by;t.push({time:i,x:r,y:a,nodeA:n,nodeB:e,type:`split`})}e=e.next,r++}}}return t.sort((e,t)=>e.time-t.time),t}function u$(e){if(e.length<3)return O({nodes:[],faces:[]});try{return O(d$(e))}catch(e){return k(Eo(M.STRAIGHT_SKELETON_FAILED,e instanceof Error?e.message:String(e),e))}}function d$(e){let t=t$(e),n=t.length,r=[],i=Array.from({length:n},()=>[]),a=i$(t),o=0,s=n*n*2;for(;o<s;){o++;let e=a.find(e=>e.active);if(!e)break;let t=o$(e);if(t<=3){if(t===3){let t=e,n=t.next,a=n.next,o=s$(t,n),s=o!==null&&o>XQ?o:0,c=(t.x+n.x+a.x)/3+s*(t.bx+n.bx+a.bx)/3,l=(t.y+n.y+a.y)/3+s*(t.by+n.by+a.by)/3,u=r.length;r.push({x:c,y:l,height:s});let d=i[t.origIdx],f=i[n.origIdx],p=i[a.origIdx];d&&d.push(u),f&&f.push(u),p&&p.push(u),t.active=!1,n.active=!1,a.active=!1}else a$(e,t);continue}let n=a.filter(e=>e.active),s=l$(n);if(s.length===0){for(let e of n)e.active=!1;break}let c=s[0];if(!c)break;if(c.type===`edge`){let e=c.nodeA,t=c.nodeB;if(!e.active||!t.active)continue;let n=r.length;r.push({x:c.x,y:c.y,height:c.time});let a=i[e.origIdx],o=i[t.origIdx];a&&a.push(n),o&&o.push(n),e.x=c.x,e.y=c.y,e.next=t.next,t.next.prev=e,t.active=!1;let s=[],l=e;do s.push({x:l.x,y:l.y}),l=l.next;while(l!==e);let u=n$(s,0);e.bx=u.dx,e.by=u.dy}else{let e=c.nodeA,t=c.nodeB;if(!e.active||!t.active)continue;let n=r.length;r.push({x:c.x,y:c.y,height:c.time});let o=i[e.origIdx];o&&o.push(n);let s=i[t.origIdx];s&&s.push(n);let l={x:c.x,y:c.y,bx:0,by:0,origIdx:e.origIdx,prev:null,next:null,active:!0};a.push(l),e.x=c.x,e.y=c.y;let u=e.next,d=t.next;e.next=d,d.prev=e,l.next=u,u.prev=l,l.prev=t,t.next=l;let f=e=>{let t=[],n=e;do t.push({x:n.x,y:n.y}),n=n.next;while(n!==e);return t},p=n$(f(e),0);e.bx=p.dx,e.by=p.dy;let m=n$(f(l),0);l.bx=m.dx,l.by=m.dy}}let c=[];for(let e=0;e<n;e++){let a=(e+1)%n,o=[e$(t,e),e$(t,a)],s=[0,0],l=i[a],u=i[e];if(l)for(let e of l){let t=r[e];t&&(o.push({x:t.x,y:t.y}),s.push(t.height))}if(u)for(let e=u.length-1;e>=0;e--){let t=u[e];if(t===void 0)continue;let n=r[t];if(!n)continue;let i=o[o.length-1];i&&$Q(n.x-i.x,n.y-i.y)>XQ&&(o.push({x:n.x,y:n.y}),s.push(n.height))}o.length>=3&&c.push({vertices:o,heights:s})}let l=[];for(let e of r)l.some(t=>Math.abs(t.x-e.x)<.01&&Math.abs(t.y-e.y)<.01)||l.push(e);return{nodes:l,faces:c}}function f$(e){let t=uD(e).map(e=>{let t=Mk(e);return{x:t[0],y:t[1]}}),n=t[0],r=t[t.length-1];return t.length>1&&n&&r&&Math.abs(n.x-r.x)<1e-10&&Math.abs(n.y-r.y)<1e-10&&t.pop(),t}function p$(e){let t=[];for(let n=1;n<e-1;n++)t.push([0,n,n+1]);return t}function m$(e,t,n,r,i,a){return(n-e)*(a-t)-(r-t)*(i-e)}function h$(e,t,n,r,i,a,o,s){let c=m$(n,r,i,a,e,t),l=m$(i,a,o,s,e,t),u=m$(o,s,n,r,e,t);return!((c<0||l<0||u<0)&&(c>0||l>0||u>0))}function g$(e){let t=e.length;if(t<3)return[];if(t===3)return[[0,1,2]];let n=0;for(let r=0;r<t;r++){let i=e[r],a=e[(r+1)%t];i&&a&&(n+=i.x*a.y-a.x*i.y)}let r=[],i=Array.from({length:t},(e,t)=>t);n<0&&i.reverse();let a=(t,n,r)=>{let a=e[t],o=e[n],s=e[r];if(!a||!o||!s||m$(a.x,a.y,o.x,o.y,s.x,s.y)<=0)return!1;for(let c of i){if(c===t||c===n||c===r)continue;let i=e[c];if(i&&h$(i.x,i.y,a.x,a.y,o.x,o.y,s.x,s.y))return!1}return!0};for(;i.length>3;){let e=!1;for(let t=0;t<i.length;t++){let n=i[(t-1+i.length)%i.length],o=i[t],s=i[(t+1)%i.length];if(!(n===void 0||o===void 0||s===void 0)&&a(n,o,s)){r.push([n,o,s]),i.splice(t,1),e=!0;break}}if(!e)break}if(i.length===3){let[e,t,n]=i;e!==void 0&&t!==void 0&&n!==void 0&&r.push([e,t,n])}return r}function _$(e,t,n){let r=[];for(let i of e.faces){let e=i.vertices.map((e,n)=>[e.x,e.y,(i.heights[n]??0)*t]),a=p$(e.length);for(let[t,i,o]of a){let a=e[t],s=e[i],c=e[o];if(!a||!s||!c)continue;let l=s[0]-a[0],u=s[1]-a[1],d=s[2]-a[2],f=c[0]-a[0],p=c[1]-a[1],m=c[2]-a[2],h=u*m-d*p,g=d*f-l*m,_=l*p-u*f;if(h*h+g*g+_*_<1e-20)continue;let v=n.buildTriFace(a,s,c);v!==null&&r.push(v)}}return r}function v$(e,t){let n=(t?.angle??45)*JE,r=Math.tan(n);try{let t=f$(e);if(t.length<3)return k(N(M.ROOF_FAILED,`Wire must have at least 3 edges for roof generation`));let n=u$(t);if(!n.ok)return n;let i=n.value;if(i.faces.length===0)return k(N(M.ROOF_FAILED,`Straight skeleton computation produced no faces`));let a=H(),o=_$(i,r,a);for(let[e,n,r]of g$(t)){let i=t[e],s=t[n],c=t[r];if(!i||!s||!c)continue;let l=[i.x,i.y,0],u=[s.x,s.y,0],d=[c.x,c.y,0],f=a.buildTriFace(l,d,u);f!==null&&o.push(f)}if(o.length===0)return k(N(M.ROOF_FAILED,`No valid triangular faces could be built`));try{let e=a.sewAndSolidify(o,1e-6),t=a.fixShape(e);return t!==e&&a.dispose(e),O(kE(t))}catch(e){try{let t=kE(a.sew(o,1e-6));return mE(t)?O(t):k(N(M.ROOF_FAILED,`Sew fallback produced invalid solid`,e))}catch(e){return k(N(M.ROOF_FAILED,`Failed to sew roof faces`,e))}}finally{for(let e of o)a.dispose(e)}}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.ROOF_FAILED,`Roof generation failed: ${t}`,e))}}function y$(e){return[[1,0,0,e[0]],[0,1,0,e[1]],[0,0,1,e[2]],[0,0,0,1]]}function b$(e){let t=e[0];return t!==void 0&&typeof t[0]==`number`}function x$(e,t,n){return{__instanced:!0,source:e,placements:t,grid:n,[Symbol.dispose](){e[Symbol.dispose]()}}}function S$(e){return typeof e==`object`&&!!e&&e.__instanced===!0}function C$(e,t){return x$(e,b$(t)?t.map(y$):t.map(e=>e.map(e=>[...e])))}function w$(e,t){let{cols:n,rows:r,pitchX:i,pitchY:a}=t;if(!Number.isInteger(n)||!Number.isInteger(r)||n<1||r<1)throw RangeError(`instanceGrid: cols and rows must be positive integers, got ${n}x${r}`);let o=[];for(let e=0;e<n;e++)for(let t=0;t<r;t++)o.push(y$([e*i,t*a,0]));return x$(e,o,{cols:n,rows:r,pitchX:i,pitchY:a})}function T$(e){return e.placements.length}function E$(e,t={}){let{source:n,placements:r,grid:i}=e;return r.length===0?k(P(`INSTANCE_EMPTY`,`materialize: instance has no placements`)):t.fuse?zE(n)?i?qP(n,[1,0,0],[0,1,0],i.cols,i.rows,i.pitchX,i.pitchY):D$(n,r,!0):k(P(`MATERIALIZE_NOT_3D`,`materialize({fuse:true}) requires a 3D source shape`)):D$(n,r,!1)}function D$(e,t,n){let r=[];for(let n of t){let t=bk(e,n);if(!t.ok){for(let e of r)e[Symbol.dispose]();return t}r.push(t.value)}let i=n?GA(r,{unsafe:!0}):O(mj(r));for(let e of r)(!i.ok||e!==i.value)&&e[Symbol.dispose]();return i}function O$(e,t){return{geometry:nA(e.source,t),instances:e.placements}}var k$={coincident:3,concentric:4,distance:1,angle:1},A$=[1,0,0,0];function j$(e,t){return[e[0]+t[0],e[1]+t[1],e[2]+t[2]]}function M$(e,t){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function N$(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function P$(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function F$(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function I$(e){let t=Math.hypot(e[0],e[1],e[2])||1;return[e[0]/t,e[1]/t,e[2]/t]}function L$(e){return I$(P$(e,Math.abs(e[0])<.9?[1,0,0]:[0,1,0]))}function R$(e,t){let n=j$(oF(t.rotation,e.origin),t.position);return{type:e.type,origin:n,...e.normal?{normal:oF(t.rotation,e.normal)}:{},...e.direction?{direction:oF(t.rotation,e.direction)}:{}}}function z$(e,t,n){let r=e.normal??[0,0,1];return{position:F$(r,N$(r,M$(e.origin,t.origin))+n),rotation:A$}}function B$(e,t){let n=e.direction??[0,0,1],r=cF(t.direction??[0,0,1],n),i=oF(r,t.origin);return{position:M$(e.origin,i),rotation:r}}function V$(e,t,n){let r=I$(e.normal??[0,0,1]),i=I$(t.normal??[0,0,1]),a=Math.acos(Math.max(-1,Math.min(1,N$(i,r)))),o=P$(i,r);return{position:[0,0,0],rotation:sF(Math.hypot(o[0],o[1],o[2])<1e-9?L$(i):o,a-n)}}function H$(e,t,n){let r=M$(t,e),i=Math.hypot(r[0],r[1],r[2]);return{position:M$(j$(e,F$(i<1e-9?[1,0,0]:F$(r,1/i),n)),t),rotation:A$}}function U$(e,t,n,r){let i=I$(e);return{position:F$(i,N$(i,M$(t,n))-r),rotation:A$}}function W$(e,t,n){let r=I$(e.direction??[0,0,1]),i=j$(e.origin,F$(r,N$(r,M$(t,e.origin))));if(n===0)return{position:M$(i,t),rotation:A$};let a=M$(t,i),o=Math.hypot(a[0],a[1],a[2]);return{position:M$(j$(i,F$(o<1e-9?L$(r):F$(a,1/o),n)),t),rotation:A$}}function G$(e,t,n){let r=I$(t.direction??[0,0,1]),i=M$(t.origin,e),a=M$(i,F$(r,N$(r,i))),o=Math.hypot(a[0],a[1],a[2]);return n===0?{position:F$(a,-1),rotation:A$}:{position:M$(F$(o<1e-9?L$(r):F$(a,1/o),n),a),rotation:A$}}function K$(e,t,n){let r=I$(e.direction??[0,0,1]),i=cF(I$(t.direction??[0,0,1]),r),a=M$(oF(i,t.origin),e.origin),o=M$(a,F$(r,N$(r,a))),s=Math.hypot(o[0],o[1],o[2]);return{position:M$(F$(s<1e-9?L$(r):F$(o,1/s),n),o),rotation:i}}var q$=new Set([`plane-plane`,`plane-point`,`point-plane`,`point-point`,`axis-axis`,`axis-point`,`point-axis`]),J$={angle:`plane`,concentric:`axis`},Y$=new Set([`coincident`,`distance`,`angle`,`concentric`]);function X$(e,t,n){let r=J$[e];return r?t===r&&n===r:q$.has(`${t}-${n}`)}function Z$(e,t,n){switch(`${e.type}-${t.type}`){case`plane-plane`:case`plane-point`:return z$(e,t,n);case`point-plane`:return U$(t.normal??[0,0,1],e.origin,t.origin,n);case`point-point`:return H$(e.origin,t.origin,n);case`axis-axis`:return n===0?B$(e,t):K$(e,t,n);case`axis-point`:return W$(e,t.origin,n);case`point-axis`:return G$(e.origin,t,n);default:return null}}function Q$(e,t,n){switch(e.type){case`concentric`:return B$(t,n);case`angle`:return V$(t,n,(e.value??0)*Math.PI/180);default:{let r=Z$(t,n,e.type===`distance`?e.value??0:0);if(!r)throw Error(`solveMate: unsupported entity pair escaped filter: ${t.type}-${n.type}`);return r}}}function $$(e,t){let n=new Map;for(let t of e)n.set(t,{position:[0,0,0],rotation:A$});let r=[],i=t.filter(e=>Y$.has(e.type)&&e.entityA&&e.entityB),a=new Set;for(let e of i)e.entityB&&a.add(e.entityB.node);let o=new Set;for(let t of e)a.has(t)||o.add(t);for(let e of t)e.type===`fixed`&&e.entityA&&o.add(e.entityA.node);let s=[];for(let e of i){if(!e.entityA||!e.entityB)continue;let t=e.entityA.entity.type,n=e.entityB.entity.type;if(!X$(e.type,t,n)){r.push(`${e.type}(${t}-${n})`);continue}s.push(e)}let c=!0;for(;c&&s.length>0;){c=!1;for(let e=s.length-1;e>=0;e--){let t=s[e];if(!t?.entityA||!t.entityB)continue;let r=t.entityA,i=t.entityB;if(!o.has(r.node)||(s.splice(e,1),c=!0,o.has(i.node)))continue;let a=n.get(r.node)??{position:[0,0,0],rotation:A$},l=R$(r.entity,a);n.set(i.node,Q$(t,l,i.entity)),o.add(i.node)}}for(let e of s)r.push(`${e.type}(unanchored)`);return{transforms:n,dof:r.reduce((e,t)=>e+(k$[t]??k$[t.split(`(`)[0]??``]??0),0),converged:r.length===0,unsupported:r}}function e1(e){if(e.face){let t=EO(e.face);return t?{type:`axis`,origin:t.origin,direction:t.direction}:{type:`plane`,origin:TO(e.face),normal:wO(e.face)}}if(e.edge){if(jk(e.edge)===`LINE`)return{type:`axis`,origin:Mk(e.edge),direction:Fk(e.edge)};let t=Lk(e.edge);return t?{type:`axis`,origin:t.origin,direction:t.direction}:null}return e.point?{type:`point`,origin:e.point}:null}function t1(e,t){let n=e1(e),r=e1(t);return!n||!r?k(P(M.ASSEMBLY_MATE_INVALID,`solveAssembly: could not extract geometry from mate entities`)):O({entityA:{node:e.node,entity:n},entityB:{node:t.node,entity:r}})}function n1(e){switch(e.type){case`fixed`:return O({type:`fixed`,entityA:{node:e.entity.node,entity:{type:`point`,origin:[0,0,0]}}});case`coincident`:{let t=t1(e.entityA,e.entityB);return t.ok?O({type:`coincident`,...t.value}):t}case`distance`:{let t=t1(e.entityA,e.entityB);return t.ok?O({type:`distance`,...t.value,value:e.distance}):t}case`angle`:{let t=t1(e.entityA,e.entityB);return t.ok?O({type:`angle`,...t.value,value:e.angle}):t}case`concentric`:{let t=t1(e.axisA,e.axisB);return t.ok?O({type:`concentric`,...t.value}):t}}}function r1(e,t){let n=e.mates??[];return{...e,mates:[...n,t]}}function i1(e){let t=e.mates;if(!t||t.length===0)return k(P(M.ASSEMBLY_MATE_INVALID,`solveAssembly: no mates defined`));try{let n=[];$P(e,e=>{n.push(e.name)});let r=[];for(let e of t){let t=n1(e);if(!t.ok)return t;r.push(t.value)}let i=$$(n,r);if(!i.converged){let e=i.unsupported.length>0?`Unsupported constraint types: ${i.unsupported.join(`, `)} (${i.dof} DOF unresolved)`:`Assembly constraint solver did not converge`;return k(N(M.ASSEMBLY_NOT_CONVERGED,e))}return O({transforms:i.transforms,dof:i.dof,converged:i.converged})}catch(e){let t=e instanceof Error?e.message:String(e);return k(N(M.ASSEMBLY_SOLVE_FAILED,`Assembly solve failed: ${t}`,e))}}function a1(e,t,n=1e-6){return H().isNull(e.wrapped)?k(P(M.NULL_SHAPE_INPUT,`checkInterference: first shape is a null shape`)):H().isNull(t.wrapped)?k(P(M.NULL_SHAPE_INPUT,`checkInterference: second shape is a null shape`)):JT(()=>{let r=H().distance(e.wrapped,t.wrapped);return O({hasInterference:r.value<=n,minDistance:r.value,pointOnShape1:r.point1,pointOnShape2:r.point2})})}function o1(e,n=1e-6){let r=[],i=e.map(e=>wD(e));return e.forEach((a,o)=>{for(let s=o+1;s<e.length;s++){if(s1(t(i,o),t(i,s),n))continue;let c=j(a1(a,t(e,s),n));c.hasInterference&&r.push({i:o,j:s,result:c})}}),r}function s1(e,t,n){return e.xMax+n<t.xMin||t.xMax+n<e.xMin||e.yMax+n<t.yMin||t.yMax+n<e.yMin||e.zMax+n<t.zMin||t.zMax+n<e.zMin}function c1(e){let t=e.split(/\r?\n/),n=[],r=!1,i;for(let e=0;e<t.length-1;e+=2){let a=t[e],o=t[e+1];if(a===void 0||o===void 0)continue;let s=parseInt(a.trim(),10),c=o.trim();if(!isNaN(s)){if(s===2&&c===`ENTITIES`){r=!0;continue}if(r){if(s===0){if(c===`ENDSEC`||c===`EOF`){i&&n.push(i);break}i&&n.push(i),i={type:c,layer:`0`,data:new Map};continue}i&&(s===8?i.layer=c:i.data.set(s,c))}}}return n}function l1(e,t,n=0){let r=e.get(t);if(r===void 0)return n;let i=parseFloat(r);return isNaN(i)?n:i}function u1(e){let{type:t,data:n}=e,r=H();if(t===`LINE`)return r.makeLineEdge([l1(n,10),l1(n,20),l1(n,30)],[l1(n,11),l1(n,21),l1(n,31)]);if(t===`CIRCLE`)return r.makeCircleEdge([l1(n,10),l1(n,20),l1(n,30)],[0,0,1],l1(n,40));if(t===`ARC`){let e=l1(n,50)*Math.PI/180,t=l1(n,51)*Math.PI/180;return r.makeCircleArc([l1(n,10),l1(n,20),l1(n,30)],[0,0,1],l1(n,40),e,t)}}async function d1(e,t){let n;try{n=await e.text()}catch(e){return k(Do(M.DXF_IMPORT_FAILED,`Failed to read DXF blob`,e))}let r=c1(n),i=t?.layer===void 0?r:r.filter(e=>e.layer===t.layer);if(i.length===0)return O([]);let a=[];try{for(let e of i){let t=u1(e);t!==void 0&&a.push(t)}return a.length===0?O([]):O([EE(H().makeWire(a))])}catch(e){return k(Do(M.DXF_IMPORT_FAILED,`Failed to convert DXF entities to geometry`,e))}finally{for(let e of a)e.delete()}}function f1(e,t,n=1e-6){let r=H(),i=[];for(let[t,n,a]of e){let e=r.buildTriFace(t,n,a);e!==null&&i.push(e)}if(i.length===0)return k(Do(t,`No valid triangular faces could be built`));try{let e=U(r.sewAndSolidify(i,n));for(let e of i)r.dispose(e);return O(e)}catch{try{return O(VE(r.sew(i,n)))}catch(e){return k(Do(t,`Failed to sew triangular faces`,e))}}}function p1(e){let t=e.split(/\s+/),n=parseFloat(t[1]??``),r=parseFloat(t[2]??``),i=parseFloat(t[3]??``);return isNaN(n)||isNaN(r)||isNaN(i)?null:[n,r,i]}function m1(e){return e.split(/\s+/).slice(1).map(e=>parseInt(e.split(`/`)[0]??``,10)).filter(e=>!isNaN(e))}async function h1(e){let t=(await e.text()).split(`
|
|
60
|
+
`),n=[],r=[];for(let e of t){let t=e.trim();if(t.startsWith(`v `)){let e=p1(t);e&&n.push(e)}else if(t.startsWith(`f `)){let e=m1(t);e.length>=3&&r.push(e)}}if(n.length===0||r.length===0)return k(Do(M.OBJ_IMPORT_FAILED,`OBJ file contains no valid geometry`));try{return g1(n,r)}catch(e){let t=e instanceof Error?e.message:String(e);return k(Do(M.OBJ_IMPORT_FAILED,`OBJ import failed: ${t}`,e))}}function g1(e,t){let n=[];for(let r of t)for(let t=1;t<r.length-1;t++){let i=r[0]??0,a=r[t]??0,o=r[t+1]??0,s=i>0?i-1:e.length+i,c=a>0?a-1:e.length+a,l=o>0?o-1:e.length+o,u=e[s],d=e[c],f=e[l];!u||!d||!f||n.push([u,d,f])}return f1(n,M.OBJ_IMPORT_FAILED)}function _1(e,t){let n=-1;for(let t=e.length-22;t>=0;t--)if(e[t]===80&&e[t+1]===75&&e[t+2]===5&&e[t+3]===6){n=t;break}if(n<0)return null;let r=new DataView(e.buffer,e.byteOffset,e.byteLength),i=r.getUint32(n+16,!0),a=i+r.getUint32(n+12,!0),o=i,s=new TextDecoder;for(;o<a&&r.getUint32(o,!0)===33639248;){let n=r.getUint16(o+28,!0),i=r.getUint16(o+30,!0),a=r.getUint16(o+32,!0),c=r.getUint32(o+42,!0);if(s.decode(e.subarray(o+46,o+46+n))===t){if(r.getUint16(c+8,!0)!==0)return null;let t=r.getUint16(c+26,!0),n=r.getUint16(c+28,!0),i=r.getUint32(c+18,!0),a=c+30+t+n;return e.subarray(a,a+i)}o+=46+n+i+a}return null}function v1(e){return e>=97&&e<=122||e>=65&&e<=90||e>=48&&e<=57||e===95}function y1(e){let t={},n=0;for(;n<e.length;){let r=e.indexOf(`="`,n);if(r<0)break;let i=r;for(;i>0&&v1(e.charCodeAt(i-1));)i--;if(i===r){n=r+2;continue}let a=e.slice(i,r),o=r+2,s=e.indexOf(`"`,o);if(s<0)break;t[a]=e.slice(o,s),n=s+1}return t}function b1(e,t){let n=[],r=`<${t} `,i=0;for(;i<e.length;){let t=e.indexOf(r,i);if(t<0)break;let a=e.indexOf(`>`,t);if(a<0)break;n.push(e.slice(t,a+1)),i=a+1}return n}function x1(e,t){let n=e.indexOf(`<${t}`);if(n<0)return null;let r=e.indexOf(`</${t}>`,n);return r<0?null:e.slice(n,r+t.length+3)}function S1(e){let t=e.startsWith(`#`)?e.slice(1):e;return[parseInt(t.slice(0,2),16)/255,parseInt(t.slice(2,4),16)/255,parseInt(t.slice(4,6),16)/255,t.length>=8?parseInt(t.slice(6,8),16)/255:1]}function C1(e){let t=new Map,n=0;for(;n<e.length;){let r=e.indexOf(`<colorgroup`,n);if(r<0)break;let i=e.indexOf(`</colorgroup>`,r);if(i<0)break;let a=e.slice(r,i+13);n=i+13;let o=e.indexOf(`>`,r);if(o<0)continue;let s=y1(e.slice(r,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of b1(a,`color`)){let t=y1(e).color;t!==void 0&&l.push(S1(t))}t.set(c,l)}let r=0;for(;r<e.length;){let n=e.indexOf(`<basematerials`,r);if(n<0)break;let i=e.indexOf(`</basematerials>`,n);if(i<0)break;let a=e.slice(n,i+16);r=i+16;let o=e.indexOf(`>`,n);if(o<0)continue;let s=y1(e.slice(n,o+1)).id;if(s===void 0)continue;let c=parseInt(s,10),l=[];for(let e of b1(a,`base`)){let t=y1(e).displaycolor;t===void 0?l.push([0,0,0,1]):l.push(S1(t))}t.set(c,l)}return t}function w1(e){let t=[],n=[],r=[],i=C1(e);for(let n of b1(e,`vertex`)){let e=y1(n);e.x!==void 0&&e.y!==void 0&&e.z!==void 0&&t.push([parseFloat(e.x),parseFloat(e.y),parseFloat(e.z)])}let a=null,o=null,s=x1(e,`object`);if(s!==null){let e=s.indexOf(`>`);if(e>=0){let t=y1(s.slice(0,e+1));t.pid!==void 0&&(a=parseInt(t.pid,10)),t.pindex!==void 0&&(o=parseInt(t.pindex,10))}}for(let t of b1(e,`triangle`)){let e=y1(t);if(e.v1!==void 0&&e.v2!==void 0&&e.v3!==void 0){n.push([parseInt(e.v1,10),parseInt(e.v2,10),parseInt(e.v3,10)]);let t=null,s=e.pid??(a===null?void 0:String(a)),c=e.p1??(o===null?void 0:String(o));if(s!==void 0&&c!==void 0){let e=parseInt(s,10),n=parseInt(c,10),r=i.get(e);r!==void 0&&n<r.length&&(t=r[n]??null)}r.push(t)}}return{vertices:t,triangles:n,triangleColors:r}}function T1(e){let t=new Map;for(let n of e){if(n===null)continue;let e=n.join(`,`),r=t.get(e);r===void 0?t.set(e,{count:1,color:n}):r.count++}let n=null;for(let e of t.values())(n===null||e.count>n.count)&&(n=e);return n===null?null:n.color}function E1(e){let t=H(),n=e.vertices.map(([e,t,n])=>({x:e,y:t,z:n})),r=e.triangles;try{return O(U(t.buildSolidFromFaces(n,r,1e-6)))}catch{let t=[];for(let[n,r,i]of e.triangles){let a=e.vertices[n],o=e.vertices[r],s=e.vertices[i];!a||!o||!s||t.push([a,o,s])}return f1(t,M.THREEMF_IMPORT_FAILED)}}async function D1(e){try{let t=await e.arrayBuffer(),n=_1(new Uint8Array(t),`3D/3dmodel.model`);if(!n)return k(Do(M.THREEMF_IMPORT_FAILED,`3MF archive does not contain 3D/3dmodel.model (or uses unsupported compression)`));let r=w1(new TextDecoder().decode(n));if(r.vertices.length===0||r.triangles.length===0)return k(Do(M.THREEMF_IMPORT_FAILED,`3MF model contains no valid geometry`));let i=E1(r);if(i.ok){let e=T1(r.triangleColors);e!==null&&nk(i.value,e)}return i}catch(e){let t=e instanceof Error?e.message:String(e);return k(Do(M.THREEMF_IMPORT_FAILED,`3MF import failed: ${t}`,e))}}async function O1(e){try{let t=await e.arrayBuffer();return O(U(H().importGLB(t)))}catch(e){let t=e instanceof Error?e.message:String(e);return k(Do(M.GLB_IMPORT_FAILED,`Failed to import GLB: ${t}`,e))}}function $(e){return`__wrapped`in e?e.val:e}function k1(e){return $(e)}function A1(e,t){return fk($(e),t)}function j1(e,t,n){let r=n?.at;return pk($(e),t,r,n?.axis)}function M1(e,t){let n=t?.at;return mk($(e),t?.normal??[1,0,0],n)}function N1(e,t,n){return hk($(e),t,n?.center)}function P1(e){return wk($(e))}function F1(e,t){return bk($(e),t)}function I1(e,t){return Ck($(e),t)}function L1(e,t){return Sk($(e),t)}function R1(e,t,n){return VA($(e),$(t),{...n,unsafe:!0})}function z1(e,t,n){return HA($(e),$(t),{...n,unsafe:!0})}function B1(e,t){return GA(e.map(e=>$(e)),{...t,unsafe:!0})}function V1(e,t,n){return KA($(e),t.map(e=>$(e)),{...n,unsafe:!0})}function H1(e,t,n){return UA($(e),$(t),{...n,unsafe:!0})}function U1(e,t,n){return JA($(e),t,n)}function W1(e,t,n){return ej($(e),t,n)}function G1(e,t){return tj($(e),t)}function K1(e,t,n){return nj($(e),t,n)}function q1(e,t){if(e!==void 0)return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(qI()).findAll(t)}function J1(e,t){return Array.isArray(e)?e:typeof e==`object`&&`findAll`in e?e.findAll(t):e(XI()).findAll(t)}function Y1(e){return typeof e==`object`&&!Array.isArray(e)&&typeof e!=`function`?{mode:`distAngle`,distance:e.distance,angle:e.angle}:typeof e==`function`?{mode:`standard`,distance:t=>{let n=e(t);return n===null?null:typeof n==`object`&&!Array.isArray(n)?n.distance:n}}:{mode:`standard`,distance:e}}function X1(e,t,n){let r=$(e),i,a;return n===void 0?(i=void 0,a=t):(i=q1(t,r),a=n),eM(r,i,a)}function Z1(e,t,n){let r=$(e),i,a;n===void 0?(i=void 0,a=t):(i=q1(t,r),a=n);let o=Y1(a);return o.mode===`distAngle`?xj(r,[...i??uD(r)],o.distance,o.angle):tM(r,i,o.distance)}function Q1(e,t,n,r){let i=$(e);return nM(i,J1(t,i),n,r?.tolerance)}function $1(e,t,n){return rM($(e),t,n?.tolerance)}function e0(e,t){return Qj($(e),t)}function t0(e,t,n){let r=$(e);return aM(r,J1(t,r),n.pullDirection,n.neutralPlane,n.angle)}function n0(e){return dM($(e))}function r0(e){return Ak($(e))}function i0(e,t){return nA($(e),t)}function a0(e,t){return rA($(e),t)}function o0(e){return OD($(e))}function s0(e){return Tk($(e))}function c0(e){return mO(e)}function l0(e){return sM($(e))}function u0(e){return Dk($(e))}function d0(e,t){return OM($(e),typeof t==`number`?[0,0,t]:t)}function f0(e,t){let n=t?.at??[0,0,0];return kM($(e),n,t?.axis??[0,0,1],t?.angle??2*Math.PI)}function p0(e,t){return jM(e.map(e=>$(e)),t)}function m0(e,n){if(n===void 0){let t=dD(e);if(t.length===0)return k(P(M.COMPOUND_NO_FACES,`compoundOps: shape has no faces`));let n=vA(t),r=TO(n)[2];for(let e=1;e<t.length;e++){let i=_A(t,e),a=TO(i)[2];a>r&&(n=i,r=a)}return O(n)}if(typeof n==`function`){let r=n(XI()).findAll(e);return r.length===0?k(Oo(M.COMPOUND_FACE_NOT_FOUND,`compoundOps: face finder matched no faces`)):O(t(r,0))}return O(n)}function h0(e){return`sketchOnPlane`in e&&typeof e.sketchOnPlane==`function`?{wire:e.sketchOnPlane(`XY`).wire,owned:!0}:{wire:e,owned:!1}}function g0(e,t){let n=$(e),{at:r,radius:i,axis:a}=t,o=a??[0,0,1];if(i<=0)return k(P(`DRILL_INVALID_RADIUS`,`Drill radius must be positive`));if(GD(o))return k(P(`DRILL_ZERO_AXIS`,`Drill axis cannot be zero`));let s=UD(o),c=r.length===2?[r[0],r[1],0]:[r[0],r[1],r[2]],l;if(t.depth!==void 0)l=sj(i,t.depth,c,s);else{let e=wD(n),t=[[e.xMin,e.yMin,e.zMin],[e.xMax,e.yMin,e.zMin],[e.xMin,e.yMax,e.zMin],[e.xMax,e.yMax,e.zMin],[e.xMin,e.yMin,e.zMax],[e.xMax,e.yMin,e.zMax],[e.xMin,e.yMax,e.zMax],[e.xMax,e.yMax,e.zMax]],r=1/0,a=-1/0;for(let e of t){let t=(e[0]-c[0])*s[0]+(e[1]-c[1])*s[1]+(e[2]-c[2])*s[2];t<r&&(r=t),t>a&&(a=t)}--r,a+=1,l=sj(i,a-r,[c[0]+s[0]*r,c[1]+s[1]*r,c[2]+s[2]*r],s)}try{return HA(n,l,{unsafe:!0})}finally{l[Symbol.dispose]()}}function _0(e,t){try{var n=IT();let r=$(e),{profile:i,depth:a}=t;if(a<=0)return k(P(`POCKET_INVALID_DEPTH`,`Pocket depth must be positive`));let o=m0(r,t.face);if(A(o))return o;let s=o.value,c=wO(s),l=TO(s),u=n.u(new XT),{wire:d,owned:f}=h0(i);f&&u.register(d);let p=NA(d);if(A(p))return p;u.register(p.value);let m=OM(u.register(fk(p.value,l)),ID(UD(c),-a));return A(m)?m:(u.register(m.value),HA(r,m.value,{unsafe:!0}))}catch(e){n.e=e}finally{n.d()}}function v0(e,t){try{var n=IT();let r=$(e),{profile:i,height:a}=t;if(a<=0)return k(P(`BOSS_INVALID_HEIGHT`,`Boss height must be positive`));let o=m0(r,t.face);if(A(o))return o;let s=o.value,c=wO(s),l=TO(s),u=n.u(new XT),{wire:d,owned:f}=h0(i);f&&u.register(d);let p=NA(d);if(A(p))return p;u.register(p.value);let m=OM(u.register(fk(p.value,l)),ID(UD(c),a));return A(m)?m:(u.register(m.value),VA(r,m.value,{unsafe:!0}))}catch(e){n.e=e}finally{n.d()}}function y0(e,t){try{var n=IT();let r=$(e),i=t?.normal??[1,0,0],a=t?.at;return GD(i)?k(P(`MIRROR_ZERO_NORMAL`,`Mirror plane normal cannot be zero`)):VA(r,n.u(mk(r,i,a)),{unsafe:!0})}catch(e){n.e=e}finally{n.d()}}function b0(e,t){let n=$(e),{xDir:r,xCount:i,xSpacing:a,yDir:o,yCount:s,ySpacing:c}=t;if(i<1||s<1)return k(P(`PATTERN_INVALID_COUNT`,`Pattern counts must be at least 1`));if(GD(r))return k(P(`PATTERN_ZERO_DIRECTION`,`X direction cannot be zero`));if(GD(o))return k(P(`PATTERN_ZERO_DIRECTION`,`Y direction cannot be zero`));if(i===1&&s===1)return O(n);let l=UD(r),u=UD(o),d=[n],f=[];for(let e=0;e<i;e++)for(let t=0;t<s;t++){if(e===0&&t===0)continue;let r=fk(n,[l[0]*a*e+u[0]*c*t,l[1]*a*e+u[1]*c*t,l[2]*a*e+u[2]*c*t]);d.push(r),f.push(r)}try{return GA(d,{unsafe:!0})}finally{for(let e of f)e[Symbol.dispose]()}}var x0=class extends Error{code;kind;suggestion;metadata;constructor(e){let t=e.suggestion?`${e.message}\nSuggestion: ${e.suggestion}`:e.message;super(t),this.name=`BrepError`,this.code=e.code,this.kind=e.kind,e.suggestion&&(this.suggestion=e.suggestion),e.metadata&&(this.metadata=e.metadata)}};function S0(e){if(A(e))throw new x0(e.error);return e.value}function C0(e){return e}function w0(e){return e}function T0(e){return e}function E0(e){return e}function D0(e){return{val:e,__wrapped:!0,translate:t=>L0(A1(e,t)),rotate:(t,n)=>L0(j1(e,t,n)),mirror:t=>L0(M1(e,t)),scale:(t,n)=>L0(N1(e,t,n)),applyMatrix:t=>L0(S0(F1(e,t))),moveX:t=>L0(A1(e,[t,0,0])),moveY:t=>L0(A1(e,[0,t,0])),moveZ:t=>L0(A1(e,[0,0,t])),rotateX:t=>L0(j1(e,t,{axis:[1,0,0]})),rotateY:t=>L0(j1(e,t,{axis:[0,1,0]})),rotateZ:t=>L0(j1(e,t,{axis:[0,0,1]})),bounds:()=>wD(e),describe:()=>o0(e),clone:()=>L0(S0(P1(e))),mesh:t=>i0(e,t),meshEdges:t=>a0(e,t),isValid:()=>l0(e),isEmpty:()=>u0(e),heal:()=>L0(S0(n0(e))),simplify:()=>L0(S0(r0(e))),toBREP:()=>S0(s0(e)),apply:t=>L0(t(e)),applyResult:t=>L0(S0(t(e))),done:()=>e}}function O0(e){return{fuse:(t,n)=>R0(S0(R1(e,$(t),{...n,unsafe:!0}))),cut:(t,n)=>R0(S0(z1(e,$(t),{...n,unsafe:!0}))),intersect:(t,n)=>R0(S0(H1(e,$(t),{...n,unsafe:!0}))),fuseAll:(t,n)=>R0(E0(S0(GA([e,...t.map($)],{...n,unsafe:!0})))),cutAll:(t,n)=>R0(E0(S0(KA(e,t,{...n,unsafe:!0})))),section:(t,n)=>L0(S0(U1(e,t,n))),split:t=>L0(S0(G1(e,t))),slice:(t,n)=>S0(K1(e,t,n))}}function k0(e){return{fillet(...t){return t.length===1?R0(E0(S0(X1(C0(e),t[0])))):R0(E0(S0(X1(C0(e),t[0],t[1]))))},chamfer(...t){return t.length===1?R0(E0(S0(Z1(C0(e),t[0])))):R0(E0(S0(Z1(C0(e),t[0],t[1]))))},shell:(t,n,r)=>R0(E0(S0(Q1(C0(e),t,n,r)))),offset:(t,n)=>R0(E0(S0($1(C0(e),t,n)))),draft:(t,n)=>R0(E0(S0(t0(C0(e),t,n))))}}function A0(e){return{drill:t=>R0(S0(g0(e,t))),pocket:t=>R0(S0(_0(e,t))),boss:t=>R0(S0(v0(e,t))),mirrorJoin:t=>R0(S0(y0(e,t))),rectangularPattern:t=>R0(S0(b0(e,t)))}}function j0(e){return{volume:()=>S0(VM(e)),area:()=>S0(HM(e)),volumeProps:()=>S0(RM(e)),surfaceProps:()=>S0(zM(e))}}function M0(e){return{edges:()=>uD(e),faces:()=>dD(e),wires:()=>fD(e),vertices:()=>pD(e)}}function N0(e){return{linearPattern:(t,n,r)=>R0(E0(S0(GP(e,t,n,r)))),circularPattern:(t,n,r)=>R0(E0(S0(KP(e,t,n,r))))}}function P0(e){return{...D0(e),...O0(e),...k0(e),...A0(e),...j0(e),...M0(e),...N0(e)}}function F0(e){return{...D0(e),length:()=>Ik(e),startPoint:()=>Mk(e),endPoint:()=>Nk(e),pointAt:t=>Pk(e,t),tangentAt:t=>Fk(e,t),isClosed:()=>Rk(e),sweep(t,n){if(!PE(e))throw Error(`sweep requires a Wire`);let r=S0(bM(T0(e),$(t),n));return R0(Array.isArray(r)?r[0]:r)}}}function I0(e){return{...D0(e),area:()=>S0(HM(e)),normalAt:t=>wO(e,t),center:()=>TO(e),surfaceType:()=>S0(gO(e)),outerWire:()=>OO(e),innerWires:()=>AO(e),extrude:t=>R0(S0(d0(w0(e),t))),revolve:t=>R0(S0(f0(w0(e),t)))}}function L0(e){return zE(e)?P0(e):FE(e)?I0(e):NE(e)||PE(e)?F0(e):D0(e)}function R0(e){return P0(e)}function z0(e){if(e&&typeof e==`object`&&`face`in e&&typeof e.face==`function`&&`_defaultOrigin`in e)return I0(e.face());if(e&&typeof e==`object`&&`wrapped`in e)return FE(e)?I0(e):zE(e)?P0(e):NE(e)||PE(e)?F0(e):D0(e);throw Error(`shape() requires a Sketch or branded shape type`)}var B0=.25,V0=e=>Math.tan(e)-e;function H0(e,t,n,r){let i=e/Math.cos(t),a=n+r*(Math.tan(t)-t);return[i*Math.cos(a),i*Math.sin(a),0]}function U0(e,t,n,r,i){let a=[];for(let o=0;o<=r;o++){let s=.5-.5*Math.cos(o/r*Math.PI);a.push(H0(e,s*t,n,i))}return a}function W0(e){return Math.max(16,Math.round(8*Math.sqrt(e)))}function G0(e,t,n,r,i,a,o){let s=e*t/2,c=s*Math.cos(n),l=t*(1+r),u=t*(1+i-r),d=o?s-t*(1-r):s+l,f=o?s+t*(1+i+r):s-u,p=a/s,m=(Math.PI/2+2*r*Math.tan(n))/e+(o?p:-p),h=o?f:d;return{rPitch:s,rb:c,rTip:d,rRoot:f,alphaPitch:n,halfToothAngle:m,alphaTip:h<=c?0:Math.acos(Math.min(1,c/h)),toothPitch:2*Math.PI/e,isInternal:o}}function K0(e,t,n){if(t===0)return O(e);let r=V0(e)+2*t*Math.tan(e)/n,i,a;if(r>V0(e)?(i=e,a=Math.PI/2-1e-6):(i=1e-4,a=e),r>V0(a)||r<V0(i))return k(P(`GEAR_PA_OUT_OF_RANGE`,`working pressure angle out of range — target inv(αw)=${r.toFixed(4)} not in [${V0(i).toFixed(4)}, ${V0(a).toFixed(4)}]`,void 0,{target:r,invLo:V0(i),invHi:V0(a)}));for(let e=0;e<50;e++){let e=.5*(i+a);V0(e)<r?i=e:a=e}return O(.5*(i+a))}function q0(e,t,n,r,i){return K0(e,t+n,r+i)}function J0(e,t,n,r,i){return K0(e,n-t,i-r)}function Y0(e,t,n,r,i){return(e+t)*n*Math.cos(r)/(2*Math.cos(i))}function X0(e,t,n,r){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(n))return k(P(`GEAR_NON_INTEGER_TEETH`,`tooth counts and planet count must be integers`));if(e<4||t<4||n<2)return k(P(`GEAR_TEETH_TOO_FEW`,`zs ≥ 4, zp ≥ 4, N ≥ 2 required`));if((2*e+2*t)%n!=0)return k(P(`GEAR_ASSEMBLY`,`(2·zs + 2·zp) must be divisible by N — got ${2*e+2*t} mod ${n} = ${(2*e+2*t)%n}`));let i=t+2+2*r,a=(e+t)*Math.sin(Math.PI/n);return a<=i?k(P(`GEAR_PLANET_COLLISION`,`planet tips would collide: (zs+zp)·sin(π/N) = ${a.toFixed(3)} ≤ planet tip = ${i.toFixed(3)}`)):O(void 0)}function Z0(e,t,n,r,i,a,o,s){return(Math.sqrt(Math.max(0,e*e-t*t))+Math.sqrt(Math.max(0,n*n-r*r))-i*Math.sin(s))/(Math.PI*a*Math.cos(o))}function Q0(e,t,n,r,i,a,o,s){return(Math.sqrt(Math.max(0,e*e-t*t))-Math.sqrt(Math.max(0,n*n-r*r))+i*Math.sin(s))/(Math.PI*a*Math.cos(o))}function $0(e,t){return 1-e*Math.sin(t)*Math.sin(t)/2}function e2(e,t,n){return Math.max(0,$0(e,t)-n)}function t2(e){return e<8?.2:.485-2.88/e}function n2(e,t,n,r){let i=e*1e3,a=t2(r);return a<=0||n<=0||t<=0?1/0:2*i/(r*t*t*n*a)}function r2(e,t,n=!1){let r=(1.4+6.5/e)*(20/(t*180/Math.PI))**.15;return n?r*.85:r}function i2(e,t,n,r,i,a=!1){return n2(e,t,n,r)*r2(r,i,a)}function a2(e){return e/2}function o2(e,t){return e+2*t}function s2(e){return e%2==0?Math.PI/e:0}function c2(e,t,n){return e*(1+t/n)+s2(n)}function l2(e={}){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=(e.pressureAngleDeg??20)*Math.PI/180,o=e.sunShift??0,s=e.planetShift??0,c=X0(n,r,i,s);if(A(c))return c;let l=q0(a,o,s,n,r);if(A(l))return l;let u=Y0(n,r,t,a,l.value),d=[];for(let e=0;e<i;e++){let t=e*2*Math.PI/i,a=c2(t,n,r);d.push({rotationDeg:a*180/Math.PI,position:[u*Math.cos(t),u*Math.sin(t),0]})}return O(d)}function u2(e,t,n,r,i){let a=t*e.toothPitch,o=(t+1)%n*e.toothPitch,s=V0(e.alphaPitch),c=a-e.halfToothAngle-s,l=a+e.halfToothAngle+s,u=U0(e.rb,e.alphaTip,c,r,1),d=U0(e.rb,e.alphaTip,l,r,-1).reverse(),f=vA(u),p=yA(u),m=vA(d),h=yA(d),g=[],_=e=>{i.register(e),g.push(e)},v=e.isInternal?e.rb<e.rRoot:e.rb>e.rRoot;v&&_(SA([e.rRoot*Math.cos(c),e.rRoot*Math.sin(c),0],f));let y=e.rPitch*1e-5,b=kA(u,{tolerance:y});if(A(b))return b;_(b.value),_(EA(p,[e.rTip*Math.cos(a),e.rTip*Math.sin(a),0],m));let x=kA(d,{tolerance:y});if(A(x))return x;_(x.value),v&&_(SA(h,[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]));let S=o-e.halfToothAngle-s,C=.5*(l+S);return S<l&&(C+=Math.PI),_(EA(v?[e.rRoot*Math.cos(l),e.rRoot*Math.sin(l),0]:h,[e.rRoot*Math.cos(C),e.rRoot*Math.sin(C),0],v?[e.rRoot*Math.cos(S),e.rRoot*Math.sin(S),0]:[e.rb*Math.cos(S),e.rb*Math.sin(S),0])),O(g)}function d2(e){return p2(e,!1)}function f2(e){return p2(e,!0)}function p2(e,t){try{var n=IT();let{teeth:r,moduleSize:i,pressureAngle:a,shift:o,clearance:s,flankThinning:c,samples:l=W0(i)}=e;if(r<4)return k(P(`GEAR_TEETH_TOO_FEW`,`gear needs ≥ 4 teeth, got ${r}`));if(i<=0)return k(P(`GEAR_MODULE_NONPOSITIVE`,`module must be > 0, got ${i}`));let u=G0(r,i,a,o,s,c,t),d=n.u(new XT),f=[];for(let e=0;e<r;e++){let t=u2(u,e,r,l,d);if(A(t))return t;f.push(...t.value)}let p=MA(f);return A(p)?p:O(p.value)}catch(e){n.e=e}finally{n.d()}}function m2(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=B0,flankThinning:s=0,bore:c=0,samples:l}=e;if(r<=0)return k(P(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return k(P(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=G0(t,n,u,a,o,s,!1);if(c>0&&c>=2*d.rRoot)return k(P(`GEAR_BORE_TOO_LARGE`,`bore diameter ${c.toFixed(2)} ≥ root diameter ${(2*d.rRoot).toFixed(2)} — would erase the gear teeth`));let f=d2({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(f))return f;let p=g2(t,u,a);return x2(f.value,r,c,d,p)}function h2(e){let{teeth:t,moduleSize:n,thickness:r,pressureAngleDeg:i=20,shift:a=0,clearance:o=B0,flankThinning:s=0,ringWallThickness:c=2*e.moduleSize,samples:l}=e;if(r<=0)return k(P(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));if(c<=0)return k(P(`GEAR_WALL_NONPOSITIVE`,`ringWallThickness must be > 0`));if(l!==void 0&&(!Number.isInteger(l)||l<1))return k(P(`GEAR_SAMPLES_INVALID`,`samples must be a positive integer; got ${String(l)}`));let u=i*Math.PI/180,d=f2({teeth:t,moduleSize:n,pressureAngle:u,shift:a,clearance:o,flankThinning:s,...l===void 0?{}:{samples:l}});if(A(d))return d;let f=G0(t,n,u,a,o,s,!0),p=b2(f.rPitch+c);return A(p)?p:C2(p.value,d.value,r,f,[])}function g2(e,t,n){let r=e2(e,t,n);return r<=0?[]:[{code:`UNDERCUT_RISK`,severity:`warning`,message:`gear is undercut: increase shift by ${r.toFixed(3)} to avoid (z=${e})`,context:{deficit:r,teeth:e}}]}function _2(e){let t=y2(e);if(A(t))return t;let n=t.value,r=v2(n);if(A(r))return r;let{sun:i,planet:a,ring:o}=r.value,s=D2(n,i,a,o),c=T2(a.solid,n);a.solid.delete();let l=E2(o.solid,n.zr),u=O2(n,s);return O({sun:i.solid,planets:c,ring:l,ringTeeth:n.zr,workingPressureAngle:n.alphaW_sp,centerDistance:n.centerDistance,contactRatio:{sunPlanet:s.crSunPlanet,planetRing:s.crPlanetRing},undercutDeficit:{sun:s.undercutSun,planet:s.undercutPlanet},...s.lewisStress?{lewisStress:s.lewisStress}:{},...s.stressConcentrationFactor?{stressConcentrationFactor:s.stressConcentrationFactor}:{},diagnostics:u})}function v2(e){let t=e.samples===void 0?{}:{samples:e.samples},n={moduleSize:e.moduleSize,thickness:e.thickness,pressureAngleDeg:e.pressureAngleDeg,clearance:e.clearance,flankThinning:e.bHalf,...t},r=m2({...n,teeth:e.sunTeeth,shift:e.sunShift,bore:e.sunBore});if(A(r))return r;let i=m2({...n,teeth:e.planetTeeth,shift:e.planetShift,bore:e.planetBore});if(A(i))return r.value.solid.delete(),i;let a=h2({...n,teeth:e.zr,shift:e.ringShift,ringWallThickness:e.ringWallThickness});return A(a)?(r.value.solid.delete(),i.value.solid.delete(),a):O({sun:r.value,planet:i.value,ring:a.value})}function y2(e){let t=e.moduleSize??3,n=e.sunTeeth??15,r=e.planetTeeth??12,i=e.numPlanets??3,a=e.pressureAngleDeg??20,o=a*Math.PI/180,s=e.sunShift??0,c=e.planetShift??0,l=e.ringShift??0;if(e.thickness<=0)return k(P(`GEAR_THICKNESS_NONPOSITIVE`,`thickness must be > 0`));let u=X0(n,r,i,c);if(A(u))return u;let d=o2(n,r),f=q0(o,s,c,n,r);if(A(f))return f;let p=J0(o,c,l,r,d);if(A(p))return p;let m=Y0(n,r,t,o,f.value);return O({moduleSize:t,sunTeeth:n,planetTeeth:r,numPlanets:i,pressureAngleDeg:a,alpha:o,alphaW_sp:f.value,alphaW_pr:p.value,clearance:e.clearance??.25,bHalf:a2(e.backlash??0),sunShift:s,planetShift:c,ringShift:l,ringWallThickness:e.ringWallThickness??2*t,thickness:e.thickness,sunBore:e.sunBore??0,planetBore:e.planetBore??0,...e.appliedTorque===void 0?{}:{appliedTorque:e.appliedTorque},...e.samples===void 0?{}:{samples:e.samples},zr:d,centerDistance:m})}function b2(e){try{var t=IT();let n=MA([t.u(new XT).register(CA(e,[0,0,0],[0,0,1]))]);return A(n)?n:O(n.value)}catch(e){t.e=e}finally{t.d()}}function x2(e,t,n,r,i){try{var a=IT();let o=a.u(new XT);o.register(e);let s=NA(e);if(A(s))return s;o.register(s.value);let c=OM(s.value,[0,0,t]);if(A(c))return c;if(n<=0)return O(w2(c.value,r,i));let l=a.u(new XT);l.register(c.value);let u=S2(n/2);if(A(u))return u;l.register(u.value);let d=OM(u.value,[0,0,t+1]);if(A(d))return d;l.register(d.value);let f=l.register(fk(d.value,[0,0,-.5])),p=HA(c.value,f);return A(p)?p:O(w2(p.value,r,i))}catch(e){a.e=e}finally{a.d()}}function S2(e){let t=b2(e);return A(t)?t:NA(t.value)}function C2(e,t,n,r,i){let a=NA(e,[t]);if(A(a))return a;let o=OM(a.value,[0,0,n]);return A(o)?o:O(w2(o.value,r,i))}function w2(e,t,n=[]){return{solid:e,diagnostics:n,pitchDiameter:2*t.rPitch,baseDiameter:2*t.rb,tipDiameter:2*t.rTip,rootDiameter:2*t.rRoot}}function T2(e,t){let n=[];try{for(let r=0;r<t.numPlanets;r++){let i=r*2*Math.PI/t.numPlanets,a=pk(e,c2(i,t.sunTeeth,t.planetTeeth)*180/Math.PI);try{let e=[t.centerDistance*Math.cos(i),t.centerDistance*Math.sin(i),0];n.push(fk(a,e))}finally{a.delete()}}return n}catch(e){for(let e of n)e.delete();throw e}}function E2(e,t){let n=s2(t);if(n===0)return e;let r=pk(e,n*180/Math.PI);return e.delete(),r}function D2(e,t,n,r){let i={crSunPlanet:Z0(t.tipDiameter/2,t.baseDiameter/2,n.tipDiameter/2,n.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_sp),crPlanetRing:Q0(n.tipDiameter/2,n.baseDiameter/2,r.tipDiameter/2,r.baseDiameter/2,e.centerDistance,e.moduleSize,e.alpha,e.alphaW_pr),undercutSun:e2(e.sunTeeth,e.alpha,e.sunShift),undercutPlanet:e2(e.planetTeeth,e.alpha,e.planetShift)};if(e.appliedTorque!==void 0){let t=e.appliedTorque;i.lewisStress={sun:i2(t,e.moduleSize,e.thickness,e.sunTeeth,e.alpha),planet:i2(t*e.planetTeeth/e.sunTeeth,e.moduleSize,e.thickness,e.planetTeeth,e.alpha),ring:i2(t*e.zr/e.sunTeeth,e.moduleSize,e.thickness,e.zr,e.alpha,!0)},i.stressConcentrationFactor={sun:r2(e.sunTeeth,e.alpha),planet:r2(e.planetTeeth,e.alpha),ring:r2(e.zr,e.alpha,!0)}}return i}function O2(e,t){let n=[];t.crSunPlanet<1.2&&n.push({code:`CONTACT_RATIO_LOW_SUN_PLANET`,severity:`warning`,message:`sun-planet contact ratio ${t.crSunPlanet.toFixed(2)} is below 1.2 — may run unevenly`,context:{value:t.crSunPlanet}}),t.crPlanetRing<1.2&&n.push({code:`CONTACT_RATIO_LOW_PLANET_RING`,severity:`warning`,message:`planet-ring contact ratio ${t.crPlanetRing.toFixed(2)} is below 1.2 — may run unevenly`,context:{value:t.crPlanetRing}}),t.undercutSun>0&&n.push({code:`UNDERCUT_RISK_SUN`,severity:`warning`,message:`sun gear is undercut: increase sunShift by ${t.undercutSun.toFixed(3)} to avoid`,context:{deficit:t.undercutSun,sunTeeth:e.sunTeeth}}),t.undercutPlanet>0&&n.push({code:`UNDERCUT_RISK_PLANET`,severity:`warning`,message:`planet gear is undercut: increase planetShift by ${t.undercutPlanet.toFixed(3)} to avoid`,context:{deficit:t.undercutPlanet,planetTeeth:e.planetTeeth}});let r=Math.abs(e.sunShift)+Math.abs(e.planetShift)+Math.abs(e.ringShift);e.appliedTorque!==void 0&&r>.05&&n.push({code:`LEWIS_Y_SHIFT_UNCORRECTED`,severity:`info`,message:`Lewis stress uses unshifted Y(z) and K_f approximations; expect ±5% per 0.1 of profile shift`});let i=e.ringShift-(e.sunShift+2*e.planetShift);return Math.abs(i)>1e-6&&n.push({code:`PLANETARY_SHIFT_KINEMATIC_MISMATCH`,severity:`warning`,message:`ringShift should equal sunShift + 2·planetShift for both meshes to share working PA; off by ${i.toFixed(3)}`,context:{kinematicError:i,sunShift:e.sunShift,planetShift:e.planetShift,ringShift:e.ringShift}}),n}var k2=IX({addHoles:()=>VP,bezier:()=>OP,box:()=>hP,bsplineApprox:()=>DP,circle:()=>SP,compound:()=>LP,cone:()=>vP,cylinder:()=>gP,ellipse:()=>CP,ellipseArc:()=>EP,ellipsoid:()=>bP,face:()=>MP,fill:()=>PA,filledFace:()=>NP,helix:()=>wP,line:()=>xP,offsetFace:()=>zP,polygon:()=>FP,polyhedron:()=>YQ,sewShells:()=>BP,solid:()=>RP,sphere:()=>_P,subFace:()=>PP,tangentArc:()=>kP,threePointArc:()=>TP,torus:()=>yP,vertex:()=>IP,wire:()=>AP,wireLoop:()=>jP}),A2=IX({checkBoolean:()=>Fj,convexHull:()=>WQ,cut:()=>z1,cutAll:()=>KA,cutAllBisect:()=>Ej,fuse:()=>R1,fuseAll:()=>GA,fuseAllBisect:()=>Aj,hull:()=>UQ,intersect:()=>H1,minkowski:()=>JQ,section:()=>U1,sectionToFace:()=>W1,slice:()=>K1,split:()=>G1}),j2=IX({chamfer:()=>Z1,draft:()=>t0,fillet:()=>X1,heal:()=>n0,offset:()=>$1,shell:()=>Q1,simplify:()=>r0,thicken:()=>e0,variableFillet:()=>oM}),M2=IX({applyMatrix:()=>F1,clone:()=>P1,composeTransforms:()=>xk,mirror:()=>M1,rotate:()=>j1,scale:()=>N1,transformCopy:()=>I1,translate:()=>A1}),N2=IX({checkAllInterferences:()=>o1,checkInterference:()=>a1,createDistanceQuery:()=>KM,measureArea:()=>HM,measureCurvatureAt:()=>qM,measureCurvatureAtMid:()=>JM,measureDistance:()=>WM,measureDistanceProps:()=>GM,measureLength:()=>UM,measureLinearProps:()=>BM,measureSurfaceProps:()=>zM,measureVolume:()=>VM,measureVolumeProps:()=>RM}),P2=IX({blueprintToDXF:()=>wY,exportAssemblySTEP:()=>WP,exportDXF:()=>CY,exportGlb:()=>uY,exportGltf:()=>lY,exportIGES:()=>lA,exportOBJ:()=>$J,exportSTEP:()=>sA,exportSTEPConfigured:()=>sX,exportSTL:()=>cA,exportThreeMF:()=>UY,importDXF:()=>d1,importGLB:()=>O1,importIGES:()=>uX,importOBJ:()=>h1,importSTEP:()=>cX,importSTL:()=>lX,importSVG:()=>oX,importSVGPathD:()=>aX,importThreeMF:()=>D1}),F2=IX({cornerFinder:()=>CR,edgeFinder:()=>qI,faceFinder:()=>XI,getSingleFace:()=>$I,vertexFinder:()=>GX,wireFinder:()=>QI}),I2=IX({complexExtrude:()=>SM,extrude:()=>d0,guidedSweep:()=>DM,loft:()=>p0,multiSectionSweep:()=>EM,revolve:()=>f0,roof:()=>v$,supportExtrude:()=>xM,surfaceFromGrid:()=>RQ,surfaceFromImage:()=>VQ,sweep:()=>bM,twistExtrude:()=>CM}),L2=IX({circularPattern:()=>KP,linearPattern:()=>GP}),R2=14695981039346656037n,z2=1099511628211n,B2=18446744073709551615n;function V2(){return R2}function H2(e,t){return(e^BigInt(t&255))*z2&B2}function U2(e,t){let n=e;for(let e=0;e<t.length;e++)n=H2(n,t[e]??0);return n}var W2=new TextEncoder;function G2(e,t){return U2(e,W2.encode(t))}var K2=new ArrayBuffer(8),q2=new DataView(K2),J2=new Uint8Array(K2);function Y2(e,t){return q2.setFloat64(0,Object.is(t,-0)?0:t),U2(e,J2)}function X2(e,t){let n=e,r=t&B2;for(let e=0;e<8;e++)n=H2(n,Number(r&255n)),r>>=8n;return n}function Z2(e,t){let n=e,r=t|0;for(let e=0;e<4;e++)n=H2(n,r&255),r>>>=8;return n}function Q2(e,t){return H2(e,+!!t)}function $2(e){return(e&B2).toString(16).padStart(16,`0`)}var e4=new Set;function t4(e){return G2(V2(),e)}function n4(e){return{kind:`NumLit`,value:e,structuralHash:Y2(t4(`NumLit`),e),freeParams:e4}}function r4(e){let t=t4(`Vec3Lit`);for(let n of e)t=Y2(t,n);return{kind:`Vec3Lit`,value:e,structuralHash:t,freeParams:e4}}function i4(e){let t=t4(`Vec2Lit`);for(let n of e)t=Y2(t,n);return{kind:`Vec2Lit`,value:e,structuralHash:t,freeParams:e4}}function a4(e){return{kind:`Param`,name:e,structuralHash:G2(t4(`Param`),e),freeParams:new Set([e])}}function o4(e,t,n){let r=G2(t4(`BinOp`),e);return r=X2(r,t.structuralHash),r=X2(r,n.structuralHash),{kind:`BinOp`,op:e,a:t,b:n,structuralHash:r,freeParams:g4(t.freeParams,n.freeParams)}}function s4(e,t){let n=G2(t4(`UnaryOp`),e);return n=X2(n,t.structuralHash),{kind:`UnaryOp`,op:e,arg:t,structuralHash:n,freeParams:t.freeParams}}function c4(e,t){let n=Z2(t4(`Component`),t);return n=X2(n,e.structuralHash),{kind:`Component`,vec:e,index:t,structuralHash:n,freeParams:e.freeParams}}function l4(e,t){let n=Z2(t4(`BuildVec`),e),r=new Set;for(let e of t){n=X2(n,e.structuralHash);for(let t of e.freeParams)r.add(t)}return{kind:`BuildVec`,dim:e,components:t,structuralHash:n,freeParams:r}}var u4=(e,t)=>o4(`+`,e,t),d4=(e,t)=>o4(`*`,e,t);function f4(e){return typeof e==`number`?n4(e):e}function p4(e,t){if(!Array.isArray(e))return e;let n=e;return n.every(e=>typeof e==`number`)?t===3?r4([n[0],n[1],n[2]]):i4([n[0],n[1]]):l4(t,n.map(f4))}function m4(e){return p4(e,3)}function h4(e){return p4(e,2)}function g4(e,t){if(e.size===0)return t;if(t.size===0)return e;let n=new Set(e);for(let e of t)n.add(e);return n}function _4(e){return typeof e==`number`}function v4(e,t){return _4(e)?O(e):k(P(M.NULL_SHAPE_INPUT,`${t}: expected number, got ${Array.isArray(e)?`vector(${e.length})`:typeof e}`))}function y4(e,t,n){return Array.isArray(e)&&e.length===t?O(e):k(P(M.NULL_SHAPE_INPUT,`${n}: expected Vec${t}, got ${_4(e)?`number`:`vector(${e.length})`}`))}function b4(e,t){switch(e.kind){case`NumLit`:return O(e.value);case`Vec3Lit`:return O(e.value);case`Vec2Lit`:return O(e.value);case`Param`:{let n=t[e.name];return n===void 0?k(P(M.NULL_SHAPE_INPUT,`unbound param: ${e.name}`)):O(n)}case`BinOp`:return x4(e,t);case`UnaryOp`:return S4(e,t);case`Component`:return C4(e,t);case`BuildVec`:return w4(e,t)}}function x4(e,t){let n=b4(e.a,t);if(!n.ok)return n;let r=b4(e.b,t);if(!r.ok)return r;let i=v4(n.value,`BinOp(${e.op}).a`);if(!i.ok)return i;let a=v4(r.value,`BinOp(${e.op}).b`);if(!a.ok)return a;switch(e.op){case`+`:return O(i.value+a.value);case`-`:return O(i.value-a.value);case`*`:return O(i.value*a.value);case`/`:return a.value===0?k(P(M.NULL_SHAPE_INPUT,`BinOp(/): division by zero`)):O(i.value/a.value)}}function S4(e,t){let n=b4(e.arg,t);if(!n.ok)return n;let r=v4(n.value,`UnaryOp(${e.op})`);if(!r.ok)return r;let i=r.value;switch(e.op){case`neg`:return O(-i);case`sin`:return O(Math.sin(i));case`cos`:return O(Math.cos(i));case`sqrt`:return O(Math.sqrt(i));case`abs`:return O(Math.abs(i))}}function C4(e,t){let n=b4(e.vec,t);if(!n.ok)return n;if(_4(n.value))return k(P(M.NULL_SHAPE_INPUT,`Component: cannot index a scalar`));let r=n.value,i=r[e.index];return i===void 0?k(P(M.NULL_SHAPE_INPUT,`Component: index ${e.index} out of range for Vec${r.length}`)):O(i)}function w4(e,t){if(e.components.length!==e.dim)return k(P(M.NULL_SHAPE_INPUT,`BuildVec(${e.dim}): expected ${e.dim} components, got ${e.components.length}`));let n=[];for(let r of e.components){let e=b4(r,t);if(!e.ok)return e;let i=v4(e.value,`BuildVec.component`);if(!i.ok)return i;n.push(i.value)}return O(e.dim===2?[n[0],n[1]]:[n[0],n[1],n[2]])}function T4(e,t,n){let r=b4(e,t);return r.ok?v4(r.value,n):r}function E4(e,t,n){let r=b4(e,t);if(!r.ok)return r;let i=y4(r.value,3,n);if(!i.ok)return i;let[a,o,s]=i.value;return O([a,o,s])}function D4(e,t){if(t.size===0)return Object.freeze({});let n={};for(let r of t){let t=e[r];t!==void 0&&(n[r]=t)}return Object.freeze(n)}var O4=new Set;function k4(e){return G2(V2(),e)}function A4(e,t){return X2(e,t.structuralHash)}function j4(e,t){return t===void 0?Q2(e,!1):A4(Q2(e,!0),t)}function M4(e,t){return t===void 0?Q2(e,!1):Y2(Q2(e,!0),t)}function N4(...e){let t=new Set;for(let n of e)if(n)for(let e of n.freeParams)t.add(e);return t.size===0?O4:t}function P4(e,t,n){let r=f4(e),i=f4(t),a=f4(n),o=k4(`Box`);return o=A4(A4(A4(o,r),i),a),{kind:`Box`,x:r,y:i,z:a,structuralHash:o,freeParams:N4(r,i,a)}}function F4(e){let t=f4(e);return{kind:`Sphere`,radius:t,structuralHash:A4(k4(`Sphere`),t),freeParams:t.freeParams}}function I4(e,t){let n=f4(e),r=f4(t);return{kind:`Cylinder`,radius:n,height:r,structuralHash:A4(A4(k4(`Cylinder`),n),r),freeParams:N4(n,r)}}function L4(e,t,n){let r=f4(e),i=f4(t),a=f4(n),o=k4(`Cone`);return o=A4(A4(A4(o,r),i),a),{kind:`Cone`,radius1:r,radius2:i,height:a,structuralHash:o,freeParams:N4(r,i,a)}}function R4(e,t){let n=f4(e),r=f4(t);return{kind:`Torus`,majorRadius:n,minorRadius:r,structuralHash:A4(A4(k4(`Torus`),n),r),freeParams:N4(n,r)}}function z4(e){let t=e.map(m4),n=Z2(k4(`Polygon`),t.length);for(let e of t)n=A4(n,e);return{kind:`Polygon`,points:t,structuralHash:n,freeParams:N4(...t)}}function B4(e){let t=f4(e);return{kind:`Circle`,radius:t,structuralHash:A4(k4(`Circle`),t),freeParams:t.freeParams}}function V4(e,t){let n=m4(e),r=m4(t);return{kind:`Line`,from:n,to:r,structuralHash:A4(A4(k4(`Line`),n),r),freeParams:N4(n,r)}}function H4(e){let t=m4(e);return{kind:`Vertex`,point:t,structuralHash:A4(k4(`Vertex`),t),freeParams:t.freeParams}}function U4(e){return{kind:`Empty`,output:e,structuralHash:G2(k4(`Empty`),e),freeParams:O4}}function W4(){return U4(`Solid`)}function G4(){return U4(`Face`)}function K4(){return U4(`Wire`)}function q4(e,t,n,r){return M4(A4(A4(k4(e),t),n),r)}function J4(e,t,n){return{kind:`Fuse`,a:e,b:t,tolerance:n,structuralHash:q4(`Fuse`,e,t,n),freeParams:N4(e,t)}}function Y4(e,t,n){return{kind:`Cut`,a:e,b:t,tolerance:n,structuralHash:q4(`Cut`,e,t,n),freeParams:N4(e,t)}}function X4(e,t,n){return{kind:`Intersect`,a:e,b:t,tolerance:n,structuralHash:q4(`Intersect`,e,t,n),freeParams:N4(e,t)}}function Z4(e,t){let n=Z2(k4(`FuseAll`),e.length);for(let t of e)n=A4(n,t);return n=M4(n,t),{kind:`FuseAll`,shapes:e,tolerance:t,structuralHash:n,freeParams:N4(...e)}}function Q4(e,t,n){let r=A4(k4(`CutAll`),e);r=Z2(r,t.length);for(let e of t)r=A4(r,e);return r=M4(r,n),{kind:`CutAll`,base:e,tools:t,tolerance:n,structuralHash:r,freeParams:N4(e,...t)}}function $4(e){return e===void 0?void 0:m4(e)}function e3(e,t){let n=m4(t);return{kind:`Translate`,target:e,vector:n,structuralHash:A4(A4(k4(`Translate`),e),n),freeParams:N4(e,n)}}function t3(e,t,n){let r=f4(t),i=$4(n?.axis),a=$4(n?.at),o=A4(A4(k4(`Rotate`),e),r);return o=j4(o,i),o=j4(o,a),{kind:`Rotate`,target:e,angle:r,axis:i,at:a,structuralHash:o,freeParams:N4(e,r,i,a)}}function n3(e,t,n){let r=f4(t),i=$4(n?.center),a=A4(A4(k4(`Scale`),e),r);return a=j4(a,i),{kind:`Scale`,target:e,factor:r,center:i,structuralHash:a,freeParams:N4(e,r,i)}}function r3(e,t){let n=$4(t?.normal),r=$4(t?.at),i=A4(k4(`Mirror`),e);return i=j4(i,n),i=j4(i,r),{kind:`Mirror`,target:e,normal:n,at:r,structuralHash:i,freeParams:N4(e,n,r)}}function i3(e){let t=Z2(k4(`Compound`),e.length);for(let n of e)t=A4(t,n);return{kind:`Compound`,children:e,structuralHash:t,freeParams:N4(...e)}}function a3(e,t,n=!1){let r=t.map(e=>e.map(e=>[...e])),i=Z2(Q2(A4(k4(`Instance`),e),n),r.length);for(let e of r)for(let t of e.flat())i=Y2(i,t);return{kind:`Instance`,source:e,placements:r,fuse:n,structuralHash:i,freeParams:N4(e)}}function o3(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:return`Solid`;case`Polygon`:return`Face`;case`Circle`:case`Line`:return`Edge`;case`Vertex`:return`Vertex`;case`Empty`:return e.output;case`Fuse`:case`Cut`:case`Intersect`:return o3(e.a);case`FuseAll`:return e.shapes[0]?o3(e.shapes[0]):`Solid`;case`CutAll`:return o3(e.base);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return o3(e.target);case`Compound`:return`Compound`;case`Instance`:return e.fuse?`Solid`:`Compound`}}function s3(e,t){let n=T4(e.x,t.env,`Box.x`);if(!n.ok)return n;let r=T4(e.y,t.env,`Box.y`);if(!r.ok)return r;let i=T4(e.z,t.env,`Box.z`);return i.ok?O(hP(n.value,r.value,i.value)):i}function c3(e,t){let n=T4(e.radius,t.env,`Sphere.radius`);return n.ok?O(_P(n.value)):n}function l3(e,t){let n=T4(e.radius,t.env,`Cylinder.radius`);if(!n.ok)return n;let r=T4(e.height,t.env,`Cylinder.height`);return r.ok?O(gP(n.value,r.value)):r}function u3(e,t){let n=T4(e.radius1,t.env,`Cone.radius1`);if(!n.ok)return n;let r=T4(e.radius2,t.env,`Cone.radius2`);if(!r.ok)return r;let i=T4(e.height,t.env,`Cone.height`);return i.ok?O(vP(n.value,r.value,i.value)):i}function d3(e,t){let n=T4(e.majorRadius,t.env,`Torus.majorRadius`);if(!n.ok)return n;let r=T4(e.minorRadius,t.env,`Torus.minorRadius`);return r.ok?O(yP(n.value,r.value)):r}function f3(e,t){let n=[];for(let r of e.points){let e=E4(r,t.env,`Polygon.point`);if(!e.ok)return e;n.push(e.value)}return FP(n)}function p3(e,t){let n=T4(e.radius,t.env,`Circle.radius`);return n.ok?O(SP(n.value)):n}function m3(e,t){let n=E4(e.from,t.env,`Line.from`);if(!n.ok)return n;let r=E4(e.to,t.env,`Line.to`);return r.ok?O(xP(n.value,r.value)):r}function h3(e,t){let n=E4(e.point,t.env,`Vertex.point`);return n.ok?O(IP(n.value)):n}function g3(e){return k(Eo(M.NULL_SHAPE_INPUT,`${e}: empty result has no kernel representation`))}function _3(e,t,n){let r=e.evalNode(t);return r.ok?zE(r.value)?O(r.value):k(Co(M.CSG_NOT_3D,`${n}: operand did not produce a 3D shape`)):r}function v3(e,t){return{unsafe:!0,fuzzyValue:e.tolerance??t.tolerance}}function y3(e,t){if(e.a.kind===`Empty`)return t.evalNode(e.b);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=_3(t,e.a,`Fuse.a`);if(!n.ok)return n;let r=_3(t,e.b,`Fuse.b`);return r.ok?VA(n.value,r.value,v3(e,t)):r}function b3(e,t){if(e.a.kind===`Empty`)return g3(`Cut`);if(e.b.kind===`Empty`)return t.evalNode(e.a);let n=_3(t,e.a,`Cut.a`);if(!n.ok)return n;let r=_3(t,e.b,`Cut.b`);return r.ok?HA(n.value,r.value,v3(e,t)):r}function x3(e,t){if(e.a.kind===`Empty`||e.b.kind===`Empty`)return g3(`Intersect`);let n=_3(t,e.a,`Intersect.a`);if(!n.ok)return n;let r=_3(t,e.b,`Intersect.b`);return r.ok?UA(n.value,r.value,v3(e,t)):r}function S3(e,t,n){let r=[];for(let i of t){let t=_3(e,i,n);if(!t.ok)return t;r.push(t.value)}return O(r)}function C3(e,t){let n=e.shapes.filter(e=>e.kind!==`Empty`);if(n.length===0)return g3(`FuseAll`);if(n.length===1&&n[0])return t.evalNode(n[0]);let r=S3(t,n,`FuseAll.operand`);return r.ok?GA(r.value,v3(e,t)):r}function w3(e,t){if(e.base.kind===`Empty`)return g3(`CutAll`);let n=e.tools.filter(e=>e.kind!==`Empty`);if(n.length===0)return t.evalNode(e.base);let r=_3(t,e.base,`CutAll.base`);if(!r.ok)return r;let i=S3(t,n,`CutAll.tool`);return i.ok?KA(r.value,i.value,v3(e,t)):i}function T3(e){return k(Eo(M.NULL_SHAPE_INPUT,`${e}: cannot transform an Empty node`))}function E3(e,t,n,r){return e?E4(e,t,n):O(r)}function D3(e,t){let n=H(),{handle:r,dispose:i}=n.composeTransform(t),a;try{a=VE(n.locate(e.wrapped,r))}finally{i()}return sk(e)&&dk(e,a),a}function O3(e,t){if(e.target.kind===`Empty`)return T3(`Translate`);let n=E4(e.vector,t.env,`Translate.vector`);if(!n.ok)return n;let r=t.evalNode(e.target);return r.ok?O(D3(r.value,[{type:`translate`,x:n.value[0],y:n.value[1],z:n.value[2]}])):r}function k3(e,t){if(e.target.kind===`Empty`)return T3(`Rotate`);let n=T4(e.angle,t.env,`Rotate.angle`);if(!n.ok)return n;let r=E3(e.axis,t.env,`Rotate.axis`,[0,0,1]);if(!r.ok)return r;let i=E3(e.at,t.env,`Rotate.at`,[0,0,0]);if(!i.ok)return i;let a=t.evalNode(e.target);return a.ok?O(D3(a.value,[{type:`rotate`,angle:n.value,axis:r.value,center:i.value}])):a}function A3(e,t){if(e.target.kind===`Empty`)return T3(`Scale`);let n=T4(e.factor,t.env,`Scale.factor`);if(!n.ok)return n;let r=E3(e.center,t.env,`Scale.center`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(hk(i.value,n.value,r.value)):i}function j3(e,t){if(e.target.kind===`Empty`)return T3(`Mirror`);let n=E3(e.normal,t.env,`Mirror.normal`,[1,0,0]);if(!n.ok)return n;let r=E3(e.at,t.env,`Mirror.at`,[0,0,0]);if(!r.ok)return r;let i=t.evalNode(e.target);return i.ok?O(mk(i.value,n.value,r.value)):i}function M3(e,t){let n=e.children.filter(e=>e.kind!==`Empty`);if(n.length===0)return k(Eo(M.NULL_SHAPE_INPUT,`Compound: cannot materialize a compound with zero non-empty children`));let r=[];for(let e of n){let n=t.evalNode(e);if(!n.ok)return n;r.push(n.value)}return O(LP(r))}function N3(){return k(Eo(M.NULL_SHAPE_INPUT,`Empty: cannot materialize an Empty node directly — only valid as boolean/transform operand`))}function P3(e,t){let n=t.evalNode(e.source);return n.ok?E$(C$(n.value,e.placements),{fuse:e.fuse}):n}function F3(e,t){switch(e.kind){case`Box`:return s3(e,t);case`Sphere`:return c3(e,t);case`Cylinder`:return l3(e,t);case`Cone`:return u3(e,t);case`Torus`:return d3(e,t);case`Polygon`:return f3(e,t);case`Circle`:return p3(e,t);case`Line`:return m3(e,t);case`Vertex`:return h3(e,t);case`Empty`:return N3();case`Fuse`:return y3(e,t);case`Cut`:return b3(e,t);case`Intersect`:return x3(e,t);case`FuseAll`:return C3(e,t);case`CutAll`:return w3(e,t);case`Translate`:return O3(e,t);case`Rotate`:return k3(e,t);case`Scale`:return A3(e,t);case`Mirror`:return j3(e,t);case`Compound`:return M3(e,t);case`Instance`:return P3(e,t)}}function I3(e,t){if(typeof t==`number`)return Y2(Q2(e,!1),t);let n=Q2(e,!0);n=Z2(n,t.length);for(let e of t)n=Y2(n,e);return n}function L3(e,t){if(t.size===0)return V2();let n=D4(e,t),r=Object.keys(n).sort(),i=V2();for(let e of r){i=G2(i,e);let t=n[e];t!==void 0&&(i=I3(i,t))}return i}function R3(e,t,n,r){let i=L3(t,e.freeParams),a=r===void 0?`d`:Y2(V2(),r).toString(16);return`${$2(e.structuralHash)}:${n}:${$2(i)}:${a}`}var z3=[1,0,0,0];function B3(e,t){let n=T4(e.angle,t,`evaluateMesh.peelRigid`);if(!n.ok)return null;let r=e.axis?E4(e.axis,t,`evaluateMesh.peelRigid`):O([0,0,1]);if(!r.ok)return null;let i=e.at?E4(e.at,t,`evaluateMesh.peelRigid`):O([0,0,0]);return i.ok?{angle:n.value,axis:r.value,center:i.value}:null}function V3(e,t){let n=e,r=z3,i=[0,0,0];for(;;)if(n.kind===`Translate`){let e=E4(n.vector,t,`evaluateMesh.peelRigid`);if(!e.ok)break;let a=oF(r,e.value);i=[i[0]+a[0],i[1]+a[1],i[2]+a[2]],n=n.target}else if(n.kind===`Rotate`){let e=B3(n,t);if(!e)break;let a=sF(e.axis,e.angle*Math.PI/180),o=lF(r,a),s=oF(r,e.center),c=oF(o,e.center);i=[i[0]+s[0]-c[0],i[1]+s[1]-c[1],i[2]+s[2]-c[2]],r=o,n=n.target}else break;return{inner:n,rot:r,trans:i}}function H3(e){return e[0]===1&&e[1]===0&&e[2]===0&&e[3]===0}function U3(e,t,n,r,i,a,o,s,c){for(let l=0;l<t.length;l+=3){let u=t[l]??0,d=t[l+1]??0,f=t[l+2]??0,p=2*(i*f-a*d),m=2*(a*u-r*f),h=2*(r*d-i*u);e[l]=u+n*p+(i*h-a*m)+o,e[l+1]=d+n*m+(a*p-r*h)+s,e[l+2]=f+n*h+(r*m-i*p)+c}}function W3(e,t,n){let[r,i,a]=n,o=H3(t);if(o&&r===0&&i===0&&a===0)return e;let s=e.vertices,c=new Float32Array(s.length);if(o){for(let e=0;e<s.length;e+=3)c[e]=(s[e]??0)+r,c[e+1]=(s[e+1]??0)+i,c[e+2]=(s[e+2]??0)+a;return{...e,vertices:c}}let[l,u,d,f]=t;U3(c,s,l,u,d,f,r,i,a);let p=e.normals,m=new Float32Array(p.length);return U3(m,p,l,u,d,f,0,0,0),{...e,vertices:c,normals:m}}function G3(e,t,n){let r=new Map,i=Math.min(t.length,n.length);for(let e=0;e<i;e++){let i=t[e],a=n[e];i!==void 0&&a!==void 0&&r.set(i,a)}return e.map(e=>({...e,faceId:r.get(e.faceId)??e.faceId}))}var K3=class{cache=new Map;refCounts=new Map;evaluating=!1;pendingKeys=[];kernelId;defaultTolerance;maxCacheEntries;maxMeshCacheEntries;meshCache=new Map;onStep;hits=0;misses=0;evictions=0;constructor(e={}){this.kernelId=e.kernel??TT()??`unregistered`,this.defaultTolerance=e.tolerance,e.onStep&&(this.onStep=e.onStep);let t=e.maxCacheEntries;if(t!==void 0&&(!Number.isInteger(t)||t<1))throw RangeError(`Evaluator: maxCacheEntries must be a positive integer, got ${String(t)}`);this.maxCacheEntries=t;let n=e.maxMeshCacheEntries;if(n!==void 0&&(!Number.isInteger(n)||n<1))throw RangeError(`Evaluator: maxMeshCacheEntries must be a positive integer, got ${String(n)}`);this.maxMeshCacheEntries=n}evaluate(e,t={}){if(this.maxCacheEntries!==void 0&&this.evaluating)throw Error(`Evaluator.evaluate() is not reentrant when maxCacheEntries is set — do not call it from an onStep callback.`);return ET(this.kernelId,()=>{this.evaluating=!0;let n=!1;try{let r=this.evaluateInner(e,t);return this.maxCacheEntries!==void 0&&r.ok&&this.trimCache(this.maxCacheEntries),n=r.ok,r}finally{!n&&this.maxCacheEntries!==void 0&&this.rollbackPending(),this.pendingKeys.length=0,this.evaluating=!1}})}evaluateMesh(e,t={},n={}){n.signal?.throwIfAborted();let r=n.cache??!0,i=Po(),a=n.tolerance??i.tolerance,o=n.angularTolerance??i.angularTolerance,s=`${R3(e,t,this.kernelId,this.defaultTolerance)}|${Kk(a,o,n.skipNormals??!1,n.includeUVs??!1)}`;if(r){let r=this.meshCache.get(s);if(r!==void 0)return this.maxMeshCacheEntries!==void 0&&(this.meshCache.delete(s),this.meshCache.set(s,r)),O(r);let{inner:i,rot:a,trans:o}=V3(e,t);if(i!==e){let r=this.evaluateMesh(i,t,n);if(!r.ok)return r;let c=this.evaluate(i,t);if(!c.ok)return c;let l=dD(c.value).map(Ek),u=this.evaluate(e,t);if(!u.ok)return u;let d=dD(u.value).map(Ek),f=W3(r.value,a,o),p=G3(f.faceGroups,l,d),m=new Set(d);if(p.every(e=>m.has(e.faceId))){let e={...f,faceGroups:p};return this.meshCache.set(s,e),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries),O(e)}}}let c=this.evaluate(e,t);if(!c.ok)return c;let l=ET(this.kernelId,()=>nA(c.value,n));return r&&(this.meshCache.set(s,l),this.maxMeshCacheEntries!==void 0&&this.trimMeshCache(this.maxMeshCacheEntries)),O(l)}evaluateInner(e,t){let n=R3(e,t,this.kernelId,this.defaultTolerance),r=this.cache.get(n);if(r!==void 0)return this.hits++,this.maxCacheEntries!==void 0&&(this.cache.delete(n),this.cache.set(n,r)),this.onStep?.({node:e,cacheKey:n,cacheHit:!0}),O(r);this.misses++;let i=F3(e,{env:t,tolerance:this.defaultTolerance,evalNode:e=>this.evaluateInner(e,t)});if(!i.ok)return i;let a=i.value;return this.refCounts.set(a,(this.refCounts.get(a)??0)+1),this.cache.set(n,a),this.maxCacheEntries!==void 0&&this.pendingKeys.push(n),this.onStep?.({node:e,cacheKey:n,cacheHit:!1}),i}releaseShape(e){let t=(this.refCounts.get(e)??1)-1;t<=0?(this.refCounts.delete(e),e[Symbol.dispose]()):this.refCounts.set(e,t)}trimCache(e){for(;this.cache.size>e;){let e=this.cache.keys().next();if(e.done)break;let t=e.value,n=this.cache.get(t);this.cache.delete(t),this.evictions++,n!==void 0&&this.releaseShape(n)}}trimMeshCache(e){for(;this.meshCache.size>e;){let e=this.meshCache.keys().next();if(e.done)break;this.meshCache.delete(e.value)}}rollbackPending(){for(let e of this.pendingKeys){let t=this.cache.get(e);t!==void 0&&(this.cache.delete(e),this.releaseShape(t))}}cacheStats(){return{hits:this.hits,misses:this.misses,entries:this.cache.size,evictions:this.evictions}}resetStats(){this.hits=0,this.misses=0,this.evictions=0}[Symbol.dispose](){for(let e of this.refCounts.keys())e[Symbol.dispose]();this.refCounts.clear(),this.cache.clear(),this.meshCache.clear()}};function q3(e,t){try{var n=IT();let r=t(n.u(new K3(e)));if(r instanceof Promise)throw Error(`withEvaluator() callback returned a Promise. Async code must construct an Evaluator directly and dispose it manually — borrowed shapes would otherwise be freed before the Promise resolves.`);return r}catch(e){n.e=e}finally{n.d()}}function J3(e){return{csgVersion:1,root:e6(e)}}function Y3(e){switch(e.kind){case`NumLit`:return{kind:`NumLit`,value:e.value};case`Vec3Lit`:return{kind:`Vec3Lit`,value:[e.value[0],e.value[1],e.value[2]]};case`Vec2Lit`:return{kind:`Vec2Lit`,value:[e.value[0],e.value[1]]};case`Param`:return{kind:`Param`,name:e.name};case`BinOp`:return{kind:`BinOp`,op:e.op,a:Y3(e.a),b:Y3(e.b)};case`UnaryOp`:return{kind:`UnaryOp`,op:e.op,arg:Y3(e.arg)};case`Component`:return{kind:`Component`,vec:Y3(e.vec),index:e.index};case`BuildVec`:return{kind:`BuildVec`,dim:e.dim,components:e.components.map(Y3)}}}function X3(e){switch(e.kind){case`Box`:return{kind:`Box`,x:Y3(e.x),y:Y3(e.y),z:Y3(e.z)};case`Sphere`:return{kind:`Sphere`,radius:Y3(e.radius)};case`Cylinder`:return{kind:`Cylinder`,radius:Y3(e.radius),height:Y3(e.height)};case`Cone`:return{kind:`Cone`,radius1:Y3(e.radius1),radius2:Y3(e.radius2),height:Y3(e.height)};case`Torus`:return{kind:`Torus`,majorRadius:Y3(e.majorRadius),minorRadius:Y3(e.minorRadius)};case`Polygon`:return{kind:`Polygon`,points:e.points.map(Y3)};case`Circle`:return{kind:`Circle`,radius:Y3(e.radius)};case`Line`:return{kind:`Line`,from:Y3(e.from),to:Y3(e.to)};case`Vertex`:return{kind:`Vertex`,point:Y3(e.point)};case`Empty`:return{kind:`Empty`,output:e.output};default:return}}function Z3(e){switch(e.kind){case`Fuse`:case`Cut`:case`Intersect`:return{kind:e.kind,a:e6(e.a),b:e6(e.b),tolerance:e.tolerance};case`FuseAll`:return{kind:`FuseAll`,shapes:e.shapes.map(e6),tolerance:e.tolerance};case`CutAll`:return{kind:`CutAll`,base:e6(e.base),tools:e.tools.map(e6),tolerance:e.tolerance};default:return}}function Q3(e){return e?Y3(e):void 0}function $3(e){switch(e.kind){case`Translate`:return{kind:`Translate`,target:e6(e.target),vector:Y3(e.vector)};case`Rotate`:return{kind:`Rotate`,target:e6(e.target),angle:Y3(e.angle),axis:Q3(e.axis),at:Q3(e.at)};case`Scale`:return{kind:`Scale`,target:e6(e.target),factor:Y3(e.factor),center:Q3(e.center)};case`Mirror`:return{kind:`Mirror`,target:e6(e.target),normal:Q3(e.normal),at:Q3(e.at)};default:return}}function e6(e){return e.kind===`Compound`?{kind:`Compound`,children:e.children.map(e6)}:e.kind===`Instance`?{kind:`Instance`,source:e6(e.source),placements:e.placements,fuse:e.fuse}:X3(e)??Z3(e)??$3(e)}function t6(e){return k(P(M.NULL_SHAPE_INPUT,`csg.fromJSON: ${e}`))}function n6(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function r6(e){return typeof e==`number`&&Number.isFinite(e)}function i6(e){return typeof e==`string`}function a6(e,t){if(!Array.isArray(e)||e.length!==3)return t6(`${t}: expected Vec3 array`);let[n,r,i]=e;return!r6(n)||!r6(r)||!r6(i)?t6(`${t}: Vec3 contains non-number`):O([n,r,i])}function o6(e,t){if(!Array.isArray(e)||e.length!==2)return t6(`${t}: expected Vec2 array`);let[n,r]=e;return!r6(n)||!r6(r)?t6(`${t}: Vec2 contains non-number`):O([n,r])}function s6(e){if(!n6(e))return t6(`input is not an object`);let t=e.csgVersion;if(t!==1)return t6(`unsupported csgVersion ${String(t)} (expected 1)`);let n=e.root;return h6(n)}function c6(e){if(!n6(e))return t6(`expression: not an object`);let t=e.kind;switch(t){case`NumLit`:return r6(e.value)?O(n4(e.value)):t6(`NumLit.value`);case`Vec3Lit`:{let t=a6(e.value,`Vec3Lit.value`);return t.ok?O(r4(t.value)):t}case`Vec2Lit`:{let t=o6(e.value,`Vec2Lit.value`);return t.ok?O(i4(t.value)):t}case`Param`:return i6(e.name)?O(a4(e.name)):t6(`Param.name`);case`BinOp`:return l6(e);case`UnaryOp`:return u6(e);case`Component`:return d6(e);case`BuildVec`:return f6(e);default:return t6(`unknown expression kind: ${String(t)}`)}}function l6(e){let t=e.op;if(t!==`+`&&t!==`-`&&t!==`*`&&t!==`/`)return t6(`BinOp.op: ${String(t)}`);let n=c6(e.a);if(!n.ok)return n;let r=c6(e.b);return r.ok?O(o4(t,n.value,r.value)):r}function u6(e){let t=e.op;if(!i6(t)||![`neg`,`sin`,`cos`,`sqrt`,`abs`].includes(t))return t6(`UnaryOp.op: ${String(t)}`);let n=c6(e.arg);return n.ok?O(s4(t,n.value)):n}function d6(e){let t=e.index;if(t!==0&&t!==1&&t!==2)return t6(`Component.index: ${String(t)}`);let n=c6(e.vec);return n.ok?O(c4(n.value,t)):n}function f6(e){let t=e.dim;if(t!==2&&t!==3)return t6(`BuildVec.dim: ${String(t)}`);let n=e.components;if(!Array.isArray(n))return t6(`BuildVec.components: not array`);if(n.length!==t)return t6(`BuildVec.components: expected ${t} components, got ${n.length}`);let r=[];for(let e of n){let t=c6(e);if(!t.ok)return t;r.push(t.value)}return O(l4(t,r))}function p6(e,t){if(!Array.isArray(e))return t6(`${t}: not array`);let n=[];for(let t of e){let e=h6(t);if(!e.ok)return e;n.push(e.value)}return O(n)}function m6(e){let t=e.tolerance;return t==null?O(void 0):r6(t)?O(t):t6(`tolerance: not a finite number`)}function h6(e){if(!n6(e))return t6(`node: not an object`);let t=e.kind;switch(t){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return _6(t,e);case`Fuse`:case`Cut`:case`Intersect`:return T6(t,e);case`FuseAll`:case`CutAll`:return E6(t,e);case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return D6(t,e);case`Compound`:return N6(e);case`Instance`:return F6(e);default:return t6(`unknown node kind: ${String(t)}`)}}function g6(e,t,n){let r=c6(e[t]);return r.ok?O(n(r.value)):r}function _6(e,t){switch(e){case`Box`:return v6(t);case`Sphere`:return g6(t,`radius`,F4);case`Cylinder`:return y6(t);case`Cone`:return b6(t);case`Torus`:return x6(t);case`Polygon`:return S6(t);case`Circle`:return g6(t,`radius`,B4);case`Line`:return C6(t);case`Vertex`:return g6(t,`point`,H4);case`Empty`:return w6(t)}return t6(`unhandled primitive: ${e}`)}function v6(e){let t=c6(e.x);if(!t.ok)return t;let n=c6(e.y);if(!n.ok)return n;let r=c6(e.z);return r.ok?O(P4(t.value,n.value,r.value)):r}function y6(e){let t=c6(e.radius);if(!t.ok)return t;let n=c6(e.height);return n.ok?O(I4(t.value,n.value)):n}function b6(e){let t=c6(e.radius1);if(!t.ok)return t;let n=c6(e.radius2);if(!n.ok)return n;let r=c6(e.height);return r.ok?O(L4(t.value,n.value,r.value)):r}function x6(e){let t=c6(e.majorRadius);if(!t.ok)return t;let n=c6(e.minorRadius);return n.ok?O(R4(t.value,n.value)):n}function S6(e){let t=e.points;if(!Array.isArray(t))return t6(`Polygon.points: not array`);let n=[];for(let e of t){let t=c6(e);if(!t.ok)return t;n.push(t.value)}return O(z4(n))}function C6(e){let t=c6(e.from);if(!t.ok)return t;let n=c6(e.to);return n.ok?O(V4(t.value,n.value)):n}function w6(e){let t=e.output;switch(t){case`Solid`:return O(W4());case`Face`:return O(G4());case`Wire`:return O(K4());default:return t6(`Empty.output: ${String(t)}`)}}function T6(e,t){let n=h6(t.a);if(!n.ok)return n;let r=h6(t.b);if(!r.ok)return r;let i=m6(t);if(!i.ok)return i;switch(e){case`Fuse`:return O(J4(n.value,r.value,i.value));case`Cut`:return O(Y4(n.value,r.value,i.value));case`Intersect`:return O(X4(n.value,r.value,i.value))}}function E6(e,t){let n=m6(t);if(!n.ok)return n;if(e===`FuseAll`){let e=p6(t.shapes,`FuseAll.shapes`);return e.ok?O(Z4(e.value,n.value)):e}let r=h6(t.base);if(!r.ok)return r;let i=p6(t.tools,`CutAll.tools`);return i.ok?O(Q4(r.value,i.value,n.value)):i}function D6(e,t){let n=h6(t.target);if(!n.ok)return n;switch(e){case`Translate`:return O6(t,n.value);case`Rotate`:return A6(t,n.value);case`Scale`:return j6(t,n.value);case`Mirror`:return M6(t,n.value)}}function O6(e,t){let n=c6(e.vector);return n.ok?O(e3(t,n.value)):n}function k6(e,t){if(e[t]===void 0)return O(void 0);let n=c6(e[t]);return n.ok?O(n.value):n}function A6(e,t){let n=c6(e.angle);if(!n.ok)return n;let r=k6(e,`axis`);if(!r.ok)return r;let i=k6(e,`at`);return i.ok?O(t3(t,n.value,{axis:r.value,at:i.value})):i}function j6(e,t){let n=c6(e.factor);if(!n.ok)return n;let r=k6(e,`center`);return r.ok?O(n3(t,n.value,{center:r.value})):r}function M6(e,t){let n=k6(e,`normal`);if(!n.ok)return n;let r=k6(e,`at`);return r.ok?O(r3(t,{normal:n.value,at:r.value})):r}function N6(e){let t=p6(e.children,`Compound.children`);return t.ok?O(i3(t.value)):t}function P6(e){return Array.isArray(e)&&e.length===4&&e.every(e=>Array.isArray(e)&&e.length===4&&e.every(r6))}function F6(e){let t=h6(e.source);if(!t.ok)return t;let n=e.placements;return!Array.isArray(n)||!n.every(P6)?t6(`Instance.placements must be an array of 4x4 number matrices`):O(a3(t.value,n,e.fuse===!0))}function I6(e){return z6(e)}function L6(e){switch(e.kind){case`NumLit`:case`Vec3Lit`:case`Vec2Lit`:case`Param`:return e;case`BinOp`:{let t=L6(e.a),n=L6(e.b);if(t.kind===`NumLit`&&n.kind===`NumLit`)switch(e.op){case`+`:return n4(t.value+n.value);case`-`:return n4(t.value-n.value);case`*`:return n4(t.value*n.value);case`/`:return n4(t.value/n.value)}return t!==e.a||n!==e.b?o4(e.op,t,n):e}case`UnaryOp`:{let t=L6(e.arg);if(t.kind===`NumLit`){let n=t.value;switch(e.op){case`neg`:return n4(-n);case`sin`:return n4(Math.sin(n));case`cos`:return n4(Math.cos(n));case`sqrt`:return n4(Math.sqrt(n));case`abs`:return n4(Math.abs(n))}}return t===e.arg?e:s4(e.op,t)}case`Component`:{let t=L6(e.vec);return t.kind===`Vec3Lit`||t.kind===`Vec2Lit`&&(e.index===0||e.index===1)?n4(t.value[e.index]):t===e.vec?e:c4(t,e.index)}case`BuildVec`:{let t=e.components.map(L6);return R6(e.dim,t)||(t.some((t,n)=>t!==e.components[n])?l4(e.dim,t):e)}}}function R6(e,t){if(t.length!==e)return;let n=[];for(let e of t){if(e.kind!==`NumLit`)return;n.push(e.value)}return e===2?i4([n[0],n[1]]):r4([n[0],n[1],n[2]])}function z6(e){switch(e.kind){case`Box`:return P4(L6(e.x),L6(e.y),L6(e.z));case`Sphere`:return F4(L6(e.radius));case`Cylinder`:return I4(L6(e.radius),L6(e.height));case`Cone`:return L4(L6(e.radius1),L6(e.radius2),L6(e.height));case`Torus`:return R4(L6(e.majorRadius),L6(e.minorRadius));case`Polygon`:return z4(e.points.map(L6));case`Circle`:return B4(L6(e.radius));case`Line`:return V4(L6(e.from),L6(e.to));case`Vertex`:return H4(L6(e.point));case`Empty`:return e;case`Fuse`:return B6(e.a,e.b,e.tolerance);case`Cut`:return V6(e.a,e.b,e.tolerance);case`Intersect`:return H6(e.a,e.b,e.tolerance);case`FuseAll`:return U6(e.shapes,e.tolerance);case`CutAll`:return W6(e.base,e.tools,e.tolerance);case`Translate`:return G6(e.target,e.vector);case`Rotate`:return t3(z6(e.target),L6(e.angle),{axis:e.axis?L6(e.axis):void 0,at:e.at?L6(e.at):void 0});case`Scale`:return n3(z6(e.target),L6(e.factor),{center:e.center?L6(e.center):void 0});case`Mirror`:return r3(z6(e.target),{normal:e.normal?L6(e.normal):void 0,at:e.at?L6(e.at):void 0});case`Compound`:return i3(e.children.map(z6).filter(e=>e.kind!==`Empty`));case`Instance`:return a3(z6(e.source),e.placements,e.fuse)}}function B6(e,t,n){let r=z6(e),i=z6(t);return r.kind===`Empty`?i:i.kind===`Empty`?r:J4(r,i,n)}function V6(e,t,n){let r=z6(e),i=z6(t);return i.kind===`Empty`||r.kind===`Empty`?r:Y4(r,i,n)}function H6(e,t,n){let r=z6(e),i=z6(t);return r.kind===`Empty`?r:i.kind===`Empty`?i:X4(r,i,n)}function U6(e,t){let n=e.map(z6).filter(e=>e.kind!==`Empty`);return n.length===0?W4():n.length===1?n[0]:Z4(n,t)}function W6(e,t,n){let r=z6(e);if(r.kind===`Empty`)return r;let i=t.map(z6).filter(e=>e.kind!==`Empty`);return i.length===0?r:Q4(r,i,n)}function G6(e,t){let n=z6(e),r=L6(t);if(r.kind!==`Vec3Lit`)return e3(n,r);let[i,a,o]=r.value;if(i===0&&a===0&&o===0)return n;if(n.kind===`Translate`){let e=L6(n.vector);if(e.kind===`Vec3Lit`)return e3(n.target,[e.value[0]+i,e.value[1]+a,e.value[2]+o])}return e3(n,r)}function K6(e,t,n){return q6(e,t,n)}function q6(e,t,n){return t(e)?n:J6(e,t,n)}function J6(e,t,n){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return e;case`Fuse`:return J4(q6(e.a,t,n),q6(e.b,t,n),e.tolerance);case`Cut`:return Y4(q6(e.a,t,n),q6(e.b,t,n),e.tolerance);case`Intersect`:return X4(q6(e.a,t,n),q6(e.b,t,n),e.tolerance);case`FuseAll`:return Z4(e.shapes.map(e=>q6(e,t,n)),e.tolerance);case`CutAll`:return Q4(q6(e.base,t,n),e.tools.map(e=>q6(e,t,n)),e.tolerance);case`Translate`:return e3(q6(e.target,t,n),e.vector);case`Rotate`:return t3(q6(e.target,t,n),e.angle,{axis:e.axis,at:e.at});case`Scale`:return n3(q6(e.target,t,n),e.factor,{center:e.center});case`Mirror`:return r3(q6(e.target,t,n),{normal:e.normal,at:e.at});case`Compound`:return i3(e.children.map(e=>q6(e,t,n)));case`Instance`:return a3(q6(e.source,t,n),e.placements,e.fuse)}}function Y6(e,t){t(e);for(let n of X6(e))Y6(n,t)}function X6(e){switch(e.kind){case`Box`:case`Sphere`:case`Cylinder`:case`Cone`:case`Torus`:case`Polygon`:case`Circle`:case`Line`:case`Vertex`:case`Empty`:return[];case`Fuse`:case`Cut`:case`Intersect`:return[e.a,e.b];case`FuseAll`:return e.shapes;case`CutAll`:return[e.base,...e.tools];case`Translate`:case`Rotate`:case`Scale`:case`Mirror`:return[e.target];case`Compound`:return e.children;case`Instance`:return[e.source]}}function Z6(e){let t=0;return Y6(e,()=>{t++}),t}var Q6=IX({CSG_VERSION:()=>1,Evaluator:()=>K3,add:()=>u4,asScalarExpr:()=>f4,asVec2Expr:()=>h4,asVec3Expr:()=>m4,binOp:()=>o4,box:()=>P4,buildVec:()=>l4,circle:()=>B4,component:()=>c4,compound:()=>i3,cone:()=>L4,cut:()=>Y4,cutAll:()=>Q4,cylinder:()=>I4,emptyFace:()=>G4,emptySolid:()=>W4,emptyWire:()=>K4,foldExpr:()=>L6,forEachNode:()=>Y6,fromJSON:()=>s6,fuse:()=>J4,fuseAll:()=>Z4,instance:()=>a3,intersect:()=>X4,line:()=>V4,mirror:()=>r3,mul:()=>d4,nodeCount:()=>Z6,numLit:()=>n4,optimize:()=>I6,outputKindOf:()=>o3,param:()=>a4,polygon:()=>z4,replaceNode:()=>K6,rotate:()=>t3,scale:()=>n3,sphere:()=>F4,toJSON:()=>J3,torus:()=>R4,translate:()=>e3,unaryOp:()=>s4,vec2Lit:()=>i4,vec3Lit:()=>r4,vertex:()=>H4,withEvaluator:()=>q3});export{_R as BaseSketcher2d,vR as BlueprintSketcher,r as BrepBugError,M as BrepErrorCode,x0 as BrepWrapperError,Ry as BrepkitAdapter,qK as CompoundSketch,o as DEFAULT_CAPABILITIES,JE as DEG2RAD,XT as DisposalScope,a as EXACT_BREP_CAPABILITIES,Eq as FaceSketcher,G as HASH_CODE_MAX,qa as OK,Ka as OcctWasmAdapter,YE as RAD2DEG,lq as Sketch,Tq as Sketcher,uq as Sketches,YP as addChild,VP as addHoles,EF as addJoint,r1 as addMate,sI as addStep,sN as adjacentFaces,no as all,Za as andThen,zX as applyGlue,F1 as applyMatrix,Wk as approximateCurve,oE as as2D,aE as as3D,oO as asTopo,SN as assignRoles,fM as autoHeal,OP as bezier,wY as blueprintToDXF,rj as booleanPipeline,A2 as booleans,v0 as boss,hP as box,DP as bsplineApprox,i as bug,Sq as cameraFromPlane,xq as cameraLookAt,mN as captureHint,fO as cast,VE as castShape,HE as castShape3D,Z1 as chamfer,xj as chamferDistAngleShape,Wj as chamferWithEvolution,o1 as checkAllInterferences,Fj as checkBoolean,a1 as checkInterference,SP as circle,KP as circularPattern,DO as classifyPointOnFace,eA as clearMeshCache,P1 as clone,hE as closedWire,mo as collect,tF as collectShapes,rk as colorFaces,nk as colorShape,SM as complexExtrude,xk as composeTransforms,LP as compound,oq as compoundSketchExtrude,iq as compoundSketchFace,cq as compoundSketchLoft,sq as compoundSketchRevolve,Eo as computationError,u$ as computeStraightSkeleton,vP as cone,I2 as construction,WQ as convexHull,CR as cornerFinder,eF as countNodes,UP as createAssembly,JP as createAssemblyNode,RJ as createBlueprint,bq as createCamera,jE as createCompound,zJ as createCompoundBlueprint,tP as createDerivedFaceRef,KM as createDistanceQuery,TE as createEdge,RN as createEdgeRef,DE as createFace,KT as createHandle,oI as createHistory,YT as createKernelHandle,tA as createMeshCache,$D as createNamedPlane,OX as createOperationRegistry,ZD as createPlane,CN as createRef,mI as createRegistry,OE as createShell,kE as createSolid,bX as createTaskQueue,wE as createVertex,KN as createVertexRef,EE as createWire,DX as createWorkerClient,NX as createWorkerHandler,PX as createWorkerPool,Q6 as csg,No as currentQuality,AJ as curve2dBoundingBox,LJ as curve2dDistanceFrom,jJ as curve2dFirstPoint,IJ as curve2dIsOnCurve,MJ as curve2dLastPoint,PJ as curve2dParameter,NJ as curve2dSplitAt,FJ as curve2dTangentAt,Lk as curveAxis,Nk as curveEndPoint,Rk as curveIsClosed,zk as curveIsPeriodic,Ik as curveLength,Bk as curvePeriod,Pk as curvePointAt,Mk as curveStartPoint,Fk as curveTangentAt,z1 as cut,lz as cut2D,V1 as cutAll,Ej as cutAllBisect,QR as cutBlueprints,Vj as cutWithEvolution,gP as cylinder,yF as cylindricalJoint,pN as defaultScorer,SX as dequeueTask,o0 as describe,rJ as deserializeDrawing,xI as deserializeHistory,mO as deserializeShape,uO as downcast,t0 as draft,aJ as draw,uJ as drawCircle,dJ as drawEllipse,vJ as drawFaceOutline,hJ as drawParametricFunction,mJ as drawPointsInterpolation,fJ as drawPolysides,_J as drawProjection,sJ as drawRectangle,oJ as drawRoundedRectangle,cJ as drawSingleCircle,lJ as drawSingleEllipse,pJ as drawText,wJ as drawingChamfer,xJ as drawingCut,CJ as drawingFillet,bJ as drawingFuse,SJ as drawingIntersect,yJ as drawingToSketchOnPlane,g0 as drill,qI as edgeFinder,rN as edgesOfFace,CP as ellipse,EP as ellipseArc,bP as ellipsoid,xX as enqueueTask,k as err,WP as exportAssemblySTEP,CY as exportDXF,uY as exportGlb,lY as exportGltf,lA as exportIGES,$J as exportOBJ,sA as exportSTEP,sX as exportSTEPConfigured,cA as exportSTL,UY as exportThreeMF,tI as exportURDF,d0 as extrude,AM as extrudeAll,MP as face,EO as faceAxis,TO as faceCenter,XI as faceFinder,_O as faceGeomType,vO as faceOrientation,tN as facesOfEdge,nN as facesOfVertex,MZ as fieldBoolean,IZ as fieldContour,NZ as fieldOffset,FZ as fieldReinit,PZ as fieldShell,PA as fill,NP as filledFace,X1 as fillet,Uj as filletWithEvolution,GO as findFacesByTag,QP as findNode,lI as findStep,hM as fixSelfIntersection,pM as fixShape,Qa as flatMap,ao as flatten,yO as flipFaceOrientation,Hk as flipOrientation,pX as fontMetrics,AF as forwardKinematics,c0 as fromBREP,jQ as fromKernelDir,AQ as fromKernelPnt,kQ as fromKernelVec,so as fromNullable,R1 as fuse,sz as fuse2D,B1 as fuseAll,Aj as fuseAllBisect,ZR as fuseBlueprints,Bj as fuseWithEvolution,G0 as gearGeometry,ZX as getActiveVoxelId,wD as getBounds,BJ as getBounds2D,gD as getCompSolids,jk as getCurveType,BT as getDisposalStats,uD as getEdges,ak as getFaceColor,MO as getFaceOrigins,KO as getFaceTags,dD as getFaces,pq as getFont,Ek as getHashCode,uI as getHistoryShape,H as getKernel,DT as getKernelCapabilities,jT as getKernelTier,Sj as getNurbsCurveData,Cj as getNurbsSurfaceData,Vk as getOrientation,VJ as getOrientation2D,Ho as getPerformanceStats,ik as getShapeColor,uE as getShapeKind,hD as getShells,$I as getSingleFace,mD as getSolids,gO as getSurfaceType,JO as getTagMetadata,pD as getVertices,XX as getVoxel,fD as getWires,qP as gridPattern,DM as guidedSweep,n0 as heal,lM as healFace,cM as healSolid,uM as healWire,wP as helix,UQ as hull,d1 as importDXF,O1 as importGLB,uX as importIGES,h1 as importOBJ,cX as importSTEP,lX as importSTL,oX as importSVG,aX as importSVGPathD,D1 as importThreeMF,aI as importURDF,FT as init,ST as initFromManifold,NT as initFromOC,QX as initVoxel,AO as innerWires,C$ as instance,T$ as instanceCount,w$ as instanceGrid,O$ as instancedMesh,Uk as interpolateCurve,H1 as intersect,uz as intersect2D,$R as intersectBlueprints,Hj as intersectWithEvolution,lD as invalidateShapeCache,WF as inverseKinematics,P2 as io,Do as ioError,iE as is2D,rE as is3D,_X as isBatchRequest,VX as isChamferRadius,dE as isClosedWire,pO as isCompSolid,RE as isCompound,iP as isDerivedFaceRef,gX as isDisposeRequest,NE as isEdge,aP as isEdgeRef,u0 as isEmpty,kk as isEqualShape,A as isErr,yX as isErrorResponse,FE as isFace,sP as isFaceRef,HX as isFilletRadius,mX as isInitRequest,HJ as isInside2D,S$ as isInstanced,cP as isLineageRef,nE as isLive,pE as isManifoldShell,BX as isNumber,Ja as isOk,hX as isOperationRequest,fE as isOrientedFace,yE as isPlanarFace,bE as isPlanarWire,_q as isProjectionPlane,wX as isQueueEmpty,Ok as isSameShape,BE as isShape1D,zE as isShape3D,IE as isShell,LE as isSolid,vX as isSuccessResponse,l0 as isValid,mE as isValidSolid,ME as isVertex,oP as isVertexRef,PE as isWire,CD as iterCompSolids,_D as iterEdges,vD as iterFaces,SD as iterShells,xD as iterSolids,cO as iterTopo,bD as iterVertices,yD as iterWires,KF as jointTrajectory,TF as jointTransform,YF as jointsFromDH,QE as kernelCall,$E as kernelCallRaw,eD as kernelCallScoped,N as kernelError,CQ as latticeInfill,wQ as latticeInfillShape,xP as line,GP as linearPattern,fq as loadFont,L1 as locate,p0 as loft,MM as loftAll,Iq as makeBaseBox,m2 as makeExternalGear,h2 as makeInternalGear,tO as makePlane,_2 as makePlanetaryGear,yq as makeProjectedEdges,_E as manifoldShell,Ya as map,oo as mapBoth,Xa as mapErr,po as match,E$ as materialize,HM as measureArea,qM as measureCurvatureAt,JM as measureCurvatureAtMid,WM as measureDistance,GM as measureDistanceProps,UM as measureLength,BM as measureLinearProps,zM as measureSurfaceProps,VM as measureVolume,RM as measureVolumeProps,N2 as measurement,jF as mechanismDOF,i0 as mesh,a0 as meshEdges,mA as meshLODs,gA as meshLODsProgressive,uA as meshMultiLOD,JQ as minkowski,M1 as mirror,qJ as mirror2D,OJ as mirrorDrawing,y0 as mirrorJoin,j2 as modifiers,yI as modifyStep,To as moduleInitError,EM as multiSectionSweep,wO as normalAt,$1 as offset,zP as offsetFace,mZ as offsetMesh,_Z as offsetShape,Gk as offsetWire2D,O as ok,$a as or,eo as orElse,sR as organiseBlueprints,gE as orientedFace,OO as outerWire,L2 as patterns,CX as pendingCount,_o as pipeline,iO as pivotPlane,xE as planarFace,bF as planarJoint,SE as planarWire,l2 as planetPlacements,_0 as pocket,xO as pointOnSurface,rZ as pointsInside,FP as polygon,YQ as polyhedron,Mq as polysideInnerRadius,wR as polysidesBlueprint,Kj as positionOnCurve,PT as prewarm,k2 as primitives,vF as prismaticJoint,Cq as projectEdges,CO as projectPointOnFace,F2 as query,Oo as queryError,b0 as rectangularPattern,kX as registerHandler,CT as registerKernel,AT as registerKernelTier,hI as registerOperation,pI as registerShape,YX as registerVoxel,TX as rejectAll,XP as removeChild,kO as removeHolesFromFace,oZ as repairMesh,vI as replayFrom,_I as replayHistory,VT as resetDisposalStats,Uo as resetPerformanceStats,gk as resize,$ as resolve,k1 as resolve3D,nP as resolveDerivedFaceRef,ND as resolveDirection,zN as resolveEdgeRef,uP as resolveLineageRef,eO as resolvePlane,kN as resolveRef,fP as resolveRefIn,mP as resolveRefParams,qN as resolveVertexRef,kJ as reverseCurve,_F as revoluteJoint,f0 as revolve,v$ as roof,j1 as rotate,GJ as rotate2D,EJ as rotateDrawing,TR as roundedRectangleBlueprint,N1 as scale,KJ as scale2D,DJ as scaleDrawing,QZ as sdfBox,nQ as sdfCapsule,tQ as sdfCone,eQ as sdfCylinder,mQ as sdfFieldAxialRamp,_Q as sdfFieldClamp,pQ as sdfFieldConst,gQ as sdfFieldFromSdf,hQ as sdfFieldRadialRamp,cQ as sdfLattice,iQ as sdfPlane,$Z as sdfRoundedBox,ZZ as sdfSphere,lQ as sdfStrutLattice,oQ as sdfSweep,rQ as sdfTorus,U1 as section,W1 as sectionToFace,bI as serializeHistory,CF as setJointValue,SF as setJointValues,jO as setShapeOrigin,qO as setTagMetadata,BP as sewShells,z0 as shape,cZ as shapeToMeshInput,lO as shapeType,lN as sharedEdges,Q1 as shell,hZ as shellMesh,vZ as shellShape,Gj as shellWithEvolution,r0 as simplify,Dq as sketchCircle,Oq as sketchEllipse,eq as sketchExtrude,ZK as sketchFace,Nq as sketchFaceOffset,Fq as sketchHelix,nq as sketchLoft,XJ as sketchOnFace2D,YJ as sketchOnPlane2D,Pq as sketchParametricFunction,jq as sketchPolysides,kq as sketchRectangle,$K as sketchRevolve,Aq as sketchRoundedRectangle,tq as sketchSweep,dX as sketchText,QK as sketchWires,wo as sketcherStateError,K1 as slice,RP as solid,mM as solidFromShell,i1 as solveAssembly,_P as sphere,xF as sphericalJoint,G1 as split,dI as stepCount,fI as stepsFrom,JJ as stretch2D,PP as subFace,xM as supportExtrude,vT as supportsConstraintSketch,_T as supportsProjection,RQ as surfaceFromGrid,VQ as surfaceFromImage,bM as sweep,WO as tagFaces,kP as tangentArc,ro as tap,io as tapErr,hq as textBlueprints,fX as textMetrics,e0 as thicken,SI as thread,TP as threePointArc,s0 as toBREP,gj as toBufferGeometryData,_j as toGroupedBufferGeometryData,EQ as toKernelVec,yj as toLODGeometryData,bj as toLODGeometryLevels,vj as toLineGeometryData,UJ as toSVGPathD,jD as toVec2,AD as toVec3,yP as torus,TQ as tpmsLattice,I1 as transformCopy,M2 as transforms,A1 as translate,WJ as translate2D,TJ as translateDrawing,rO as translatePlane,ho as tryCatch,go as tryCatchAsync,CM as twistExtrude,Co as typeCastError,cI as undoLast,ko as unsupportedError,j as unwrap,fo as unwrapErr,lo as unwrapOr,uo as unwrapOrElse,ZP as updateNode,TN as updateRoles,bO as uvBounds,SO as uvCoordinates,vE as validSolid,X0 as validatePlanetary,P as validationError,oM as variableFillet,PD as vecAdd,KD as vecAngle,zD as vecCross,HD as vecDistance,RD as vecDot,WD as vecEquals,GD as vecIsZero,BD as vecLength,VD as vecLengthSq,LD as vecNegate,UD as vecNormalize,qD as vecProjectToPlane,XD as vecRepr,JD as vecRotate,ID as vecScale,FD as vecSub,IP as vertex,GX as vertexFinder,kD as vertexPosition,oN as verticesOfEdge,iN as verticesOfFace,gZ as voxelBoolean,jZ as voxelBooleanField,RZ as voxelBooleanFieldShapes,yZ as voxelBooleanShapes,AZ as voxelField,LZ as voxelFieldFromShape,$P as walkAssembly,nZ as windingNumbers,AP as wire,QI as wireFinder,jP as wireLoop,aN as wiresOfFace,ET as withKernel,PQ as withKernelDir,NQ as withKernelPnt,MQ as withKernelVec,OT as withQuality,ZT as withScope,eE as withScopeResult,tE as withScopeResultAsync,MT as withTier,to as zipResults};
|